[INFO] abcdesktop install script namespace=abcdesktop
+[OK] kubectl version
+[OK] openssl version
+[OK] kubectl create namespace abcdesktop
+writing RSA key
+writing RSA key
+[OK] abcdesktop_jwt_desktop_payload keys created
+writing RSA key
+[OK] abcdesktop_jwt_desktop_signing keys create
+writing RSA key
+[OK] abcdesktop_jwt_user_signing keys create
+[OK] create secret generic abcdesktopjwtdesktoppayload
+[OK] create secret generic abcdesktopjwtdesktopsigning
+[OK] create secret generic abcdesktopjwtusersigning
+[OK] label secret abcdesktopjwtdesktoppayload
+[OK] label secret abcdesktopjwtdesktopsigning
+[OK] label secret abcdesktopjwtusersigning
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3
+[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop
+[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config
+role.rbac.authorization.k8s.io/pyos-role created
+rolebinding.rbac.authorization.k8s.io/pyos-rbac created
+serviceaccount/pyos-serviceaccount created
+configmap/configmap-mongodb-scripts created
+secret/secret-mongodb created
+deployment.apps/mongodb-od created
+deployment.apps/memcached-od created
+deployment.apps/router-od created
+deployment.apps/nginx-od created
+deployment.apps/speedtest-od created
+deployment.apps/pyos-od created
+deployment.apps/console-od created
+deployment.apps/openldap-od created
+endpoints/desktop created
+service/desktop created
+service/memcached created
+service/mongodb created
+service/speedtest created
+service/pyos created
+service/console created
+service/http-router created
+service/website created
+service/openldap created
+[INFO] waiting for deployment/console-od available
+[OK] deployment.apps/console-od condition met
+[INFO] waiting for deployment/memcached-od available
+[OK] deployment.apps/memcached-od condition met
+[INFO] waiting for deployment/mongodb-od available
+[OK] deployment.apps/mongodb-od condition met
+[INFO] waiting for deployment/nginx-od available
+[OK] deployment.apps/nginx-od condition met
+[INFO] waiting for deployment/openldap-od available
+[OK] deployment.apps/openldap-od condition met
+[INFO] waiting for deployment/pyos-od available
+[OK] deployment.apps/pyos-od condition met
+[INFO] waiting for deployment/router-od available
+[OK] deployment.apps/router-od condition met
+[INFO] waiting for deployment/speedtest-od available
+[OK] deployment.apps/speedtest-od condition met
+[INFO] list all pods in namespace abcdesktop
+NAME READY STATUS RESTARTS AGE
+console-od-844c749f85-vbbb7 1/1 Running 0 32s
+memcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s
+mongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s
+nginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s
+openldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s
+pyos-od-8d4988b56-vcd7z 1/1 Running 0 32s
+router-od-f5458658-b52hj 1/1 Running 0 33s
+speedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s
+[INFO] Setup done
+[INFO] Checking the service url on http://localhost:30443
+[INFO] service status is down
+[INFO] Looking for a free TCP port from 30443
+[OK] Get a free TCP port from 30443
+
+[INFO] If you're using a cloud provider
+[INFO] Forwarding abcdesktop service for you on port=30443
+[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'
+[OK] Port-Forward successful
+[OK] Please open your web browser and connect to
+
+[INFO] http://localhost:30443/
+
+
The command above downloads the latest release (numerically) of abcdesktop.io.
+The quick installation process runs the all commands step by step:
+
+
create the abcdesktop namespace
+
create clusterRole and service account
+
build all rsa keys pairs for jwt signing and payload encryption
+
download the default configuration file od.config
+
create all services, deployments, secrets and configmaps
+
fetch pod user's container images
+
+
Change the default namespace
+
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop
+[OK] kubectl version
+[OK] openssl version
+[OK] kubectl create namespace superdesktop
+[OK] create secret generic abcdesktopjwtdesktoppayload
+[OK] create secret generic abcdesktopjwtdesktopsigning
+[OK] create secret generic abcdesktopjwtusersigning
+[OK] label secret abcdesktopjwtdesktoppayload
+[OK] label secret abcdesktopjwtdesktopsigning
+[OK] label secret abcdesktopjwtusersigning
+[OK] use local file abcdesktop.yaml
+[OK] use local file od.config
+[OK] updated abcdesktop.yaml file with new namespace superdesktop
+[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local
+[OK] updated od.config file with new namespace superdesktop
+[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local
+[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop
+[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config
+[OK] default account is created
+[OK] role.rbac.authorization.k8s.io/pyos-role created
+rolebinding.rbac.authorization.k8s.io/pyos-rbac created
+serviceaccount/pyos-serviceaccount created
+configmap/configmap-mongodb-scripts created
+secret/secret-mongodb created
+deployment.apps/mongodb-od created
+deployment.apps/memcached-od created
+deployment.apps/router-od created
+deployment.apps/nginx-od created
+deployment.apps/speedtest-od created
+deployment.apps/pyos-od created
+deployment.apps/console-od created
+deployment.apps/openldap-od created
+endpoints/desktop created
+service/desktop created
+service/memcached created
+service/mongodb created
+service/speedtest created
+service/pyos created
+service/console created
+service/http-router created
+service/website created
+service/openldap created
+[OK] pyos-serviceaccount account is created
+[INFO] waiting for deployment/console-od available
+[OK] deployment.apps/console-od condition met
+[INFO] waiting for deployment/memcached-od available
+[OK] deployment.apps/memcached-od condition met
+[INFO] waiting for deployment/mongodb-od available
+[OK] deployment.apps/mongodb-od condition met
+[INFO] waiting for deployment/nginx-od available
+[OK] deployment.apps/nginx-od condition met
+[INFO] waiting for deployment/openldap-od available
+[OK] deployment.apps/openldap-od condition met
+[INFO] waiting for deployment/pyos-od available
+[OK] deployment.apps/pyos-od condition met
+[INFO] waiting for deployment/router-od available
+[OK] deployment.apps/router-od condition met
+[INFO] waiting for deployment/speedtest-od available
+[OK] deployment.apps/speedtest-od condition met
+[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready
+[OK] pod/console-od-79bf9bf475-gbb62 condition met
+[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready
+[OK] pod/memcached-od-d4b6b6867-c8b4p condition met
+[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready
+[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met
+[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready
+[OK] pod/nginx-od-57dccb8cf9-txgzc condition met
+[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready
+[OK] pod/openldap-od-6955699d5-qhjzr condition met
+[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready
+[OK] pod/pyos-od-777747f64b-r87x5 condition met
+[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready
+[OK] pod/router-od-59d67d664f-f56m8 condition met
+[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready
+[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met
+[INFO] list all pods in namespace superdesktop
+NAME READY STATUS RESTARTS AGE
+console-od-79bf9bf475-gbb62 1/1 Running 0 12s
+memcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s
+mongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s
+nginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s
+openldap-od-6955699d5-qhjzr 1/1 Running 0 12s
+pyos-od-777747f64b-r87x5 1/1 Running 0 13s
+router-od-59d67d664f-f56m8 1/1 Running 0 13s
+speedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s
+[INFO] Setup done
+[INFO] Checking the service url on http://localhost:30443
+
+[OK] Please open your web browser and connect to http://localhost:30443/
+
+
Manually installation step by step (Linux, macOS or Windows)
+
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
+
Install abcdesktop
+
Step 1: Create abcdesktop namespace
+
We will create the abcdesktop namespace and set it as default :
+
kubectl create namespace abcdesktop
+
+
You should read on the standard output
+
namespace/abcdesktop created
+
+
Step 2: Secure abcdesktop JWT exchange
+
User JWT is signed. So we need to define a (private, public) RSA keys for signing.
+ Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
+
+
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
+
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
+
+
+
Please use the payload private as private key, and the payload public as private key.
+Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
+
+
+
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
+
+
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
+
+
+
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
+
+
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
+
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
+
+
+
+
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
+
The following commands will let you create all necessary keys :
role.rbac.authorization.k8s.io/pyos-role created
+rolebinding.rbac.authorization.k8s.io/pyos-rbac created
+serviceaccount/pyos-serviceaccount created
+configmap/configmap-mongodb-scripts created
+secret/secret-mongodb created
+deployment.apps/mongodb-od created
+deployment.apps/memcached-od created
+deployment.apps/router-od created
+deployment.apps/nginx-od created
+deployment.apps/speedtest-od created
+deployment.apps/pyos-od created
+deployment.apps/console-od created
+deployment.apps/openldap-od created
+endpoints/desktop created
+service/desktop created
+service/memcached created
+service/mongodb created
+service/speedtest created
+service/pyos created
+service/console created
+service/http-router created
+service/website created
+service/openldap created
+
+
Verify Pods
+
Once the pods are created, all pods should be in Running status.
+For the first time, please wait for downloading all container images.
+It can take a while.
Open your navigator to http://[your-ip-hostname]:30443/
+
abcdesktop homepage should be available :
+
+
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
+
+
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
+
+
Also, you can run again the command
+
kubectl get pods -l type=x11server -n abcdesktop
+
+
You should see that the anonymous-XXXXX pod have been created and is Running
+
NAME READY STATUS RESTARTS AGE
+anonymous-c44fc 4/4 Running 0 116s
+
+
Great you have installed abcdesktop.io.
+You just need a web browser to reach your web workspace. It' now time to add some container applications.
+Read the next chapter to add applications
This script starts abcdesktop application on an empty desktop. Pod is created to ask Kubernetes for pulling containers image.
+
NAME READY STATUS RESTARTS AGE
+daemonset-nginx-dqxzx 1/1 Running 0 100m
+daemonset-pyos-rdwws 1/1 Running 0 100m
+memcached-od-bdcbbcb74-xbg8x 1/1 Running 0 100m
+mongodb-od-6484d8bc67-9xsgm 1/1 Running 0 100m
+openldap-od-795c55f6db-pb68k 1/1 Running 0 100m
+pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 1/1 Running 0 5s
+pull-calc-abcinst-57622131ac1ce4b37d5cec51ee7f0071c460293158a4 1/1 Running 0 3s
+pull-firefox-abcinst-d2872d0d272a3a02606b4877c12e832755ba1a378 0/1 ContainerCreating 0 1s
+pull-gimp-abcinst-051fefa55d97338653a58e86ccdd5f1a3e66f7f05017 0/1 ContainerCreating 0 0s
+pull-impress-abcinst-f74fed932051c2760b3fd69f4ef475e34ad1a8a49 0/1 ContainerCreating 0 2s
+pull-writer-abcinst-cfe1a4f74d19fbe49d86d211f99d005532b6cf7c87 1/1 Running 0 3s
+pull-xterm-abcinst-0e802cfa8addb4648f843869325f3413d544bb9eae8 1/1 Running 0 4s
+speedtest-od-5565dfdc67-vdwcl 1/1 Running 0 100m
+
+
list of created pods for pulling is pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274
+
pull-calc-abcinst-57622131ac1ce4b37d5cec51ee7f0071c460293158a4
+pull-firefox-abcinst-d2872d0d272a3a02606b4877c12e832755ba1a378
+pull-gimp-abcinst-051fefa55d97338653a58e86ccdd5f1a3e66f7f05017
+pull-impress-abcinst-f74fed932051c2760b3fd69f4ef475e34ad1a8a49
+pull-writer-abcinst-cfe1a4f74d19fbe49d86d211f99d005532b6cf7c87
+pull-xterm-abcinst-0e802cfa8addb4648f843869325f3413d544bb9eae8
+pod/pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 condition met
+pod/pull-calc-abcinst-57622131ac1ce4b37d5cec51ee7f0071c460293158a4 condition met
+pod/pull-firefox-abcinst-d2872d0d272a3a02606b4877c12e832755ba1a378 condition met
+pod/pull-gimp-abcinst-051fefa55d97338653a58e86ccdd5f1a3e66f7f05017 condition met
+pod/pull-impress-abcinst-f74fed932051c2760b3fd69f4ef475e34ad1a8a49 condition met
+pod/pull-writer-abcinst-cfe1a4f74d19fbe49d86d211f99d005532b6cf7c87 condition met
+pod/pull-xterm-abcinst-0e802cfa8addb4648f843869325f3413d544bb9eae8 condition met
+
+
Quick application install (Windows)
+
+
Quick installation can be run on Windows operation system.
+
+
Download and execute the pullapps-3.5.ps1 script :
[INFO] abcdesktop install script namespace=abcdesktop
+[OK] kubectl version
+[OK] openssl version
+[OK] kubectl create namespace abcdesktop
+writing RSA key
+writing RSA key
+[OK] abcdesktop_jwt_desktop_payload keys created
+writing RSA key
+[OK] abcdesktop_jwt_desktop_signing keys create
+writing RSA key
+[OK] abcdesktop_jwt_user_signing keys create
+[OK] create secret generic abcdesktopjwtdesktoppayload
+[OK] create secret generic abcdesktopjwtdesktopsigning
+[OK] create secret generic abcdesktopjwtusersigning
+[OK] label secret abcdesktopjwtdesktoppayload
+[OK] label secret abcdesktopjwtdesktopsigning
+[OK] label secret abcdesktopjwtusersigning
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3
+[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop
+[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config
+role.rbac.authorization.k8s.io/pyos-role created
+rolebinding.rbac.authorization.k8s.io/pyos-rbac created
+serviceaccount/pyos-serviceaccount created
+configmap/configmap-mongodb-scripts created
+secret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created
+deployment.apps/speedtest-od created
+deployment.apps/pyos-od created
+deployment.apps/console-od created
+deployment.apps/openldap-od created
+endpoints/desktop created
+service/desktop created
+service/memcached created
+service/mongodb created
+service/speedtest created
+service/pyos created
+service/console created
+service/http-router created
+service/website created
+service/openldap created
+[INFO] waiting for deployment/console-od available
+[OK] deployment.apps/console-od condition met
+[INFO] waiting for deployment/memcached-od available
+[OK] deployment.apps/memcached-od condition met
+[INFO] waiting for deployment/mongodb-od available
+[OK] deployment.apps/mongodb-od condition met
+[INFO] waiting for deployment/nginx-od available
+[OK] deployment.apps/nginx-od condition met
+[INFO] waiting for deployment/openldap-od available
+[OK] deployment.apps/openldap-od condition met
+[INFO] waiting for deployment/pyos-od available
+[OK] deployment.apps/pyos-od condition met
+[INFO] waiting for deployment/router-od available
+[OK] deployment.apps/router-od condition met
+[INFO] waiting for deployment/speedtest-od available
+[OK] deployment.apps/speedtest-od condition met
+[INFO] list all pods in namespace abcdesktop
+NAME READY STATUS RESTARTS AGE
+console-od-844c749f85-pghrs 1/1 Running 0 12s
+memcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s
+mongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s
+nginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s
+openldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s
+pyos-od-8d4988b56-7bg5z 1/1 Running 0 12s
+router-od-f5458658-znwcg 1/1 Running 0 12s
+speedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s
+[INFO] Setup done
+[INFO] Checking the service url on http://localhost:30443
+[INFO] service status is down
+[INFO] Looking for a free TCP port from 30443
+[OK] Get a free TCP port from 30443
+
+[INFO] If you're using a cloud provider
+[INFO] Forwarding abcdesktop service for you on port=30443
+[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'
+[OK] Port-Forward successful
+[OK] Please open your web browser and connect to
+
+[INFO] http://localhost:30443/
+
+
You can open a web browser and go to the http://localhost:30443/
+
Change the default namespace
+
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop
+[OK] kubectl version
+[OK] openssl version
+[OK] kubectl create namespace superdesktop
+writing RSA key
+writing RSA key
+[OK] abcdesktop_jwt_desktop_payload keys created
+writing RSA key
+[OK] abcdesktop_jwt_desktop_signing keys create
+writing RSA key
+[OK] abcdesktop_jwt_user_signing keys create
+[OK] create secret generic abcdesktopjwtdesktoppayload
+[OK] create secret generic abcdesktopjwtdesktopsigning
+[OK] create secret generic abcdesktopjwtusersigning
+[OK] label secret abcdesktopjwtdesktoppayload
+[OK] label secret abcdesktopjwtdesktopsigning
+[OK] label secret abcdesktopjwtusersigning
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml
+[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3
+[OK] updated abcdesktop.yaml file with new namespace superdesktop
+[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local
+[OK] updated od.config file with new namespace superdesktop
+[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local
+[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop
+[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config
+role.rbac.authorization.k8s.io/pyos-role created
+rolebinding.rbac.authorization.k8s.io/pyos-rbac created
+serviceaccount/pyos-serviceaccount created
+configmap/configmap-mongodb-scripts created
+secret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created
+deployment.apps/speedtest-od created
+deployment.apps/pyos-od created
+deployment.apps/console-od created
+deployment.apps/openldap-od created
+endpoints/desktop created
+service/desktop created
+service/memcached created
+service/mongodb created
+service/speedtest created
+service/pyos created
+service/console created
+service/http-router created
+service/website created
+service/openldap created
+[INFO] waiting for deployment/console-od available
+[OK] deployment.apps/console-od condition met
+[INFO] waiting for deployment/memcached-od available
+[OK] deployment.apps/memcached-od condition met
+[INFO] waiting for deployment/mongodb-od available
+[OK] deployment.apps/mongodb-od condition met
+[INFO] waiting for deployment/nginx-od available
+[OK] deployment.apps/nginx-od condition met
+[INFO] waiting for deployment/openldap-od available
+[OK] deployment.apps/openldap-od condition met
+[INFO] waiting for deployment/pyos-od available
+[OK] deployment.apps/pyos-od condition met
+[INFO] waiting for deployment/router-od available
+[OK] deployment.apps/router-od condition met
+[INFO] waiting for deployment/speedtest-od available
+[OK] deployment.apps/speedtest-od condition met
+[INFO] list all pods in namespace superdesktop
+NAME READY STATUS RESTARTS AGE
+console-od-844c749f85-zqbdq 1/1 Running 0 22s
+memcached-od-d4b6b6867-wn7r4 1/1 Running 0 22s
+mongodb-od-5d996fd57b-xsnkf 1/1 Running 0 22s
+nginx-od-57dccb8cf9-z68q9 1/1 Running 0 22s
+openldap-od-6955699d5-rl8rd 1/1 Running 0 21s
+pyos-od-7f5f8d66b5-q686l 1/1 Running 0 22s
+router-od-c9fd4c987-xvcbq 1/1 Running 0 22s
+speedtest-od-67db77f86f-6fftb 1/1 Running 0 22s
+[INFO] Setup done
+[INFO] Checking the service url on http://localhost:30443
+[INFO] service status is down
+[INFO] Looking for a free TCP port from 30443
+[OK] Get a free TCP port from 30443
+
+[INFO] If you're using a cloud provider
+[INFO] Forwarding abcdesktop service for you on port=30443
+[INFO] For you setup is running the command 'kubectl port-forward nginx-od-57dccb8cf9-z68q9 --address 0.0.0.0 30443:80 -n superdesktop'
+[OK] Port-Forward successful
+[OK] Please open your web browser and connect to
+
+[INFO] http://localhost:30443/
+
+
You can open a web browser and go to the http://localhost:30443/
+
+
+
+
diff --git a/search/search_index.json b/search/search_index.json
index 59558a4f8..5fb26ddea 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"abcdesktop.io is a cloud native desktop service built on and for Kubernetes.","text":"
abcdesktop.io is a cloud native desktop service built on and for Kubernetes. abcdesktop.io is also a complete work environment accessible from a simple HTML 5 web browser, without any installation. Like serverless does, desktopless computing allocates desktop resources on demand. Each user\u2019s application runs as a container to reduce attack surface.
abcdeskop.io is an open source and free solution that offers seamless access to secure desktops and applications on any device, follow the https://github.com/abcdesktopio links.
This flexible working environment simplifies usage like
Telecommuting
Remote virtual desktop
Give temporary access to other contractors or guests
You can discover abcdesktop.io desktopless services on the demo website. https://demo.abcdesktop.io instance is a quick example to illustrate how the abcdesktop.io project works. Your desktopless is ready to run for 10 minutes, and will be terminated by the garbage collector after 10 minutes. It requires an OpenID Connect provider to sign-in like (Google, Facebook, Github). The security policy for Internet network prevents requests from your abcdesktop being allowed. Printer service (using cups) and sound service (using pulseaudio) inside the kubernetes pods are enabled.
To reach the demo website, follow the link https://demo.abcdesktop.io
abcdesktop.io provides a way to run graphics software securely isolated in a container, and use a web browser HTML5 as display device. Because containers are lightweight and run without the extra load of an operating system, you can run many graphical applications on a single kernel or even on a kubernetes cluster.
"},{"location":"#quick-installation-for-kubernetes","title":"Quick installation for kubernetes","text":"
You can watch the youtube video sample. This video describes the Quick installation process.
Download and extract the latest release automatically (Linux or macOS) or read the step by step installation process abcdesktop for kubernetes
curl -sL https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/install-3.2.sh | sh -\n
Here are some of the organizations we know are using abcdesktop.io. If you\u2019re using Abcdesktop and aren\u2019t on this list, please submit a pull request!
Adopters Name Description Public applications repository Embl The European Molecular Biology Laboratory is an intergovernmental organization dedicated to molecular biology research and is supported by 28 member states, one prospect state, and one associate member state https://git.embl.de/ysun/abcdesktop-apps/ Orange Telecommunications operator and digital service provider. Orange serves 287 million customers, individuals, professionals, and large companies Orange uses common public and private business applications"},{"location":"#features","title":"Features","text":"
Native support GNU/Linux X11 applications native support
Support Microsoft Windows applications using Wine
"},{"location":"#supported-web-browser-html","title":"Supported web browser HTML","text":"
abcdesktop.io uses many modern web technologies. However these are the minimum versions we are currently aware of:
Chrome 49,
Firefox 58,
Safari 11,
Opera 36,
Microsoft Edge (based on Chromium)
"},{"location":"#copy-and-paste-features","title":"Copy and Paste features","text":"
To fully use copy and paste features, from your local device to your abcdesktop (and vice versa), choose Chrome, Chromium or Microsoft Edge Chromium. The copy and paste feature is also supported on Firefox with a dedicated abcdesktop extension.
Web browser Clipboard sync Chrome Yes, built in support Chromium Yes, built in support Microsoft Edge Chromium Yes, built in support Firefox Yes, install the dedicated abcdesktop extension Safari No, the clipboard access is not allowed by the user agent or the platform in the current context, possibly because the user denied permission"},{"location":"#not-supported-web-browser","title":"Not supported web browser","text":"
abcdesktop.io does NOT support Microsoft Internet Explorer from version 1.x to 11.x. If you need a Microsoft web browser use Microsoft Edge. Edge is based on the Chromium open-source project. Chromium forms the basis of Google Chrome, so the new Edge feels very similar to Google Chrome.
"},{"location":"#release-history","title":"Release history","text":"Release Status Date Requirements Applications \u00a0Documentation 1.1 deprecated 09/15/2021 dockerd for personnal use and kubernetes An application is a docker container removed 2.9 deprecated 29/08/2022 require kubernetes < 1.24 and dockerd as container engine An application is a pod or a docker container removed 3.0 deprecated 09/03/2022 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container Release 3.1 stable 10/03/2023 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container, change PVC and PV support Release 3.2 stable 01/02/2024 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container, WebRTC sound support Release"},{"location":"#github-repositories","title":"Github repositories","text":"
abcdesktop has 42 repositories available. Follow the code on GitHub https://github.com/abcdesktopio to get the source code.
Here are some of the organizations we know are using abcdesktop.io.
Adopters Name Description Public applications repository Embl The European Molecular Biology Laboratory is an intergovernmental organization dedicated to molecular biology research and is supported by 28 member states, one prospect state, and one associate member state https://git.embl.de/ysun/abcdesktop-apps/ Orange Telecommunications operator and digital service provider. Orange serves 287 million customers, individuals, professionals, and large companies Orange uses common public and private business applications
If you\u2019re using abcdesktop.io and aren\u2019t on this list, please submit a pull request to add entry in this list.
Docker images applications for abcdesktop use docker's LABELS as metadata. To select only abcdesktop applications from standard docker images, all abcdesktop's applications must have a label 'oc.type' set to the value 'app'.
LABEL oc.type=app\n
"},{"location":"applicationsformat/#label-descriptions","title":"Label descriptions","text":"Label name Type Description Sample oc.icon string icon filename use by the web interface for the application, MUST suffix in .svg format writer.svg oc.icondata string icon file SVG data uuencoded PD94b...C9zdmc+Cg== oc.keyword string keywords use by the web application search engine separated by comma(,) firefox,mozilla,web,internet oc.desktopfile string .desktop gnome file name /usr/share/applications/firefox.desktop oc.cat string category use by the web application store, choose one value of the default list [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ] office oc.launch string X11 Windows Class name. It MUST be unique use the command 'wmctrl -lx' to can the right name oc.template string Template name to use FROM in the DockerFile oc.template.gtk.firefox oc.path string Path to the application binary /usr/bin/firefox oc.args string arguments added to the command --open oc.name string Name of the application Firefox oc.displayname string Display Name show by Web interface Firefox oc.type string Always set to the value 'app' app oc.mimetype string MimeType supported by the application separated by semicolon(;) text/html;text/xml;application/xml;application/rss+xml;video/webm oc.showinview string Set to the dock to add this app in dock dock oc.fileextensions string Supported extensions file, separated by semicolon(;) htm;html;xml;gif oc.legacyfileextensions string Legacy file extensions, separated by semicolon(;) htm;html;xml oc.host_config dict dictionary of resources (see resources details) { 'shm_size': '1g' }
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"applicationsformat/#the-inheritance-of-the-images","title":"The inheritance of the images","text":"
All abcdesktop applications use by default the oc.template.gtk images name.
"},{"location":"applicationsformat/#the-inheritance-of-the-classes","title":"The inheritance of the classes.","text":"
By default, oc.templace.gtk is the main image for all applications. For example oc.template.gtk.firefox use the oc.template.gtk image. oc.template.gtk.firefox.acme use the oc.template.gtk.firefox.
The oc.template.gtk.firefox contains the Mozilla Firefox application.
The oc.template.gtk.firefox.acme may contain custom set for Mozilla Firefox application, like Root CA, proxy values or policy.json files for the acme.
pyos is the core abcdesktop service act as a control plane. Pyos is a stateless services, Pyos's roles are :
Authenticate user on authenticate providers
OAuth 2.0 Provider : Google, Facebook, Orange
LDAP and LDAPS
Active Directory
Start/Stop user container in docker mode and Pod in Kubernetes mode
Start/Stop application container
When a new user is authenticated, a dedicated user container is created. When the user starts an application (like LibreOffice for example) a dedicated application container is created.
All applications are containers or pods, and share a graphical socket with the user's container
"},{"location":"buildapplications.wine/","title":"Build abcdesktop docker image for Microsoft Windows using Wine","text":""},{"location":"buildapplications.wine/#requirements","title":"Requirements","text":"
Read the chapter Edit your configuration file in docker mode is mandatory
Read the chapter Build abcdesktop docker image is mandatory.
A running dockerd last version
An access to the docker public registry
An access to the ubuntu repository
Nodejs installed on your host.
abcdesktop can run Microsoft Windows applications using Wine.
"},{"location":"buildapplications.wine/#wine-embedded-in-octemplategtkwine-image","title":"wine embedded in oc.template.gtk.wine image","text":"
To run Windows applications abcdesktop use wine. A dedicated image template source is ready to use as source of others Windows applications. This template is named abcdesktopio/oc.template.gtk.wine.
Start pulling this template image, if you don't have already done in the previous exercice :
docker pull abcdesktopio/oc.template.gtk.wine\n
This image embeded the architecture format win32win64. By default the WINEARCH is set to win32. The playonlinux package is all ready installed.
"},{"location":"buildapplications.wine/#change-the-odconfig-configuration-file","title":"Change the od.config configuration file","text":""},{"location":"buildapplications.wine/#the-homedirectorytype-option","title":"The homedirectorytype option","text":"
To share the home directory /home/balloonvolume data between containers, set the desktop.homedirectorytype to 'volume' in your od.config file.
Edit your own od.config file as described in the chapter Edit your configuration file in docker mode, and make sure that desktop.homedirectorytype is set to 'volume'
desktop.homedirectorytype: 'volume' \n
If need, run the docker-compose restart command in your abcdesktop directory where the od.config and the docker-compose.yml are located.
docker-compose restart\n
"},{"location":"buildapplications.wine/#build-a-new-windows-putty-inside-a-docker-container","title":"Build a new windows putty inside a docker container","text":"
In this exercice we are going to install and run putty.exe for Windows inside a docker container for abcdesktop.
PuTTY is an SSH and telnet client, developed originally by Simon Tatham for the Microsoft Windows platform.
Start an abcdesktop session. You can use an authenticated session using an authentication provider external or explicit, or you can do this exercice using Anonymous Authentification also know as the authentication provider implicit.
In this exercice we choose an Anonymous authentification, DO NOT CLOSE YOUR WEB BROWSER, you should not be able de reconnect with the same user context, and have to restart this exercice again.
Login using the Anonymous authentification provider.
Click on the menu and choose settings options
On the Settings dialog box, choose System option
Choose the User container tabs, and select the hostname value.
Copy this value into your clipboard. The hostname use the docker containerid value.
Keep your web browser open, and open a terminal shell on your server, to run docker shell commmand.
Run the docker inspect -f \"{{ .HostConfig.Binds }}\" and add your CONTAINER ID as parameter.
You should read the volume name starting by the prefix tmp- with your uuid value, and a second volume name starting by the prefix home- with your uuid:
We are using the /tmp volume and the /home/balloon volume of your container.
If your are using an anonymous authentification, the name of your container id is formated as an uuid, for example a32deda7-324f-4ee4-9e51-51c1aaf66bcf. The name of the tmp volume is tmp-a32deda7-324f-4ee4-9e51-51c1aaf66bcf and the name of tmp volume is home-a32deda7-324f-4ee4-9e51-51c1aaf66bcf
If your are using an LDAP authentification, the name of your container id is a string equal to the username, for example hermes. The name of the tmp volume is tmp-hermes and the name of tmp volume is home-hermes.
Replace in the command the string TMP_VOLUMENAME by your own tmp volume name.
Replace in the command the string HOME_VOLUMENAME by your own home volume name.
Great, you have started a new docker container. The oc.user container and your new container is sharing the same volume mounted as /tmp. You get a prompt inside the new docker container.
To run a command as administrator (user \"root\"), use \"sudo <command>\".\nSee \"man sudo_root\" for details.\n\nballoon@721263d5dece:~$ \n
Init the wine directory
wineboot --init\n
After few seconds you should read on the standard error
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0014:err:ole:get_local_server_stream Failed: 80004002\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0012:err:ole:get_local_server_stream Failed: 80004002\nCould not find Wine Gecko. HTML rendering will be disabled.\nCould not find Wine Gecko. HTML rendering will be disabled.\nwine: configuration in L\"/composer/.wine\" has been updated.\n
And now download putty.exe from the web site https://www.putty.org/.
Start the putty.exe with wine, with the command wine putty.exe
balloon@5719b77d3f2a:~$ wine putty.exe\n
After few seconds you should read on the standard error
0009:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.\n
The wine prefix is WINEPREFIX=/composer/.wine, all files used by wine are stored in /composer/.wine directory.
On abcdesktop display, wine is starting the application putty, after few seconds, Putty is running :
You can use this Putty Windows application to connect to another host using ssh or telnet protocol.
The application Putty is opened and is running in the background. At the right corner, write in the search bar the keyword shell Click on the Web Shell icon, a new Terminal WebShell is now opened :
Run the command to list each X11 windows and get the WMClass name.
wmctrl -lx \n
Read the WM_CLASS of the Putty Wine application: putty.exe.Wine
Then exit the web shell and quit on the Putty application. Wine has created a configuration directory in the default directory /composer/.wine.
"},{"location":"buildapplications.wine/#build-the-new-puttyd-image-for-abcdesktop","title":"Build the new putty.d image for abcdesktop","text":"
In this chapter we are going to build a new docker image for abcdesktop
The new image is the putty.
Create a directory named build, and create a directory icons inside build
mkdir build\nmkdir build/icons\ncd build\n
To build your own json file.
Create a json file named applist.json, inside build directory, and add the content to the json file.
name Type Data cat string utilities icon string putty.svg keyword string putty,ssh,terminal launch string putty.exe.Wine name string putty path string /usr/bin/wine args string /composer/bin/putty.exe template string abcdesktopio/oc.template.gtk.wine
You can read the following help lines.
cat is the category, choose the most appropriate value in the list : [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ]
icon is the name of the icon. abcdesktop support only svg icon file format. To get the icon file, look at the link https://raw.githubusercontent.com/abcdesktopio/oc.apps/main/icons/putty.svg
keyword is a list of the keywords to find the application. Set the value to putty,ssh,terminal.
launch is the X11 Class name of the window. To get this value, we need to run the application on GNU/Linux (read the dedicated chapter below).
name is the name of the application. Set the value to putty.
path is the binary path to run the application.
template is the name of the parent image. The default image parent for wine is abcdesktopio/oc.template.gtk.wine.
Save the putty icon file on SVG format to the icons directory.
"},{"location":"buildapplications.wine/#build-putty-your-from-applistjson","title":"Build putty your from applist.json","text":"
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can not download this file.
Save make.js it to you build directory. make.js is a nodejs JavaScript file. Node.js\u00ae is a JavaScript runtime built on Chrome's V8 JavaScript.
If you don't have already nodejs installed on your system, go to the website nodejs download website and follow the instructions to install nodejs.
putty-wine.d is the Dockerfile for your putty abcdesktop application
Read the content of the Dockerfile putty-wine.d. List all labels, and confirm that the icon file is uuencoded format. Uuencoding is a form of binary-to-text encoding.
Now it's time to build your putty app. Run the command docker build command.
[+] Building 21.6s (10/10) FINISHED \n => [internal] load build definition from putty-wine.d 0.0s\n => => transferring dockerfile: 12.46kB 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk.wine:dev 0.0s\n => CACHED [1/6] FROM docker.io/abcdesktopio/oc.template.gtk.wine:dev 0.0s\n => [2/6] RUN wineboot --init 10.9s\n => [3/6] RUN wget -O /composer/bin/putty.exe https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe 0.6s \n => [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 9.2s \n => [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.4s \n => [6/6] WORKDIR /home/balloon 0.0s \n => exporting to image 0.4s \n => => exporting layers 0.3s \n => => writing image sha256:2cbe019726e67ecb83af74e944ff932705086e632ab4a57dec719be5e7e654cd 0.0s \n => => naming to docker.io/library/putty-wine.d 0.0s\n
Now, your new image is ready to run.
"},{"location":"buildapplications.wine/#run-your-putty-for-abcdesktop","title":"Run your putty for abcdesktop","text":"
The API server does not know that you have built your new 2048 application. You have to send a message to the API server, to update the API Server images cache list.
Using your web browser or a curl command, call a http request to notify the API Server
http://localhost/API/manager/buildapplist\n
This http request return a json object, with all docker images details :
Reloead your web browser connected on the abcdesktop website, and log your again as anonymous.
In the search area, type putty. Click on the Putty Application.
Wine is starting your Putty application :
Great, you have build a abcdesktop image for Putty, build the application image Putty. You can push this image to your own private docker registry.
"},{"location":"buildapplications.wine/#optional-add-a-persistant-userreg-and-systemreg-windows-registry-files","title":"Optional add a persistant user.reg and system.reg windows registry files","text":"
This is a quick and dirty solution, but it works fine
Your wine configuration is stored in /composer/.wine, and by default user.reg and system.reg are located in the WINEPREFIX directory. The user.reg and system.reg files build when wine starts.
To make a copy of fresh running putty-wine.d image. Start your putty-wine.d image and using a shell located the new user.reg and system.reg files
docker ps -a | grep putty-wine\n65d95f4e7717 putty-wine.d:latest \"/composer/appli-doc\u2026\" 16 seconds ago Up 15 seconds anonymous-putty-wine-7877d100de0b4363ad24240d67032c8c\n
name Type Data cat string games debpackage string 2048-qt icon string 2048_logo.svg keyword string 2048 launch string 2048-qt.2048-qt name string 2048 path string /usr/games/2048-qt template string abcdesktopio/oc.template.gtk
You can read the following help lines, or fill the json missing value by yourself.
cat is the category, choose the most appropriate value in the list : [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ]
debpackage is the name of the 2048 ubuntu package. To find the package name, look at the link 2048 Ubuntu Package.
icon is the name of the icon. abcdesktop support only svg icon file format. To get the icon file, look at the link https://upload.wikimedia.org/wikipedia/commons/1/18/2048_logo.svg
keyword is a list of the keywords to find the application. Set the value to 2048.
launch is the X11 Class name of the window. To get this value, we need to run the application on GNU/Linux (read the dedicated chapter below).
name is the name of the application. Set the value to 2048.
path is the binary path to run the application.
template is the name of the parent image. The default image parent is abcdesktopio/oc.template.gtk. You will learn how to customize your own template image, in next chapter.
Save the 2048 icon file on SVG format to the icons directory. You should have this file in the icons directory as the output of the ls icons command :
2048_logo.svg\n
"},{"location":"buildapplicationsgnulinux/#build-your-new-image-2048","title":"Build your new image 2048","text":"
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can not download this file.
Save make.js it to you build directory. make.js is a nodejs JavaScript file. Node.js\u00ae is a JavaScript runtime built on Chrome's V8 JavaScript.
If you don't have already nodejs installed on your system, go to the website nodejs download website and follow the instructions to install nodejs.
In the build directory, you should have
drwxr-xr-x 5 devuser staff 160 Mar 11 15:15 .\ndrwxr-xr-x+ 31 devuser staff 992 Mar 11 15:15 ..\n-rw-r--r-- 1 devuser staff 265 Mar 11 15:15 applist.json\ndrwxr-xr-x 3 devuser staff 96 Mar 11 15:02 img\n-rw-r--r-- 1 devuser staff 8036 Mar 11 15:12 make.js\n\n./img:\ntotal 8\ndrwxr-xr-x 3 devuser staff 96 Mar 11 15:02 .\ndrwxr-xr-x 5 devuser staff 160 Mar 11 15:15 ..\n-rw-r--r-- 1 devuser staff 1909 Oct 31 2015 2048_logo.svg\n
Run the command make.js
node make.js\n
make.js build a new DockerFile for the 2048 application. Remember, all application images use container images.
The new files 2048.d and 2048.md have been generated :
2048.d is the Dockerfile for your 2048 abcdesktop application
2048.md is the documentation file for your 2048 abcdesktop application
Read the content of the Dockerfile 2048.d. List all labels, and confirm that the icon file is uuencoded format. Uuencoding is a form of binary-to-text encoding.
Now it's time to build your 2048 app. Run the command docker build command.
[+] Building 32.0s (10/10) FINISHED \n => [internal] load build definition from 2048.d 0.0s\n => => transferring dockerfile: 33B 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk:latest 1.4s\n => [1/6] FROM docker.io/abcdesktopio/oc.template.gtk:latest@sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 0.4s\n => => resolve docker.io/abcdesktopio/oc.template.gtk:latest@sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 0.0s\n => => sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 4.50kB / 4.50kB 0.0s\n => => sha256:f3c3f03bd0b5cda9f56703a4ba1b9d96d5ff2be3c03bee1831ce30dc98bb3b62 8.93kB / 8.93kB 0.0s\n => [2/6] RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends 2048-qt && apt-get clean 27.5s\n => [3/6] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 0.5s\n => [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 0.5s \n => [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.4s \n => [6/6] WORKDIR /home/balloon 0.0s \n => exporting to image 1.1s \n => => exporting layers 1.1s \n => => writing image sha256:a861af06b7f0dfa19fcde19ee8848bfee65807f852b082d9314e68676966895a 0.0s\n => => naming to docker.io/library/2048.d\n
Check that your image is ready on your system:
Run the docker images command
docker images\n
You should read on the stdout more lines, only 2048.d is listed here :
REPOSITORY TAG IMAGE ID CREATED SIZE\n2048.d latest a861af06b7f0 About a minute ago 1.17GB\n
The total image size of 2048.d is 1.17GB.
The 2048.d does not use 1.17GB, but only the difference between the 2048 image and the source image abcdesktopio/oc.template.gtk.
"},{"location":"buildapplicationsgnulinux/#update-the-cache-application-list","title":"Update the cache application list","text":"
The API server receives a new image event from docker. To run the new applications just refresh you web browser page.
"},{"location":"buildapplicationsgnulinux/#run-your-new-application","title":"Run your new application","text":"
Return to your abcdesktop website http://localhost and log in as Anonymous.
At the right corner, write in the search bar the keyword 2048
Click on the 2048 icon, and start your first abcdesktop application :
Great it's a good job, you have build your own abcdesktop 2048 application.
Now you can spent a lot of time to reach the 2048 score. Have fun !
"},{"location":"buildapplicationsgnulinux/#get-launch-and-path-values","title":"Get launch and path values","text":"
To get the X11 class name of the 2048 game, we need to install it on a Linux host. You can use abcdesktop as a Linux host or choose your own.
If you want to use abcdesktop as a GNU/Linux host
Open the url http://localhost, in your web browser, to start a simple abcdesktop container. You will use this container to install the 2048 application and fill the missing values launch and path.
http://localhost\n
You should see the abcdesktop.io home page.
Press the Connect with Anonymous access, have look
At the right corner, write in the search bar the keyword shell
Click on the Web Shell icon, a new Terminal WebShell is now opened :
Run the command
sudo apt-get update \n
The default password is lmdpocpetit ( if your admin did not change it, otherwise ask to the administrator )
Run the installation command
sudo apt-get install -y 2048-qt \n
You should read the output, during the installation process
On Ubuntu, the games are installed in a dedicated directory /usr/games.
The new 2048 window is opening in the background. You can minimise the shell window to play to the 2048 game, but this is not the goal of this chapter. To show the shell window again, click on the shell icon on the upper right corner.
Run the command to list each X11 windows and get the WMClass name.
wmctrl -lx \n
wmctrl is a command that can be used to interact with an X Window manager, and can query the window manager for information, and it can request that certain window management actions be taken.
-l list the windows being managed by the window manager.
-x include WM_CLASS in the window list
Great, look at the third value, this is what we are looking for :
The launch is 2048-qt.2048-qt
The path is /usr/games/2048-qt
You can now close your web browser and fill your json file, by yourself
"},{"location":"changelog/#commits-on-jun-22-2023","title":"Commits on Jun 22, 2023","text":""},{"location":"changelog/#ocuser-heartbeat","title":"oc.user heartbeat","text":"
to fix issue: https://github.com/abcdesktopio/oc.pyos/issues/2#issuecomment-1607671669 use WEBSOCKIFY_HEARTBEAT in od.config file OR use proxy-read-timeout and proxy-send-timeout annotations to kind: Ingress
add --heartbeat=${WEBSOCKIFY_HEARTBEAT} to /usr/bin/websockify to keep session
"},{"location":"changelog/#commits-on-jun-16-2023","title":"Commits on Jun 16, 2023","text":""},{"location":"changelog/#ocuser-ocpyos-change-default-namespace","title":"oc.user, oc.pyos change default namespace","text":"
oc.pyos: support namespace change, new option in od.config file to change the default abcdesktop namespace
oc.user: support namespace change
"},{"location":"changelog/#commits-on-jun-9-2023","title":"Commits on Jun 9, 2023","text":""},{"location":"changelog/#ocpyos-clusterrole-and-role","title":"oc.pyos: ClusterRole and role","text":"
"},{"location":"changelog/#commits-on-may-24-2023","title":"Commits on May 24, 2023","text":""},{"location":"changelog/#add-new-label-role-for-each-core-service","title":"add new label role for each core service","text":"
abcdesktop/role
"},{"location":"changelog/#commits-on-may-17-2023","title":"Commits on May 17, 2023","text":""},{"location":"changelog/#replace-daemonset-by-deployment","title":"Replace daemonset by deployment","text":"
-- replace daemonset by deployment for oc.nginx and oc.pyos pods https://github.com/abcdesktopio/oc.user/commit/f498e2ab2a5f0af5525a16b5d108c8a1a1f22442
"},{"location":"faq/","title":"FAQ","text":"
List of questions and answers relating to abcdesktop.io
A Kubernetes Cloud provider can be Amazon EKS, DigitalOcean DOKS, Azur AKS, Google GKE, or any of others cloud provider with a Kubernetes service.
This list of questions and answers is relating network, talking about
port-forward
NodePort
LoadBalancer
Ingress Controler
WebSocket timeout
"},{"location":"faq/#how-can-i-reach-my-new-service-on-a-kubernetes-cloud-provider","title":"How can I reach my new service on a Kubernetes cloud provider ?","text":"
I was attempting to deploy the ABCDesktop (kubernetes-version-3.0) for testing my setup with a few of my own desktop applications. Everything worked fine when tested locally in my Ubuntu (22.04) machine. I then thought to deploy the setup in a Kubernetes cloud provider with 3 nodes cluster. How can I reach my new hosted service on a Kubernetes cloud provider (Amazon EKS, Digital Ocean, Azur AKS, Google GKE) ?
Then open your web browser to reach the http://localhost
Then open your web browser, you get the home page, login using LDAP auth or Anonymous auth.
Then login, and you get a pod user.
For the first time, you may get a timeout error, if container images can't be downloaded in less than 180 seconds on the worker node.
"},{"location":"faq/#how-can-i-expose-my-new-service-with-an-external-ip-address","title":"How can I expose my new service with an external IP address ?","text":"
I was attempting to deploy the abcesktop (kubernetes-version-3.0) for testing my setup with a few of my own desktop applications. Everything worked fine when tested locally in my Ubuntu (22.04) machine. I then thought to deploy the setup in a Kubernetes cloud provider with 3 nodes cluster. How can I expose my new service with an external IP address ?
To expose the service with an external IP address, we need to update the nginx service type. The default type on your own desktop is type: NodePort, the nginx service type on a Kubernetes cloud provider becomes type: LoadBalancer.
Delete the previous abcdesktop's nginx service
kubectl delete service nginx -n abcdesktop\n
Create a new nginx service yaml file named nginx-lb.yaml The new nginx service type is LoadBalancer
Wait for an EXTERNAL-IP from you kubernetes cloud provider
kubectl get service nginx -n abcdesktop\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nnginx LoadBalancer 10.245.105.75 <pending> 80:31581/TCP 64s\n
You get the EXTERNAL-IP for your LoadBalancer
kubectl get service nginx -n abcdesktop\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nnginx LoadBalancer 10.245.172.53 161.35.246.4 80:30443/TCP 2m36s\n
In case, the LoadBalancer service returns the EXTERNAL-IP 161.35.246.4 Then open your web browser to reach this EXTERNAL-IP 161.35.246.4.
Login using Philip J. Fry
And you should get the fry desktop
"},{"location":"faq/#how-can-i-expose-my-new-service-with-ingress-controller","title":"How can I expose my new service with Ingress Controller ?","text":"
A Kubernetes Ingress Controller acts as a reverse proxy.
In the Ingress, define a path to the abcdesktop's nginx service.
The request path: / is proxyfied to service named nginx in abcdesktop namespace.
"},{"location":"faq/#how-to-prevent-the-connection-from-closing-after-60-seconds-of-inactivity","title":"How to prevent the connection from closing after 60 seconds of inactivity ?","text":"
My desktop is disconnected after 60 seconds of inactivity, and the message \"Your abcdesktop session has been disconnected. Please reload this page\" appears.
The message Your abcdesktop session has been disconnected. Please reload this page appears when the websockify websocket is disconnected.
Add an heartbeat value to send a ping to the client every INTERVAL seconds
Edit the od.config file, add to the desktop.envlocal option 'WEBSOCKIFY_HEARTBEAT':'30'
To get more informations how to Keepalive in websockets
Timeout is a main feature to preserve from unnecessary network bandwidth.
"},{"location":"faq/#how-to-prevent-the-connection-from-closing-after-60-seconds-of-inactivity-with-an-ingress-controller","title":"How to prevent the connection from closing after 60 seconds of inactivity with an Ingress Controller ?","text":"
My desktop is disconnected after 60 seconds of inactivity, and the message Your abcdesktop session has been disconnected. Please reload this page appears.
To prevent the connection from closing after 60 seconds of inactivity through Ingress Controller, make sure the Ingress Controller isn't configured to automatically terminate long connections. The default value nginx's ingress controller is 60 seconds.
Update the default values for nginx.ingress.kubernetes.io/proxy-read-timeout and nginx.ingress.kubernetes.io/proxy-send-timeout annotations to more than 60 seconds.
"},{"location":"faq/#how-to-add-an-application","title":"How to add an application ?","text":"
To add an application : - get the json file of an application - push the json file to the abcdesktop's images endpoint
wget https://raw.githubusercontent.com/abcdesktopio/oc.apps/main/2048-alpine.d.3.0.json\ncurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine.d.3.0.json\n
The first start will pull the 2048 image, so it can take a while.
"},{"location":"faq/#how-to-get-the-json-file-of-a-containerized-application","title":"How to get the json file of a containerized application ?","text":"
To get the json file of a containerized application, you can use docker command or crictl command
"},{"location":"faq/#my-application-doesnt-start-how-to-get-log-files","title":"My application doesn't start. How to get log files ?","text":"
Open the webshell and read the logs files.
The log files are /tmp/lastcmd.log, /tmp/lastcmdenv.log and /tmp/NAME OF THE APPLICATION.log.
/tmp/lastcmd.log the init command log file created by /composer/appli-docker-entrypoint.sh
/tmp/lastcmdenv.log the last environment variables file
/tmp/NAME OF THE APPLICATION.log the command log file for the application
"},{"location":"guiappsoddocker/","title":"GUI application with containers","text":""},{"location":"guiappsoddocker/#other-related-projets-about-vdi-and-containers","title":"Other related projets about VDI and containers","text":"
A lot of different projets already exists using containers as a VDI. I just write list of projets, you can explore them :
https://github.com/mviereck/x11docker x11docker allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.
https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-ubuntu-18-04 By using noVNC and TigerVNC, you can run native applications inside a Docker container and access them remotely using a web browser.
HW accelerated GUI apps on Docker Describe How to containerizing a GUI app. Really easy to understand, a good article.
https://github.com/fcwu/docker-ubuntu-vnc-desktop docker-ubuntu-vnc-desktop is a Docker image to provide web VNC interface to access Ubuntu LXDE/LxQT desktop environment.
Dockerize GUI app This project dockerize typical GUI app so that you can visit it in browser. Really good technical solutions.
https://www.kasmweb.com Streaming containerized apps and desktops.
Docker and Wine Docker image that includes Wine and Winetricks for running Windows applications on Linux and macOS
n.eko This app uses Web RTC to stream a desktop inside of a docker container (doesn't use VNC)
"},{"location":"guiappsoddocker/#x11-window-system-architecture","title":"X11 window system architecture","text":"
In a *nix system a GUI application has the role of \u201cX client\u201d. Each time it redraws its content a sequence of graphics commands is encoded into the X protocol using a library (usually Xlib) and transmitted into the X11 socket. At the other end an X server reads such commands from the socket and renders them onto a display. [ source HW accelerated GUI apps on Docker]
"},{"location":"guiappsoddocker/#containerizing-a-gui-app","title":"Containerizing a GUI app","text":"
Taking a look at the X window system architecture it\u2019s clear that in order to make our containerized GUI apps capable of drawing on a screen we need to give it write access to the X11 socket, and we need an X server to consume and render the graphics commands onto a display.
We can approach this problem from three angles:
"},{"location":"guiappsoddocker/#all-in-one-container","title":"All in one container","text":"
we can bundle X11 server with our container image. All process run inside the same container.
we can share the X11 server socket with the X11 client container as unix file socket on an external shared volume. Applications and X11 server run in dedicated containers.
we can share the X11 server socket with the container using TCP. X11 uses TCP as its transport protocol. Applications and X11 server run in dedicated containers.
To guarantee isolation, abcdesktop/io.io run X11 server and X11 client in separated container. X11 server and X11 client share the socket as unix file socket on a dedicated external shared volume.
The unix file socket reduce the network tcp overhead.
The unix file socket garantes no latency troubleshooting. X11 uses a chatty protocol so that the network latency has a large impact when using X11
Local is best, thus server and application need to run on the same node, if it can.
"},{"location":"guiappsoddocker/#html5-web-browser-as-remote-display","title":"HTML5 Web Browser as remote DISPLAY","text":"
The Web Browser does not support X11 protocol. We need a graphical desktop system to paint the virtual DISPLAY in a <canvas> HTML element.
"},{"location":"guiappsoddocker/#replace-x11-server-from-xorg-by-a-xvnc","title":"Replace X11 Server from X.org, by a Xvnc.","text":"
Xvnc is the X VNC (Virtual Network Computing) server. It is based on a standard X server, but it has a virtual screen rather than a physical one. X applications display themselves on it as if they were using a normal X display, but they can only be accessed via a VNC. So Xvnc is really two servers in one. To the applications it is an X server, and to the remote VNC users it is a VNC server.
"},{"location":"guiappsoddocker/#convert-vnc-tcp-socket-in-to-a-websocket","title":"Convert VNC TCP socket in to a WebSocket","text":"
The web browser does not support VNC (RFB Protocol) and the TCP socket natively. We need to translate TCP socket, into a WebSocket. This can be done using :
websockify Websockify just translates WebSockets traffic to normal socket traffic. Websockify accepts the WebSockets handshake, parses it, and then begins forwarding traffic between the client and the target in both directions.
ws-tcp-bridge A websocket to tcp proxy server, using nodejs which bridges websockets and tcp servers in either direction.
"},{"location":"guiappsoddocker/#use-a-vnc-javascript-client","title":"Use a VNC Javascript client","text":"
The web browser receives the RFB protocol in the WebSocket and then paints the data into a canvas.
noVNC is VNC client JavaScript library. noVNC follows the standard VNC protocol, but unlike other VNC clients it requires WebSockets support.
abcdesktop is based on kubernetes, from the abcdesktop infrastructure to the user applications. At the login page, the user chooses a login provider and authenticates himself, then abcdesktop engine creates a pod for this user.
An application can run as ephemeral container or as pod, it MUST be a container.
An application can ask to start another container, like application helper for a web browser. By example, firefox container can ask to start videolan application. Then firefox is running inside a container, videolan is running inside another separated container.
abcdesktop manages a mimetype database for each application. The mimetype database is updated on the fly then new application is added.
Application resource limit is supported (CPU, memory) on pod.
The share memory /dev/shm between X.org and application is supported with the ephemeral container.
Application support ACL (Access Control List). Access to an application can be allowed for a user and denied for another one, using group membership for example.
Volumes can be mounted for an application or not for security reason.
Application can bind a dedicated network by using annotations.
Application can use GPU by using labels.
"},{"location":"rdgp/","title":"Rdgp","text":"
Privacy Notice: protecting your personal data
The changes to the French and European regulation on the protection of personal data come into force on 25 May 2018.
If you want to interact with abcdesktop via www.abcdesktop.io and other corporate sites, personal data will be collected about you in order to process your request and/or send you the desired information.
In this case, abcdesktop is committed to the protection, confidentiality and security of personal data.
This Privacy Notice provides information on how abcdesktop, and its potential subcontractors or partners, process your personal data in this context.
This document may be supplemented by specific information in the case of a specific service where appropriate (e.g. shareholders club) or in a commercial context. If you are an abcdesktop customer, you will also find a dedicated personal data protection policy on the website demo.abcdesktop.io.
Why does abcdesktop process your personal data collected on abcdesktop.io and on its corporate websites? On demo.abcdesktop.io, you can ask a question or receive specific abcdesktop information (for example a press release). abcdesktop processes the personal data collected via the contact forms in place for these purposes. Some websites may require additional information which is processed specifically to enable access to a private or dedicated space, such as shareholders club.
We only process your personal data once we have your consent in the context of you request.
Your data is only kept for the length of time needed to fulfil your request. This takes into account your unsubscription to certain newsletters or sending out press releases.
What types of data are processed? abcdesktop may be required to process your personal data which we collect directly via the online form. It includes identity data, such as your name, surname, email address and sometimes your telephone number and postal address if necessary.
Who can see your data? Data collected about you is intended for abcdesktop\u2019s internal services and if any, service providers. In the case of a legal procedure, processed data may also be communicated to the relevant authorities.
Is your data processed outside the European Union? The data collected may be processed outside the European Union if deemed necessary and according to the nature of your request. In this case, abcdesktop will take all necessary steps to protect your data.
What are your rights? You have the right to withdraw your consent and stop any future use of your data. You can exercise your right to obtain information and access to the data, to rectify them in case of inaccurate data related to you and to delete the data when conditions are fulfilled.
How can you contact the Data Protection Officer? If you wish to exercise your rights over your data, you can write to the following address along with proof of identity:
Orange Sa Attention: Data Protection Officer (DPO) 78 rue Olivier de Serres 75505 Paris Cedex 15
Possibility to make a request to the Data protection authority, the CNIL in France: If your interaction with abcdesktop is not satisfactory, you can also lodge a complaint with the Commission Nationale de l\u2019Informatique et des Libert\u00e9s (CNIL), which is the regulatory authority in charge of personal data protection in France.
How is your data secured? Orange ensures your data remains secure and confidential, including certain processing carried out by subprocessor.
For this purpose, the appropriate technical and organisational measures are in place to prevent the loss, misuse, alteration and deletion of your personal data. These measures are adapted according to the level of sensitivity of this processed data and the level of risk that the processing or implementation of it presents.
Modification of the personal data protection notice This Privacy Notice is subject to change.
"},{"location":"requirements/","title":"Requirements","text":""},{"location":"requirements/#prerequisites-for-setup-abcdesktop","title":"Prerequisites for setup abcdesktop","text":"
Architecture x86-64 ( arm-64 is not yet available)
15 GB of free space to store sample applications ( gimp, libreoffice writer, libreoffice calc, libreoffice math, libreoffice impress, firefox ) and core image services
a kubernetes cluster ready to run greater or equal to 1.24
Use Docker Desktop with kubernetes, https://www.docker.com/products/docker-desktop/
"},{"location":"runapplications.wine/","title":"Run docker image for Windows using Wine","text":""},{"location":"runapplications.wine/#requirements","title":"Requirements","text":"
Read the previous chapter Build abcdesktop docker image
Read the Chapter Authentification explicit for LDAP Directory Services is recommended but not mandatory.
Wine (originally an acronym for \"Wine Is Not an Emulator\") is a compatibility layer capable of running Windows applications on several POSIX-compliant operating systems, such as Linux, macOS, & BSD. Instead of simulating internal Windows logic like a virtual machine or emulator, Wine translates Windows API calls into POSIX calls on-the-fly, eliminating the performance and memory penalties of other methods and allowing you to cleanly integrate Windows applications into your desktop.
To run Windows applications abcdesktop.io use WineHQ. A dedicated image template source is ready to use as source of others Windows applications. This image template is named abcdesktopio/oc.template.gtk.wine.50
Start pulling this template image :
docker pull abcdesktopio/oc.template.gtk.wine\n
Look at the Dockerfile to build the abcdesktopio/oc.template.gtk.wine on the https://hub.docker.com/ web site.
For a better support, we are using the 32 bits library, as i386 libs on GNU/Linux. Your can read in the Dockerfile, how the abcdesktopio/oc.template.gtk.wine is created.
"},{"location":"runapplications.wine/#run-notepadexe-for-windows-in-a-docker-container","title":"Run notepad.exe for Windows in a Docker container","text":"
In this chapter we are going to run notepad.exe for Windows inside a docker container for abcdesktop.io.
Start an abcdesktop session. You can use an authenticated session using an authentication provider external or explicit, or you can do this exercice using Anonymous Authentification also know as the authentication provider implicit.
In this chapter we choose an Anonymous, DO NOT CLOSE YOUR WEB BROWSER, you should not be able de reconnect with the same user context, and have to restart this exercice at the begining, else you can choose to configure abcdesktop with ldap authentification.
Login using the Anonymous authentification provider.
Keep your web browser open, then on your host, open a terminal shell window and run the command
The option --filter ancestor=abcdesktopio/oc.user.18.04 ask to filter only container with the image ancestor set with value abcdesktopio/oc.user.18.04 You should read the container with the image named abcdesktopio/oc.user.18.04
docker ps --filter ancestor=abcdesktopio/oc.user.18.04\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n86df3ff126ac abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 3 minutes ago Up 3 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp g-5f4300d2-7c8e-43c6-89ab-f85bd8b68138\n
Read the values CONTAINER ID and NAMES
In this example, the CONTAINER ID is 86df3ff126ac and the NAME is g-5f4300d2-7c8e-43c6-89ab-f85bd8b68138.
We are using the /tmp volume of this CONTAINER ID 86df3ff126ac
Using an anonymous authnetification, the name of your container id is an UUID, for example 57be1e5b-0b14-4c05-ae79-75e9a03c77be. The name of the tmp volume is tmp-57be1e5b-0b14-4c05-ae79-75e9a03c77be
Run a docker inspect -f \"{{ .HostConfig.Binds }}\" and add your CONTAINER ID as parameter.
Note: if your are using an LDAP authentification, the name of your container id is the username, for example hermes. The name of the tmp volume is tmp-hermes
Now, start a new docker container with the same HostConfig.Bings as your oc.user container. The -v parameter is the first entry of the result in the previous command docker inspect -f \"{{ .HostConfig.Binds }}\"
docker run -it -v TMP_VOLUMENAME:/tmp --user balloon abcdesktopio/oc.template.gtk.wine bash\n
For example with an Anonymous user:
docker run -it -v tmp-5f4300d2-7c8e-43c6-89ab-f85bd8b68138:/tmp --user balloon abcdesktopio/oc.template.gtk.wine bash \n
Great, you have started a new docker container. The oc.user containter and your new container are sharing the same volume mounted as /tmp. You get a prompt inside the new docker container.
To run a command as administrator (user \"root\"), use \"sudo <command>\".\nSee \"man sudo_root\" for details.\n\nballoon@8684ae888f74:~$\n
And now start the notepad.exe with wine
balloon@8684ae888f74:/$ wine notepad\n
After few seconds you should read on the standard error
balloon@8684ae888f74:/$ wine notepad\n0015:err:clipboard:convert_selection Timed out waiting for SelectionNotify event\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0014:err:ole:get_local_server_stream Failed: 80004002\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0012:err:ole:get_local_server_stream Failed: 80004002\nCould not find Wine Gecko. HTML rendering will be disabled.\nwine: configuration in L\"/composer/.wine\" has been updated.\n
And the notepad window should be open inside your Web browser
This Windows application is running inside a docker container on abcdesktop.io desktop.
In the Terminal shell press CTRL+C to stop the wine notepad process, then type exit to quit your shell in container.
^C0032:fixme:console:CONSOLE_DefaultHandler Terminating process 8 on event 0\nballoon@4c4d806557dc:~$ exit\nexit\n
It's time to build your own abcdesktop application image. Read the next chapter Build abcdesktop.io docker image for Windows using Wine.
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"1.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"1.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"1.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
The authentification configuration is set in the od.config file. In this chapter you will need to update the od.config configuration file. This update differs depending on the configuration docker mode or kubernetes mode.
Read the Update your configuration file and apply the new configuration file section to make change in od.config file for docker, or edit the abcdesktop.yaml file for kubernetes cluster.
Edit your od.config pyos configuration file, and set the value to the authmanagers dictionnay with empty values for implicit, explicit, and external, as describe :
The config file od.config has changed and od.py running inside the container should restart. If it doesn't, restart your docker-compose to ake sure that the od.py the your new od.config file.
docker-compose restart
Start your web browser and open the URL http://localhost
The Web home page should only show the title abcdesktop.io. There is no authmanagers available.
Great you can now add some value to authenticate your users.
In the authmanagers implicit section, authmanagers explicit section, and authmanagers external section, you have learned how to defined the providers. You can set a complete authmanagers dictionnary as described for example :
"},{"location":"1.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"1.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"1.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"1.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"1.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"1.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"1.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string not used by ldap, only used by Active Directory providers dictionnary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"1.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set with the same value in providers configuration and config_ref.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
"},{"location":"1.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this domain as default domain True ldap_protocol string protocol type. ldap or ldaps for LDAP directory services ldaptls_require_cert boolean The default value is False. tls_require_cert apply only if ldap_protocol is set to ldaps. Allow LDAPS connection if the ldaps server hostname does not match CommonName peer certificate. In production, set this value to True This will disable the ldap option call : ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) False basedn string LDAP Base Distinguished Names ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. [ '192.168.1.12', '192.168.1.13' ] IP Address or FQDN values scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos auth credentials. the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))"},{"location":"1.0/config/authexplicit-ldap/#hands-on-configure-auth-using-an-openldap-for-docker","title":"Hands-on : Configure Auth using an OpenLDAP for Docker","text":""},{"location":"1.0/config/authexplicit-ldap/#requirements","title":"Requirements","text":"
You should have all read and done the hands-on :
Setup abcdesktop.io in docker mode
Edit your configuration file in docker mode
"},{"location":"1.0/config/authexplicit-ldap/#openldap-docker-image-for-testing","title":"OpenLDAP Docker Image for testing","text":"
To configure abcdesktop.io to use an explicit authentification, we need a directory service. We use an OpenLDAP Docker Image for testing with provioned values.
Read the OpenLDAP Docker Image for testing documentation on the url abcdesktop OpenLDAP Docker Image for testing
"},{"location":"1.0/config/authexplicit-ldap/#update-the-docker-composeyml-file","title":"Update the docker-compose.yml file","text":"
Update the docker-compose.yml file to add an ldap as directory server
The specific openldap section is describe as a service. The new complete docker-compose.yml file is now :
Add a new dictionnary object named ldapconfig to the configuration file. These values come from the LDAP structure of OpenLDAP Docker Image for testing
Note: the server name is the name of the service entry
Save your new od.config file.
The config file od.config has changed and od.py running inside the container should restart. If it doesn't, restart your docker-compose to make sure that the od.py the your new od.config file.
docker-compose restart
Open the URL:http://localhost
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
"},{"location":"1.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-docker-image-for-testing","title":"The LDAP structure of OpenLDAP Docker Image for testing","text":""},{"location":"1.0/config/authexplicit-ldap/#basedn","title":"BaseDN","text":"
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"1.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"1.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"1.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"1.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"1.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"1.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"1.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"1.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"1.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"1.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
The explicit authentification support the directory services ldap, ldaps, and Microsoft Active Directory.
Configuration sample for Microsoft Active Directory
Read the specific chapter on LDAP LDAP and LDAPS explicit authmanagers
"},{"location":"1.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
implicit is the easyest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionnary object and contains an anononymous provider.
anononymous provider always permit authentification, and create a uuid as userid. anononymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Press the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command docker ps -a
docker ps -a\n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
abcdesktop.io use a Model\u2013view\u2013controller (usually known as MVC) is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
Controller Description AccountingController accounting data json and ebnf format AuthController authenticate user ComposerController CRUD main services (like createDesktop, runApplication) CoreController get configuration and user message info ManagerController manage pyos PrinterController CRUD printer object StoreController CRUD key value data UserController retrieve user information"},{"location":"1.0/config/controllers/#access-permission","title":"Access Permission","text":"
The AccountingController and ManagerController access is protected with a source ip address filter. The access control filter is defined in a dictionary. Each dictionary entry use the controller name and with an entry permitip. The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or the controller name is not set, all ip source address are allowed the send a request to the controller.
The controllers dictionnary is defined in the od.config file. By default the configuration permit private network defined in rfc1918 and rfc4193. Get more information about the private network.
By default others controllers access is enabled, without ip restriction.
If the source ip address is not allowed, the response is a HTTP status code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"1.0/config/editconfig/","title":"Edit pyos core service configuration file","text":"
Update the Pyos core service configuration file depends, if your are running abcdesktop.io on native Docker (Non-Cluster Host) or in Kubernetes mode.
In Kubenetes Mode: Read the setup guide, to make change in the abcdesktop yaml file. Setup and configuration guide for kubernetes abcdesktop
In Docker Mode : Read the following chapter
This chapter 'Edit Pyos configuration file', apply only for native Docker (Non-Cluster Host), read the dedicated chapter if you are running abcdesktop.io with a kubernetes cluster.
"},{"location":"1.0/config/editconfig/#edit-pyos-code-service-configuration-file-in-docker-mode","title":"Edit Pyos code service configuration file in docker mode","text":""},{"location":"1.0/config/editconfig/#requirements","title":"Requirements","text":"
Create a directotry named abcdesktop in your home directory.
cd\nmkdir -p abcdesktop\n
To edit you configuration file in abcdesktop.io docker mode, download the sample configuration file and save it as od.config where docker-compose.yml file is located.
Download sample configuration file od.config then rename the od.config.reference file as od.config
"},{"location":"1.0/config/editconfig/#stop-your-docker-compose","title":"Stop your docker-compose","text":"
"},{"location":"1.0/config/editconfig/#check-that-the-new-colors-are-painted-in-front","title":"Check that the new colors are painted in front :","text":"
Open the url http://localhost, in your web browser, to start a simple abcdesktop.io container.
http://localhost\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colors and you should have it as background color :
Great, you can easily update your configuration file od.config. We will make some changes during the next exercices.
"},{"location":"1.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"1.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"1.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"1.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"1.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"1.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"1.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"1.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"1.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"1.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"1.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"1.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"1.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
"},{"location":"1.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"1.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"1.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"1.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"1.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"1.0/config/webrtc/","title":"Sound server configuration","text":"
By default abcdesktop use the module-http-protocol-tcp from pulseaudio sound server to send wav data to the web browser
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"1.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"1.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"1.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
"},{"location":"1.0/setup/k8smacosinstallation/","title":"MacOS/X Kubernetes","text":""},{"location":"1.0/setup/k8smacosinstallation/#enable-kubernetes-on-macosx","title":"Enable Kubernetes on MacOS/X","text":"
Click on the Docker icon in MacOS/X menu bar.
Then choose Preferences...
The following window should appear :
Choose Kubernetes, then check the Enable Kubernetes
Kubernetes stay in Starting state during few minutes. Please wait to download all container images and for kubernetes installation process.
On the bottom you should read next Docker RunningKubernetes Running
Great, you have installed Kubernetes on MacOS/X.
"},{"location":"1.0/setup/k8smacosinstallation/#run-the-new-kubectl-command","title":"Run the new kubectl command","text":"
Open a Terminal, then run the command kubectl version
Great, the kubectl command works. It's time to deploy abcdesktop.io
"},{"location":"1.0/setup/k8swindows10installation/","title":"Windows 10 Kubernetes Installation","text":""},{"location":"1.0/setup/k8swindows10installation/#enable-kubernetes-on-windows-10","title":"Enable Kubernetes on Windows 10","text":"
Click on the Docker Desktop icon in the windows tray.
The following menu should appear, choose Settings :
The following window should appear :
Choose Kubernetes, then check the Enable Kubernetes
Press the Apply and Restart button. Please wait to download all container images and for kubernetes installation process.
On the bottom you should read next Docker Running and Kubernetes Running.
Great, you have installed Kubernetes on Windows 10.
"},{"location":"1.0/setup/k8swindows10installation/#run-the-new-kubectl-command","title":"Run the new kubectl command","text":"
Open a Terminal cmd.exe, then run the command kubectl version
This chapter is optional you can skip it if you think that's your kubernetes etcd database access is secured.
Etcd secrets database is the place where all k8s secrets are stored. By default secrets are stored in plain text. If an attacker can access Etcd database, he know then all your secrets.
To secure secrets, we will crypt them at API server level. All secrets will be stored encrypted in Etcd and then be uncrypted at API server level when accessed by Kubernetes.
Here are officials available encryption providers (Kubernetes Official page ):
Providers for Kubernetes encryption at restNameEncryptionStrengthSpeedKey LengthOther ConsiderationsidentityNoneN/AN/AN/AResources written as-is without encryption. When set as the first provider, the resource will be decrypted as new values are written.aescbcAES-CBC with PKCS#7 paddingStrongestFast32-byteThe recommended choice for encryption at rest but may be slightly slower than secretbox.secretboxXSalsa20 and Poly1305StrongFaster32-byteA newer standard and may not be considered acceptable in environments that require high levels of review.aesgcmAES-GCM with random nonceMust be rotated every 200k writesFastest16, 24, or 32-byteIs not recommended for use except when an automated key rotation scheme is implemented.kmsUses envelope encryption scheme: Data is encrypted by data encryption keys (DEKs) using AES-CBC with PKCS#7 padding, DEKs are encrypted by key encryption keys (KEKs) according to configuration in Key Management Service (KMS)StrongestFast32-bytesThe recommended choice for using a third party tool for key management. Simplifies key rotation, with a new DEK generated for each encryption, and KEK rotation controlled by the user.
aesgcm provider seem's a bit complex to be used. kms provider needs to use a dedicated container and will not work out of the box. For abcdesktop we will use aescbc provider
At this state, all created secrets will be crypted in etcd
"},{"location":"1.0/setup/kubernetes_secure_etcd/#verify-secrets-encryption","title":"Verify secrets encryption","text":""},{"location":"1.0/setup/kubernetes_secure_etcd/#create-a-secret","title":"Create a secret","text":"
To verify secret encryption we will install etcd client package
apt-get install etcd-client\n
Run the following command:
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \\\n--cert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/ca.key \\\n--endpoints=https://localhost:2379 get /registry/secrets/default/secret1\n
Output will appear with the following text k8s:enc:aescbc:v1:key1: followed by binary values.
Secrets are now encoded with aescbc v1 provider using key1
"},{"location":"1.0/setup/novnc/","title":"Use noVNC as VNC Client","text":""},{"location":"1.0/setup/novnc/#requirements","title":"Requirements","text":"
A running dockerd last version
An access to the docker public registry
An access to the ubuntu repository
An access to the github website to run git clone command
An access to the bintray.com website to download a file
AbcDeskopio use the amazing projet noVNC. noVNC is a VNC client JavaScript library. Before you start using noVNC get some information about it:
noVNC is an open source VNC client. noVNC is both a VNC client JavaScript library as well as an application built on top of that library. noVNC runs well in any modern browser including mobile browsers (iOS and Android). Many companies, projects and products have integrated noVNC including OpenStack, OpenNebula, LibVNCServer, and ThinLinc. See the Projects and Companies wiki page for a more complete list with additional info and links.
noVNC uses many modern web technologies so a formal requirement list is not available. However these are the minimum versions we are currently aware of:
Xvnc TigerVNC 1.10.0 - built Dec 20 2019 07:12:07\nCopyright (C) 1999-2019 TigerVNC Team and many others (see README.rst)\nSee https://www.tigervnc.org for information on TigerVNC.\nUnderlying X server release 12001000, The X.Org Foundation\n\n\nTue Mar 3 11:05:48 2020\n vncext: VNC extension running!\n vncext: Listening for VNC connections on /tmp/.x11vnc (mode 0600)\n vncext: created VNC server for screen 0\n
Check that the Xvnc TigerVNC release is 1.10.0.
Great, you have installed an X11 server inside a docker container, and the Xvnc server is listening for VNC connections on /tmp/.x11vnc.
"},{"location":"1.0/setup/novnc/#install-the-ws-tcp-bridge","title":"Install the ws-tcp-bridge","text":"
ws-tcp-bridge translate websocket to tcp and have to listen on websocket tcp port 6081 and forward to local unix socket unix:/tmp/.x11vnc.
ws-tcp-bridge is a nodejs server, then we need to install nodejs and npm.
proxy mode ws -> tcp\nforwarding port 6081 to unix:/tmp/.x11vnc\n
Great, ws-tcp-bridge is running and forward websocket to Xvnc unix socket
"},{"location":"1.0/setup/novnc/#get-the-ip-address-on-your-first-container-myx11server","title":"Get the ip address on your first container myx11server","text":"
On the container myx11server, to get the container local IP Address, install the package net-tools package
Great, nginx web server is running, now we need to configure the proxy pass rule with the myx11server container's ip address.
"},{"location":"1.0/setup/novnc/#check-that-the-container-webserver-can-ping-the-container-myx11server","title":"Check that the container webserver can ping the container myx11server","text":"
Install the ping command, run the command
apt-get install -y iputils-ping\n
Get the myx11server container's ip address write before and replace xxx.xxx.xxx.xxx with the myx11server container's ip address
ping -c 5 xxx.xxx.xxx.xxx\n
In this example, i replace xxx.xxx.xxx.xxx by 172.17.0.2
ping -c 5 172.17.0.2\nPING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.\n64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.108 ms\n64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.365 ms\n64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.206 ms\n64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.181 ms\n64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.206 ms\n\n--- 172.17.0.2 ping statistics ---\n5 packets transmitted, 5 received, 0% packet loss, time 4074ms\nrtt min/avg/max/mdev = 0.108/0.213/0.365/0.084 ms\n
The container webserver should receive package from the myx11server container
"},{"location":"1.0/setup/novnc/#edit-the-nginx-configuration-file","title":"Edit the nginx configuration file","text":"
Edit the nginx configuration file /etc/nginx/sites-enabled/default with the vim editor.
vim /etc/nginx/sites-enabled/default\n
In the server section, after the line location you should found :
location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n
Add a /websockify route to proxyfied the websocket http request to your myx11server container.
by the ip address of your myx11server container, for example replace http://XXX.XXX.XXX.XXX:6081/ with http://172.17.0.2:6081/
proxy_pass http://172.17.0.2:6081/;\n
The complete server section in the nginx file is for example
server {\n listen 80 default_server;\n listen [::]:80 default_server;\n\n # SSL configuration\n #\n # listen 443 ssl default_server;\n # listen [::]:443 ssl default_server;\n #\n # Note: You should disable gzip for SSL traffic.\n # See: https://bugs.debian.org/773332\n #\n # Read up on ssl_ciphers to ensure a secure configuration.\n # See: https://bugs.debian.org/765782\n #\n # Self signed certs generated by the ssl-cert package\n # Don't use them in a production server!\n #\n # include snippets/snakeoil.conf;\n\n root /var/www/html;\n\n # Add index.php to the list if you are using PHP\n index index.html index.htm index.nginx-debian.html;\n\n server_name _;\n\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n\n location = /websockify {\n proxy_buffering off;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n proxy_pass http://172.17.0.2:6081/; # change this line \n }\n\n\n # pass PHP scripts to FastCGI server\n #\n #location ~ \\.php$ {\n # include snippets/fastcgi-php.conf;\n #\n # # With php-fpm (or other unix sockets):\n # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;\n # # With php-cgi (or other tcp sockets):\n # fastcgi_pass 127.0.0.1:9000;\n #}\n\n # deny access to .htaccess files, if Apache's document root\n # concurs with nginx's one\n #\n #location ~ /\\.ht {\n # deny all;\n #}\n}\n
Now, it's time to reload your nginx configuration, by running the command
nginx -s reload\n
"},{"location":"1.0/setup/novnc/#connect-to-your-nginx-website","title":"Connect to your nginx website","text":"
Run a web browser like Google Chrome or Firefox and go to your nginx website. If you run the nginx website on a separated host replace the name with your hostname or his ip address.
Go to the URL http://localhost or the ip address of your own server
In this exercice in use localhost in the screenshot because all containers are running on my desktop, you may have to replace localhost by ip address, or the fully qualified domain name of your own server.
http://localhost\n
or
http://YOUR_SERVER_IP_ADDRESS\n
You should read the Welcome to nginx! message in your web browser
Go to the noVNC URL http://localhost/noVNC/vnc.html
http://localhost/noVNC/vnc.html\n
Remember, remplace localhost by your fully qualified domain name if need
You should read the Welcome to nginx! message in your web browser
To change the connection settings, click on the settings icon and choose Advanced You have to fill the WebSocket properties as follow:
The Encrypt is not checked
Set the Host as localhost (or your host ip address where your contianers are running )
Set the Port to 80
Set the Path to /websockify
Then, press the Connect Button
"},{"location":"1.0/setup/novnc/#install-libreoffice-as-a-docker-application","title":"Install libreoffice as a docker application","text":"
On your host, where your container myx11server is running. Open a new shell window and start a new docker container named mylibreoffice.
docker run -it -v myshared:/tmp --name mylibreoffice ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install libreoffice application, run the install libreoffice command in your mylibreoffice container.
apt-get update\napt-get install -y libreoffice\n
Run the soffice command to start Libreoffice
export DISPLAY=:0.0\nsoffice --writer\n
You should read the output
(soffice:7412): dbind-WARNING **: 16:32:03.928: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-HN3KrNpoAq: Connection refused\n
On the web browser, the application Libreoffice Writer should appear.
Type some text data like 'Hello, I am running inside a docker container'
"},{"location":"1.0/setup/novnc/#install-the-windows-manager-openbox-on-your-myx11server-container","title":"Install the windows manager openbox on your myx11server container","text":"
To move, resize, close, the windows applications, we need a windows manager. abcdesktop is the windows manager. OpenBox is a lightweight, powerful, and highly configurable stacking window manager with extensive standards support.
Run the install openbox command in your myx11server container.
apt-get install -y openbox\n
Set the DISPLAY environment variable to :0.0 and start openbox in background
export DISPLAY=:0.0\nopenbox &\n
Now, you can move the Libreoffice windows. All windows are decorated.
Great you have installed the novnc gateway, and you just need a HTML Web browser to use a Libreoffice
"},{"location":"1.0/setup/retrieve_all_images/","title":"Get all applications for abcdesktop","text":"
Lot of application are ready to use for abcdesktop. All applications are opensource.
You can download the image list from the applist file, or run the command the pull command where $APP is the name of your application.
docker pull abcdesktopio/$APP.d\n
for example to download libreoffice calc, run the command
docker pull abcdesktopio/calc.d\n
Read the list of all applications on the application list page
"},{"location":"1.0/setup/uninstalldockermode/","title":"Uninstall abcdesktop.io for non-cluster hosts","text":""},{"location":"1.0/setup/uninstalldockermode/#commands-to-uninstall-abcdesktopio","title":"Commands to uninstall abcdesktop.io","text":"
Go to the abcdesktop directory (where the docker-compose.yml is located), and run the bash commands :
echo \"starting abcdesktop uninstall commands\"\ndocker-compose -p abcdesktop down\necho \"stop and remove abcdesktop services\"\ndocker-compose rm -s -v -f\necho \"remove all abcdesktop user container\"\ndocker ps --filter \"label=type=x11server\" -q | xargs docker stop\ndocker ps --filter \"label=type=x11server\" -q | xargs docker rm\necho \"remove all abcdesktop images\"\ndocker images --filter=reference='abcdesktopio/*:*' --format \"{{.Repository}}:{{.Tag}}\" | xargs docker rmi\necho \"remove all user volumes\"\ndocker volume ls -f label=type=x11server -q | xargs docker volume rm\necho \"abcdesktop is uninstalled\"\n
Great, you have uninstalled abcdesktop in non-cluster hosts.
"},{"location":"1.0/setup/vnc/","title":"abcdesktop.io from scratch","text":"
The goal of this chapter is to learn how abcdesktop.io works. You should not repeat the process in production, but prefer use a Dockerfile and the docker build command.
Xvnc TigerVNC 1.7.0 - built Dec 5 2017 09:25:01\nCopyright (C) 1999-2016 TigerVNC Team and many others (see README.txt)\nSee http://www.tigervnc.org for information on TigerVNC.\nUnderlying X server release 11905000, The X.Org Foundation\n\n\nMon Mar 2 11:43:56 2020\n vncext: VNC extension running!\n vncext: Listening for VNC connections on all interface(s), port 5900\n vncext: created VNC server for screen 0\n
Great, you have installed an X11 server inside a docker container, and the Xvnc server is listening for VNC connections on the tcp port 5900. Keep this container running.
We will use the host tcp port 5900 to connect VNC Client.
"},{"location":"1.0/setup/vnc/#use-vnc-client-to-connect-to-your-first-container-myx11server","title":"Use VNC client to connect to your first container myx11server","text":"
From your host or from another host, install a VNC client. You can use your prefered VNC Client for your operating system or the RealVNC's VNC Viewer. You can download the RealVNC's VNC Client, by following the link https://www.realvnc.com/fr/connect/download/viewer/
Run the VNC Viewer, and set the hostname where the container myx11server is running. In the following example.
Here I am using VNC Viewer on Mac OS/X and I did set the hostname to localhost.
This is a getting started guide to understand how abcdesktop works, so we did not set a password to protect the VNC access. This is not the best practices guide for production installations. As we did not set a password to protect the VNC access, you have to confirm the uncrypted connection warning dialog box and then press the Continue button.
This is just an example to understand how abcdesktop works, so we did not set a password to protect the VNC access.
You need to confirm the uncrypted connection warning dialog box. Press the Continue button.
A black screen should appear :
Keep this VNC Client running, we will use this display to show our applications later.
"},{"location":"1.0/setup/vnc/#install-an-x11-application-as-a-docker-application","title":"Install an x11 application as a docker application","text":"
On your host, where your container myx11server is running. Open a new shell window and start a new docker container named myapp. The myapp container access to the volume myshared and mount it to /tmp.
docker run -it -v myshared:/tmp --name myapp ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install standart application like xedit, xman or xeyes, install the package x11-apps.
Run those commands in your myx11server container.
apt-get update\napt-get install -y x11-apps\n
Set the DISPLAY environment variable to :0.0 and then start the xedit command.
export DISPLAY=:0.0\nxedit\n
On the VNC Viewer, the application xedit should appear.
Great, you can run a X11 application inside a dedicated docker container, and use your myx11server as DISPLAY. But you can't move, resize or close the xedit window.
"},{"location":"1.0/setup/vnc/#install-the-windows-manager-openbox-on-your-myx11server-container","title":"Install the windows manager openbox on your myx11server container","text":"
To move, resize, close, the windows applications, we need a windows manager. abcdesktop use the windows manager openbox. OpenBox is a lightweight, powerful, and highly configurable stacking window manager with extensive standards support.
Run the install openbox command in your myx11server container.
apt-get install -y openbox\n
Set the DISPLAY environment variable to :0.0 and then start openbox.
export DISPLAY=:0.0\nopenbox\n
The Openbox message appear to the sdterr
Openbox-Message: Unable to find a valid menu file \"/var/lib/openbox/debian-menu.xml\"\n
Now, you can move the window xedit. The windows are decorated.
"},{"location":"1.0/setup/vnc/#remove-the-myapp-container","title":"Remove the myapp container","text":"
Activate the window shell with your myapp running container, and press CTRL+C
You can remove your docker container, to clean up your environment
docker rm myapp\n
"},{"location":"1.0/setup/vnc/#install-another-x11-application-as-a-docker-application","title":"Install another x11 application as a docker application","text":"
On your host, where your container myx11server is running, open a new shell window and start a new docker container named myapp.
docker run -it -v myshared:/tmp --name myfirefox ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install firefox application, run the install firefox command in your myfirefox container.
apt-get update\napt-get install -y firefox\n
Run the firefox command
export DISPLAY=:0.0\nfirefox\n
You should read the output
\n(firefox:1831): LIBDBUSMENU-GLIB-WARNING **: 14:42:14.737: Unable to get session bus: Failed to execute child process ?dbus-launch? (No such file or directory)\n
On the VNC Viewer, the application firefox should appear.
Check that firefox works and go to your favorite web site.
"},{"location":"1.0/setup/vnc/#clean-your-setup","title":"Clean your setup","text":"
To clean your work space, stop the running containers myapp myfirefox myx11server, then remove them. We also need to remove the shared volume myshared
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"2.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"2.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"2.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
"},{"location":"2.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"2.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"2.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"2.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"2.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"2.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"2.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. A bind operation is used to authenticate clients to the directory server, to establish an authorisation identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description default_domain string set the default domain name, if user does not prefix the login by domain\\s. default_domain is only used by Active Directory provider providers dictionary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"2.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionary object and must contain a key name. The key name must be set with the same value in provider configuration and config_ref.
The provider is formatted as a dictionary. Example for a provider defined as planet
Variable name Type Description config_ref string For increased readability , the configuration is defined in a dedicated and separated dictionary as (key,value) 'config_ref': 'planet', where key is config_ref and value is the dictionary variable name. enable boolean True to enable or False to disable the provider configuration
"},{"location":"2.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this ldap configuration as default (if more than one ldap auth provider is defined) True auth_only boolean Do not run ldap queries, only use to run authentication False auth_type string authentification protocol to bind the ldap server. Values can be 'KERBEROS', 'NTLM' or 'SIMPLE' The default value is 'SIMPLE' basedn string LDAP base Distinguished Name ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. This entry must be prefixed by the protocol ldap or ldaps for each server [ 'ldap://192.168.1.12', 'ldaps://192.168.1.13' ] LDAP server address IP Address or FQDN value scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos keytab file the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))serviceaccount dictionary entries to defined service account credentials formatted like { 'login': 'cn=admin,dc=planetexpress,dc=com', 'password': 'GoodNewsEveryone' } or { 'login': 'file://config/serviceaccount/login', 'password': 'file://config/serviceaccount/passwd' }"},{"location":"2.0/config/authexplicit-ldap/#ldap-service-account","title":"ldap service account","text":"
Ldap service account permits service account binding. A service account can be defined using clear text login and password data, or as file reference login and password starting by file://.
If login starts by file://, then pyos open the defined file to read login data.
If password starts by file://, then pyos open the defined file to read password data.
The file reference file:// for login and password is used to read kubernetes secret file data.
"},{"location":"2.0/config/authexplicit-ldap/#configure-auth-using-the-openldap-container","title":"Configure Auth using the OpenLDAP container","text":""},{"location":"2.0/config/authexplicit-ldap/#openldap-container-for-testing","title":"OpenLDAP container for testing","text":"
To configure abcdesktop to use an explicit authentification, we need a directory service. We use an OpenLDAP container for testing with provisioned values. docker-test-openldap from rroemhild works fine ans id very useful.
Read the OpenLDAP container for testing documentation on the url abcdesktop OpenLDAP Docker Image for testing
"},{"location":"2.0/config/authexplicit-ldap/#update-the-odconfig-configuration-file","title":"Update the od.config configuration file","text":"
Update the od.config configuration file.
Add the explicit entry to the dictionary authmanagers.
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
"},{"location":"2.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-container-for-testing","title":"The LDAP structure of OpenLDAP container for testing","text":""},{"location":"2.0/config/authexplicit-ldap/#basedn","title":"BaseDN","text":"
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"2.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"2.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"2.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"2.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"2.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"2.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"2.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"2.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"2.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"2.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionary object and contains an explicit provider.
The explicit provider support the directory services ldap, ldaps, and Microsoft Active Directory, and SIMPLE, NTLM and KERBEROS protocols.
Configuration sample for Microsoft Active Directory with KERBEROS protocol :
Read the specific chapter on LDAP explicit authmanagers
"},{"location":"2.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
implicit is the easiest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionary object and contains an anonymous provider.
anonymous provider always permits authentification, and create a uuid as userid. anonymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Select the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command
kubectl get pods -n abcdesktop \n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
When an anonymous user close his session, the anonymous home directory is deleted.
Great, you have check how the implicit Authentification configuration works.
"},{"location":"2.0/config/authmetaexplicit/","title":"Authentification metaexplicit for Microsoft Active Directory services with trust relationships","text":""},{"location":"2.0/config/authmetaexplicit/#authmanagers-metaexplicit-object","title":"authmanagers metaexplicit object","text":"
The metaexplicit authentification manager contains only one provider. The provider must be defined as metadirectory.
Variable name Type Description providers dictionary { 'metadirectory': { 'config_ref': 'coporateconfig', 'enabled': True }}"},{"location":"2.0/config/authmetaexplicit/#metadirectory-provider-configuration","title":"metadirectory provider configuration","text":"
The metadirectory provider is defined as a dictionnary object and must contain key name. The key name must be set as the name of a dictionaryin the config_ref.
A metadirectory provider must contain a ldap attribut to describe the original DOMAIN and sAMaccountName. The ldap attribut is defined as join_key_ldapattribut.
coporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } } \n
Pyos binds the metadirectory ldap server with serviceaccount credentials Pyos read the ldap attribut description value to get the user's trusted domain.
For example :
description: AD\\john\n
Then pyos look for provider AD configuration and process authentification on domain AD
The metadirectory accounts can be disabled. The ldap attribut userAccountControl is not read on metaDirectory provider. The account can have the bit UF_ACCOUNT_DISABLE set or not.
A service account must defined for a metadirectory provider. The service account is used to bind the metadirectory.
"},{"location":"2.0/config/authmetaexplicit/#complete-example-with-a-metadirectory-provider-and-active-directory-user-domain","title":"Complete example with a metadirectory provider and active directory user domain","text":"
The user's domain mane is AD. The meta domain name is CORPORATE. The meta domain use a dedicated attribut join_key_ldapattribut
authmanagers: {\n #\n # define the meta explicit manager\n # This is the trusted external forest for the followed domain\n #\n 'metaexplicit': {\n 'providers': {\n # define the metadirectory provider\n # only one metadirectory provider is supported \n 'metadirectory': { \n 'config_ref': 'coporateconfig', \n 'enabled': True } \n }\n },\n\n # \n # define the Active Directory provider for each DOMAIN\n # define two domains in two disctinct forest with a trust relationship \n # \n 'explicit': { \n # define an Active Directory provider AD \n 'AD': { 'config_ref': 'adconfig', 'enabled': True },\n # define an Active Directory provider ANOTHER\n 'ANOTHER': { 'config_ref': 'anotherconfig', 'enabled': True } \n }\n} # end of authmanagers\n\n# In this example ldap attribut's description contains AD\\myuser or ANOTHER\\myuser \ncoporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } }\n\n\n# \n# define the first DOMAIN AD\n# The adconfig ref for domain AD\n#\nadconfig : { 'AD': { 'ldap_basedn' : 'DC=ad,DC=domain,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.ad.domain.local',\n 'domain' : 'AD',\n 'auth_type' : 'NTLM',\n 'domain_fqdn' : 'AD.DOMAIN.LOCAL',\n 'servers' : [ 'ldap://192.168.7.12' ] } }\n\n#\n# define the second DOMAIN ANOTHER\n# The anotherconfig ref for domain ANOTHER\n#\nanotherconfig : { 'ANOTHER': {\n 'ldap_basedn' : 'DC=another,DC=super,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.another.super.local',\n 'domain' : 'ANOTHER',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn' : 'ANOTHER.SUPER.LOCAL',\n 'servers' : [ 'ldap://192.168.10.12' ],\n 'kerberos_realm': 'AD.SUPER.LOCAL' } }\n
metadirectory support the foreign security principal (FSP) to query security principal in the trusted external forest. These objects are created in the foreign security principals container of the domain. metadirectory support isMemberOf on foreign security principal.
The user's SID of domain 'AD' or 'ANOTHER' is NOT read. A new ldap bind is done using the trusted domain on metadirectory provider and not unsing the service account.
The ldap query is build : ( \"search_base={q.basedn}, search_scope={q.scope}, search_filter={filter}\" )
To get more information about foreign security principal (FSP), read :
Foreign Security Principals Container
Active Directory: Foreign Security Principals and Special Identities
"},{"location":"2.0/config/balloon/","title":"balloon user entry in od.config","text":"
balloon is the default generic user.
The balloon user is created inside the oc.user container
abcdesktop.io use a Model\u2013view\u2013controller (usually known as MVC) is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
Controller Description AccountingController accounting data json and ebnf format AuthController authenticate user ComposerController CRUD main services (like createDesktop, runApplication) CoreController get configuration and user message info ManagerController manage pyos PrinterController CRUD printer object StoreController CRUD key value data UserController retrieve user information"},{"location":"2.0/config/controllers/#access-permission","title":"Access Permission","text":"
The AccountingController and ManagerController access is protected with a source ip address filter. The access control filter is defined in a dictionary. Each dictionary entry use the controller name and with an entry permitip. The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or the controller name is not set, all ip source address are allowed the send a request to the controller.
The controllers dictionnary is defined in the od.config file. By default the configuration permit private network defined in rfc1918 and rfc4193. Get more information about the private network.
By default others controllers access is enabled, without ip restriction.
If the source ip address is not allowed, the response is a HTTP status code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"2.0/config/desktop/","title":"desktop options in od.config","text":"
The od.config contains options to describe how the oc.user and applications containers have to be created. Options differ if abcdesktop.io is running in docker mode or in kubernetes mode.
The desktop.usex11unixsocket force the X11 server to use local unix socket. The name of the X11 unix socket is /tmp/.X11-unix/X0
If this feature is enable: A container application need a the DISPLAY. The DISPLAY is in this case :0.0. The container application and the oc.user container share the same volume /tmp, and share the X11 unix socket is /tmp/.X11-unix/X0.
If this feature is disable: A container application need a DISPLAY. The DISPLAY is :0.0 (don't think at IPADDRESS_OF_X11_SERVER:0.0 to protect X11 access control). The two containers share the same network stack by default. The X11 server NEED to listen to a TCP or UDP port.
You can disable this features, but you have to replace the default TigerVNC by another X11 Server and a VNC Server. You can choose (x.org + x11vnc) for example, but you need more CPU ressource than TigerVNC.
TigerVNC does not support to listen on TCP Port. TigerVNC is a X11 and a VNC Server.
Set the desktop.usex11unixsocket value to True in most case, and this should not be changed.
The type of desktop.shareipcnamespace is a string. The default value is 'shareable' This option permit user contain to share the ipc namespace with application
Value Description '' Use daemon\u2019s default. 'none' Own private IPC namespace, with /dev/shm not mounted. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system\u2019s IPC namespace.
If not specified, daemon default is used, which can either be 'private' or 'shareable', depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues.
Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built (typically C/OpenMPI, C++/using boost libraries) high performance applications for scientific computing and financial services industries.
If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using \"shareable\" mode for the main (i.e. \u201cdonor\u201d) container, and containers can access \"container:\".
Default value desktop.shareipcnamespace : 'shareable'
This option describes how the default home directory for user user ballon should be created :
None: no dedicated volume is created, the oc.user container use a directory inside the container. All user data will be removed at logout.
'volume': This value is only recommended in docker mode. 'volume'option create a dedicated volume, the oc.user container and applications may share this volume. User home data are persistent.
'persistentVolumeClaim': This value is only avalaible in kubernetes. PersistentVolumeClaim option use a persistentVolumeClaim to create the user home directory. The persistentVolumeClaim can be mapped to differents storage data (like NFS, iSCSI, RBD...). Read more about persistentVolumeClaim on the kubernetes.io website. You need the set the value of desktop.persistentvolumeclaim or create a default Persistent Volume Claim named 'abcdesktop-pvc'
desktop.persistentvolumeclaim is the name of the Persistent Volume Claim if the desktop.homedirectory is set to 'persistentVolumeClaim'. The PVC (Persistent Volume Claim) must exist.
Run the kubectl get pvc command to list the persistent volume claim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nabcdesktop-pvc Bound abcdesktop-pv 5Gi RWO abcdesktop-standard 170d\n
desktop.remotehomedirectorytype is a list of string. Each string describe if the remount access to a directory is allowed. example [ 'cifs', 'webdav' ]
For each entry in the desktop.remotehomedirectorytype list, abcdesktop.io try to mount the remote file system using data from the implicit auth provider.
If desktop.remotehomedirectorytype contains 'cifs' and if the authentification provider get homeDrive and homeDirectory attributs then abcdesktop request the kubernetes abcdesktop/CIFS Driver to mount the remote filesystem. The user find a mount point named homeDrive value, and mounted to homeDirectory.
The desktop.allowPrivilegeEscalation option allow a user to run a sudo command. The execve system call can grant a newly-started program privileges that its parent did not have, such as the setuid or setgid Linux flags.
The default value is False You should only set desktop.allowPrivilegeEscalation to run sudo command.
The desktop.imagePullSecret is the name of the secret used by Kubernetes to access to the private registry. The type of desktop.imagePullSecret is a string. This option is only available in Kubernetes mode, and anly used if you need to store the abcdesktop docker image on a private registry.
Example to build a registry Kubernetes secret named abcdesktopregistrysecret with the docker hub.
The desktop.useprintercontainer is boolean, to use printer cupsd service as an separated container. This value is only available in kubernetes mode. The default value is False.
The desktop.usesoundcontainer is boolean, to use pulseaudio service as a separated container. This value is only available in kubernetes mode. The default value is False.
This option is used when presistent volume data mount a nfs storage. The uid and gid of /home/balloon must be set to the default value of (balloon:balloon) (4096:4096).
Add 'CUPS_SERVER: '/tmp/.cups.sock' only if desktop.useprintercontainer is True. Add 'PULSE_SERVER: '/tmp/.pulse.sock' only if desktop.usesoundcontainer is True.
desktop.nodeselector is a dictionary. This option permits to assign user pods to nodes. It specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). The most common usage is one key-value pair.
desktop.username describes the balloon user created inside the oc.user container. The type of desktop.username is string. The default value is 'balloon'.
If you change this value, you have to rebuild your own oc.user file The script oc.user in Dockerfile oc.user :
desktop.userhomedirectory describes the homedirectory of the user created inside the oc.user container. The type of desktop.userhomedirectory is string. The default value is /home/balloon.
If you change this value, you have to rebuild your own oc.user file The script oc.user in Dockerfile oc.user :
The desktop.uselocaltime is boolean, to use host value of /etc/localtime. The default value is False. If desktop.uselocaltime is True, this add a volume mapping from host file /etc/localtime to container file /etc/localtime.
WARNING desktop.desktopuseinternalfqdn is an experimental feature, keep this value to False in production
desktop.desktopuseinternalfqdn describes the content of the payload data in the JWT Desktop Token. The default value is False.
Nginx front end act as a reverse proxy. This reverse proxy use the FQDN of the user's pod to route http request. If this value is set to False the payload data in the JWT Desktop Token contains the IP Address of the user Pod. If this value is set to True the payload data in the JWT Desktop Token contains the FQDN of the user Pod.
If you CAN NOT add endpoint_pod_names in the coredns configuration, you MUST set desktop.desktopuseinternalfqdn to False. This choice is less secure.
To set desktop.desktopuseinternalfqdn to True value, you have to update the coredns ConfigMap.
Or you can also use the replace command kubectl create -n abcdesktop configmap abcdesktop-config --from-file=od.config -o yaml --dry-run | kubectl replace -n abcdesktop -f -
"},{"location":"2.0/config/editconfig/#check-your-changes","title":"Check your changes","text":"
To check that the new colours are presents in front, open the url http://localhost:30443, in your web browser, to start a simple abcdesktop.io container.
http://localhost:30443\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colour and you should have it as background colour :
Great, you can easily update your configuration file od.config.
"},{"location":"2.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"2.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"2.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"2.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"2.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"2.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"2.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"2.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"2.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"2.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"2.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"2.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"2.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
"},{"location":"2.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"2.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"2.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"2.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"2.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"2.0/config/webrtc/","title":"Sound server configuration","text":"
By default abcdesktop use the module-http-protocol-tcp from pulseaudio sound server to send wav data to the web browser
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"2.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"2.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"2.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
"},{"location":"3.0/features/#volumes","title":"Volumes","text":""},{"location":"3.0/features/#users-home-directories","title":"User's home directories","text":"
Define volumes to retain user's home directory files. User's home directory can be mounted as hostPath on each worker node or as persistentVolumeClaim. Get more informations about the persistentVolume and persistentVolumeClaim to retain user datas.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/","title":"application runtime Ephemeral container and Pod","text":"
An abcdesktop application can run as a kubernetes ephemeral container or as a pod.
An ephemeral container can access to share memory shm with the X11 server. An ephemeral container run always on the same node as the user pod, where the graphical container 'X11 server' is running. An ephemeral container does not prevent cpu and memory resource limits.
A pod can't access to share memory with the X11 server. An kubernetes pod can run on separated node from the user's pod node. For a pod, you can specify resource limits.
To describe the difference between ephemeral-container and pod-application, we use the game 2048, one instance come from alpine based on gtk, the second one come from ubuntu based on qt
2048-alpine is a GTK application, and is defined to run as ephemeral-container
2048-ubuntu is a QT application, and is defined to run as a kubernetes pod
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#start-a-shell-to-your-abcdesktop-server","title":"Start a shell to your abcdesktop server","text":"
Get a shell to your abcdestkop server.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#download-2048-alpine-and-2048-ubuntu-json-files","title":"Download 2048-alpine and 2048-ubuntu json files","text":"
$ ls -la *.json\n-rw-r--r-- 1 root root 29183 Dec 28 16:24 2048-alpine.d.3.0.json\n-rw-r--r-- 1 root root 29099 Dec 28 16:24 2048-ubuntu.d.3.0.json\n
Look at the label oc.containerengine for each json file
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#read-the-label-occontainerengine-for-2048-alpine","title":"Read the label oc.containerengine for 2048-alpine","text":"
This application 2048-alpine will start as an ephemeral_container
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#read-the-label-occontainerengine-for-2048-alpine_1","title":"Read the label oc.containerengine for 2048-alpine","text":"
This application 2048-ubuntu will start as a pod_application, it's a pod.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#put-2048-alpine-and-2048-ubuntu-applications-to-your-abcdesktop-service","title":"PUT 2048-alpine and 2048-ubuntu applications to your abcdesktop service","text":"
curl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine.d.3.0.json\ncurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-ubuntu.d.3.0.json\n
Each curl command returns a complete json document.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Using a web browser, open the abcdesktop service url. If your are running abcdesktop on your local device, the url should be :
http://localhost:30443\n
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#choose-to-login-as-hermes","title":"Choose to login as hermes","text":"
Login in as the user Hermes Conrad
Login: Hermes Conrad
Password: hermes
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#your-desktop-is-created","title":"Your desktop is created","text":"
Your desktop is created. By default your dock is empty.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#look-for-2048","title":"Look for 2048","text":"
In the search text area, write the keyword 2048
The two applications appear in the search result applications area.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#start-each-2048-application","title":"Start each 2048 application","text":"
Start 2048-ubuntu and 2048-alpine application
2048-ubuntu and 2048-alpine applications start. The application 2048-alpine can start quickly than the application 2048-ubuntu.
2048-alpine is an ephemeral container attached to the graphical container.
2048-ubuntu is a complete kubernetes pod.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#lets-have-a-look-on-your-server-side","title":"Let's have a look on your server side","text":""},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#get-pod-application","title":"Get pod application","text":"
Get the running pod using kubectl get pods -n abcdesktop
The application 2048-ubuntu is listed as a pod. The application 2048-ubuntu is a pod. The prefix is the $userid-app for example hermes-app-2048-ubuntu-4dd6f, followed by the application name 2048-ubuntu and a uuid.
The application 2048-alpine is not a pod.
The application 2048-alpine is listed as an ephemeral container, inside the user pod hermes-db906
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#ephemeral-container-versus-pod-application","title":"Ephemeral container versus Pod application","text":"
An ephemeral container can access to share memory shm with the X11 server. An ephemeral container run always on the same node as the X11 server.
A pod can't access to share memory with the X11 server. An Kubernetes pod can run on a separated node from the X11 server.
If your application need to share memory with X11 server, when you have to set the oc.containerengine label to ephemeral_container.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#compare-kubernetes-ephemeral-container-and-pod","title":"Compare kubernetes ephemeral container and pod","text":""},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#kubernetes-ephemeral-container","title":"Kubernetes ephemeral container","text":"
Use an ephemeral container to start an application have some advantages and some disadvantages.
If you configure 2048-alpine with gtk to start as a pod and not as an ephemeral container, you will get the BadShmSeg error
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#install-the-application-2048-alpine-with-error","title":"Install the application 2048-alpine-with-error","text":"
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#put-2048-alpine-with-error-applications-to-your-abcdesktop-service","title":"PUT 2048-alpine-with-error applications to your abcdesktop service","text":"
curl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine-with-error.d.3.0.json\n
Using a web browser, open the abcdesktop service url. If your are running abcdesktop on your local device, the url should be :
http://localhost:30443\n
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#choose-to-login-as-hermes_1","title":"Choose to login as hermes","text":"
Login in as the user Hermes Conrad
Login: Hermes Conrad
Password: hermes
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#your-desktop-is-created_1","title":"Your desktop is created","text":"
Your desktop is created. By default your dock is empty.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#look-for-2048_1","title":"Look for 2048","text":"
In the search text area, write the keyword 2048
The three applications appear in the search result applications area.
Start the 2048 (alpine gtk with error) application. It uses shared segment with X Window System, it must run as an ephemeral container, but as a pod it fails. The application starts but exit after few seconds, the content of the application does not appear.
In the abcdesktop menu, choose Settings |\u00a0Tasks.
Then select the Logs button. The error was 'BadShmSeg (invalid shared segment parameter)'.
(org.gnome.TwentyFortyEight:36): Gdk-WARNING **: 10:14:26.185: The program 'org.gnome.TwentyFortyEight' received an X Window System error.\nThis probably reflects a bug in the program.\nThe error was 'BadShmSeg (invalid shared segment parameter)'.\n(Details: serial 820 error_code 128 request_code 131 (MIT-SHM) minor_code 3)\n(Note to programmers: normally, X errors are reported asynchronously;\nthat is, you will receive the error a while after causing it.\nTo debug your program, run it with the GDK_SYNCHRONIZE environment\nvariable to change this behavior. You can then get a meaningful\nbacktrace from your debugger if you break on the gdk_x_error() function.)\n
If you are running QT application, you can disable the X11 MIT Shared Memory Extension support. The MIT-SHM is an extension to the X server which allows faster transactions by using shared memory. Container isolation blocks it. Qt applications can be forced not to use the extension, by setting the variable QT_X11_NO_MITSHM value to 1.
QT_X11_NO_MITSHM=1 \n
Note your can also use QT_XCB_NO_MITSHM value to 1
For chromium application disabled shm-usage with the parameters --disable-dev-shm-usage
disable-dev-shm-usage get more informations about the dev shm usage and all chromium parameters
no-sandbox: get more informations about the no-sandbox parameters.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#troubleshooting-cannot-open-display-or-could-not-connect-to-display-error","title":"Troubleshooting cannot open display or could not connect to display error","text":"
When you start an application the log file write cannot open display error
qt.qpa.xcb: could not connect to display 172.17.0.10:0\nqt.qpa.plugin: Could not load the Qt platform plugin \"xcb\" in \"\" even though it was found.\nThis application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.\n\nAvailable platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.\n
Using the web shell inside an abcdesktop session, start netstat -a command line
The result should show that the process Xvnc is listening on tcp port number 6000
hermes:~$ netstat -anp\nActive Internet connections (servers and established)\nProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name \ntcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 82/Xvnc \n
If Xvnc is not listening on tcp port number 6000
Update od.config to make Xvnc listen on tcp port number 6000
Open your od.config file, and look at the desktop.envlocal option.
"},{"location":"3.0/application/createsampleapplication/","title":"Create a sample application in release 3.0","text":""},{"location":"3.0/application/createsampleapplication/#requirements","title":"Requirements","text":"
"},{"location":"3.0/application/createsampleapplication/#make-a-dockerfile-from-the-samplejson-file","title":"make a Dockerfile from the sample.json file","text":"
make.js is a command line for abcdesktop. make.js read a json file and create a Dockerfile
The make.js options are :
-r 3.0 : to build image in abcdesktop 3.0 format
-d True : to create a Dockerfile as output
-f sample.json: file to read as input
npm i argparse npm notice created a lockfile as package-lock.json. You should commit this file. + argparse@2.0.1 added 1 package and audited 1 package in 0.837s found 0 vulnerabilities
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=3.0\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update xterm\nENV BUSER balloon\nLABEL oc.icon=\"small.svg\"\nLABEL oc.icondata=\"PHN2ZyB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xterm,xterm,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"xterm.XTerm\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nLABEL oc.name=\"Xterm\"\nLABEL oc.displayname=\"Xterm\"\nLABEL oc.path=\"/usr/bin/xterm\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"Xterm\"\nENV APPBIN \"/usr/bin/xterm\"\nENV APP \"/usr/bin/xterm\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nUSER balloon\nCMD [\"/composer/appli-docker-entrypoint.sh\"]\nWORKDIR /home/balloon\n
"},{"location":"3.0/application/createsampleapplication/#build-the-abcsample30-from-dockerfile","title":"build the abcsample:3.0 from Dockerfile","text":"
docker build -t abcsample:3.0 .\n
Sending build context to Docker daemon 44.21MB\nStep 1/29 : ARG TAG=3.0\nStep 2/29 : FROM abcdesktopio/oc.template.alpine.minimal:$TAG\n ---> 8528ff0674c7\nStep 3/29 : USER root\n ---> Using cache\n ---> 10372fb6f76c\nStep 4/29 : RUN apk add --no-cache --update xterm\n ---> Using cache\n ---> f222db3926f1\nStep 5/29 : LABEL oc.icon=\"small.svg\"\n ---> Running in 3303dde31f46\nRemoving intermediate container 3303dde31f46\n ---> 2cb2fac76cbd\nStep 6/29 : LABEL oc.icondata=\"PHN2ZyB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPjwvc3ZnPgo=\"\n ---> Running in 65170013c043\nRemoving intermediate container 65170013c043\n ---> 52af61054ac3\nStep 7/29 : LABEL oc.keyword=\"xterm,xterm,shell,cmd\"\n ---> Running in ad13bedc4b0a\nRemoving intermediate container ad13bedc4b0a\n ---> 5bde38f46888\nStep 8/29 : LABEL oc.cat=\"development\"\n ---> Running in 238c24528439\nRemoving intermediate container 238c24528439\n ---> 886ede105940\nStep 9/29 : LABEL oc.launch=\"xterm.XTerm\"\n ---> Running in 1b2c45e68c29\nRemoving intermediate container 1b2c45e68c29\n ---> cf827822a393\nStep 10/29 : LABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\n ---> Running in 8adfa795a837\nRemoving intermediate container 8adfa795a837\n ---> 5e17811c5290\nStep 11/29 : LABEL oc.name=\"Xterm\"\n ---> Running in e2ed34859ca2\nRemoving intermediate container e2ed34859ca2\n ---> e3ed08726ea1\nStep 12/29 : LABEL oc.displayname=\"Xterm\"\n ---> Running in 636fa338c00f\nRemoving intermediate container 636fa338c00f\n ---> 0c756bf8c322\nStep 13/29 : LABEL oc.path=\"/usr/bin/xterm\"\n ---> Running in 2a7355d27588\nRemoving intermediate container 2a7355d27588\n ---> 06ae4c2fdaa7\nStep 14/29 : LABEL oc.type=app\n ---> Running in 0c6f5f1c9d07\nRemoving intermediate container 0c6f5f1c9d07\n ---> 4bd3f1462669\nStep 15/29 : LABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\n ---> Running in 1d836f666a9e\nRemoving intermediate container 1d836f666a9e\n ---> 28ed74393046\nStep 16/29 : LABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\n ---> Running in 3489fb9b8571\nRemoving intermediate container 3489fb9b8571\n ---> 902caf61d44f\nStep 17/29 : RUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi\n ---> Running in 0de74bad43c7\nRemoving intermediate container 0de74bad43c7\n ---> 720830424aeb\nStep 18/29 : RUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi\n ---> Running in 47b9a1b745e1\nRemoving intermediate container 47b9a1b745e1\n ---> 9f63628f1cb5\nStep 19/29 : ENV APPNAME \"Xterm\"\n ---> Running in d175a1ece669\nRemoving intermediate container d175a1ece669\n ---> 150c4cfe4aa3\nStep 20/29 : ENV APPBIN \"/usr/bin/xterm\"\n ---> Running in 997fee55d34e\nRemoving intermediate container 997fee55d34e\n ---> 425ac1a6e205\nStep 21/29 : ENV APP \"/usr/bin/xterm\"\n ---> Running in 53dd44a513fd\nRemoving intermediate container 53dd44a513fd\n ---> 7df215f71bec\nStep 22/29 : USER root\n ---> Running in 003691cdc4f2\nRemoving intermediate container 003691cdc4f2\n ---> 0af1892ae7ad\nStep 23/29 : RUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\n ---> Running in 47d3dff0120d\nRemoving intermediate container 47d3dff0120d\n ---> bd4bc4ebf2cf\nStep 24/29 : RUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\n ---> Running in 91dfbff4d2d2\nRemoving intermediate container 91dfbff4d2d2\n ---> 230d75aceb20\nStep 25/29 : RUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\n ---> Running in 4e0d720f0cfd\nRemoving intermediate container 4e0d720f0cfd\n ---> 2545327438db\nStep 26/29 : RUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\n ---> Running in 37770cba900b\nRemoving intermediate container 37770cba900b\n ---> 06ba8e872dfb\nStep 27/29 : RUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\n ---> Running in 88f16a8cbe63\nRemoving intermediate container 88f16a8cbe63\n ---> 7464bca775cd\nStep 28/29 : USER balloon\n ---> Running in b7ac37070372\nRemoving intermediate container b7ac37070372\n ---> e476af17dfbd\nStep 29/29 : CMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n ---> Running in 05b3b17a1c8c\nRemoving intermediate container 05b3b17a1c8c\n ---> e96d24e8088e\nSuccessfully built e96d24e8088e\nSuccessfully tagged abcsample:3.0\n
"},{"location":"3.0/application/createsampleapplication/#export-and-import-abcsample30","title":"export and import abcsample:3.0","text":"
abcdesktop is designed to use a private or public image registry. A registry is a mandatory service to manage kubernetes cluster with some nodes.
In this case, we suppose we don't have a registry, and we use the same host to build and run application. We need to offer the registry service manually, and copy container image.
Export the image to OCI image format
docker save abcsample:3.0 -o abcsample.tar\n
Import abcsample into the namespace k8s.io using ctr
"},{"location":"3.0/application/createsampleapplication/#run-the-new-application","title":"Run the new application","text":"
Open a web browser and go to abcdesktop service url.
Open a new abcdesktop session.
Look for your new application xterm
Start your new application xterm
The icon of then new application xterm is a green rect. It appears in the dock.
Logoff to free ressources.
You have created your own abcdesktop application, import the image, and start it. To get more details, look at the applist.json it describe all json applications for abcdesktop.
"},{"location":"3.0/application/createsampleapplication/#rebuild-all-images","title":"Rebuild all images","text":"
To rebuild all application in applist.json, run node make.js -r 3.0
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"3.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"3.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"3.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
The authentification configuration is set in the od.config file. In this chapter you will need to update the od.config configuration file. This update differs depending on the configuration docker mode or kubernetes mode.
Read the Update your configuration file and apply the new configuration file section to make change in od.config file for kubernetes cluster.
The od.config defines four kinds of entries in the authmanagers object :
external: use for OAuth 2.0 Authentification
explicit: use for LDAP, LDAPS and ActiveDirectory Authentification
metaexplicit: use Microsoft Active Directory Trusted relationship, with support of FSP (Foreign Security Principals)
implicit: use for Anonymous Authentification and SSL-client certificat
"},{"location":"3.0/config/authentification/#related-authmanagers","title":"Related authmanagers","text":"authmanagers type Description external For OAuth 2.0 authentification metaexplicit For Microsoft Active Directory Trusted relationship, with support of Foreign Security Principals and Special Identities explicit For LDAP, LDAPS, Active Directory Authentification, and Kerberos authentification implicit For anonymous authentification, for an always True Authentification, and SSL-client certificat"},{"location":"3.0/config/authentification/#hands-on","title":"Hands-on","text":""},{"location":"3.0/config/authentification/#requirements","title":"Requirements","text":"
You should have read the hands-on :
Update your configuration file and apply the new configuration file section to make change in od.config file for kubernetes cluster.
Edit your od.config pyos configuration file, and set the value to the authmanagers dictionary with empty values for implicit, explicit, and external, as describe :
metaexplicit offers a support to Microsoft Active Directory Trusted relationship, with support of Foreign Security Principals and Special Identities. Read the authmanagers explicit Section.
"},{"location":"3.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"3.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"3.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"3.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"3.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"3.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"3.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string not used by ldap, only used by Active Directory providers dictionnary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"3.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set with the same value in providers configuration and config_ref.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
"},{"location":"3.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this domain as default domain True tls_require_cert boolean The default value is False. tls_require_cert apply only if ldap server URI starts with ldaps. Allow LDAPS connection if the ldaps server hostname does not match CommonName peer certificate. In production, set this value to True This will disable the ldap option call : ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) False basedn string LDAP Base Distinguished Names ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. [ 'ldap://192.168.1.12', 'ldaps://myldap.domain.org' ] IP Address or FQDN values scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos auth credentials. the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))"},{"location":"3.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-for-testing","title":"The LDAP structure of openldap for testing","text":"
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"3.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"3.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"3.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"3.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"3.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"3.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"3.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"3.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"3.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"3.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
The explicit authentification support the directory services ldap, ldaps, and Microsoft Active Directory.
Configuration sample for Microsoft Active Directory
Read the specific chapter on LDAP LDAP and LDAPS explicit authmanagers
"},{"location":"3.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
The variable values client_id and client_secret have been set to obfuscate value 'xxxx'. The FQDN hostname.domain.local is referred to your public server FQDN.
Variable name Type Description Sample displayname string Display Name show in Web front Googleenabled boolean LDAP Base Distinguished Names Trueclient_id string client id XXX-YYY.apps.googleusercontent.comclient_secret string client secret XXXscope list of string scope [ 'https://www.googleapis.com/auth/userinfo.email', 'openid' ]userinfo_url string dialog URL `https://www.googleapis.com/oauth2/v1/userinfo' redirect_uri_prefix string redirect URL https://hostname.domain.local/API/auth/oauthredirect_uri_querystring string URL query string manager=external&provider=googleauthorization_base_url string callback URL https://accounts.google.com/o/oauth2/v2/authtoken_url string token URL https://oauth2.googleapis.com/token
The complete redirect url concats the two values redirect_uri_prefix and redirect_uri_querystring.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
GitHub's OAuth implementation supports the standard authorization code grant type and the OAuth 2.0 Device Authorization Grant for apps that don't have access to a web browser.
Enable other users to authorize your OAuth App. Create your Github credentials here : authorizing-oauth-apps and set the correct credentials for Github Authentification API
implicit is the easyest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionnary object and contains an anononymous provider.
anononymous provider always permit authentification, and create a uuid as userid. anononymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Press the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command docker ps -a
docker ps -a\n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
When the anonymous container is removed, the anonymous home directory is deleted.
Great, you have check how the implicit Authentification configuration works.
"},{"location":"3.0/config/authmetaexplicit/","title":"Authentification metaexplicit for Microsoft Active Directory services with trust relationships","text":""},{"location":"3.0/config/authmetaexplicit/#authmanagers-metaexplicit-object","title":"authmanagers metaexplicit object","text":"
The metaexplicit authentification manager contains only one provider. The provider must be defined as metadirectory.
Variable name Type Description providers dictionary { 'metadirectory': { 'config_ref': 'coporateconfig', 'enabled': True }}"},{"location":"3.0/config/authmetaexplicit/#metadirectory-provider-configuration","title":"metadirectory provider configuration","text":"
The metadirectory provider is defined as a dictionnary object and must contain key name. The key name must be set as the name of a dictionaryin the config_ref.
A metadirectory provider must contain a ldap attribut to describe the original DOMAIN and sAMaccountName. The ldap attribut is defined as join_key_ldapattribut.
coporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } } \n
Pyos binds the metadirectory ldap server with serviceaccount credentials Pyos read the ldap attribut description value to get the user's trusted domain.
For example :
description: AD\\john\n
Then pyos look for provider AD configuration and process authentification on domain AD
The metadirectory accounts can be disabled. The ldap attribut userAccountControl is not read on metaDirectory provider. The account can have the bit UF_ACCOUNT_DISABLE set or not.
A service account must defined for a metadirectory provider. The service account is used to bind the metadirectory.
"},{"location":"3.0/config/authmetaexplicit/#complete-example-with-a-metadirectory-provider-and-active-directory-user-domain","title":"Complete example with a metadirectory provider and active directory user domain","text":"
The user's domain mane is AD. The meta domain name is CORPORATE. The meta domain use a dedicated attribut join_key_ldapattribut
authmanagers: {\n #\n # define the meta explicit manager\n # This is the trusted external forest for the followed domain\n #\n 'metaexplicit': {\n 'providers': {\n # define the metadirectory provider\n # only one metadirectory provider is supported \n 'metadirectory': { \n 'config_ref': 'coporateconfig', \n 'enabled': True } \n }\n },\n\n # \n # define the Active Directory provider for each DOMAIN\n # define two domains in two disctinct forest with a trust relationship \n # \n 'explicit': { \n # define an Active Directory provider AD \n 'AD': { 'config_ref': 'adconfig', 'enabled': True },\n # define an Active Directory provider ANOTHER\n 'ANOTHER': { 'config_ref': 'anotherconfig', 'enabled': True } \n }\n} # end of authmanagers\n\n# In this example ldap attribut's description contains AD\\myuser or ANOTHER\\myuser \ncoporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } }\n\n\n# \n# define the first DOMAIN AD\n# The adconfig ref for domain AD\n#\nadconfig : { 'AD': { 'ldap_basedn' : 'DC=ad,DC=domain,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.ad.domain.local',\n 'domain' : 'AD',\n 'auth_type' : 'NTLM',\n 'domain_fqdn' : 'AD.DOMAIN.LOCAL',\n 'servers' : [ 'ldap://192.168.7.12' ] } }\n\n#\n# define the second DOMAIN ANOTHER\n# The anotherconfig ref for domain ANOTHER\n#\nanotherconfig : { 'ANOTHER': {\n 'ldap_basedn' : 'DC=another,DC=super,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.another.super.local',\n 'domain' : 'ANOTHER',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn' : 'ANOTHER.SUPER.LOCAL',\n 'servers' : [ 'ldap://192.168.10.12' ],\n 'kerberos_realm': 'AD.SUPER.LOCAL' } }\n
metadirectory support the foreign security principal (FSP) to query security principal in the trusted external forest. These objects are created in the foreign security principals container of the domain. metadirectory support isMemberOf on foreign security principal.
The user's SID of domain 'AD' or 'ANOTHER' is NOT read. A new ldap bind is done using the trusted domain on metadirectory provider and not unsing the service account.
The ldap query is build : ( \"search_base={q.basedn}, search_scope={q.scope}, search_filter={filter}\" )
To get more information about foreign security principal (FSP), read :
Foreign Security Principals Container
Active Directory: Foreign Security Principals and Special Identities
"},{"location":"3.0/config/balloon/","title":"balloon user entry in od.config","text":"
balloon is the default generic user.
The balloon user is created inside the oc.user container
"},{"location":"3.0/config/cloudprovider.loadbalancing/#update-nginx-service-to-use-http-loadbalancer","title":"Update nginx service to use http LoadBalancer","text":"
Replace type: NodePortby type: LoadBalancer into the nginx service
Save this yaml as nginx.service.http.loadbalancer.yaml file name
# delete the previous nginx service\nkubectl delete service nginx -n abcdektop\n# create the new nginx service\nkubectl apply -f nginx.service.http.loadbalancer.yaml\n
Wait few minutes to obtain an ip address LoadBalancer from your cloud provider service
"},{"location":"3.0/config/cloudprovider.loadbalancing/#update-nginx-service-to-use-loadbalancer-service-with-https","title":"Update nginx service to use LoadBalancer service with https","text":"
This example works on digitalocean cloud provider.
First of all, you need to get your loadbalancer-certificate-id
To list available certificates and their IDs, install doctl and run the command
doctl compute certificate list\n
Then define annotations on the abcdesktop nginx service like
Create a loadbalancing.yaml file, to update the default abcdestkop service/nginx You need to replace service.beta.kubernetes.io/do-loadbalancer-certificate-id with your own certificate value.
abcdesktop is based on the Model View Controller (usually known as MVC). This MVC is used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
List of all abcdesktop's controllers and the description :
Controller Description AccountingController accounting data json format AuthController authenticate user ComposerController CRUD main services (like createDesktop, createApplication) CoreController get configuration and user message info ManagerController manage service (like add an application) UserController retrieve user information"},{"location":"3.0/config/controllers/#access-permission","title":"Access Permission","text":"
The controllers configuration is a dictionary, and is defined in the pyos's od.config file.
By default, AccountingController and ManagerController access are protected by ip source filters. The configuration permits private networks defined in rfc1918 and rfc4193. Get more information about the private network.
By default, others controllers access is enabled, without any restriction.
"},{"location":"3.0/config/controllers/#access-control-filter","title":"Access control filter","text":"
The access control filter configuration is defined in a json dictionary. Each dictionary entry use the controller name and with entries permitip and/or apikey.
The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or if the controller is not defined, filtering features is disabled.
The apikey is a list of string, for example [ 'fPCdPSSj8gZri1Ncmg', 'Z9pXCa2y6ccDeBBeeUc4' ]. If apikey is not set or the controller not defined, filtering features is disabled. The http header value is X-API-Key
If the source ip address is denied, the response is a HTTP status is 403 code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"3.0/config/controllers/#curl-http-requests-sample","title":"Curl http requests sample","text":""},{"location":"3.0/config/controllers/#curl-http-request-with-x-api-key","title":"Curl http request with X-API-Key","text":"
Add the http header X-API-Key: fQDbvjCafec4l to the curl command to list images
curl -X GET -H 'X-API-Key: fQDbvjCafec4l' -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/images\n
The command returns
{}\n
Add the http header X-API-Key: fQDbvjCafec4l to the curl command to add new application
This option describes how to create the home directory for the user. The value can be defined as :
'None': no dedicated volume is created, the oc.user container use an emptyDir': { 'medium': 'Memory'}. All user data will be removed at logout.
'hostPath': set a dedicated 'hostPath' volume, the user's container and applications share this volume. User home data are persistent.
'persistentVolumeClaim': set a dedicated 'persistentVolumeClaim' volume, the user's container and applications share this volume. User home data are persistent.
To get more information about user's home directory volume, read the volumes chapter
desktop.remotehomedirectorytype is a list of string. Each string describe if the remount access to a directory is allowed. example [ 'cifs', 'webdav' ]
For each entry in the desktop.remotehomedirectorytype list, abcdesktop.io try to mount the remote file system using data from the implicit auth provider.
If desktop.remotehomedirectorytype contains 'cifs' and if the authentification provider get homeDrive and homeDirectory attributs then abcdesktop request the kubernetes abcdesktop/CIFS Driver to mount the remote filesystem. The user find a mount point named homeDrive value, and mounted to homeDirectory.
desktop.envlocal is a dictionary. desktop.envlocal contains a (key,value) added as environment variables to oc.user.
The default value is :
{ \n 'X11LISTEN': 'tcp'\n}\n
"},{"location":"3.0/config/desktop/#reserved-variables","title":"Reserved variables","text":"Variable Values Description X11LISTENtcp permit X11 to listen on tcp port, default is udpABCDESKTOP_RUN_DIR/var/run/desktop directory to write pid services ABCDESKTOP_LOG_DIR/var/log/desktop directory to write log files services DISABLE_REMOTEIP_FILTERINGdisabled disabled remote ip filtering inside pod user, default is disabled, change to enabled to remove core ip filtering SET_DEFAULT_WALLPAPERmyfile.jpeg name of file to set the user wallpaper, this file must exist in ~/.wallpapersSET_DEFAULT_COLOR#6EC6F0 Value of default colour saved in file ~/.store/currentColorSENDCUTTEXTenabled \u00a0Send clipboard changes to user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_sendcuttext if exist SENDCUTTEXT=${ABCDESKTOP_LABEL_sendcuttext:-$SENDCUTTEXT}. The default value is enabledACCEPTCUTTEXTenabled \u00a0Accept clipboard updates from user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_acceptcuttext if exist ACCEPTCUTTEXT=${ABCDESKTOP_LABEL_acceptcuttext:-$ACCEPTCUTTEXT}. The default value is enabled"},{"location":"3.0/config/desktop/#desktopnodeselector","title":"desktop.nodeselector","text":"
desktop.nodeselector is a dictionary. This option permits to assign user pods to nodes.
It specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). The most common usage is one key-value pair.
The value must be a string, by example 'true', and matches the labels node value.
desktop.username is the name of the default username inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.username is string. The default value is 'balloon'.
desktop.userid describes the uid Number of the default user id number inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.userid is integer. The default value is 4096.
desktop.groupid describes the gid Number of the default group id number inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.userid is integer. The default value is 4096.
desktop.userhomedirectory describes the homedirectory of the user created inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entrycontainer. The type of desktop.userhomedirectory is string. The default value is /home/balloon.
The desktop.uselocaltime is boolean, to use host value of /etc/localtime. The default value is False. If desktop.uselocaltime is True, this add a volume mapping from host file /etc/localtime to container file /etc/localtime.
WARNING desktop.desktopuseinternalfqdn is an experimental feature, keep this value to False in production
desktop.desktopuseinternalfqdn describes the content of the payload data in the JWT Desktop Token. The default value is False.
Nginx front end act as a reverse proxy. This reverse proxy use the FQDN of the user's pod to route http request. If this value is set to False the payload data in the JWT Desktop Token contains the IP Address of the user Pod. If this value is set to True the payload data in the JWT Desktop Token contains the FQDN of the user Pod.
If you CAN NOT add endpoint_pod_names in the coredns configuration, you MUST set desktop.desktopuseinternalfqdn to False. This choice is less secure.
To set desktop.desktopuseinternalfqdn to True value, you have to update the coredns ConfigMap.
The container is added to the user pod if acl matches. acl is based on tags and rules. Read the authentification-rules abcdesktop documentation to defined tags.
IfNotPresent the image is pulled only if it is not already present locally.
Always kubelet queries the container image registry to resolve the name to an image digest.
Never the kubelet does not try fetching the image. If the image is somehow already present locally, the kubelet attempts to start the container; otherwise, startup fails.
Read the pullpolicy kubernetes documentation to get more details.
The imagePullSecret entry is the list of the secret name used by kubernetes to access to the private registry. The type of imagePullSecret is a list. This option is used if you need to store the abcdesktop docker image on your a private registry.
spec entry defines the spec entry for a pod. All kubernetes entries are supported. Some of them are overwrited by abcdesktop.
{{ uidNumber }} is replaced by the user's uidNumber on ldap if the objectClass is posixAccount or if not set by the default user id set in option desktop.userid
{{ gidNumber }} is replaced by the user's gidNumber on ldap if the objectClass is posixAccount is replaced by the ldap gidNumber or if not set by the default group id set in option desktop.groupid
{{ supplementalGroups }} is replaced by the list of groups gidNumber is posixGroup
shareProcessNamespace When process namespace sharing is enabled, processes in a container are visible to all other containers in the same pod. Read the kubernetes shareProcessNamespace details, to get more details.
shareProcessMemory Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built (typically C/OpenMPI, C++/using boost libraries) high performance applications for scientific computing and financial services industries. POSIX shared memory requires that a tmpfs be mounted at /dev/shm. Containers in a pod do not share their mount namespaces so we use volumes to provide the same /dev/shm into each container in a pod. Read shared_memory to get more details. Shared memory is defined as an emptyDir volume { 'name': 'shm', { 'medium': 'Memory', 'sizeLimit': shareProcessMemorySize } } minted on /dev/shm. Only ephemeral container application can share memory with the X11 server. To get more details about POSIX and UNIX System V shared memory objects, read the podshmtest repository.
shareProcessMemorySize is the size of shareProcessMemory. The size is set to the shm volume 'sizeLimit': shareProcessMemorySize
init container run the init command. It changes access right to the user home directory. The init command runs as root by default with a securityContext 'securityContext': {'runAsUser':0, 'runAsGroup':0 }.
The command support {{ }} values. Values can be
'{{ uidNumber }}'
'{{ gidNumber }}'
'{{ uid }}'
Values are read from the previous ldap authentification.
'{{ uidNumber }}' is replaced by the ldap uidNumber or if not set by the default user id set in option desktop.userid
'{{ gidNumber }}' is replaced by the ldap gidNumber or if not set by the default group id set in option desktop.groupid
'{{ uid }}' is replaced by the ldap uid or if not set by the default user name set in option desktop.username
Or you can also use the replace command kubectl create -n abcdesktop configmap abcdesktop-config --from-file=od.config -o yaml --dry-run | kubectl replace -n abcdesktop -f -
"},{"location":"3.0/config/editconfig/#check-your-changes","title":"Check your changes","text":"
To check that the new colours are presents in front, open the url http://localhost:30443, in your web browser, to start a simple abcdesktop.io container.
http://localhost:30443\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colour and you should have it as background colour :
Great, you can easily update your configuration file od.config.
"},{"location":"3.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"3.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"3.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"3.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"3.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"3.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"3.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"3.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"3.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"3.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"3.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"3.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"3.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes.
Network policies are implemented by the network plugin. To use network policies, you must be using a networking solution which supports NetworkPolicy.
There are two sorts of isolation defined in abcdesktop : the NetworkPolicy rights and the NetworkPolicy permits.
The NetworkPolicy rights contains egress and ingress for pod selected by tag. rights means access (ingress) to this pod and access (egress) from this pod. To define ip filter for user's pod, you need to set egress NetworkPolicy.
The NetworkPolicy permits contains egress to a pod selected by tag. The NetworkPolicy permits means permit access to this pod.
The NetworkPolicy examples describe the network policies for the internal memcached pod and the user's pods.
"},{"location":"3.0/config/networkpolicy/#networkpolicy-rights-and-permits-for-the-memcached","title":"NetworkPolicy rights and permits for the memcached.","text":"
The memcached service is listening on TCP port 11211. The NetworkPolicy for memcached service rights, named memcached-rights, allows pods with label run: memcached-od to expose the TCP port 11211.
The NetworkPolicy for memcached service permits, named memcached-permits, allows all pods with label netpol/memcached: 'true' to reach the TCP port 11211 to pods with label run: memcached-od.
"},{"location":"3.0/config/networkpolicy/#networkpolicy-rights-and-permits-for-the-users-pods","title":"NetworkPolicy rights and permits for the user's pods.","text":"
The ocuser pod is listening on TCP ports :
4714
6081
29780
29781
29782
29783
29784
29785
29786
The network policy for ocuser's pods rights is named ocuser-rights. It allows pods with label type: 'x11server' to expose the previous TCP ports.
The network policy for ocuser's pods permits is named ocuser-permits. It allows pods with label netpol/ocuser: 'true' to reach the user's pods services.
You may need to update the netpol-default.yaml file with your own values.
"},{"location":"3.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"3.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"3.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"3.0/config/sudo-kubernetes/","title":"Sudo kubernetes","text":""},{"location":"3.0/config/sudo-kubernetes/#how-to-get-a-root-access-inside-a-container-running-kubernetes-abcdesktop","title":"How to get a root access inside a container running kubernetes abcdesktop ?","text":"
run the sudo command inside the user kubernetes pods
balloon@43c2ef50-a7b9-4e36-8a9d-8ac3ce80180e:~$ sudo bash\nsudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?\n
"},{"location":"3.0/config/sudo-kubernetes/#edit-the-odconfig-file","title":"Edit the od.config file","text":"
In the securityContext add the entry 'allowPrivilegeEscalation': True
"},{"location":"3.0/config/sudo-kubernetes/#update-the-kubernetes-config-with-the-new-abcdesktopyaml","title":"Update the kubernetes config with the new abcdesktop.yaml","text":"
After the sudo command, you get a root level inside the shell of the users's pod
In production this value should be set to False
"},{"location":"3.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"3.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"3.0/config/volumes/","title":"Define volumes to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume using hostPath. The hostPath can also be a mount point.
PersistentVolumeClaim using storageClassName parameter. Two examples are described one using nfs, the second one using s3.
"},{"location":"3.0/config/volumes/#define-persistentvolume-using-hostpath","title":"Define persistentVolume using hostPath","text":"
In your od.config file, define the new entries desktop.homedirectorytypedesktop.persistentvolumespecdesktop.persistentvolumeclaimspec
desktop.persistentvolumespec: create a new volume for the user's homeDir, for persistentVolume hostPath.
desktop.persistentvolumeclaimspec: create a new volume claim for the user's homeDir
# set to persistentVolumeClaim\ndesktop.homedirectorytype: 'persistentVolumeClaim'\n\n# define how to create persistentvolume\ndesktop.persistentvolumespec: {\n 'storageClassName': '',\n 'capacity': { 'storage': '1Gi' },\n 'accessModes': [ 'ReadWriteOnce' ], \n 'hostPath': { 'path': '/mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}' } }\n\n# define how to create persistentvolumeclaim\ndesktop.persistentvolumeclaimspec: {\n 'storageClassName': '',\n 'resources': { \n 'requests': { \n 'storage': '1Gi'\n } \n },\n 'accessModes': [ 'ReadWriteOnce' ] }\n
desktop.persistentvolumespec support template values. For example '/mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}'.
{{ provider }} is the provider's name templated value.
{{ userid }} is the user's id templated value.
The list of all template values can be read at the end of this chapter
The user's home directory inside the pod is located on host to /mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}. The directory is created automatically by kubernetes.
The /mnt/abcdesktop_volumes/ content lists the provider name.
On the host, the new directory is created, where each home directory is located.
Read the new path for 'hostPath' persistent volumes
ls -la /mnt/abcdesktop_volumes/\ntotal 20\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 .\ndrwxr-xr-x 106 root root 4096 mai 11 11:34 ..\ndrwxr-xr-x 3 root root 4096 mai 12 12:40 anonymous\ndrwxr-xr-x 3 root root 4096 mai 12 12:39 github\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 google\n
For provider google, all users are listed.
ls -la /mnt/abcdesktop_volumes/google/\ntotal 20\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 .\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 ..\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 103464335761332102620\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:40 112026272437223559761\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 114102844260599245242\n
For provider google, list the user home directory for the user 103464335761332102620
ls -la /mnt/abcdesktop_volumes/google/103464335761332102620/\ntotal 76\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 .\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 ..\n-rw------- 1 2048 2048 71 mai 12 12:39 .Xauthority\n-rw-rw-r-- 1 2048 2048 12 janv. 27 18:36 .Xresources\ndrwxr-x--- 3 2048 2048 4096 mai 12 12:39 .cache\ndrwxr-x--- 6 2048 2048 4096 mai 12 12:39 .config\ndrwxrwxr-x 3 2048 2048 4096 janv. 27 18:36 .gconf\n-rw-r----- 1 2048 2048 0 mai 12 12:39 .gtk-bookmarks\n-rw-rw-r-- 1 2048 2048 564 janv. 27 18:36 .gtkrc-2.0\ndrwxr-x--- 3 2048 2048 4096 mai 12 12:39 .local\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 .store\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 .wallpapers\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Desktop\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Documents\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Downloads\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Music\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Pictures\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Public\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Templates\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Videos\n
"},{"location":"3.0/config/volumes/#list-of-all-template-values","title":"list of all template values","text":"
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale template tag value tag value set by auth rules
Note: hostPath supports file permissions and the pod's init commands chown or chmod can be used. The hostPath can also be a mount point, using nfs.
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-storageclassname","title":"Define persistentVolumeClaim using storageClassName","text":"
To define a persistentVolumeClaim, update the od.config file and set
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-csi-driver-nfs","title":"Define persistentVolumeClaim using csi-driver-nfs","text":"
In this example, we use nfs to share user home directory with each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.0/config/volumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.0/config/volumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.0/config/volumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
kubectl get pvc -n abcdesktop \nNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nplanet-fry-9372f Bound pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32 25Mi RWO nfs-csi-sc-ds01 5m7s\n
Get the PersistentVolumeClaim's description
kubectl describe pvc planet-fry-9372f -n abcdesktop \nName: planet-fry-9372f\nNamespace: abcdesktop\nStorageClass: nfs-csi-sc-ds01\nStatus: Bound\nVolume: pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32\nLabels: access_provider=planet\n access_providertype=ldap\n access_userid=fry\nAnnotations: pv.kubernetes.io/bind-completed: yes\n pv.kubernetes.io/bound-by-controller: yes\n volume.beta.kubernetes.io/storage-provisioner: nfs.csi.k8s.io\n volume.kubernetes.io/storage-provisioner: nfs.csi.k8s.io\nFinalizers: [kubernetes.io/pvc-protection]\nCapacity: 25Mi\nAccess Modes: RWO\nVolumeMode: Filesystem\nUsed By: fry-87066\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal ExternalProvisioning 7m (x2 over 7m) persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.\n Normal Provisioning 7m nfs.csi.k8s.io_kadmin_1c28f3c9-91ee-4aa0-b991-8c17c46133d3 External provisioner is provisioning volume for claim \"abcdesktop/planet-fry-9372f\"\n Normal ProvisioningSucceeded 7m nfs.csi.k8s.io_kadmin_1c28f3c9-91ee-4aa0-b991-8c17c46133d3 Successfully provisioned volume pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32\n
"},{"location":"3.0/config/volumes/#set-quota-for-user-homedir","title":"Set quota for user homedir","text":"
Steps : - Define posixAccount in the ldap directory service - Define quota on the nfs server
The user fry has a posixAccount description in the embedded directory service cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com
Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry uidNumber 1049 gidNumber 2049 \u00a0homeDirectory: \u00a0/home/fry
On the nfs server, define a quota for uid fry. In this case, I use truenas as nfs server.
Create the fry user with the same attribute and value.
On the Storage |\u00a0Pools |\u00a0User Quotas, define a quota for the user fry
Set the quota value for fry
"},{"location":"3.0/config/volumes/#login-to-your-abcdesktop-service_1","title":"Login to your abcdesktop service","text":"
Delete previous pvc and pv for the fry user, if need.
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the dd commands
Run a dd command to reach the quota value (50 MiB is this case).
dd if=/dev/urandom of=quota-test-file\ndd: writing to 'quota-test-file': Disk quota exceeded\n1127945+0 records in\n1127944+0 records out\n577507328 bytes (578 MB, 551 MiB) copied, 14.6404 s, 39.4 MB/s\n
You should get the error Disk quota exceeded. The size of quota-test-file is over a the quota limit.
50 MB is 52,428,800 Bytes
ls -la quota-test-file \n-rw-r----- 1 fry fry 58720256 Aug 25 15:16 quota-test-file\n
The user should not be able to create new file
dd if=/dev/zero of=quota-test-file2\ndd: failed to open 'quota-test-file2': Disk quota exceeded\n
The nfs server has returned an error if the user tries to create more than 50 MiB.
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-k8s-csi-s3","title":"Define persistentVolumeClaim using k8s-csi-s3","text":"
In this example, we use s3 to share user home directory with each worker node
Use the https://github.com/yandex-cloud/k8s-csi-s3 as a CSI for S3 with minio as backend.
Follow https://github.com/yandex-cloud/k8s-csi-s3 setup guide and test with the sample pod to make sure that fuse mounts the S3 file system.
"},{"location":"3.0/config/volumes/#init-command-options-has-no-file-permissions-support","title":"init command options has no file permissions support","text":"
By default the storageclass use mounter: geesefs. geesefs does not store file permissions and the init commands chown or chmod exit with no zero value, then the pod does not start. All files belongs to root, but with correct permissions options: \"--memory-limit 1000 --dir-mode 0777 --file-mode 0666 --setuid 0\".
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"3.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"3.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"3.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.0/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204-step-by-step","title":"Install Kubernetes on Ubuntu 22.04 (Step by Step)","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04
"},{"location":"3.0/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.0 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.0 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.0/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
"},{"location":"3.0/setup/kubernetes_abcdesktop/#quick-installation-linux-or-macos","title":"Quick installation (Linux or macOS)","text":"
Quick installation can be run on Linux or macOS operation system.
Download and extract the latest release automatically (Linux or macOS):
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.0/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
Only if you use a private registry or if the abcdesktop registry is private Create Secret to allow kubernetes to download abcdesktop images from docker registry. For this part you need to change docker-username and docker-password by credentials provided by project owner. If you don't have this values, you will have to build abcdesktop images by yourself.
change docker.json path if need /root/.docker/config.json kubectl create secret generic abcdesktopregistrysecret --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n abcdesktop
"},{"location":"3.0/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main file for pyos control plane.
"},{"location":"3.0/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.0/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Great you have installed abcdesktop.io in Kubernetes mode. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the chapter add kubernetes contain
"},{"location":"3.0/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
This pod is created to ask Kubernetes for pulling the container image.
"},{"location":"3.0/setup/kubernetes_abcdesktop_applications/#connect-to-your-abcdesktop_1","title":"Connect to your abcdesktop","text":"
The API server receives a new image event from docker daemon. To run the new applications just refresh you web browser page.
Now reconnect to your abcdesktop.
Open your navigator to http://[your-ip-hostname]:30443/
http://localhost:30443/\n
The new applications are installed, and ready to run.
"},{"location":"3.0/setup/kubernetesmode/","title":"Setup kubernetes for GNU/Linux","text":"
This section apply only to configure kubernetes for GNU/Linux.
abcdesktop.io support docker mode and kubernetes mode. In this section we will study how abcdesktop.io is working in kubernetes mode. The abcdesktop.io kubernetes mode is recommended for enterprise use, all user containers can be distributed on different hosts.
The following commands will let you prepare kubernetes on one node. In this case, all applications run on a single node. It's recommended to start with a single node.
You need to disable swap memory on nodes as Kubernetes does not perform properly on a system that is using swap memory. Run the following command in order to disable swap memory.
swapoff -a\n
If you have some swaps in /etc/fstab, just comment them out. swapoff -a will disable all swaps temporarily.
Taints are Kubernetes flags to prevent Pod Scheduling.
Confirm that you now have a node in your cluster with the following command.
kubectl get nodes -o wide\n
It should return something like the following.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nhostname NotReady control-plane 3m17s v1.25.3 192.168.7.187 <none> Ubuntu 22.04.1 LTS 5.15.0-52-generic containerd://1.6.9\n
"},{"location":"3.0/setup/kubernetesmode/#step-4-deploy-flannel-through-the-master-node","title":"Step 4: Deploy flannel through the master node","text":"
A pod network is a medium of communication between the nodes of a network. We are deploying flannel network on our cluster through the following command:
Now when you see the status of the nodes, you will see that the master-node is ready :
kubectl get nodes -o wide\n
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nHostname Ready control-plane 4m12s v1.25.3 192.168.7.187 <none> Ubuntu 22.04.1 LTS 5.15.0-52-generic containerd://1.6.9\n
At this step, there is no more Taints and your node is Ready.
Next step, continue with the setup abcdesktop for kubernetes.
"},{"location":"3.0/setup/requirements/","title":"Requirements","text":""},{"location":"3.0/setup/requirements/#prerequisites-for-abcdesktop-setup-in-release-3x","title":"Prerequisites for abcdesktop setup in release 3.x","text":"
Architecture x86-64 (arm-64 is not yet available)
16 GB of free space to store sample applications (gimp, libreoffice writer, libreoffice calc, libreoffice math, libreoffice impress, firefox) and core image services.
"},{"location":"3.0/setup/requirements/#enable-dns-add-one-to-microk8s","title":"enable dns add one to microk8s","text":"
$ microk8s enable dns\n
You should ready on stdout
$ microk8s enable dns\nInfer repository core for addon dns\nEnabling DNS\nApplying manifest\nserviceaccount/coredns created\nconfigmap/coredns created\ndeployment.apps/coredns created\nservice/kube-dns created\nclusterrole.rbac.authorization.k8s.io/coredns created\nclusterrolebinding.rbac.authorization.k8s.io/coredns created\nRestarting kubelet\nDNS is enabled\n
Check microk8s status
$ microk8s status\nmicrok8s is running\nhigh-availability: no\n datastore master nodes: 127.0.0.1:19001\n datastore standby nodes: none\naddons:\n enabled:\n dns # (core) CoreDNS\n ha-cluster # (core) Configure high availability on the current node\n
The pod nginx-od-788c97cdc9-b4gbq has CrashLoopBackOff status. This is wrong.
"},{"location":"3.0/setup/troubleshooting_core_services/#read-the-pods-log","title":"Read the pod's log","text":"
kubectl logs -l run=nginx-od -n abcdesktop\n
"},{"location":"3.0/setup/troubleshooting_core_services/#issue-with-an-error-in-nginx-configuration-file","title":"Issue with an error in nginx configuration file","text":"
running standart configuration file\nstarting nginx web server in foreground\nnginx: [emerg] unexpected \"s\" in /etc/nginx/sites-enabled/default:10\n
Nginx has failed to start. There is an error in the configuration file.
We need to fix the nginx-config ConfigMap in the yaml file.
"},{"location":"3.0/setup/troubleshooting_core_services/#start-the-pod-by-hands","title":"Start the pod by hands","text":"
If the kubectl logs command doesn't return usable information. You can update the pod default command and then start the service by hands.
Update the container description to replace the default command by a sleep command
Check that nginx pod has been updated and that the status is Running
kubectl get pods -l run=nginx-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\nnginx-od-666df64f4-whtng 1/1 Running 0 2m30s\n
Nginx web service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the nginx web service by hands.
Run the command /usr/local/openresty/nginx/sbin/nginx -p /etc/nginx -c nginx.conf -e /var/log/nginx/error.log
kubectl get pods -l run=pyos-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npyos-od-6cd679d6b8-css9q 1/1 Running 0 5s\n
Pyos service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the pyos service by hands.
starting abcdesktop uninstall commands start at 1669824908 epoch seconds\nstop and remove abcdesktop user pods\npod \"anonymous-33c30478-5cc0-4e18-b128-735694c98f3c\" deleted\nremove all services, pods\nclusterrole.rbac.authorization.k8s.io \"pyos-role\" deleted\nclusterrolebinding.rbac.authorization.k8s.io \"pyos-rbac\" deleted\nserviceaccount \"pyos-serviceaccount\" deleted\nstorageclass.storage.k8s.io \"storage-local-abcdesktop\" deleted\nconfigmap \"nginx-config\" deleted\ndeployment.apps \"memcached-od\" deleted\nsecret \"mongodb-secret\" deleted\ndeployment.apps \"mongodb-od\" deleted\ndeployment.apps \"nginx-od\" deleted\ndeployment.apps \"speedtest-od\" deleted\ndeployment.apps \"pyos-od\" deleted\nendpoints \"desktop\" deleted\nservice \"desktop\" deleted\nservice \"memcached\" deleted\nservice \"mongodb\" deleted\nservice \"speedtest\" deleted\nservice \"nginx\" deleted\nservice \"pyos\" deleted\ndeployment.apps \"openldap-od\" deleted\nservice \"openldap\" deleted\nremove all secrets\nsecret \"abcdesktopjwtdesktoppayload\" deleted\nsecret \"abcdesktopjwtdesktopsigning\" deleted\nsecret \"abcdesktopjwtusersigning\" deleted\nremove all configmaps\nconfigmap \"abcdesktop-config\" deleted\nconfigmap \"kube-root-ca.crt\" deleted\nremove all pvc\nNo resources found\nremove all pv\nNo resources found\nremove namespace\nnamespace \"abcdesktop\" deleted\nabcdesktop is uninstalled, in 48 seconds\n
"},{"location":"3.0/setup/uninstall_kubernetes/#run-step-by-step-uninstall-commands","title":"Run step by step uninstall commands","text":"
Run the bash commands from the uninstall-3.0.sh main content :
echo \"stop and remove abcdesktop user pods\"\nkubectl delete pods --selector=\"type=x11server\" -n abcdesktop\necho \"remove all services, pods\"\nkubectl delete -f https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.0.yaml \necho \"remove all secrets\"\nkubectl delete secrets --all -n abcdesktop\necho \"remove all configmaps\"\nkubectl delete cm --all -n abcdesktop\necho \"remove all pvc\"\nkubectl delete pvc --all -n abcdesktop 2>/dev/null\necho \"remove namespace\"\nkubectl delete namespace abcdesktop\necho \"abcdesktop is uninstalled\"\n
The last command kubectl delete namespace can take few minutes.
Please wait for the output message:
abcdesktop is uninstalled\n
Great, you have uninstalled abcdesktop for kubernetes.
"},{"location":"3.1/config/persistentvolumes/","title":"Use PersistentVolume and PersistentVolumeClaim to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume
PersistentVolumeClaim
In most cases with managed providers, you do not need to create a Persistent Volume, just a Persistent Volume Claim. Even in a non-managed set up, the Persistent Volume is generally created by the cluster administrator while Persistent Volume Claim is used by the end-user. The Persistent Volume Claim is namespaced ressource.
abcdestkop has a Persistent Volume Claim support.
Optionally, if you need a cluster administrator role, then abcdestkop can create Persistent Volume and Persistent Volume Claim.
"},{"location":"3.1/config/persistentvolumes/#define-clusterrole-only-if-you-need-to-create-persistent-volume","title":"Define ClusterRole only if you need to create Persistent Volume","text":"
Persistent Volume is a non-namespaced resource, so you need to update the pyos-role to ClusterRole to allow methods [ \"get\", \"list\", \"create\", \"patch\", \"delete\" ]
"},{"location":"3.1/config/persistentvolumes/#define-persistent-volume-and-persistent-volume-claim","title":"Define persistent volume and persistent volume claim","text":"
To define Persistent Volume or Persistent Volume Claim, update the od.config file and set
desktop.homedirectorytype: 'persistentVolumeClaim'\ndesktop.persistentvolume: { YOUR PERSISTENT VOLUME DICT CONFIGURATION TEMPLATE - THIS CAN BE NONE }\ndesktop.persistentvolumeclaim: 'NAME OF AN EXISTING PVC' OR { YOUR PERSISTENT VOLUME CLAIM DICT CONFIGURATION TEMPLATE } \ndesktop.removepersistentvolume: False\ndesktop.removepersistentvolumeclaim: True\n
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolume-is-optional","title":"Define desktop.persistentvolume is optional","text":"
desktop.persistentvolume is optional and can be set to None, else the type of desktop.persistentvolume parameter must be a dict (dictionary).
If desktop.persistentvolume is None then abcdesktop does not create a persistent volume. The persistent volumes should already exist or created by another provisioning engine.
If desktop.persistentvolume is a dict then abcdesktop creates the persistent volume.
If you set desktop.persistentvolume to None, or if you create the persistent volume manualy, then you don't need to update the pyos role.
The type of desktop.persistentvolumeclaim is dictionary or a string.
If desktop.homedirectorytype is set to 'persistentVolumeClaim', then desktop.persistentvolumeclaim must be defined as a dict or a str.
Kubernetes persistent volume is a namespaced resource, so you can keep the default rbac-role for pyos-role.
if desktop.persistentvolume option is defined then abcdesktop sets the persistent volume claim specification attribut volumeName value to the created persistent volume.
Get more information about PersistentVolume and PersistentVolumeClaim.
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-string","title":"Define desktop.persistentvolumeclaim as a string","text":"
All pods will share the same persistent volume claim, and the same persistent volume. The access mode must be ReadWriteMany, else only one pod (the first one) will bound the pvc.
'subPath' is not supported for ephemeral container.
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-dictionary","title":"Define desktop.persistentvolumeclaim as a dictionary","text":"
"},{"location":"3.1/config/persistentvolumes/#template-values-for-desktoppersistentvolumespec-and-desktoppersistentvolumeclaim","title":"Template values for desktop.persistentvolumespec and desktop.persistentvolumeclaim","text":"
Value defines inside {{ VALUE }} is replaced by the templated value keys:
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale uuid a uniqu uuid template tag value tag value set by auth rules
The uuid have the same value for the persistent volume and for the persistent volume claim. uuid can be use for naming the PVC or the PV, or on all string values.
During the remove desktop process, delete or not the persistent volume. The persistent volume can be delete only if the desktop.deletepersistentvolumeclaim is True.
The default value for desktop.removepersistentvolume is False.
During the remove desktop process, delete or not the persistent volume claim.
The default value for desktop.removepersistentvolumeclaim is False.
"},{"location":"3.1/config/persistentvolumes/#define-persistentvolume-using-csi-driver-nfs","title":"Define persistentVolume using csi-driver-nfs","text":"
In this example, we use nfs protocol to share user home directory on each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.1/config/persistentvolumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.1/config/persistentvolumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.1/config/persistentvolumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
"},{"location":"3.1/config/persistentvolumes/#define-persistentvolume-using-storage-class-do-block-storage-on-digitalocean","title":"Define persistentVolume using storage class do-block-storage on digitalocean","text":""},{"location":"3.1/config/persistentvolumes/#update-odconfig-file","title":"Update od.config file","text":"
Login to your abcdesktop service, you should read on the html page, the status
b.Reading your persistent volume claim planet-fry, status is Pending, using storage class do-block-storage ....\nb.Creating your desktop\nb.Successfully assigned abcdesktop/fry-0d805 to pool-g8u8ddr44-yhh3i.................\nb.Your pod gets event SuccessfulAttachVolume AttachVolume.Attach succeeded for volume \"pvc-38899590-c94a-4849-a111-31ae7de624e1\" ..\nb.Started container i-planet-fry\nb.pending: x-planet-fry is starting\nb.Created container x-planet-fry\nb.Your pod fry-0d805 is Pending..\nc.Waiting for desktop graphical service 1/42........\nc.Waiting for desktop spawner service 1/42\nc.Waiting for desktop graphical service 2/42\nRock and roll\n
"},{"location":"3.1/config/persistentvolumes/#known-issues","title":"known issues","text":""},{"location":"3.1/config/persistentvolumes/#bound-a-volume-if-desktopdeletepersistentvolumeclaim-is-false","title":"Bound a volume if desktop.deletepersistentvolumeclaim is False","text":"
When desktop.deletepersistentvolumeclaim is True and desktop.deletepersistentvolume is False, if you create manually the persistent volumes, you may have to patch the claimRef of the persistent volumes to make it Available again.
kubectl get pv \nNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nplanet-fry 10Gi RWO Retain Released abcdesktop/planet-fry nfs-csi 4m1 \n
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.1/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204","title":"Install Kubernetes on Ubuntu 22.04","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04. km is a command tools from https://github.com/jfv-opensource/kube-tools repository.
"},{"location":"3.1/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.0 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.0 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.1/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
"},{"location":"3.1/setup/kubernetes_abcdesktop/#quick-installation-linux-or-macos","title":"Quick installation (Linux or macOS)","text":"
Quick installation can be run on Linux or macOS operation system.
Download and extract the latest release automatically (Linux or macOS):
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] use local file poduser.yaml\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] updated poduser.yaml file with new superdesktop\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-b75fb Ready\n[OK] pod/memcached-od-5ff8844d56-b75fb condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-t8cv7 Ready\n[OK] pod/mongodb-od-77c945467d-t8cv7 condition met\n[INFO] waiting for pod/nginx-od-b8c8c7b95-lkjl6 Ready\n[OK] pod/nginx-od-b8c8c7b95-lkjl6 condition met\n[INFO] waiting for pod/openldap-od-56b6564c85-2npln Ready\n[OK] pod/openldap-od-56b6564c85-2npln condition met\n[INFO] waiting for pod/pyos-od-67dfc48d84-kww9n Ready\n[OK] pod/pyos-od-67dfc48d84-kww9n condition met\n[INFO] waiting for pod/speedtest-od-894b7c886-69vc4 Ready\n[OK] pod/speedtest-od-894b7c886-69vc4 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-b75fb 1/1 Running 0 20s\nmongodb-od-77c945467d-t8cv7 1/1 Running 0 20s\nnginx-od-b8c8c7b95-lkjl6 1/1 Running 0 20s\nopenldap-od-56b6564c85-2npln 1/1 Running 0 18s\npyos-od-67dfc48d84-kww9n 1/1 Running 0 20s\nspeedtest-od-894b7c886-69vc4 1/1 Running 0 20s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n superdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
"},{"location":"3.1/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
"},{"location":"3.1/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.1/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.1
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
The pod nginx-od-788c97cdc9-b4gbq has CrashLoopBackOff status. This is wrong.
"},{"location":"3.1/setup/troubleshooting_core_services/#read-the-pods-log","title":"Read the pod's log","text":"
kubectl logs -l run=nginx-od -n abcdesktop\n
"},{"location":"3.1/setup/troubleshooting_core_services/#issue-with-an-error-in-nginx-configuration-file","title":"Issue with an error in nginx configuration file","text":"
running standart configuration file\nstarting nginx web server in foreground\nnginx: [emerg] unexpected \"s\" in /etc/nginx/sites-enabled/default:10\n
Nginx has failed to start. There is an error in the configuration file.
We need to fix the nginx-config ConfigMap in the yaml file.
"},{"location":"3.1/setup/troubleshooting_core_services/#start-the-pod-by-hands","title":"Start the pod by hands","text":"
If the kubectl logs command doesn't return usable information. You can update the pod default command and then start the service by hands.
Update the container description to replace the default command by a sleep command
kubectl get pods -l run=nginx-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\nnginx-od-666df64f4-whtng 1/1 Running 0 2m30s\n
Nginx web service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the nginx web service by hands.
Run the command /usr/local/openresty/nginx/sbin/nginx -p /etc/nginx -c nginx.conf -e /var/log/nginx/error.log
kubectl get pods -l run=pyos-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npyos-od-6cd679d6b8-css9q 1/1 Running 0 5s\n
Pyos service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the pyos service by hands.
Great, you have uninstalled abcdesktop for kubernetes with a dedicated namespace.
"},{"location":"3.2/config/persistentvolumes/","title":"Use PersistentVolume and PersistentVolumeClaim to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume
PersistentVolumeClaim
In most cases with managed providers, you do not need to create a Persistent Volume, just a Persistent Volume Claim. Even in a non-managed set up, the Persistent Volume is generally created by the cluster administrator while Persistent Volume Claim is used by the end-user. The Persistent Volume Claim is namespaced ressource.
abcdestkop has a Persistent Volume Claim support.
Optionally, if you need a cluster administrator role, then abcdestkop can create Persistent Volume and Persistent Volume Claim.
"},{"location":"3.2/config/persistentvolumes/#define-clusterrole-only-if-you-need-to-create-persistent-volume","title":"Define ClusterRole only if you need to create Persistent Volume","text":"
Persistent Volume is a non-namespaced resource, so you need to update the pyos-role to ClusterRole to allow methods [ \"get\", \"list\", \"create\", \"patch\", \"delete\" ]
"},{"location":"3.2/config/persistentvolumes/#define-persistent-volume-and-persistent-volume-claim","title":"Define persistent volume and persistent volume claim","text":"
To define Persistent Volume or Persistent Volume Claim, update the od.config file and set
desktop.homedirectorytype: 'persistentVolumeClaim'\ndesktop.persistentvolume: { YOUR PERSISTENT VOLUME DICT CONFIGURATION TEMPLATE - THIS CAN BE NONE }\ndesktop.persistentvolumeclaim: 'NAME OF AN EXISTING PVC' OR { YOUR PERSISTENT VOLUME CLAIM DICT CONFIGURATION TEMPLATE } \ndesktop.removepersistentvolume: False\ndesktop.removepersistentvolumeclaim: True\n
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolume-is-optional","title":"Define desktop.persistentvolume is optional","text":"
desktop.persistentvolume is optional, the default value is None. desktop.persistentvolume can be None, or a string or a dict.
If desktop.persistentvolume is None then abcdesktop does not create a persistent volume. The persistent volumes should already exist or created by another provisioning engine.
If desktop.persistentvolume is a string, it must match the name of a persistentvolume. abcdesktop does not create the persistent volume. The persistent volumes should already exist.
If desktop.persistentvolume is a dict then abcdesktop creates the persistent volume. The dict values of persistent volume support template values.
desktop.persistentvolumeclaim is optional, the default value is None. The type of desktop.persistentvolumeclaim can be None, or a string or a dict.
If desktop.homedirectorytype is set to 'persistentVolumeClaim', then desktop.persistentvolumeclaim must be defined as a dict or a string.
Kubernetes persistent volume is a namespaced resource, so you can keep the default rbac-role for pyos-role.
if desktop.persistentvolume option is defined then abcdesktop sets the persistent volume claim specification attribut volumeName value to the created persistent volume.
Get more information about PersistentVolume and PersistentVolumeClaim.
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-string","title":"Define desktop.persistentvolumeclaim as a string","text":"
All pods will share the same persistent volume claim, and the same persistent volume. The access mode must be ReadWriteMany, else only one pod (the first one) will bound the pvc.
'subPath' is not supported for ephemeral container.
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-dictionary","title":"Define desktop.persistentvolumeclaim as a dictionary","text":"
"},{"location":"3.2/config/persistentvolumes/#template-values-for-desktoppersistentvolumespec-and-desktoppersistentvolumeclaim","title":"Template values for desktop.persistentvolumespec and desktop.persistentvolumeclaim","text":"
Value defines inside {{ VALUE }} is replaced by the templated value keys:
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale uuid a uniqu uuid template tag value tag value set by auth rules
The uuid have the same value for the persistent volume and for the persistent volume claim. uuid can be use for naming the PVC or the PV, or on all string values.
During the remove desktop process, delete or not the persistent volume. The persistent volume can be delete only if the desktop.deletepersistentvolumeclaim is True.
The default value for desktop.removepersistentvolume is False.
During the remove desktop process, delete or not the persistent volume claim.
The default value for desktop.removepersistentvolumeclaim is False.
"},{"location":"3.2/config/persistentvolumes/#define-persistentvolume-using-csi-driver-nfs","title":"Define persistentVolume using csi-driver-nfs","text":"
In this example, we use nfs protocol to share user home directory on each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.2/config/persistentvolumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.2/config/persistentvolumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.2/config/persistentvolumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
"},{"location":"3.2/config/persistentvolumes/#define-persistentvolume-using-storage-class-do-block-storage-on-digitalocean","title":"Define persistentVolume using storage class do-block-storage on digitalocean","text":""},{"location":"3.2/config/persistentvolumes/#update-odconfig-file","title":"Update od.config file","text":"
Login to your abcdesktop service, you should read on the html page, the status
b.Reading your persistent volume claim planet-fry, status is Pending, using storage class do-block-storage ....\nb.Creating your desktop\nb.Successfully assigned abcdesktop/fry-0d805 to pool-g8u8ddr44-yhh3i.................\nb.Your pod gets event SuccessfulAttachVolume AttachVolume.Attach succeeded for volume \"pvc-38899590-c94a-4849-a111-31ae7de624e1\" ..\nb.Started container i-planet-fry\nb.pending: x-planet-fry is starting\nb.Created container x-planet-fry\nb.Your pod fry-0d805 is Pending..\nc.Waiting for desktop graphical service 1/42........\nc.Waiting for desktop spawner service 1/42\nc.Waiting for desktop graphical service 2/42\nRock and roll\n
desktop.persistentvolumeclaimforcesubpath is a boolean. The default value of desktop.persistentvolumeclaimforcesubpath is False
If desktop.persistentvolumeclaimforcesubpath is set to True then persistentvolumeclaim is mounted with the subPath option.
Subpath mounts are not allowed for ephemeral containers. Subpath cannot be updated. So you can run only pod applications, if you set desktop.persistentvolumeclaimforcesubpath to True.
If you try to start an ephemeral container application, you get an error code 422 and the message
{ \n \"reason\":\"FieldValueForbidden\",\n \"message\":\"Forbidden: can not be set for an Ephemeral Container\",\n \"field\":\"spec.ephemeralContainers[8].volumeMounts[0].subPath\"\n}\n
"},{"location":"3.2/config/persistentvolumes/#use-case-for-the-desktoppersistentvolumeclaimforcesubpath-option","title":"Use case for the desktop.persistentvolumeclaimforcesubpath option","text":"
In this case :
User's home directory are hosted on a nfs server
The nfs server (192.168.7.101) exports /volume1/home
The nfs server allows user to access subfolders
We create the unique PersistentVolume named pv-nfs.
---\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n annotations:\n pv.kubernetes.io/provisioned-by: nfs.csi.k8s.io\n name: pv-nfs\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteMany\n persistentVolumeReclaimPolicy: Retain\n storageClassName: nfs-csi\n mountOptions:\n - nfsvers=3\n csi:\n driver: nfs.csi.k8s.io\n readOnly: false\n # volumeHandle format: {nfs-server-address}#{sub-dir-name}#{share-name}\n # make sure this value is unique for every share in the cluster\n volumeHandle: nfs-server.default.svc.cluster.local/share##\n volumeAttributes:\n server: 192.168.7.101\n share: /volume1/home\n---\n
accessModes is ReadWriteMany for the PersistentVolume
We create the unique PersistentVolumeClaim named pvc-nfs-homedir
All pods share the same PersistentVolumeClaim named pvc-nfs-homedir, the desktop.persistentvolumeclaimforcesubpath is set to True, the subPath value is set with the default of the current LDAP userid. So the user's home directory is /volume1/home/{{ userid }}. The nfs server allows user to access subfolders, the mount operation is permitted.
"},{"location":"3.2/config/persistentvolumes/#known-issues","title":"known issues","text":""},{"location":"3.2/config/persistentvolumes/#bound-a-volume-if-desktopdeletepersistentvolumeclaim-is-false","title":"Bound a volume if desktop.deletepersistentvolumeclaim is False","text":"
When desktop.deletepersistentvolumeclaim is True and desktop.deletepersistentvolume is False, if you create manually the persistent volumes, you may have to patch the claimRef of the persistent volumes to make it Available again.
kubectl get pv \nNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nplanet-fry 10Gi RWO Retain Released abcdesktop/planet-fry nfs-csi 4m1 \n
You need a STUN server. You can use any STUN server like stun.l.google.com:19302. Session Traversal Utilities for NAT (STUN) is a protocol to discover your public address and determine any restrictions in your router that would prevent a direct connection with a peer.
You need your own TURN server. We use COTURN server as describe in this chapter. Traversal Using Relays around NAT (TURN) is meant to bypass the Symmetric NAT restriction by opening a connection with a TURN server and relaying all information through that server.
STUN servers are used by both client and abcdesktop WebRTC to determine their IP address as visible by the global Internet.
The STUN server can to hosted on a dedicated droplets and on an external network. For a public Internet usage, the Google-hosted STUN servers is a good
The TURN server can to hosted on a dedicated droplets and on an external network. To reduce latency you should host your TURN server near your kubernetes network.
You can run coturn service on dedicated machines or virtual machines, to avoid any scenario where the port range is being restricted or set arbitrarily by the infrastructure or orchestration tools.
coturn is a free open source implementation of TURN and STUN Server. The TURN Server is a VoIP media traffic NAT traversal server and gateway.
Coturn installation
apt-get install coturn \n
use SSL certificates
You need a X509 certificates to use TURN over TLS. Let's Encrypt provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge.
Minimal COTURN configuration file
Default minimal configuration file /etc/turnserver.conf for abcdesktop.
The sound is available. The web browser has an access to local sound devices. The web browser has an access to local speaker. The web browser can get an access to local microphone only if the user allows the access.
"},{"location":"3.2/config/webrtc/#play-sound-with-paplay","title":"Play sound with paplay","text":"
Open a Terminal Web Shell application and run the command inside the web shell
paplay /usr/share/sounds/alsa/Rear_Center.wav \n
You should heard Rear Center on your local sound device
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.2/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204","title":"Install Kubernetes on Ubuntu 22.04","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04. km is a command tools from https://github.com/jfv-opensource/kube-tools repository.
"},{"location":"3.2/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.2 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.2 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.2/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
Linux operating system is recommanded to run abcdesktop.io.
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys create\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.2.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.2\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/poduser-3.2.yaml\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-6dt28 Ready\n[OK] pod/memcached-od-5ff8844d56-6dt28 condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-r82kv Ready\n[OK] pod/mongodb-od-77c945467d-r82kv condition met\n[INFO] waiting for pod/nginx-od-7445969696-6z88w Ready\n[OK] pod/nginx-od-7445969696-6z88w condition met\n[INFO] waiting for pod/openldap-od-5bbdd75864-d5bpq Ready\n[OK] pod/openldap-od-5bbdd75864-d5bpq condition met\n[INFO] waiting for pod/pyos-od-7584db6787-vnp64 Ready\n[OK] pod/pyos-od-7584db6787-vnp64 condition met\n[INFO] waiting for pod/speedtest-od-7f5484966f-jsb2m Ready\n[OK] pod/speedtest-od-7f5484966f-jsb2m condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-6dt28 1/1 Running 0 40s\nmongodb-od-77c945467d-r82kv 1/1 Running 0 40s\nnginx-od-7445969696-6z88w 1/1 Running 0 40s\nopenldap-od-5bbdd75864-d5bpq 1/1 Running 0 38s\npyos-od-7584db6787-vnp64 1/1 Running 0 39s\nspeedtest-od-7f5484966f-jsb2m 1/1 Running 0 39s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.2/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] use local file poduser.yaml\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] updated poduser.yaml file with new superdesktop\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-b75fb Ready\n[OK] pod/memcached-od-5ff8844d56-b75fb condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-t8cv7 Ready\n[OK] pod/mongodb-od-77c945467d-t8cv7 condition met\n[INFO] waiting for pod/nginx-od-b8c8c7b95-lkjl6 Ready\n[OK] pod/nginx-od-b8c8c7b95-lkjl6 condition met\n[INFO] waiting for pod/openldap-od-56b6564c85-2npln Ready\n[OK] pod/openldap-od-56b6564c85-2npln condition met\n[INFO] waiting for pod/pyos-od-67dfc48d84-kww9n Ready\n[OK] pod/pyos-od-67dfc48d84-kww9n condition met\n[INFO] waiting for pod/speedtest-od-894b7c886-69vc4 Ready\n[OK] pod/speedtest-od-894b7c886-69vc4 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-b75fb 1/1 Running 0 20s\nmongodb-od-77c945467d-t8cv7 1/1 Running 0 20s\nnginx-od-b8c8c7b95-lkjl6 1/1 Running 0 20s\nopenldap-od-56b6564c85-2npln 1/1 Running 0 18s\npyos-od-67dfc48d84-kww9n 1/1 Running 0 20s\nspeedtest-od-894b7c886-69vc4 1/1 Running 0 20s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n superdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
"},{"location":"3.2/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
"},{"location":"3.2/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.2/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.2.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.2\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/poduser-3.2.yaml\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-x89kq 1/1 Running 0 11s\nmongodb-od-77c945467d-c5cw4 1/1 Running 0 11s\nnginx-od-86c5dfcc67-nfvbq 1/1 Running 0 11s\nopenldap-od-5bbdd75864-mzzmh 1/1 Running 0 11s\npyos-od-7646bf4786-c2hdm 1/1 Running 0 11s\nspeedtest-od-7f5484966f-6t4b2 1/1 Running 0 11s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-86c5dfcc67-nfvbq --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.2.ps1 PowerShell script allows you to set the new namespace as an option.
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes.
Network policies are implemented by the network plugin. To use network policies, you must be using a networking solution which supports NetworkPolicy.
There are two sorts of isolation defined in abcdesktop : the NetworkPolicy rights and the NetworkPolicy permits.
The NetworkPolicy rights contains egress and ingress for pod selected by tag. rights means access (ingress) to this pod and access (egress) from this pod. To define ip filter for user's pod, you need to set egress NetworkPolicy.
The NetworkPolicy permits contains egress to a pod selected by tag. The NetworkPolicy permits means permit access to this pod.
"},{"location":"3.3/config/networkpolicy/#apply-the-default-netpol-default-33yaml-file","title":"Apply the default netpol-default-3.3.yaml file","text":"
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-vbbb7 1/1 Running 0 32s\nmemcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s\nmongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s\nnginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s\nopenldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s\npyos-od-8d4988b56-vcd7z 1/1 Running 0 32s\nrouter-od-f5458658-b52hj 1/1 Running 0 33s\nspeedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.3/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[OK] default account is created\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[OK] pyos-serviceaccount account is created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready\n[OK] pod/console-od-79bf9bf475-gbb62 condition met\n[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready\n[OK] pod/memcached-od-d4b6b6867-c8b4p condition met\n[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready\n[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met\n[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready\n[OK] pod/nginx-od-57dccb8cf9-txgzc condition met\n[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready\n[OK] pod/openldap-od-6955699d5-qhjzr condition met\n[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready\n[OK] pod/pyos-od-777747f64b-r87x5 condition met\n[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready\n[OK] pod/router-od-59d67d664f-f56m8 condition met\n[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready\n[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-79bf9bf475-gbb62 1/1 Running 0 12s\nmemcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s\nmongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s\nnginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s\nopenldap-od-6955699d5-qhjzr 1/1 Running 0 12s\npyos-od-777747f64b-r87x5 1/1 Running 0 13s\nrouter-od-59d67d664f-f56m8 1/1 Running 0 13s\nspeedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n\n[OK] Please open your web browser and connect to http://localhost:30443/\n
"},{"location":"3.3/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
You can verify secrets creation with the following command :
kubectl get secrets -n abcdesktop\n
You should read on the standard output :
NAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 68s\nabcdesktopjwtdesktopsigning Opaque 2 68s\nabcdesktopjwtusersigning Opaque 2 67s\n
"},{"location":"3.3/setup/kubernetes_abcdesktop/#step-3-download-and-create-the-abcdesktop-config-file","title":"Step 3: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.3/setup/kubernetes_abcdesktop/#step-4-create-the-abcdesktop-pods-and-services","title":"Step 4: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.3/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Also, you can run again the command
kubectl get pods -l type=x11server -n abcdesktop\n
You should see that the anonymous-XXXXX pod have been created and is Running
NAME READY STATUS RESTARTS AGE\nanonymous-c44fc 4/4 Running 0 116s\n
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-pghrs 1/1 Running 0 12s\nmemcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s\nmongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s\nnginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s\nopenldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s\npyos-od-8d4988b56-7bg5z 1/1 Running 0 12s\nrouter-od-f5458658-znwcg 1/1 Running 0 12s\nspeedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-vbbb7 1/1 Running 0 32s\nmemcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s\nmongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s\nnginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s\nopenldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s\npyos-od-8d4988b56-vcd7z 1/1 Running 0 32s\nrouter-od-f5458658-b52hj 1/1 Running 0 33s\nspeedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.4/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[OK] default account is created\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[OK] pyos-serviceaccount account is created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready\n[OK] pod/console-od-79bf9bf475-gbb62 condition met\n[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready\n[OK] pod/memcached-od-d4b6b6867-c8b4p condition met\n[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready\n[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met\n[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready\n[OK] pod/nginx-od-57dccb8cf9-txgzc condition met\n[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready\n[OK] pod/openldap-od-6955699d5-qhjzr condition met\n[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready\n[OK] pod/pyos-od-777747f64b-r87x5 condition met\n[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready\n[OK] pod/router-od-59d67d664f-f56m8 condition met\n[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready\n[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-79bf9bf475-gbb62 1/1 Running 0 12s\nmemcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s\nmongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s\nnginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s\nopenldap-od-6955699d5-qhjzr 1/1 Running 0 12s\npyos-od-777747f64b-r87x5 1/1 Running 0 13s\nrouter-od-59d67d664f-f56m8 1/1 Running 0 13s\nspeedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n\n[OK] Please open your web browser and connect to http://localhost:30443/\n
"},{"location":"3.4/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
You can verify secrets creation with the following command :
kubectl get secrets -n abcdesktop\n
You should read on the standard output :
NAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 68s\nabcdesktopjwtdesktopsigning Opaque 2 68s\nabcdesktopjwtusersigning Opaque 2 67s\n
"},{"location":"3.4/setup/kubernetes_abcdesktop/#step-3-download-and-create-the-abcdesktop-config-file","title":"Step 3: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.4/setup/kubernetes_abcdesktop/#step-4-create-the-abcdesktop-pods-and-services","title":"Step 4: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.4/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Also, you can run again the command
kubectl get pods -l type=x11server -n abcdesktop\n
You should see that the anonymous-XXXXX pod have been created and is Running
NAME READY STATUS RESTARTS AGE\nanonymous-c44fc 4/4 Running 0 116s\n
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-pghrs 1/1 Running 0 12s\nmemcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s\nmongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s\nnginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s\nopenldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s\npyos-od-8d4988b56-7bg5z 1/1 Running 0 12s\nrouter-od-f5458658-znwcg 1/1 Running 0 12s\nspeedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
"},{"location":"about/authors/","title":"Authors and Contributors","text":""},{"location":"about/authors/#primary-authors","title":"Primary Authors","text":"
Alexandre DEVELY : Project owner, architect, developer, containers and security design, all components, maintainer of the code and has written much of the current code base
Cedric HAUWEL : Control Plane PyOS and authentification, included a complete refactor of the control plane
Jeremy PETIT : HTML, CSS, Javascript, nodejs: Full Stack Javascript Developer
Kevin VOYER : HTML, CSS, Javascript, Firefox clipboard extension, nodejs : Full Stack Javascript Developer
Vincent PENVERN : Python, Ansible, Firefox clipboard extension, Pyos and embedded applications
Franck SEROT : Project owner, architect, developer, containers and security design, all components, maintainer of the code and has written much of the current code base
Jean-Philippe XAVIER: Architect, design and network policies with calico
The incomplete list of individuals below have provided patches or otherwise contribute to the project prior to the project being hosted on GitHub. See the GitHub commit log for a list of recent contributors. We would like to thank everyone who has contributed to the project in any way.
"},{"location":"about/gnu-gpl-v2.0/","title":"GNU General Public License","text":"
Version 2, June 1991 Copyright \u00a9 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.
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.
"},{"location":"about/gnu-gpl-v2.0/#terms-and-conditions-for-copying-distribution-and-modification","title":"TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION","text":"
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 \u201cProgram\u201d, below, refers to any such program or work, and a \u201cwork based on the Program\u201d 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 \u201cmodification\u201d.) Each licensee is addressed as \u201cyou\u201d.
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 \u201cany later version\u201d, 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.
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 \u201cAS IS\u201d 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
"},{"location":"about/gnu-gpl-v2.0/#how-to-apply-these-terms-to-your-new-programs","title":"How to Apply These Terms to Your New Programs","text":"
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 \u201ccopyright\u201d line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>\nCopyright (C) <year> <name of author>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n
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\nGnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions; type `show c' for details.\n
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 \u201ccopyright disclaimer\u201d for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n`Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n<signature of Ty Coon>, 1 April 1989\nTy Coon, President of Vice\n
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.
"},{"location":"about/howreadthisdoc/","title":"How to read the abcdesktop.io documentation","text":""},{"location":"about/howreadthisdoc/#abcdesktopio-documentation","title":"abcdesktop.io documentation","text":"
The abcdesktop.io documentation brings you labs and tutorials that help you get hands-on experience using abcdesktop.io. You will find a mix of labs and tutorials that will help abcdesktop.io users, including sysadmins, IT Pros, and developers. There is a mix of hands-on tutorials right in the browser, instructions on setting up and using abcdesktop.io in your own environment (docker and kubernetes), and resources about best practices for developing and deploying your own abcdesktop.io applications.
We recommend you to start in docker mode first with the Setup Guide in docker mode.
Then explore the individual labs that explore many advanced features of abcdesktop.io, in Configuration Guide
You can also, read the genesis chapters GUI apps on Docker.
Learn more about abcdesktop.io, how it can help you deploy secure, scalable applications and save money along the way.
"},{"location":"about/howreadthisdoc/#the-basics-of-abcdesktopio","title":"The Basics of abcdesktop.io","text":"
Learn more about the core concepts of abcdesktop.io and what it can do for your operations team, and help you understand the fundamental value proposition for abcdesktop.io.
Topics include:
Fundamentals of abcdesktop.io
Deploy abcdesktop.io using docker-composer
Defined docker image application
Build your own application
Use standard GNU/Linux Application
Use Microsoft Windows Application with Wine
"},{"location":"about/howreadthisdoc/#the-advanced-of-abcdesktopio","title":"The Advanced of abcdesktop.io","text":"
This stage will help you learn more about some of the advanced topics of abcdesktop.io using Kubernetes.
Topics include:
Deploy abcdesktop.io using Kubernetes
Storage and Kubernetes drivers
Legacy Files server (CIFS, NFS, WebDav)
Amazon/S3, Ceph
Roles
Security
Networking Policies
Orchestration
LoadBalancing
Logging with GrayLog
Garbage collector
"},{"location":"about/howtodolabsexercices/","title":"How to do the labs and exercices","text":"
abcdesktop labs and tutorials are written using a desktop host. The supported operating system are :
Operating System Recommended version GNU/Linux Ubuntu 18.04.4 LTS (Bionic Beaver) macOS/X Catalina version 10.15.3 (and above) Windows 10 Version 1703 (and above)"},{"location":"about/howtodolabsexercices/#choose-desktop-or-server","title":"Choose desktop or server","text":"
If you choose server, please translate the URL request http://localhost with the hostname of your server.
For example, if you are doing the exercice on a hostname 'server01.labs.domain.local', you have to translate the URL request http://localhost with http://server01.labs.domain.local
Your web browser (like Google Chrome) may refuse unsecure websocket (ws) connections to localhost or your FQDN (only wss, so you should setup a TLS certificate for your local web/websocket server). It should work without any issues in Mozilla Firefox on localhost.
If you choose desktop, the URL request http://localhost will reach your local services.
"},{"location":"about/opensource/","title":"Open Source","text":""},{"location":"about/opensource/#abcdesktopio-is-an-open-source-project","title":"abcdesktop.io is an open source project","text":"
abcdesktop.io is an open source project and is a volunteer effort. This means that it depends on people to give some of their free time to improve it and make it even better.
Follow the Fork me on github links, to get access to each repository.
If you are reading this, then you are probably curious or want to contribute in some way. Read on to see how you can do so.
abcdesktop.io deplend on a lot of open source diffrents projets.
"},{"location":"about/opensource/#webmodules","title":"WebModules","text":"Package Licence Authors Source novnc MPL-2.0 Joel Martin https://kanaka.github.io/noVNC/ os.js BSD license Anders Evenrud https://github.com/os-js/OS.js/ dropzone.js MIT license Matias Meno, www.colorglare.com https://github.com/enyo/dropzone/ hammer.js MIT license Jorik Tangelder http://hammerjs.github.io/ jquery MIT license jQuery Team https://jquery.com/ jqueryui MIT license jQuery Team https://jqueryui.com/ js-cookie MIT license Klaus Hartl & Fagner Brack https://github.com/js-cookie/ UAParser GPLv2 & MIT Faisal Salman https://github.com/faisalman/ua-parser-js Angular FileManager MIT license Jonas Sciangula Street https://github.com/joni2back/angular-filemanager Bootstrap MIT license Bootstrap team https://getbootstrap.com/ webaudio-wav-stream-player MIT license Julien Bouquillon https://github.com/revolunet/webaudio-wav-stream-player bootbox MIT license Nick Payne makeusabrew https://github.com/makeusabrew/bootbox"},{"location":"about/opensource/#container-components","title":"Container components","text":""},{"location":"about/opensource/#nginx","title":"nginx","text":"Package Licence Authors Source nginx BSD licence Igor Sysoev http://nginx.org/ lua GPL-Compatible Free Software Licenses team at PUC-Rio in Brazil https://www.lua.org/"},{"location":"about/opensource/#ocpyos","title":"oc.pyos","text":"Package Version License CherryPy 18.5.0 BSD License Jinja2 2.11.1 BSD-3-Clause PyJWT 1.7.1 MIT PyNaCl 1.3.0 Apache License 2.0 PyYAML 5.3 MIT bcrypt 3.1.7 Apache License, Version 2.0 certifi 2020.4.5.1 MPL-2.0 cffi 1.14.0 MIT chardet 3.0.4 LGPL cryptography 2.9 BSD or Apache License, Version 2.0 dnspython 1.16.0 BSD-like docker 4.2.0 Apache License 2.0 future 0.18.2 MIT google-auth 1.13.1 Apache 2.0 graypy 2.1.0 BSD License idna 2.9 BSD-like iso8601 0.1.12 MIT isort 4.3.21 MIT kubernetes 11.0.0 Apache License Version 2.0 netaddr 0.7.19 BSD License oauthlib 3.1.0 BSD paramiko 2.7.1 LGPL pyasn1 0.4.8 BSD pyasn1-modules 0.2.8 BSD-2-Clause pycrypto 2.6.1 Public Domain pymongo 3.10.1 Apache License, Version 2.0 python-dateutil 2.8.1 Dual License python-geoip 1.2 GNU LESSER GENERAL PUBLIC LICENSE python-ldap 3.2.0 Python style python-subprocess2 2.0.2 LGPLv3 pytz 2019.3 MIT requests 2.23.0 Apache 2.0 requests-oauthlib 1.3.0 ISC rsa 4.0 ASL 2 shellescape 3.8.1 MIT license urllib3 1.25.8 MIT Package Version License ntlm_auth 2.0 GNU Lesser General Public License kerberos 1.16-2 MIT cntlm 0.92.3 GNU General Public License version 2.0 (GPLv2)"},{"location":"about/opensource/#ocuser","title":"oc.user","text":"Package Licence Authors Source novnc MPL-2.0 Joel Martin (github@martintribe.org) https://kanaka.github.io/noVNC/ supervisor LICENCES.TXT Chris McDonough http://supervisord.org/ tigervnc MIT licence Tiger Dev Tea https://tigervnc.org/ openbox GNU license Mikael Magnusson http://openbox.org/ cupds GNU & LGPL Apple Inc. https://www.cups.org/ xsettingsd COPYING Daniel Erat https://github.com/derat/xsettingsd angular-filemanager AGPL-3.0 Maestro Alubia https://www.npmjs.com/package/angular-filemanager-nodejs-bridge"},{"location":"about/opensource/#daemons","title":"Daemons","text":""},{"location":"about/opensource/#spawner-service","title":"Spawner-Service","text":"Package Licence Authors Source accept-language-parser@1.5.0 MIT Andy Royle https://github.com/opentable/accept-language-parser accept-language@3.0.18 MIT Tingan Ho https://github.com/tinganho/node-accept-language accepts@1.3.7 MIT no Author https://github.com/jshttp/accepts create-symlink@1.0.0 MIT Shinnosuke Watanabe https://github.com/shinnn/create-symlink diacritics@1.3.0 MIT Andrew Kelley https://github.com/andrewrk/node-diacritics dominant-color@0.0.1 ISC Hrvoje Simic https://github.com/shime/dominant-color event-stream@4.0.1 MIT Dominic Tarr https://github.com/dominictarr/event-stream express-validator@6.4.0 MIT Christoph Tavan https://github.com/express-validator/express-validator express@4.17.1 MIT TJ Holowaychuk https://github.com/expressjs/express find-process@1.4.3 MIT zoujie https://github.com/yibn2008/find-process geoip-lite@1.4.1 Apache-2.0 Philip Tellis https://github.com/bluesmoon/node-geoip helmet@3.22.0 MIT Adam Baldwin https://github.com/helmetjs/helmet hex-rgb@4.1.0 MIT Sindre Sorhus https://github.com/sindresorhus/hex-rgb imagemagick@0.1.3 MIT Rasmus Andersson https://github.com/rsms/node-imagemagick ini@1.3.5 ISC Isaac Z. Schlueter https://github.com/isaacs/ini ipaddr.js@1.9.1 MIT whitequark https://github.com/whitequark/ipaddr.js jsonfile@6.0.1 MIT JP Richardson https://github.com/jprichardson/node-jsonfile mime-types@2.1.26 MIT no Author https://github.com/jshttp/mime-types mmmagic@0.5.3 MIT Brian White https://github.com/mscdex/mmmagic npid@0.4.0 MIT* Mathieu Turcotte https://github.com/MathieuTurcotte/node-pid ps-node@0.1.6 MIT no Author https://github.com/neekey/ps simple-parser@0.0.0 ISC no Author no Repository walk@2.3.14 (MIT OR Apache-2.0) AJ ONeal https://git.coolaj86.com/coolaj86/fs-walk.js which@2.0.2 ISC Isaac Z. Schlueter https://github.com/isaacs/node-which wmctrljs@1.1.9 ISC kevin.voyer.developpeur@gmail.com https://github.com/Kmynes/wmctrljs ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws xwininfo@0.0.0 ISC ashaffer https://github.com/ashaffer/node-xwininfo"},{"location":"about/opensource/#broadcast-service","title":"Broadcast-service","text":"Package Licence Authors Source http-proxy@1.18.0 MIT Charlie Robbins https://github.com/http-party/node-http-proxy ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws"},{"location":"about/opensource/#file-service","title":"File-Service","text":"Package Licence Authors Source busboy@0.3.1 MIT Brian White https://github.com/mscdex/busboy express@4.17.1 MIT TJ Holowaychuk https://github.com/expressjs/express fs-extra@9.0.0 MIT JP Richardson https://github.com/jprichardson/node-fs-extra helmet@3.22.0 MIT Adam Baldwin https://github.com/helmetjs/helmet mime-types@2.1.26 MIT no Author https://github.com/jshttp/mime-types mkdirp@1.0.4 MIT no Author https://github.com/isaacs/node-mkdirp urlencode@1.1.0 MIT fengmk2 https://github.com/node-modules/urlencode"},{"location":"about/opensource/#printer-service","title":"Printer-Service","text":"Package Licence Authors Source chokidar@3.3.1 MIT Paul Miller https://github.com/paulmillr/chokidar ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws"},{"location":"about/opensource/#xterm-service","title":"Xterm-Service","text":"Package Licence Authors Source xterm.js MIT xtermjs team https://github.com/xtermjs/xterm.js"},{"location":"about/opensource/#filemanager-service","title":"FileManager-Service","text":"Package Licence Authors Source angular-filemanager-nodejs-bridge@0.1.3 AGPL-3.0 Fabian K\u00f6ster no Repository"},{"location":"about/otherrelatedprojects/","title":"Others related projets","text":""},{"location":"about/otherrelatedprojects/#projects","title":"Projects","text":"
Welcome to the others related projects section, where you can find some projects related to use cloud application inside a web browser.
http://wiki.ros.org/docker/Tutorials/GUI
https://github.com/mviereck/x11docker x11docker allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.
https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-ubuntu-18-04 By using noVNC and TigerVNC, you can run native applications inside a Docker container and access them remotely using a web browser.
HW accelerated GUI apps on Docker Describe How to containerizing a GUI app. Really easy to understand, a good article.
https://www.kasmweb.com
https://github.com/fcwu/docker-ubuntu-vnc-desktop docker-ubuntu-vnc-desktop is a Docker image to provide web VNC interface to access Ubuntu LXDE/LxQT desktop environment.
Dockerize GUI app This project dockerize typical GUI app so that you can visit it in browser. Really good technical solutions.
kube-desktop
"},{"location":"about/play_sound_in_docker/","title":"Play sound inside a docker to a web browser","text":""},{"location":"about/play_sound_in_docker/#sound-in-docker-is-the-big-challenge","title":"Sound in docker is the big challenge","text":"
As VNC does not support sound, we have to forward a Pulseaudio null-sink output to the user browser, with no latency.
Release 1.0 : use the pulseaudio http stream and play wave data (poor sound quality but works in https only)
Release 2.0 : use janus webrtc gateway, send pulseaudio rtp stream to janus, and play sound using the web browser webrtc stack (good sound quality)
Release 3.0 : use virtual microphone using gstreamer and pulseaudio
Realy fun projets: use virtual microphone using gstreamer and pulseaudio and Get Pulseaduio sink from webrtc To be implemented
"},{"location":"about/play_sound_in_docker/#release-10-pulseaudio-with-a-simple-module-http-protocol-tcp-and-a-javascript-no-latency-wav-stream-player","title":"Release 1.0: Pulseaudio with a simple module-http-protocol-tcp and a javascript no latency wav stream player","text":"
webaudio-wav-stream-player No latency wav stream player using browser fetch streaming API and WebAudio
Pulseaudio with module-http-protocol-tcp A proof-of-concept HTTP module, which can be used to introspect the current status of the PulseAudio daemon using HTTP. Just load this module and point your browser to http://localhost:4714/. This module takes the same arguments as module-cli-protocol-tcp.
Create Pulseaudio null-sink
# defined with desktop 1.0\nload-module module-null-sink sink_name=u8_1_11025 format=u8 channels=1 rate=11025 sink_properties=\"device.description='default format=u8 c=1 ra\nte=11025'\"\n
Then use
load-module module-http-protocol-tcp\n
Read the http stream data, using fetch call :
$target is the container Ip Address
$pulseaudio_http_port is the pulseaudio http port ( by default, the http port vallue is
Pulseaudio module-http-protocol-tcp does not send wav formated header. We need to build a new wav header for each receved fragment. This is done in wavify.js file :
//\n// Write a proper WAVE header for the given buffer.\n// format ULAW or ALAW \n// Offset is hardcoded \nfunction wavify_law(data, numberOfChannels, sampleRate, bitsPerSample, format ) {\n\n // // total header : 4 + 26 + 12 + 8 = 50 \n // // and the data and size: 50 + 8 ( data + 32 bits for the size )\n var header_length = 58; // 4 + 26 + 12 + 8 + 8 = 58 \n var total_length = header_length + data.byteLength;\n\n // bitsPerSample MUST BE 8 bits\n\n // The default byte ordering assumed for WAVE data files is little-endian.\n var header = new ArrayBuffer(header_length); \n var d = new DataView(header);\n\n d.setUint8(0, \"R\".charCodeAt(0)); \n d.setUint8(1, \"I\".charCodeAt(0));\n d.setUint8(2, \"F\".charCodeAt(0));\n d.setUint8(3, \"F\".charCodeAt(0));\n\n // All integers MUST be set in bigEndian format\n // Wave chunks containing format information and sampled data\n // cksize 4 Chunk size: 4+n \n // 4: for sizeof( 'WAVE' ) + n \n // n: Wave chunks containing format information and sampled data\n //var data_length = d.setUint32(4, data.byteLength / 2 + 44, true);\n //bitsPerSample data.byteLength + 8+16+12\n d.setUint32(4, total_length, true); \n\n // write 4 bytes\n d.setUint8(8, \"W\".charCodeAt(0)); \n d.setUint8(9, \"A\".charCodeAt(0)); \n d.setUint8(10, \"V\".charCodeAt(0)); \n d.setUint8(11, \"E\".charCodeAt(0)); \n\n\n // write 4 bytes\n d.setUint8(12, \"f\".charCodeAt(0));\n d.setUint8(13, \"m\".charCodeAt(0));\n d.setUint8(14, \"t\".charCodeAt(0));\n d.setUint8(15, \" \".charCodeAt(0));\n\n\n // All integers MUST be set in bigEndian format\n\n\n // Subchunk1Size 16 for PCM. \n // Offset 16 \n // Size 4\n // This is the size of the rest of the Subchunk which follows this number.\n // The size of the rest of this subchunk.\n // All integers MUST be set in bigEndian format\n // d.setUint32(16, 16, true);\n // cksize 4 Chunk size: 16, 18 or 40 \n var chunksize = 18;\n d.setUint32(16, chunksize, true);\n\n // The format of the wave data, which will be 1 for uncompressed PCM data.\n // All integers MUST be set in bigEndian format\n // FORMAT must be WAVE_FORMAT_ULAW or WAVE_FORMAT_ALAW\n d.setUint16(20, format, true);\n\n // Indicates if the data is mono, stereo, or something else.\n // NumChannels Mono = 1, Stereo = 2, etc.\n // All integers MUST be set in bigEndian format\n d.setUint16(22, numberOfChannels, true);\n\n // The sample rate per second.\n // SampleRate 8000, 44100, etc.\n // All integers MUST be set in bigEndian format\n d.setUint32(24, sampleRate, true);\n\n // byteRate == SampleRate * NumChannels * BitsPerSample/8\n // All integers MUST be set in bigEndian format\n var byteRate = sampleRate * numberOfChannels * bitsPerSample/8;\n d.setUint32(28, byteRate, true ); \n\n // blockAlign == NumChannels * BitsPerSample/8\n // The number of bytes for one sample including all channels.\n var blockAlign = numberOfChannels * bitsPerSample / 8; \n // All integers MUST be set in bigEndian format\n d.setUint16(32, blockAlign, true ); \n\n // BitsPerSample 8 bits = 8, 16 bits = 16, etc.\n d.setUint16(34, bitsPerSample, true);\n\n // Wave files may include an additional field, usually reserved for non-PCM formats:\n // bits per Sample \n // Size of the extension \n // 2 bytes\n // Offset \n var cbSize = 0;\n d.setUint16(36, cbSize, true);\n\n d.setUint8(38, \"f\".charCodeAt(0));\n d.setUint8(39, \"a\".charCodeAt(0));\n d.setUint8(40, \"c\".charCodeAt(0));\n d.setUint8(41, \"t\".charCodeAt(0));\n var cksize = 4;\n d.setUint32(42, cksize, true);\n var dwSampleLength = data.byteLength; // Number of samples ( per channel )\n d.setUint32(46, dwSampleLength, true);\n\n// 50\n d.setUint8(50, \"d\".charCodeAt(0));\n d.setUint8(51, \"a\".charCodeAt(0));\n d.setUint8(52, \"t\".charCodeAt(0));\n d.setUint8(53, \"a\".charCodeAt(0));\n\n d.setUint32(54, data.byteLength, true);\n\n//58\n // data must pad byte 0 or 1 if n is odd\n return concat(header, data);\n}\n
Then use the WavPlayer.js from Julien Bouquillon https://github.com/revolunet/webaudio-wav-stream-player to read data and send to javascript AudioContext()
This Release is getting glitchy audio. In Chrome, the stream plays with a slight crackle. Read the issue https://github.com/revolunet/webaudio-wav-stream-player/issues/10
It works, uses only HTTP protocol but i can't fix the glitchy audio. We find another way to stream sound to web browser device, using the WebRTC stack and RTP pulseaudio.
"},{"location":"about/play_sound_in_docker/#release-20-pulseaudio-with-a-webrtc-gateway","title":"Release 2.0: Pulseaudio with a WebRTC gateway","text":""},{"location":"about/play_sound_in_docker/#architecture","title":"Architecture","text":"
Janus WebRTC Gateway with ICE server. Janus act as WebRTC gateway, listen for udp RTP stream from Pulseaudio and forward it to user web browser.
Pulseaudio with module-rtp-send Create a null-sink formated alaw and send it to the WebRTC gateway udp port on localhost.
### Load the RTP sender module (also configured via paprefs, see above)\nload-module module-null-sink sink_name=rtp_alaw format=alaw channels=1 rate=8000 sink_properties=\"device.description='RTP Multicast Sink alaw'\"\nload-module module-rtp-send source=rtp_alaw.monitor destination_ip=127.0.0.1 port=5000 channels=1 format=alaw\n
Make sure that the pip command is installed on you system.
"},{"location":"about/version/#how-to-build-the-documentation","title":"How to build the documentation","text":""},{"location":"about/version/#build-documentation-files","title":"Build documentation files","text":"
git clone https://github.com/abcdesktopio/docs\ncd docs\nmake docs\nINFO - Cleaning site directory \nINFO - Building documentation to directory: /home/alex/src/docs/opsdocs/site \n
All HTML files are located in the building documentation directory
"},{"location":"about/version/#how-to-view-the-documentation","title":"How to view the documentation","text":""},{"location":"about/version/#serve-documentation-files","title":"Serve documentation files","text":"
make serve\nINFO - Serving on http://127.0.0.1:8000\nINFO - Start watching changes\nINFO - Start detecting changes\n
Now connect http://127.0.0.1:8000 with any Web Navigator to browse through the documentation.
"},{"location":"applications/","title":"oc.apps","text":""},{"location":"applications/#to-get-more-informations","title":"To get more informations","text":"
Please, read the public documentation web site: * https://www.abcdesktop.io * https://abcdesktopio.github.io/
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.0\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-2048\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-alpine-error,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.TwentyFortyEight.desktop\"\nLABEL oc.launch=\"org.gnome.TwentyFortyEight.Gnome-2048\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"2048-alpine-error\"\nLABEL oc.displayname=\"2048 (alpine gtk) with error\"\nLABEL oc.path=\"/usr/bin/gnome-2048\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"2048-alpine-error\"\nENV APPBIN \"/usr/bin/gnome-2048\"\nENV APP \"/usr/bin/gnome-2048\"\nLABEL oc.containerengine=\"pod_application\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-alpine-error/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-alpine-error/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-alpine-error/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-alpine-error/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-2048\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-alpine,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.TwentyFortyEight.desktop\"\nLABEL oc.launch=\"org.gnome.TwentyFortyEight.Gnome-2048\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"2048-alpine\"\nLABEL oc.displayname=\"2048 (alpine gtk)\"\nLABEL oc.path=\"/usr/bin/gnome-2048\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"64M\\\",\\\"pid_mode\\\":false,\\\"network_mode\\\":\\\"none\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"2048-alpine\"\nENV APPBIN \"/usr/bin/gnome-2048\"\nENV APP \"/usr/bin/gnome-2048\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-alpine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-alpine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-alpine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-alpine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends 2048-qt && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-ubuntu,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"2048-qt.desktop\"\nLABEL oc.launch=\"2048-qt.2048-qt\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"2048-ubuntu\"\nLABEL oc.displayname=\"2048 (ubuntu qt)\"\nLABEL oc.path=\"/usr/games/2048-qt\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"2048-ubuntu\"\nENV APPBIN \"/usr/games/2048-qt\"\nENV APP \"/usr/games/2048-qt\"\nLABEL oc.containerengine=\"pod_application\"\nENV QT_X11_NO_MITSHM=1\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-ubuntu/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-ubuntu/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-ubuntu/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-ubuntu/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/apachedirectorystudio/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN curl -sL --output /tmp/ApacheDirectoryStudio.tar.gz https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz && cd /usr/local && tar -xvf /tmp/ApacheDirectoryStudio.tar.gz && rm -rf /tmp/ApacheDirectoryStudio.tar.gz\nRUN mkdir /.ApacheDirectoryStudio && chmod 777 /.ApacheDirectoryStudio\nCOPY composer/init.d/init.ApacheDirectoryStudio /composer/init.d/\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.22.04:$TAG\nUSER root\nRUN curl -sL --output /tmp/ApacheDirectoryStudio.tar.gz https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz && cd /usr/local && tar -xvf /tmp/ApacheDirectoryStudio.tar.gz && rm -rf /tmp/ApacheDirectoryStudio.tar.gz\nRUN mkdir /.ApacheDirectoryStudio && chmod 777 /.ApacheDirectoryStudio\nCOPY composer/init.d/init.ApacheDirectoryStudio /composer/init.d/\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y openjdk-11-jre libswt-gtk-4-jni libswt-webkit-gtk-4-jni libswt-cairo-gtk-4-jni libswt-gtk-4-java && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"account.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii00NjIgNDYzIDM1IDM1IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IC00NjIgNDYzIDM1IDM1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojMDA3OEQ2O30NCjwvc3R5bGU+DQo8dGl0bGU+XzwvdGl0bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTQ0MS4yLDQ4NGMwLjksMC4zLDEuOCwwLjgsMi42LDEuNGMwLjgsMC42LDEuNCwxLjMsMiwyLjFjMC41LDAuOCwxLDEuNywxLjMsMi42YzAuMywxLDAuNCwxLjksMC40LDIuOWgtMS4zDQoJYzAtMS4xLTAuMi0yLjItMC42LTMuMmMtMC44LTItMi40LTMuNS00LjMtNC4zYy0xLjctMC43LTMuNi0wLjgtNS40LTAuM2MtMC43LDAuMi0xLjQsMC41LTIsMC44Yy0xLjIsMC43LTIuMiwxLjctMi45LDIuOQ0KCWMtMC43LDEuMy0xLjEsMi43LTEuMSw0LjJoLTEuM2MwLTIsMC42LTMuOSwxLjctNS41YzAuNi0wLjgsMS4yLTEuNSwyLTIuMWMwLjgtMC42LDEuNy0xLjEsMi42LTEuNGMtMS4xLTAuNi0yLTEuNC0yLjYtMi41DQoJYy0wLjMtMC41LTAuNS0xLjEtMC43LTEuN2MtMC40LTEuNS0wLjMtMy4xLDAuMy00LjVjMC43LTEuNiwyLTIuOSwzLjYtMy42YzEuNy0wLjcsMy42LTAuNyw1LjMsMGMxLjYsMC43LDIuOSwyLDMuNiwzLjYNCgljMC42LDEuNCwwLjcsMywwLjMsNC41Yy0wLjIsMC42LTAuNCwxLjEtMC43LDEuN2MtMC4zLDAuNS0wLjcsMS0xLjEsMS40Qy00NDAuMiw0ODMuMy00NDAuNyw0ODMuNy00NDEuMiw0ODR6IE0tNDUwLDQ3OA0KCWMwLDAuNywwLjEsMS41LDAuNCwyLjFjMC42LDEuMywxLjYsMi4zLDIuOSwyLjljMS40LDAuNiwyLjksMC42LDQuMiwwYzEuMy0wLjYsMi4zLTEuNiwyLjktMi45YzAuNi0xLjQsMC42LTIuOSwwLTQuMg0KCWMtMC42LTEuMy0xLjYtMi4zLTIuOS0yLjljLTEuNC0wLjYtMi45LTAuNi00LjIsMGMtMS4zLDAuNi0yLjMsMS42LTIuOSwyLjlDLTQ0OS45LDQ3Ni41LTQ1MCw0NzcuMy00NTAsNDc4eiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS00MzQuNSw0OTMuNWgtMi4zVjQ5M2MwLTEtMC4yLTIuMS0wLjYtMy4xYy0wLjctMS44LTIuMi0zLjMtNC4xLTQuMWMtMS42LTAuNy0zLjQtMC44LTUuMS0wLjMNCgljLTAuNiwwLjItMS4zLDAuNC0xLjksMC44Yy0xLjEsMC43LTIuMSwxLjYtMi44LDIuOGMtMC43LDEuMi0xLDIuNi0xLDMuOXYwLjVoLTIuM1Y0OTNjMC0yLjEsMC42LTQuMSwxLjgtNS44DQoJYzAuNi0wLjgsMS4zLTEuNiwyLjEtMi4yYzAuNi0wLjQsMS4yLTAuOCwxLjktMS4xYy0wLjMtMC4yLTAuNi0wLjQtMC44LTAuN2MtMC41LTAuNS0wLjktMS0xLjItMS41Yy0wLjMtMC41LTAuNi0xLjEtMC44LTEuNw0KCWMtMC40LTEuNi0wLjMtMy4zLDAuMy00LjhjMS42LTMuNyw1LjgtNS40LDkuNi0zLjljMS43LDAuNywzLjEsMi4xLDMuOSwzLjljMC42LDEuNSwwLjcsMy4yLDAuMyw0LjhjLTAuMiwwLjYtMC40LDEuMi0wLjgsMS44DQoJYy0wLjMsMC42LTAuNywxLjEtMS4yLDEuNWMtMC4yLDAuMi0wLjUsMC41LTAuOCwwLjdjMC43LDAuMywxLjMsMC42LDEuOSwxLjFjMC44LDAuNiwxLjUsMS40LDIuMSwyLjJjMC42LDAuOCwxLDEuOCwxLjMsMi43DQoJYzAuMywxLDAuNSwyLDAuNSwzLjFWNDkzLjV6IE0tNDM1LjksNDkyLjVoMC40YzAtMC44LTAuMi0xLjYtMC40LTIuM2MtMC4zLTAuOS0wLjctMS43LTEuMi0yLjVjLTAuNS0wLjgtMS4yLTEuNC0xLjktMg0KCWMtMC43LTAuNi0xLjYtMS0yLjUtMS4zbC0xLTAuNGwwLjktMC41YzAuNS0wLjMsMS0wLjYsMS40LTFjMC40LTAuNCwwLjctMC44LDEtMS4zYzAuMy0wLjUsMC41LTEsMC43LTEuNWMwLjQtMS40LDAuMy0yLjgtMC4zLTQuMg0KCWMtMS40LTMuMi01LjEtNC43LTguMy0zLjRjLTEuNSwwLjYtMi43LDEuOS0zLjQsMy40Yy0wLjMsMC44LTAuNSwxLjYtMC41LDIuNWMwLDAuNiwwLjEsMS4xLDAuMiwxLjdjMC4xLDAuNSwwLjMsMS4xLDAuNiwxLjYNCgljMC42LDEsMS40LDEuOCwyLjQsMi4zbDAuOSwwLjVsLTEsMC40Yy0wLjksMC4zLTEuNywwLjgtMi41LDEuNGMtMC43LDAuNi0xLjQsMS4yLTEuOSwyYy0xLDEuNC0xLjUsMy4xLTEuNiw0LjhoMC40DQoJYzAuMS0xLjQsMC41LTIuOCwxLjItNGMwLjctMS4zLDEuOC0yLjMsMy4xLTMuMWMwLjctMC40LDEuNC0wLjcsMi4xLTAuOWMxLjktMC41LDMuOS0wLjQsNS43LDAuNGMyLjEsMC44LDMuNywyLjUsNC42LDQuNg0KCUMtNDM2LjEsNDkwLjUtNDM1LjksNDkxLjUtNDM1LjksNDkyLjV6IE0tNDQ0LjUsNDgzLjljLTAuOCwwLTEuNi0wLjItMi4zLTAuNWMtMS40LTAuNi0yLjYtMS43LTMuMi0zLjFjLTAuNi0xLjUtMC42LTMuMSwwLTQuNg0KCWMwLjYtMS40LDEuNy0yLjUsMy4xLTMuMmMxLjUtMC42LDMuMS0wLjYsNC42LDBjMS40LDAuNiwyLjYsMS43LDMuMiwzLjJjMC42LDEuNSwwLjYsMy4xLDAsNC42Yy0wLjYsMS40LTEuNywyLjUtMy4xLDMuMQ0KCUMtNDQyLjksNDgzLjgtNDQzLjcsNDgzLjktNDQ0LjUsNDgzLjl6IE0tNDQ0LjUsNDczYy0wLjcsMC0xLjMsMC4xLTEuOSwwLjRjLTEuMiwwLjUtMi4xLDEuNS0yLjcsMi43Yy0wLjUsMS4yLTAuNSwyLjYsMCwzLjkNCgljMC41LDEuMiwxLjUsMi4xLDIuNywyLjdjMS4yLDAuNSwyLjYsMC41LDMuOSwwYzEuMi0wLjUsMi4xLTEuNSwyLjctMi43YzAuNS0xLjIsMC41LTIuNiwwLTMuOWMtMC41LTEuMi0xLjUtMi4xLTIuNy0yLjcNCglDLTQ0My4yLDQ3My4xLTQ0My44LDQ3My00NDQuNSw0NzN6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTQ0NC41LDQ5N2MtOS4xLDAtMTYuNS03LjQtMTYuNi0xNi41YzAtOS4xLDcuNC0xNi41LDE2LjUtMTYuNmM5LjEsMCwxNi41LDcuNCwxNi42LDE2LjUNCglDLTQyOCw0ODkuNi00MzUuNCw0OTctNDQ0LjUsNDk3eiBNLTQ0NC41LDQ2NS44Yy04LjEsMC0xNC43LDYuNi0xNC43LDE0LjdzNi42LDE0LjcsMTQuNywxNC43czE0LjctNi42LDE0LjctMTQuN2MwLDAsMCwwLDAsMA0KCUMtNDI5LjksNDcyLjMtNDM2LjQsNDY1LjgtNDQ0LjUsNDY1LjhMLTQ0NC41LDQ2NS44eiIvPg0KPC9zdmc+DQo=\"\nLABEL oc.keyword=\"apachedirectorystudio,ldap\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"Apache Directory Studio.Apache Directory Studio\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.22.04\"\nENV ARGS=\"-configuration .eclipse/1988419495_linux_gtk_x86_64\"\nLABEL oc.name=\"apachedirectorystudio\"\nLABEL oc.displayname=\"Apache Directory Studio\"\nLABEL oc.path=\"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"apachedirectorystudio\"\nENV APPBIN \"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nLABEL oc.args=\"-configuration .eclipse/1988419495_linux_gtk_x86_64\"\nENV APP \"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/apachedirectorystudio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/apachedirectorystudio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/apachedirectorystudio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/apachedirectorystudio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y astromenace && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"astromenace.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmVyc2lvbj0iMS4xIj4KIDxyZWN0IHN0eWxlPSJvcGFjaXR5OjAuMiIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB4PSIyIiB5PSIzIiByeD0iMS40IiByeT0iMS40Ii8+CiA8cmVjdCBzdHlsZT0iZmlsbDojMzQ1Nzg0IiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHg9IjIiIHk9IjIiIHJ4PSIxLjQiIHJ5PSIxLjQiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0ibSAxNi44NzYxNDMsOS4wMDA4MTk3IGMgLTAuMDcyOTgsMC4wMDI0MSAtMC4xNDg0MDYsMC4wMDk4IC0wLjIyOTY4NywwLjAyMDc1NSAtMC45MTQxNjQsMC4xMjMyMTQ0IC0xLjE2NTA4OSwwLjM0NzAzNjEgLTEuNzI0MDIzLDEuNTM0MzEyMyAtMC4zNzY5OTksMC44MDA4MDcgLTAuNTY1NjAyLDAuODk4NTk4IC0xLjA1MTM2NywxLjAwNDI4OCAtMi4yNzA4OTksLTEuNjc0MDY3NiAtMi4yNzA4OTksMC44ODEyOTQgLTIuNzE3OTY5LDEuNTg5NjUgLTAuNjEyODEyLC0wLjU0NDA5NyAtMS40MDg2NjM4LC0xLjcyMDY0OCAtMi4xOTU2NDUxLC0yLjM3ODM5MiAtMC43MDM2MDg1LC0wLjU4ODA2MiAtMS40MDAxMjY3LC0wLjk0NDM1MDIgLTEuOTUyNDAyMiwtMC41NzMyIC0wLjQzNzY0MDgsMC4zMTA1NCAtMC44MDk0NzIsMC45NzY4MiAtMC45NDQ3MjY3LDIuNTA1NTM0IC0wLjE4NDc3OSwyLjA4ODQ1NCAwLjAwMTkzLDMuMjY0MjEzIDEuMzEyNTAwNCw0Ljk5Mzc5NSAxLjQ4MTk4NCwxLjk1NTc5NyAzLjY4OTk5MDYsMy45MTIyOTcgNy4xODU5MzY2LDYuMzY4MjkzIEMgMTYuMDczLDI1LjEyOTY0OCAxNy4zNDE5NjUsMjYgMTcuMzc5MjY4LDI2IGMgMC4yMDk2ODEsMCAtMi4wMjY2MzksLTIuOTM5NjMxIC0zLjM4MTA1NCwtNC40NDM4MzMgLTIuMDI0MTg1LC0yLjI0ODAzNyAtMi4zOTc3MDQsLTMuMDQ3NDMyIC0yLjQ0MTQ0NywtNC4wNTcwMDUgLTAuMDM5NSwtMC45MTIxMTYgMC4zNDYzNzksLTEuNTE2MzI0IDAuODYzNzEyLC0xLjUxNjMyNCAwLjE4Nzk4MywwIDEuMDM4NzksMC42NDYxOTQgMS45NzY5NTQsMS43MjMwMjMgMC43ODE4MjMsMC44NTQ5MDkgMS4yOTU4NjgsMi4wNTcxOCAxLjkyMDE2NSwyLjkzNzE3NSAxLjMyMjAzNCwxLjY3MDQ2NSAyLjg1NTE4MywxLjg4MzUxOCAzLjQyNDgwNCwwLjQ3NTkyOCAwLjU1MTc5NSwtMS4zNjk2NTYgMC4xOTE2NDMsLTMuNzc1MDg0IC0xLjA2OTc3NCwtNS40NTExNjkgLTAuMTQxOTE5LC0wLjYxMjk3MyAwLjEyNjM1MiwtMC43MDYyMzQgMC43NDY0ODQsLTAuNzA1NTg5IDAuNzg0MzksNy43OWUtNCAyLjI3NDA2NCwwLjUzOTY5MiAzLjE2OTE0MSwxLjMyNDE3NCAxLjEwNjExNCwwLjk2OTQ0MyAxLjI5MjUxLDAuOTY0ODgxIDIuNTIzODI4LDMuNDM2MTM2IDAuNzI2ODM0LDEuNDU4NzU2IDEuNDQ3NzM5LDIuODE5Mjg5IDEuNjAyMzQ0LDMuMDIyOTY4IDAuMjc1MzM2LDAuMzYyNzQ2IDAuMjgxMTIyLDAuMzYwNzM5IDAuMjg1NzQyLC0wLjA5MjY5IC0wLjIzMjM0NiwtMy43NzU3NjggLTEuNTI3MzYsLTcuMzY5MzY5IC00LjMyNzE0OSwtOS45NDgzMTcgQyAyMi4xOTk0MTksMTIuMjg1NTU1IDIwLjgwOTcxLDExLjI2MzY5IDE5LjU4NDU0MiwxMC40MzQxMzYgMTcuNzk5NTAzLDkuMjI1NDkyIDE3LjM4Njk4OSw4Ljk4Mzc1MTggMTYuODc2MTQzLDkuMDAwODE5NyBaIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojOGQ4MDY5IiBkPSJtIDE2Ljg3NjE0Myw4LjAwMDgxOTcgYyAtMC4wNzI5OCwwLjAwMjQxIC0wLjE0ODQwNiwwLjAwOTggLTAuMjI5Njg3LDAuMDIwNzU1IC0wLjkxNDE2NCwwLjEyMzIxNDQgLTEuMTY1MDg5LDAuMzQ3MDM2MSAtMS43MjQwMjMsMS41MzQzMTIyIC0wLjM3Njk5OSwwLjgwMDgwNzEgLTAuNTY1NjAyLDAuODk4NTk4MSAtMS4wNTEzNjcsMS4wMDQyODgxIC0yLjI3MDg5OSwtMS42NzQwNjc2IC0yLjI3MDg5OSwwLjg4MTI5NCAtMi43MTc5NjksMS41ODk2NSBDIDEwLjU0MDI4NSwxMS42MDU3MjggOS43NDQ0MzMyLDEwLjQyOTE3NyA4Ljk1NzQ1MTksOS43NzE0MzMzIDguMjUzODQzNCw5LjE4MzM3MDcgNy41NTczMjUyLDguODI3MDgyOCA3LjAwNTA0OTcsOS4xOTgyMzI3IDYuNTY3NDA4OSw5LjUwODc3MjggNi4xOTU1Nzc3LDEwLjE3NTA1MyA2LjA2MDMyMywxMS43MDM3NjcgYyAtMC4xODQ3NzksMi4wODg0NTQgMC4wMDE5MywzLjI2NDIxMyAxLjMxMjUwMDQsNC45OTM3OTUgMS40ODE5ODQsMS45NTU3OTcgMy42ODk5OTA2LDMuOTEyMjk3IDcuMTg1OTM2Niw2LjM2ODI5MyBDIDE2LjA3MywyNC4xMjk2NDggMTcuMzQxOTY1LDI1IDE3LjM3OTI2OCwyNSBjIDAuMjA5NjgxLDAgLTIuMDI2NjM5LC0yLjkzOTYzMSAtMy4zODEwNTQsLTQuNDQzODMzIC0yLjAyNDE4NSwtMi4yNDgwMzcgLTIuMzk3NzA0LC0zLjA0NzQzMiAtMi40NDE0NDcsLTQuMDU3MDA1IC0wLjAzOTUsLTAuOTEyMTE2IDAuMzQ2Mzc5LC0xLjUxNjMyNCAwLjg2MzcxMiwtMS41MTYzMjQgMC4xODc5ODMsMCAxLjAzODc5LDAuNjQ2MTk0IDEuOTc2OTU0LDEuNzIzMDIzIDAuNzgxODIzLDAuODU0OTA5IDEuMjk1ODY4LDIuMDU3MTggMS45MjAxNjUsMi45MzcxNzUgMS4zMjIwMzQsMS42NzA0NjUgMi44NTUxODMsMS44ODM1MTggMy40MjQ4MDQsMC40NzU5MjggMC41NTE3OTUsLTEuMzY5NjU2IDAuMTkxNjQzLC0zLjc3NTA4NCAtMS4wNjk3NzQsLTUuNDUxMTY5IC0wLjE0MTkxOSwtMC42MTI5NzMgMC4xMjYzNTIsLTAuNzA2MjM0IDAuNzQ2NDg0LC0wLjcwNTU4OSAwLjc4NDM5LDcuNzllLTQgMi4yNzQwNjQsMC41Mzk2OTIgMy4xNjkxNDEsMS4zMjQxNzQgMS4xMDYxMTQsMC45Njk0NDMgMS4yOTI1MSwwLjk2NDg4MSAyLjUyMzgyOCwzLjQzNjEzNiAwLjcyNjgzNCwxLjQ1ODc1NiAxLjQ0NzczOSwyLjgxOTI4OSAxLjYwMjM0NCwzLjAyMjk2OCAwLjI3NTMzNiwwLjM2Mjc0NiAwLjI4MTEyMiwwLjM2MDczOSAwLjI4NTc0MiwtMC4wOTI2OSAtMC4yMzIzNDYsLTMuNzc1NzY4IC0xLjUyNzM2LC03LjM2OTM2OSAtNC4zMjcxNDksLTkuOTQ4MzE3IEMgMjIuMTk5NDE5LDExLjI4NTU1NSAyMC44MDk3MSwxMC4yNjM2OSAxOS41ODQ1NDIsOS40MzQxMzU4IDE3Ljc5OTUwMyw4LjIyNTQ5MiAxNy4zODY5ODksNy45ODM3NTE4IDE2Ljg3NjE0Myw4LjAwMDgxOTcgWiIvPgogPGVsbGlwc2Ugc3R5bGU9Im9wYWNpdHk6MC4yIiBjeD0iMS4wMzciIGN5PSIyNS40OTciIHJ4PSIxLjQxOSIgcnk9IjIuMDU4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQxODAzMjg2LC0wLjkwODQzMTkxLDAuNjY5MzU4NDMsMC43NDI5Mzk2MywwLDApIi8+CiA8ZWxsaXBzZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iMS43NjYiIGN5PSIyNS4wNDEiIHJ4PSIxLjQxOSIgcnk9IjIuMDU4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQxODAzMjg2LC0wLjkwODQzMTkxLDAuNjY5MzU4NDMsMC43NDI5Mzk2MywwLDApIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmO29wYWNpdHk6MC4xIiBkPSJNIDMuNDAwMzkwNiAyIEMgMi42MjQ3OTA2IDIgMiAyLjYyNDc5MDYgMiAzLjQwMDM5MDYgTCAyIDQuNDAwMzkwNiBDIDIgMy42MjQ3OTA2IDIuNjI0NzkwNiAzIDMuNDAwMzkwNiAzIEwgMjguNTk5NjA5IDMgQyAyOS4zNzUyMDkgMyAzMCAzLjYyNDc5MDYgMzAgNC40MDAzOTA2IEwgMzAgMy40MDAzOTA2IEMgMzAgMi42MjQ3OTA2IDI5LjM3NTIwOSAyIDI4LjU5OTYwOSAyIEwgMy40MDAzOTA2IDIgeiIvPgogPHBhdGggc3R5bGU9ImZpbGw6I2ZmZmZmZjtvcGFjaXR5OjAuMSIgZD0iTSAxNi44NzY5NTMgOCBDIDE2LjgwMzk3MyA4LjAwMjQxIDE2LjcyNzc2NSA4LjAxMDUyOTQgMTYuNjQ2NDg0IDguMDIxNDg0NCBDIDE1LjczMjMyIDguMTQ0Njk4OCAxNS40ODA4MDkgOC4zNjkzNjQ1IDE0LjkyMTg3NSA5LjU1NjY0MDYgQyAxNC41NDQ4NzYgMTAuMzU3NDQ4IDE0LjM1Njg1OSAxMC40NTQ4NTcgMTMuODcxMDk0IDEwLjU2MDU0NyBDIDExLjYwMDE5NSA4Ljg4NjQ3OTMgMTEuNTk5NDE0IDExLjQ0MjAzNSAxMS4xNTIzNDQgMTIuMTUwMzkxIEMgMTAuNTM5NTMyIDExLjYwNjI5NCA5Ljc0NDAxMjYgMTAuNDI5MjI4IDguOTU3MDMxMiA5Ljc3MTQ4NDQgQyA4LjI1MzQyMjcgOS4xODM0MjE4IDcuNTU4MTM0OSA4LjgyNjExNTcgNy4wMDU4NTk0IDkuMTk3MjY1NiBDIDYuNTY4MjE4NiA5LjUwNzgwNTcgNi4xOTU4MDE2IDEwLjE3NDQxMSA2LjA2MDU0NjkgMTEuNzAzMTI1IEMgNi4wMDExNDQxIDEyLjM3NDUyMSA1Ljk4NjkxNiAxMi45NDcwNDggNi4wMjkyOTY5IDEzLjQ3ODUxNiBDIDYuMDM4NzQ5NyAxMy4yMjMzNzIgNi4wMzUyODU3IDEyLjk4ODYzNyA2LjA2MDU0NjkgMTIuNzAzMTI1IEMgNi4xOTU4MDE2IDExLjE3NDQxMSA2LjU2ODIxODYgMTAuNTA3ODA2IDcuMDA1ODU5NCAxMC4xOTcyNjYgQyA3LjU1ODEzNDkgOS44MjYxMTU0IDguMjUzNDIyOCAxMC4xODM0MjIgOC45NTcwMzEyIDEwLjc3MTQ4NCBDIDkuNzQ0MDEyNSAxMS40MjkyMjggMTAuNTM5NTMyIDEyLjYwNjI5NCAxMS4xNTIzNDQgMTMuMTUwMzkxIEMgMTEuNTk5NDE0IDEyLjQ0MjAzNSAxMS42MDAxOTUgOS44ODY0NzkzIDEzLjg3MTA5NCAxMS41NjA1NDcgQyAxNC4zNTY4NTkgMTEuNDU0ODU3IDE0LjU0NDg3NiAxMS4zNTc0NDggMTQuOTIxODc1IDEwLjU1NjY0MSBDIDE1LjQ4MDgwOSA5LjM2OTM2NDQgMTUuNzMyMzIgOS4xNDQ2OTg4IDE2LjY0NjQ4NCA5LjAyMTQ4NDQgQyAxNi43Mjc3NjUgOS4wMTA1Mjk0IDE2LjgwMzk3MyA5LjAwMjQxIDE2Ljg3Njk1MyA5IEMgMTcuMzg3Nzk5IDguOTgyOTMyMSAxNy43OTg5NDUgOS4yMjQ5NDk3IDE5LjU4Mzk4NCAxMC40MzM1OTQgQyAyMC44MDkxNTIgMTEuMjYzMTQ4IDIyLjIwMDIyOSAxMi4yODYxNTYgMjIuNjczODI4IDEyLjcwNTA3OCBDIDI1LjMwODgzNiAxNS4xMzIyNDIgMjYuNTk3NzEgMTguNDU5NTgzIDI2LjkzNTU0NyAyMS45OTAyMzQgQyAyNi45ODgzMDYgMjIuMDA4NDUxIDI2Ljk5NzM3MiAyMS45MTAyMzMgMjcgMjEuNjUyMzQ0IEMgMjYuNzY3NjU0IDE3Ljg3NjU3NiAyNS40NzM2MTcgMTQuMjg0MDI2IDIyLjY3MzgyOCAxMS43MDUwNzggQyAyMi4yMDAyMjkgMTEuMjg2MTU2IDIwLjgwOTE1MiAxMC4yNjMxNDggMTkuNTgzOTg0IDkuNDMzNTkzOCBDIDE3Ljc5ODk0NSA4LjIyNDk0OTkgMTcuMzg3Nzk5IDcuOTgyOTMyMSAxNi44NzY5NTMgOCB6IE0gMTguOTA4MjAzIDE1LjAyOTI5NyBDIDE4LjY3Njk3NyAxNS4xMDcxNjggMTguNTgwODI0IDE1LjI3NDcwMiAxOC42NzE4NzUgMTUuNjY3OTY5IEMgMTkuNDMzNTU1IDE2LjY4MDAzNyAxOS44NjA3ODIgMTcuOTU2MDIgMTkuOTYyODkxIDE5LjExMTMyOCBDIDIwLjA3OTg4NiAxNy44NjgyMTQgMTkuNzI1MDk2IDE2LjI5ODUzMiAxOC45MDgyMDMgMTUuMDI5Mjk3IHogTSAxMS42MTEzMjggMTYuODUxNTYyIEMgMTEuNTY4MTA2IDE3LjA0MzYzMyAxMS41NDYyMzkgMTcuMjU5ODE5IDExLjU1NjY0MSAxNy41IEMgMTEuNjAwMzg0IDE4LjUwOTU3MyAxMS45NzM4NjIgMTkuMzA4NjA0IDEzLjk5ODA0NyAyMS41NTY2NDEgQyAxNC42MjU0ODEgMjIuMjUzNDY0IDE1LjQzMjMxMyAyMy4yNDg5ODMgMTYuMTA3NDIyIDI0LjEyNjk1MyBDIDE2LjUzNDg4NiAyNC40MTg5NzYgMTcuMzYyMDgxIDI1IDE3LjM3ODkwNiAyNSBDIDE3LjU4ODU4NyAyNSAxNS4zNTI0NjIgMjIuMDYwODQzIDEzLjk5ODA0NyAyMC41NTY2NDEgQyAxMi4yMTM1NzkgMTguNTc0ODMgMTEuNzM1MDggMTcuNzE4MTk5IDExLjYxMTMyOCAxNi44NTE1NjIgeiIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"astromenace\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"astromenace.desktop\"\nLABEL oc.launch=\"Astromenace.Astromenace\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"astromenace\"\nLABEL oc.displayname=\"astromenace\"\nLABEL oc.path=\"/usr/games/AstroMenace\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"astromenace\"\nENV APPBIN \"/usr/games/AstroMenace\"\nENV APP \"/usr/games/AstroMenace\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/astromenace/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/astromenace/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/astromenace/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/astromenace/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_base.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzk1MGJhOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjNTU3YmMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjciIHkyPSI1NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjhkMmZjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0NS41MDEiIHgyPSI0NS41MDEiIHkxPSI3LjEwNTUiIHkyPSIyOS44OTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlZWJmNyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2U3ZjkiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzUiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSIzOC4wNjYiIGN5PSIyNi4xOTIiIHI9IjI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0uOCAzZS04IC0xLjkyNjVlLTggLS45NDAzNCA4MC40NTMgMzguNjI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWUzNTNjIiBzdG9wLW9wYWNpdHk9Ii40ODUzOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxOTE5MTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI1MjUuNDQiIHgyPSI1MTYuNjYiIHkxPSI4MzYuMTkiIHkyPSI4MjguNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc4OTMgMCAwIDEuMDAwNyAtMTcxLjQxIC03NDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZGM4NWU5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2YyY2JmOCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI1MjUuNDQiIHgyPSI1MTYuNjYiIHkxPSI4MzYuMTkiIHkyPSI4MjguNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc4OTMgMCAwIDEuMDAwNyA3NTUuNiAtMTY5OC43KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iNTI1LjQ0IiB4Mj0iNTE2LjY2IiB5MT0iODM2LjE5IiB5Mj0iODI4LjUiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyNS41IC0xNzAyLjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSI1MjAuNTkiIHgyPSI1MTYuMTUiIHkxPSI3MzUuMDUiIHkyPSI3MjAuODYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDU4MTA4IiB5PSItLjA2MjAxNyIgd2lkdGg9IjEuMTE2MiIgaGVpZ2h0PSIxLjEyNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41NDYyMzg3NCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8ZyBzdHJva2Utd2lkdGg9Ii44MzM1MiI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyIDAgMCAxLjIwMDIgLTM4MC41MyAtNzEuNjU2KSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI20pIiBvcGFjaXR5PSIuMjUiIHN0cm9rZT0iIzAwMCI+CiAgIDxwYXRoIGQ9Im0zMzIuNzQgOTAuMTA1djQuMDAyOWMwIDEuOTM0NCA1LjA0MDIgMy41MDI2IDExLjI1OCAzLjUwMjYgNi4yMTc0IDAgMTEuMjU4LTEuNTY4MSAxMS4yNTgtMy41MDI2di00LjAwMjl6IiBjb2xvcj0iIzAwMDAwMCIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTI3IDk1My45OSkiPgogICAgPHBhdGggZD0ibTEyNTkuNy04NjguNTd2NC4wMDNjMCAxLjkzNDQgNS4wNDAyIDMuNTAyNSAxMS4yNTggMy41MDI1IDYuMjE3NCAwIDExLjI1OC0xLjU2ODEgMTEuMjU4LTMuNTAyNXYtNC4wMDN6IiBjb2xvcj0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIuODMzNTIiLz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC45Nzg5MyAwIDAgMS4wMDA3IDg3OC40NSAuMzc3NTQpIj4KICAgICA8cGF0aCBkPSJtMzg5LjUtODcyLjk2djRjMCAxLjkzMyA1LjE0ODcgMy41IDExLjUgMy41czExLjUtMS41NjcgMTEuNS0zLjV2LTR6IiBjb2xvcj0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIuODQyMTQiLz4KICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguNTEyNTQgMCAwIC42MTUzOCAxMzQuNjQgLTEzMjMuMikiIGN4PSI1MTkuNjkiIGN5PSI3MzAuMzEiIHJ4PSIyMi40MzgiIHJ5PSI1LjY4NzUiIGNvbG9yPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDk5NSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTk5MiAwIDAgMS4yMDAyIC0zODAuNTMgLTcxLjY1NikiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIHN0cm9rZT0iIzhlMDNhMyI+CiAgIDxwYXRoIGQ9Im0zMzIuNzQgOTAuMTA1djQuMDAyOWMwIDEuOTM0NCA1LjA0MDIgMy41MDI2IDExLjI1OCAzLjUwMjYgNi4yMTc0IDAgMTEuMjU4LTEuNTY4MSAxMS4yNTgtMy41MDI2di00LjAwMjl6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNsKSIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTI3IDk1My45OSkiPgogICAgPHBhdGggZD0ibTEyNTkuNy04NjguNTd2NC4wMDNjMCAxLjkzNDQgNS4wNDAyIDMuNTAyNSAxMS4yNTggMy41MDI1IDYuMjE3NCAwIDExLjI1OC0xLjU2ODEgMTEuMjU4LTMuNTAyNXYtNC4wMDN6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNqKSIgc3Ryb2tlLXdpZHRoPSIuODMzNTIiLz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC45Nzg5MyAwIDAgMS4wMDA3IDg3OC40NSAuMzc3NTQpIj4KICAgICA8cGF0aCBkPSJtMzg5LjUtODcyLjk2djRjMCAxLjkzMyA1LjE0ODcgMy41IDExLjUgMy41czExLjUtMS41NjcgMTEuNS0zLjV2LTR6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlLXdpZHRoPSIuODQyMTQiLz4KICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguNTEyNTQgMCAwIC42MTUzOCAxMzQuNjQgLTEzMjMuMikiIGN4PSI1MTkuNjkiIGN5PSI3MzAuMzEiIHJ4PSIyMi40MzgiIHJ5PSI1LjY4NzUiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2gpIiBzdHJva2Utd2lkdGg9IjEuNDk5NSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"base,libreoffice,office\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"libreoffice-base.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-base\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--base\"\nLABEL oc.name=\"base\"\nLABEL oc.displayname=\"Base\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.database;application/vnd.sun.xml.base;\"\nLABEL oc.fileextensions=\"odb\"\nLABEL oc.legacyfileextensions=\"odb\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"base\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--base\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/base/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/base/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/base/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f base.d -t base .\n
"},{"location":"applications/base/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect base > base.json\ndocker image save base -o base.tar\nctr -n k8s.io images import base.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @base.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 && apt-get clean\nRUN curl -Ls https://deb.beekeeperstudio.io/beekeeper.key | apt-key add -\nRUN echo \"deb https://deb.beekeeperstudio.io stable main\" | tee /etc/apt/sources.list.d/beekeeper-studio-app.list\nRUN apt-get update && apt-get install --no-install-recommends --yes beekeeper-studio libxshmfence1 && apt-get clean\nRUN mv \"/opt/Beekeeper Studio/\" /opt/Beekeeper-Studio\nENV ELECTRON_ENABLE_LOGGING=true\nENV QT_X11_NO_MITSHM=1\nLABEL oc.icon=\"beekeeper-studio.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDEzMi44IDE0Ni4yIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMzIuOCAxNDYuMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNGQUQ4M0I7fQo8L3N0eWxlPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjEuMywyOC4yTDc3LjcsMy4xQzcwLjYtMSw2MS45LTEsNTQuOSwzLjFMNDMuNSw5LjdWMzl2Ni43djI3LjVjMCw4LjEsNC4zLDE1LjcsMTEuNCwxOS44CgkJCWMzLjUsMiw3LjUsMy4xLDExLjQsMy4xczcuOS0xLDExLjQtMy4xbDAsMGM3LjEtNC4xLDExLjQtMTEuNiwxMS40LTE5LjhjMC04LjEtNC4zLTE1LjctMTEuNC0xOS44bDAsMGMtMy41LTItNy41LTMuMS0xMS40LTMuMQoJCQlWMzZjMy45LDAsNy45LDEsMTEuNCwzLjFsMTIuNCw3LjJjNy4xLDQuMSwxMS40LDExLjYsMTEuNCwxOS44djE0LjNjMCw4LjEtNC4zLDE1LjctMTEuNCwxOS44bC0xMi40LDcuMmMtMy41LDItNy41LDMuMS0xMS40LDMuMQoJCQlzLTcuOS0xLTExLjQtMy4xbC0xMi40LTcuMmMtNy4xLTQuMS0xMS40LTExLjYtMTEuNC0xOS44di03LjJWNjZWNDcuNVYxNi44TDExLjQsMjguMkM0LjMsMzIuMywwLDM5LjgsMCw0OHY1MC4zCgkJCWMwLDguMSw0LjMsMTUuNywxMS40LDE5LjhMNTUsMTQzLjJjNy4xLDQuMSwxNS44LDQuMSwyMi44LDBsNDMuNi0yNS4xYzcuMS00LjEsMTEuNC0xMS42LDExLjQtMTkuOFY0OAoJCQlDMTMyLjcsMzkuOCwxMjguMywzMi4zLDEyMS4zLDI4LjJ6IE01Mi4zLDU1LjJjLTEuMywxLTIuNCwyLjEtMy40LDMuM3YtMTZsMy40LTJWNTUuMnogTTYxLDUxYy0xLjIsMC4zLTIuMywwLjYtMy40LDEuMVYzNy43CgkJCWMxLjEtMC41LDIuMy0wLjgsMy40LTEuMVY1MXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"beekeeperstudio,database,sql,mysql,postgres,sqllite,db,sqlserver,query,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"beekeeper-studio.desktop\"\nLABEL oc.launch=\"beekeeper-studio.beekeeper-studio\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--no-sandbox\"\nLABEL oc.name=\"beekeeperstudio\"\nLABEL oc.displayname=\"Beekeeper-studio\"\nLABEL oc.path=\"/opt/Beekeeper-Studio/beekeeper-studio\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"sql\"\nLABEL oc.legacyfileextensions=\"sql\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"shm_size\\\":\\\"2G\\\",\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"beekeeperstudio\"\nENV APPBIN \"/opt/Beekeeper-Studio/beekeeper-studio\"\nLABEL oc.args=\"--no-sandbox\"\nENV APP \"/opt/Beekeeper-Studio/beekeeper-studio\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/beekeeperstudio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/beekeeperstudio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/beekeeperstudio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/beekeeperstudio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update blender mesa-dri-gallium\nLABEL oc.icon=\"circle_blender.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMDEuODEiIHgyPSIxMDEuODEiIHkxPSItMTYuNTc4IiB5Mj0iMjQyLjcyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQuNzgxMiAwIDAgNC43ODEyIDMzLjg3NSA2Mi4yMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYmI1MjEiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjE1ZjE5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjUyMCIgeDI9IjUyMCIgeTE9IjMyLjM2MiIgeTI9IjEwNTIuNCIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg1LjQzNzIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI1MjAiIHgyPSI1MjAiIHkxPSIyNTIuMzYiIHkyPSI3MTIuMzYiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTc1Ljk5MyAtMTIyLjk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTk3Y2YxIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIxYzlmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI2Ny4wMjQiIHgyPSIxMDIuOTEiIHkxPSIyODMuOTEiIHkyPSI1ODEuNzYiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQuNjQxIDIuNjc5NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlOGViZWMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmRmZWZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2MzI0IiB5PSItLjAzNTY4MiIgd2lkdGg9IjEuMDcyNiIgaGVpZ2h0PSIxLjA3MTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjExLjYyMzYzNyIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4zNDM3NDkiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjI3NDUgMCAwIC4wNjI3NDUgLS4xMjU0OSA5ODYuNDYpIiBzdHJva2Utd2lkdGg9IjE1LjkzOCI+CiAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU0MC4zNiIgcj0iNDc4LjEyIiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2YpIiBvcGFjaXR5PSIuMjUiLz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSI0NzguMTIiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTApIiBmaWxsPSIjMTQxNDE0IiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9IjI1NCI+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSgtMzApIiBjeD0iMTY4LjU4IiBjeT0iNDYwLjI1IiByeD0iMTgzLjMxIiByeT0iMTYwLjE5IiBvcGFjaXR5PSIxIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICAgPGNpcmNsZSBjeD0iNTEyLjAxIiBjeT0iNTQ1Ljg1IiByPSIzODQiIG9wYWNpdHk9IjEiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiAgICA8Y2lyY2xlIGN4PSI0MDEuMzIiIGN5PSIzNDYuNzUiIHI9IjEyOCIgb3BhY2l0eT0iMSIgc3Ryb2tlPSIjZjBmMGYwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjE3LjY3NSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPC9nPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjkzOCI+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSgtMzApIiBjeD0iMTY4LjU4IiBjeT0iNDYwLjI1IiByeD0iMTgzLjMxIiByeT0iMTYwLjE5IiBmaWxsPSJ1cmwoI2MpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICAgPGNpcmNsZSBjeD0iNTEyLjAxIiBjeT0iNTQ1Ljg1IiByPSIzODQiIGZpbGw9InVybCgjZSkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiAgICA8Y2lyY2xlIGN4PSI0NDEuMzIiIGN5PSI0MjYuNzUiIHI9IjEyOCIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlPSIjZjBmMGYwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjE3LjY3NSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"blender,blender,modeler\"\nLABEL oc.cat=\"utilities,graphics\"\nLABEL oc.desktopfile=\"blender.desktop\"\nLABEL oc.launch=\"Blender.Blender\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"blender\"\nLABEL oc.displayname=\"Blender\"\nLABEL oc.path=\"/usr/bin/blender\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-blender\"\nLABEL oc.fileextensions=\"blend,obj,fbx,3ds,ply,stl\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"blender\"\nENV APPBIN \"/usr/bin/blender\"\nENV APP \"/usr/bin/blender\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/blender/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/blender/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/blender/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/blender/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends bless && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_bless.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYmciIHgxPSIyNS4wMDQiIHgyPSIyNS4wMDQiIHkxPSI1LjIxNTgiIHkyPSI0NS4xMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyAuNjk1NjUgLjY5NTY1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYzdjN2M3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y2ZjZmNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMTgyIiB4PSItLjEyMjczIiB5PSItLjA5NjQyOSIgd2lkdGg9IjEuMjQ1NSIgaGVpZ2h0PSIxLjE5MjkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTI1MDAwMSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEzOTkiIHg9Ii0uMDI3IiB5PSItLjAyNyIgd2lkdGg9IjEuMDU0IiBoZWlnaHQ9IjEuMDU0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjUxNzUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODg4IiB4MT0iMjEuNTE3IiB4Mj0iNDkuMTUzIiB5MT0iMzguMjE2IiB5Mj0iMzguMjE2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMTNmNDciIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3NTUyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk3MCIgeD0iLS4wNTQ5NzIiIHk9Ii0uMTE3OTkiIHdpZHRoPSIxLjEwOTkiIGhlaWdodD0iMS4yMzYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzI2MzkzNyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5ODAiIHgxPSIzNS41MzUiIHgyPSIyNS44NSIgeTE9IjIwLjgwMyIgeTI9IjE0Ljc0OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjODc4Nzg3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg3ODc4NyIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyAuNjk1NjUgLjY5NTY1KSIgY3g9IjI0IiBjeT0iMjQuNzY3IiByPSIyMyIgZmlsbD0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEzOTkpIiBvcGFjaXR5PSIuMTUiLz4KIDxjaXJjbGUgY3g9IjMxLjk5OSIgY3k9IjMxLjk5OSIgcj0iMjkuOTk5IiBmaWxsPSJ1cmwoI2JnKSIgc3Ryb2tlLXdpZHRoPSIxLjMwNDMiLz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuNDU0NSAwIDAgMS40NTQ1IC0zLjIxMDMgLTEuNzgzNCkiIGQ9Im0xOCAxMGMwIDUgMiA4IDYgMTFsLTkgMWMwIDIuMjE2IDEuNzg0IDQgNCA0aDF2LTNoM3YyaC0xdjFoM2wtNyA4LjVjLTAuMDAyMiAxLjkzMyAxLjU2NyAzLjUwMiAzLjUgMy41IDAuOTI3MDItOS43ZS00IDEuODQ2MS0wLjM0Mjg3IDIuNS0xbDEyLTEyYzAuNjU3MTItMC42NTM4NyAwLjk5ODk1LTEuNTczIDEtMi41IDAuMDAyMi0xLjkzMy0xLjU2Ny0zLjUwMi0zLjUtMy41LTAuNjE0OTcgNi40M2UtNCAtMS4yMjQ5IDAuMTU0MDUtMS43NTc4IDAuNDQ3Mjd6IiBmaWx0ZXI9InVybCgjZmlsdGVyMTE4MikiIG9wYWNpdHk9Ii4xIi8+CiA8cGF0aCBkPSJtMTcuMTUzIDI3LjMwN3YxLjQ1NDVjMCAzLjIyMzIgMi41OTQ5IDUuODE4MSA1LjgxODEgNS44MTgxaDEuNDU0NXYtNC4zNjM2aDQuMzYzNmMwLjgwNTgxIDAgMS40NTQ1IDAuNjQ4NzIgMS40NTQ1IDEuNDU0NXMtMC42NDg3MiAxLjQ1NDUtMS40NTQ1IDEuNDU0NWgtMS40NTQ1djEuNDU0NWgxMS42MzZsNS44MTgxLTcuMjcyNnoiIGZpbGw9IiNmMmYyZjIiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjkuODc3IDI3LjMwN2MwLjU3MzIgMC40ODc0MyAxLjE3NjQgMC45NzEwNiAxLjgyMTEgMS40NTQ1bDcuNzc4NCA1LjE4NDcgNC42NTA2LTYuNjM5MnoiIGZpbHRlcj0idXJsKCNmaWx0ZXI5NzApIiBvcGFjaXR5PSIuMSIgc3Ryb2tlLXdpZHRoPSIxLjQ1NDUiLz4KIDxwYXRoIGQ9Im0yMS41MTcgMTEuMzA3IDIzLjI3MiAxNi01LjgxODEgNS44MTgxLTguNzI3Mi01LjgxODFjLTUuODE4MS00LjM2MzYtOC43MjcyLTguNzI3Mi04LjcyNzItMTZ6IiBmaWxsPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjEuNDU0NSIvPgogPHBhdGggZD0ibTQ0LjA2MiAyNC4zOThjLTEuMzQ4NCAwLjAwMTQtMi42ODUyIDAuNDk4NzEtMy42MzYzIDEuNDU0NWwtMTcuNDU0IDE3LjQ1NGMtMC45NTU4IDAuOTUxMTQtMS40NTMgMi4yODgtMS40NTQ1IDMuNjM2My0wLjAwMzIgMi44MTE2IDIuMjc5MiA1LjA5MzggNS4wOTA4IDUuMDkwOCAxLjM0ODQtMC4wMDE0IDIuNjg1Mi0wLjQ5ODcxIDMuNjM2My0xLjQ1NDVsMTcuNDU0LTE3LjQ1NGMwLjk1NTgtMC45NTEwNyAxLjQ1My0yLjI4OCAxLjQ1NDUtMy42MzYzIDAuMDAzMi0yLjgxMTYtMi4yNzkyLTUuMDkzOC01LjA5MDgtNS4wOTA4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg4OCkiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjcuMzM1IDQxLjg1Mi0wLjcyNzI2IDAuNzI3MjYgMS4wOTA5IDEuMDkwOS0wLjcyNzI2IDAuNzI3MjYtMS4wOTA5LTEuMDkwOS0wLjcyNzI2IDAuNzI3MjYgMS4wOTA5IDEuMDkwOS0xLjA5MDkgMS4wOTA5IDAuNzI3MjYgMC43MjcyNiAxLjA5MDktMS4wOTA5IDAuNzI3MjYgMC43MjcyNi0xLjA5MDkgMS4wOTA5IDAuNzI3MjYgMC43MjcyNiAxLjA5MDktMS4wOTA5IDEuMDkwOSAxLjA5MDkgMC43MjcyNi0wLjcyNzI2LTEuMDkwOS0xLjA5MDkgMC43MjcyNi0wLjcyNzI2IDEuMDkwOSAxLjA5MDkgMC43MjcyNi0wLjcyNzI2LTEuMDkwOS0xLjA5MDkgMS4wOTA5LTEuMDkwOS0wLjcyNzI2LTAuNzI3MjYtMS4wOTA5IDEuMDkwOS0wLjcyNzI2LTAuNzI3MjYgMS4wOTA5LTEuMDkwOS0wLjcyNzI2LTAuNzI3MjYtMS4wOTA5IDEuMDkwOXptMS4wOTA5IDIuNTQ1NCAwLjcyNzI2IDAuNzI3MjYtMC43MjcyNiAwLjcyNzI2LTAuNzI3MjYtMC43MjcyNnoiIGZpbGw9IiNmOWY5ZjkiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjUuODggMTUuNzYxdjEuNDU0NWw4LjcyNzIgNS45OTk5di0xLjQ1NDV6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTgwKSIgc3Ryb2tlLXdpZHRoPSIxLjQ1NDUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"bless,hexa,decimal\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"bless.desktop\"\nLABEL oc.launch=\"bless.Bless\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"Bless\"\nLABEL oc.displayname=\"Bless\"\nLABEL oc.path=\"/usr/bin/bless\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Bless\"\nENV APPBIN \"/usr/bin/bless\"\nENV APP \"/usr/bin/bless\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/bless/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/bless/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/bless/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/bless/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends blobby && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"blobby.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGZpbGw9IiNGRjAwNjYiIGQ9Ik0zNy45LDIyLjRDMjQuOCw0NC42LC0yNyw0NSwtMzkuNywyM0MtNTIuNCwxLC0yNi4yLC00My40LC0wLjQsLTQzLjZDMjUuNSwtNDMuOCw1MSwwLjIsMzcuOSwyMi40WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwIDEwMCkiIC8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"blobby,game\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"blobby.desktop\"\nLABEL oc.launch=\"blobby.blobby\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"blobby\"\nLABEL oc.displayname=\"blobby\"\nLABEL oc.path=\"/usr/games/blobby\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"blobby\"\nENV APPBIN \"/usr/games/blobby\"\nENV APP \"/usr/games/blobby\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/blobby/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/blobby/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/blobby/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/blobby/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-boxes sudo\nLABEL oc.icon=\"org.gnome.Boxes.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4wIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iLjQiIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNmY1ZjQiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCB4bGluazpocmVmPSIjYSIgaWQ9ImkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQgMCAwIDQgLTQ5Mi43OTkgLTY0MS45NTIpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iaCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNCAwIDAgNCAtNDkyLjc5OSAtNjgxLjk1MikiIGN4PSIxMzQuMiIgY3k9IjIyMi45ODgiIGZ4PSIxMzQuMiIgZnk9IjIyMi45ODgiIHI9IjIiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJnIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2IDAgMCA2IC03ODUuMTk4IC0xMDY1LjkyOCkiIGN4PSIxMzQuMiIgY3k9IjIyMi45ODgiIGZ4PSIxMzQuMiIgZnk9IjIyMi45ODgiIHI9IjIiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJmIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2IDAgMCA2IC03ODUuMTk4IC0xMTUzLjkyOCkiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJlIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg0IDAgMCA0IC00NTIuNzk5IC02ODEuOTUyKSIgY3g9IjEzNC4yIiBjeT0iMjIyLjk4OCIgZng9IjEzNC4yIiBmeT0iMjIyLjk4OCIgcj0iMiIvPjxyYWRpYWxHcmFkaWVudCB4bGluazpocmVmPSIjYSIgaWQ9ImQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQgMCAwIDQgLTQ1Mi43OTkgLTY0MS45NTIpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iYyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNiAwIDAgNiAtNjk3LjE5OCAtMTA2NS45MjgpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iYiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNiAwIDAgNiAtNjk3LjE5OCAtMTE1My45MjgpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PC9kZWZzPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTE3MikiPjxwYXRoIHN0eWxlPSJsaW5lLWhlaWdodDpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lO3RleHQtZGVjb3JhdGlvbi1zdHlsZTpzb2xpZDt0ZXh0LWRlY29yYXRpb24tY29sb3I6IzAwMDt0ZXh0LXRyYW5zZm9ybTpub25lO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7d2hpdGUtc3BhY2U6bm9ybWFsO3NoYXBlLXBhZGRpbmc6MDtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjE7bWFya2VyOm5vbmUiIGQ9Ik0yMi4zNTIgMTk0LjM1Mmg4Mi42ODd2ODIuNjg3SDIyLjM1MnoiIGNvbG9yPSIjMDAwIiBmb250LXdlaWdodD0iNDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9Im5vbmUiLz48ZyBjb2xvcj0iIzAwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZjZmNWY0IiBzdHJva2Utd2lkdGg9IjgiPjxwYXRoIHN0eWxlPSJtYXJrZXI6bm9uZSIgZD0iTTg0IDI1NmwyNCAyNE04NCAyMTZsMjQtMjRNNDQgMjU2bC0yNCAyNE00NCAyMTZsLTI0LTI0TTQ0IDIxNmg0MHY0MEg0NHoiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgZD0iTTIwIDE5Mmg4OHY4OEgyMHoiLz48L2c+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNOTguNSAxOTR2MmgtNjl2LTJ6Ii8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBkPSJNMTIwIDE5MmMwIDYuNjI3LTUuMzczIDEyLTEyIDEyLTEuODUgMC0zLjIyMi0uMDk1LTUuMTY1LTEuMTY2LTEuMDkyLTEuNzI2LTMuNTUtNC41ODQtNS42NjgtNS42NjZDOTYuMDk2IDE5NS4yMjQgOTYgMTkzLjg1IDk2IDE5MmMwLTYuNjI3IDUuMzczLTEyIDEyLTEyczEyIDUuMzczIDEyIDEyeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNMTEwIDIwM2gydjY5aC0yeiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMTA4IiBjeT0iMjgwIiByPSIxMiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNzkgMjU4djJINDl2LTJ6TTk5LjYwNCAyNzQuNDI1bC0xLjQxNCAxLjQxNS0xNS0xNSAxLjQxNS0xLjQxNXpNMTAzLjA1OCAxOTkuNzkzbDEuNDE0IDEuNDE0LTE1IDE1LTEuNDE0LTEuNDE0eiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMTA4IiBjeT0iMTkwIiByPSIxMiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNODYgMjIyaDJ2MjZoLTJ6TTc5IDIxOHYySDQ5di0yeiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iODQiIGN5PSIyMTYiIHI9IjgiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2Q1ZDNjZiIvPjxwYXRoIHN0eWxlPSJtYXJrZXI6bm9uZSIgZmlsbD0iI2Q1ZDNjZiIgZD0iTTk4LjUgMjgydjJoLTY5di0yeiIvPjxjaXJjbGUgcj0iMTIiIGN5PSIyNzgiIGN4PSIxMDgiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBkPSJNOTIgMjU2YzAgLjY2NiAwIDEtLjIzNSAxLjkzMi0xLjE2NS41OS00Ljc2NSA0LjU0Mi01Ljc4NyA1LjgyMi0uNTAyLjI0Ni0xLjI5NS4yNDYtMS45NzguMjQ2YTggOCAwIDEgMSA4LTh6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNkNWQzY2YiLz48Y2lyY2xlIHN0eWxlPSJtYXJrZXI6bm9uZSIgY3g9Ijg0IiBjeT0iMjU0IiByPSI4IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZCkiLz48Y2lyY2xlIHI9IjgiIGN5PSIyMTQiIGN4PSI4NCIgc3R5bGU9Im1hcmtlcjpub25lIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZSkiLz48cGF0aCBzdHlsZT0ibWFya2VyOm5vbmUiIGZpbGw9IiNkNWQzY2YiIGQ9Ik0yMiAyMDNoMnY2OWgtMnoiLz48Y2lyY2xlIHI9IjEyIiBjeT0iMjgwIiBjeD0iMjAiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNDYgMjIyaDJ2MjZoLTJ6Ii8+PGNpcmNsZSByPSI4IiBjeT0iMjE2IiBjeD0iNDQiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNDMuNTg2IDI1OS41ODZMNDUgMjYxbC0xNSAxNS0xLjQxNC0xLjQxNHoiLz48cGF0aCBkPSJNNy45MTIgMTkyYzAgNi42MjcgNS4zNzIgMTIgMTIgMTIgMS44NDkgMCAzLjIyMi0uMDk1IDUuMTY1LTEuMTY2IDEuMDkyLTEuNzI2IDMuNTUtNC41ODQgNS42NjgtNS42NjYgMS4wNzEtMS45NDQgMS4xNjctMy4zMTggMS4xNjctNS4xNjggMC02LjYyNy01LjM3My0xMi0xMi0xMi02LjYyOCAwLTEyIDUuMzczLTEyIDEyeiIgc3R5bGU9Im1hcmtlcjpub25lIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNkNWQzY2YiLz48cGF0aCBzdHlsZT0ibWFya2VyOm5vbmUiIGZpbGw9IiNkNWQzY2YiIGQ9Ik00MC4wNzcgMjE0Ljk1M2wtMS40MTQgMS40MTUtMTUtMTUgMS40MTUtMS40MTR6Ii8+PGNpcmNsZSByPSIxMiIgY3k9IjE5MCIgY3g9IjIwIiBzdHlsZT0ibWFya2VyOm5vbmUiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0idXJsKCNmKSIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMjAiIGN5PSIyNzgiIHI9IjEyIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZykiLz48Y2lyY2xlIHN0eWxlPSJtYXJrZXI6bm9uZSIgY3g9IjQ0IiBjeT0iMjE0IiByPSI4IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjaCkiLz48cGF0aCBkPSJNMzYgMjU2YzAgLjY2NiAwIDEgLjIzNSAxLjkzMiAxLjE2NS41OSA0Ljc2NSA0LjU0MiA1Ljc4NyA1LjgyMi41MDIuMjQ2IDEuMjk1LjI0NiAxLjk3OC4yNDZhOCA4IDAgMSAwLTgtOHoiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PGNpcmNsZSByPSI4IiBjeT0iMjU0IiBjeD0iNDQiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2kpIi8+PC9nPjwvc3ZnPg==\"\nLABEL oc.keyword=\"boxes,boxes,vm\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Boxes.desktop\"\nLABEL oc.launch=\"gnome-boxes.Gnome-boxes\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"boxes\"\nLABEL oc.displayname=\"Gnome-boxes\"\nLABEL oc.path=\"/usr/bin/gnome-boxes\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application-x-cd-image;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"boxes\"\nENV APPBIN \"/usr/bin/gnome-boxes\"\nENV APP \"/usr/bin/gnome-boxes\"\nLABEL oc.securitycontext={\"allowPrivilegeEscalation\":true,\"capabilities\":{\"add\":[\"NET_ADMIN\",\"CAP_SYS_ADMIN\"]}}\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/boxes/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/boxes/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/boxes/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/boxes/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN curl -Ls -o /tmp/bracket.deb https://github.com/adobe/brackets/releases/download/release-1.14.1/Brackets.Release.1.14.1.64-bit.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libatk-bridge2.0-0 libx11-6 libxi6 libxxf86vm1 libxfixes3 libxrender1 libgl1 libnss3 qt5dxcb-plugin libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin libcurl3 libxss1 && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/bracket.deb && rm /tmp/bracket.deb && apt-get clean && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"circle_brackets.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI0MDguNTciIHgyPSI0MDguNTciIHkxPSI1MzUuMiIgeTI9IjUxMi40IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjI4IDAgMCAxLjIyOCAtNDY5LjcxIC02MTEuMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzJlMzQzNiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NTU3NTMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMzIuMDIiIHgyPSIzMi4wMiIgeTE9IjIuMDQzIiB5Mj0iNjIuMDQ1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMDY0ZDMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTRjNmZkIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNyIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2EpIi8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMjQiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMjQiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8L2c+CiA8cGF0aCBkPSJtMTggMTh2MjhoMTIuNzI3di02LjM2MzZoLTYuMzYzNnYtMTUuMjczaDYuMzYzNnYtNi4zNjM2aC02LjUwNXptMTUuMjczIDB2Ni4zNjM2aDYuMzYzNnYxNS4yNzNoLTYuMzYzNnY2LjM2MzZoMTIuNzI3di0yOGgtMTIuNzI3eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0xOCAxOHYyOGgxMi43Mjd2LTYuMzYzNmgtNi4zNjM2di0xNS4yNzNoNi4zNjM2di02LjM2MzZoLTYuNTA1em0xNS4yNzMgMHY2LjM2MzZoNi4zNjM2djE1LjI3M2gtNi4zNjM2djYuMzYzNmgxMi43Mjd2LTI4aC0xMi43Mjd6IiBmaWxsPSJ1cmwoI2QpIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"brackets,html,brackets\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"brackets.desktop\"\nLABEL oc.launch=\"brackets.Brackets\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nENV ARGS=\"--no-sandbox --disable-gpu\"\nLABEL oc.name=\"Brackets\"\nLABEL oc.displayname=\"Brackets\"\nLABEL oc.path=\"/opt/brackets/Brackets\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Brackets\"\nENV APPBIN \"/opt/brackets/Brackets\"\nLABEL oc.args=\"--no-sandbox --disable-gpu\"\nENV APP \"/opt/brackets/Brackets\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/brackets/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/brackets/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/brackets/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/brackets/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-calculator\nLABEL oc.icon=\"gnome_calculator.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjEyOHB4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgd2lkdGg9IjEyOHB4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjE5MjM1MSAwIDAgMC4yNSAyMi4wMDUyMTMgNTcuMDAwMDMxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMC4yNzYxNTYiIHgyPSI0MjYuMjc2MjE1IiB5MT0iMjU5Ljk5OTg3OCIgeTI9IjI1OS45OTk4NzgiPgogICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzlhOTk5NiIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC4wNTAyMTU2IiBzdG9wLWNvbG9yPSIjYzBiZmJjIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIwLjEwMDIwNCIgc3RvcC1jb2xvcj0iIzlhOTk5NiIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC45MDAwMjMiIHN0b3AtY29sb3I9IiM5YTk5OTYiLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuOTUwMDExIiBzdG9wLWNvbG9yPSIjYzBiZmJjIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOWE5OTk2Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHBhdGggZD0ibSAzMiAzNiBoIDY0IGMgNC40MTc5NjkgMCA4IDMuNTgyMDMxIDggOCB2IDY4IGMgMCA0LjQxNzk2OSAtMy41ODIwMzEgOCAtOCA4IGggLTY0IGMgLTQuNDE3OTY5IDAgLTggLTMuNTgyMDMxIC04IC04IHYgLTY4IGMgMCAtNC40MTc5NjkgMy41ODIwMzEgLTggOCAtOCB6IG0gMCAwIiBmaWxsPSJ1cmwoI2EpIi8+CiAgICA8cGF0aCBkPSJtIDMyIDggaCA2NCBjIDQuNDE3OTY5IDAgOCAzLjU4MjAzMSA4IDggdiA5MCBjIDAgNC40MTc5NjkgLTMuNTgyMDMxIDggLTggOCBoIC02NCBjIC00LjQxNzk2OSAwIC04IC0zLjU4MjAzMSAtOCAtOCB2IC05MCBjIDAgLTQuNDE3OTY5IDMuNTgyMDMxIC04IDggLTggeiBtIDAgMCIgZmlsbD0iI2RlZGRkYSIvPgogICAgPHBhdGggZD0ibSAzOCAxOCBoIDUyLjAzOTA2MiBjIDIuMjEwOTM4IDAgNCAxLjc4OTA2MiA0IDQgdiA2IGMgMCAyLjIxMDkzOCAtMS43ODkwNjIgNCAtNCA0IGggLTUyLjAzOTA2MiBjIC0yLjIxMDkzOCAwIC00IC0xLjc4OTA2MiAtNCAtNCB2IC02IGMgMCAtMi4yMTA5MzggMS43ODkwNjIgLTQgNCAtNCB6IG0gMCAwIiBmaWxsPSIjNzc3NjdiIi8+CiAgICA8cGF0aCBkPSJtIDM4IDM2IGggNTIuMDM5MDYyIGMgMi4yMTA5MzggMCA0IC0xLjc4OTA2MiA0IC00IHYgLTggYyAwIC0yLjIxMDkzOCAtMS43ODkwNjIgLTQgLTQgLTQgaCAtNTIuMDM5MDYyIGMgLTIuMjEwOTM4IDAgLTQgMS43ODkwNjIgLTQgNCB2IDggYyAwIDIuMjEwOTM4IDEuNzg5MDYyIDQgNCA0IHogbSAwIDAiIGZpbGw9IiM2ZmIxODIiLz4KICAgIDxwYXRoIGQ9Im0gMzQgNTEgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDQxIDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gNTcuMDExNzE5IDUxIHYgMiBjIDAgMy44Nzg5MDYgMy4xMjEwOTMgNyA3IDcgYyAzLjg3NSAwIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gODAgNTEgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDg3IDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gMzQgNzMgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDU3LjAxMTcxOSA3MyB2IDIgYyAwIDMuODc4OTA2IDMuMTIxMDkzIDcgNyA3IGMgMy44NzUgMCA3IC0zLjEyMTA5NCA3IC03IHYgLTIgeiBtIDAgMCIgZmlsbD0iIzNkMzg0NiIvPgogICAgPHBhdGggZD0ibSA0MSA2NiBjIDMuODY3MTg4IDAgNyAzLjEzMjgxMiA3IDcgcyAtMy4xMzI4MTIgNyAtNyA3IHMgLTcgLTMuMTMyODEyIC03IC03IHMgMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDY2IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gMzQgOTUgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDQxIDg4IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gNTcuMDExNzE5IDk1IHYgMiBjIDAgMy44Nzg5MDYgMy4xMjEwOTMgNyA3IDcgYyAzLjg3NSAwIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDg4IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gODcgODYgYyAzLjg2NzE4OCAwIDcgMy4xMzI4MTIgNyA3IHYgNCBjIDAgMy44NjcxODggLTMuMTMyODEyIDcgLTcgNyBzIC03IC0zLjEzMjgxMiAtNyAtNyB2IC00IGMgMCAtMy44NjcxODggMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjYzY0NjAwIi8+CiAgICA8cGF0aCBkPSJtIDg3IDY2IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyB2IDIyIGMgMCAzLjg2NzE4OCAtMy4xMzI4MTIgNyAtNyA3IHMgLTcgLTMuMTMyODEyIC03IC03IHYgLTIyIGMgMCAtMy44NjcxODggMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjZmY3ODAwIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"calculator,calculator\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Calculator.desktop\"\nLABEL oc.launch=\"gnome-calculator.gnome-calculator\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"calculator\"\nLABEL oc.displayname=\"calculator\"\nLABEL oc.path=\"/usr/bin/gnome-calculator\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"calculator\"\nENV APPBIN \"/usr/bin/gnome-calculator\"\nENV APP \"/usr/bin/gnome-calculator\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/calculator/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/calculator/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/calculator/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/calculator/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnuchess gnome-chess\nLABEL oc.icon=\"circle_chess.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnNDciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMjUiPgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMiIgc3RkRGV2aWF0aW9uPSIxNC4zNDM3NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMiIgeDI9IjMyIiB5MT0iMiIgeTI9IjYyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wNSIgc3RvcC1jb2xvcj0iIzFkMjEyMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wNyIgc3RvcC1jb2xvcj0iIzNlNDU0YSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MTQiIHg9Ii0uMDY2IiB5PSItLjA1NSIgd2lkdGg9IjEuMTMyIiBoZWlnaHQ9IjEuMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI5MTYiIHN0ZERldmlhdGlvbj0iMC42NDE2NjY2OCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlMjciIHRyYW5zZm9ybT0ibWF0cml4KC4wNjI3NDUgMCAwIC4wNjI3NDUgLS4xMjU0OSAtLjEyNTQ5KSIgY3g9IjUxMiIgY3k9IjUxMiIgcj0iNDc4LjEyIiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS45MzgiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiA8Y2lyY2xlIGlkPSJjaXJjbGUyOSIgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPHBhdGggaWQ9InBhdGg4NjQiIGQ9Im0yNC40OSAxOGMtMC4zNjUxNyAwLTAuNjYwMzMgMC4yODctMC42NjAzMyAwLjY1NTY3djUuNjg3NWMwIDAuMzY1MTcgMC4yOTE2NyAwLjY1NjgzIDAuNjYwMzMgMC42NTY4M2gwLjUwNjMzbC0xLjE2NjcgMS4xNjY3IDEuMTY2NyAxLjE2NjctMS4xNjMyIDEyLjgzM2MtMS4yOTM4IDAtMi4zMzIyIDEuMDM5NS0yLjMzMjIgMi4zMjg3IDAgMC40MjM1IDAuMTI3MTcgMC44MjAxNyAwLjMyMzE3IDEuMTY2N2wtMC4zMjQzMyAwLjAwNDYtMS4xNjY3IDIuMzMzNGgyMy4zMzNsLTEuMTY2Ny0yLjMzMzMtMC4zMjY2Ny0wLjAwNDZjMC4yMDA2Ny0wLjM0NjUgMC4zMjc4My0wLjc0MzE3IDAuMzI3ODMtMS4xNjY3IDAtMS4yOTM4LTEuMDQ1My0yLjMyODctMi4zMzQ1LTIuMzI4N2wtMS4xNjU1LTEyLjgzMyAxLjE2NjctMS4xNjY3LTEuMTY2Ny0xLjE2NjdoMC41MTFjMC4zNjg2NyAwIDAuNjYwMzMtMC4yODcgMC42NjAzMy0wLjY1Njgzdi01LjY4NzVjMC0wLjM2NTE3LTAuMjg3LTAuNjU1NjctMC42NjAzMy0wLjY1NTY3aC0xLjY3ODh2Mi4zMzMzaC0yLjMzMzN2LTIuMzMzM2gtMi4zMzMzdjIuMzMzM2gtMi4zMzMzdi0yLjMzMzRoLTIuMzMzM3YyLjMzMzNoLTIuMzMzM3YtMi4zMzMzIiBmaWx0ZXI9InVybCgjZmlsdGVyOTE0KSIgb3BhY2l0eT0iLjUiIHN0cm9rZS13aWR0aD0iMS4xNjY3Ii8+CiA8cGF0aCBpZD0icGF0aDI5IiBkPSJtMjQuNDkgMThjLTAuMzY1MTcgMC0wLjY2MDMzIDAuMjg3LTAuNjYwMzMgMC42NTU2N3Y1LjY4NzVjMCAwLjM2NTE3IDAuMjkxNjcgMC42NTY4MyAwLjY2MDMzIDAuNjU2ODNoMC41MDYzM2wtMS4xNjY3IDEuMTY2NyAxLjE2NjcgMS4xNjY3LTEuMTYzMiAxMi44MzNjLTEuMjkzOCAwLTIuMzMyMiAxLjAzOTUtMi4zMzIyIDIuMzI4NyAwIDAuNDIzNSAwLjEyNzE3IDAuODIwMTcgMC4zMjMxNyAxLjE2NjdsLTAuMzI0MzMgMC4wMDQ2LTEuMTY2NyAyLjMzMzRoMjMuMzMzbC0xLjE2NjctMi4zMzMzLTAuMzI2NjctMC4wMDQ2YzAuMjAwNjctMC4zNDY1IDAuMzI3ODMtMC43NDMxNyAwLjMyNzgzLTEuMTY2NyAwLTEuMjkzOC0xLjA0NTMtMi4zMjg3LTIuMzM0NS0yLjMyODdsLTEuMTY1NS0xMi44MzMgMS4xNjY3LTEuMTY2Ny0xLjE2NjctMS4xNjY3aDAuNTExYzAuMzY4NjcgMCAwLjY2MDMzLTAuMjg3IDAuNjYwMzMtMC42NTY4M3YtNS42ODc1YzAtMC4zNjUxNy0wLjI4Ny0wLjY1NTY3LTAuNjYwMzMtMC42NTU2N2gtMS42Nzg4djIuMzMzM2gtMi4zMzMzdi0yLjMzMzNoLTIuMzMzM3YyLjMzMzNoLTIuMzMzM3YtMi4zMzM0aC0yLjMzMzN2Mi4zMzMzaC0yLjMzMzN2LTIuMzMzMyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjE2NjciLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"chess,chess gnuchess\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Chess.desktop\"\nLABEL oc.launch=\"gnome-chess.gnome-chess\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"chess\"\nLABEL oc.displayname=\"chess\"\nLABEL oc.path=\"/usr/bin/gnome-chess\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-chess-pgn\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chess\"\nENV APPBIN \"/usr/bin/gnome-chess\"\nENV APP \"/usr/bin/gnome-chess\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chess/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chess/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chess/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chess/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl -Ls https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -\nRUN echo \"deb [arch=$(dpkg --print-architecture)] http://dl.google.com/linux/chrome/deb/ stable main\" | tee /etc/apt/sources.list.d/google-chrome.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y krb5-user fonts-noto fonts-roboto xfonts-100dpi fonts-ubuntu fonts-freefont-ttf dbus-x11 fonts-wine fonts-recommended google-chrome-stable && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_google-chrome.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSIxNy4xODciIHgyPSIxNy4xODciIHkxPSI0Ni43MzciIHkyPSIxOTkuOTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC43MDUgMCAwIDQuNzA1IDQxIDcwLjM2MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM1QzEzMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNEJEMzAiIG9mZnNldD0iLjM0ODMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMxQjIzMSIgb2Zmc2V0PSIuNjgwOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMkM5RjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9Ijk1Ljk3IiB4Mj0iOTUuOTciIHkxPSIyLjI5MjIiIHkyPSIxOTguNDQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS43MTkxIDAgMCAxLjcxOTEgMzQwLjA5IDM2OC40NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQ3QjlGRiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzRDhBRkYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTE0Ljc1IiB4Mj0iMTE0Ljc1IiB5MT0iNTYuNjgxIiB5Mj0iMTg4LjkzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuMSAwIDAgNS4xIDIgMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmY2UwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmJjMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMTAzLjY3IiB4Mj0iMTAzLjY3IiB5MT0iLTQuNjYyMyIgeTI9IjIwNi41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTY5OSAwIDAgMi4xNjk5IDI5NS4wMSAzMjMuMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI2LjUwOTc3ODkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI5Ny40MjUiIHgyPSI5Ny40MjUiIHkxPSItOS4wMDcxIiB5Mj0iMjA5Ljg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQuNzA1IDAgMCA0LjcwNSA0MSA0MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI0Y2NTAzQiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNGMjQ3MzUiIG9mZnNldD0iLjIxNzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI0U2MkYyNSIgb2Zmc2V0PSIuNTcxOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjRDQwOTBEIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xMTUiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCA5ODUuODgpIiBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1Ii8+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtODEzLjQxIDE1MS43NGMtOTYuNzI2IDIzLjAzMi01NTQuMTcgMTM2LjQ1LTMwMC4xNCAxNjMuOTEgMjgzLjA1IDMwLjYgMTc1LjMxIDMxNy40NyAxNzUuMzEgMzE3LjQ3bC0yMDcuMjYgMzQ4LjM3YTQ3MC41IDQ3MC41IDAgMCAwIDMwLjE2OCAxLjUwOTggNDcwLjUgNDcwLjUgMCAwIDAgNDcwLjUtNDcwLjUgNDcwLjUgNDcwLjUgMCAwIDAtMTY4LjU5LTM2MC43NnoiIGZpbGw9InVybCgjYykiLz4KICAgPGc+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDI4LjM2MikiIGQ9Im01MTEuNSA0MmE0NzAuNSA0NzAuNSAwIDAgMC0zOTQuNDUgMjE0LjgybDIxMC4zNSAzNTMuODRzLTUuNjMzOC0xNzAuNDUgOC40NTMxLTE4Ny4zNmMxNC4wODctMTYuOTA0IDgzLjExMy04MS43MDMgODMuMTEzLTgxLjcwM2w5NC4zODEtMjguMTc0LTUuMTA1NS0xOC4zMTIgNDE4LjcxLTIuNzUzOWE0NzAuNSA0NzAuNSAwIDAgMC00MTUuNDYtMjUwLjM2eiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYSkiLz4KICAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU1MC4zNiIgcj0iMjE2Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iIzExMSIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMiIvPgogICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSIyMTYuOTkiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1NDAuMzYiIHI9IjE3MS45MSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZCkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"chrome,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"google-chrome.desktop\"\nLABEL oc.launch=\"google-chrome.Google-chrome\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"chrome\"\nLABEL oc.displayname=\"Chrome\"\nLABEL oc.path=\"/usr/bin/google-chrome-stable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;video/webm;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chrome\"\nENV APPBIN \"/usr/bin/google-chrome-stable\"\nENV APP \"/usr/bin/google-chrome-stable\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chrome/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chrome/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chrome/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chrome/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update chromium\nLABEL oc.icon=\"circle_chromium.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI5NS45NyIgeDI9Ijk1Ljk3IiB5MT0iMi4yOTIyIiB5Mj0iMTk4LjQ0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNzE5MSAwIDAgMS43MTkxIDM0MC4wOSAzNjguNDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4ZGI2ZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNTlmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjExNC43NSIgeDI9IjExNC43NSIgeTE9IjU2LjY4MSIgeTI9IjE4OC45MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1LjEgMCAwIDUuMSAyIDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM3NmE3ZjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTJjMmY4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMy42NyIgeDI9IjEwMy42NyIgeTE9Ii00LjY2MjMiIHkyPSIyMDYuNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjE2OTkgMCAwIDIuMTY5OSAyOTUuMDEgMzIzLjM3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi41MDk3Nzg5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZiIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjExNSIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQxIiB4Mj0iOTgyIiB5MT0iNTQwLjg2IiB5Mj0iNTQwLjg2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2NDlhZjUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGI4YWY1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjExNy4wNSIgeDI9IjkyNi45NSIgeTE9IjMyNi4zMyIgeTI9IjMyNi4zMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjM2I2YmQ0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2OGJkZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCA5ODUuODgpIiBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1Ii8+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtODEzLjQxIDE1MS43NGMtOTYuNzI2IDIzLjAzMi01NTQuMTcgMTM2LjQ1LTMwMC4xNCAxNjMuOTEgMjgzLjA1IDMwLjYgMTc1LjMxIDMxNy40NyAxNzUuMzEgMzE3LjQ3bC0yMDcuMjYgMzQ4LjM3YTQ3MC41IDQ3MC41IDAgMCAwIDMwLjE2OCAxLjUwOTggNDcwLjUgNDcwLjUgMCAwIDAgNDcwLjUtNDcwLjUgNDcwLjUgNDcwLjUgMCAwIDAtMTY4LjU5LTM2MC43NnoiIGZpbGw9InVybCgjYykiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtNTExLjUgNDJhNDcwLjUgNDcwLjUgMCAwIDAtMzk0LjQ1IDIxNC44MmwyMTAuMzUgMzUzLjg0cy01LjYzMzgtMTcwLjQ1IDguNDUzMS0xODcuMzZjMTQuMDg3LTE2LjkwNCA4My4xMTMtODEuNzAzIDgzLjExMy04MS43MDNsOTQuMzgxLTI4LjE3NC01LjEwNTUtMTguMzEyIDQxOC43MS0yLjc1MzlhNDcwLjUgNDcwLjUgMCAwIDAtNDE1LjQ2LTI1MC4zNnoiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU1MC4zNiIgcj0iMjE2Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iIzExMSIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMiIvPgogICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1NDAuMzYiIHI9IjIxNi45OSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYikiLz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSIxNzEuOTEiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2QpIi8+CiAgPC9nPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"chromium,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"chromium-browser.desktop\"\nLABEL oc.launch=\"chromium.Chromium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"chromium\"\nLABEL oc.displayname=\"chromium (alpine)\"\nLABEL oc.path=\"/usr/bin/chromium-browser\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;video/webm;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chromium\"\nENV APPBIN \"/usr/bin/chromium-browser\"\nENV APP \"/usr/bin/chromium-browser\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chromium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chromium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chromium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chromium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libsecret-1-0 libpcsclite1 x11-utils libjpeg-turbo8 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"icaclient.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMSI+CiA8cmVjdCBzdHlsZT0ib3BhY2l0eTouMiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiB4PSItNTkiIHk9Ii02MCIgcng9IjI4IiByeT0iMjgiIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCwwLDApIi8+CiA8cmVjdCBzdHlsZT0iZmlsbDojNGY0ZjRmIiB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIHg9Ii01OCIgeT0iLTYwIiByeD0iMjgiIHJ5PSIyOCIgdHJhbnNmb3JtPSJtYXRyaXgoMCwtMSwtMSwwLDAsMCkiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5Oi4yIiBkPSJtMzIgMTFhMiAyIDAgMCAwIC0wLjE5MTQgMC4wMTE3MmMtMTAuOTMzMjI0IDAuMTA0NTM5LTE5LjgwODYgOS4wMzA5Ny0xOS44MDg2IDE5Ljk4ODI4IDAgMTEuMDIyMDA2IDguOTc3OTk0IDIwIDIwIDIwIDEwLjk1NDY3OCAwIDE5Ljg3OTUyNC04Ljg3MTE4IDE5Ljk4ODI4Mi0xOS44MDA3ODJhMiAyIDAgMCAwIDAuMDExNzE4IC0wLjE5OTIxOCAyIDIgMCAwIDAgLTIgLTIgMiAyIDAgMCAwIC0yIDJjMCA4Ljg2MDI0Ni03LjEzOTc1NCAxNi0xNiAxNnMtMTYtNy4xMzk3NTQtMTYtMTYgNy4xMzk3NTQtMTYgMTYtMTZhMiAyIDAgMCAwIDIgLTIgMiAyIDAgMCAwIC0yIC0yem0wIDhhMiAyIDAgMCAwIC0wLjE5MTQgMC4wMDc4Yy02LjUxNTM3NCAwLjEwNDEyNi0xMS44MDg2IDUuNDUzMDUyLTExLjgwODYgMTEuOTkyMiAwIDYuNjAzNzI4IDUuMzk2MjcyIDEyIDEyIDEyIDYuNTM2NDUyIDAgMTEuODc5ODgtNS4yODkxMTIgMTEuOTg4MjgyLTExLjgwMDc4MmEyIDIgMCAwIDAgMC4wMTE3MTggLTAuMTk5MjE4IDIgMiAwIDAgMCAtMiAtMiAyIDIgMCAwIDAgLTIgMmMwIDQuNDQxOTY4LTMuNTU4MDMyIDgtOCA4cy04LTMuNTU4MDMyLTgtOCAzLjU1ODAzMi04IDgtOGEyIDIgMCAwIDAgMiAtMiAyIDIgMCAwIDAgLTIgLTJ6bTAgOGE0IDQgMCAwIDAgLTQgNCA0IDQgMCAwIDAgNCA0IDQgNCAwIDAgMCA0IC00IDQgNCAwIDAgMCAtNCAtNHoiLz4KIDxwYXRoIHN0eWxlPSJmaWxsOiNmZmZmZmYiIGQ9Im0zMiAxMGEyIDIgMCAwIDAgLTAuMTkxNCAwLjAxMTcyYy0xMC45MzMyMjQgMC4xMDQ1MzktMTkuODA4NiA5LjAzMDk3LTE5LjgwODYgMTkuOTg4MjggMCAxMS4wMjIwMDYgOC45Nzc5OTQgMjAgMjAgMjAgMTAuOTU0Njc4IDAgMTkuODc5NTI0LTguODcxMTggMTkuOTg4MjgyLTE5LjgwMDc4MmEyIDIgMCAwIDAgMC4wMTE3MTggLTAuMTk5MjE4IDIgMiAwIDAgMCAtMiAtMiAyIDIgMCAwIDAgLTIgMmMwIDguODYwMjQ2LTcuMTM5NzU0IDE2LTE2IDE2cy0xNi03LjEzOTc1NC0xNi0xNiA3LjEzOTc1NC0xNiAxNi0xNmEyIDIgMCAwIDAgMiAtMiAyIDIgMCAwIDAgLTIgLTJ6bTAgOGEyIDIgMCAwIDAgLTAuMTkxNCAwLjAwNzhjLTYuNTE1Mzc0IDAuMTA0MTI2LTExLjgwODYgNS40NTMwNTItMTEuODA4NiAxMS45OTIyIDAgNi42MDM3MjggNS4zOTYyNzIgMTIgMTIgMTIgNi41MzY0NTIgMCAxMS44Nzk4OC01LjI4OTExMiAxMS45ODgyODItMTEuODAwNzgyYTIgMiAwIDAgMCAwLjAxMTcxOCAtMC4xOTkyMTggMiAyIDAgMCAwIC0yIC0yIDIgMiAwIDAgMCAtMiAyYzAgNC40NDE5NjgtMy41NTgwMzIgOC04IDhzLTgtMy41NTgwMzItOC04IDMuNTU4MDMyLTggOC04YTIgMiAwIDAgMCAyIC0yIDIgMiAwIDAgMCAtMiAtMnptMCA4YTQgNCAwIDAgMCAtNCA0IDQgNCAwIDAgMCA0IDQgNCA0IDAgMCAwIDQgLTQgNCA0IDAgMCAwIC00IC00eiIvPgogPHBhdGggc3R5bGU9Im9wYWNpdHk6LjE7ZmlsbDojZmZmZmZmIiBkPSJtMzIgMmMtMTUuNTEyIDAtMjggMTIuNDg4LTI4IDI4IDAgMC4xMTM0NSAwLjAxMTI4MDUgMC4yMjQxMTMgMC4wMTc1NzgxIDAuMzM1OTM4IDAuMzUxNTQzMi0xNS4yMDE3NTcgMTIuNjkzMTQ5OS0yNy4zMzU5MzggMjcuOTgyNDIxOS0yNy4zMzU5MzhzMjcuNjMwODc5IDEyLjEzNDE4MSAyNy45ODI0MjIgMjcuMzM1OTM4YzAuMDA2Mjk4LTAuMTExODI1IDAuMDE3NTc4LTAuMjIyNDg4IDAuMDE3NTc4LTAuMzM1OTM4IDAtMTUuNTEyLTEyLjQ4OC0yOC0yOC0yOHoiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"citrix,ica,icaclient,\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"wfica.desktop\"\nLABEL oc.launch=\"Wfica.Wfica\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nENV ARGS=\"-icaroot /opt/Citrix/ICAClient\"\nLABEL oc.name=\"citrix\"\nLABEL oc.displayname=\"citrix-client\"\nLABEL oc.path=\"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"application/x-ica;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"512M\\\",\\\"pid_mode\\\":true,\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nLABEL oc.secrets_requirement=\"\\\"citrix\\\"\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"citrix\"\nENV APPBIN \"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.args=\"-icaroot /opt/Citrix/ICAClient\"\nENV APP \"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.usedefaultapplication=true\nCOPY icaclientWeb_13.10.0.20_amd64.deb /tmp/icaclient_amd64.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/icaclient_amd64.deb && apt-get clean && rm /tmp/icaclient_amd64.deb && rm -rf /var/lib/apt/lists/*\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/citrix/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/citrix/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/citrix/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/citrix/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cloudfoundry/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN curl https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | apt-key add -\nRUN echo \"deb https://packages.cloudfoundry.org/debian stable main\" | tee /etc/apt/sources.list.d/cloudfoundry-cli.list\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | apt-key add -\nRUN echo \"deb https://packages.cloudfoundry.org/debian stable main\" | tee /etc/apt/sources.list.d/cloudfoundry-cli.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends cf8-cli && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pivotalio-icon.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI+PHBhdGggZD0iTTI3LjY2IDBIMTAuNXY2NGgxMC42NjdWOS42Mmg1LjQzOGMxLjM2IDAgMi4zIDAgMy40NS4yMSA4Ljc4NC4yMSAxMy4wNzIgMi44MjQgMTMuMDcyIDkuODN2LjgzN2MwIDYuNDg0LTMuNDUgMTAuNjY3LTEyLjg2MyAxMC42NjctLjk0IDAtMi4zLS4yMS0yLjMtLjIxdjguNzg0aDIuM0M0My44NyAzOS43NCA1My41IDM0LjMgNTMuNSAyMC4zOTJ2LS44MzdDNTMuNSA1LjEyNCA0Mi44MjQgMCAyNy42NiAweiIgZmlsbD0iIzAwN2Q2OCIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"cloudfoundry,cf,pivotal.io,cloud,foundry,cloud foundry\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.pivotalio.cf\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--disable-factory --class pivotalio.cf\"\nLABEL oc.name=\"cloudFoundry\"\nLABEL oc.displayname=\"Cloud Foundry cli\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cloudFoundry\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class pivotalio.cf\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cloudfoundry/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cloudfoundry/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cloudfoundry/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cloudfoundry/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cmd.exe/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"cmd.svg\"\nLABEL oc.icondata=\"PHN2ZyBoZWlnaHQ9IjEwMjQiIHdpZHRoPSI4OTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTgzMSAxMjdINjNjLTM1LjM1IDAtNjQgMjguNjUtNjQgNjR2NjQwYzAgMzUuMzUgMjguNjUgNjQgNjQgNjRoNzY4YzM1LjM1IDAgNjQtMjguNjUgNjQtNjRWMTkxQzg5NSAxNTUuNjQ5OTk5OTk5OTk5OTggODY2LjM1IDEyNyA4MzEgMTI3ek0xMjcgNTc1bDEyOC0xMjhMMTI3IDMxOWw2NC02NCAxOTIgMTkyTDE5MSA2MzkgMTI3IDU3NXpNNjM5IDYzOUgzODN2LTY0aDI1NlY2Mzl6IiAvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"cmd.exe,wine,command,cmd.exe\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"conhost.exe.conhost.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"cmd.exe\"\nLABEL oc.displayname=\"cmd.exe wine (alpine)\"\nLABEL oc.path=\"/usr/bin/wineconsole\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cmd.exe\"\nENV APPBIN \"/usr/bin/wineconsole\"\nENV APP \"/usr/bin/wineconsole\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cmd.exe/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cmd.exe/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cmd.exe/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cmd.exe/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cntlm/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nCOPY cntlm/cntlm.mustache cntlm/init.cntlm.sh /composer/\nCOPY composer/init.d/init.gnome-terminal /composer/init.d/\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends ruby-mustache gnome-terminal dbus-x11 cntlm net-tools vim curl wget && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"cntlm.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDQ3MC4xMDcgNDcwLjEwNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDcwLjEwNyA0NzAuMTA3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNNDIzLjQ4OSwxNjkuNzg1YzQuMzY0LTEyLjMzOCw2Ljg2My0yNS41NTUsNi44NjMtMzkuMzkxYzAtNjUuMzE2LTUyLjk1Ni0xMTguMjcyLTExOC4yNzItMTE4LjI3Mg0KCQljLTQ0LjQ0NSwwLTgzLjEyOSwyNC41NTMtMTAzLjMzMiw2MC43OTljLTE1LjM5LTkuNjc1LTMzLjU2LTE1LjM2LTUzLjA4LTE1LjM2Yy01NS4yMzksMC0xMDAuMDEsNDQuNzczLTEwMC4wMSwxMDAuMDAyDQoJCWMwLDMuODI4LDAuMjY0LDcuNTkzLDAuNjg0LDExLjMxM2gtMC42ODRDMjQuOTI1LDE2OC44NzUsMCwxOTMuNzkyLDAsMjI0LjUzM2MwLDMwLjc0LDI0LjkyNSw1NS42NTgsNTUuNjU4LDU1LjY1OGgyMC4yMDQNCgkJYy0yLjQwOC0zLjg2Ni0zLjc0Mi04LjI5OS0zLjc0Mi0xMi45NTljMC02LjU2MSwyLjU0Ni0xMi43NDIsNy4yMDUtMTcuNDE2bDE0LjA4NS0xNC4wN2w4LjMyNS04LjMyMw0KCQljNC42NDMtNC42MzUsMTAuODIzLTcuMTgzLDE3LjM5Mi03LjE4M2M2LjU2OSwwLDEyLjc2NSwyLjU1NiwxNy40MjQsNy4yMTNsMC4wNDYsMC4wNDh2LTAuMDdjMC0xMy41OCwxMS4wNDItMjQuNjMxLDI0LjYzMS0yNC42MzENCgkJaDMxLjYzM2MxMy41NzIsMCwyNC42MTUsMTEuMDUsMjQuNjE1LDI0LjYzMXYwLjA4NGwwLjA2Mi0wLjA2MmMxMS4wNjQtMTEuMDY0LDI2Ljk3Mi03Ljg5LDM0Ljg0OC0wLjAxNGwxMC4zMjcsMTAuMzI3DQoJCWwxMi4wMzUsMTIuMDM1YzQuNjU5LDQuNjUxLDcuMjIxLDEwLjgzOSw3LjIyMSwxNy40MjRjMCw0LjY3NS0xLjM1LDkuMTE1LTMuNzU4LDEyLjk2N2gzMy40MDQNCgkJYzIzLjAzLTM2LjA1Miw5MS40NjktNTIuNTA0LDExMC41MjMtNi42ODVjMC43NzYsMS44NjQsMC45MzIsMy44MzYsMS4xOCw1Ljc5M2MyNi40OTMtNC4yNzEsNDYuNzktMjcuMDYxLDQ2Ljc5LTU0Ljc2NQ0KCQlDNDcwLjEwNywxOTYuODkyLDQ0OS45MDQsMTc0LjEyNSw0MjMuNDg5LDE2OS43ODV6Ii8+DQoJPHBhdGggZD0iTTE0Ni4xOTUsMzcyLjExYy0xNS4yODItMTAuMDcxLTI1LjQwNy0yNy4zMzEtMjUuNDA3LTQ2Ljk1M2MwLTMxLjAyLDI1LjIzNS01Ni4yNTUsNTYuMjQ3LTU2LjI1NQ0KCQljMzEuMDI4LDAsNTYuMjYzLDI1LjIzNSw1Ni4yNjMsNTYuMjU1YzAsMy44MDQtMC40MDQsNy41MjMtMS4xMTgsMTEuMTE5bDUxLjMyNC0yMS40di01LjU0M2MwLTQuODIzLTMuOTEzLTguNzM3LTguNzI3LTguNzM3DQoJCWgtMTcuOTM2Yy0xLjU1NC01LjA1NC0zLjYwNC05Ljg5OS02LjA0MS0xNC40OTZsMTIuNzAzLTEyLjcwM2MxLjY0Ni0xLjYzOCwyLjU2Mi0zLjg1OSwyLjU2Mi02LjE3Mw0KCQljMC0yLjMxNC0wLjkxNi00LjUzNC0yLjU2Mi02LjE4MWwtMjIuMzYyLTIyLjM2MmMtMS43MS0xLjcwOC0zLjk0NS0yLjU1Ni02LjE4MS0yLjU1NmMtMi4yMzYsMC00LjQ1NywwLjg0OC02LjE2NSwyLjU1Ng0KCQlsLTEyLjcxOSwxMi43MTFjLTQuNTk3LTIuNDM4LTkuNDI3LTQuNDgtMTQuNTA0LTYuMDI1VjIyNy40M2MwLTQuODIzLTMuODk4LTguNzI5LTguNzEzLTguNzI5aC0zMS42MzMNCgkJYy00LjgxNSwwLTguNzI5LDMuOTA2LTguNzI5LDguNzI5djE3LjkzNmMtNS4wNjIsMS41NDYtOS45MDcsMy41ODgtMTQuNTA0LDYuMDI1bC0xMi42ODctMTIuNjk1DQoJCWMtMS43MDgtMS43MS0zLjk0NS0yLjU1Ni02LjE4MS0yLjU1NmMtMi4yMzYsMC00LjQ3MiwwLjg0Ni02LjE4MSwyLjU0OGwtMjIuMzc4LDIyLjM3Yy0xLjYzLDEuNjM4LTIuNTQ2LDMuODU5LTIuNTQ2LDYuMTczDQoJCWMwLDIuMzIyLDAuOTE2LDQuNTQyLDIuNTQ2LDYuMTgxbDEyLjcwMywxMi42OTVjLTIuNDM4LDQuNTk3LTQuNDcyLDkuNDM1LTYuMDI1LDE0LjQ4OEg3OS4zMDljLTQuODEzLDAtOC43MjcsMy45MTQtOC43MjcsOC43MzcNCgkJdjMxLjY0MWMwLDQuODE0LDMuOTE0LDguNzI3LDguNzI3LDguNzI3SDk3LjIzYzEuNTY4LDUuMDU1LDMuNjAyLDkuOTAxLDYuMDQsMTQuNDk4bC0xMi43MDMsMTIuNzAzDQoJCWMtMy40MDEsMy40LTMuNDAxLDguOTM3LDAsMTIuMzQ1bDcuNTE3LDcuNTA5YzQuMzMyLTQuNjksOS42MjctOC42MDMsMTUuOTAyLTExLjIyMUwxNDYuMTk1LDM3Mi4xMXoiLz4NCgk8cGF0aCBkPSJNMTc3LjAzNSwyODQuODA0Yy0yMi4yNTMsMC00MC4zNDUsMTguMS00MC4zNDUsNDAuMzUzYzAsMTguNDM0LDEyLjQ4NiwzMy44NTQsMjkuMzk3LDM4LjY2bDQ2LjA5Mi0xOS4yMQ0KCQljMy4yMTQtNS43OTEsNS4yMTctMTIuMzYxLDUuMjE3LTE5LjQ1QzIxNy4zOTcsMzAyLjkwNCwxOTkuMjg5LDI4NC44MDQsMTc3LjAzNSwyODQuODA0eiIvPg0KCTxwYXRoIGQ9Ik00MjUuMzA1LDMzMi41NzJjLTAuODIyLDAtMS42NjIsMC4xNjItMi40NywwLjQ5NmwtMzIuOTg0LDEzLjczNmMtMS40MjgsMC41OTgtMi45MDQsMC44NzgtNC4zNjQsMC44NzgNCgkJYy00LjQ0MiwwLTguNjY1LTIuNjMzLTEwLjQ4My03LjAwNWwtMTAuMDYzLTI0LjEyNGMtMS4xNDgtMi43ODgtMS4xOC01LjkwOS0wLjAxNi04LjY5N2MxLjEzNC0yLjc5NiwzLjM0LTUuMDA5LDYuMTE5LTYuMTY1DQoJCWwzMi45ODQtMTMuNzQ0YzMuMjYyLTEuMzU4LDQuNzgzLTUuMDc4LDMuNDMyLTguMzE1Yy01LjY1Mi0xMy41OC0yMC4yNS0yMC43NjMtMzQuMTAyLTE3LjU2NGwtMTYuMzY4LDMuNzM1DQoJCWMtMTUuNTc2LDMuNTU2LTI4LjY1MSwxNC4wNDYtMzUuNTE2LDI4LjQ1N0wzMDguNCwzMjEuNzMyTDEyMC4xMDQsNDAwLjIxYy0xNS4zMTIsNi4zODMtMjIuNTQ4LDIzLjk1My0xNi4xNjYsMzkuMjgxDQoJCWM2LjMyMSwxNS4xNSwyMy44MDcsMjIuNjExLDM5LjI4OSwxNi4xNzRsMTg4LjMxLTc4LjQ3MWwyOC42ODMsMTAuMDQ5YzUuNjIzLDEuOTcyLDExLjQ2MSwyLjk0MiwxNy4yNywyLjk0Mg0KCQljOS43ODMsMCwxOS40OS0yLjc0OCwyNy45NTMtOC4xMTNsMTQuMTk0LTguOTk5YzEyLjIzNy03Ljc2NSwxNy4wOTgtMjMuMjAxLDExLjUyMy0zNi41OA0KCQlDNDMwLjE1LDMzNC4wNDgsNDI3Ljc5LDMzMi41NzIsNDI1LjMwNSwzMzIuNTcyeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"\nLABEL oc.keyword=\"cntlm,cntlm,proxy,ntlm\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.cntlm\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--class cntlm -- bash -c '/usr/sbin/cntlm -f -v; exec bash'\"\nLABEL oc.name=\"cntlm\"\nLABEL oc.displayname=\"cntlm\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"network_mode\\\":\\\"container\\\"}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"cntlm\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--class cntlm -- bash -c '/usr/sbin/cntlm -f -v; exec bash'\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN chown balloon:root /etc/cntlm.conf\nRUN chmod 755 /composer/cntlm.mustache\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cntlm/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cntlm/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cntlm/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cntlm/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes unzip && apt-get clean\nRUN cd /composer && curl -Ls https://th.corsix.org/Demo.zip -o Demo.zip && unzip Demo.zip && rm -rf Demo.zip\nCOPY corsix-th.config.txt /composer/corsix-th.config.txt\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libgl1 corsix-th && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"games.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgeD0iMHB4IgogICB5PSIwcHgiCiAgIHdpZHRoPSIyNDguNTcxcHgiCiAgIGhlaWdodD0iMjQ4LjU3MXB4IgogICB2aWV3Qm94PSIwIDAgMjQ4LjU3MSAyNDguNTcxIgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNDguNTcxIDI0OC41NzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJWaWRlby1HYW1lLUNvbnRyb2xsZXItSWNvbi1JRFYtZ3JlZW4uc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1NyI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczU1IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzAwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjQ4MCIKICAgICBpZD0ibmFtZWR2aWV3NTMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuOTQ5NDI2OTMiCiAgICAgaW5rc2NhcGU6Y3g9IjEyNC4yODU1IgogICAgIGlua3NjYXBlOmN5PSIxMjQuMjg1NSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgLz48cGF0aAogICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgZD0iTTg3LjQyMyw4OC45NjhjMC41NjIsMy4xMjYtMS41MTcsNi4xMTUtNC42NDIsNi42NzZsLTMzLjk1Niw2LjEwMmMtMy4xMjYsMC41NjItNi4xMTUtMS41MTctNi42NzYtNC42NDIgIGwwLDBjLTAuNTYyLTMuMTI2LDEuNTE3LTYuMTE1LDQuNjQyLTYuNjc2bDMzLjk1Ni02LjEwMkM4My44NzMsODMuNzY0LDg2Ljg2MSw4NS44NDIsODcuNDIzLDg4Ljk2OEw4Ny40MjMsODguOTY4eiIKICAgICBpZD0icGF0aDMiIC8+PGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yODUuNzE0MjksLTM2NS4yMTkzMikiPjxwYXRoCiAgICAgICBpZD0icGF0aDI5ODUiCiAgICAgICBmaWxsPSIjRUEzRDRFIgogICAgICAgZD0iTTUzNC4yODUsNDg5LjUwNWMwLjAyNCw2OC42NDEtNTUuNjAxLDEyNC4zMDUtMTI0LjI0MiwxMjQuMzI5ICAgcy0xMjQuMzA1LTU1LjYwMi0xMjQuMzI5LTEyNC4yNDNjMC0wLjAyOSwwLTAuMDU4LDAtMC4wODZjLTAuMDI0LTY4LjY0MSw1NS42MDItMTI0LjMwNSwxMjQuMjQzLTEyNC4zMjkgICBjNjguNjQxLTAuMDIzLDEyNC4zMDUsNTUuNjAyLDEyNC4zMjgsMTI0LjI0M0M1MzQuMjg1LDQ4OS40NDcsNTM0LjI4NSw0ODkuNDc2LDUzNC4yODUsNDg5LjUwNXoiCiAgICAgICBzdHlsZT0iZmlsbDojNzZjMmFmO2ZpbGwtb3BhY2l0eToxIiAvPjxwYXRoCiAgICAgICBpZD0icGF0aDMwOTkiCiAgICAgICBmaWxsPSIjMjMxRjIwIgogICAgICAgc3Ryb2tlPSIjMjMxRjIwIgogICAgICAgc3Ryb2tlLXdpZHRoPSI2IgogICAgICAgZD0iTTQxMC45NTEsMzY2LjcyNiAgIGMtMi41ODMsMjcuMzY0LTguNjUsNDAuMDUxLTExLjA1OSw1MC45MjJjLTEuMjA0LDUuNDM2LTEuNDY4LDEwLjQzMiwwLjA5NCwxNi40NjZzNC45NDMsMTMuMTA3LDExLjAyNywyMi44MDhsMC44NDYtMC41MTggICBjLTYuMDU3LTkuNjU5LTkuMzc4LTE2LjY0OS0xMC45MDEtMjIuNTM0Yy0xLjUyMy01Ljg4NS0xLjI0Ny0xMC42NjItMC4wNjMtMTYuMDA4YzIuMzY5LTEwLjY5NCw4LjQ2NS0yMy41NjksMTEuMDU4LTUxLjA0NCAgIEw0MTAuOTUxLDM2Ni43MjZMNDEwLjk1MSwzNjYuNzI2eiIgLz48ZwogICAgICAgaWQ9ImczOTE1Ij48ZwogICAgICAgICBpZD0iZzkiPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzXzFfIgogICAgICAgICAgIGZpbGw9IiNDMUJDOUQiCiAgICAgICAgICAgZD0iTTM5OS4yNjUsNTA0Ljk0YzAsMjIuMDkyLTE3LjkwOSw0MC00MCw0MGMtMjIuMDkyLDAtNDAtMTcuOTA4LTQwLTQwbDAsMCAgICAgYzAtMjIuMDkxLDE3LjkwOC00MCw0MC00MEMzODEuMzU2LDQ2NC45NCwzOTkuMjY1LDQ4Mi44NDksMzk5LjI2NSw1MDQuOTR6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzLTdfMV8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNTAxLjI2NCw1MDQuOTRjMCwyMi4wOTItMTcuOTA4LDQwLTQwLDQwcy00MC0xNy45MDgtNDAtNDBsMCwwICAgICBjMC0yMi4wOTEsMTcuOTA4LTQwLDQwLTQwUzUwMS4yNjQsNDgyLjg0OSw1MDEuMjY0LDUwNC45NHoiIC8+PHJlY3QKICAgICAgICAgICBpZD0icmVjdDMwMzFfMV8iCiAgICAgICAgICAgeD0iMzU2LjA1IgogICAgICAgICAgIHk9IjQ2NC45NCIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIHdpZHRoPSIxMDUuNzEzIgogICAgICAgICAgIGhlaWdodD0iNjAiIC8+PC9nPjxnCiAgICAgICAgIGlkPSJnMTQiPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzIgogICAgICAgICAgIGZpbGw9IiNGMkYyRjIiCiAgICAgICAgICAgZD0iTTM5OS41OTgsNDk2LjI3M2MwLDIyLjA5Mi0xNy45MDksNDAtNDAsNDBjLTIyLjA5MiwwLTQwLTE3LjkwOC00MC00MGwwLDAgICAgIGMwLTIyLjA5MSwxNy45MDgtNDAsNDAtNDBDMzgxLjY4OSw0NTYuMjczLDM5OS41OTgsNDc0LjE4MiwzOTkuNTk4LDQ5Ni4yNzN6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzLTciCiAgICAgICAgICAgZmlsbD0iI0YyRjJGMiIKICAgICAgICAgICBkPSJNNTAxLjU5OCw0OTYuMjczYzAsMjIuMDkyLTE3LjkwOCw0MC00MCw0MHMtNDAtMTcuOTA4LTQwLTQwbDAsMCAgICAgYzAtMjIuMDkxLDE3LjkwOC00MCw0MC00MFM1MDEuNTk4LDQ3NC4xODIsNTAxLjU5OCw0OTYuMjczeiIgLz48cmVjdAogICAgICAgICAgIGlkPSJyZWN0MzAzMSIKICAgICAgICAgICB4PSIzNTYuMzg0IgogICAgICAgICAgIHk9IjQ1Ni4yNzMiCiAgICAgICAgICAgZmlsbD0iI0YyRjJGMiIKICAgICAgICAgICB3aWR0aD0iMTA1LjcxNCIKICAgICAgICAgICBoZWlnaHQ9IjYwIiAvPjwvZz48ZwogICAgICAgICBpZD0iZzE5Ij48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NV8yXyIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik00NzIuMzg3LDQ3OC40NzFjMCw1LjA2MS00LjEwNCw5LjE2My05LjE2NCw5LjE2M3MtOS4xNjMtNC4xMDItOS4xNjMtOS4xNjMgICAgIGMwLTUuMDYxLDQuMTAzLTkuMTYzLDkuMTYzLTkuMTYzUzQ3Mi4zODcsNDczLjQxLDQ3Mi4zODcsNDc4LjQ3MUw0NzIuMzg3LDQ3OC40NzF6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTBfMl8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNDcyLjUzMSw1MTYuMDA1YzAsNS4wNjEtNC4xMDMsOS4xNjMtOS4xNjIsOS4xNjNjLTUuMDYyLDAtOS4xNjQtNC4xMDMtOS4xNjQtOS4xNjMgICAgIGMwLTUuMDYyLDQuMTAzLTkuMTY0LDkuMTY0LTkuMTY0QzQ2OC40MjksNTA2Ljg0MSw0NzIuNTMxLDUxMC45NDMsNDcyLjUzMSw1MTYuMDA1TDQ3Mi41MzEsNTE2LjAwNXoiIC8+PHBhdGgKICAgICAgICAgICBpZD0icGF0aDMwNTUtOV8yXyIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik00OTEuMTI1LDQ5Ny4zNzZjMCw1LjA2LTQuMTA0LDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MywwLTkuMTY0LTQuMTA0LTkuMTY0LTkuMTYzICAgICBjMC01LjA2Miw0LjEwMi05LjE2NCw5LjE2NC05LjE2NEM0ODcuMDIxLDQ4OC4yMTIsNDkxLjEyNSw0OTIuMzE1LDQ5MS4xMjUsNDk3LjM3Nkw0OTEuMTI1LDQ5Ny4zNzZ6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTRfMl8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNDUzLjcyNCw0OTcuMzU2YzAsNS4wNjMtNC4xMDMsOS4xNjQtOS4xNjMsOS4xNjRjLTUuMDYyLDAtOS4xNjMtNC4xMDItOS4xNjMtOS4xNjQgICAgIGMwLTUuMDYsNC4xMDItOS4xNjMsOS4xNjMtOS4xNjNDNDQ5LjYyMSw0ODguMTkzLDQ1My43MjQsNDkyLjI5Niw0NTMuNzI0LDQ5Ny4zNTZMNDUzLjcyNCw0OTcuMzU2eiIgLz48L2c+PGcKICAgICAgICAgaWQ9ImcyNSI+PHBhdGgKICAgICAgICAgICBpZD0icGF0aDMwNTVfMV8iCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNNDcyLjM4Nyw0NzcuMjIxYzAsNS4wNjEtNC4xMDQsOS4xNjMtOS4xNjQsOS4xNjNzLTkuMTYzLTQuMTAyLTkuMTYzLTkuMTYzICAgICBjMC01LjA2MSw0LjEwMy05LjE2Myw5LjE2My05LjE2M1M0NzIuMzg3LDQ3Mi4xNiw0NzIuMzg3LDQ3Ny4yMjFMNDcyLjM4Nyw0NzcuMjIxeiIgLz48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NS0wXzFfIgogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTQ3Mi41MzEsNTE0Ljc1NWMwLDUuMDYxLTQuMTAzLDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MiwwLTkuMTY0LTQuMTAzLTkuMTY0LTkuMTYzICAgICBjMC01LjA2Miw0LjEwMy05LjE2NCw5LjE2NC05LjE2NEM0NjguNDI5LDUwNS41OTEsNDcyLjUzMSw1MDkuNjkzLDQ3Mi41MzEsNTE0Ljc1NUw0NzIuNTMxLDUxNC43NTV6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTlfMV8iCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNNDkxLjEyNSw0OTYuMTI2YzAsNS4wNi00LjEwNCw5LjE2My05LjE2Miw5LjE2M2MtNS4wNjMsMC05LjE2NC00LjEwNC05LjE2NC05LjE2MyAgICAgYzAtNS4wNjIsNC4xMDItOS4xNjQsOS4xNjQtOS4xNjRDNDg3LjAyMSw0ODYuOTYyLDQ5MS4xMjUsNDkxLjA2NSw0OTEuMTI1LDQ5Ni4xMjZMNDkxLjEyNSw0OTYuMTI2eiIgLz48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NS00XzFfIgogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTQ1My43MjQsNDk2LjEwNmMwLDUuMDYzLTQuMTAzLDkuMTY0LTkuMTYzLDkuMTY0Yy01LjA2MiwwLTkuMTYzLTQuMTAyLTkuMTYzLTkuMTY0ICAgICBjMC01LjA2LDQuMTAyLTkuMTYzLDkuMTYzLTkuMTYzQzQ0OS42MjEsNDg2Ljk0Myw0NTMuNzI0LDQ5MS4wNDYsNDUzLjcyNCw0OTYuMTA2TDQ1My43MjQsNDk2LjEwNnoiIC8+PC9nPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzA1NSIKICAgICAgICAgZmlsbD0iIzMzMzMzMyIKICAgICAgICAgZD0iTTQ3Mi4zODcsNDc0Ljg0NmMwLDUuMDYxLTQuMTA0LDkuMTYzLTkuMTY0LDkuMTYzcy05LjE2My00LjEwMy05LjE2My05LjE2MyAgICBjMC01LjA2MSw0LjEwMy05LjE2Myw5LjE2My05LjE2M1M0NzIuMzg3LDQ2OS43ODUsNDcyLjM4Nyw0NzQuODQ2TDQ3Mi4zODcsNDc0Ljg0NnoiIC8+PHBhdGgKICAgICAgICAgaWQ9InBhdGgzMDU1LTAiCiAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgIGQ9Ik00NzIuNTMxLDUxMi4zOGMwLDUuMDYxLTQuMTAzLDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MiwwLTkuMTY0LTQuMTAzLTkuMTY0LTkuMTYzICAgIGMwLTUuMDYyLDQuMTAzLTkuMTY0LDkuMTY0LTkuMTY0QzQ2OC40MjksNTAzLjIxNiw0NzIuNTMxLDUwNy4zMTgsNDcyLjUzMSw1MTIuMzhMNDcyLjUzMSw1MTIuMzh6IiAvPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzA1NS05IgogICAgICAgICBmaWxsPSIjMzMzMzMzIgogICAgICAgICBkPSJNNDkxLjEyNSw0OTMuNzUxYzAsNS4wNi00LjEwNCw5LjE2My05LjE2Miw5LjE2M2MtNS4wNjMsMC05LjE2NC00LjEwNC05LjE2NC05LjE2MyAgICBjMC01LjA2Miw0LjEwMi05LjE2NCw5LjE2NC05LjE2NEM0ODcuMDIxLDQ4NC41ODgsNDkxLjEyNSw0ODguNjksNDkxLjEyNSw0OTMuNzUxTDQ5MS4xMjUsNDkzLjc1MXoiIC8+PHBhdGgKICAgICAgICAgaWQ9InBhdGgzMDU1LTQiCiAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgIGQ9Ik00NTMuNzI0LDQ5My43MzFjMCw1LjA2My00LjEwMyw5LjE2NC05LjE2Myw5LjE2NGMtNS4wNjIsMC05LjE2My00LjEwMi05LjE2My05LjE2NCAgICBjMC01LjA2LDQuMTAyLTkuMTYzLDkuMTYzLTkuMTYzQzQ0OS42MjEsNDg0LjU2OCw0NTMuNzI0LDQ4OC42NzEsNDUzLjcyNCw0OTMuNzMxTDQ1My43MjQsNDkzLjczMXoiIC8+PGcKICAgICAgICAgaWQ9ImczNSI+PHBhdGgKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik0zODMuNzUsNTAyLjEzYzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVoLTM2LjI1Yy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1bDAsMCAgICAgYzAtMy43OTcsMy4wNzgtNi44NzUsNi44NzUtNi44NzVoMzYuMjVDMzgwLjY3Miw0OTUuMjU1LDM4My43NSw0OTguMzMzLDM4My43NSw1MDIuMTNMMzgzLjc1LDUwMi4xM3oiCiAgICAgICAgICAgaWQ9InBhdGgzNyIgLz48cGF0aAogICAgICAgICAgIGZpbGw9IiNDMUJDOUQiCiAgICAgICAgICAgZD0iTTM1OC42MjUsNDc3LjEzYzMuNzk3LDAsNi44NzUsMy4wNzgsNi44NzUsNi44NzV2MzYuMjVjMCwzLjc5Ny0zLjA3OCw2Ljg3NS02Ljg3NSw2Ljg3NWwwLDAgICAgIGMtMy43OTcsMC02Ljg3NS0zLjA3OC02Ljg3NS02Ljg3NXYtMzYuMjVDMzUxLjc1LDQ4MC4yMDgsMzU0LjgyOCw0NzcuMTMsMzU4LjYyNSw0NzcuMTNMMzU4LjYyNSw0NzcuMTN6IgogICAgICAgICAgIGlkPSJwYXRoMzkiIC8+PC9nPjxnCiAgICAgICAgIGlkPSJnNDEiPjxwYXRoCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNMzgzLjc1LDQ5OS4yNTVjMCwzLjc5Ny0zLjA3OCw2Ljg3NS02Ljg3NSw2Ljg3NWgtMzYuMjVjLTMuNzk3LDAtNi44NzUtMy4wNzgtNi44NzUtNi44NzVsMCwwICAgICBjMC0zLjc5NywzLjA3OC02Ljg3NSw2Ljg3NS02Ljg3NWgzNi4yNUMzODAuNjcyLDQ5Mi4zOCwzODMuNzUsNDk1LjQ1OCwzODMuNzUsNDk5LjI1NUwzODMuNzUsNDk5LjI1NXoiCiAgICAgICAgICAgaWQ9InBhdGg0MyIgLz48cGF0aAogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTM1OC42MjUsNDc0LjI1NWMzLjc5NywwLDYuODc1LDMuMDc4LDYuODc1LDYuODc1djM2LjI1YzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVsMCwwICAgICBjLTMuNzk3LDAtNi44NzUtMy4wNzgtNi44NzUtNi44NzV2LTM2LjI1QzM1MS43NSw0NzcuMzMzLDM1NC44MjgsNDc0LjI1NSwzNTguNjI1LDQ3NC4yNTVMMzU4LjYyNSw0NzQuMjU1eiIKICAgICAgICAgICBpZD0icGF0aDQ1IiAvPjwvZz48ZwogICAgICAgICBpZD0iZzQ3Ij48cGF0aAogICAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgICAgZD0iTTM4My43NSw0OTUuNzU1YzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVoLTM2LjI1Yy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1bDAsMCAgICAgYzAtMy43OTcsMy4wNzgtNi44NzUsNi44NzUtNi44NzVoMzYuMjVDMzgwLjY3Miw0ODguODgsMzgzLjc1LDQ5MS45NTgsMzgzLjc1LDQ5NS43NTVMMzgzLjc1LDQ5NS43NTV6IgogICAgICAgICAgIGlkPSJwYXRoNDkiIC8+PHBhdGgKICAgICAgICAgICBmaWxsPSIjMzMzMzMzIgogICAgICAgICAgIGQ9Ik0zNTguNjI1LDQ3MC43NTVjMy43OTcsMCw2Ljg3NSwzLjA3OCw2Ljg3NSw2Ljg3NXYzNi4yNWMwLDMuNzk3LTMuMDc4LDYuODc1LTYuODc1LDYuODc1bDAsMCAgICAgYy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1di0zNi4yNUMzNTEuNzUsNDczLjgzMywzNTQuODI4LDQ3MC43NTUsMzU4LjYyNSw0NzAuNzU1TDM1OC42MjUsNDcwLjc1NXoiCiAgICAgICAgICAgaWQ9InBhdGg1MSIgLz48L2c+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"corsix-th,hospital,role,playing\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"com.corsixth.CorsixTH.desktop\"\nLABEL oc.launch=\"corsix-th.corsix-th\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"corsix-th\"\nLABEL oc.displayname=\"corsix-th\"\nLABEL oc.path=\"/usr/games/corsix-th\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"corsix-th\"\nENV APPBIN \"/usr/games/corsix-th\"\nENV APP \"/usr/games/corsix-th\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/corsix-th/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/corsix-th/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/corsix-th/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/corsix-th/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cuda,cuda nvidia\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cuda\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cuda\"\nLABEL oc.name=\"cuda\"\nLABEL oc.displayname=\"cuda\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cuda\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cuda\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cuda/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cuda/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cuda/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f cuda.d -t cuda .\n
"},{"location":"applications/cuda/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect cuda > cuda.json\ndocker image save cuda -o cuda.tar\nctr -n k8s.io images import cuda.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @cuda.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git cuda-demo-suite-12-0 libglu1-mesa libxi6 libxinerama1 libxmu6 libglu1-mesa mesa-utils freeglut3 x11-xserver-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cudademo,cuda nvidia\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cudademo\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cudademo -- cd /usr/local/cuda/extras/demo_suite\"\nLABEL oc.name=\"cudademo\"\nLABEL oc.displayname=\"cuda demo\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cudademo\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cudademo -- cd /usr/local/cuda/extras/demo_suite\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cudademo/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cudademo/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cudademo/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cudademo/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git cuda libnvidia-cfg1-525 libnvidia-common-525 libnvidia-compute-525 libnvidia-decode-525 libnvidia-encode-525 libnvidia-extra-525 libnvidia-fbc1-525 git libglu1-mesa libxi6 libxinerama1 libxmu6 libglu1-mesa mesa-utils freeglut3 x11-xserver-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cudadev,cuda nvidia dev\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cudadev\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cudadev\"\nLABEL oc.name=\"cudadev\"\nLABEL oc.displayname=\"cuda developper\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cudadev\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cudadev\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nRUN cd /usr/local/cuda && git clone https://github.com/NVIDIA/cuda-samples.git && chmod 777 cuda-samples && cd cuda-samples && chmod -R 777 * \nRUN echo \"export PATH=/usr/local/cuda-12.0/bin${PATH:+:${PATH}}\" > /cuda.sh\nRUN echo \"export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}\" >> /cuda.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cudadev/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cudadev/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cudadev/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cudadev/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update dia dia-lang\nLABEL oc.icon=\"circle_dia.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk0MyIgeD0iLS4xMTk3NCIgeT0iLS4wOTgzNTciIHdpZHRoPSIxLjIzOTUiIGhlaWdodD0iMS4xOTY3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjE0NzUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTE3NCIgeDE9IjMwLjA1NSIgeDI9IjMwLjA1NSIgeTE9IjU3Ljg2MyIgeTI9IjYuNjI0IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjIwMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFmMWYxZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1MjUyNTIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTM3NSIgeD0iLS4wMzA3MiIgeT0iLS4wMzA3MiIgd2lkdGg9IjEuMDYxNCIgaGVpZ2h0PSIxLjA2MTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzY4Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEzNzUpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgZmlsbCBtYXJrZXJzIi8+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDExNzQpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zMDQzIDAgMCAxLjMwNDMgMiAyKSI+CiAgPGcgb3BhY2l0eT0iLjEiPgogICA8cGF0aCBkPSJtMTYuNSAxMWgydjEuOTk2aC0yIiBmaWxsPSIjMDAwMDAwIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zMDQzIDAgMCAxLjMwNDMgMiAuNjk1NjUpIj4KICA8cGF0aCBkPSJtMTUgMTF2M2gxdjFoLTJ2M2gydjE0aC0ydjNoMnYwLjg3N2gtMWwyIDMuMTIzIDItMy4xMjNoLTF2LTAuODc3aDljNS41NCAwIDEwLTQuNDYgMTAtMTBzLTQuNDYtMTAtMTAtMTBoLTl2LTFoMXYtM3ptMyA3aDljMy44NzggMCA3IDMuMTIyIDcgN3MtMy4xMjIgNy03IDdoLTl6bTcgMi01IDloMTB6bTAgMy42IDEuODAxIDMuNGgtMy42MDIiIGZpbGw9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmaWx0ZXI5NDMpIiBvcGFjaXR5PSIuNSIvPgogIDxwYXRoIGQ9Im0yNCAxOS01IDloMTBtLTMuMi0yaC0zLjZsMS44LTMuNCIgZmlsbD0iI2ZmOTQwOSIvPgogPC9nPgogPHBhdGggZD0ibTIwLjI2MSAxMy43Mzl2My45MTNoMS4zMDQzdjEuMzA0M2gtMi42MDg3djMuOTEzaDIuNjA4N3YxOC4yNjFoLTIuNjA4N3YzLjkxM2gyLjYwODd2MS4xNDM5aC0xLjMwNDNsMi42MDg3IDQuMDczNSAyLjYwODctNC4wNzM1aC0xLjMwNDN2LTEuMTQzOWgxMS43MzljNy4yMjYxIDAgMTMuMDQzLTUuODE3NCAxMy4wNDMtMTMuMDQzcy01LjgxNzQtMTMuMDQzLTEzLjA0My0xMy4wNDNoLTExLjczOXYtMS4zMDQzaDEuMzA0M3YtMy45MTN6bTMuOTEzIDkuMTMwNGgxMS43MzljNS4wNTgzIDAgOS4xMzA0IDQuMDcyMiA5LjEzMDQgOS4xMzA0cy00LjA3MjIgOS4xMzA0LTkuMTMwNCA5LjEzMDRoLTExLjczOXoiIGZpbGw9IiNmOWY5ZjkiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"dia\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"dia.desktop\"\nLABEL oc.launch=\"dia-gnome.Dia-gnome\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Dia\"\nLABEL oc.displayname=\"Dia\"\nLABEL oc.path=\"/usr/bin/dia\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-dia-diagram;\"\nLABEL oc.fileextensions=\"dia\"\nLABEL oc.legacyfileextensions=\"dia\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Dia\"\nENV APPBIN \"/usr/bin/dia\"\nENV APP \"/usr/bin/dia\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/dia/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/dia/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/dia/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f Dia.d -t Dia .\n
"},{"location":"applications/dia/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect Dia > Dia.json\ndocker image save Dia -o Dia.tar\nctr -n k8s.io images import Dia.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @Dia.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends chocolate-doom doom-wad-shareware prboom-plus freedoom prboom-plus && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"doom.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzgyMzA1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzhhMjgwNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0yNCA5Yy04LjI4NCAwLTE1IDYuNzE2LTE1IDE1czYuNzE2IDE1IDE1IDE1IDE1LTYuNzE2IDE1LTE1LTYuNzE2LTE1LTE1LTE1em0wIDJjMi4zMDggMCA0LjQ2NSAwLjYwMiA2LjM0NCAxLjY1NmwtNi4zNDQgNC40MDYtNi4zNDQtNC40MDZjMS44NzktMS4wNTUgNC4wNC0xLjY1NiA2LjM0NC0xLjY1NnptLTcuMDk0IDIuMTI1Yy0wLjI0NCAwLjE1OS0wLjQ4NiAwLjMyNS0wLjcxOSAwLjUgMC4yMzMtMC4xNzUgMC40NzQtMC4zNCAwLjcxOS0wLjV6bTE0LjE4OCAwYzAuMjQ0IDAuMTYgMC40ODYgMC4zMjUgMC43MTkgMC41LTAuMjMzLTAuMTc1LTAuNDc1LTAuMzQxLTAuNzE5LTAuNXptLTE0LjIxOSAxLjM3NSA1LjQwNiAzLjc1LTMuMzc1IDIuMzQ0em0xNC4yNSAwLTIuMDMxIDYuMDk0LTMuMzc1LTIuMzQ0em0tMTYuMjUgMC4yNSAyLjM0NCA3LjAzLTYuMDYgNC4yMTljLTAuMS0wLjY1LTAuMTU2LTEuMzIyLTAuMTU2LTIgMC0zLjYyMiAxLjQ4NS02Ljg5MyAzLjg3NS05LjI1em0xOC4yNSAwYzIuMzkgMi4zNTcgMy44NzUgNS42MjggMy44NzUgOS4yNSAwIDAuNjc4LTAuMDU2IDEuMzUtMC4xNTYgMmwtNi4wNi00LjIxOSAyLjM0NC03LjAzem0tOS4xMjUgNC43MTlsNC40MzggMy4wOTQtMS40NjkgNC40MzhoLTUuOTM4bC0xLjQ2OS00LjQzOHptLTYuMTI1IDQuMjUgMS4wOTQgMy4yODFoLTUuODEzem0xMi4yNSAwIDQuNzE5IDMuMjgxaC01LjgxM3ptLTE4Ljk2OSAyLjMxM2MwLjA4IDAuNTEzIDAuMjA1IDEuMDEgMC4zNDQgMS41IDAuMTE0IDAuNDA1IDAuMjU1IDAuOCAwLjQwNiAxLjE4OC0wLjE1Mi0wLjM4OS0wLjI5Mi0wLjc4Mi0wLjQwNi0xLjE4OC0wLjEzOC0wLjQ5LTAuMjY0LTAuOTg5LTAuMzQ0LTEuNXptMjUuNjg4IDBjLTAuMDggMC41MTEtMC4yMDYgMS4wMS0wLjM0NCAxLjUtMC4xMTQgMC40MDYtMC4yNTUgMC43OTktMC40MDYgMS4xODggMC4xNTEtMC4zODggMC4yOTItMC43ODMgMC40MDYtMS4xODggMC4xMzktMC40OTEgMC4yNjQtMC45ODcgMC4zNDQtMS41em0tMjQuODQ0IDIuOTY5aDcuNjI1bDIuNjI1IDcuODc1YzAuMjM0IDAuMDMxIDAuNDggMC4wNDIgMC43MTkgMC4wNjMtMC4yNDItMC4wMTktMC40ODEtMC4wMzEtMC43MTktMC4wNjMtNC42NDgtMC42MjMtOC41MDYtMy42ODktMTAuMjUtNy44NzV6bTkuNzE5IDBoNC41NjNsLTIuMjgxIDYuODc1LTIuMjgxLTYuODc1em02LjY1NiAwaDcuNjI1Yy0xLjc0NCA0LjE4Ni01LjYwMiA3LjI1Mi0xMC4yNSA3Ljg3NS0wLjIzOCAwLjAzMi0wLjQ3NyAwLjA0NC0wLjcxOSAwLjA2MyAwLjIzOS0wLjAyMSAwLjQ4NS0wLjAzMSAwLjcxOS0wLjA2M3oiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8cGF0aCBkPSJtMjQgOGMtOC4yODQgMC0xNSA2LjcxNi0xNSAxNXM2LjcxNiAxNSAxNSAxNSAxNS02LjcxNiAxNS0xNS02LjcxNi0xNS0xNS0xNXptMCAyYzIuMzA4IDAgNC40NjUgMC42MDIgNi4zNDQgMS42NTZsLTYuMzQ0IDQuNDA2LTYuMzQ0LTQuNDA2YzEuODc5LTEuMDU1IDQuMDQtMS42NTYgNi4zNDQtMS42NTZ6bS03LjA5NCAyLjEyNWMtMC4yNDQgMC4xNTktMC40ODYgMC4zMjUtMC43MTkgMC41IDAuMjMzLTAuMTc1IDAuNDc0LTAuMzQgMC43MTktMC41em0xNC4xODggMGMwLjI0NCAwLjE2IDAuNDg2IDAuMzI1IDAuNzE5IDAuNS0wLjIzMy0wLjE3NS0wLjQ3NS0wLjM0MS0wLjcxOS0wLjV6bS0xNC4yMTkgMS4zNzUgNS40MDYgMy43NS0zLjM3NSAyLjM0NHptMTQuMjUgMC0yLjAzMSA2LjA5NC0zLjM3NS0yLjM0NHptLTE2LjI1IDAuMjUgMi4zNDQgNy4wMy02LjA2IDQuMjE5Yy0wLjEtMC42NS0wLjE1Ni0xLjMyMi0wLjE1Ni0yIDAtMy42MjIgMS40ODUtNi44OTMgMy44NzUtOS4yNXptMTguMjUgMGMyLjM5IDIuMzU3IDMuODc1IDUuNjI4IDMuODc1IDkuMjUgMCAwLjY3OC0wLjA1NiAxLjM1LTAuMTU2IDJsLTYuMDYtNC4yMTkgMi4zNDQtNy4wM3ptLTkuMTI1IDQuNzE5bDQuNDM4IDMuMDk0LTEuNDY5IDQuNDM4aC01LjkzOGwtMS40NjktNC40Mzh6bS02LjEyNSA0LjI1IDEuMDk0IDMuMjgxaC01LjgxM3ptMTIuMjUgMCA0LjcxOSAzLjI4MWgtNS44MTN6bS0xOC45NjkgMi4zMTNjMC4wOCAwLjUxMyAwLjIwNSAxLjAxIDAuMzQ0IDEuNSAwLjExNCAwLjQwNSAwLjI1NSAwLjggMC40MDYgMS4xODgtMC4xNTItMC4zODktMC4yOTItMC43ODItMC40MDYtMS4xODgtMC4xMzgtMC40OS0wLjI2NC0wLjk4OS0wLjM0NC0xLjV6bTI1LjY4OCAwYy0wLjA4IDAuNTExLTAuMjA2IDEuMDEtMC4zNDQgMS41LTAuMTE0IDAuNDA2LTAuMjU1IDAuNzk5LTAuNDA2IDEuMTg4IDAuMTUxLTAuMzg4IDAuMjkyLTAuNzgzIDAuNDA2LTEuMTg4IDAuMTM5LTAuNDkxIDAuMjY0LTAuOTg3IDAuMzQ0LTEuNXptLTI0Ljg0NCAyLjk2OWg3LjYyNWwyLjYyNSA3Ljg3NWMwLjIzNCAwLjAzMSAwLjQ4IDAuMDQyIDAuNzE5IDAuMDYzLTAuMjQyLTAuMDE5LTAuNDgxLTAuMDMxLTAuNzE5LTAuMDYzLTQuNjQ4LTAuNjIzLTguNTA2LTMuNjg5LTEwLjI1LTcuODc1em05LjcxOSAwaDQuNTYzbC0yLjI4MSA2Ljg3NS0yLjI4MS02Ljg3NXptNi42NTYgMGg3LjYyNWMtMS43NDQgNC4xODYtNS42MDIgNy4yNTItMTAuMjUgNy44NzUtMC4yMzggMC4wMzItMC40NzcgMC4wNDQtMC43MTkgMC4wNjMgMC4yMzktMC4wMjEgMC40ODUtMC4wMzEgMC43MTktMC4wNjN6IiBzdHlsZT0iZmlsbDojZGM3ZDQxIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"doom,doom\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"chocolate-doom.chocolate-doom\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"doom\"\nLABEL oc.displayname=\"Doom\"\nLABEL oc.path=\"/usr/games/doom\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"doom\"\nENV APPBIN \"/usr/games/doom\"\nENV APP \"/usr/games/doom\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/doom/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/doom/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/doom/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/doom/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_draw.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5LDAsMCwyLjE0MjksLTgyNi4zNiwtMTEwNy41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzg4OWU5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVlYTVmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC40MTk5OTg3NCIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjMyLjAyIiB4Mj0iMzIuMDIiIHkxPSIyLjA0MyIgeTI9IjYyLjA0NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmU4MDAyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZDAwNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIzMiIgeDI9IjMyIiB5MT0iNyIgeTI9IjU3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2Y1ZDIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQ1LjUwMSIgeDI9IjQ1LjUwMSIgeTE9IjcuMTA1NSIgeTI9IjI5Ljg5NiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmVmY2ViIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZjZjllNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NSIvPgogIDwvZmlsdGVyPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjM4LjA2NiIgY3k9IjI2LjE5MiIgcj0iMjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLS44IDNlLTggLTEuOTI2NWUtOCAtLjk0MDM0IDgwLjQ1MyAzOC42MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTM1M2MiIHN0b3Atb3BhY2l0eT0iLjQ4NTM4IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5MTkxOSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjExODAuMiIgeDI9IjExODAuMiIgeTE9IjY4OC41MyIgeTI9IjY1OC4xMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNjA2MDUgMCAwIC42MDY2OCAtNjkwLjg3IC0zODIuOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmN2IzZCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMTRlNGUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMTA1NyIgeDI9IjEwNTciIHkxPSItMTA3My42IiB5Mj0iLTExMjEuNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNDk5OTkgMCAwIC0uNSAtNDkxLjk5IC01MTMuODIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkMDQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWM0YTAwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjExNjIuNiIgeDI9IjExNjIuNiIgeTE9IjkwMS4xNiIgeTI9Ijg4Ny40MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMzNDksMCwwLDEuMjU2OSwtMTUyMy43LC0xMDg3LjcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMWI4MTgiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYTY0IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImoiIHg9Ii0uMDc5NzUzIiB5PSItLjA5NzQ3NiIgd2lkdGg9IjEuMTU5NSIgaGVpZ2h0PSIxLjE5NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43MzEwNjYyNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzk5OTk5OTkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJsIiB4PSItLjA2MDAzMSIgeT0iLS4wNTk5NjkiIHdpZHRoPSIxLjEyMDEiIGhlaWdodD0iMS4xMTk5IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjUwMDI1NTI1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9InVybCgjZykiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbC1vcGFjaXR5PSIwIi8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZikiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zNyAyNy4wMWExMCAxMC4wMSAwIDAgMS0xMCAxMC4wMSAxMCAxMC4wMSAwIDAgMS0xMC0xMC4wMSAxMCAxMC4wMSAwIDAgMSAxMC0xMC4wMSAxMCAxMC4wMSAwIDAgMSAxMCAxMC4wMXoiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCBkPSJtMzcgMjcuMDFhMTAgMTAuMDEgMCAwIDEtMTAgMTAuMDEgMTAgMTAuMDEgMCAwIDEtMTAtMTAuMDEgMTAgMTAuMDEgMCAwIDEgMTAtMTAuMDEgMTAgMTAuMDEgMCAwIDEgMTAgMTAuMDF6IiBmaWxsPSJ1cmwoI2kpIi8+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICA8cGF0aCBkPSJtMzIgMzloMTZ2LTE2aC0xNnoiIGZpbHRlcj0idXJsKCNtKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPHBhdGggZD0ibTMyIDM5aDE2di0xNmgtMTZ6IiBmaWxsPSJ1cmwoI2gpIi8+CiAgPHBhdGggZD0ibTM5IDQ1aC0yMmwxMS0xOHoiIGZpbHRlcj0idXJsKCNqKSIgb3BhY2l0eT0iLjI1IiBzdHJva2U9IiNjOTljMDAiLz4KICA8cGF0aCBkPSJtMzkgNDVoLTIybDExLTE4eiIgZmlsbD0idXJsKCNhKSIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMSkiIGZpbGw9IiM5MmUyODUiIHN0cm9rZT0iIzE4YTMwMyI+CiAgPHJlY3QgeD0iMTUuNSIgeT0iNDMuNSIgd2lkdGg9IjMiIGhlaWdodD0iMyIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgeD0iMzcuNSIgeT0iNDMuNDk3IiB3aWR0aD0iMyIgaGVpZ2h0PSIzLjAwMyIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgeD0iMjYuNSIgeT0iMjUuNSIgd2lkdGg9IjMiIGhlaWdodD0iMy4wMDMiIG9wYWNpdHk9Ii43NSIvPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"draw,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-draw.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-draw\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--draw\"\nLABEL oc.name=\"draw\"\nLABEL oc.displayname=\"Draw\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.graphics-template;application/vnd.sun.xml.draw;application/vnd.sun.xml.draw.template;application/vnd.visio;application/x-wpg;application/vnd.ms-publisher;image/x-freehand;application/x-pagemaker;\"\nLABEL oc.fileextensions=\"odp;otg\"\nLABEL oc.legacyfileextensions=\"odp;otg\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"draw\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--draw\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/draw/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/draw/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/draw/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/draw/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_drawio.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iQ2FsY3VsYXRvciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTQzNSIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjUyMC4zMiIgeDI9IjUyMC4zMiIgeTE9Ii0xMzguNDYiIHkyPSIxNDg0LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2MzYzMyAwIDAgLjA2MzYzMyAtLjU2NzYxIC0uNTM4OTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRhNjQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmI3YzM4IiBvZmZzZXQ9Ii4zNTE1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmI3YzM4IiBvZmZzZXQ9Ii40NDk3NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjM0ZjE3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzYzMyAwIDAgLjA2MzYzMyAtLjU2NzYxIC0uNTM4OTcpIiBkPSJtOTgzLjI1IDUxMS4zNWMwLTcuOTUtMC4yLTE1Ljg1LTAuNS0yMy41NXEtOC0xODAuMTUtMTM3LjU1LTMwOS44NWMtOTIuMDUtOTItMjAzLjItMTM4LjA1LTMzMy40LTEzOC4wNS0xMzAuMTUgMC0yNDEuMzUgNDYuMDUtMzMzLjM1IDEzOC4wNS05Mi4wNSA5Mi0xMzguMSAyMDMuMi0xMzguMSAzMzMuNCAwIDEzMC4xNSA0Ni4wNSAyNDEuMzUgMTM4LjEgMzMzLjM1IDg2LjE1IDg2LjMgMTg5LjM1IDEzMi4xNSAzMDkuMTUgMTM3LjYgOCAwLjMgMTYgMC41IDI0LjIgMC41IDEzMC4yIDAgMjQxLjM1LTQ2LjEgMzMzLjQtMTM4LjEgOTItOTIgMTM4LjA1LTIwMy4yIDEzOC4wNS0zMzMuMzV6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiLz4KIDxwYXRoIGQ9Im02MiAzMmMwLTAuNTA1ODgtMC4wMTI3My0xLjAwODYtMC4wMzE4Mi0xLjQ5ODZxLTAuNTA5MDYtMTEuNDY0LTguNzUyNy0xOS43MTdjLTUuODU3NC01Ljg1NDMtMTIuOTMtOC43ODQ2LTIxLjIxNS04Ljc4NDYtOC4yODE5IDAtMTUuMzU4IDIuOTMwMy0yMS4yMTIgOC43ODQ2LTUuODU3NCA1Ljg1NDMtOC43ODc3IDEyLjkzLTguNzg3NyAyMS4yMTUgMCA4LjI4MTkgMi45MzAzIDE1LjM1OCA4Ljc4NzcgMjEuMjEyIDUuNDgyIDUuNDkxNSAxMi4wNDkgOC40MDkxIDE5LjY3MiA4Ljc1NTkgMC41MDkwNyAwLjAxOTA5IDEuMDE4MSAwLjAzMTgyIDEuNTM5OSAwLjAzMTgyIDguMjg1IDAgMTUuMzU4LTIuOTMzNSAyMS4yMTUtOC43ODc3IDUuODU0My01Ljg1NDMgOC43ODQ2LTEyLjkzIDguNzg0Ni0yMS4yMTJ6IiBmaWxsPSJ1cmwoI2EpIiBzdHJva2Utd2lkdGg9Ii45OTc5NiIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNTg4IDAgMCAxLjA1ODggLTEuODgyNCAtLjMzNTkyKSIgZmlsbD0iI2ZmZiI+CiAgPHJlY3QgeD0iMjUiIHk9IjE1IiB3aWR0aD0iMTQiIGhlaWdodD0iMTEuOCIgcng9IjMiIHJ5PSIzIi8+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxLjU5OTUpIj4KICAgPHJlY3QgeD0iMTUiIHk9IjMyLjY2NCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjExLjgiIHJ4PSIzIiByeT0iMyIvPgogICA8cmVjdCB4PSIzNSIgeT0iMzIuNjc5IiB3aWR0aD0iMTQiIGhlaWdodD0iMTEuOCIgcng9IjMiIHJ5PSIzIi8+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC41OTgxMyAwIDAgLjgxMjMyIDEzLjM2IDQuNTQ1NSkiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyLjg2OTMiPgogICA8cGF0aCBkPSJtMjYuNDUxIDI1Ljc3NC05LjU4ODYgMTIuNDUyIi8+CiAgIDxwYXRoIGQ9Im0zNS44NzcgMjUuNzc0IDkuNTg4NiAxMi40NTIiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"drawio\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"drawio.desktop\"\nLABEL oc.launch=\"draw.io.draw.io\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"drawio\"\nLABEL oc.displayname=\"draw.io\"\nLABEL oc.path=\"/opt/drawio/drawio\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.jgraph.mxfile;application/vnd.visio;\"\nLABEL oc.fileextensions=\"drawio\"\nLABEL oc.legacyfileextensions=\"drawio\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"drawio\"\nENV APPBIN \"/opt/drawio/drawio\"\nENV APP \"/opt/drawio/drawio\"\nRUN apt-get update && curl -Ls 'https://github.com/jgraph/drawio-desktop/releases/download/v20.3.0/drawio-amd64-20.3.0.deb' -o /tmp/drawio-amd64.deb && apt-get install --yes --no-install-recommends /tmp/drawio-amd64.deb && rm /tmp/drawio-amd64.deb && rm -rf /var/lib/apt/lists/*\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/drawio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/drawio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/drawio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/drawio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN # curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -\nRUN echo \"deb [arch=$(dpkg --print-architecture)] https://packages.microsoft.com/repos/edge stable main\" > /etc/apt/sources.list.d/edge.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends microsoft-edge-stable && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_microsoft-edge.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MzIiIHgxPSIxMS43ODgiIHgyPSI1Mi43NDkiIHkxPSIyNS4xMDYiIHkyPSIyNS4xMDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMjAyIDAgMCAxLjAyMDIgLS45MjE0NiAtLjY2MzU1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDBiZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVmZGU1NiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTQwIiB4MT0iMTEuODA0IiB4Mj0iMzAuNzQzIiB5MT0iMzYuMjU0IiB5Mj0iMzYuMjU0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDIwMiAwIDAgMS4wMjAyIC0uOTIxNDYgLS42NjM1NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAwNzhkNCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMDhkZGMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0OCIgeDE9IjIxLjE4MiIgeDI9IjQ5LjcxMiIgeTE9IjQwLjI0MyIgeTI9IjQwLjI0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAyMDIgMCAwIDEuMDIwMiAtLjkyMTQ2IC0uNjYzNTUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwYjRlOTAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMGQ1NTlkIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk4MC02IiB4PSItLjE1NzE3IiB5PSItLjA4MjI2NSIgd2lkdGg9IjEuMzE0MyIgaGVpZ2h0PSIxLjE2NDUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTUxNTE0OCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk2OS03IiB4PSItLjA3OTQyMSIgeT0iLS4xNjg3IiB3aWR0aD0iMS4xNTg4IiBoZWlnaHQ9IjEuMzM3NCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44NjA1MzI0NyIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjkwOC01IiB4PSItLjEwOCIgeT0iLS4xMDgiIHdpZHRoPSIxLjIxNiIgaGVpZ2h0PSIxLjIxNiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS44ODA1MTkyIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDA4LjI1IiB4Mj0iNDA3Ljk0IiB5MT0iNTQ3LjYiIHkyPSI0OTguODkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4zMjc2LDAsMCwxLjMyNzYsLTUxMC42NCwtNjYzLjUyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44ODk3MjQ0OSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPHBhdGggZD0ibTMxLjk5OCAxMi4yNDhjLTExLjQyNi0wLjAwMTEtMjAuNzMyIDkuMTcyOC0yMC44OTMgMjAuNTk2IDAuMDA2My0wLjQ4MzIyIDAuMDYzODgtMC45NjA3IDAuMTQ0NTMtMS40MzU1LTAuMDc0NjggMC40ODk0NC0wLjEyNjk1IDAuOTc4MzctMC4xMjY5NSAxLjQ2MDktMC4wMjgyNiAzLjE1NTYgMC42NDY4MiA2LjI3NjcgMS45NzY2IDkuMTM4NyA0LjQ5ODMgOS41OTY1IDE1LjQ3MiAxNC4zMDUgMjUuNTI3IDEwLjk1My0wLjE4MTY4IDAuMDU3MjgtMC4zNzU5NyAwLjA5MjA0LTAuNTYyNSAwLjE0MDYyIDAuMTgyOTgtMC4wNDkxNyAwLjM4Mjk3LTAuMDk2NiAwLjU0MTAyLTAuMTQ2NDhsMC4yMTQ4NC0wLjA3MjI3YzQuNDk3NS0xLjU1NDYgOC4zMzE0LTQuNTkzNSAxMC44NzEtOC42MTcyIDAuMzYyNzMtMC41NzE0Mi0wLjI3NzQ2LTEuMjQ4Ni0wLjg2OTE0LTAuOTE5OTItMi4wMDI0IDEuOTcwMS01LjEwOCAyLjQzNzEtNy41ODAxIDIuNDQ5Mi03LjcyNDIgMC0xNC40NTMtNS45Mzg1LTE0LjQ1My0xMi43NTYgMC4wMjAxNC0xLjg2MTkgMS4wNDc5LTMuNTY2OSAyLjY4MzYtNC40NTcgMC41MDkyOS0wLjIzOTkyIDEuMzc3OC0wLjY3NTUyIDIuNTM1Mi0wLjY1NDMgMS42NTI5IDAuMDEyMDkgMy4yMDQ3IDAuNzk4NTQgNC4xOTM0IDIuMTIzIDAuNDQ5MTMgMC41OTk2IDAuNzUwMTYgMS4yODc3IDAuOTA4MiAyLjAxMTcgMC4wNDQxNyAxLjI4MDktMC4zMTMwMyAyLjQ3NjctMS4xMzg3IDMuNTU0Ny0wLjEzMjIyIDAuMTcxMzctMC41MzkwNiAwLjQwODA4LTAuNTM5MDYgMC45MjM4MyAwIDAuNDI1OTggMC4yNzY1NyAwLjgzNTMxIDAuNzY5NTMgMS4xNzk3IDIuMzQ3MyAxLjYzMjEgNi43NzM3IDEuNDE4IDYuNzg1MiAxLjQxOCAxLjczOTMtMC4wMDQyIDMuNDQ2LTAuNDc1MjcgNC45NDE0LTEuMzYzMyAzLjA2OTctMS43OTIyIDQuOTU5NS00LjE1MDkgNC45NjY4LTcuNzA1MSAwLjA0MjQzLTMuNjU3Ni0xLjMwNjQtNi4wOTA4LTEuODUxNi03LjE2OC0zLjQ1ODktNi43NjUxLTEwLjkyNi0xMC42NTQtMTkuMDQ1LTEwLjY1NHptNS4zOTQ1IDQxLjAyMWMtMC4wNTM2NyAwLjAxMDczLTAuMTA2MiAwLjAyMzE2LTAuMTYwMTYgMC4wMzMyIDAuMDUyODgtMC4wMTE0OCAwLjEwODA2LTAuMDIxNDUgMC4xNjAxNi0wLjAzMzJ6IiBmaWx0ZXI9InVybCgjZmlsdGVyOTA4LTUpIiBvcGFjaXR5PSIuMiIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0ibTQ4LjgyMyA0Mi41OTljLTIuMDAyNCAxLjk3MDEtNS4xMDg1IDIuNDM3Ny03LjU4MDYgMi40NDk5LTcuNzI0MiAwLTE0LjQ1My01LjkzOTMtMTQuNDUzLTEyLjc1NyAwLjAyMDE0LTEuODYxOSAxLjA0NjItMy41NjcyIDIuNjgxOS00LjQ1NzMtNi45ODY0IDAuMjkzNzgtOC43ODIgNy41NzMtOC43ODIgMTEuODM4IDAgMTIuMDU4IDExLjExNSAxMy4yODEgMTMuNTA5IDEzLjI4MSAxLjI5MTIgMCAzLjIzODYtMC4zNzUzOSA0LjQwNzMtMC43NDQyNGwwLjIxMzg0LTAuMDcxODFjNC40OTc1LTEuNTU0NiA4LjMzMTYtNC41OTM5IDEwLjg3MS04LjYxNzYgMC4zNjI3My0wLjU3MTQxLTAuMjc2NzItMS4yNDkyLTAuODY4NC0wLjkyMDUxeiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDk0OCkiIHN0cm9rZS13aWR0aD0iLjc0NjI4Ii8+CiA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Im0yNy43MzcgNTAuOTAzYy0xLjQ1NTktMC45MDM1NC0yLjcxNzctMi4wODc1LTMuNzExOS0zLjQ4MjktNC44MjQzLTYuNjA4Ny0xLjg5MzYtMTUuOTcgNS40NDctMTkuNTg1IDAuNTA5MjktMC4yMzk5MiAxLjM3OTMtMC42NzQwNiAyLjUzNjctMC42NTI4NCAxLjY1MjkgMC4wMTIwOSAzLjIwNDggMC43OTcyNCA0LjE5MzUgMi4xMjE3IDAuNjU5MTggMC44ODAwMSAxLjAyMjYgMS45NDYyIDEuMDM4MiAzLjA0NTUgMC0wLjAzNDI3IDMuOTkyNy0xMi45OTItMTMuMDU5LTEyLjk5Mi03LjE2NiAwLTEzLjA1OSA2Ljc5OTQtMTMuMDU5IDEyLjc2NS0wLjAyODI2IDMuMTU1NiAwLjY0NzAxIDYuMjc3OSAxLjk3NjggOS4xMzk4IDQuNDk4MyA5LjU5NjUgMTUuNDcxIDE0LjMwNSAyNS41MjYgMTAuOTUzLTMuNDQyNCAxLjA4NTItNy44MTQzIDAuNjA4MDYtMTAuODc1LTEuMzA1N3oiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5NDApIiBzdHJva2Utd2lkdGg9Ii43NDYyOCIvPgogPHBhdGggZD0ibTI0LjE2NCAyMC42MDJjLTYuNDgxMSAwLTEyIDQuNjc2MS0xMi45MTQgMTAuMDYyLTAuMDg0NiAwLjcxNjI5LTAuMTM0MTcgMS40NDI4LTAuMTQ0NTMgMi4xNzk3IDAuMDc4MzYtNS45NjM3IDYuMDA2OS0xMS40OTYgMTMuMDU5LTExLjQ5NiAwLjU3MTMyIDAgMy44MjkxIDAuMDU0NTMgNi44NTU1IDEuNjQyNiAyLjY2NzIgMS40MDA0IDQuMDY1OSAzLjgwODIgNS4wMzcxIDUuNDg0NCAwLjYyNzI0IDEuMTgzNCAwLjk3MDYyIDIuMzE5OSAxLjA0MSAzLjQwMDQgMC4wODE0NS0xLjI5NjUtMC4yNjk2MS0yLjY4NzQtMS4wNDMtNC4xNDY1LTAuOTcxMjQtMS42NzYyLTIuMzY3OS00LjA4NC01LjAzNTItNS40ODQ0LTMuMDI2NC0xLjU4ODEtNi4yODQyLTEuNjQyNi02Ljg1NTUtMS42NDI2eiIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjk2OS03KSIgb3BhY2l0eT0iLjM1IiBzdHJva2Utd2lkdGg9Ii43NDYyOCIvPgogPHBhdGggZD0ibTI0Ljc5NSAxOS4xOTFjLTEuMDgyOSAwLTIuMTMxOCAwLjE3MDg2LTMuMTQwNiAwLjQ1NTA4IDAuODE4ODItMC4xODQyOCAxLjY2MzQtMC4yODkwNiAyLjUyNzMtMC4yODkwNiAxMy4xMTEgMCAxMy43NzYgNy42NDI5IDEzLjM4NSAxMS4xOTkgMC4xODAxIDAuNTIwNiAwLjI3OTIyIDEuMDY5MyAwLjI4NzExIDEuNjI3IDAtMC4wMzQyNyAzLjk5MjgtMTIuOTkyLTEzLjA1OS0xMi45OTJ6bTYuMTc5NyA4LjEwMzVjLTAuNjQ0MjUgMC4xMzk2NC0xLjE2MDMgMC4zODAwNS0xLjUwMiAwLjU0MTAyLTcuMzQwNiAzLjYxNTUtMTAuMjcyIDEyLjk3NS01LjQ0NzMgMTkuNTg0IDAuOTk0MjMgMS4zOTU1IDIuMjU1IDIuNTgwOCAzLjcxMDkgMy40ODQ0bDAuMDE1NjMgMC4wMDU5YzMuMDYwMiAxLjkxMzcgNy40MzI2IDIuMzg5OSAxMC44NzUgMS4zMDQ3LTAuNDQ4MjggMC4xNDk0MS0wLjkwMDI5IDAuMjYzMi0xLjM1MTYgMC4zODA4NiAwLjY1NjY3LTAuMTUwMjggMS4zMTE5LTAuMzI5OSAxLjk2MjktMC41NDY4OC0zLjQ0MjQgMS4wODUyLTcuODEyOCAwLjYwOTA2LTEwLjg3My0xLjMwNDdsLTAuMDE1NjMtMC4wMDc4Yy0xLjQ1NTktMC45MDM1NC0yLjcxNjctMi4wODY5LTMuNzEwOS0zLjQ4MjQtNC44MjQzLTYuNjA4Ny0xLjg5NTMtMTUuOTcgNS40NDUzLTE5LjU4NiAwLjIyNDg5LTAuMTA1OTQgMC41MzEzNy0wLjI0NzI5IDAuODkwNjItMC4zNzMwNXoiIGZpbHRlcj0idXJsKCNmaWx0ZXI5ODAtNikiIG9wYWNpdHk9Ii4zNSIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KIDxwYXRoIGNsYXNzPSJjbHMtNSIgZD0ibTM1Ljk3IDM0Ljg3MmMtMC4xMzIyMiAwLjE3MTM3LTAuNTM4NjcgMC40MDgwMy0wLjUzODY3IDAuOTIzNzggMCAwLjQyNTk4IDAuMjc3NSAwLjgzNTY0IDAuNzcwNDYgMS4xOCAyLjM0NzMgMS42MzIxIDYuNzcyNiAxLjQxNjcgNi43ODQgMS40MTY3IDEuNzM5My0wLjAwNDIgMy40NDU2LTAuNDc0OCA0Ljk0MTEtMS4zNjI4IDMuMDY5Ny0xLjc5MjIgNC45NTk5LTQuMTUxNSA0Ljk2NzItNy43MDU3IDAuMDQyNDQtMy42NTc2LTEuMzA1OS02LjA4OTQtMS44NTExLTcuMTY2Ni0zLjQ1ODktNi43NjUxLTEwLjkyNS0xMC42NTYtMTkuMDQ0LTEwLjY1Ni0xMS40MjYtMC4wMDExLTIwLjczMyA5LjE3NDQtMjAuODk0IDIwLjU5NyAwLjA3ODM2LTUuOTYzNyA2LjAwNy0xMS40OTcgMTMuMDU5LTExLjQ5NyAwLjU3MTMyIDAgMy44Mjk1IDAuMDU1NDkgNi44NTU4IDEuNjQzNSAyLjY2NzIgMS40MDA0IDQuMDY0NSAzLjgwNzkgNS4wMzU4IDUuNDg0MSAxLjQxMTcgMi42NjMzIDEuNDcyNCA1LjEwOTQtMC4wODQ4OCA3LjE0MjZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTMyKSIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"edge,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"microsoft-edge.desktop\"\nLABEL oc.launch=\"microsoft-edge.Microsoft-edge\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"edge\"\nLABEL oc.displayname=\"Microsoft Edge\"\nLABEL oc.path=\"/usr/bin/microsoft-edge-stable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"edge\"\nENV APPBIN \"/usr/bin/microsoft-edge-stable\"\nENV APP \"/usr/bin/microsoft-edge-stable\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/edge/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/edge/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/edge/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/edge/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.elementary:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends io.elementary.terminal io.elementary.stylesheet && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"elementary.terminal,terminal,bash,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"io.elementary.terminal.desktop\"\nLABEL oc.launch=\"io.elementary.terminal.Io.elementary.terminal\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.elementary\"\nLABEL oc.name=\"elementary.terminal\"\nLABEL oc.displayname=\"elementary.terminal\"\nLABEL oc.path=\"/usr/bin/io.elementary.terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"elementary.terminal\"\nENV APPBIN \"/usr/bin/io.elementary.terminal\"\nENV APP \"/usr/bin/io.elementary.terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/elementary.terminal/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/elementary.terminal/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/elementary.terminal/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/elementary.terminal/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update eog\nLABEL oc.icon=\"circle_eog.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iUHJldmlldyIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkN2Q3ZDciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4wMzE4IiB5PSItLjA0MTQ3OCIgd2lkdGg9IjEuMDYzNiIgaGVpZ2h0PSIxLjA4MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNy4yMjIxNTUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMTQ2NSIgeT0iLS4wNDIwNjMiIHdpZHRoPSIxLjA2MjkiIGhlaWdodD0iMS4wODQxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI2LjQyNjIxIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iNTE5LjIiIHgyPSI1MTkuMiIgeTE9IjEwMjQuOCIgeTI9IjQuOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk3MjQgMCAwIC45OTcxOSAuOTEwNzcgMS45NjI4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQxNDE0MSIgb2Zmc2V0PSIuMDE5NTUxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMTEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iNTM4LjU2IiB4Mj0iNTM4LjU2IiB5MT0iLTIxLjEzIiB5Mj0iOTY0LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0NzkuMSIgeDI9IjQ4MC41OSIgeTE9Ii0yOC44NDEiIHkyPSI5NjQuMzciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xMTUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImkiIHgxPSI0NDguNzciIHgyPSI0ODEuNTgiIHkxPSI0MTguNCIgeTI9Ijc2NS44NCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMmM1YmUwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYzYTVmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI1MzguMDQiIHgyPSI1MzguMDQiIHkxPSIyNzguNjIiIHkyPSI2MDIuNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMmQ1N2NkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzUyOTRlZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCAtLjY3OCkiPgogIDxwYXRoIGQ9Im03OTcuNzEgMTM5LjEzcS02MC41MzMtNDYuNjE5LTEzMi40My03MS40NDktNzQuMjk1LTI1LjY3OC0xNTMuNzMtMjUuNjc4Yy0yNTkuODggMC00NzAuNTUgMjEwLjY2LTQ3MC41NSA0NzAuNTIgMCAyMzcuNzMgMTc2LjM2IDQzNC4xOCA0MDUuMzMgNDY1Ljk0IDExLjE2OSAxLjU0NTYgMjIuNDg4IDIuNzQyMyAzMy44NTYgMy40NDAzIDEwLjM3MSAwLjY0ODE3IDIwLjc5MyAxLjA5NjkgMzEuMzYzIDEuMDk2OSAyNTkuODMgMCA0NzAuNDUtMjEwLjY2IDQ3MC40NS00NzAuNDggMC0yMC41NDItMS4yOTY0LTQwLjgzNS0zLjgzOTQtNjAuNjI5LTIuOTQxOS0yMy4xMzUtNy43Mjg2LTQ1LjYyMi0xMy44NjItNjcuNTFxLTIwLjg0Mi03My41NDMtNjQuMDIzLTEzNi44Ni00Mi42ODItNjIuMzc0LTEwMi41Ny0xMDguMzl6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS42NCIvPgogIDxwYXRoIGQ9Im03OTcuNzEgMTM5LjEzcS02MC41MzMtNDYuNjE5LTEzMi40My03MS40NDktNzQuMjk1LTI1LjY3OC0xNTMuNzMtMjUuNjc4Yy0yNTkuODggMC00NzAuNTUgMjEwLjY2LTQ3MC41NSA0NzAuNTIgMCAyMzcuNzMgMTc2LjM2IDQzNC4xOCA0MDUuMzMgNDY1Ljk0IDExLjE2OSAxLjU0NTYgMjIuNDg4IDIuNzQyMyAzMy44NTYgMy40NDAzIDEwLjM3MSAwLjY0ODE3IDIwLjc5MyAxLjA5NjkgMzEuMzYzIDEuMDk2OSAyNTkuODMgMCA0NzAuNDUtMjEwLjY2IDQ3MC40NS00NzAuNDggMC0yMC41NDItMS4yOTY0LTQwLjgzNS0zLjgzOTQtNjAuNjI5LTIuOTQxOS0yMy4xMzUtNy43Mjg2LTQ1LjYyMi0xMy44NjItNjcuNTFxLTIwLjg0Mi03My41NDMtNjQuMDIzLTEzNi44Ni00Mi42ODItNjIuMzc0LTEwMi41Ny0xMDguMzl6IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjE1LjY0Ii8+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjkzNTcxIDAgMCAuOTM1NzEgNDQuMTE2IDg3LjczMSkiIGZpbHRlcj0idXJsKCNnKSIgb3ZlcmZsb3c9InZpc2libGUiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgIDxnIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgICAgPHBhdGggZD0ibTc4OC4zMiA1ODAuNjZ2LTM2Ni41N2wtNDkwLjE3LTAuMDkydjM2Ni41N3oiIGZpbGw9IiMxZDFkMWIiIGZpbGwtb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgICAgPC9nPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im03NTcuNjggNjAyLjQgMC4wODYtMzIzLjY5LTQzOS4zNi0wLjA4NjEtMC4wODYxIDMyMy43N3oiIGZpbGw9InVybCgjZCkiIHN0cm9rZS13aWR0aD0iMTQuNjc1Ii8+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjkzNTcxIDAgMCAuOTM1NzEgNDQuMTE2IDg3LjczMSkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTc3Mi45OCA1NjAuNDJ2LTM2Ni42MmwtNDkwLjI0LTAuMDkydjM2Ni42MnptLTIwLjY5NS0yMC42OTQtNDQ4Ljg1LTAuMDkydi0zMjUuMjNsNDQ4Ljg1IDAuMDkyeiIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiLz4KICAgPC9nPgogIDwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTM1NzEgMCAwIC45MzU3MSA0NC4xMTYgODcuNzMxKSIgZmlsdGVyPSJ1cmwoI2gpIiBvdmVyZmxvdz0idmlzaWJsZSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgICA8cGF0aCBkPSJtNzYxLjI3IDY5Ny43OS0zOC4yNTctMzY0LjY0LTUwNi44MSA1My4yNDcgMzguMzQ5IDM2NC42NHoiIGZpbGw9IiMxZDFkMWIiIGZpbGwtb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgICAgPC9nPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im0yMzcuMTYgNDQzLjg3IDMzLjgyMyAzMjEuOTcgNDU1LjAyLTQ3Ljc2NS0zMy45MDktMzIxLjk3eiIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlLXdpZHRoPSIxNC42NzUiLz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTM1NzEgMCAwIC45MzU3MSA0NC4xMTYgODcuNzMxKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8cGF0aCBkPSJtNzQwLjA1IDY4Mi44NC0zOC4yNjMtMzY0LjY5LTUwNi44OCA1My4yNTUgMzguMjYzIDM2NC42OXptLTU2Ljc1LTM0MS44OCAzNC4wMzEgMzIzLjM5LTQ2NS42OCA0OC45MzItMzQuMDMxLTMyMy4zOXoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgIDwvZz4KICA8L2c+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMTUuNjgzIDAgMCAxNS42ODMgOS42MzMzIDEwLjYzMykiIGQ9Im00NCAzNS40MzUtNC4yMDMxIDQuNjI3My0yLjc5My0wLjQzMzU5LTEuOTA4MiAyLjIzMjQtMy42MTcyLTAuNDA2MjUtMy40OTgtMi41OTU3LTQuNTkzOCAzLjc4NzEtMi4wMDk4LTIuMDQzLTQuNjM3MSAyLjM5NjUgMC40NzMgNC40NzIzIDI3Ljc4NC0yLjkxOTR6IiBmaWxsPSIjM2M2OGQ5IiBzdHJva2Utd2lkdGg9Ii45MzU3MSIvPgogPC9nPgogPGNpcmNsZSBjeD0iMzgiIGN5PSIzMS41IiByPSIyLjUiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgb3BhY2l0eT0iLjc1IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiA8cGF0aCBkPSJtNDQgMzUuNDM2LTQuMjAzMSA0LjYyNy0yLjc5My0wLjQzMzU5IDIuOTk2MSAxLjY0MjYgMy00LjI3MTV2MS43MTA5bDEtMy4yNzU0em0tNi45OTYxIDQuMTkzNC0xLjkwODIgMi4yMzI0LTMuNjE3Mi0wLjQwNjI1LTMuNDc4NS0yLjQ1NTEgMyA1IDItMiAyIDEgMi4wMDM5LTMuMzcxMXptLTkuMDIzNC0wLjc2OTUzLTQuNTkzOCAzLjc4NzEtMi4wMDk4LTIuMDQzIDEuOTc4NSA0LjM5NjUgNC42MjUtNi4xNDA2em0tNi42MDM1IDEuNzQ0MS00LjYzNjcgMi4zOTY1IDAuMTU4MiAxLjQ4NDQgMC4xMDE1Ni0wLjA2MDU0NyAxLjY0NDUtMS44NDc3IDAuMTAxNTYgMS4xMzQ4IDIuNjMwOS0zLjEwNzR6IiBvcGFjaXR5PSIuMDUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"eog,eog,image,gif,tiff,png,jpeg,bmp,tga,pcx,bitmap,jpg,pixmap\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.gnome.eog.desktop\"\nLABEL oc.launch=\"eog.Eog\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"eog\"\nLABEL oc.displayname=\"eog\"\nLABEL oc.path=\"/usr/bin/eog\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/gif;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-tga;image/x-xbitmap;image/jpeg;image/png;image/x-icon;image/x-xpixmap;image/x-xcursor;\"\nLABEL oc.fileextensions=\"ani;bmp;gif;ico;jpg;jpeg;pcx;png;pnm;ras;svg;tga;tif;tiff;wbmp;xbm;xpm\"\nLABEL oc.legacyfileextensions=\"ani;bmp;gif;ico;jpg;jpeg;pcx;png;pnm;ras;svg;tga;tif;tiff;wbmp;xbm;xpm\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"eog\"\nENV APPBIN \"/usr/bin/eog\"\nENV APP \"/usr/bin/eog\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/eog/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/eog/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/eog/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/eog/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update evince\nLABEL oc.icon=\"circle_acroread.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMjkuOTY0IiB4Mj0iMjkuOTY0IiB5MT0iMi42OTE0IiB5Mj0iNjEuOTk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC00LjczNTEgMCAwIDQuNzQxIDkzLjYxMSAtNDkwNC41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYzYxNDIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RjMmI0MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMiIgeDI9IjMyIiB5MT0iMiIgeTI9IjYyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNzE1OSA5LjIxOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYmU1ZTUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMTkuMjg5IiB4Mj0iMTkuMjg5IiB5MT0iMi43OTg4IiB5Mj0iMjcuNDQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNSAwIDAgMS41IC01NzUuNTcgLTc1My43NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5N2NmMSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMGJjZmEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZSIgeD0iLS4wMzcwOTYiIHk9Ii0uMDM0OTY2IiB3aWR0aD0iMS4wNzQyIiBoZWlnaHQ9IjEuMDY5OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44NjQwNzc2MiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU0OTY0IiB5PSItLjAyNjc2NSIgd2lkdGg9IjEuMTA5OSIgaGVpZ2h0PSIxLjA1MzUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMjc0ODE5MzMiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mjc0NSAwIDAgLjA2Mjc0NSAtLjEyNTQ5IC0uMTI1NDkpIiBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzguMTIiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjkzOCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPHBhdGggZD0ibTM4LjU4OCAyLjY5MTRjLTE4LjIzMyAxNC45NTktMzAuMTE2IDE4Ljk5OS0zNS4xMzkgMTkuODUtMC42NDQzMiAxLjk4NDMtMS4wNzkzIDQuMDU1My0xLjI5MSA2LjIxODggMy4wMjA1LTAuNDE2OSAxMC4yNjctMS44MDY2IDE4LTYuNDU3IDEwLjA2OC02LjA1NTIgMjIuMTA1LTE3LjU1MSAyMi4xMDUtMTcuNTUxLTMuMjgyNyA2LjE4MjgtNC4zMDY3IDI4LjU4NS00LjM4MDkgNTYuNzEzIDAuMDY2NjEtMC4wMTI0NSAwLjEzNjg3LTAuMDIwMzQgMC4yMDMxMy0wLjAzMzIgMC41MDUyOS0wLjA5ODUxIDEuMDAzMy0wLjIxMDU0IDEuNDg2My0wLjMyODEyIDUuMTM1Ni0xLjI5MDMgOS42Njk5LTMuOTE2MyAxMy42NDMtNy44ODg3IDEuODY1Ny0xLjg2NTcgMy40Mjk3LTMuODU1OSA0LjcwMTItNS45Njg4LTEuNzY0Mi01Ljg1Ny0zLjE1MzctMTIuMjc1LTQuMzA0Ny0xOC4yNzMtMC45MjA0Ni02LjcwNjgtMC41NTAwMy0xMi44ODYgMC4xMDE1Ni0xNy42NTYtMC4xNjc5Mi0wLjE3NTE4LTAuMzIzMDYtMC4zNTYyNy0wLjQ5NjA5LTAuNTI5My00LjIzNC00LjIzNC05LjExNTUtNi45MjIyLTE0LjYyOS04LjA5NTd6bS0zNi41NzQgMjkuOTA0YzAuMDQwMzczIDIuMzQyOSAwLjMxMDU3IDQuNTkwMSAwLjgyNjE3IDYuNzM2MyA4LjQ2NTUgMC41Njc3MSAyMS4xNTcgOS41MTE1IDI3LjE5NyAyMi42MDcgMC4wNjM3MiAwLjAwMzcgMC4xMjU1OCAwLjAxMjI3IDAuMTg5NDUgMC4wMTU2M2gwLjAyNTM5YzAuNTQwMjUgMC4wMjg2IDEuMDU0NSAwLjA0NDkyIDEuNTU2NiAwLjA0NDkyaDAuMTkxNDFjMC42NTQ2OSAwIDEuMzAxOS0wLjAxOSAxLjkxMjEtMC4wNTA3OCAwLjE1ODktMC4wMDk1IDAuMzAxNTgtMC4wMTk3NyAwLjQ0MTQxLTAuMDI5MyAwLjQxMjM2LTAuMDI5NiAwLjgxNTc1LTAuMDc4NTggMS4yMjA3LTAuMTIzMDUtNC43MTMyLTEzLjc0MS0yNy4xMTQtMjkuMTgxLTMzLjU2MS0yOS4yMDF6IiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0zOC41ODggMi42OTE0Yy0xOC4yMzMgMTQuOTU5LTMwLjExNiAxOC45OTktMzUuMTM5IDE5Ljg1LTAuNjQ0MzIgMS45ODQzLTEuMDc5MyA0LjA1NTMtMS4yOTEgNi4yMTg4IDMuMDIwNS0wLjQxNjkgMTAuMjY3LTEuODA2NiAxOC02LjQ1NyAxMC4wNjgtNi4wNTUyIDIyLjEwNS0xNy41NTEgMjIuMTA1LTE3LjU1MS0zLjI4MjcgNi4xODI4LTQuMzA2NyAyOC41ODUtNC4zODA5IDU2LjcxMyAwLjA2NjYxLTAuMDEyNDUgMC4xMzY4Ny0wLjAyMDM0IDAuMjAzMTMtMC4wMzMyIDAuNTA1MjktMC4wOTg1MSAxLjAwMzMtMC4yMTA1NCAxLjQ4NjMtMC4zMjgxMiA1LjEzNTYtMS4yOTAzIDkuNjY5OS0zLjkxNjMgMTMuNjQzLTcuODg4NyAxLjg2NTctMS44NjU3IDMuNDI5Ny0zLjg1NTkgNC43MDEyLTUuOTY4OC0xLjc2NDItNS44NTctMy4xNTM3LTEyLjI3NS00LjMwNDctMTguMjczLTAuOTIwNDYtNi43MDY4LTAuNTUwMDMtMTIuODg2IDAuMTAxNTYtMTcuNjU2LTAuMTY3OTItMC4xNzUxOC0wLjMyMzA2LTAuMzU2MjctMC40OTYwOS0wLjUyOTMtNC4yMzQtNC4yMzQtOS4xMTU1LTYuOTIyMi0xNC42MjktOC4wOTU3em0tMzYuNTc0IDI5LjkwNGMwLjA0MDM3MyAyLjM0MjkgMC4zMTA1NyA0LjU5MDEgMC44MjYxNyA2LjczNjMgOC40NjU1IDAuNTY3NzEgMjEuMTU3IDkuNTExNSAyNy4xOTcgMjIuNjA3IDAuMDYzNzIgMC4wMDM3IDAuMTI1NTggMC4wMTIyNyAwLjE4OTQ1IDAuMDE1NjNoMC4wMjUzOWMwLjU0MDI1IDAuMDI4NiAxLjA1NDUgMC4wNDQ5MiAxLjU1NjYgMC4wNDQ5MmgwLjE5MTQxYzAuNjU0NjkgMCAxLjMwMTktMC4wMTkgMS45MTIxLTAuMDUwNzggMC4xNTg5LTAuMDA5NSAwLjMwMTU4LTAuMDE5NzcgMC40NDE0MS0wLjAyOTMgMC40MTIzNi0wLjAyOTYgMC44MTU3NS0wLjA3ODU4IDEuMjIwNy0wLjEyMzA1LTQuNzEzMi0xMy43NDEtMjcuMTE0LTI5LjE4MS0zMy41NjEtMjkuMjAxeiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYykiLz4KIDxwYXRoIGQ9Im0yNS4yODkgMi43OTg4YTMwIDMwIDAgMCAwLTEyIDUuNzU1OXYxOC44ODdsNi0zLjQ2NDggNiAzLjQ2NDh2LTI0LjY0M3oiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCBkPSJtMjUuMjg5IDIuNzk4OGEzMCAzMCAwIDAgMC0xMiA1Ljc1NTl2MTguODg3bDYtMy40NjQ4IDYgMy40NjQ4di0yNC42NDN6IiBmaWxsPSJ1cmwoI2EpIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"evince,evince,pdf,viewer\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Evince.desktop\"\nLABEL oc.launch=\"evince.Evince\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Evince\"\nLABEL oc.displayname=\"Evince\"\nLABEL oc.path=\"/usr/bin/evince\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/pdf;application/x-bzpdf;application/x-gzpdf;application/x-xzpdf;application/x-ext-pdf;application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps;application/x-ext-ps;application/x-ext-eps;application/x-dvi;application/x-bzdvi;application/x-gzdvi;application/x-ext-dvi;image/vnd.djvu;application/x-ext-djv;application/x-ext-djvu;image/tiff;application/x-cbr;application/x-cbz;application/x-cb7;application/x-cbt;application/x-ext-cbr;application/x-ext-cbz;application/x-ext-cb7;application/x-ext-cbt;application/oxps;application/vnd.ms-xpsdocument;\"\nLABEL oc.fileextensions=\"pdf;ps;dvi;eps;cbt;cbr;cb7;xps\"\nLABEL oc.legacyfileextensions=\"pdf;ps;dvi\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Evince\"\nENV APPBIN \"/usr/bin/evince\"\nENV APP \"/usr/bin/evince\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/evince/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/evince/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/evince/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/evince/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends evolution dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"evolution.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzlhYTI5YSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiNWJlYjUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSI2LjcwMyIgY3k9IjczLjYxNiIgcj0iNy4yMjgiIGdyYWRpZW50VHJhbnNmb3JtPSJzY2FsZSgxLjkwMjIgLjUyNTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgPC9yYWRpYWxHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjguNzgiIHgyPSI5Ljc2MiIgeTE9IjM3Ljc4NSIgeTI9IjMyLjIwMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjM5NDkgMCAwIC43ODEwNiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1vcGFjaXR5PSIuMTI5Ii8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMTEuMjMzIiB4Mj0iMjEuMTEyIiB5MT0iMTMuNjg2IiB5Mj0iMjQuMTMzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzcwOSAwIDAgMS40NDM4IDIuNDMxIC0uMTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlZGVkZWQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSI4LjkxNiIgeDI9IjkuODg2IiB5MT0iMzcuMTk3IiB5Mj0iNTIuMDkxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNDU0OCAwIDAgLjc2MiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjEwLjE4NCIgeDI9IjE1LjMxMSIgeTE9IjE1LjE0OCIgeTI9IjI5LjU2OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjgxOTMgMCAwIDEuMDI4MiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkY2RjZGMiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI1LjgyNyIgeDI9IjEzLjQ2NyIgeTE9IjcuMjMxIiB5Mj0iMTcuODc3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTcwNiAwIDAgMS4xOTEgMi44OCAuMzQzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlZGVkZWQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzhjOGM4Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTEuNTczIiB4Mj0iMTguNDc1IiB5MT0iNC43NDYiIHkyPSIyNi4wMjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4zNDM1IDAgMCAxLjQxNzkgMi44OCAuMzE1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZTJlMmUyIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMi4wNjIiIHgyPSIzMC42IiB5MT0iMTUuMjU3IiB5Mj0iMTUuMjU3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzQzNSAwIDAgMS40MTc5IDIuODggLjMxNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjOTg5NjkwIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzY1NjQ2MCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTI2LjUgMzguN2ExMy43NSAzLjggMCAxIDEtMjcuNSAwIDEzLjc1IDMuOCAwIDEgMSAyNy41IDB6IiBjb2xvcj0iIzAwMCIgb3BhY2l0eT0iLjQ1NiIgdHJhbnNmb3JtPSJtYXRyaXgoMS44MDA2IDAgMCAxLjk3NDggMS4wODQgLTM4LjAxMykiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2MpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0idXJsKCNkKSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuODU3IiBkPSJNNi4zMzMgMTYuOTcydjI0LjUxaDM2Ljk3M2wtLjA2Mi0yNC4zOTJjLS4wMDMtMS4zNzgtMTEuODQ4LTE0LjY3OC0xNC4wMzMtMTQuNjc4SDIwLjY2Yy0yLjI5NyAwLTE0LjMyNiAxMy4yNjItMTQuMzI2IDE0LjU2eiIvPgogIDxwYXRoIGZpbGw9InVybCgjZSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuOTIzIDE2Ljc4N2MtLjM5OC0uNDMgMTEuODg3LTEzLjY5NCAxMy43NDQtMTMuNjk0aDguMzc2YzEuNzQ3IDAgMTQuMDM3IDEzLjEyOCAxMy40MjcgMTMuODg2TDMxLjYxIDMwLjQ3NGwtMTIuMzE1LS4zMTgtMTIuMzcyLTEzLjM3eiIvPgogIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjE0NiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuMDc4IDMwLjAxOGwtNy4zMzMtOC43NDYgMjQuODE4LTYuOTM2IDMuMDI5IDYuMjE2LTcuNDE2IDkuNDQiLz4KICA8cGF0aCBmaWxsLW9wYWNpdHk9Ii4xNDYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE4LjI5MiAyOS44MzZsLTcuNDgzLTguODEgMjQuNjQ4LTYuODkzIDMuMTc0IDYuMjcxLTcuMjQxIDkuNDA3Ii8+CiAgPHBhdGggZmlsbC1vcGFjaXR5PSIuMTQ2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOC43NzUgMjkuOTU3bC03LjY3NS04LjY2IDI0Ljk2OC03LjA2NSAzLjI4NiA2LjU5My03LjQ4IDkuMTA3Ii8+CiAgPHBhdGggZmlsbD0idXJsKCNmKSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTguNTk0IDMwLjQ0MWwtNy4zMzMtOC43NDYgMjQuNzEyLTYuODk0IDMuMTEgNi4zODgtNy4xMiA4Ljk4NiIvPgogIDxwYXRoIGZpbGw9InVybCgjZykiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwLjQ4OCAyOS4wNjRMNy4wOTIgNDAuMDM2bDEzLjkwOS05LjYwNGg5LjAxOGwxMi40MiA5LjQ4Mi0xMS44NjQtMTAuODVIMjAuNDg4eiIvPgogIDxwYXRoIGZpbGw9InVybCgjZykiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuOTYzIDE2Ljg4NUwxOC40OCAzMS4yMDFsMS4wNjgtLjg1NEw2Ljk2NCAxNi44ODV6IiBjb2xvcj0iIzAwMCIvPgogIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNoKSIgc3Ryb2tlLXdpZHRoPSIuODU3IiBkPSJNNy4zMDggMTcuMTMxbC4wMyAyMy4yMTFoMzQuOTQ2bC0uMDYzLTIzLjA4NGMtLjAwMi0uNzUtMTEuMjE2LTEzLjc5OS0xMy4zODQtMTMuNzk5aC03Ljg5NWMtMi4yNTMgMC0xMy42MzUgMTIuODkyLTEzLjYzNCAxMy42NzJ6Ii8+CiAgPHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMjAuOTU3IDMwLjQ1M0w5LjAxNiAzOC43MjRsMi4yMTkuMDA2IDkuOTk4LTYuODY5IDguODIyLTEuNDIzLTkuMDk4LjAxNXptLTkuNTI5LTguNzgzbDEuMzI0IDEuNDExIDIyLjc5MS02Ljg4NCAyLjkxNSA1LjY4Mi42MTQtLjcxMi0zLjA2OS02LjM3OC0yNC41NzUgNi44ODF6Ii8+CiAgPHBhdGggZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTMuMzA4IDIzLjYzNmw2LjAyNiA2LjQ1NCAxLjE5Ny0xLjAyNiAxMC4wODcuMDQzLjgxMi43MjcgMy45NzUtNC43NDRjLTEuMTU0LTEuNDExLTIyLjA5Ny0xLjQ1NC0yMi4wOTctMS40NTR6Ii8+CiAgPHBhdGggZmlsbD0iI2IxYjFiMSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNDEuODEzIDE3Ljg0OGwtOS45NTIgMTIuNjMxLTEuMDY4LS44NTUgMTEuMDItMTEuNzc2eiIgY29sb3I9IiMwMDAiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"evolution,evolution,mail\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Evolution.desktop\"\nLABEL oc.launch=\"evolution.Evolution\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"evolution\"\nLABEL oc.displayname=\"Evolution\"\nLABEL oc.path=\"/usr/bin/evolution\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/calendar;text/x-vcard;text/directory;application/mbox;message/rfc822;x-scheme-handler/mailto;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"evolution\"\nENV APPBIN \"/usr/bin/evolution\"\nENV APP \"/usr/bin/evolution\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/evolution/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/evolution/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/evolution/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/evolution/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends file-roller && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_file-roller.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9Ijk5LjAzNiIgeDI9Ijk5LjAzNiIgeTE9Ii0uNTA0NzIiIHkyPSIxOTkuODQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC42ODY2IDAgMCA0LjY4NjYgNDIuODQgNzIuMTk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWNkNWI5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UyY2E4NyIgb2Zmc2V0PSIuNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDZhYTM3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjUwMCIgeDI9IjUwMCIgeTE9IjI1Mi4zNiIgeTI9IjgwNi4wMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAtNC44Mjk0IDExLjUxOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYmViZWIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wNTgyNTEiIHk9Ii0uMDI2MDUiIHdpZHRoPSIxLjExNjUiIGhlaWdodD0iMS4wNTIxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1LjU1NzI0MjIiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMDU5ODYzIi8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC05ODguMzYpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDY0MDEyIDAgMCAuMDY0MDEyIC0uNzQyMjYgOTg1Ljc0KSIgc3Ryb2tlLXdpZHRoPSIxNS42MjIiPgogICA8Y2lyY2xlIGN4PSI1MTEuNSIgY3k9IjU0MC44NiIgcj0iNDY4LjY2IiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KICAgPGNpcmNsZSBjeD0iNTExLjUiIGN5PSI1NDAuODYiIHI9IjQ2OC42NiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgLTQuODI5NCAxMS41MTgpIiBkPSJtNjAyLjgzIDU3Mi42MmgtMi43NjU0di00OS43MzhoLTMxLjA4NnYtNDkuNzM4aC00OS43Mzh2LTQ5LjczOGg0OS43Mzh2LTQ5LjczOGgtNDkuNzM4di00OS43MzhoNDkuNzM4di00OS43MzhoLTYyLjE3MnY0OS43MzhoLTQ5LjczOHY0OS43MzhoNDkuNzM4djQ5LjczOGgtNDkuNzM4djQ5LjczOGg0OS43Mzh2NDkuNzM4aC04MC44MjR2NDkuNzM4aC0yLjc2NTRsLTI0LjY3NiAxNjQuNTEgMTE0LjQ4IDQ5LjA2NCAxMTQuNDgtNDkuMDY0em0tODkuODA1IDE1OS40Ni01OS42LTI1LjU0MyAxMi42MjYtODQuMThoOTMuOTQ2bDEyLjYyNiA4NC4xOHoiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iMTkuNDI1Ii8+CiAgIDxwYXRoIGlkPSJYTUxJRF8xMDczXyIgZD0ibTU5NS42NSA1NzEuOTRoLTIuNzU0NnYtNDkuNTQ0aC0zMC45NjV2LTQ5LjU0NGgtNDkuNTQ0di00OS41NDRoNDkuNTQ0di00OS41NDRoLTQ5LjU0NHYtNDkuNTQ0aDQ5LjU0NHYtNDkuNTQ0aC02MS45Mjl2NDkuNTQ0aC00OS41NDR2NDkuNTQ0aDQ5LjU0NHY0OS41NDRoLTQ5LjU0NHY0OS41NDRoNDkuNTQ0djQ5LjU0NGgtODAuNTA4djQ5LjU0NGgtMi43NTQ2bC0yNC41OCAxNjMuODcgMTE0LjA0IDQ4Ljg3MiAxMTQuMDQtNDguODcyem0tODkuNDU1IDE1OC44NC01OS4zNjctMjUuNDQzIDEyLjU3Ny04My44NTFoOTMuNTc5bDEyLjU3NyA4My44NTF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjE5LjM0OSIvPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"file-roller,zip,tar,gz,tgz,unzip,compress,7zip,7z,iso\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.gnome.FileRoller.desktop\"\nLABEL oc.launch=\"file-roller.File-roller\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"file-roller\"\nLABEL oc.displayname=\"file-roller\"\nLABEL oc.path=\"/usr/bin/file-roller\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-7z-compressed;application/gzip;application/gtar;application/tar;application/zip;application/x-compress;application/x-compressed;application/x-zip-compressed;multipart/x-zip;application/gnutar;application/x-lzx;application/lzx;application/x-gzip;application/x-gtar;application/x-bzip2;application/x-bzip;application/x-bzip2;\"\nLABEL oc.fileextensions=\"7z;7zip;Z;unzip;zip;tar;tgz;war;tar.gz;ar;bcz;cpio;ear;jar;iso;tar.Z;tar.gz;tar.lz;tar.lzma;tar.lzo;tar.xz\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"file-roller\"\nENV APPBIN \"/usr/bin/file-roller\"\nENV APP \"/usr/bin/file-roller\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/file-roller/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/file-roller/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/file-roller/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/file-roller/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends filelight && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"filelight.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnIGlkPSJzdmc0MzQwIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgd2lkdGg9IjQ4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogPGRlZnMgaWQ9ImRlZnM0MzQyIj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NDIzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC4wMDIyMSkiIHgyPSI0NyIgeDE9IjEiPgogICA8c3RvcCBpZD0ic3RvcDctNTAiIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU0ZTQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDktOTYiIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNDM0NSI+CiAgPHJkZjpSREY+CiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPgogICAgPGRjOnRpdGxlLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZyBpZD0iZzIxIj4KICA8cGF0aCBpZD0icGF0aDIzIiBzdHlsZT0ib3BhY2l0eTowLjAyIiBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIvPgogIDxwYXRoIGlkPSJwYXRoMjUiIHN0eWxlPSJvcGFjaXR5Oi4wNSIgZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6Ii8+CiAgPHBhdGggaWQ9InBhdGgyNyIgc3R5bGU9Im9wYWNpdHk6LjEiIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIvPgogPC9nPgogPHJlY3QgaWQ9InJlY3Q0MjI5IiBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDIzMSkiIHJ4PSI0IiB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiBoZWlnaHQ9IjQ2IiB3aWR0aD0iNDYiIHk9IjEiIHg9Ii00NyIvPgogPGcgaWQ9Imc1NyI+CiAgPGcgaWQ9Imc1OSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMTAwNC40KSI+CiAgIDxwYXRoIGlkPSJwYXRoNjEiIHN0eWxlPSJvcGFjaXR5Oi4xIiBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6Ii8+CiAgPC9nPgogPC9nPgogPHBhdGggaWQ9InBhdGgzNyIgc3R5bGU9ImZpbGwtb3BhY2l0eTowLjA5ODtmaWxsLXJ1bGU6ZXZlbm9kZCIgZD0ibTM5IDI0LjIwNWExNCAxNCAwIDAgMCAtNC4xIC0xMC4xMWwtOS45IDkuODk4IDEzLjE1NiA0Ljc4OWExNCAxNCAwIDAgMCAwLjg0MiAtNC41ODR6bS0xLjc4MSA2LjI0LTEyLjIxNy00LjQ0NXYxM2ExMyAxMyAwIDAgMCAxMi4yMTUgLTguNTU5bS00LjMxNi0xNy4zNDZhMTQgMTQgMCAwIDAgLTE2LjkgLTIuMjI1IDE0IDE0IDAgMCAwIC02LjUyMyAxNS43NDggMTQgMTQgMCAwIDAgMTMuNTIzIDEwLjM3N3YtMTRsOS45LTkuOXoiLz4KIDxwYXRoIGlkPSJwYXRoMzkiIHN0eWxlPSJmaWxsOiNlMzhjNTM7ZmlsbC1ydWxlOmV2ZW5vZGQiIGQ9Im0yMyAzNS45OTVhMTQgMTQgMCAwIDEgLTEzLjUyMyAtMTAuMzc3IDE0IDE0IDAgMCAxIDYuNTIzIC0xNS43NDcgMTQgMTQgMCAwIDEgMTYuOSAyLjIyNGwtOS45IDkuOSIvPgogPHBhdGggaWQ9InBhdGg0MSIgc3R5bGU9ImZpbGw6IzU5YTNjODtmaWxsLXJ1bGU6ZXZlbm9kZCIgZD0ibTM0LjkgMTMuMDk1YTE0IDE0IDAgMCAxIDMuMjU1IDE0LjY4OWwtMTMuMTU1LTQuNzg5Ii8+CiA8cGF0aCBpZD0icGF0aDQzIiBzdHlsZT0iZmlsbDojYThjZjM2O2ZpbGwtcnVsZTpldmVub2RkIiBkPSJtMzcuMjE1IDI5LjQ0MWExMyAxMyAwIDAgMSAtMTIuMjE1IDguNTU0di0xM3oiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"filelight,disk,space,file,system,usage,volume,storage\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.kde.filelight.desktop\"\nLABEL oc.launch=\"filelight.filelight\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"filelight\"\nLABEL oc.displayname=\"Filelight\"\nLABEL oc.path=\"/usr/bin/filelight\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"inode/directory;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"filelight\"\nENV APPBIN \"/usr/bin/filelight\"\nENV APP \"/usr/bin/filelight\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/filelight/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/filelight/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/filelight/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/filelight/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update filezilla\nLABEL oc.icon=\"circle_filezilla.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjQyIi8+PC9maWx0ZXI+PGZpbHRlciBpZD0iYyIgeD0iLS4wNiIgeT0iLS4wNiIgd2lkdGg9IjEuMTIiIGhlaWdodD0iMS4xMiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuNiIvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwMC41NyIgeDI9IjQwMC41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE2My42NyAtMjM1LjkxKSBzY2FsZSgxLjQyODYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2UwMmQyZCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2Y3NTE1MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODI2LjM2IC0xMTA3LjUpIHNjYWxlKDIuMTQyOSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PHJlY3QgeD0iMzg4LjU3IiB5PSI1MDMuOCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeT0iMjAiIGZpbGw9InVybCgjYikiIHRyYW5zZm9ybT0ibWF0cml4KDEuNTAwMDggMCAwIDEuNTAwMDggLTU4MC44NSAtNzUzLjY5MykiIHN0cm9rZS13aWR0aD0iLjk2NiIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNCkgc2NhbGUoMS4xNjY3KSIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMTUiPjxwYXRoIGQ9Im0xNyAxMi01IDIxaDQuMWwyLjE1LTlIMjlsLTEwLjA3MSA4Ljk2MkwyMS41NjIgMzZsMS4zNDgtLjcwM2MyLjU1MS0xLjMwOSAzLjYyMS0uNTQzIDUuNTU1LS4wMDggMS44ODMuNTIgMy42NTYgMS4wNzggNy4zMjgtMS4wMzVsLS43My0zLjczNGMtNCAyLjg0OC01LjI3My4zMDktOC4xMjkuMjAzTDM1IDI0bDEtNEgxOS4ybC45OC00SDMxbDEtNCIvPjwvZz48cGF0aCBkPSJNMjMuODM0IDE4IDE4IDQyLjUwMWg0Ljc4NGwyLjUwOC0xMC41aDEyLjU0MmwtMTEuNzUgMTAuNDU2TDI5LjE1NiA0NmwxLjU3My0uODJjMi45NzYtMS41MjcgNC4yMjUtLjYzNCA2LjQ4MS0uMDEgMi4xOTcuNjA3IDQuMjY2IDEuMjU4IDguNTUtMS4yMDdsLS44NTItNC4zNTZjLTQuNjY3IDMuMzIyLTYuMTUyLjM2LTkuNDg0LjIzN0w0NC44MzQgMzJsMS4xNjctNC42NjdoLTE5LjZsMS4xNDMtNC42NjdoMTIuNjI0TDQxLjMzNCAxOCIgZmlsbD0iI2Y5ZjlmOSIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"filezilla,ftp,client\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"filezilla.desktop\"\nLABEL oc.launch=\"filezilla.Filezilla\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"filezilla\"\nLABEL oc.displayname=\"filezilla (alpine)\"\nLABEL oc.path=\"/usr/bin/filezilla\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"filezilla\"\nENV APPBIN \"/usr/bin/filezilla\"\nENV APP \"/usr/bin/filezilla\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/filezilla/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/filezilla/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/filezilla/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/filezilla/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.firefox-esr /composer/init.d/init.firefox-esr\nCOPY policies.json /usr/lib/firefox/distribution\nCOPY /ntlm_auth /usr/bin/ntlm_auth.desktop\nRUN chown root:root /usr/bin/ntlm_auth.desktop && chmod 111 /usr/bin/ntlm_auth.desktop\nRUN apk add --no-cache --update firefox-esr\nLABEL oc.icon=\"circle_firefox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IHgxPSIyODAiIHgyPSIyODAiIHkxPSIxNzIiIHkyPSIyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmFiZGI2IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JhYmRiNiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjbGlwUGF0aD4KICAgPGNpcmNsZSBjeD0iNjQiIGN5PSIyMzYiIHI9IjUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjMzU4NGU0IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiAgPC9jbGlwUGF0aD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI3MC43ODYiIHgyPSI2LjQ0NyIgeTE9IjEyLjM5MyIgeTI9Ijc0LjQ2OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAtLjAwNTQ2MTUgMjgwLjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4wNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZTg0NyIgb2Zmc2V0PSIuMTExIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjIyNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zNjgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuNDAxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ2MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41MzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UzMTU4NyIgb2Zmc2V0PSIuNzA1Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItNzkwNy4yIiBjeT0iLTg1MTUuMSIgcj0iODAuNzk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkNGYiIG9mZnNldD0iLjEyOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhYzMxIiBvZmZzZXQ9Ii4xODYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOWQxNyIgb2Zmc2V0PSIuMjQ3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjI4MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjNiIiBvZmZzZXQ9Ii40MDMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgb2Zmc2V0PSIuNDY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNTE1NmMiIG9mZnNldD0iLjcxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYjA4NzgiIG9mZnNldD0iLjc4MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTUwMDgwIiBvZmZzZXQ9Ii44NiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iLTc5MzYuNyIgY3k9Ii04NDgyLjEiIHI9IjgwLjc5NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOTYwZTE4IiBvZmZzZXQ9Ii4zIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNiMTE5MjciIHN0b3Atb3BhY2l0eT0iLjc0IiBvZmZzZXQ9Ii4zNTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RiMjkzZCIgc3RvcC1vcGFjaXR5PSIuMzQzIiBvZmZzZXQ9Ii40MzUiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1MzM0YiIgc3RvcC1vcGFjaXR5PSIuMDk0IiBvZmZzZXQ9Ii40OTciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9Ii41MyIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iLTc5MjciIGN5PSItODUzMy41IiByPSI1OC41MzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTMyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRjM2UiIG9mZnNldD0iLjI1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ZDEyIiBvZmZzZXQ9Ii41MDYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNTI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSItNzkzNy43IiBjeT0iLTg1MTguNCIgcj0iMjcuNjc2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUyMjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYjI3IiBvZmZzZXQ9Ii4xMjEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmYzgyYSIgb2Zmc2V0PSIuMjk1Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE5MzAiIG9mZnNldD0iLjUwMiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3ZTM3IiBvZmZzZXQ9Ii43MzIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNzEzOSIgb2Zmc2V0PSIuNzkyIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImgiIGN4PSItNzkxNiIgY3k9Ii04NTM2IiByPSIxMTguMDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTEzIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjQ1NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjM0IiBvZmZzZXQ9Ii42MjIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzY0NyIgb2Zmc2V0PSIuNzE2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlMzE1ODciIG9mZnNldD0iLjkwNCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iLTc5MjcuMiIgY3k9Ii04NTIyLjkiIHI9Ijg2LjQ5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDIyMjM0IC4yMTA3IC0uMTM4MjggLjAxNDYxMSAtOTkxLjg2IDIwNzMuNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmU4NDciIG9mZnNldD0iLjA2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjE2OCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zMDQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuMzU2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41NyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii43MzciLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iaiIgY3g9Ii03OTM4LjQiIGN5PSItODUwOC4yIiByPSI3My43MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4xMzciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTYzNCIgb2Zmc2V0PSIuNTkyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjM2NDciIG9mZnNldD0iLjY1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii45MDQiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iayIgY3g9Ii03OTE4LjkiIGN5PSItODUwMy45IiByPSI4MC42ODYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMDk0Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUxNDEiIG9mZnNldD0iLjIzMSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhZjFlIiBvZmZzZXQ9Ii41MDkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNjI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI3MC4wMTMiIHgyPSIxNS4yNjciIHkxPSIxMi4wNjEiIHkyPSI2Ni44MDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgLS4wMDU0NjE1IDI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgc3RvcC1vcGFjaXR5PSIuOCIgb2Zmc2V0PSIuMTY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjYzNCIgb2Zmc2V0PSIuMjY2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjIxNyIgb2Zmc2V0PSIuNDg5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIuNiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iOC40OTM3IiBjeT0iMjg3LjM0IiByPSIzLjY0NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOTYyIDAgLTI3Ljc1NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYyYTBlYSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNTg0ZTQiIG9mZnNldD0iLjU1MTY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxYTVmYjQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0yODAuMDcpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTY4MzYgMCAwIC45NjgzNiAuMjY3ODkgOC44Njc4KSI+CiAgIDxjaXJjbGUgY3g9IjMzOS4xMyIgY3k9IjI4NS42OSIgcj0iMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2Q1ZDNjZiIvPgogICA8ZyBzdHJva2Utd2lkdGg9Ii4yMTE3NSI+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTFsMC4wMDE1IDAuMDEzOGMtMC45Mjc5MS0yLjMxMzQtMi41MDE1LTMuMjQ2Mi0zLjc4NjYtNS4yNzczLTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zbDAuMDAzMi02ZS0zYy0yLjA2MTQgMS4yMDctMi43NjA5IDMuNDQxNC0yLjgyNTIgNC41NTkxYTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTIgMi40NTM2IDIuNDUzNiAwIDAgMC0wLjIxMTc1LTAuMTYwNTEgMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhoLTAuMDAzODFjLTAuMzI1MzUtMC40MTEzMS0wLjMwMjQ4LTEuNzcwOC0wLjI4Mzg1LTIuMDU0N2ExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDcxMTQ5IDAuNDMzODgtMC4wODA2NzggMC41MTI0NCAwIDZlLTMgLTAuMDAxMjcxIDAuMDExOS0wLjAwMTkwNiAwLjAxOGE3LjgyMTYgNy44MjE2IDAgMCAwLTAuMTMzMTkgMS4xMzE0djAuMDQyM2E4LjIwNzQgOC4yMDc0IDAgMCAwIDE2LjI5NSAxLjM4NzhjMC4wMTM3Ni0wLjEwNTg4IDAuMDI0OTktMC4yMTA3IDAuMDM3MjctMC4zMTc2M2E4LjQzOTkgOC40Mzk5IDAgMCAwLTAuNTMyMzUtNC4xMjI2em0tOS40NTkxIDYuNDI0MmMwLjAzODMyNyAwLjAxODQgMC4wNzQzMjYgMC4wMzgzIDAuMTEzNzEgMC4wNTU5bDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1em0xLjg4LTQuOTVtNi43NjYtMS4wNDQ4di04ZS0zbDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNhKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExdjhlLTNsMC4wMDE1IDllLTNhNy40MzI2IDcuNDMyNiAwIDAgMS0wLjI1NTM4IDUuNTM5MWMtMC45NDA2MSAyLjAxODItMy4yMTc0IDQuMDg2OC02Ljc4MTIgMy45ODYzLTMuODUwNy0wLjEwOTA2LTcuMjQyLTIuOTY2NS03Ljg3Ni02LjcwOS0wLjExNTQxLTAuNTkwMTYgMC0wLjg4OTM3IDAuMDU4MDIxLTEuMzY5YTYuMTE0NiA2LjExNDYgMCAwIDAtMC4xMzE5MiAxLjEzMjV2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6IiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTF2OGUtM2wwLjAwMTUgOWUtM2E3LjQzMjYgNy40MzI2IDAgMCAxLTAuMjU1MzggNS41MzkxYy0wLjk0MDYxIDIuMDE4Mi0zLjIxNzQgNC4wODY4LTYuNzgxMiAzLjk4NjMtMy44NTA3LTAuMTA5MDYtNy4yNDItMi45NjY1LTcuODc2LTYuNzA5LTAuMTE1NDEtMC41OTAxNiAwLTAuODg5MzcgMC4wNTgwMjEtMS4zNjlhNi4xMTQ2IDYuMTE0NiAwIDAgMC0wLjEzMTkyIDEuMTMyNXYwLjA0MjNhOC4yMDc0IDguMjA3NCAwIDAgMCAxNi4yOTUgMS4zODc4YzAuMDEzNzYtMC4xMDU4OCAwLjAyNDk5LTAuMjEwNyAwLjAzNzI3LTAuMzE3NjNhOC40Mzk5IDguNDM5OSAwIDAgMC0wLjUzMjM1LTQuMTIyNnoiIGZpbGw9InVybCgjYykiLz4KICAgIDxwYXRoIGQ9Im0xMi4wODIgMjg2LjcxYzAuMDE3NzkgMC4wMTI1IDAuMDM0MyAwLjAyNSAwLjA1MTAzIDAuMDM3NWE0LjQ2OCA0LjQ2OCAwIDAgMC0wLjc2MjMyLTAuOTk0MThjLTIuNTUwOC0yLjU1MTItMC42Njg1MS01LjUzMTctMC4zNTEwOS01LjY4MzFsMC4wMDMyLTVlLTNjLTIuMDYxNCAxLjIwNy0yLjc2MDkgMy40NDE0LTIuODI1MiA0LjU1OTEgMC4wOTU3MTMtN2UtMyAwLjE5MDU4LTAuMDE0NiAwLjI4ODQxLTAuMDE0NmE0LjE0MTkgNC4xNDE5IDAgMCAxIDMuNTk2IDIuMXoiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im04LjQ5MTIgMjg3LjIyYy0wLjAxMzU1MiAwLjIwNDEzLTAuNzM0NzkgMC45MDgyMS0wLjk4Njk5IDAuOTA4MjEtMi4zMzM3IDAtMi43MTI2IDEuNDExOC0yLjcxMjYgMS40MTE4IDAuMTAzMzQgMS4xODg4IDAuOTMxNzIgMi4xNjc5IDEuOTMzMSAyLjY4NTkgMC4wNDU3MzkgMC4wMjM3IDAuMDkyMTEzIDAuMDQ1MSAwLjEzODQ5IDAuMDY2MXEwLjEyMDQ5IDAuMDUzNCAwLjI0MDk4IDAuMDk4N2EzLjY0OTYgMy42NDk2IDAgMCAwIDEuMDY3OSAwLjIwNjA0YzQuMDkwNSAwLjE5MTg1IDQuODgyOC00Ljg5MTUgMS45MzEtNi4zNjY2YTIuODMzMyAyLjgzMzMgMCAwIDEgMS45Nzg4IDAuNDgwNDcgNC4xNDE5IDQuMTQxOSAwIDAgMC0zLjU5Ni0yLjFjLTAuMDk3NDA3IDAtMC4xOTI3IDhlLTMgLTAuMjg4NDEgMC4wMTQ2YTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTJjMC4xMjUxNSAwLjEwNTg3IDAuMjY2MzkgMC4yNDczMyAwLjU2MzkgMC41NDA2MSAwLjU1NjkxIDAuNTQ4NjUgMS45ODUyIDEuMTE3IDEuOTg4NCAxLjE4Mzd6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCBkPSJtNS41NTYzIDI4NS4yMmMwLjA2NjQ5MSAwLjA0MjMgMC4xMjEzNCAwLjA3OTIgMC4xNjk0IDAuMTEyNDRhMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhjMC4wNDAwMjItMWUtMyAxLjIzMDUtMC4wMjI0IDEuODI5MSAwLjM2Njc2eiIgZmlsbD0idXJsKCNnKSIvPgogICAgPHBhdGggZD0ibTAuMzQ0NzggMjg4Ljk5YzAuNjMzMzYgMy43NDI1IDQuMDI1MiA2LjYgNy44NzYgNi43MDkgMy41NjM4IDAuMTAwNzkgNS44NDA2LTEuOTY4IDYuNzgxMi0zLjk4NjNhNy40MzI2IDcuNDMyNiAwIDAgMCAwLjI1NTM4LTUuNTM5MXYtOGUtM2MwLTZlLTMgLTAuMDAxMy0wLjAxIDAtOGUtM2wwLjAwMTUgMC4wMTM4YzAuMjkxMTYgMS45MDA5LTAuNjc1NzEgMy43NDI1LTIuMTg3MiA0Ljk4NzlsLTAuMDA0NyAwLjAxMDZjLTIuOTQ1MSAyLjM5ODUtNS43NjM1IDEuNDQ3MS02LjMzNCAxLjA1ODhxLTAuMDU5NzE1LTAuMDI4Ni0wLjExOTQzLTAuMDU5NWMtMS43MTcxLTAuODIwNzYtMi40MjY1LTIuMzg1Mi0yLjI3NDUtMy43MjY5YTIuMTA3NiAyLjEwNzYgMCAwIDEtMS45NDQxLTEuMjIyOSAzLjA5NTQgMy4wOTU0IDAgMCAxIDMuMDE3My0wLjEyMTEzIDQuMDg2OSA0LjA4NjkgMCAwIDAgMy4wODE0IDAuMTIxMTNjLTAuMDAzMTgtMC4wNjY3LTEuNDMxNS0wLjYzNTI2LTEuOTg4NC0xLjE4MzctMC4yOTc1MS0wLjI5MzI4LTAuNDM4NzUtMC40MzQ1Mi0wLjU2MzktMC41NDA2MWEyLjQ1MzYgMi40NTM2IDAgMCAwLTAuMjExNzUtMC4xNjA1MWMtMC4wNDg3MDQtMC4wMzMyLTAuMTAzNTUtMC4wNjkyLTAuMTY5NC0wLjExMjQ0LTAuNTk4NjMtMC4zODkyLTEuNzg5MS0wLjM2NzgxLTEuODI4NS0wLjM2Njc1aC0wLjAwMzgxYy0wLjMyNTIzLTAuNDEyLTAuMzAyMzYtMS43NzE1LTAuMjgzNzMtMi4wNTU0YTEuNDY3IDEuNDY3IDAgMCAwLTAuMjc0MDEgMC4xNDU0NyA1Ljk3NjggNS45NzY4IDAgMCAwLTAuODAyMTIgMC42ODcxNCA3LjE2NjggNy4xNjY4IDAgMCAwLTAuNzcwMzYgMC45MTgzOHYxZS0zIC0xZS0zYTYuOTMxMyA2LjkzMTMgMCAwIDAtMS4xMDExIDIuNDg2NmMtMC4wMDQwMjMgMC4wMTY3LTAuMjk1NjEgMS4yOTE1LTAuMTUxODMgMS45NTI2eiIgZmlsbD0idXJsKCNoKSIvPgogICAgPHBhdGggZD0ibTExLjM3MSAyODUuNzZhNC40NjggNC40NjggMCAwIDEgMC43NjIzMiAwLjk5NTI0YzAuMDQ1MSAwLjAzNDEgMC4wODcyNCAwLjA2OCAwLjEyMzAzIDAuMTAwNzkgMS44NjA3IDEuNzE1MiAwLjg4NTc3IDQuMTM5OCAwLjgxMzE0IDQuMzEyNCAxLjUxMTUtMS4yNDUzIDIuNDc3NS0zLjA4NyAyLjE4NzItNC45ODc5LTAuOTI4MzMtMi4zMTQ1LTIuNTAxOS0zLjI0NzItMy43ODctNS4yNzg0LTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zIC0wLjMxNzQyIDAuMTUwNTUtMi4xOTk3IDMuMTMxIDAuMzUxNTEgNS42ODIyeiIgZmlsbD0idXJsKCNpKSIvPgogICAgPHBhdGggZD0ibTEyLjI1NSAyODYuODVjLTAuMDM1NzktMC4wMzI4LTAuMDc3OTItMC4wNjY3LTAuMTIzMDMtMC4xMDA4LTAuMDE2NzMtMC4wMTI1LTAuMDMzMjUtMC4wMjUtMC4wNTEwMy0wLjAzNzVhMi44MzMzIDIuODMzMyAwIDAgMC0xLjk3ODgtMC40ODA0N2MyLjk1MTkgMS40NzU5IDIuMTU5OSA2LjU1ODQtMS45MzEgNi4zNjY2YTMuNjQ5NiAzLjY0OTYgMCAwIDEtMS4wNjc5LTAuMjA2MDJxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM2MwLjU3MDQ3IDAuMzg5NDEgMy4zODgxIDEuMzQwOCA2LjMzNC0xLjA1ODhsMC4wMDQ3LTAuMDEwNmMwLjA3MzQ4LTAuMTcxNTIgMS4wNDg0LTIuNTk2Ny0wLjgxMzE0LTQuMzExM3oiIGZpbGw9InVybCgjaikiLz4KICAgIDxwYXRoIGQ9Im00Ljc5MTYgMjg5LjU0czAuMzc4ODMtMS40MTE4IDIuNzEyNi0xLjQxMThjMC4yNTIyIDAgMC45NzQwNy0wLjcwNDA4IDAuOTg2OTktMC45MDgyMWE0LjA4NjkgNC4wODY5IDAgMCAxLTMuMDgxNC0wLjEyMTEyIDMuMDk1NCAzLjA5NTQgMCAwIDAtMy4wMTczIDAuMTIxMTIgMi4xMDc2IDIuMTA3NiAwIDAgMCAxLjk0NDEgMS4yMjI5Yy0wLjE1MjA0IDEuMzQxOSAwLjU1NzM0IDIuOTA2MyAyLjI3NDUgMy43MjY5IDAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3NzMtMS44Mjk4LTEuNDk2OS0xLjkzMzEtMi42ODU3eiIgZmlsbD0idXJsKCNrKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExbDAuMDAxNSAwLjAxMzhjLTAuOTI3OTEtMi4zMTM0LTIuNTAxNS0zLjI0NjItMy43ODY2LTUuMjc3My0wLjA2NTAxLTAuMTAyNy0wLjEzMDAyLTAuMjA1NjEtMC4xOTMzMy0wLjMxNDI0LTAuMDM2MjEtMC4wNjItMC4wNjUyMi0wLjExNzk1LTAuMDkwNDItMC4xNjk0YTEuNDkzNSAxLjQ5MzUgMCAwIDEtMC4xMjIzOS0wLjMyNTA0IDAuMDIxMTc1IDAuMDIxMTc1IDAgMCAwLTAuMDE4NjMtMC4wMjEyIDAuMDI5MjIyIDAuMDI5MjIyIDAgMCAwLTAuMDE1NDYgMGMtMC4wMDExIDAtMC4wMDI4IDJlLTMgLTRlLTMgMmUtMyAtMC4wMDEzIDQuMmUtNCAtNGUtMyAyZS0zIC0wLjAwNTkgM2UtM2wwLjAwMzItNmUtM2MtMi4wNjE0IDEuMjA3LTIuNzYwOSAzLjQ0MTQtMi44MjUyIDQuNTU5MSAwLjA5NTcxMy03ZS0zIDAuMTkwNTgtMC4wMTQ2IDAuMjg4NDEtMC4wMTQ2YTQuMTQxOSA0LjE0MTkgMCAwIDEgMy41OTYgMi4xIDIuODMzMyAyLjgzMzMgMCAwIDAtMS45Nzg4LTAuNDgwNDdjMi45NTE5IDEuNDc1OSAyLjE1OTkgNi41NTg0LTEuOTMxIDYuMzY2NmEzLjY0OTYgMy42NDk2IDAgMCAxLTEuMDY4LTAuMjA1MDhxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1YzAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3OTUtMS44Mjk4LTEuNDk3MS0xLjkzMzEtMi42ODU5IDAgMCAwLjM3ODgzLTEuNDExOCAyLjcxMjYtMS40MTE4IDAuMjUyMiAwIDAuOTc0MDctMC43MDQwOCAwLjk4Njk5LTAuOTA4MjEtMC4wMDMxOC0wLjA2NjctMS40MzE1LTAuNjM1MjYtMS45ODg0LTEuMTgzNy0wLjI5NzUxLTAuMjkzMjgtMC40Mzg3NS0wLjQzNDUyLTAuNTYzOS0wLjU0MDYxYTIuNDUzNiAyLjQ1MzYgMCAwIDAtMC4yMTE3NS0wLjE2MDUxIDMuODA0OCAzLjgwNDggMCAwIDEtMC4wMjMwODEtMi4wMDYgNi4wNzg0IDYuMDc4NCAwIDAgMC0xLjk3NTUgMS41MjY4aC0wLjAwMzgxYy0wLjMyNTI2LTAuNDEyNjMtMC4zMDIzOS0xLjc3MjEtMC4yODM3NS0yLjA1NmExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDg0NzAyIDAuNDM4OTYtMC4wOTQ2NTQgMC41MTc3NHYwYTkuNTQ4OCA5LjU0ODggMCAwIDAtMC4xMjExMiAxLjE0NDF2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6bS0wLjgxNDIgMC40MjE2IDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNsKSIvPgogICA8L2c+CiAgIDxjaXJjbGUgY3g9Ii0xOS4zNDciIGN5PSIyOTQuNTMiIHI9IjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9IiNkNWQzY2YiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"firefox-esr,firefox,mozilla,web,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"firefox-esr.desktop\"\nLABEL oc.launch=\"Navigator.firefox-esr\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"firefox-esr\"\nLABEL oc.displayname=\"Firefox (esr alpine)\"\nLABEL oc.path=\"/usr/bin/firefox-esr\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"htm;html;xml;gif\"\nLABEL oc.legacyfileextensions=\"htm;html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"firefox-esr\"\nENV APPBIN \"/usr/bin/firefox-esr\"\nENV APP \"/usr/bin/firefox-esr\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/firefox-esr/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/firefox-esr/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/firefox-esr/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/firefox-esr/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update firefox krb5\nLABEL oc.icon=\"circle_firefox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IHgxPSIyODAiIHgyPSIyODAiIHkxPSIxNzIiIHkyPSIyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmFiZGI2IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JhYmRiNiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjbGlwUGF0aD4KICAgPGNpcmNsZSBjeD0iNjQiIGN5PSIyMzYiIHI9IjUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjMzU4NGU0IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiAgPC9jbGlwUGF0aD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI3MC43ODYiIHgyPSI2LjQ0NyIgeTE9IjEyLjM5MyIgeTI9Ijc0LjQ2OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAtLjAwNTQ2MTUgMjgwLjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4wNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZTg0NyIgb2Zmc2V0PSIuMTExIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjIyNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zNjgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuNDAxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ2MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41MzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UzMTU4NyIgb2Zmc2V0PSIuNzA1Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItNzkwNy4yIiBjeT0iLTg1MTUuMSIgcj0iODAuNzk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkNGYiIG9mZnNldD0iLjEyOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhYzMxIiBvZmZzZXQ9Ii4xODYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOWQxNyIgb2Zmc2V0PSIuMjQ3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjI4MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjNiIiBvZmZzZXQ9Ii40MDMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgb2Zmc2V0PSIuNDY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNTE1NmMiIG9mZnNldD0iLjcxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYjA4NzgiIG9mZnNldD0iLjc4MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTUwMDgwIiBvZmZzZXQ9Ii44NiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iLTc5MzYuNyIgY3k9Ii04NDgyLjEiIHI9IjgwLjc5NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOTYwZTE4IiBvZmZzZXQ9Ii4zIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNiMTE5MjciIHN0b3Atb3BhY2l0eT0iLjc0IiBvZmZzZXQ9Ii4zNTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RiMjkzZCIgc3RvcC1vcGFjaXR5PSIuMzQzIiBvZmZzZXQ9Ii40MzUiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1MzM0YiIgc3RvcC1vcGFjaXR5PSIuMDk0IiBvZmZzZXQ9Ii40OTciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9Ii41MyIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iLTc5MjciIGN5PSItODUzMy41IiByPSI1OC41MzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTMyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRjM2UiIG9mZnNldD0iLjI1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ZDEyIiBvZmZzZXQ9Ii41MDYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNTI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSItNzkzNy43IiBjeT0iLTg1MTguNCIgcj0iMjcuNjc2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUyMjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYjI3IiBvZmZzZXQ9Ii4xMjEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmYzgyYSIgb2Zmc2V0PSIuMjk1Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE5MzAiIG9mZnNldD0iLjUwMiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3ZTM3IiBvZmZzZXQ9Ii43MzIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNzEzOSIgb2Zmc2V0PSIuNzkyIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImgiIGN4PSItNzkxNiIgY3k9Ii04NTM2IiByPSIxMTguMDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTEzIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjQ1NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjM0IiBvZmZzZXQ9Ii42MjIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzY0NyIgb2Zmc2V0PSIuNzE2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlMzE1ODciIG9mZnNldD0iLjkwNCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iLTc5MjcuMiIgY3k9Ii04NTIyLjkiIHI9Ijg2LjQ5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDIyMjM0IC4yMTA3IC0uMTM4MjggLjAxNDYxMSAtOTkxLjg2IDIwNzMuNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmU4NDciIG9mZnNldD0iLjA2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjE2OCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zMDQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuMzU2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41NyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii43MzciLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iaiIgY3g9Ii03OTM4LjQiIGN5PSItODUwOC4yIiByPSI3My43MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4xMzciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTYzNCIgb2Zmc2V0PSIuNTkyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjM2NDciIG9mZnNldD0iLjY1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii45MDQiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iayIgY3g9Ii03OTE4LjkiIGN5PSItODUwMy45IiByPSI4MC42ODYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMDk0Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUxNDEiIG9mZnNldD0iLjIzMSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhZjFlIiBvZmZzZXQ9Ii41MDkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNjI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI3MC4wMTMiIHgyPSIxNS4yNjciIHkxPSIxMi4wNjEiIHkyPSI2Ni44MDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgLS4wMDU0NjE1IDI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgc3RvcC1vcGFjaXR5PSIuOCIgb2Zmc2V0PSIuMTY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjYzNCIgb2Zmc2V0PSIuMjY2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjIxNyIgb2Zmc2V0PSIuNDg5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIuNiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iOC40OTM3IiBjeT0iMjg3LjM0IiByPSIzLjY0NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOTYyIDAgLTI3Ljc1NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYyYTBlYSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNTg0ZTQiIG9mZnNldD0iLjU1MTY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxYTVmYjQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0yODAuMDcpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTY4MzYgMCAwIC45NjgzNiAuMjY3ODkgOC44Njc4KSI+CiAgIDxjaXJjbGUgY3g9IjMzOS4xMyIgY3k9IjI4NS42OSIgcj0iMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2Q1ZDNjZiIvPgogICA8ZyBzdHJva2Utd2lkdGg9Ii4yMTE3NSI+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTFsMC4wMDE1IDAuMDEzOGMtMC45Mjc5MS0yLjMxMzQtMi41MDE1LTMuMjQ2Mi0zLjc4NjYtNS4yNzczLTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zbDAuMDAzMi02ZS0zYy0yLjA2MTQgMS4yMDctMi43NjA5IDMuNDQxNC0yLjgyNTIgNC41NTkxYTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTIgMi40NTM2IDIuNDUzNiAwIDAgMC0wLjIxMTc1LTAuMTYwNTEgMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhoLTAuMDAzODFjLTAuMzI1MzUtMC40MTEzMS0wLjMwMjQ4LTEuNzcwOC0wLjI4Mzg1LTIuMDU0N2ExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDcxMTQ5IDAuNDMzODgtMC4wODA2NzggMC41MTI0NCAwIDZlLTMgLTAuMDAxMjcxIDAuMDExOS0wLjAwMTkwNiAwLjAxOGE3LjgyMTYgNy44MjE2IDAgMCAwLTAuMTMzMTkgMS4xMzE0djAuMDQyM2E4LjIwNzQgOC4yMDc0IDAgMCAwIDE2LjI5NSAxLjM4NzhjMC4wMTM3Ni0wLjEwNTg4IDAuMDI0OTktMC4yMTA3IDAuMDM3MjctMC4zMTc2M2E4LjQzOTkgOC40Mzk5IDAgMCAwLTAuNTMyMzUtNC4xMjI2em0tOS40NTkxIDYuNDI0MmMwLjAzODMyNyAwLjAxODQgMC4wNzQzMjYgMC4wMzgzIDAuMTEzNzEgMC4wNTU5bDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1em0xLjg4LTQuOTVtNi43NjYtMS4wNDQ4di04ZS0zbDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNhKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExdjhlLTNsMC4wMDE1IDllLTNhNy40MzI2IDcuNDMyNiAwIDAgMS0wLjI1NTM4IDUuNTM5MWMtMC45NDA2MSAyLjAxODItMy4yMTc0IDQuMDg2OC02Ljc4MTIgMy45ODYzLTMuODUwNy0wLjEwOTA2LTcuMjQyLTIuOTY2NS03Ljg3Ni02LjcwOS0wLjExNTQxLTAuNTkwMTYgMC0wLjg4OTM3IDAuMDU4MDIxLTEuMzY5YTYuMTE0NiA2LjExNDYgMCAwIDAtMC4xMzE5MiAxLjEzMjV2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6IiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTF2OGUtM2wwLjAwMTUgOWUtM2E3LjQzMjYgNy40MzI2IDAgMCAxLTAuMjU1MzggNS41MzkxYy0wLjk0MDYxIDIuMDE4Mi0zLjIxNzQgNC4wODY4LTYuNzgxMiAzLjk4NjMtMy44NTA3LTAuMTA5MDYtNy4yNDItMi45NjY1LTcuODc2LTYuNzA5LTAuMTE1NDEtMC41OTAxNiAwLTAuODg5MzcgMC4wNTgwMjEtMS4zNjlhNi4xMTQ2IDYuMTE0NiAwIDAgMC0wLjEzMTkyIDEuMTMyNXYwLjA0MjNhOC4yMDc0IDguMjA3NCAwIDAgMCAxNi4yOTUgMS4zODc4YzAuMDEzNzYtMC4xMDU4OCAwLjAyNDk5LTAuMjEwNyAwLjAzNzI3LTAuMzE3NjNhOC40Mzk5IDguNDM5OSAwIDAgMC0wLjUzMjM1LTQuMTIyNnoiIGZpbGw9InVybCgjYykiLz4KICAgIDxwYXRoIGQ9Im0xMi4wODIgMjg2LjcxYzAuMDE3NzkgMC4wMTI1IDAuMDM0MyAwLjAyNSAwLjA1MTAzIDAuMDM3NWE0LjQ2OCA0LjQ2OCAwIDAgMC0wLjc2MjMyLTAuOTk0MThjLTIuNTUwOC0yLjU1MTItMC42Njg1MS01LjUzMTctMC4zNTEwOS01LjY4MzFsMC4wMDMyLTVlLTNjLTIuMDYxNCAxLjIwNy0yLjc2MDkgMy40NDE0LTIuODI1MiA0LjU1OTEgMC4wOTU3MTMtN2UtMyAwLjE5MDU4LTAuMDE0NiAwLjI4ODQxLTAuMDE0NmE0LjE0MTkgNC4xNDE5IDAgMCAxIDMuNTk2IDIuMXoiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im04LjQ5MTIgMjg3LjIyYy0wLjAxMzU1MiAwLjIwNDEzLTAuNzM0NzkgMC45MDgyMS0wLjk4Njk5IDAuOTA4MjEtMi4zMzM3IDAtMi43MTI2IDEuNDExOC0yLjcxMjYgMS40MTE4IDAuMTAzMzQgMS4xODg4IDAuOTMxNzIgMi4xNjc5IDEuOTMzMSAyLjY4NTkgMC4wNDU3MzkgMC4wMjM3IDAuMDkyMTEzIDAuMDQ1MSAwLjEzODQ5IDAuMDY2MXEwLjEyMDQ5IDAuMDUzNCAwLjI0MDk4IDAuMDk4N2EzLjY0OTYgMy42NDk2IDAgMCAwIDEuMDY3OSAwLjIwNjA0YzQuMDkwNSAwLjE5MTg1IDQuODgyOC00Ljg5MTUgMS45MzEtNi4zNjY2YTIuODMzMyAyLjgzMzMgMCAwIDEgMS45Nzg4IDAuNDgwNDcgNC4xNDE5IDQuMTQxOSAwIDAgMC0zLjU5Ni0yLjFjLTAuMDk3NDA3IDAtMC4xOTI3IDhlLTMgLTAuMjg4NDEgMC4wMTQ2YTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTJjMC4xMjUxNSAwLjEwNTg3IDAuMjY2MzkgMC4yNDczMyAwLjU2MzkgMC41NDA2MSAwLjU1NjkxIDAuNTQ4NjUgMS45ODUyIDEuMTE3IDEuOTg4NCAxLjE4Mzd6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCBkPSJtNS41NTYzIDI4NS4yMmMwLjA2NjQ5MSAwLjA0MjMgMC4xMjEzNCAwLjA3OTIgMC4xNjk0IDAuMTEyNDRhMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhjMC4wNDAwMjItMWUtMyAxLjIzMDUtMC4wMjI0IDEuODI5MSAwLjM2Njc2eiIgZmlsbD0idXJsKCNnKSIvPgogICAgPHBhdGggZD0ibTAuMzQ0NzggMjg4Ljk5YzAuNjMzMzYgMy43NDI1IDQuMDI1MiA2LjYgNy44NzYgNi43MDkgMy41NjM4IDAuMTAwNzkgNS44NDA2LTEuOTY4IDYuNzgxMi0zLjk4NjNhNy40MzI2IDcuNDMyNiAwIDAgMCAwLjI1NTM4LTUuNTM5MXYtOGUtM2MwLTZlLTMgLTAuMDAxMy0wLjAxIDAtOGUtM2wwLjAwMTUgMC4wMTM4YzAuMjkxMTYgMS45MDA5LTAuNjc1NzEgMy43NDI1LTIuMTg3MiA0Ljk4NzlsLTAuMDA0NyAwLjAxMDZjLTIuOTQ1MSAyLjM5ODUtNS43NjM1IDEuNDQ3MS02LjMzNCAxLjA1ODhxLTAuMDU5NzE1LTAuMDI4Ni0wLjExOTQzLTAuMDU5NWMtMS43MTcxLTAuODIwNzYtMi40MjY1LTIuMzg1Mi0yLjI3NDUtMy43MjY5YTIuMTA3NiAyLjEwNzYgMCAwIDEtMS45NDQxLTEuMjIyOSAzLjA5NTQgMy4wOTU0IDAgMCAxIDMuMDE3My0wLjEyMTEzIDQuMDg2OSA0LjA4NjkgMCAwIDAgMy4wODE0IDAuMTIxMTNjLTAuMDAzMTgtMC4wNjY3LTEuNDMxNS0wLjYzNTI2LTEuOTg4NC0xLjE4MzctMC4yOTc1MS0wLjI5MzI4LTAuNDM4NzUtMC40MzQ1Mi0wLjU2MzktMC41NDA2MWEyLjQ1MzYgMi40NTM2IDAgMCAwLTAuMjExNzUtMC4xNjA1MWMtMC4wNDg3MDQtMC4wMzMyLTAuMTAzNTUtMC4wNjkyLTAuMTY5NC0wLjExMjQ0LTAuNTk4NjMtMC4zODkyLTEuNzg5MS0wLjM2NzgxLTEuODI4NS0wLjM2Njc1aC0wLjAwMzgxYy0wLjMyNTIzLTAuNDEyLTAuMzAyMzYtMS43NzE1LTAuMjgzNzMtMi4wNTU0YTEuNDY3IDEuNDY3IDAgMCAwLTAuMjc0MDEgMC4xNDU0NyA1Ljk3NjggNS45NzY4IDAgMCAwLTAuODAyMTIgMC42ODcxNCA3LjE2NjggNy4xNjY4IDAgMCAwLTAuNzcwMzYgMC45MTgzOHYxZS0zIC0xZS0zYTYuOTMxMyA2LjkzMTMgMCAwIDAtMS4xMDExIDIuNDg2NmMtMC4wMDQwMjMgMC4wMTY3LTAuMjk1NjEgMS4yOTE1LTAuMTUxODMgMS45NTI2eiIgZmlsbD0idXJsKCNoKSIvPgogICAgPHBhdGggZD0ibTExLjM3MSAyODUuNzZhNC40NjggNC40NjggMCAwIDEgMC43NjIzMiAwLjk5NTI0YzAuMDQ1MSAwLjAzNDEgMC4wODcyNCAwLjA2OCAwLjEyMzAzIDAuMTAwNzkgMS44NjA3IDEuNzE1MiAwLjg4NTc3IDQuMTM5OCAwLjgxMzE0IDQuMzEyNCAxLjUxMTUtMS4yNDUzIDIuNDc3NS0zLjA4NyAyLjE4NzItNC45ODc5LTAuOTI4MzMtMi4zMTQ1LTIuNTAxOS0zLjI0NzItMy43ODctNS4yNzg0LTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zIC0wLjMxNzQyIDAuMTUwNTUtMi4xOTk3IDMuMTMxIDAuMzUxNTEgNS42ODIyeiIgZmlsbD0idXJsKCNpKSIvPgogICAgPHBhdGggZD0ibTEyLjI1NSAyODYuODVjLTAuMDM1NzktMC4wMzI4LTAuMDc3OTItMC4wNjY3LTAuMTIzMDMtMC4xMDA4LTAuMDE2NzMtMC4wMTI1LTAuMDMzMjUtMC4wMjUtMC4wNTEwMy0wLjAzNzVhMi44MzMzIDIuODMzMyAwIDAgMC0xLjk3ODgtMC40ODA0N2MyLjk1MTkgMS40NzU5IDIuMTU5OSA2LjU1ODQtMS45MzEgNi4zNjY2YTMuNjQ5NiAzLjY0OTYgMCAwIDEtMS4wNjc5LTAuMjA2MDJxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM2MwLjU3MDQ3IDAuMzg5NDEgMy4zODgxIDEuMzQwOCA2LjMzNC0xLjA1ODhsMC4wMDQ3LTAuMDEwNmMwLjA3MzQ4LTAuMTcxNTIgMS4wNDg0LTIuNTk2Ny0wLjgxMzE0LTQuMzExM3oiIGZpbGw9InVybCgjaikiLz4KICAgIDxwYXRoIGQ9Im00Ljc5MTYgMjg5LjU0czAuMzc4ODMtMS40MTE4IDIuNzEyNi0xLjQxMThjMC4yNTIyIDAgMC45NzQwNy0wLjcwNDA4IDAuOTg2OTktMC45MDgyMWE0LjA4NjkgNC4wODY5IDAgMCAxLTMuMDgxNC0wLjEyMTEyIDMuMDk1NCAzLjA5NTQgMCAwIDAtMy4wMTczIDAuMTIxMTIgMi4xMDc2IDIuMTA3NiAwIDAgMCAxLjk0NDEgMS4yMjI5Yy0wLjE1MjA0IDEuMzQxOSAwLjU1NzM0IDIuOTA2MyAyLjI3NDUgMy43MjY5IDAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3NzMtMS44Mjk4LTEuNDk2OS0xLjkzMzEtMi42ODU3eiIgZmlsbD0idXJsKCNrKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExbDAuMDAxNSAwLjAxMzhjLTAuOTI3OTEtMi4zMTM0LTIuNTAxNS0zLjI0NjItMy43ODY2LTUuMjc3My0wLjA2NTAxLTAuMTAyNy0wLjEzMDAyLTAuMjA1NjEtMC4xOTMzMy0wLjMxNDI0LTAuMDM2MjEtMC4wNjItMC4wNjUyMi0wLjExNzk1LTAuMDkwNDItMC4xNjk0YTEuNDkzNSAxLjQ5MzUgMCAwIDEtMC4xMjIzOS0wLjMyNTA0IDAuMDIxMTc1IDAuMDIxMTc1IDAgMCAwLTAuMDE4NjMtMC4wMjEyIDAuMDI5MjIyIDAuMDI5MjIyIDAgMCAwLTAuMDE1NDYgMGMtMC4wMDExIDAtMC4wMDI4IDJlLTMgLTRlLTMgMmUtMyAtMC4wMDEzIDQuMmUtNCAtNGUtMyAyZS0zIC0wLjAwNTkgM2UtM2wwLjAwMzItNmUtM2MtMi4wNjE0IDEuMjA3LTIuNzYwOSAzLjQ0MTQtMi44MjUyIDQuNTU5MSAwLjA5NTcxMy03ZS0zIDAuMTkwNTgtMC4wMTQ2IDAuMjg4NDEtMC4wMTQ2YTQuMTQxOSA0LjE0MTkgMCAwIDEgMy41OTYgMi4xIDIuODMzMyAyLjgzMzMgMCAwIDAtMS45Nzg4LTAuNDgwNDdjMi45NTE5IDEuNDc1OSAyLjE1OTkgNi41NTg0LTEuOTMxIDYuMzY2NmEzLjY0OTYgMy42NDk2IDAgMCAxLTEuMDY4LTAuMjA1MDhxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1YzAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3OTUtMS44Mjk4LTEuNDk3MS0xLjkzMzEtMi42ODU5IDAgMCAwLjM3ODgzLTEuNDExOCAyLjcxMjYtMS40MTE4IDAuMjUyMiAwIDAuOTc0MDctMC43MDQwOCAwLjk4Njk5LTAuOTA4MjEtMC4wMDMxOC0wLjA2NjctMS40MzE1LTAuNjM1MjYtMS45ODg0LTEuMTgzNy0wLjI5NzUxLTAuMjkzMjgtMC40Mzg3NS0wLjQzNDUyLTAuNTYzOS0wLjU0MDYxYTIuNDUzNiAyLjQ1MzYgMCAwIDAtMC4yMTE3NS0wLjE2MDUxIDMuODA0OCAzLjgwNDggMCAwIDEtMC4wMjMwODEtMi4wMDYgNi4wNzg0IDYuMDc4NCAwIDAgMC0xLjk3NTUgMS41MjY4aC0wLjAwMzgxYy0wLjMyNTI2LTAuNDEyNjMtMC4zMDIzOS0xLjc3MjEtMC4yODM3NS0yLjA1NmExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDg0NzAyIDAuNDM4OTYtMC4wOTQ2NTQgMC41MTc3NHYwYTkuNTQ4OCA5LjU0ODggMCAwIDAtMC4xMjExMiAxLjE0NDF2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6bS0wLjgxNDIgMC40MjE2IDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNsKSIvPgogICA8L2c+CiAgIDxjaXJjbGUgY3g9Ii0xOS4zNDciIGN5PSIyOTQuNTMiIHI9IjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9IiNkNWQzY2YiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"firefox,firefox,mozilla,web,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"firefox.desktop\"\nLABEL oc.launch=\"Navigator.firefox\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Firefox\"\nLABEL oc.displayname=\"Firefox (alpine)\"\nLABEL oc.path=\"/usr/bin/firefox\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"htm;html;xml;gif\"\nLABEL oc.legacyfileextensions=\"htm;html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Firefox\"\nENV APPBIN \"/usr/bin/firefox\"\nENV APP \"/usr/bin/firefox\"\nLABEL oc.usedefaultapplication=true\nCOPY composer/init.d/init.firefox /composer/init.d/init.firefox\nCOPY policies.json /usr/lib/firefox/distribution\nCOPY /ntlm_auth /usr/bin/ntlm_auth.desktop\nRUN chown root:root /usr/bin/ntlm_auth.desktop && chmod 111 /usr/bin/ntlm_auth.desktop\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/firefox/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/firefox/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/firefox/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/firefox/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends flare-game && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"flare.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNzQ0LjA5NDQ4ODE5IgogICBoZWlnaHQ9IjEwNTIuMzYyMjA0NyIKICAgaWQ9InN2ZzIiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL1VzZXJzL2NsaW50YmVsbGFuZ2VyL0Rlc2t0b3AvZmxhcmUucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMTUwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTUwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJmbGFyZV9sb2dvLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzE2MyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmM2NDE7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzE2NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmN2YwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMTY3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMTAiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMxNjMiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMTk3IgogICAgICAgY3g9IjM4MS44ODg5MiIKICAgICAgIGN5PSI0MTcuNTIxODIiCiAgICAgICBmeD0iMzgxLjg4ODkyIgogICAgICAgZnk9IjQxNy41MjE4MiIKICAgICAgIHI9IjE2Ni45NjU1MiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA1MjY1LDAsMCwxLjU4Nzk5NjIsLTE5LjQxNzYzNywtMTM2LjQ1OTc5KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC40OCIKICAgICBpbmtzY2FwZTpjeD0iNDk1LjM3ODAyIgogICAgIGlua3NjYXBlOmN5PSI2MjIuNjcwNjUiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6c25hcC1nbG9iYWw9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzU2IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjcxMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDQ1IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDIzODUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzMTk3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDM1OS4xNzIxNiwyMzIuODMzOTcgQyAzNTkuMTcyMTYsMjMyLjgzMzk3IDM3Ny42ODAyMiwzMTQuNTg3MzkgMzcyLjkyNjkzLDM0Mi4xNTczNyBDIDM2OC4yNTIxNCwzNjkuMjcxOTkgMzUzLjM3NzgsNDAzLjUxNzI3IDMyNy40MzUzOCw0MTQuMDA0MjggQyAzMTkuMzUyNDQsNDE3LjI3MTc0IDI5NC40ODQ5Niw0MDAuNjk5ODEgMjg1LjQzMDM0LDM5MC4zNzMxIEMgMjc2LjM3NTczLDM4MC4wNDYzOSAyNzAuMTQ0ODQsMzUxLjA0NzQ0IDI3MC4xNDQ4NCwzNTEuMDQ3NDQgQyAyNzAuMTQ0ODQsMzUxLjA0NzQ0IDI2NC4zNTQwMiwzNzYuMzM5NTIgMjY3LjAxODYzLDQwMC43NDAyNyBDIDI2OS42ODMyMyw0MjUuMTQxMDIgMjgwLjgyNTMxLDQ2MC44OTMxMiAyNzkuOTc0NTUsNDc5LjYzNTU1IEMgMjc5LjA1NDU5LDQ5OS45MDIxNSAyNjUuMjE1MTYsNTIyLjExOTk1IDI2NS4yMTUxNiw1MjIuMTE5OTUgQyAyNjUuMjE1MTYsNTIyLjExOTk1IDI1Ni43MTY5OCw0OTguNDU1NzMgMjQ4LjM3MTY5LDQ4Mi42NjIxMiBDIDI0MC4wMjY0LDQ2Ni44Njg1MSAyMTcuOTcxMTUsNDQ1LjU2MDU0IDIxNy45NzExNSw0NDUuNTYwNTQgQyAyMTcuOTcxMTUsNDQ1LjU2MDU0IDIyOS40MTg0Niw0NzEuNjg3MzMgMjI5LjgzOTU0LDQ5Ni4xMDg5OSBDIDIzMC4yNjA2Miw1MjAuNTMwNjUgMTg2LjI0NDM0LDU3Mi4xNzYyNCAyMzEuMDMyNTUsNjM5LjMxMzkxIEMgMjc2LjMwNzE5LDcwNy4xODA3NiAzNDQuMDgxMTQsNjk5LjI2ODQzIDM0NC4wODExNCw2OTkuMjY4NDMgTCAzNjAuNTY5MDMsNjkzLjIwNTkzIEwgMjk3LjI5NjM4LDY2Mi4yMDU5MyBMIDM3OC45Mzg1LDYyMi4yMDU5MyBMIDI5Ny4yOTYzOCw1ODIuMjA1OTMgTCAzNzguOTM4NSw1NDIuMjA1OTMgTCA0NjAuNTgwNjIsNTgyLjIwNTkzIEwgNTMxLjY2NjY3LDU0Ny4zNjIxOCBMIDUyOS42ODk0LDUzNi4wODA5MyBMIDQ2MC41ODA2Miw1MDIuMjA1OTMgTCA1MjAuNzU5NzksNDcyLjczNzE4IEwgNTE4LjMzNjA0LDQ1Mi45MjQ2OCBMIDUwOC4zODU5MSwzNzkuNzY4NDMgQyA1MDguMzg1OTEsMzc5Ljc2ODQzIDQ5Ni45MzY2MSw0MDQuMTI0OTggNDg0LjI1NDgyLDQxMi42Nzk0MSBDIDQ3NS45MDg1Nyw0MTguMzA5MzEgNDU1LjM0ODg1LDQyMC4zMjMxNiA0NTUuMzQ4ODUsNDIwLjMyMzE2IEMgNDU1LjM0ODg1LDQyMC4zMjMxNiA0NDQuMDkyOTcsMzYwLjI5MTYzIDQzMi4yNDUwOSwzMjkuMDU3NSBDIDQxMS4wOTE2NCwyNzMuMjkxNCAzNTkuMTcyMTYsMjMyLjgzMzk3IDM1OS4xNzIxNiwyMzIuODMzOTcgeiBNIDQ2MC41ODA2Miw1ODIuMjA1OTMgTCAzNzguOTM4NSw2MjIuMjA1OTMgTCA0NTMuODgzNDIsNjU4LjkyNDY4IEwgNDgzLjQ3ODY4LDY0OC4wNDk2OCBMIDUxNi42MTM5LDYwOS42NzQ2OCBMIDQ2MC41ODA2Miw1ODIuMjA1OTMgeiIKICAgICAgIGlkPSJwYXRoMjM4MyIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NzemN6c2N6Y3p6Y2NjY2NjY2NjY2NjY3Njc2NjY2NjY2MiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"flare,flare-game,role,playing\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"flare.desktop\"\nLABEL oc.launch=\"flare.flare\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--game=flare-game\"\nLABEL oc.name=\"flare\"\nLABEL oc.displayname=\"flare\"\nLABEL oc.path=\"/usr/games/flare\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"flare\"\nENV APPBIN \"/usr/games/flare\"\nLABEL oc.args=\"--game=flare-game\"\nENV APP \"/usr/games/flare\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/flare/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/flare/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/flare/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/flare/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends frozen-bubble && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"frozen-bubble.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDQ2NDgiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojN2QzMjlhIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FjNWNjZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NDY1MiIgeDE9IjMwLjU3NyIgeDI9IjQ1IiB5MT0iMTkuMTI5IiB5Mj0iMjcuNDU2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzA1ODgyMzcsMCwwLDAuNjY2NjY2NywtMC43NjQ3MDU1MSwtNWUtNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NjQ4Ii8+CiA8L2RlZnM+CiA8cGF0aCBzdHlsZT0ib3BhY2l0eTowLjIiIGQ9Ik0gMTEuNzk5OTU3LDE2LjQ0NjA2IEMgMTAuMzc3MTY1LDIwLjg0NjE2MiA3LjY1ODQ0ODMsMjUuNzI3NjI5IDIsMjQuOTA5NDkyIDIuMzc0MTYxOCwyMS4yMjkyMjQgMy45MDIwMDg0LDE3LjUyMzc5OSA2LjA2MDI1NTEsMTQuNTUwNTAxIDYuNTE1MjE3NSwxMy45MjM3MjggNy40NTM5NzIyLDEzLjY0NTg1NCA3Ljg0MjI4MTUsMTMuMTAwMDUyIFoiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0iTSAxNC4wMTg4MDUsMy4wMDAwMDA1IEMgMTAuNjU2ODE2LDMuMDQ5NTYyNSAzLjkyNTEyMjcsOC41Mzc4ODYzIDMuMDkwNjc2LDE1LjEzNzgzOCBjIC0wLjI0MDI4NzUsMS45MDA1MjQgMC4wMDYzNiwzLjkyNDEwNCAwLjYyODcwNzQsNS44MTQ2MjIgMC4zNDM5NDI2LDUuOTMyODk0IDguMTM0NTY5Niw5LjcyMzE2MiAxMy4wMDAyMjU2LDEwLjA0NDY4MyA1Ljk1MjYzOCwwLjE0MDI0OCAxMS41MTIxNDQsLTQuOTI0MjUxIDEyLjYwNDY4MiwtNi4yODM1NjYgMS45OTgxLC0yLjk1NTA1MyAtMC44Mjk5OTcsLTkuMzI1MTIxIC0zLjM1MzEwNiwtMTMuMDM0NzA4IC0yLjc2ODkwMSwtNC4wNzA5NjU3IC03LjkzMDU2LC03LjAzNTIwNzUgLTExLjk1MjM4LC04LjY3ODg2ODUgeiIvPgogPHBhdGggc3R5bGU9ImZpbGw6IzY1MzU3OCIgZD0iTSAxMS43OTk5NTcsMTUuNDQ2MDYgQyAxMC4zNzcxNjUsMTkuODQ2MTYyIDcuNjU4NDQ4MywyNC43Mjc2MjkgMiwyMy45MDk0OTIgMi4zNzQxNjE4LDIwLjIyOTIyNCAzLjkwMjAwODQsMTYuNTIzNzk5IDYuMDYwMjU1MSwxMy41NTA1MDEgNi41MTUyMTc1LDEyLjkyMzcyOCA3LjQ1Mzk3MjIsMTIuNjQ1ODU0IDcuODQyMjgxNSwxMi4xMDAwNTIgWiIvPgogPHBhdGggc3R5bGU9ImZpbGw6IzdkMzI5YSIgZD0iTSAxNC4wMTg4MDUsMiBDIDEwLjY1NjgxNiwyLjA0OTU2MiAzLjkyNTEyMjcsNy41Mzc4ODU4IDMuMDkwNjc2LDE0LjEzNzgzOCBjIC0wLjI0MDI4NzUsMS45MDA1MjQgMC4wMDYzNiwzLjkyNDEwNCAwLjYyODcwNzQsNS44MTQ2MjIgMC4zNDM5NDI2LDUuOTMyODk0IDguMTM0NTY5Niw5LjcyMzE2MiAxMy4wMDAyMjU2LDEwLjA0NDY4MyA1Ljk1MjYzOCwwLjE0MDI0OCAxMS41MTIxNDQsLTQuOTI0MjUxIDEyLjYwNDY4MiwtNi4yODM1NjYgMS45OTgxLC0yLjk1NTA1MyAtMC44Mjk5OTcsLTkuMzI1MTIxIC0zLjM1MzEwNiwtMTMuMDM0NzA4IEMgMjMuMjAyMjg0LDYuNjA3OTAyOCAxOC4wNDA2MjUsMy42NDM2NjEgMTQuMDE4ODA1LDIgWiIvPgogPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4xO2ZpbGw6I2ZmZmZmZiIgZD0iTSAxNC4wMTk1MzEgMiBDIDEwLjY1NzU0MiAyLjA0OTU2MiAzLjkyNDI5MDQgNy41Mzg3MTk3IDMuMDg5ODQzOCAxNC4xMzg2NzIgQyAzLjAwODE3NTIgMTQuNzg0NjE5IDMuMDAyODMzOSAxNS40NDUwNTQgMy4wMjkyOTY5IDE2LjEwOTM3NSBDIDMuMDQyNjk1NyAxNS43ODQwOTIgMy4wNDk0NDMzIDE1LjQ1ODIxNCAzLjA4OTg0MzggMTUuMTM4NjcyIEMgMy45MjQyOTA0IDguNTM4NzIwMiAxMC42NTc1NDIgMy4wNDk1NjIgMTQuMDE5NTMxIDMgQyAxOC4wNDEzNTEgNC42NDM2NjEgMjMuMjAxODAyIDcuNjA4NzIxOCAyNS45NzA3MDMgMTEuNjc5Njg4IEMgMjcuODAyNzQyIDE0LjM3MzIzMiAyOS43ODcyNTQgMTguNDYzNjUgMjkuOTc2NTYyIDIxLjYzNjcxOSBDIDMwLjIyNjc3OSAxOC4zNzE3MzkgMjguMDAxNzUzIDEzLjY2NTgyNyAyNS45NzA3MDMgMTAuNjc5Njg4IEMgMjMuMjAxODAyIDYuNjA4NzIxMyAxOC4wNDEzNTEgMy42NDM2NjEgMTQuMDE5NTMxIDIgeiIvPgogPGVsbGlwc2Ugc3R5bGU9ImZpbGw6I2ZjZjhmZCIgY3g9Ii05LjAyMiIgY3k9IjIxLjU2NSIgcng9IjQuNzk0IiByeT0iNi4xMjUiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjc4MTYyNDUsLTAuNzM0OTEyMDMsMC43MjQyNjM0OSwwLjY4OTUyMzMxLDAsMCkiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0ibSAyMi4zNzQxNCwxMSBjIDQuNDM3MDk2LDEuNDUxODM1IDkuMzU5NjA3LDQuMjI2MDQ4IDguNTM0NTkxLDEwIEMgMjcuMTk3NTIyLDIwLjYxODIgMjMuNDYwOTQyLDE5LjA1OTE2NSAyMC40NjI2NDQsMTYuODU2ODY0IDE5LjgzMDYsMTYuMzkyNjE2IDE5LjU1MDM5MSwxNS40MzQ2OTcgMTksMTUuMDM4NDYxIFoiLz4KIDxwYXRoIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NjUyKSIgZD0ibSAyMi4zNzQxNCwxMCBjIDQuNDM3MDk2LDEuNDUxODM1IDkuMzU5NjA3LDQuMjI2MDQ4IDguNTM0NTkxLDEwIEMgMjcuMTk3NTIyLDE5LjYxODIgMjMuNDYwOTQyLDE4LjA1OTE2NSAyMC40NjI2NDQsMTUuODU2ODY0IDE5LjgzMDYsMTUuMzkyNjE2IDE5LjU1MDM5MSwxNC40MzQ2OTcgMTksMTQuMDM4NDYxIFoiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0iTSAxMiwxNiBDIDEyLjY5NDgxMywxOS4wMTY4MTEgNi43MDI3NjcsMjIuMTI4MDAzIDMuNjk2NTI3OCwyMC45MTk4MTEgMi4yNDk1NDMzLDIwLjMzODI3NSAyLjAwMjk2NjQsMTguMTI0MTgyIDIuMDYzOTI2MywxNi4zOTE5NyAyLjEyNTM3NDMsMTQuODU3NjUgMS45NzE0NjEzLDE0LjM5MDQ3MSAzLjUwNzQ4NDIsMTQuMjQ0MDUyIDYuNDE2NTMxOSwxMy45NzQ1NDkgMTEuNjk0Njg3LDE0LjY3NDM0NyAxMiwxNiBaIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZjMTAyIiBkPSJtIDExLjk0NDQxNCwxNC44MTMxMzcgYyAwLjY5NDgxMywzLjAxNjgxMSAtNS4yOTcyMzMsNi4xMjgwMDMgLTguMzAzNDcyMiw0LjkxOTgxMSAtMS40NDY5ODQ1LC0wLjU4MTUzNiAtMS42OTM1NjE0LC0yLjc5NTYyOSAtMS42MzI2MDE1LC00LjUyNzg0MSAwLjA2MTQ0OCwtMS41MzQzMiAtMC4wOTI0NjUsLTIuMDAxNDk5IDEuNDQzNTU3OSwtMi4xNDc5MTggMi45MDkwNDc3LC0wLjI2OTUwMyA4LjE4NzIwMjgsMC40MzAyOTUgOC40OTI1MTU4LDEuNzU1OTQ4IHoiLz4KIDxjaXJjbGUgc3R5bGU9Im9wYWNpdHk6MC4yIiBjeD0iLTQiIGN5PSIxMiIgcj0iMyIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0ib3BhY2l0eTowLjIiIGN4PSItMTAuNSIgY3k9IjExLjUiIHI9IjQuNSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iLTQiIGN5PSIxMSIgcj0iMyIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iLTEwLjUiIGN5PSIxMC41IiByPSI0LjUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KIDxjaXJjbGUgc3R5bGU9ImZpbGw6IzNmM2YzZiIgY3g9Ii05IiBjeT0iMTEiIHI9IjIiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KIDxjaXJjbGUgc3R5bGU9ImZpbGw6IzNmM2YzZiIgY3g9Ii0zLjUiIGN5PSIxMS41IiByPSIxLjUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KPC9zdmc+Cgo=\"\nLABEL oc.keyword=\"frozen-bubble,frozen,bubble\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"perl.perl\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"frozen-bubble\"\nLABEL oc.displayname=\"frozen-bubble\"\nLABEL oc.path=\"/usr/games/frozen-bubble\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"frozen-bubble\"\nENV APPBIN \"/usr/games/frozen-bubble\"\nENV APP \"/usr/games/frozen-bubble\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/frozen-bubble/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/frozen-bubble/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/frozen-bubble/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/frozen-bubble/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.20.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y qt5-default qml-module-qtquick-controls libqt5svg5 libqt5xmlpatterns5 libqt5sensors5 qml-module-qtquick-particles2 qml-module-qtmultimedia libqt5multimedia5-plugins gcompris-qt && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gcompris.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0IgogICBoZWlnaHQ9IjY0IgogICB2aWV3Qm94PSIwIDAgNjQgNjQiCiAgIGlkPSJzdmc0MjUwIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJnY29tcHJpcy1pY29uLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS90aW1vL2Rlc3Npbi9HQ29tcHJpei9nY29tcHJpcy1pY29uMDctMjU2LnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjM2MCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjM2MCI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2I4YjhiOCIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSIxNS45ODA2NzYiCiAgICAgaW5rc2NhcGU6Y3k9IjU1Ljk0NzE3MiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICB1bml0cz0icHgiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxODc4IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNTEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBzaG93Z3VpZGVzPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgZW1wc3BhY2luZz0iNCIKICAgICAgIGlkPSJncmlkNTU3MyIKICAgICAgIHR5cGU9Inh5Z3JpZCIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDI1MiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDkxMzgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjI1MTIwNzc0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wOTE0MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A5MTQyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk4OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzJhNDM7c3RvcC1vcGFjaXR5OjAuNTAxOTYwODEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A4OTkwIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTMzZTZiO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wODk5MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQyNDMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDQyNDUiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2NmNWUxOTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0MjQ3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlNzc5MzY7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iNTYzLjQ1MjM5IgogICAgICAgeDI9IjQ0OC4xNTc4NyIKICAgICAgIHkxPSI2MTUuMTU5NTUiCiAgICAgICB4MT0iNDQ4LjE1Nzg3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDI0OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQyNDMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDY5MDI4NDUsMC4yOTc3MzEwMSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5ODgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4OTk0IgogICAgICAgeDE9IjQ1LjI4OTA1MSIKICAgICAgIHkxPSI5NS43NDU4NTciCiAgICAgICB4Mj0iNDUuMjg5MDUxIgogICAgICAgeTI9IjQ4Ljc2ODk0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzY5ODYyNDYsMCwwLDAuMzY5ODYyNDYsNDUyLjEzMzksNTc3LjM2MSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDkxMzgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ5MTQ0IgogICAgICAgeDE9IjMzLjAxMDQ0OCIKICAgICAgIHkxPSI2My42NDM2MTYiCiAgICAgICB4Mj0iMzMuMDEwNDQ4IgogICAgICAgeTI9IjEuNDE4MjE4OSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0MTkuNzQzNzEsNTUzLjAzMTcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5MTM4IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50OTE2NyIKICAgICAgIHgxPSI0NTEuMDc0NTgiCiAgICAgICB5MT0iNjE0LjQxNTEiCiAgICAgICB4Mj0iNDUxLjA3NDU4IgogICAgICAgeTI9IjU1NS4yODMzMyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMC45NTg3NTg3OSwtMy45MjI5ODM4ZS00KSIgLz4KICA8L2RlZnM+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDI1NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyMC43MDI0NywtNTUzLjAzMjA5KSIKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhbHF1ZSAxIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEwNTU2OTIxLDEuMjUwMzA1NWUtNCwtMS4yNTA2NzJlLTQsMC4xMDU1MzgyOCw0MTkuMTY0NzMsNTc3LjEwNTcyKSIKICAgICAgIGlkPSJnMzY5Mi0xLTAtMC03LTQtMyIKICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjQuMzg2NjkzO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzU0NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjQ1NTkyNDI4LDAsMCwwLjQ1NTkyNDMzLDIzNS4yNDEzOSwzODAuOTgyNzQpIj4KICAgICAgPGcKICAgICAgICAgaW5rc2NhcGU6bGFiZWw9ImJhbGwiCiAgICAgICAgIGlkPSJsYXllcjMtMiIKICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lO3N0cm9rZS13aWR0aDo0LjM4NjY5MztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMTg5NjEtMS05IgogICAgICAgZD0ibSA0NzQuMzU4OTQsNTg2Ljc3Nzc5IGMgLTAuNTU2ODEsLTAuMDE4NSAtMy4wOTgyNiwwLjAxMjIgLTMuNjE1MjMsMC4wMzMyIGwgLTAuNSwyNi4yNDgwNCBjIDEuNTY4MDgsLTAuMjc4OTQgNS42Mjk4MSwtMC44Mjg3NyA3LjE3NzczLC0xLjEyMzA0IDIuNjQ5MDQsLTEuMDc4ODYgMi44NjgzMywtNC4zOTk2MyA0LjQwNjI1LC02LjQ1NzAzIDEuMTM5MjMsLTIuMzcyNzcgMi41ODk3NywtNC44ODQxNiAyLjczNjMzLC03LjQ5NDE0IC0xLjkxNTAyLC0zLjkzOTAzIC00Ljk2MTk2LC03LjIxMTQzIC03LjgwNDY5LC0xMC40NzY1NyAtMC42OTEwMSwtMC41MjU2NSAtMS41NDYxMSwtMC42OTUzNyAtMi40MDAzOSwtMC43MzA0NyB6IgogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNDE4Mi0zIgogICAgICAgZD0ibSA0MjguNjgyMzEsNTU3LjMzODc1IGMgLTEyLjA2NDcsMTMuMDIwMzggLTkuODk0MjgsMzUuNjczMTggNC4zNTU0Nyw0Ni4yMTI4OSAxMi4xODUzNyw5Ljk5OTkxIDMxLjQwMjIzLDguNjc2OTMgNDIuNDA4MiwtMi40OTYxIC0zLjMyODAxLC0zLjI3Mjk3IC02LjMzNTg5LC0yLjUzNzMzIC0xMC4yNSwyLjY4OTQ2IC0xMi4yNTA2Niw4LjY1Mjc5IC0zNS4xNzk3MSwtNC44MzcyOSAtMzguNTk1NywtMTkuMTA1NDcgLTIuMzQwNzMsLTcuODk4MDUgMC4xMzU1NiwtMTYuNzM3NzQgNS43ODcxMSwtMjIuNjQyNTggLTIuMzI1MDYsLTAuNDQ2ODMgLTEuMjQwMzUsLTUuNjQ3MTkgLTMuNzA1MDgsLTQuNjU4MiB6IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1Mjk3LTUiCiAgICAgICBkPSJtIDQ1MC45NTQ1OSw2MDcuNTM2NjcgYyAtNi4zNTc0OCwwLjYyOTgxIC0xNC44OTYzNywwLjA5ODcgLTE5LjAyMTk0LDUuNjIyOTggLTIuNjg4NzksNS4wOTg2OCA0LjEyOTcsMy4zNDAyNyA3LjU2NTI3LDMuNTQ5MTQgMTEuNTU4OTMsMCAyMy4xMTc4OCwwIDM0LjY3NjgxLDAgMC43MTc5MSwtNy4xNTgxMSAtOC42NDY4MiwtOC4yMDc4MSAtMTQuMTQyMTksLTguODQ0NDggLTMuMDE0MDksLTAuMjk5MjYgLTYuMDQ4NywtMC4zOTE0NCAtOS4wNzc5NSwtMC4zMjc2NCB6IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxyZWN0CiAgICAgICByeD0iMS42NDczOTMyZS0wNyIKICAgICAgIHk9IjYwNy4zOTM3NCIKICAgICAgIHg9IjQ1MC44NDQ3IgogICAgICAgaGVpZ2h0PSI0Ljg0MDIwNjYiCiAgICAgICB3aWR0aD0iMy44NzIxNjUyIgogICAgICAgaWQ9InJlY3Q1MzAwIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNlNzc5MzY7ZmlsbC1vcGFjaXR5OjAuOTcyNTQ5MDI7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxlbGxpcHNlCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGlkPSJwYXRoNDg0OC02IgogICAgICAgY3g9IjQ1Mi42NTE3MyIKICAgICAgIGN5PSI1NzguMzUyNTQiCiAgICAgICByeD0iMjMuMTExOTE3IgogICAgICAgcnk9IjIzLjExMTkyMSIgLz4KICAgIDxyZWN0CiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LC0wLjcwNzEwNjc4LDAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGlkPSJyZWN0NDE4MC0zLTciCiAgICAgICB3aWR0aD0iNy42Mzg5Njg1IgogICAgICAgaGVpZ2h0PSI2NC40OTQ1OTgiCiAgICAgICB4PSItOTIuOTY4NTc1IgogICAgICAgeT0iNjk3LjA0ODIyIgogICAgICAgcng9IjMuMjQ5OTY5OWUtMDciCiAgICAgICByeT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50OTE0NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSA0MzIuNTUwMzUsNTUzLjIyNTA2IC01LjQwMjM0LDUuNDAwMzkgMC4yMzQzOCwwLjIzNDM4IGMgLTEwLjU3NTgxLDEzLjE5OTAyIC04LjA1NDc0LDM0LjU1MDE4IDUuNjU2MjUsNDQuNjkxNCAyLjU2MTY0LDIuMTAyMjIgNS40MzUwMiwzLjY5OTM2IDguNDc2NTYsNC44MTQ0NSAtMy43OTEzNSwwLjU4MzQ4IC03LjMzOTUxLDEuNzkyMTEgLTkuNTgyMDMsNC43OTQ5MyAtMi42ODg3OSw1LjA5ODY3IDQuMTI4ODgsMy4zMzk5NiA3LjU2NDQ1LDMuNTQ4ODIgbCAzNC42Nzc3MywwIGMgMC4xNjg3MSwtMS42ODIxNSAtMC4yMjQ0MywtMy4wMjQwNyAtMC45ODgyOCwtNC4xMDU0NiAxLjYzNjU5LC0wLjI0MzY3IDMuMzE5OTgsLTAuNDk0MTQgNC4yMzQzOCwtMC42Njc5NyAyLjY0OTA0LC0xLjA3ODg2IDIuODY4MzMsLTQuMzk5NjIgNC40MDYyNSwtNi40NTcwMyAxLjEzOTIzLC0yLjM3Mjc2IDIuNTg5NzcsLTQuODg0MTUgMi43MzYzMywtNy40OTQxNCAtMS45MTUwMiwtMy45MzkwMyAtNC45NjE5NiwtNy4yMTE0MyAtNy44MDQ2OSwtMTAuNDc2NTcgLTAuNjkxMDEsLTAuNTI1NjUgLTEuNTQ2MTEsLTAuNjk1MzYgLTIuNDAwMzksLTAuNzMwNDcgLTAuMDMyNSwtMTBlLTQgLTAuMTY1NzMsMC4wMDMgLTAuMjEwOTQsMC4wMDIgMS4wNTk3OCwtMi42ODM3OSAxLjYwNzYzLC01LjU0MjMgMS42MTUyMywtOC40Mjc3NCAtMy4zZS00LC0xMi43NjM5IC0xMC4zNDc0MiwtMjMuMTExIC0yMy4xMTEzMiwtMjMuMTExMzMgLTQuODk3NDYsMC4wMSAtOS42NjUxMywxLjU3NTU2IC0xMy42MTUyNCw0LjQ3MDcxIGwgLTYuNDg2MzMsLTYuNDg2MzMgeiBtIC0xLjA0Njg3LDkuNzU1ODYgMi4xNzk2OSwyLjE3OTY5IGMgLTIuNjk0NiwzLjg3MTM5IC00LjE0MDE3LDguNDc0NTYgLTQuMTQyNTgsMTMuMTkxNCAtNy41ZS00LDEyLjc2NDY2IDEwLjM0NjY3LDIzLjExMjk2IDIzLjExMTMzLDIzLjExMzI4IDQuNzEzODQsLTAuMDEgOS4zMTE5OCwtMS40NjA3MiAxMy4xNzc3MywtNC4xNTgyIGwgMi44MjYxNywyLjgyNjE3IGMgLTEuMDg5MDIsMC43NzA0NyAtMi4yMjkwNCwxLjk2ODkxIC0zLjQ1ODk4LDMuNjExMzMgLTEyLjI1MDY2LDguNjUyOCAtMzUuMTc5NzEsLTQuODM3MjkgLTM4LjU5NTcsLTE5LjEwNTQ3IC0yLjIxNDM4LC03LjQ3MTcyIC0wLjExNTMyLC0xNS43ODMwNiA0LjkwMjM0LC0yMS42NTgyIHogbSAzOC44OTA2Miw0Mi4xNjYwMSAtMC4wOTc2LDUuMTAzNTIgYyAtMS45MDUwNCwtMC45NzIxNiAtNC4yNDQwNiwtMS41MTM0NyAtNi40ODQzOCwtMS44NzUgMi4zMDY4NSwtMC44MTk1NCA0LjUyMDM0LC0xLjg5NzM3IDYuNTgyMDMsLTMuMjI4NTIgeiIKICAgICAgIGlkPSJwYXRoMTg5NjEtMS05LTMiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNDE4MiIKICAgICAgIGQ9Im0gNDMwLjIwMTk4LDU1OC42NCBjIC00Ljc3NzU5LDUuNDU3IC03LjQxNzE3LDEyLjQ1OTYzIC03LjQzMDQ4LDE5LjcxMjUgMCwxNi41NzM2NiAxMy40MzU2MSwzMC4wMDkyNyAzMC4wMDkyOCwzMC4wMDkyNyA3LjI1NTI5LC0wLjAwOCAxNC4yNjIyNCwtMi42NDMwOSAxOS43MjM4NCwtNy40MTkxMyBsIC0zLjUyMjM3LC0zLjUyMjM3IGMgLTQuNTIwOCwzLjg1MSAtMTAuMjYyOCw1Ljk3MDUgLTE2LjIwMTQ3LDUuOTgwMjkgLTEzLjgzMzY2LDAgLTI1LjA0ODA4LC0xMS4yMTQzOSAtMjUuMDQ4MDgsLTI1LjA0ODA2IDEwZS00LC01Ljk0MTk2IDIuMTE2MjYsLTExLjY4OTcxIDUuOTY1MTksLTE2LjIxNjU5IHoiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHJlY3QKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAsMCkiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgaWQ9InJlY3Q0MTgwLTMiCiAgICAgICB3aWR0aD0iNC43Mjc4MDEzIgogICAgICAgaGVpZ2h0PSI2MC43NDQ1OTUiCiAgICAgICB4PSItOTEuMjQ3Nzk1IgogICAgICAgeT0iNjk4LjY1ODA4IgogICAgICAgcng9IjIuMDExNDI1ZS0wNyIKICAgICAgIHJ5PSIwIiAvPgogICAgPGVsbGlwc2UKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2NsaXAtcnVsZTpub256ZXJvO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7Y29sb3ItaW50ZXJwb2xhdGlvbjpzUkdCO2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpsaW5lYXJSR0I7c29saWQtY29sb3I6IzAwMDAwMDtzb2xpZC1vcGFjaXR5OjE7ZmlsbDojZTc3OTM1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxOC45NDc2Nzk1MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgaWQ9InBhdGg0ODQ4IgogICAgICAgY3g9IjQ1Mi42NTE3MyIKICAgICAgIGN5PSI1NzguMzUyNTQiCiAgICAgICByeD0iMjEuMjM2OTE3IgogICAgICAgcnk9IjIxLjIzNjkyMSIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY3NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTI5NyIKICAgICAgIGQ9Im0gNDcyLjE0MTYxLDYxNS4wNzQxNSAtMTkuMzYwODIsMCAtMTkuMzYwODIsMCBjIDAsLTMuODcyMTcgOS42ODA0MSwtNS44MDgyNSAxOS4zNjA4MiwtNS44MDgyNSA5LjY4MDQxLDAgMTkuMzYwODIsMS45MzYwOCAxOS4zNjA4Miw1LjgwODI1IHoiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2NsaXAtcnVsZTpub256ZXJvO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7Y29sb3ItaW50ZXJwb2xhdGlvbjpzUkdCO2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpsaW5lYXJSR0I7c29saWQtY29sb3I6IzAwMDAwMDtzb2xpZC1vcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDI0OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGQ9Im0gNDMyLjg0NzIzLDU1NS4yMDU1MyAtMy4zNDM3NSwzLjM0MTc5IDAuNDIxODcsMC40MjE4OCBjIC00LjU5OTM2LDUuNDA4MzIgLTcuMTQxMjUsMTIuMjczOTIgLTcuMTU0MywxOS4zODI4MSAwLDE1LjkyMjk0IDEyLjQwMzI3LDI4Ljk0MzA1IDI4LjA3NDIyLDI5Ljk0MTQxIGwgMCwxLjAyMTQ4IGMgLTguOTkxMzIsMC4yNDIwNCAtMTcuNDI1NzgsMi4xNDcwMiAtMTcuNDI1NzgsNS43NTk3NyBsIDE5LjM2MTMzLDAgMTkuMzYxMzMsMCBjIDAsLTMuNjEyNzUgLTguNDM0NDYsLTUuNTE3NzMgLTE3LjQyNTc4LC01Ljc1OTc3IGwgMCwtMS4wMjUzOSBjIDYuNDE0OTksLTAuNDIxNTcgMTIuNTM5MTIsLTIuODkxMTcgMTcuNDU4OTgsLTcuMDcwMzEgbCAwLjI4MTI1LDAuMjgxMjUgMy4zNDM3NSwtMy4zNDM3NSAtNi41NjgzNiwtNi41NjgzNiBhIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgNC42NTYyNSwtMTMuMjM2MzMgMjEuMjM2OTE3LDIxLjIzNjkyMSAwIDAgMCAtMjEuMjM2MzMsLTIxLjIzNjMzIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgLTEzLjI1LDQuNjQ0NTQgbCAtNi41NTQ2OCwtNi41NTQ2OSB6IG0gMC41ODU5Myw3LjI3MTQ4IDIuNjM4NjgsMi42Mzg2NyBhIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgLTQuNjU2MjUsMTMuMjM2MzMgMjEuMjM2OTE3LDIxLjIzNjkyMSAwIDAgMCAyMS4yMzYzMiwyMS4yMzgyOCAyMS4yMzY5MTcsMjEuMjM2OTIxIDAgMCAwIDEzLjI1LC00LjY0NDUzIGwgMi43NDAyNCwyLjc0MDI0IGMgLTQuNDY4MjIsMy42NzQ5NiAtMTAuMDY3MDgsNS43MDUyOSAtMTUuODYxMzMsNS43MTQ4NCAtMTMuODMzNjYsMCAtMjUuMDQ4ODMsLTExLjIxNTE2IC0yNS4wNDg4MywtMjUuMDQ4ODMgOS44ZS00LC01Ljc5NzE1IDIuMDI4NzEsLTExLjQwMDk4IDUuNzAxMTcsLTE1Ljg3NSB6IgogICAgICAgaWQ9InJlY3Q1MzAwLTMiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2NjY2Nzc2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gNDYwLjk2MDM1LDU2OS4yMzU2NyBjIDAsMCAtMy4yNDkyNSwtMy4xNTA5NyAtOC44MTA3OSwtMy4xNTc1NSAtNS41NjE1MywtMC4wMDcgLTExLjEzMTAxLDYuNzAwNjggLTExLjEzNzc0LDEyLjM2NTQ5IC0wLjAwNyw1LjY2NDggMy4yMzg1NywxMi4xNzI2OSAxMS44NDMyLDEyLjE4Mjg3IDguNjA0NjUsMC4wMDkgMTIuNTk3NSwtNC40OTU5NSAxMS4xNDA4NSwtMTQuOTg4MDYgbCAtMTAuNjAyNCwzLjM0NDM4IDEuOTkxMjksMi4xMDA0MSAxLjI1OTYxLC0wLjMxMzIgYyAwLDAgMi4wOTU1OCwyLjYyNTA4IC0xLjA1Mjk2LDMuMDQwOTcgLTMuMTQ4NTMsMC40MTU4NyAtNS45ODA4LC0wLjQyNjcgLTYuMzk1NzksLTQuNDEzNTUgLTAuNDE1MDMsLTMuOTg2ODUgMi43MzYzOCwtNi44MTU1MiA2LjQwNzIzLC01LjIzNzYzIHoiCiAgICAgICBpZD0icGF0aDg4MTAtNi03LTAtNC05LTgiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxnCiAgICAgICBpZD0iZzkxNjkiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC45NTg3NTg3OSwtMy45MjI5ODM4ZS00KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxYTU2OTQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDQ1Ny4xMzY2NSw2MDIuMDY0MzYgYyAwLjEwNjY0LDAuODk0NTggNi4zOTMzOCw5LjcxNDI5IDcuMzEwOTYsMTAuMTQxNDcgMC45MTc1NywwLjQyNzE4IDEzLjI2NjAxLC0xLjI3MzkyIDE0LjAwNDA3LC0xLjkwNzggMC43MzgwNiwtMC42MzM4OCA1LjgzNzAyLC0xMC45MDc4OSA1LjY2MzQyLC0xMS45NDg4NiAtMC4xNzM2LC0xLjA0MDk3IC02Ljc0MjI0LC05LjQ4NjgxIC03LjcyMjg0LC05Ljk0MDY0IC0wLjk4MDYsLTAuNDUzODQgLTEzLjI5NTQ0LDAuMzQ3MTIgLTE0LjIxMDAyLDAuODAzMjggLTEuMDM0OTksMC41MTYyMiAtNS4xNTIyMywxMS45NTc5NyAtNS4wNDU1OSwxMi44NTI1NSB6IgogICAgICAgICBpZD0icGF0aDE4OTYxIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6enp6c3oiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMzZjhjZGY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDQ1OC43ODQxOSw2MDIuMDg5NTcgYyAwLjExMjc1LDAuOTMyNTkgNS43NDkyMyw4LjMzODg2IDYuNTkwNTQsOC43NjA3MiAwLjg0MTMyLDAuNDIxODYgMTEuMjk0OTgsLTEuMTE1ODcgMTEuOTUwODUsLTEuNjk4NTEgMC42NTU4NywtMC41ODI2NCA1LjU0MDM2LC0xMC4yNjA3NiA1LjEyNzE5LC0xMS4zNzMzMiAtMC40MTMxNywtMS4xMTI1NyAtNS44NzE2OCwtNy43NDkwNCAtNi44ODQ2NywtOC4xMTQ4IC0xLjAxMjk4LC0wLjM2NTc2IC0xMS4wOTA5NSwwLjAxNjQgLTEyLjEyNjU5LDAuNzE1MTYgLTEuMDM1NjUsMC42OTg3IC00Ljc3MDA3LDEwLjc3ODE2IC00LjY1NzMyLDExLjcxMDc1IHoiCiAgICAgICAgIGlkPSJwYXRoMTk4NDgiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ienp6enp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enp6eiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzJlNjZhNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNDY1LjE5Njc5LDYxMS4yNDI4NyBjIC0wLjkxNCwtMC4wNDU4IDQuOTQyMDEsLTExLjk1NDkgNS40OTg1MiwtMTIuNTA1OCAwLjU1NjUxLC0wLjU1MDg5IDExLjcxNDksLTEuMjY0ODQgMTIuMzUxMzgsLTAuNjI4NTQgMC42MzY0OCwwLjYzNjMgLTUuMDA3ODcsMTEuMTU2MTYgLTUuNTg2NzksMTEuNTk3MzMgLTAuNTc4OTEsMC40NDExNyAtMTEuMzQ5MTEsMS41ODI3OCAtMTIuMjYzMTEsMS41MzcwMSB6IgogICAgICAgICBpZD0icGF0aDIyNTUxIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzdHlsZT0iZmlsbDojMWE1Njk0O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA0NjIuODAwMDcsNTkwLjgxODM4IGMgMi4xMjIzMiwyLjk5NDk5IDYuNjY2Nyw3LjQ2NjE5IDYuODk5MDYsOC41MzQ5IDAuMjMyMzcsMS4wNjg3MSAtMy40MzIwMiw3Ljc2NTQxIC01LjQwOTU0LDExLjcxMzkzIGwgMS44MDU1NSwwLjUzOTc0IGMgMS4yOTU2OCwtNC4zMTY2IDMuOTQxNTEsLTExLjI1MzU4IDQuODM5NjUsLTExLjk1MjQ0IDAuODk4MTQsLTAuNjk4ODYgMTEuODYzNSwtMS40MTE4NCAxMi42NDgyMiwtMC44NjU5NiAwLjc4NDcyLDAuNTQ1ODggLTEuMDg2MTUsLTEuNjE3NDMgLTEuMDg2MTUsLTEuNjE3NDMgLTMuODUwMiwwLjc5OTg4IC0xMS4xNzAzOCwxLjI0MjU1IC0xMi4wNzY5MywwLjk3NzIzIC0wLjkwNjU1LC0wLjI2NTMyIC00LjU4MjE1LC01Ljg2OTg1IC02LjU5MDE1LC04LjMzNDA4IHoiCiAgICAgICAgIGlkPSJwYXRoMTk4NTAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjY3p6Y3pjYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDczLjg5MjAzLDU5NC44NDg5MSBjIC0xLjkzMzIsLTAuMTU4MjggLTMuMDYwNTEsLTIuNTA5MjIgLTEuMTI3MSwtMi4zNTM2MyAxLjkzMzQxLDAuMTU1NTggMy4wNjAzLDIuNTExOTEgMS4xMjcxLDIuMzUzNjMgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDY0LjQ0MTM3LDU5NS42Mjc1MiBjIDAuMTYwMDcsMS45MzMwNSAtMS45NzQ4MiwzLjQyOTcyIC0yLjEzNzU3LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MSAxLjk3NzUxLC0zLjQyOTk1IDIuMTM3NTcsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtmaWxsOiNjMGQ1ZWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBkPSJtIDQ2Mi4yNTc4Niw2MDAuMzU5MDUgYyAwLjE2MDA2LDEuOTMzMDUgLTEuOTc0ODIsMy40Mjk3MiAtMi4xMzc1OCwxLjQ5NjkgLTAuMTYyNzYsLTEuOTMyODIgMS45Nzc1MSwtMy40Mjk5NiAyLjEzNzU4LC0xLjQ5NjkgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtmaWxsOiNjMGQ1ZWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBkPSJtIDQ2Ny40NTczLDU5OS43MzUxMSBjIDAuMTYwMDcsMS45MzMwNSAtMS45NzQ4MSwzLjQyOTcyIC0yLjEzNzU3LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MSAxLjk3NzUxLC0zLjQyOTk1IDIuMTM3NTcsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMy03IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDY1LjIyMTU0LDYwNC41MTg2MSBjIDAuMTYwMDYsMS45MzMwNSAtMS45NzQ4MiwzLjQyOTcyIC0yLjEzNzU4LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MiAxLjk3NzUyLC0zLjQyOTk2IDIuMTM3NTgsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMy01IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6Izk3YmJkZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDc3LjI5MTc5LDYwNi42ODY2NiBjIC0wLjE3MDM0LDEuOTMyMTggLTIuNTI4MjcsMy4wNDQ3OSAtMi4zNjA2MiwxLjExMjM5IDAuMTY3NjQsLTEuOTMyNCAyLjUzMDk2LC0zLjA0NDU2IDIuMzYwNjIsLTEuMTEyMzkgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNTYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ienp6IiAvPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7ZmlsbDojOTdiYmRmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgICAgZD0ibSA0NzMuODY3NjksNjAyLjA0ODM2IGMgLTAuMjgyMDksMS45MTkwNCAtMi43MDA1NywyLjg5MzA1IC0yLjQyMTE1LDAuOTczNjMgMC4yNzk0MiwtMS45MTk0MyAyLjcwMzI1LC0yLjg5MjY3IDIuNDIxMTUsLTAuOTczNjMgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNTYtOSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4OTk0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNDU3LjEzNjY2LDYwMi4wNjQzNiBjIDAuMTA2NjMsMC44OTQ1OCA2LjM5MzM3LDkuNzE0MjkgNy4zMTA5NSwxMC4xNDE0NyAwLjkxNzU4LDAuNDI3MTggMTMuMjY2MDEsLTEuMjczOTIgMTQuMDA0MDcsLTEuOTA3OCAwLjczODA2LC0wLjYzMzg4IDUuODM3MDIsLTEwLjkwNzg5IDUuNjYzNDIsLTExLjk0ODg2IC0wLjE3MzYsLTEuMDQwOTcgLTYuNzQyMjQsLTkuNDg2ODEgLTcuNzIyODQsLTkuOTQwNjQgLTAuOTgwNiwtMC40NTM4NCAtMTMuMjk1NDQsMC4zNDcxMiAtMTQuMjEwMDIsMC44MDMyOCAtMS4wMzQ5OSwwLjUxNjIyIC01LjE1MjIzLDExLjk1Nzk4IC01LjA0NTU4LDEyLjg1MjU1IHoiCiAgICAgICAgIGlkPSJwYXRoMTg5NjEtMSIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enp6enN6IiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2NjY2Nzc2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gNDYwLjk2MDM1LDU2OS4yMzU2NyBjIDAsMCAtMy4yNDkyNSwtMy4xNTA5NyAtOC44MTA3OSwtMy4xNTc1NSAtNS41NjE1MywtMC4wMDcgLTExLjEzMTAxLDYuNzAwNjggLTExLjEzNzc0LDEyLjM2NTQ5IC0wLjAwNyw1LjY2NDggMy4yMzg1NywxMi4xNzI2OSAxMS44NDMyLDEyLjE4Mjg3IDguNjA0NjUsMC4wMDkgMTIuNTk3NSwtNC40OTU5NSAxMS4xNDA4NSwtMTQuOTg4MDYgbCAtMTAuNjAyNCwzLjM0NDM3IDEuOTkxMjksMi4xMDA0MiAxLjI1OTYxLC0wLjMxMzIgYyAwLDAgMi4wOTU1OCwyLjYyNTA3IC0xLjA1Mjk2LDMuMDQwOTYgLTMuMTQ4NTMsMC40MTU4OCAtNS45ODA4LC0wLjQyNjcgLTYuMzk1NzksLTQuNDEzNTUgLTAuNDE1MDMsLTMuOTg2ODQgMi43MzYzOCwtNi44MTU1MSA2LjQwNzIzLC01LjIzNzYyIHoiCiAgICAgICBpZD0icGF0aDg4MTAtNi03LTAtNC05LTgtNiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50OTE2Nyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE4Ljk0NzY3OTUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaWQ9ImxheWVyMyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"gcompris,gcompris\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"gcompris-qt.gcompris-qt\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.20.04\"\nLABEL oc.name=\"GCompris\"\nLABEL oc.displayname=\"GCompris\"\nLABEL oc.path=\"/usr/games/gcompris-qt\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"GCompris\"\nENV APPBIN \"/usr/games/gcompris-qt\"\nENV APP \"/usr/games/gcompris-qt\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gcompris/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gcompris/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gcompris/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gcompris/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update geany vte3 geany-plugins-commander geany-plugins-spellcheck geany-plugins-lang geany-plugins-pretty-printer geany-plugins-overview geany-plugins-scope\nLABEL oc.icon=\"geany.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgdmVyc2lvbj0iMS4wIgogICB3aWR0aD0iMjU2IgogICBoZWlnaHQ9IjI1NiIKICAgaWQ9InN2ZzIiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIzNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzIzNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMyMzkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC41IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMyNDEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC43NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMjQzIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxOTc0NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTk3NDYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxOTc0OCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VkZDQwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjc4NTk3Mjk1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDE5NzUwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNDY2NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTQ2NjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxNDY2OCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTIyOTQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDEyMjk2IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmVmOGM0O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTIyOTgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDExODUzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMTg1NSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDExODU3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4Mjg1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A4Mjg3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY2YzZjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wODI4OSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2NjMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzQ5OSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzUwMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZjVhYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDc1MDMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcxMDYiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxMDgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTEwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MzI4Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MzMwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjMzMiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTUzOSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTU0MSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU1NDMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM1NzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTc0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzkwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyNzkyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjc5NCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjE4OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjE5MCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM2MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4yMDU1MjkyNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODQ4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODUwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWRkNDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjE5MiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIzLjA3ODQwOSIKICAgICAgIGN5PSIxMi43NDM1OSIKICAgICAgIHI9IjMuNSIKICAgICAgIGZ4PSIyMy4wNzg0MDkiCiAgICAgICBmeT0iMTIuNzQzNTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMTg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mjc5MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1Ljg2NDkyNjQsLTE0LjA3NTgyMSwtMTAuMDAwMDAzLC0xMC42NjY2NjYsMTAzLjYzODMxLDMxNi43NzkyKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIxIgogICAgICAgeTE9IjM3LjY3ODIiCiAgICAgICB4Mj0iNDIuMjMwNzY2IgogICAgICAgeTI9IjU0LjE3OTYyNiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ3NTEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjI5NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxMiwwLDAsNi43ODcyOTE3LC0xNjUuMzMzMzQsLTI1NS43MzI5MykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyMy41IgogICAgICAgY3k9IjE5LjUiCiAgICAgICByPSIxNC41IgogICAgICAgZng9IjIzLjUiCiAgICAgICBmeT0iMTkuNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDU1NDUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1NTM5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNjU1MTcyMywwLDAsMC43MzU2MzIsODYuNDM2Nzg5LC0xMjYuMzQ0ODEpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMjEuNjI0OTk4IgogICAgICAgY3k9IjE2Ljc0OTk5OCIKICAgICAgIHI9IjUuNSIKICAgICAgIGZ4PSIyMS42MjQ5OTgiCiAgICAgICBmeT0iMTYuNzQ5OTk4IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NTkzNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc0OTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMy43MzMzMzM4LDAsMCwtMy44Nzg3ODc3LDM0LjkzMzMzNiwtNzMuNjk2OTYyKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEwLjQ1MDU4NSIKICAgICAgIGN5PSIyNy4zMzEzOTgiCiAgICAgICByPSI3IgogICAgICAgZng9IjEwLjQ1MDU4NSIKICAgICAgIGZ5PSIyNy4zMzEzOTgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ2NzE3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjMyOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxMy45OTk5OTgsMTQuNjM2NTg2LC0yLjMwODgzMTUsMTEuNzE3MzYyLC0yNi41Mzc5MTIsLTU1NC4zMzU1MykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyNCIKICAgICAgIGN5PSIzOC41IgogICAgICAgcj0iNiIKICAgICAgIGZ4PSIyNCIKICAgICAgIGZ5PSIzOC41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzExMiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxMDYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTUuNTU1NTU2LDAsMCw1Ljc3Nzc3NjUsLTI0OC4wMDAwMSwtMjA5LjExMTA3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIzLjUiCiAgICAgICBjeT0iMTkuNSIKICAgICAgIHI9IjE0LjUiCiAgICAgICBmeD0iMjMuNSIKICAgICAgIGZ5PSIxOS41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzExNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDU1MzkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi45NDI1Mjg1LDAsMCwxLjI4NzM1NjMsNTguODUwNTc2LC0xNy4xMDM0NDIpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMjIuOTk5OTk4IgogICAgICAgY3k9IjI4LjUiCiAgICAgICByPSIzIgogICAgICAgZng9IjIyLjk5OTk5OCIKICAgICAgIGZ5PSIyOC41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTE4NjUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ4Mjg1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDMuMTk5OTk4OSwwLDAsNi4yMjIyMjI5LDEuMDY2Njg1MiwtMjM5LjE1NTYzKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIxIgogICAgICAgeTE9IjI2IgogICAgICAgeDI9IjI1IgogICAgICAgeTI9IjMxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTE4NjciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMTg1MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjc3Nzc3NzEsMCwwLDQuNDQ0NDQ0MywzMy43Nzc3OCwtMTg2LjI2NjcxKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIyLjk5OTk5OCIKICAgICAgIGN5PSIyOC41IgogICAgICAgcj0iMyIKICAgICAgIGZ4PSIyMi45OTk5OTgiCiAgICAgICBmeT0iMjguNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE0MjU5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODI4NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgzLjIsMCwwLDYuMjIyMjIyOSw5Ny4wNjY2NjEsLTIzOC42NjY2OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMSIKICAgICAgIHkxPSIyNiIKICAgICAgIHgyPSIyNSIKICAgICAgIHkyPSIzMSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE0MjYxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTE4NTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS43Nzc3NzcxLDAsMCw0LjQ0NDQ0NDMsMTI5Ljc3Nzc4LC0xODUuNzc3NzcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iMTIiCiAgICAgICB5MT0iMTQiCiAgICAgICB4Mj0iNDQuNTY1MjE2IgogICAgICAgeTI9IjQ3LjY4NzUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNzEwOSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM1NzAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC45MDY2NjY2LDAsMCw0Ljc0MDc0MDgsNC42MjIzNzE1ZS02LC0xOTkuNDA3NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyMi45OTk5OTgiCiAgICAgICBjeT0iMjguNSIKICAgICAgIHI9IjMiCiAgICAgICBmeD0iMjIuOTk5OTk4IgogICAgICAgZnk9IjI4LjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxNzE3MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDgyODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNS4zMzMzMzA2LDAsMCw4LjI5NjI5NDksNS4wODU1NDE0ZS01LC0yODEuNzc3NzUpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iMjEiCiAgICAgICB5MT0iMjYiCiAgICAgICB4Mj0iMjUiCiAgICAgICB5Mj0iMzEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNzE3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDExODUzIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuOTYyOTYxNiwwLDAsNS45MjU5MjM3LDU0LjUxODU0NCwtMjExLjI1OTIxKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEzLjA3MTQ1NyIKICAgICAgIGN5PSIyMS4wOTQ0ODIiCiAgICAgICByPSIxNS41IgogICAgICAgZng9IjEzLjA3MTQ1NyIKICAgICAgIGZ5PSIyMS4wOTQ0ODIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxNzcwNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3OTAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNy42MTkwNDE2LDEyLjA0NjIyNywtOS44ODI3MTc4LDguNjIyNTg2MSwxNzcuODQ5NzQsLTQ0Ni4wMzQwNykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODA5OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyOCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSI0MC4wMzU3MTciCiAgICAgICB5MT0iMTIuMzU4ODUzIgogICAgICAgeDI9IjQxLjY2MDcxMyIKICAgICAgIHkyPSIzNS4zOTQ1NjkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxOTc0MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE5NzQ0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuMzMzMzMzMywwLDAsNS4zMzMzMzMzLC0xLjI5MTQzNGUtNywtMjA3Ljk5OTk5KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEzLjgxOTM0MiIKICAgICAgIGN5PSI4Ljg3OTg1MDQiCiAgICAgICByPSIxNC41IgogICAgICAgZng9IjEzLjgxOTM0MiIKICAgICAgIGZ5PSI4Ljg3OTg1MDQiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxOTc3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM1NzAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MDI0OTY1LDIuNDUyMTA3MiwtMy4wMTY0NTYsMy44ODc4NzY4LDg2Ljc0NzMwNywtMTgzLjk2NTgxKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjMiCiAgICAgICB5MT0iMjciCiAgICAgICB4Mj0iMzkiCiAgICAgICB5Mj0iMjgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODQ2IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjE4OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDUuMzMzMzMzMywtMS4yOTE0MzRlLTcsLTIwNy45OTk5OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSI4IgogICAgICAgeTE9IjM5IgogICAgICAgeDI9IjM4IgogICAgICAgeTI9IjM5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIzMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMyMzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNS4zMzMzMzMzLDAsMCw1LjMzMzMzMzMsLTEuMjkxNDM0ZS03LC0yMDcuOTk5OTkpIiAvPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlPjI5LTA2LTA3PC9kYzpkYXRlPgogICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+U2ViYXN0aWFuIEtyYWZ0PC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+YXBwbGljYXRpb248L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5nZWFueTwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPmVkaXRvcjwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnByb2dyYW1taW5nPC9yZGY6bGk+CiAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDgpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjE4LjY2NjY4LDEzLjMzMzMzNyBjIDAsMTkuMTM2IC00MS44MTMzNCwzNC42NjY2NjEgLTkzLjMzMzM0LDM0LjY2NjY2MSBDIDczLjgxMzMzMyw0Ny45OTk5OTggMzIsMzIuNDY5MzM3IDMyLDEzLjMzMzMzNyBjIDAsLTE5LjEzNTk5NTEgNDEuODEzMzMzLC0zNC42NjY2NjIgOTMuMzMzMzQsLTM0LjY2NjY2MiA1MS41MiwwIDkzLjMzMzM0LDE1LjUzMDY2NjkgOTMuMzMzMzQsMzQuNjY2NjYyIHoiCiAgICAgICBpZD0icGF0aDY3MjEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3MTEyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC40ODMwNDU4OHB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxOTkuOTk5OTksOC4wMDAwMDg2IGMgMCwxNC43MjAwMDA0IC0zNC42NDUzMywyNi42NjY2NjY0IC03Ny4zMzMzMywyNi42NjY2NjY0IC00Mi42ODc5OTMsMCAtNzcuMzMzMzMsLTExLjk0NjY2NiAtNzcuMzMzMzMsLTI2LjY2NjY2NjQgMCwtMTQuNzIgMzQuNjQ1MzM3LC0yNi42NjY2NjY2IDc3LjMzMzMzLC0yNi42NjY2NjY2IDQyLjY4OCwwIDc3LjMzMzMzLDExLjk0NjY2NjYgNzcuMzMzMzMsMjYuNjY2NjY2NiB6IgogICAgICAgaWQ9InBhdGgzNTgwIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzIzMyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMxNThweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTcwLjY2NjY2LDguMDAwMDA4NiBjIDAsMTAuMzA0MDAwNCAtMTkuMTE0NjcsMTguNjY2NjY2NCAtNDIuNjY2NjcsMTguNjY2NjY2NCAtMjMuNTUyLDAgLTQyLjY2NjY1NywtOC4zNjI2NjYgLTQyLjY2NjY1NywtMTguNjY2NjY2NCAwLC0xMC4zMDQgMTkuMTE0NjU3LC0xOC42NjY2NjY2IDQyLjY2NjY1NywtMTguNjY2NjY2NiAyMy41NTIsMCA0Mi42NjY2Nyw4LjM2MjY2NjYgNDIuNjY2NjcsMTguNjY2NjY2NiB6IgogICAgICAgaWQ9InBhdGg3MTE0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzExNik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTk0LjY2NjY3LDUuNTc3ODE2NiBjIDAsMTMuMTEzMDUwNCAtMzIuMjU2LDIzLjc1NTUxNDQgLTcxLjk5OTk5LDIzLjc1NTUxNDQgLTM5Ljc0NDAwOCwwIC03Mi4wMDAwMTYsLTEwLjY0MjQ2NCAtNzIuMDAwMDE2LC0yMy43NTU1MTQ0IDAsLTEzLjExMzA1MDcgMzIuMjU2MDA4LC0yMy43NTU1MjU2IDcyLjAwMDAxNiwtMjMuNzU1NTI1NiAzOS43NDM5OSwwIDcxLjk5OTk5LDEwLjY0MjQ3NDkgNzEuOTk5OTksMjMuNzU1NTI1NiB6IgogICAgICAgaWQ9InBhdGg0MzYyIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDc1MSk7c3Ryb2tlLXdpZHRoOjUuMzMzMzMyNTRweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMTYwLDMuMjQzOTI2NGUtNiBDIDE2MCw4LjgzMjAwODYgMTQzLjI3NDY3LDE2LjAwMDAwOSAxMjIuNjY2NjcsMTYuMDAwMDA5IDEwMi4wNTg2NywxNi4wMDAwMDkgODUuMzMzMzMzLDguODMyMDA4NiA4NS4zMzMzMzMsMy4yNDM5MjY0ZS02IDg1LjMzMzMzMywtOC44MzE5OTE0IDEwMi4wNTg2NywtMTUuOTk5OTkxIDEyMi42NjY2NywtMTUuOTk5OTkxIDE0My4yNzQ2NywtMTUuOTk5OTkxIDE2MCwtOC44MzE5OTE0IDE2MCwzLjI0MzkyNjRlLTYgeiIKICAgICAgIGlkPSJwYXRoMzU3OCIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2M0YTAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4zODE2OTg3M3B4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjAuOTQwMjksLTEzNS45OTk5OSBjIC00MC41MzkxODYsMCAtNzMuNDM0ODQsMTYuNjkxNSAtNzMuNDM0ODQyLDM3LjMwMTE2MSAwLDUuNDE5OTUyIC0wLjgxNDY1MiwxNi45NDEwMjQgMC41OTQ2MTQsMzAuNDQzMTA0IEMgMzQuODI4OTAxLC03My4zNjk2MTggMzQuODQzNTA4LC04NC44NjU0MSAzMy42ODA2NzEsLTk4LjUzMTU2IGwgLTE0Ljg2NTM1MiwwIGMgLTAuMDQxNiwwLjkzMTE0NyAtMC4xNDg2NTMsMS45MDE0ODggLTAuMTQ4NjUzLDIuODQzNTkgNC44OTQyOTQsNTkuOTgwMzM2IDUxLjg2ODUxMyw5Ni4wODY2MTg1OCAxMDIuMjczNjI0LDk4LjM1NDYzOTkgMjAuMjY5NTgsMCA0NS40NTM2NywtNS41MDAwMTYgNjEuMDk2NTksLTMyLjI4MzA3MTkgMTUuNjQyOTQsLTI2Ljc4MzA0NiAxMi4zMzgyNCwtNTguNzc3NjExIDEyLjMzODI1LC02OS4wODI0MjcgMCwtMjAuNjA5NjUxIC0zMi44OTU2NywtMzcuMzAxMTYxIC03My40MzQ4NCwtMzcuMzAxMTYxIHoiCiAgICAgICBpZD0icGF0aDIxOTYiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyODQ2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2M0YTAwMDtzdHJva2Utd2lkdGg6NS4zMzMzMzE1OHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAyNiwxNy41IGEgMy41LDAuNSAwIDEgMSAtNywwIDMuNSwwLjUgMCAxIDEgNywwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgzLjgwOTUyMzcsMCwwLDE2LjAwMDAwMiwzNi45NTIzODcsLTM5Mi4wMDAwMykiCiAgICAgICBpZD0icGF0aDM2MjgiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNjNGEwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlZGQ0MDA7c3Ryb2tlLXdpZHRoOjAuNjgzMTMwMDNweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDEwMS4zMzMzMywtMTA2LjY2NjY2IGMgMCwxNC43MjAwMDcgNjAuOCwyNi42NjY2NjggMjQsMjYuNjY2NjY4IC0zNi43OTk5OTcsMCAtNjYuNjY2NjYzLC0xMS45NDY2NjEgLTY2LjY2NjY2MywtMjYuNjY2NjY4IDAsLTE0LjcyIDI5Ljg2NjY2NiwtMjYuNjY2NjcgNjYuNjY2NjYzLC0yNi42NjY2NyAzNi44LDAgLTI0LDExLjk0NjY3IC0yNCwyNi42NjY2NyB6IgogICAgICAgaWQ9InBhdGgzMTg3IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC42O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTk3NzQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkxMzQ1OTM2cHg7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE4My45OTk5OSwtMTA5LjMzMzMyIGMgMCwxMS43NzU5OSAtMjcuNDc3MzIsMjEuMzMzMzI4IC02MS4zMzMzMiwyMS4zMzMzMjggLTMzLjg1NjAwMywwIC02MS4zMzMzNDIsLTkuNTU3MzM4IC02MS4zMzMzNDIsLTIxLjMzMzMyOCAwLC0xMS43NzYwMSAyNy40NzczMzksLTIxLjMzMzM0IDYxLjMzMzM0MiwtMjEuMzMzMzQgMzMuODU2LDAgNjEuMzMzMzIsOS41NTczMyA2MS4zMzMzMiwyMS4zMzMzNCB6IgogICAgICAgaWQ9InBhdGgxNjMzOSIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6bm9uZTtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDE3MTA5KTtzdHJva2Utd2lkdGg6NS4zMzMzMzMwMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDU2LjY2NjY2NywtMTA2LjY2NjY2IGMgMCw0Ljg4Mjg1IC00LjA5MDczMSwzMC43MTc4NjMgLTMuMzMzMzM0LDQyLjY2NjY2OCAwLjM3ODY5OSw1Ljk3NDQwNiAtMjYuMTA1MjI0LC0yMS45MzIyMDggLTIxLjY2NjY2NiwtMjYuNjY2NjY2IDEwLC0xMC42NjY2NjIgLTUsMCAtNSw1LjMzMzMzMyAwLDQyLjk5ODcwOSA1MC43NzE4NzcsNjkuNzE3NjQzIDU4LjA5Mjc4NCw3NC4yMDI2NzIgNy4zMjA5MTcsNC40ODUwMjQyIDE1LjAzNDAzNyw1Ljc5NzMyODIgMjEuOTA3MjE5LDUuNzk3MzI4MiAwLDAgMjEuMzMzMzMsLTgwLjAwMDAwMDIgMjEuMzMzMzMsLTgwLjAwMDAwMDIgLTIzLjcyMTY0LDAgLTY1LjI3MTYyNywtOC42MjczNjUgLTcxLjMzMzMzMywtMjEuMzMzMzM1IHoiCiAgICAgICBpZD0icGF0aDU5MzkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ2NzE3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxODkuMzMzMzMsLTEwNi43ODIwNCBjIDAsMTMuMzExNjkxIC0yOS44NjY2NiwyNC4xMTUzODIgLTY2LjY2NjY2LDI0LjExNTM4MiAtMzYuNzk5OTkzLDAgLTY2LjY2NjY2NSwtMTAuODAzNjkxIC02Ni42NjY2NjUsLTI0LjExNTM4MiAwLC0xMy4zMTE3IDI5Ljg2NjY3MiwtMjQuMTE1MzkgNjYuNjY2NjY1LC0yNC4xMTUzOSAzNi44LDAgNjYuNjY2NjYsMTAuODAzNjkgNjYuNjY2NjYsMjQuMTE1MzkgeiIKICAgICAgIGlkPSJwYXRoMTU5NDgiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxNDkuMzMzMzMsLTExMS45OTk5OSBjIDAsNS44ODggLTEwLjc1MiwxMC42NjY2NyAtMjQsMTAuNjY2NjcgLTEzLjI0Nzk5LDAgLTIzLjk5OTk5LC00Ljc3ODY3IC0yMy45OTk5OSwtMTAuNjY2NjcgMCwtNS44ODggMTAuNzUyLC0xMC42NjY2NiAyMy45OTk5OSwtMTAuNjY2NjYgMTMuMjQ4LDAgMjQsNC43Nzg2NiAyNCwxMC42NjY2NiB6IgogICAgICAgaWQ9InBhdGg1MTU0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4xO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTU0NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTIxLjIwNTMsLTEzMC42NjY2NiBjIC0zNy40NjAwMiwwIC02OC4yNTk5MiwxNC45OTU5NSAtNjguMjU5OTIsMzQuMDIzODE1IDAsMCAwLjk2MDQyOCwzMy45NzYxOTIgMC45NjA0MjgsMzMuOTc2MTkyIC0xMy44NDQ1MiwtMi4yNjE5MDQgLTIxLjk3NjY3NiwtMTEuNSAtMjIuNzEwODU1LC0zMC4wMDAwMDUgLTQuNzc1NzI5LC0xLjcxMDcyNiAtNS4yMDM1NDUsMC41OTQ2NSAtNy4xOTQ5NTQsMS41MDAwMDUgOC42Nzc1ODksNTQuNzc3ODgzIDUwLjQyNTYxNyw4Ni4yODQ0NDgyIDk3LjIwNTMwMSw4OC41MDAwMDU2IDE4LjczMDAxLDAgNDIuMDc2OTksLTUuMTA1ODg4IDU2LjUzMTc4LC0yOS44MzMzMzM2IDE0LjQ1NDc3LC0yNC43Mjc0MzUgMTEuMzA2MzYsLTU0LjE1Mjc1NyAxMS4zMDYzNSwtNjMuNjY2NjcyIDAsLTE5LjAyNzg1NyAtMzAuMzc4MTEsLTM0LjUwMDAwNyAtNjcuODM4MTMsLTM0LjUwMDAwNyB6IgogICAgICAgaWQ9InBhdGgyMjA2IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTp1cmwoI3JhZGlhbEdyYWRpZW50MTc3MDYpO3N0cm9rZS13aWR0aDo1LjMzMzMzMjU0cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE0MS4zMzMzNCwtMTMzLjMzMzMxIGMgMCwtNy4zNjAwMSAtOC4zNjI2OCwtMTMuMzMzMzQgLTE4LjY2NjY3LC0xMy4zMzMzNCAtMTAuMzA0LDAgLTE4LjY2NjY2LDUuOTczMzMgLTE4LjY2NjY2LDEzLjMzMzM0IDAsNy4zNTk5OSA4LjM2MjY2LDI0IDE4LjY2NjY2LDI0IDEwLjMwMzk5LDAgMTguNjY2NjcsLTE2LjY0MDAxIDE4LjY2NjY3LC0yNCB6IgogICAgICAgaWQ9InBhdGgyMjAxIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTkzNCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDlweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTM2LjAwMDAxLC0xMzEuODA5NTEgYyAwLC01LjI1NzE0IC01Ljk3MzM0LC05LjUyMzgxIC0xMy4zMzMzNCwtOS41MjM4MSAtNy4zNTk5OSwwIC0xMy4zMzMzMyw0LjI2NjY3IC0xMy4zMzMzMyw5LjUyMzgxIDAsNS4yNTcxNCA1Ljk3MzM0LDE3LjE0Mjg2IDEzLjMzMzMzLDE3LjE0Mjg2IDcuMzYsMCAxMy4zMzMzNCwtMTEuODg1NzIgMTMuMzMzMzQsLTE3LjE0Mjg2IHoiCiAgICAgICBpZD0icGF0aDIyMDQiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjcmFkaWFsR3JhZGllbnQzMTg1KTtzdHJva2Utd2lkdGg6NS4zMzMzMzMwMnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3NC42NjY2NjEsLTc3LjgyMjI2OSAtNy45OTk5OTQsMTYuMDAwMDA1IDcuOTk5OTk0LDE2IDguMDAwMDA2LC0xNiAtOC4wMDAwMDYsLTE2LjAwMDAwNSB6IgogICAgICAgaWQ9InBhdGgxMTg2MSIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTg2NSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNhNDAwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzMDI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNzQuNjY2NjY3LC03NS4xNTU2MDIgLTUuMzMzMzM0LDEzLjMzMzMzOCA1LjMzMzMzNCwxMy4zMzMzMjggMCwtMjYuNjY2NjY2IHoiCiAgICAgICBpZD0icGF0aDExODYzIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDExODY3KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE3MC42NjY2NywtNzcuMzMzMzMgLTgsMTYuMDAwMDA1IDgsMTYgOCwtMTYgLTgsLTE2LjAwMDAwNSB6IgogICAgICAgaWQ9InBhdGgxNDI1NSIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxNDI1OSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNhNDAwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzMDI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTcwLjY2NjY3LC03NC42NjY2NjQgLTUuMzMzMzQsMTMuMzMzMzM5IDUuMzMzMzQsMTMuMzMzMzI4IDAsLTI2LjY2NjY2NyB6IgogICAgICAgaWQ9InBhdGgxNDI1NyIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxNDI2MSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjIuNjY2NjYsLTY2LjY2NjY1MyAtMTMuMzMzMzIsMjEuMzMzMzI4IDEzLjMzMzMyLDIxLjMzMzMzNCBMIDEzNiwtNDUuMzMzMzI1IDEyMi42NjY2NiwtNjYuNjY2NjUzIHoiCiAgICAgICBpZD0icGF0aDE3MTY4IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE3MTcyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2E0MDAwMDtzdHJva2Utd2lkdGg6NS4zMzMzMzI1NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjIuNjY2NjcsLTYzLjExMTEwNiAtOC44ODg4OCwxNy43Nzc3ODYgOC44ODg4OCwxNy43Nzc3NjYgMCwtMzUuNTU1NTUyIHoiCiAgICAgICBpZD0icGF0aDE3MTcwIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDE3MTc0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDUsMjAuNSBhIDIsMS41IDAgMSAxIC00LDAgMiwxLjUgMCAxIDEgNCwwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDMuNTU1NTU2OCw3Ljk5OTk5OTksLTE3MS41NTU1NykiCiAgICAgICBpZD0icGF0aDE3MjAzIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojMmUzNDM2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojYzRhMDAwO3N0cm9rZS13aWR0aDoxLjIyNDc0NDY4cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3LDE4IGEgMi41LDMgMCAxIDEgLTUsMCAyLjUsMyAwIDEgMSA1LDAgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNiwwLDAsOCwtOC41MzMzMzM1LC0zMjIuNjY2NjYpIgogICAgICAgaWQ9InBhdGgxODEwOSIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE4MTI0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NDc3MjI0NnB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3LDE4IGEgMi41LDMgMCAxIDEgLTUsMCAyLjUsMyAwIDEgMSA1LDAgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDcuNDY2NjY2NywwLDAsNi4yMjIyMjE5LC05LjYwMDAwMDEsLTI2My45OTk5OCkiCiAgICAgICBpZD0icGF0aDE4MTA1IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTgxMjYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjY4NDY1MzFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNywxOCBhIDIuNSwzIDAgMSAxIC01LDAgMi41LDMgMCAxIDEgNSwwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDQuNDQ0NDQ0OCw1LjMzMzMzMzIsLTIxMC42NjY2NykiCiAgICAgICBpZD0icGF0aDE4MTAxIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTgxMjgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkxMjg3MDc2cHg7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDcsMTggYSAyLjUsMyAwIDEgMSAtNSwwIDIuNSwzIDAgMSAxIDUsMCB6IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC4yNjY2NjY3LDAsMCwzLjU1NTU1NTcsMi4xMzMzMzMyLC0xNzYpIgogICAgICAgaWQ9InBhdGgxNzcwOCIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE4MDk5KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wOTU0NDQ5MnB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAzNC42NjY2NjcsLTIwNS4zMzMzMyBjIC0xNC43MiwwIC0yNi42NjY2NjcxLDExLjk0NjY3IC0yNi42NjY2NjcxLDI2LjY2NjY3IDAsMy43NjE1NiAwLjkyNjE1MTUsNy4yNTM3MiAyLjMzMzMzMzEsMTAuNSAtNC42MzU3MTA3LDMuOTE0MzEgLTcuNjY2NjY2NSw5LjYyODk2IC03LjY2NjY2NjUsMTYuMTY2NjcgMCw4LjAxNjMgNC40NTczMDMsMTQuODU0OTIgMTEuMDAwMDAwNSwxOC41IC0wLjE3MjA1OCwwLjkzOTU5IC0wLjMzMzMzNCwxLjg0NDI3IC0wLjMzMzMzNCwyLjgzMzMzIDAsMi41MjM4OCAwLjYyNDQwOCw0Ljg3NjM0IDEuNjY2NjY3LDcgLTQuMTU2MjI0LDIuMjU4NzMgLTcuMDAwMDAwMSw2LjYwNjY2IC03LjAwMDAwMDEsMTEuNjY2NjcgMCw3LjM2IDUuOTczMzMzMSwxMy4zMzMzMzIgMTMuMzMzMzMzMSwxMy4zMzMzMzIgNy4zNiwwIDEzLjMzMzMzNCwtNS45NzMzMzIgMTMuMzMzMzM0LC0xMy4zMzMzMzIgMCwtMS4yMjE1OCAtMC4xOTE4NjgsLTIuMzc1NzkgLTAuNSwtMy41IDYuNDM0MzQ2LC0yLjA3Mjg2IDExLjE2NjY2NiwtOC4wNDU4NiAxMS4xNjY2NjYsLTE1LjE2NjY3IDAsLTMuNjk1MTUgLTEuMjI2OTkyLC03LjEyMzgxIC0zLjMzMzMzMywtOS44MzMzMyAyLjEwMzE3MywtMy4zMDUxIDMuMzMzMzMzLC03LjI5NDk2IDMuMzMzMzMzLC0xMS41IDAsLTAuNzM5MjIgLTAuMjU5ODI2LC0xLjQ0Njc1IC0wLjMzMzMzMywtMi4xNjY2NyA5LjU3LC00LjA1IDE2LjMzMzMzMywtMTMuNDYgMTYuMzMzMzMzLC0yNC41IDAsLTE0LjcyIC0xMS45NDY2NjcsLTI2LjY2NjY3IC0yNi42NjY2NjYsLTI2LjY2NjY3IHoiCiAgICAgICBpZD0icGF0aDE4MTEzIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTojYmFiZGI2O3N0cm9rZS13aWR0aDo1LjMzMzMzMzAycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAzNC42NjY2NjcsLTIwMC4zMzMzMyBjIC0xMS45MjMyLDAgLTIxLjY2NjY2Nyw5Ljc0MzQ3IC0yMS42NjY2NjcsMjEuNjY2NjcgMCw0LjQ3MTIgMS41MDM1NzEsOC41NTI0NCAzLjgzMzMzMywxMiAtNS40MzAzMzUsMi42NTQ5NyAtOS4xNjY2NjY0LDguMjE4NCAtOS4xNjY2NjY0LDE0LjY2NjY3IDAsNy41Njk2OCA1LjE3NTk0MDQsMTMuODE3MDIgMTIuMTY2NjY2NCwxNS42NjY2NiAtMC45OTYxMywxLjY2NTI2IC0xLjY2NjY2NiwzLjU4NjQyIC0xLjY2NjY2Niw1LjY2NjY3IDAsNi4xMzMzNCA1LjAzMzMzMywxMS4xNjY2NyAxMS4xNjY2NjYsMTEuMTY2NjcgNi4xMzMzMzQsMCAxMS4xNjY2NjgsLTUuMDMzMzMgMTEuMTY2NjY3LC0xMS4xNjY2NyAwLC00LjA1MzA4IC0yLjI1NTQ4NiwtNy41NTkxOCAtNS41LC05LjUgMy4yMTI3NjIsLTIuOTgzMzcgNS4zMzMzMzMsLTcuMTA2NTYgNS4zMzMzMzMsLTExLjgzMzMzIDAsLTEuOTkxMDQgLTAuMzQ2ODE2LC0zLjkwMTgyIC0xLC01LjY2NjY3IDkuNjU2MDMxLC0yLjE1NDYgMTcsLTEwLjY5NzYxIDE3LC0yMSAwLC0xMS45MjMyIC05Ljc0MzQ2NywtMjEuNjY2NjcgLTIxLjY2NjY2NiwtMjEuNjY2NjcgeiBtIC0xMy4zMzMzMzQsNzkuODMzMzQgYyAtNC43MTA0LDAgLTguNSwzLjc4OTU5IC04LjUsOC41IDAsNC43MTA0IDMuNzg5Niw4LjUgOC41LDguNSA0LjcxMDQsMCA4LjUsLTMuNzg5NjEgOC41LC04LjUgMCwtNC43MTA0IC0zLjc4OTYsLTguNSAtOC41LC04LjUgeiIKICAgICAgIGlkPSJwYXRoMTgxMzAiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjQuNDQ0NDQzN3B4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjE4LjY2NjY3LC0xNTEuOTk5OTkgYyAtMTkuMjA1MzQsMCAtMzIsMTUuNDYxMzMgLTMyLDM0LjY2NjY3IEwgMTkyLC0xMDYuNjY2NjYgYyAtMWUtNSwtMTUuODE2MTUgNS4wODI2NywtMjkuMzMzMzMgMjEuMzMzMzMsLTI5LjMzMzMzIDE2LjI1MDY2LDAgMjkuMzMzMzQsMTIuNjgzODQgMjkuMzMzMzQsMjguNSBsIDAsNDguMzMzMzMyIGMgLTIuMDE2OTQsMjUuMTIwNTQ5IC0zOS4zODg4NCwzMC4wODAxNDkgLTU5LDMzLjgzMzMzMyAtMi4zODc0MywzLjQ5Mzg0IC00Ljk0NDU1LDYuNTUyMTk4IC03LjY2NjY3LDkuMzMzMzM0IDI1Ljk5MDc3LC03LjA0MjQ0MyA3NC41NzcyMywtNy4zOTY4ODYgNzcuMzMzMzMsLTQyLjY2NjY2NyBsIDAsLTU4LjY2NjY2MiBjIDAsLTE5LjIwNTM0IC0xNS40NjEzMywtMzQuNjY2NjcgLTM0LjY2NjY2LC0zNC42NjY2NyB6IgogICAgICAgaWQ9InJlY3QxOTMzNSIKICAgICAgIHN0eWxlPSJmaWxsOiNlZGQ0MDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMyNTQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTkyLC0xMjIuNjY2NjYgYyAxNiwtNDIuNjY2NjcgNTQuMTkwNDcsLTE4Ljg1NzE0IDU1LjYxOTA1LDAuNjY2NjcgbCAtMC40NzYxOSw2Ni42NjY2NjUgYyAwLDE2LjE5MDQ4IC0yOC40NzYxOSwyOC42NjY2NjcgLTY1LjgwOTUzLDM0IgogICAgICAgaWQ9InBhdGgxOTM1MyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQxOTc0Mik7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"geany,text,editor,geany,ide\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"geany.desktop\"\nLABEL oc.launch=\"geany.Geany\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"geany\"\nLABEL oc.displayname=\"Geany\"\nLABEL oc.path=\"/usr/bin/geany\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;text/x-java;text/x-dsrc;text/x-pascal;text/x-perl;text/x-python;application/x-php;application/x-httpd-php3;application/x-httpd-php4;application/x-httpd-php5;application/xml;text/html;text/css;text/x-sql;text/x-diff;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"geany\"\nENV APPBIN \"/usr/bin/geany\"\nENV APP \"/usr/bin/geany\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/geany/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/geany/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/geany/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/geany/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gedit\nLABEL oc.icon=\"gedit.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZpZXdCb3g9IjAgMCAxMjggMTI4IgogICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJzdmcxMTMwMCIKICAgaGVpZ2h0PSIxMjgiCiAgIHdpZHRoPSIxMjgiPgogIDx0aXRsZQogICAgIGlkPSJ0aXRsZTQxNjIiPkFkd2FpdGEgSWNvbiBUZW1wbGF0ZTwvdGl0bGU+CiAgPGRlZnMKICAgICBpZD0iZGVmczMiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMDM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MwYmZiYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEwMjYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTAyOCIKICAgICAgICAgb2Zmc2V0PSIwLjA0NTQ1NDU0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDEwMzAiCiAgICAgICAgIG9mZnNldD0iMC4wOTA5MDkwOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RlZGRkYTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMDMyIgogICAgICAgICBvZmZzZXQ9IjAuOTA5MDkwODgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkZWRkZGE7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC45NTQ1NDU0NCIKICAgICAgICAgaWQ9InN0b3AxMDM0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzBiZmJjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMTAzNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDIyMTMiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxyZWN0CiAgICAgICAgIHJ5PSI4IgogICAgICAgICByeD0iOCIKICAgICAgICAgeT0iLTE4OCIKICAgICAgICAgeD0iMTYwIgogICAgICAgICBoZWlnaHQ9IjU2IgogICAgICAgICB3aWR0aD0iMTYiCiAgICAgICAgIGlkPSJyZWN0MjIxNSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMDA1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QwYmI4ZTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEwMDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMDAzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTM1MS0zIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMzQ3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNWQzY2Y7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTM0OS02IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMzUuOTk5OTkpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iLTI3NiIKICAgICAgIHgyPSIxMTUuOTk5OTkiCiAgICAgICB5MT0iLTI3NiIKICAgICAgIHgxPSIyNy45OTk5OSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDExNTkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMDM4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDc2MjEyMjQsLTAuNDQ0MTk3MjMsMC40NDQxOTcyNSwtMC4wNzYyMTIyMyw3Ny43MjU3OTQsMzMxLjgzODA3KSIKICAgICAgIHkyPSItMTI3LjM5OTE1IgogICAgICAgeDI9IjE1OC41MTgwMiIKICAgICAgIHkxPSItOTcuNjk4Mjg4IgogICAgICAgeDE9IjEyOC44MTcxNyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTEwMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwMDUiIC8+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDE2MDktNyIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6I2U3NDc0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMjUyLDExNiAyOCwtMjggdiAtOCBoIC0zNiB2IDM2IHoiCiAgICAgICAgIGlkPSJwYXRoMTYxMS01IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjcyIgogICAgICAgeDI9IjM0MCIKICAgICAgIHkxPSI3NiIKICAgICAgIHgxPSIzNDQiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsMTgwLDgzKSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTEzMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEzNTEtMyIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTA2MiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Y2ZjVmNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBpZD0icmVjdDEwNjQiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaGVpZ2h0PSIxMDgiCiAgICAgICAgIHg9Ii0xMDgiCiAgICAgICAgIHk9Ii0xMTYiCiAgICAgICAgIHJ4PSI4IgogICAgICAgICByeT0iOCIKICAgICAgICAgY2xpcC1wYXRoPSJub25lIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkdOT01FIERlc2lnbiBUZWFtPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpzb3VyY2UgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyIgLz4KICAgICAgICA8ZGM6dGl0bGU+QWR3YWl0YSBJY29uIFRlbXBsYXRlPC9kYzp0aXRsZT4KICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgIDxyZGY6QmFnIC8+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxkYzpkYXRlIC8+CiAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxkYzpwdWJsaXNoZXI+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZSAvPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnB1Ymxpc2hlcj4KICAgICAgICA8ZGM6aWRlbnRpZmllciAvPgogICAgICAgIDxkYzpyZWxhdGlvbiAvPgogICAgICAgIDxkYzpsYW5ndWFnZSAvPgogICAgICAgIDxkYzpjb3ZlcmFnZSAvPgogICAgICAgIDxkYzpkZXNjcmlwdGlvbiAvPgogICAgICAgIDxkYzpjb250cmlidXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y29udHJpYnV0b3I+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIj4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjUmVwcm9kdWN0aW9uIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEaXN0cmlidXRpb24iIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNOb3RpY2UiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNBdHRyaWJ1dGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjRGVyaXZhdGl2ZVdvcmtzIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjU2hhcmVBbGlrZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0xNzIpIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTpub25lIgogICAgICAgaWQ9ImxheWVyMiI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnOTIxMSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyI+CiAgICAgICAgPHJlY3QKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7ZmlsbDojZjBmMGYwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU7bWFya2VyOm5vbmU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgICAgICBpZD0icmVjdDEzODA1IgogICAgICAgICAgIHdpZHRoPSIxMjgiCiAgICAgICAgICAgaGVpZ2h0PSIxMjgiCiAgICAgICAgICAgeD0iOS4yNjUxMzYyZS0wOCIKICAgICAgICAgICB5PSIxNzIiIC8+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgIGN4PSI2NC4wMDAwMzEiCiAgICAgICAgICAgY3k9IjIzNiIKICAgICAgICAgICByPSI1OS41MDQxMzEiCiAgICAgICAgICAgaWQ9ImNpcmNsZTI4OTIiCiAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MC4xO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTkwMDAwMDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjAuOTkwMDAwMDEsIDAuOTkwMDAwMDE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHJ5PSI3LjkyOTI4ODkiCiAgICAgICAgICAgcng9IjguNzAxMDA0IgogICAgICAgICAgIHk9IjE4MC40OTQ5NiIKICAgICAgICAgICB4PSIyMC40OTUwMDciCiAgICAgICAgICAgaGVpZ2h0PSIxMTEuMDEwMDUiCiAgICAgICAgICAgd2lkdGg9Ijg3LjAwOTk4NyIKICAgICAgICAgICBpZD0icmVjdDI4OTQiCiAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MC4xO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTkwMDAwMDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjAuOTkwMDAwMDEsIDAuOTkwMDAwMDE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHJ5PSI3LjkyMzgwOTUiCiAgICAgICAgICAgcng9IjcuOTIzODA5NSIKICAgICAgICAgICB5PSIxODQuNDk1MjQiCiAgICAgICAgICAgeD0iMTIuNDk1MjY2IgogICAgICAgICAgIGhlaWdodD0iMTAzLjAwOTUyIgogICAgICAgICAgIHdpZHRoPSIxMDMuMDA5NTIiCiAgICAgICAgICAgaWQ9InJlY3QyODk2IgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjAuMTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjk5MDAwMDAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTowLjk5MDAwMDAxLCAwLjk5MDAwMDAxO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgICAgPHJlY3QKICAgICAgICAgICByeT0iOC43MDEwMDUiCiAgICAgICAgICAgcng9IjcuOTI5Mjg4OSIKICAgICAgICAgICB5PSIyMDAuNDk0OTYiCiAgICAgICAgICAgeD0iOC40OTUwMDY2IgogICAgICAgICAgIGhlaWdodD0iODcuMDEwMDQ4IgogICAgICAgICAgIHdpZHRoPSIxMTEuMDEwMDQiCiAgICAgICAgICAgaWQ9InJlY3QyODk4IgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjAuMTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjk5MDAwMDAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTowLjk5MDAwMDAxLCAwLjk5MDAwMDAxO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpZD0icGF0aDI5MDAiCiAgICAgICAgICAgZD0iTSAyLjYyMDMwMTVlLTUsMjg4Ljk5OTk5IEggMTI4LjAwMDAzIgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOm5vbmU7c3Ryb2tlOiM2MmEwZWE7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI5Ij4KICAgICAgPHJlY3QKICAgICAgICAgY2xpcC1wYXRoPSJub25lIgogICAgICAgICByeT0iOCIKICAgICAgICAgcng9IjgiCiAgICAgICAgIHk9Ii0yOTQiCiAgICAgICAgIHg9Ii0xMDgiCiAgICAgICAgIGhlaWdodD0iMzAuMjUiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaWQ9InJlY3QxMTY3IgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiMxYTVmYjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEzLjcxODc2NTI2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbCIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsLTM3NCwyMDIuMDQ4MDgpIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMjEzKSIKICAgICAgICAgaWQ9Imc4MDA1IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI1LDAsMCwwLjI1LC00MjQsMjAyLjA0ODA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjIxMykiCiAgICAgICAgIGlkPSJnODAxNSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNSwwLDAsMC4yNSwtNDE0LDIwMi4wNDgwOCkiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIyMTMpIgogICAgICAgICBpZD0iZzgwMjUiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsLTQwNCwyMDIuMDQ4MDgpIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMjEzKSIKICAgICAgICAgaWQ9Imc4MDM1IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI1LDAsMCwwLjI1LC0zOTQsMjAyLjA0ODA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjIxMykiCiAgICAgICAgIGlkPSJnODA0NSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNSwwLDAsMC4yNSwtMzg0LDIwMi4wNDgwOCkiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIyMTMpIgogICAgICAgICBpZD0iZzgwNTUiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEpIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMTU5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBpZD0icmVjdDExNTEiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaGVpZ2h0PSI0MCIKICAgICAgICAgeD0iLTEwOCIKICAgICAgICAgeT0iLTI5MiIKICAgICAgICAgcng9IjgiCiAgICAgICAgIHJ5PSI4IgogICAgICAgICBjbGlwLXBhdGg9Im5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGNsaXAtcGF0aD0ibm9uZSIKICAgICAgICAgcnk9IjgiCiAgICAgICAgIHJ4PSI4IgogICAgICAgICB5PSItMjg4IgogICAgICAgICB4PSItMTA4IgogICAgICAgICBoZWlnaHQ9IjEwOCIKICAgICAgICAgd2lkdGg9Ijg4IgogICAgICAgICBpZD0icmVjdDExNjEiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Y2ZjVmNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKC0xKSIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQsMikiCiAgICAgICAgIGlkPSJnMTE1MyI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2Q1ZDNjZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgICAgZD0ibSAzMiwxODggYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHogbSA4LDAgYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHogbSA4LDAgYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHoiCiAgICAgICAgICAgaWQ9InBhdGg5NTAtMy03IiAvPgogICAgICAgIDxjaXJjbGUKICAgICAgICAgICByPSIyIgogICAgICAgICAgIGN5PSIxOTAiCiAgICAgICAgICAgY3g9Ii0xMDQiCiAgICAgICAgICAgaWQ9InBhdGgxMTQ4IgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Q1ZDNjZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDExMiwxOTIgYSAyLDIgMCAwIDEgLTEuNzMyMDUsLTEgMiwyIDAgMCAxIDAsLTIgQSAyLDIgMCAwIDEgMTEyLDE4OCIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNkNWQzY2Y7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0iY2lyY2xlMTY3NzAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIgogICAgICAgICAgIGQ9Im0gLTI0LDE5MiBhIDIsMiAwIDAgMSAtMS43MzIwNTEsLTEgMiwyIDAgMCAxIDAsLTIgQSAyLDIgMCAwIDEgLTI0LDE4OCIKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNkNWQzY2Y7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgICAgaWQ9ImNpcmNsZTE2NzcwLTMiIC8+CiAgICAgIDwvZz4KICAgICAgPHJlY3QKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMTMwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgIGlkPSJyZWN0MTA1Ni0zIgogICAgICAgICB3aWR0aD0iMzYiCiAgICAgICAgIGhlaWdodD0iMzYiCiAgICAgICAgIHg9IjI1MiIKICAgICAgICAgeT0iODgiCiAgICAgICAgIHJ4PSIxMS4yIgogICAgICAgICByeT0iMTEuMiIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwwLjcxNDI4NTcxLDAuNzE0Mjg1NzEsMCwyNS4xNDI4NTgsODguMDAwMDA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTYwOS03KSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTA2MikiCiAgICAgICAgIGlkPSJwYXRoMTA0NyIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxNzIpIgogICAgICAgICBkPSJNIDEwMCwxNiAzMiw4NCB2IDIwIGggMjIgbCA2OCwtNjggLTcuODY3MTksLTUuNzYxNzE5IC0wLjA3NDIsLTAuMDcyMjcgLTguMjI0NjEsLTguMjI0NjEgeiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEyLjQ4OTgyNzE2O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtwYWludC1vcmRlcjpub3JtYWwiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDExMDMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxMi40ODk4MjcxNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBkPSJtIDMyLDI3NiB2IC0yMCBsIDIwLDIwIHoiCiAgICAgICAgIGlkPSJwYXRoMTAzOCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMDQyIgogICAgICAgICBkPSJtIDMxLjk5OTk5NiwyNzYgNGUtNiwtOCA4LDggeiIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojNDI0MDQ4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxMi40ODk4MjcxNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMDQ0IgogICAgICAgICBkPSJtIDUwLDI3NCAtMTYsLTE2IDY3Ljk0Njk2LC02Ny45NDY5NSAxNiwxNiB6IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZmlsbDojZjZkMzJkO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUwNjQzNzg0cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTA0NiIKICAgICAgICAgZD0iTSAzNy44ODc3NzIsMjYxLjg4Nzc2IDMyLDI1NiBsIDY4LjAwMDAxLC02Ny45OTk5OSA1LjgzNDcyLDUuOTQwOCB6IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2Y5ZjA2YjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zNTgxMDU2cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTA0OCIKICAgICAgICAgZD0iTSA0Ni4xMTIyNDYsMjcwLjExMjIzIDUyLDI3NiBsIDY4LC02OCAtNS45NDA4LC01LjgzNDcyIHoiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjE7ZmlsbDojZTVhNTBhO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1ODEwNTZweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gedit,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"gedit.desktop\"\nLABEL oc.launch=\"gedit.Gedit\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Gedit\"\nLABEL oc.displayname=\"Gedit\"\nLABEL oc.path=\"/usr/bin/gedit\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/plain;\"\nLABEL oc.fileextensions=\"txt\"\nLABEL oc.legacyfileextensions=\"txt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gedit\"\nENV APPBIN \"/usr/bin/gedit\"\nENV APP \"/usr/bin/gedit\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gedit/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gedit/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gedit/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gedit/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gelemental && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gelemental.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiBpZD0ic3ZnMiIgdmlld0JveD0iMCAwIDQ4IDQ4Ij4KICA8ZGVmcyBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0NDciPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZjdiOTVkO3N0b3Atb3BhY2l0eToxIiBvZmZzZXQ9IjAiIGlkPSJzdG9wOTQ0OSIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZjdiOTVkO3N0b3Atb3BhY2l0eTowLjQwMDAwMDAxIiBvZmZzZXQ9IjEiIGlkPSJzdG9wOTQ1MSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5NDQxIj4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2I0NTkwMDtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDk0NDMiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2YyOGIyNjtzdG9wLW9wYWNpdHk6MC42NTg4MjM1NSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDk0NDUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjAyMTAiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjUxNTQ2Mzg5IiBvZmZzZXQ9IjAiIGlkPSJzdG9wMjAyMTIiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MC4xNDQzMjk4OSIgb2Zmc2V0PSIwLjY5OTk5OTk5IiBpZD0ic3RvcDIwMjE4Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAiIG9mZnNldD0iMSIgaWQ9InN0b3AyMDIxNCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3NjI3Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2VlZjFmNTtzdG9wLW9wYWNpdHk6MC43NjQ3MDU5IiBvZmZzZXQ9IjAiIGlkPSJzdG9wNzYyOSIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZWZmMmY2O3N0b3Atb3BhY2l0eTowIiBvZmZzZXQ9IjEiIGlkPSJzdG9wNzYzNSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3NjE5Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FkN2ZhODtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDc2MjEiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FkN2ZhODtzdG9wLW9wYWNpdHk6MC40MDIwNjE4NSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDc2MjMiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NzU5NSI+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU1ZTg7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMCIgaWQ9InN0b3A3NTk3Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU1ZTg7c3RvcC1vcGFjaXR5OjAuNTQ1MDk4MDciIG9mZnNldD0iMSIgaWQ9InN0b3A3NTk5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDc1ODUiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNjUzNjZjO3N0b3Atb3BhY2l0eToxIiBvZmZzZXQ9IjAiIGlkPSJzdG9wNzU4NyIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzY1MDdjO3N0b3Atb3BhY2l0eTowLjc5MzgxNDQyIiBvZmZzZXQ9IjEiIGlkPSJzdG9wNzU4OSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3Mzk3Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzBmMjM0MTtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDczOTkiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzBmMjI0MTtzdG9wLW9wYWNpdHk6MC41MDE5NjA4MSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDc0MDEiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Njg4NSI+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNmMWYzZmY7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMCIgaWQ9InN0b3A2ODg3Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiM2MTY0NzE7c3RvcC1vcGFjaXR5OjAiIG9mZnNldD0iMSIgaWQ9InN0b3A2ODg5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDY2NTAiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjE3MjU0OTAyIiBvZmZzZXQ9IjAiIGlkPSJzdG9wNjY1MiIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzA5YWM4O3N0b3Atb3BhY2l0eTowLjYyNzQ1MSIgb2Zmc2V0PSIwLjY2NyIgaWQ9InN0b3A3NDEyIi8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiM2Zjk2ZGQ7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMSIgaWQ9InN0b3A2NjU0Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIxNy44MzQyNzgiIHkxPSI4LjkzODIwMTkiIHgyPSIzMy45ODI0MTQiIHkyPSIzOS4wMDE4NzMiIGlkPSJsaW5lYXJHcmFkaWVudDc2NjEiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzcHJlYWRNZXRob2Q9InBhZCIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNC4yMzk3IiB5MT0iMzcuNjkyODg2IiB4Mj0iMjQuMjM5NyIgeTI9IjMzLjU1ODA1MiIgaWQ9ImxpbmVhckdyYWRpZW50NzY2MyIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzM5NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjUuNDY5NDA0IiB5MT0iNDAuNDcwNzQxIiB4Mj0iMjEuNTE5NTQzIiB5Mj0iMjEuODM0MDU1IiBpZD0ibGluZWFyR3JhZGllbnQ3NjY1IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTg1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNS40NDM4NTciIHkxPSIzNy42OTI4ODYiIHgyPSIyMy4wODcwMjciIHkyPSIzMy41NTgwNTIiIGlkPSJsaW5lYXJHcmFkaWVudDc2NjciIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc2MTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjI2LjMwNTE3OCIgeTE9IjI0LjkxMzA2OSIgeDI9IjEyLjA1NTMzMSIgeTI9IjE0LjcyNTgwNCIgaWQ9ImxpbmVhckdyYWRpZW50NzY2OSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njg4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjYuOTgzNTk3IiB5MT0iMjYuNTA1MjEzIiB4Mj0iMzAuMjgwODk5IiB5Mj0iMjYuNTA1MjEzIiBpZD0ibGluZWFyR3JhZGllbnQ3NjcxIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkyNzMwNCwwLDAsMC44MzI4MTYsMS41NDIxMjIsNC42NzA5NTgpIi8+CiAgICA8cmFkaWFsR3JhZGllbnQgY3g9IjIxLjc0NTUyNSIgY3k9IjIxLjk2NTQ5OCIgcj0iMi4zMjUxMzI2IiBmeD0iMjEuNzQ1NTI1IiBmeT0iMjEuOTY1NDk4IiBpZD0icmFkaWFsR3JhZGllbnQ3NjczIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NjI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwNCwwLjIyOTE0OCwtMC42MjQ2NjksMi43MjYwNTUsMTMuNzIxMDUsLTQxLjI3NTk5KSIvPgogICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxNC43NzIzMzQiIGN5PSI3NC4yMDk5MyIgcj0iNy44Mjg5ODI4IiBmeD0iMTQuNzcyMzM0IiBmeT0iNzQuMjA5OTMiIGlkPSJyYWRpYWxHcmFkaWVudDc2NzUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMjEwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuNzY0Mjc4LDAuNTY2ODA0KSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIxNy44MzQyNzgiIHkxPSI4LjkzODIwMTkiIHgyPSIzMy45ODI0MTQiIHkyPSIzOS4wNjE3OTgiIGlkPSJsaW5lYXJHcmFkaWVudDg1NTIiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzcHJlYWRNZXRob2Q9InBhZCIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNC4yMzk3IiB5MT0iMzcuNjkyODg2IiB4Mj0iMjQuMjM5NyIgeTI9IjMzLjU1ODA1MiIgaWQ9ImxpbmVhckdyYWRpZW50ODU1NCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzM5NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjUuNDY5NDA0IiB5MT0iNDAuNDcwNzQxIiB4Mj0iMjEuNTE5NTQzIiB5Mj0iMjEuODM0MDU1IiBpZD0ibGluZWFyR3JhZGllbnQ4NTU2IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5NDQxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNS40NDM4NTciIHkxPSIzNy42OTI4ODYiIHgyPSIyMy4wODcwMjciIHkyPSIzMy41NTgwNTIiIGlkPSJsaW5lYXJHcmFkaWVudDg1NTgiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk0NDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjI2LjMwNTE3OCIgeTE9IjI0LjkxMzA2OSIgeDI9IjEyLjA1NTMzMSIgeTI9IjE0LjcyNTgwNCIgaWQ9ImxpbmVhckdyYWRpZW50ODU2MCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njg4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjYuOTgzNTk3IiB5MT0iMjYuNTA1MjEzIiB4Mj0iMzAuMjgwODk5IiB5Mj0iMjYuNTA1MjEzIiBpZD0ibGluZWFyR3JhZGllbnQ4NTYyIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkyNzMwNCwwLDAsMC44MzI4MTYsMS41NDIxMjIsNC42NzA5NTgpIi8+CiAgICA8cmFkaWFsR3JhZGllbnQgY3g9IjIxLjc0NTUyNSIgY3k9IjIxLjk2NTQ5OCIgcj0iMi4zMjUxMzI2IiBmeD0iMjEuNzQ1NTI1IiBmeT0iMjEuOTY1NDk4IiBpZD0icmFkaWFsR3JhZGllbnQ4NTY0IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NjI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwNCwwLjIyOTE0OCwtMC42MjQ2NjksMi43MjYwNTUsMTMuNzIxMDUsLTQxLjI3NTk5KSIvPgogICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxNC43NzIzMzQiIGN5PSI3NC4yMDk5MyIgcj0iNy44Mjg5ODI4IiBmeD0iMTQuNzcyMzM0IiBmeT0iNzQuMjA5OTMiIGlkPSJyYWRpYWxHcmFkaWVudDg1NjYiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMjEwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuNzY0Mjc4LDAuNTY2ODA0KSIvPgogIDwvZGVmcz4KICA8ZyBpZD0ibGF5ZXIxIj4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk3LDAsMCwxLDUuOTc5NWUtMiwwLjMzNjQpIiBpZD0iaWNvbiI+CiAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTgwMDk5LDAsMCwxLjE4MDA5OSwtMTUuMDU4NTEsLTkuMDI5Mjg1KSIgaWQ9InJvdW5kIj4KICAgICAgICA8cGF0aCBkPSJNIDE5LjkxMDEwMiwyMi4wMjcyNTIgQyAxOS45MTAxMDIsMjUuMDI3MjUyIDE1LjkxMDEwMiwyOC4wMjcyNTIgMTUuOTEwMTAyLDMzLjAyNzI1MiBDIDE1LjkxMDEwMiwzOC4wMjcyNTIgMTguOTEwMTAyLDQxLjAyNzI1MiAyNCw0MSBDIDI5LjA4OTg5OCw0MC45NzI3NDggMzEuOTEwMTAyLDM4LjAyNzI1MiAzMS45MTAxMDIsMzMuMDI3MjUyIEMgMzEuOTEwMTAyLDI4LjAyNzI1MiAyNy45MTAxMDIsMjUuMDI3MjUyIDI3LjkxMDEwMiwyMi4wMjcyNTIgQyAyNy45MTAxMDIsMTkuMDI3MjUyIDI4LDE1LjUwNDg2NCAyOCwxMiBDIDI4LDkgMzEsMTAgMzAsOSBDIDI5LDggMTksOCAxOCw5IEMgMTcsMTAgMjAsOC45OTk5OTk3IDIwLDEyIEMgMjAsMTUuNDUzNjA4IDE5LjkxMDEwMiwxOS4wMjcyNTIgMTkuOTEwMTAyLDIyLjAyNzI1MiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTUyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzhlOTE5ZTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtb3V0bGluZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwMjM4NCwwLDAsMS4wMTYwNCw2Ljk2Mzg1NywxLjg4Mzg4NikiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzBmMjM0MTtzdHJva2Utd2lkdGg6MC40MjU5ODkzOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO292ZXJmbG93OnZpc2libGUiIGlkPSJyb3VuZC1ib3R0b20iLz4KICAgICAgICA8cGF0aCBkPSJNIDMyIDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDE2LjQ3OTQwMSwzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAzMiAzNS42MjU0NjkgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC40MzI3MDIsMCwwLDAuMzUwMTk5LDEzLjQ2NDI3LDkuMTkzMzcpIiBzdHlsZT0ib3BhY2l0eTowLjgzOTk5OTk5O2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojYmU1NTAwO3N0cm9rZS13aWR0aDoxLjYzMjY0NDM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiBpZD0icm91bmQtbGlxdWlkLXJpbSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMjAuMzIzNTA0LDIyLjQ3MTc3NiBDIDIwLjQ4NDM5MiwyNC4yNTUwMTcgMTUuOTYzMzM4LDI5LjAxMzEyMSAxNi4zNzIwNjYsMzMuNDY0MTc3IEMgMTYuNzgwNTA1LDM3LjkxMjA5MyAxOC44MTY0ODEsNDAuNjUwNTE1IDI0LjAwNjU0OCw0MC40NzA3NCBDIDI5LjI1NjU0LDQwLjI5MDk2NSAzMC42OTg4MTQsMzguODY5NzE0IDMxLjM4Mjg3MywzMy40OTk3MDYgQyAzMi4wNjc5MywyOC4xMjE4NjMgMjguMTU0NzMxLDI1LjY4NzgyMyAyNy43NjExODIsMjMuNDUzOTA5IEMgMjcuMzY4NzY3LDIxLjIyNjQzMSAyNy44NTg4MDEsMjEuODI1MDg2IDI2Ljk4MTI2LDIyLjA5NDU1MSBDIDI0Ljk3NDIxNiwyMi43MTA4NTIgMjIuMjg2NTAxLDIyLjcyNTk1NCAyMS4wNTY3NjYsMjIuMTQyODEgQyAyMC45MjY0NTMsMjIuMDgxMDE1IDIwLjE1OTk1NywyMC42NTkwNzQgMjAuMzIzNTA0LDIyLjQ3MTc3NiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC43NTYwOTc1MyIgaWQ9InJvdW5kLWxpcXVpZCIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQwNzkxLDAsMCwwLjI2MzUzMiwxNC4wOTU4MiwxMi4yODA5NSkiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wMjU4NTk3MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJyb3VuZC1saXF1aWQtc3VyZmFjZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMjAuNzYyNTk5LDIyLjE1MDA2NiBDIDIwLjc0NjM1OCwyNS4zNDY5ODcgMTYuNjg4MjU0LDI4LjUzNTE3OSAxNi44MDgxMDQsMzMuMDc4MjUxIEMgMTYuOTI3OTU0LDM3LjU2MTM5OCAxOS4yNjIzNDMsNDAuNDUyMTQ4IDI0LjA4NDM1LDQwLjA1OTkyNSBDIDI4Ljk2NjI4MiwzOS42Njc3MDIgMzAuNTUwNTkyLDM4LjY0NzU1OSAzMC45NzAwMjcsMzMuMTQ3MTAzIEMgMzEuMzkzNjg3LDI3LjU5MTI0IDI3LjcxODIzOSwyNi41ODQ4ODUgMjcuMTc5ODA4LDIyLjgwMzM5NCBDIDI2LjY1MDg4MywxOS4wODg2NTkgMjcuMTA2NzksMTYuMDY3NzEyIDI3LjEwNjc5LDEyLjc3NzY5NiBDIDI3LjEwNjc5LDkuOTYxNTk2MiAyNy42NDYxMTYsMTAuNDUwNjY5IDI3LjY0NjExNiw5Ljk4MTMxOSBDIDI3LjY0NjExNiw5LjA0MjYxOTEgMjkuMTMwMTEsOS43ODU4MDkyIDI5LjAyNzI4LDkuNDU1NDE2NCBDIDI4LjkyNzg5NCw5LjEzNjA5MTUgMTguODg4NDU4LDkuMDI3NjczMiAxOC42ODE2NDgsOS4zNjk5OTIgQyAxOC40ODE5NjUsOS43MDA1MTQ3IDIwLjQwMjczNCw5LjIyMjM5NDMgMjAuNDAyNzM0LDEwLjE2MTA5NSBDIDIwLjQwMjczNCwxMC42MzA0NDUgMjEuMDI5OTUzLDkuNzg1NzAyOCAyMC44ODIxMzUsMTIuNTk3OTIxIEMgMjAuNjQyNDM1LDE3LjE1ODE3NSAyMC43Nzg4NCwxOC45NTMxNzMgMjAuNzYyNTk5LDIyLjE1MDA2NiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ4NTYwKTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjc1NjA5NzUzIiBpZD0icm91bmQtaW5saW5lIi8+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuMjk5NjI1LDAuNTk5MjUpIiBpZD0icm91bmQtbWFyay0xIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0gMjkuMzQzNTMyLDI2LjA5OTIyMSBDIDI5LjM0MzUzMiwyNi4wOTkyMjEgMjguNTQ1MzkxLDI3LjExOTQ0MSAyNi44NDIzMTMsMjcuMzkwNjA0IiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDg1NjIpO3N0cm9rZS13aWR0aDowLjQzNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJyb3VuZC1pbm1hcmstMSIvPgogICAgICAgICAgPHBhdGggZD0iTSAyOS40Mjk0OTksMjUuMjM4NDI3IEMgMjkuNDI5NDk5LDI1LjIzODQyNyAyOC41Njg3ODcsMjYuNDYzNDUyIDI2LjczMjE5NywyNi43ODkwNSIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiM2ODY4NzQ7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJyb3VuZC1vdXRtYXJrLTEiLz4KICAgICAgICA8L2c+CiAgICAgICAgPHBhdGggZD0iTSAxNy45MjM3MDEsOS40NzQ1NTYyIEMgMTcuOTIzNzAxLDkuNDc0NTU2MiAyMS43ODgxMzMsMTAuMzg1NTg1IDI0LjEyNzEyMSwxMC4zNjQzOTggQyAyNi40NjYxMDgsMTAuMzQzMjExIDI5Ljk5MTU1Miw5LjQ3NDU1NjIgMjkuOTkxNTUyLDkuNDc0NTU2MiIgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzhlOTE5ZTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtbGlwIi8+CiAgICAgICAgPHVzZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjYyMjc4NywzLjI5ODU2MSkiIGlkPSJyb3VuZC1tYXJrLTIiIHg9IjAiIHk9IjAiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeGxpbms6aHJlZj0iI3JvdW5kLW1hcmstMSIvPgogICAgICAgIDx1c2UgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi41MTUyOTcsNy4wMjAwNjUpIiBpZD0icm91bmQtbWFyay0zIiB4PSIwIiB5PSIwIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHhsaW5rOmhyZWY9IiNyb3VuZC1tYXJrLTEiLz4KICAgICAgICA8cGF0aCBkPSJNIDE5LjkwNTMzNSwyNC4wMDQ0NjUgQyAxOC44ODYzNDYsMjcuMTA4NjQ5IDE4LjI5MjEzNCwyNy41NTA1NjIgMTkuNTk1NTA1LDI5LjA2MzY3MSBDIDIwLjUyODEwOSwzMC4xNDYzNDkgMjMuMjMyODQ3LDI4LjczOTQyNCAyNC4wMjk5NjIsMjQuMjA5NzM5IEMgMjQuOTExOTksMTkuMTk3NTMxIDIyLjkzMTE0MSwxNC4zNzI1ODggMjEuODEyNzM0LDEzLjQ4MzE0NiBDIDE5LjkxMDExMiwxMS45NzAwMzggMjEuNzY2MDI4LDE4LjMzNjE2NyAxOS45MDUzMzUsMjQuMDA0NDY1IHogIiBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50ODU2NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtZ2xvc3MiLz4KICAgICAgICA8cGF0aCBkPSJNIDM5Ljg3NSA0Mi4wNjI1IEEgMTMuODEyNSA0LjQzNzUgMCAxIDEgIDEyLjI1LDQyLjA2MjUgQSAxMy44MTI1IDQuNDM3NSAwIDEgMSAgMzkuODc1IDQyLjA2MjUgeiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMSkgbWF0cml4KDAuNzc1Nzc0LDAsMCwwLjcxMTg4NywzLjU3MTYzNCwxMS4xNjQ4NykiIHN0eWxlPSJvcGFjaXR5OjAuODtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDg1NjYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiBpZD0icm91bmQtc2hhZG93Ii8+CiAgICAgIDwvZz4KICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xODAwOTksMCwwLDEuMTgwMDk5LDMuODIzMDYzLC00LjcwMTAzKSIgaWQ9ImZsYXNrIj4KICAgICAgICA8cGF0aCBkPSJNIDE4LDI2IEMgMTYsMjkgMTIuNSwzNy41IDE0LDM5IEMgMTUuNSw0MC41IDIzLDQxIDI0LDQxIEMgMjUsNDEgMzIuNSw0MC41IDM0LDM5IEMgMzUuNSwzNy41IDMyLDI5IDMwLDI2IEMgMjgsMjMgMjgsMTUuNTA0ODY0IDI4LDEyIEMgMjgsOSAzMSwxMCAzMCw5IEMgMjksOCAxOSw4IDE4LDkgQyAxNywxMCAyMCw4Ljk5OTk5OTcgMjAsMTIgQyAyMCwxNS40NTM2MDggMjAsMjMgMTgsMjYgeiAiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzY2MSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiM4ZTkwOWY7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLW91dGxpbmUiLz4KICAgICAgICA8cGF0aCBkPSJNIDMyIDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDE2LjQ3OTQwMSwzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAzMiAzNS42MjU0NjkgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4yMzY0NTIsMCwwLDEuMDE2MDQsLTUuOTIxODQ2LDEuODgzODg2KSIgc3R5bGU9Im9wYWNpdHk6MTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc2NjMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMGYyMzQxO3N0cm9rZS13aWR0aDowLjQyNTk4OTM5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgaWQ9ImZsYXNrLWJvdHRvbSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQ5NTMxMywwLDAsMC40NTEwNjIsMTEuOTU5MzUsNS4xNDEwODkpIiBzdHlsZT0ib3BhY2l0eTowLjgzOTk5OTk5O2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojNWMzNTY2O3N0cm9rZS13aWR0aDoxLjAyNTg1OTcxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgaWQ9ImZsYXNrLWxpcXVpZC1yaW0iLz4KICAgICAgICA8cGF0aCBkPSJNIDE4LjAzNDY4NiwyNi44MDk3MTQgQyAxNi4zOTk3MjcsMjkuMzU5MDY3IDEzLjA5OTY0NSwzNy40MjQ5OSAxNC4zMjI5NDgsMzguODMzMDQgQyAxNS41NDYyNTEsNDAuMjQxMDkgMjMuMTkxMDEzLDQwLjQ3MDc0IDI0LjAwNjU0OCw0MC40NzA3NCBDIDI0LjgyMjA4Myw0MC40NzA3NCAzMi4zNzY3OTgsNDAuMzAxMDE1IDMzLjYwMDEwMSwzOC44OTI5NjUgQyAzNC44MjM0MDMsMzcuNDg0OTE1IDMxLjY2MzYxNywyOS4zNzM0NTEgMjkuODU4NTYsMjYuNjg5ODY0IEMgMjguMDQ5NzYsMjQuMDAwNzEzIDI4LjQwMjExMSwyMC44NDkyNzggMjcuODE3ODE2LDIxLjI5NzY0IEMgMjUuNzYzMzM3LDIyLjg3NDE1OSAyMC42OTY4NDgsMjEuOTg5OTM1IDIwLjEzNDA3NiwyMS4zNDgzMSBDIDE5LjY1NTMxOSwyMC44MDI0NzMgMTkuNjczNjczLDI0LjI1NDA3OSAxOC4wMzQ2ODYsMjYuODA5NzE0IHogIiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc2NjUpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjg3NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjc1NjA5NzUzIiBpZD0iZmxhc2stbGlxdWlkIi8+CiAgICAgICAgPHBhdGggZD0iTSAzMiAzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAxNi40Nzk0MDEsMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMzIgMzUuNjI1NDY5IHoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNDYyNTM5LDAsMCwwLjMzNzUzNSwxMi43NjU4OSw5LjIxMTA0NCkiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3NjY3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wMjU4NTk3MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJmbGFzay1saXF1aWQtc3VyZmFjZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMTguNDk0NDIxLDI2LjgwODE0MyBDIDE2LjczNjQwMSwyOS40OTcyOTQgMTMuNDU2OTkxLDM3LjQyMDE4OSAxNC43Njk0NDUsMzguNjA5MDk5IEMgMTYuMDQzNTI4LDM5Ljc2MzI1MSAyMy4yNjg4MTUsNDAuMDU5OTI1IDI0LjA4NDM1LDQwLjA1OTkyNSBDIDI0Ljg5OTg4NSw0MC4wNTk5MjUgMzEuODkxOTMsMzkuOTgyNjE0IDMzLjIxNjc5MiwzOC42MjUzNDQgQyAzNC41MTk2NzcsMzcuMjkwNTkgMzAuMzgwMTIyLDI3LjY2MjEyNiAyOS41MzYxNCwyNi45MDI2MDQgQyAyOS4xMjc5ODIsMjYuNTM1MjkyIDI3LjcwODE2NiwyMi41MzE2ODYgMjcuNTU4MzI3LDIwLjY5Njg2MyBDIDI3LjMwODQ0OSwxNy42MzcwMzMgMjcuMTA2NzksMTQuNDIyNzA0IDI3LjEwNjc5LDEyLjc3NzY5NiBDIDI3LjEwNjc5LDkuOTYxNTk2MiAyNy42NDYxMTYsMTAuNDUwNjY5IDI3LjY0NjExNiw5Ljk4MTMxOSBDIDI3LjY0NjExNiw5LjA0MjYxOTEgMjkuMjg5ODAyLDkuOTMxOTU2NSAyOS4xNTMyNDQsOS41MDU1MzkgQyAyOS4wMjQwODEsOS4xMDIyMTM0IDE4LjY1NjQ1Myw5LjAzNzcxMjMgMTguNTgwMDg4LDkuNTQ3MTczNCBDIDE4LjQ5OTk5OSwxMC4wODE0NzkgMjAuNDAyNzM0LDkuMjIyMzk0MyAyMC40MDI3MzQsMTAuMTYxMDk1IEMgMjAuNDAyNzM0LDEwLjYzMDQ0NSAyMC44ODIxMzUsOS43ODE4MjA2IDIwLjg4MjEzNSwxMi41OTc5MjEgQyAyMC44ODIxMzUsMTQuMjE4ODcyIDIwLjg1NTYyNiwxNy40NDg1MzQgMjAuNDgwNDMyLDIwLjI1NjY3NSBDIDIwLjEwNTIzOSwyMy4wNjQ4MTcgMTkuMzgxMzYsMjUuNDUxNDM5IDE4LjQ5NDQyMSwyNi44MDgxNDMgeiAiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzY2OSk7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC43NTYwOTc1MyIgaWQ9ImZsYXNrLWlubGluZSIvPgogICAgICAgIDxnIGlkPSJmbGFzay1tYXJrLTEiPgogICAgICAgICAgPHBhdGggZD0iTSAyOS4zNDM1MzIsMjYuMDk5MjIxIEMgMjkuMzQzNTMyLDI2LjA5OTIyMSAyOC41NDUzOTEsMjcuMTE5NDQxIDI2Ljg0MjMxMywyNy4zOTA2MDQiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzY3MSk7c3Ryb2tlLXdpZHRoOjAuNDM3NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLWlubWFyay0xIi8+CiAgICAgICAgICA8cGF0aCBkPSJNIDI5LjQyOTQ5OSwyNS4yMzg0MjcgQyAyOS40Mjk0OTksMjUuMjM4NDI3IDI4LjU2ODc4NywyNi40NjM0NTIgMjYuNzMyMTk3LDI2Ljc4OTA1IiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzVmNWY2OTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLW91dG1hcmstMSIvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aCBkPSJNIDE3LjkyMzcwMSw5LjQ3NDU1NjIgQyAxNy45MjM3MDEsOS40NzQ1NTYyIDIxLjc4ODEzMywxMC4zODU1ODUgMjQuMTI3MTIxLDEwLjM2NDM5OCBDIDI2LjQ2NjEwOCwxMC4zNDMyMTEgMjkuOTkxNTUyLDkuNDc0NTU2MiAyOS45OTE1NTIsOS40NzQ1NTYyIiBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojOGU5MTllO3N0cm9rZS13aWR0aDowLjg0NzM4Nzc5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJmbGFzay1saXAiLz4KICAgICAgICA8dXNlIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuODIwMjI1LDMuODIwMjI1KSIgaWQ9ImZsYXNrLW1hcmstMiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB4bGluazpocmVmPSIjZmxhc2stbWFyay0xIi8+CiAgICAgICAgPHVzZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjU2OTM0Nyw3LjUyNDA2NykiIGlkPSJmbGFzay1tYXJrLTMiIHg9IjAiIHk9IjAiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeGxpbms6aHJlZj0iI2ZsYXNrLW1hcmstMSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMTkuMjY3ODQ4LDIzLjgyNTk2OSBDIDE4LjI0ODg1OSwyNi45MzAxNTMgMTguMjkyMTM0LDI3LjU1MDU2MiAxOS41OTU1MDUsMjkuMDYzNjcxIEMgMjAuNTI4MTA5LDMwLjE0NjM0OSAyMy4yMzI4NDcsMjguNzM5NDI0IDI0LjAyOTk2MiwyNC4yMDk3MzkgQyAyNC45MTE5OSwxOS4xOTc1MzEgMjIuOTMxMTQxLDE0LjM3MjU4OCAyMS44MTI3MzQsMTMuNDgzMTQ2IEMgMTkuOTEwMTEyLDExLjk3MDAzOCAyMS4xMjg1NDEsMTguMTU3NjcxIDE5LjI2Nzg0OCwyMy44MjU5NjkgeiAiIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3NjczKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJmbGFzay1nbG9zcyIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzkuODc1IDQyLjA2MjUgQSAxMy44MTI1IDQuNDM3NSAwIDEgMSAgMTIuMjUsNDIuMDYyNSBBIDEzLjgxMjUgNC40Mzc1IDAgMSAxICAzOS44NzUgNDIuMDYyNSB6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0wLjcpIG1hdHJpeCgwLjk1Nzc0NiwwLDAsMC44Nzg4NzMsLTEuMTcxMDA0LDQuMTQxMDI4KSIgc3R5bGU9Im9wYWNpdHk6MC44O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzY3NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJmbGFzay1zaGFkb3ciLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"gelemental,gelemental\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"gelemental.desktop\"\nLABEL oc.launch=\"gelemental.Gelemental\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"gElemental\"\nLABEL oc.displayname=\"gElemental\"\nLABEL oc.path=\"/usr/bin/gelemental\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"gElemental\"\nENV APPBIN \"/usr/bin/gelemental\"\nENV APP \"/usr/bin/gelemental\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gelemental/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gelemental/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gelemental/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gelemental/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y geogebra && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"geogebra.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHZlcnNpb249IjEuMCIKICAgd2lkdGg9IjI4IgogICBoZWlnaHQ9IjI4IgogICBpZD0ic3ZnMiIKICAgdmlld0JveD0iMCAwIDI4IDI4Ij4KICA8ZGVzYwogICAgIGlkPSJkZXNjNiI+Q3JlYXRvcjogRnJlZUhFUCBHcmFwaGljczJEIERyaXZlciBQcm9kdWNlcjogZ2VvZ2VicmEuZC5hIFJldmlzaW9uOiAxLjEwICBTb3VyY2U6ICBEYXRlOiBTYW1zdGFnLCA3LiBBdWd1c3QgMjAxMCAxNDowNiBVaHIgTUVTWjwvZGVzYz4KICA8ZGVmcwogICAgIGlkPSJkZWZzODUiIC8+CiAgPGcKICAgICBpZD0iZzI0OTgiPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuNTA4ODg3NywwLDAsMS41MDg4ODc3LC0wLjQ1NTEwNDQsMC42NzA0MDU2KSIKICAgICAgIGlkPSJsYXllcjAiCiAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC41NjY5MjkxLDAuNTY2OTI5MSkiCiAgICAgICAgIGlkPSJnMTgiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImcyMCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjY2NjY2O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gNC42NTMwNDUsMjEuNzE1Mzk4IGMgMi41NTI4NzIzLDUuMzM3NzQ2IDkuOTk5OTMxLDcuMDkyOTM2IDE2LjYzMzQ3MSwzLjkyMDMyOCA2LjYzMzU0LC0zLjE3MjYwOSA5Ljk0MTU3NSwtMTAuMDcxNjE1IDcuMzg4NzAzLC0xNS40MDkzNjEgQyAyNi4xMjIzNDcsNC44ODg2MTg1IDE4LjY3NTI4OCwzLjEzMzQyODEgMTIuMDQxNzQ4LDYuMzA2MDM3MSA1LjQwODIwNzYsOS40Nzg2NDYxIDIuMTAwMTcyNywxNi4zNzc2NTIgNC42NTMwNDUsMjEuNzE1Mzk4IHoiCiAgICAgICAgICAgICBpZD0icGF0aDIyIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzI0Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMjYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxOSw1IGMgMCwxLjY1Njg1NDIgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDU4IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDI4IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzMwIj4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzIiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxOSw1IGMgMCwxLjY1Njg1NDIgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDU4IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDM0IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzM2Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSA4LDEzIGMgMCwxLjY1Njg1NCAtMS4zNDMxNDU4LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0MiwwIDMsMS4zNDMxNDYgMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDQwIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzQyIj4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnNDQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSA4LDEzIGMgMCwxLjY1Njg1NCAtMS4zNDMxNDU4LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0MiwwIDMsMS4zNDMxNDYgMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDQ2IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzQ4Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnNTAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxMiwyNiBjIDAsMS42NTY4NTQgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NiAzLDMgeiIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC41NjY5MjkxLDAuNTY2OTI5MSkiCiAgICAgICAgIGlkPSJnNTQiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Imc1NiIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJtIDEyLDI2IGMgMCwxLjY1Njg1NCAtMS4zNDMxNDYsMyAtMywzIC0xLjY1Njg1NDIsMCAtMywtMS4zNDMxNDYgLTMsLTMgMCwtMS42NTY4NTQgMS4zNDMxNDU4LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg1OCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc2MCI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzYyIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiM5OTk5ZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjcsMjQgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg2NCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc2NiI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzY4IgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjcsMjQgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg3MCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc3MiI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzc0IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiM5OTk5ZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMzIsMTEgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDc2IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzc4Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnODAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAzMiwxMSBjIDAsMS42NTY4NTQgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDYgLTMsLTMgMCwtMS42NTY4NTQyIDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ1OCAzLDMgeiIKICAgICAgICAgICAgIGlkPSJwYXRoODIiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"geogebra,geogebra,math\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"geogebra-GeoGebra.geogebra-GeoGebra\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Geogebra\"\nLABEL oc.displayname=\"Geogebra\"\nLABEL oc.path=\"/usr/bin/geogebra\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"ggb;ggt\"\nLABEL oc.legacyfileextensions=\"ggb;ggt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Geogebra\"\nENV APPBIN \"/usr/bin/geogebra\"\nENV APP \"/usr/bin/geogebra\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/geogebra/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/geogebra/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/geogebra/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/geogebra/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gimp gimp-lang\nLABEL oc.icon=\"circle_gimp.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iR2ltcCIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iNTIwLjAzIiB4Mj0iNTIwLjAzIiB5MT0iMi4wMDc4IiB5Mj0iMTAyNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYzMzYgMCAwIC4wNjMzNjMgLS40NDM3OCAtLjQ0NDc1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI1MjIuNTMiIHgyPSI1MjIuNTMiIHkxPSIyNzUuMDMiIHkyPSI3NTUuMDMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS44NjU4IC0xLjEwNzEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2YjRmMzUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzIzMjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDMxMzAzIiB5PSItLjA0MjM1NSIgd2lkdGg9IjEuMDYyNiIgaGVpZ2h0PSIxLjA4NDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguMzQ3NDgwOSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xNzAzNTMiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MDkiIHg9Ii0uMDkzOTExIiB5PSItLjEyNzA2IiB3aWR0aD0iMS4xODc4IiBoZWlnaHQ9IjEuMjU0MSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS41OTY3NDM0Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS4zODQxIC42NDk4NCkiIGQ9Im04MjMgMjk5Ljg3Yy00LjM0OC0xOS40NTMtOC42MDctMjQuMzczLTguNjA3LTI0LjM3M3MtOC42NDcgMTcuOTkyLTIxLjg2OCAzOS41OTRjLTEzLjIyMiAyMS42NDMtMzQuMzU3IDQ0LjYyNS01Mi42MTMgNTkuMDc0LTIzLjc1IDE4LjgzOC00Ny44NDYgMzAuOTQ1LTY5LjE3NCAzNy45NDEtMjEuMjkxIDcuMDMzLTM4LjY2NCAxMS4wNjYtMzguNjY0IDExLjA2NiA5LjM3NyA3LjYxMyAxOS40MDggMTcuMDY4IDI0Ljg2NCAyNy45MSA1LjQxNiAxMC44MDEgOC41MzMgMjIuOTgyIDguNTMzIDM2LjI0NCAwIDI1Ljk0NS05Ljk5NCA0OC4yNzctMjYuMjg1IDY0LjE1Mi0xNi4yOTkgMTUuODM2LTM4LjkzNCAyNS4yMTUtNjQuMjYgMjUuMjE1LTMwLjc0NiAwLTU1LjA2OS05LjE0OC03MS43MTEtMjQuNzkzLTE2LjY0MS0xNS42ODUtMjUuNTk4LTM3LjktMjUuNTk4LTY0LjAzOSAwLTkuOTUxIDEuNTAyLTE5LjA5OSA0LjIyNy0yNy40MDIgMi43MzItOC4yNjQgNi42ODktMTUuNzIzIDExLjY0OC0yMi4yNTggMCAwLTcuMzgxIDEtMjAuNTIxLTEuNzY0LTEzLjEwOC0yLjc3My0zMi4wNTMtOS4zNDUtNTUuMTQ5LTI0LjQ0Ny0xOS42NDItMTIuODM4LTM2Ljc3OS0zMC43ODctNDkuMDM5LTQ1LjUwOC0xMi4yMjQtMTQuNzIzLTE5LjU1OC0yNi4yNTgtMTkuNTU4LTI2LjI1OHMwLjcyOSA1OS4zODcgMC40NTcgOTIuMjU0Yy0wLjY4OCA5MS4wMi05LjkxNCA5MS41OTgtOS45MTQgOTEuNTk4LTExLjIyMy0xNS44NzktMjMuMzI3LTI5LjU2My0zNy43OC0zOS4yODUtMTQuNDg0LTkuNzI3LTMxLjMyLTE1LjQ0OS01Mi4wMzMtMTUuNDEyLTI1LjA1NyAwLjAzNy0zOS4wODQgOS4zMzYtNDcuMDc2IDIyLjI1NC03Ljk5NiAxMi45NTMtOS45NTUgMjkuNDgtMTAuNzYyIDQzLjk3Mi0xLjQ2MSAyNC45ODMgMTEuMTQ1IDU2LjI3MSAzMS45MzYgODEuMjU2IDIwLjgyNiAyNC45ODMgNDkuODgxIDQzLjcwNSA4MS40MzYgNDMuNjY4IDIuMjI5IDAgNC42MTItMC4xNTQgNy4wMzMtMC40NjMgMi40MTgtMC4zNDcgNC44ODEtMC44MDggNy40MTgtMS40NjEgMCAwIDcuMTA4IDYuODQgMjMuNDQgMTcuMzM2IDE2LjMzNCAxMC41MjggNDEuODkgMjQuNjc2IDc4Ljc4NSAzOS4zNTggMTkuMTM5IDcuNjA3IDM5LjU0NSAxNS42NDIgNjUuMDYzIDIxLjkwNCAyNS41MTggNi4yNjggNTYuMTA2IDEwLjc2OCA5NS42MTQgMTEuMjY4IDU0LjAzNSAwLjY1MiA5Mi41ODQtMTEuMjY4IDEyMS4zMy0yOC41NjMgMjguNzg3LTE3LjI5NyA0Ny44MTItNDAuMDEgNjIuODM4LTYwLjk5NCAyNy4xMzEtMzcuOTc5IDQzLjQ2NS04My41MjcgNTIuOTU3LTEyNy43NyA5LjQ5NC00NC4yMDMgMTIuMTg3LTg3LjEwMyAxMi4wMzEtMTE5LjczLTAuMjcxLTU4LjExNi00LjY5My05Mi4wOTUtOC45OTQtMTExLjU0em0tNTc4LjU0IDI0Mi44OGMtMTYuOTg2IDAtMzAuNzQ0LTEzLjc2LTMwLjc0NC0zMC43NSAwLTE2Ljk4OCAxMy43NTgtMzAuNzUgMzAuNzQ0LTMwLjc1IDE2Ljk1MSAwIDMwLjc0NCAxMy43NjIgMzAuNzQ0IDMwLjc1IDAgMTYuOTktMTMuNzkzIDMwLjc1LTMwLjc0NCAzMC43NXptMTY1LjkxIDE1LjkxNGMtNDIuMDA0LTAuMDQxLTU4LjkxOC0yNy40MDYtNTguNTctNTEuNzM2IDAuMzg3LTI2LjYgMTEuNTI5LTU5LjYxNiA1OS4wNy01OS4yNzEgMjguOTc1IDAuMTk1IDU2LjUzNSAyNS40ODQgNTYuMzc3IDU1LjkyNC0wLjE1IDI3LjU2My0yMy44NjcgNTUuMDgzLTU2Ljg3NyA1NS4wODN6bTI3Mi4xNyA5Ni4zNTljLTIuMDc2IDUuNjU1LTQuOTkyIDkuNjA4LTQuOTkyIDkuNjA4czEuMTEzLTYuMTg0IDEuMTg5LTEwLjY4NGMwLjAzNi00LjY0OC0xLjE4OS0xMC4zMzgtMS4xODktMTAuMzM4cy0zLjI2NiA2Ljk1NS0xNC43OTkgMTMuOTUxYy0xMS41MjcgNi45NTctMzEuNjY2IDE1LjY4Mi02NC43OTMgMTUuNjgyLTI4LjM2MyAwLTQzLjk2My00LjMwMy01Mi43NjctNi44MDEtOC44NC0yLjUzOS0xMC41NjUtNS4wMzUtMTAuNTY1LTUuMDM1czIyLjMyNiAyLjEwOSA0NS4zMTEgMC44NGMzMC44MTgtMS42NDggNDcuOTItNy45OTQgNjYuNTk3LTE1LjAyMyAxMC44MDMtNC4xMTIgMjMuNTYzLTE0LjY0NiAyMy41NjMtMTQuNjQ2cy00LjA3OC00LjM0Mi05LjcyNy04LjgwM2MtNS4zMDItNC4xMTEtMTIuMzczLTguNDk0LTEyLjM3My04LjQ5NHM2LjE4OCAwLjcyOSAxMy41MjQgMy42MTVjNy4zNDIgMi45MTggMTUuODc1IDcuOTU1IDIwLjU2IDE2LjUyNiAzLjY1MSA2LjY5IDIuNDk4IDEzLjk1NCAwLjQ2MSAxOS42MDJ6IiBmaWx0ZXI9InVybCgjZSkiIG9wYWNpdHk9Ii4yIi8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS4zODQxIC42NDk4NCkiIGQ9Im01ODguMyA0NjMuOTZjLTIyLjI1MiAwLTQwLjI3NiAxNy44MzQtNDAuMjc2IDM5LjgyIDAgMjEuOTQ2IDE4LjAyNCAzOS43OCA0MC4yNzYgMzkuNzhzNDAuMjczLTE3LjgzNCA0MC4yNzMtMzkuNzhjMC0yMS45ODYtMTguMDIxLTM5LjgyLTQwLjI3My0zOS44MnptMC45OTggNTYuMDc4Yy04LjQ5NCAwLTE1LjM3MS02Ljg3NS0xNS4zNzEtMTUuMzcxIDAtOC40NTcgNi44NzctMTUuMzc1IDE1LjM3MS0xNS4zNzUgOC40NTcgMCAxNS4zNzEgNi45MTggMTUuMzcxIDE1LjM3NSAwIDguNDk2LTYuOTE0IDE1LjM3MS0xNS4zNzEgMTUuMzcxeiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMiIvPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLTEuMzg0MSAuNjQ5ODQpIiBkPSJtNDIwLjQzIDQ4NS43NmMtMTQuMzcxIDAtMjYuMDE4IDExLjg3NS0yNi4wMTggMjYuNTIxIDAgMTQuNjg2IDExLjY0NiAyNi41NjMgMjYuMDE4IDI2LjU2MyAxNC4zMzQgMCAyNS45ODItMTEuODc3IDI1Ljk4Mi0yNi41NjMgMC0xNC42NDYtMTEuNjQ4LTI2LjUyMS0yNS45ODItMjYuNTIxem0wLjM4MiAzNi4wNTFjLTQuMjI4IDAtNy42ODctMy40Mi03LjY4Ny03LjY4NiAwLTQuMjI4IDMuNDU5LTcuNjg4IDcuNjg3LTcuNjg4IDQuMjY4IDAgNy42ODggMy40NjEgNy42ODggNy42ODggMCA0LjI2Ni0zLjQyIDcuNjg2LTcuNjg4IDcuNjg2eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMiIvPgogPC9nPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzUxMyAwIDAgLjA2MzUxMyAtLjQ4NjcyIC0uNTUwNDgpIiBkPSJtNzI2LjEzIDkzLjE5OGMtOC42NzkxLTQuMzM5OC0xNy44MDctOC42Mjk2LTI3LjE4NC0xMi42Ny04LjU3OTMtMy43NDEyLTE3LjEwOS03LjE4My0yNS44MzgtMTAuMzc2LTQxLjk5OS0xNS43MTMtODQuMDQ3LTI1LjI5LTEyNi4xNS0yOC41ODMtNjkuMjMzLTUuNTg2OC0xMzguNjIgNS4zODczLTIwOC40IDMyLjkyMi0yMy4zOTQgOS4yNzgxLTQ1LjU0IDE5Ljg1My02Ni40NCAzMS44MjUtNDEuMjAxIDIzLjY0NC03Ny40MTMgNTIuNTI2LTEwOC4yNCA4Ni40OTZxLTUxLjQ3NiA1Ni40NjctODQuMzQ3IDEzMi4yNGMtMjAuMjAxIDQ2LjU0LTMyLjc3MSA5My4yMy0zNy43NTkgMTM5LjMyLTAuNDQ4OTIgNC40Mzk1LTAuODQ3OTYgOC41Nzk3LTEuMTk3MSAxMi43Mi0zLjY5MTEgNDUuNDkzLTAuMTk5NTIgOTAuNTM2IDEwLjIyNSAxMzUuNjggNS42ODYzIDI0LjQ5MiAxMy4yMTggNDguNjM1IDIyLjY5NSA3Mi42NzggMjcuNjMzIDY5Ljc4NSA2Ny4wODggMTI4LjEgMTE4LjI2IDE3NC42OSAzMS4zNzQgMjguNTgzIDY3LjAzOCA1Mi43MjYgMTA3LjA0IDcyLjYyOSAwLjE0OTY0IDAuMDQ5OSAwLjI0OTQgMC4wOTk4IDAuMzQ5MTYgMC4xNDk2NCAzLjA5MjUgMS41NDY0IDYuMDg1MyAyLjk5MjkgOC42MjkyIDQuMTQwMiA0Ljg4ODIgMi4zNDQ1IDkuMjI3OCA0LjMzOTggMTMuNTY3IDYuMjM1MyAxLjA5NzQgMC40NDg5NSAxLjg5NTQgMC44NDgwMSAyLjc0MzQgMS4xOTcyIDkuNDI3MyA0LjA5MDQgMTguODU1IDcuODMxNSAyNy44MzMgMTEuMTc0IDIuMzQ0NCAwLjg0OCA0LjQ4OTIgMS42NDYxIDYuNTg0MSAyLjM5NDQgMTkuMDA0IDYuNjg0MiAzOC4xMDggMTIuMTIxIDU2Ljc2MyAxNi4yNjIgNy44ODEgMS42OTYgMTUuNzYyIDMuMjQyNCAyMy40NDMgNC41MzkzIDAuOTQ3NzEgMC4xOTk1MyAxLjk0NTMgMC4yOTkzIDIuNjkzNSAwLjQ0ODk0IDExLjYyMiAxLjg0NTYgMjMuMTQ0IDMuMjQyNCAzNC42NjYgNC4xOTAxIDY5LjYzMiA1LjQzNzIgMTM4Ljg3LTUuNTM2OSAyMDguMzUtMzIuOTcyIDI0LjI5MS05LjU3NzQgNDcuMTg2LTIwLjYwMSA2OC42MzQtMzMuMDcyIDM1LjAxNi0yMC4zMDIgNjYuMjktNDQuMzk1IDkzLjg3NC03Mi4zMjkgNC4xNC00LjE5MDEgOC4xODAzLTguNDggMTIuMjIxLTEyLjg3IDguMzc5OC05LjIyODIgMTYuNDYtMTguOTA1IDI0LjE5Mi0yOS4wMzEgMjAuMDAyLTI2LjA4OCAzNy40Ni01NC45NyA1Mi40NzMtODYuNDk2IDIuNTkzNy01LjQ4NyA1LjEzNzYtMTEuMDc0IDcuNjMxNi0xNi44MSAwLjI0OTM5LTAuNTk4NTkgMC41NDg2Ny0xLjI0NzEgMC43OTgwNy0xLjg0NTYgMC4xNDk2NC0wLjI5OTMgMC4yNDk0LTAuNTk4NTkgMC4zOTkwNC0wLjg5Nzg5IDIuNzkzMy02LjU4NDQgNS40MzY5LTEzLjIxOSA4LjA4MDUtMTkuOTUzIDExLjYyMi0zMC41NzggMjAuMTAyLTYxLjUwNSAyNS4yODktOTIuODMxIDAuNjk4MzItNC4zODk2IDEuMzk2Ni05LjEyODQgMi4wOTUtMTMuODY3IDAuODk3ODQtNy4zMzI3IDEuNzQ1OC0xNC44MTUgMi4zNDQ0LTIyLjU0NyAwLjA5OTgtMS40NDY2IDAuMjQ5NC0zLjE0MjYgMC4zOTkwNC00LjkzODMgMS4yOTY5LTE5LjI1NSAxLjI5NjktMzguNjA5IDAuMDk5OC01OC4yNjItMC40NDg5Mi02LjM4NDktMC45OTc2LTEyLjg3LTEuNjk1OS0xOS41NTQtMC4xOTk1Mi0xLjg0NTYtMC40NDg5Mi0zLjg0MDktMC42OTgzMi01LjgzNjItMS45OTUyLTE2LjM2MS00LjkzODEtMzIuNzczLTguOTI4NS00OS41ODMtNS40MzY5LTIzLjA5NS0xMi44MTktNDYuNjQtMjIuMTQ3LTcwLjIzNC0yNy40ODQtNjkuNTg2LTY2LjgzOS0xMjcuNzUtMTE4LjMxLTE3NC42OS0xOC43MDUtMTcuMDYtMzkuMjU1LTMyLjcyMy02MS40MDItNDYuODM5LTEzLjgxNy04Ljg3OS0yOC4yMzItMTcuMDYtNDMuNjQ1LTI0Ljg0MXoiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY0NiIvPgogPHBhdGggZD0ibTQ1LjYzMiA1LjM2ODhjLTAuNTUxMjMtMC4yNzU2My0xLjEzMS0wLjU0ODA5LTEuNzI2NS0wLjgwNDcxLTAuNTQ0OS0wLjIzNzYxLTEuMDg2Ni0wLjQ1NjIxLTEuNjQxLTAuNjU5MDEtMi42Njc1LTAuOTk3OTctNS4zMzgxLTEuNjA2Mi04LjAxMjEtMS44MTU0LTQuMzk3Mi0wLjM1NDgzLTguODA0MSAwLjM0MjE2LTEzLjIzNiAyLjA5MS0xLjQ4NTggMC41ODkyOC0yLjg5MjQgMS4yNjA5LTQuMjE5OCAyLjAyMTMtMi42MTY4IDEuNTAxNy00LjkxNjcgMy4zMzYxLTYuODc0NiA1LjQ5MzZxLTMuMjY5NCAzLjU4NjQtNS4zNTcxIDguMzk4OWMtMS4yODMgMi45NTU5LTIuMDgxNCA1LjkyMTMtMi4zOTgyIDguODQ4Ni0wLjAyODUxMiAwLjI4MTk2LTAuMDUzODU2IDAuNTQ0OTItMC4wNzYwMzEgMC44MDc4OC0wLjIzNDQzIDIuODg5NC0wLjAxMjY3MiA1Ljc1MDIgMC42NDk0MiA4LjYxNzQgMC4zNjExNSAxLjU1NTYgMC44Mzk1MSAzLjA4ODkgMS40NDE0IDQuNjE2IDEuNzU1IDQuNDMyMiA0LjI2MDkgOC4xMzYgNy41MTEgMTEuMDk1IDEuOTkyNiAxLjgxNTQgNC4yNTc4IDMuMzQ4OCA2Ljc5ODQgNC42MTI5IDAuMDA5NSAwLjAwMzIgMC4wMTU4NCAwLjAwNjMgMC4wMjIxOCAwLjAwOTUgMC4xOTY0MSAwLjA5ODIyIDAuMzg2NDkgMC4xOTAwOSAwLjU0ODA2IDAuMjYyOTYgMC4zMTA0NiAwLjE0ODkgMC41ODYwOCAwLjI3NTYzIDAuODYxNjggMC4zOTYwMiAwLjA2OTcgMC4wMjg1MSAwLjEyMDM4IDAuMDUzODYgMC4xNzQyNCAwLjA3NjA0IDAuNTk4NzUgMC4yNTk3OSAxLjE5NzUgMC40OTc0IDEuNzY3NyAwLjcwOTY5IDAuMTQ4OSAwLjA1Mzg2IDAuMjg1MTIgMC4xMDQ1NSAwLjQxODE3IDAuMTUyMDggMS4yMDcgMC40MjQ1MyAyLjQyMDMgMC43Njk4NCAzLjYwNTIgMS4wMzI4IDAuNTAwNTQgMC4xMDc3MiAxLjAwMTEgMC4yMDU5MyAxLjQ4ODkgMC4yODgzIDAuMDYwMTkgMC4wMTI2NyAwLjEyMzU1IDAuMDE5MDEgMC4xNzEwNyAwLjAyODUxIDAuNzM4MTQgMC4xMTcyMiAxLjQ2OTkgMC4yMDU5MyAyLjIwMTcgMC4yNjYxMiA0LjQyMjUgMC4zNDUzMyA4LjgyLTAuMzUxNjYgMTMuMjMzLTIuMDk0MSAxLjU0MjgtMC42MDgyOSAyLjk5NjktMS4zMDg0IDQuMzU5MS0yLjEwMDUgMi4yMjQtMS4yODk0IDQuMjEwMy0yLjgxOTYgNS45NjIyLTQuNTkzOCAwLjI2Mjk0LTAuMjY2MTIgMC41MTk1NS0wLjUzODU5IDAuNzc2MTktMC44MTc0MSAwLjUzMjIyLTAuNTg2MTEgMS4wNDU0LTEuMjAwNyAxLjUzNjUtMS44NDM4IDEuMjcwNC0xLjY1NjkgMi4zNzkyLTMuNDkxMyAzLjMzMjctNS40OTM2IDAuMTY0NzMtMC4zNDg0OSAwLjMyNjMtMC43MDMzNCAwLjQ4NDctMS4wNjc2IDAuMDE1ODQtMC4wMzgwMiAwLjAzNDg1LTAuMDc5MjEgMC4wNTA2OS0wLjExNzIyIDAuMDA5NS0wLjAxOTAxIDAuMDE1ODQtMC4wMzgwMiAwLjAyNTM0LTAuMDU3MDMgMC4xNzc0MS0wLjQxODE5IDAuMzQ1MzEtMC44Mzk1OCAwLjUxMzIxLTEuMjY3MyAwLjczODE0LTEuOTQyMSAxLjI3NjctMy45MDYzIDEuNjA2Mi01Ljg5NTkgMC4wNDQzNS0wLjI3ODggMC4wODg3LTAuNTc5NzcgMC4xMzMwNi0wLjg4MDczIDAuMDU3MDItMC40NjU3MiAwLjExMDg4LTAuOTQwOTQgMC4xNDg5LTEuNDMyIDAuMDA2My0wLjA5MTg4IDAuMDE1ODQtMC4xOTk2IDAuMDI1MzQtMC4zMTM2NCAwLjA4MjM3LTEuMjIyOSAwLjA4MjM3LTIuNDUyMiAwLjAwNjMtMy43MDA0LTAuMDI4NTEtMC40MDU1Mi0wLjA2MzM2LTAuODE3NDEtMC4xMDc3MS0xLjI0MTktMC4wMTI2MzItMC4xMTcyMS0wLjAyODQ3Mi0wLjI0Mzk0LTAuMDQ0MzEyLTAuMzcwNjYtMC4xMjY3Mi0xLjAzOTEtMC4zMTM2My0yLjA4MTUtMC41NjcwNy0zLjE0OTEtMC4zNDUzMS0xLjQ2NjgtMC44MTQxNy0yLjk2MjItMS40MDY2LTQuNDYwOC0xLjc0NTYtNC40MTk2LTQuMjQ1MS04LjExMzctNy41MTQyLTExLjA5NS0xLjE4OC0xLjA4MzUtMi40OTMyLTIuMDc4My0zLjg5OTgtMi45NzQ5LTAuODc3NTYtMC41NjM5My0xLjc5MzEtMS4wODM1LTIuNzcyLTEuNTc3N3oiIGZpbGw9InVybCgjYykiIHN0cm9rZS13aWR0aD0iLjk5MzcyIi8+CiA8cGF0aCBkPSJtNTAuMDYxIDE3LjE4OHMtMC41NDk1OCAxLjE0OC0xLjM5MjYgMi41MjU0Yy0wLjg0MzA2IDEuMzgtMi4xOTE0IDIuODQ0My0zLjM1NTUgMy43NjU2LTEuNTE0MyAxLjIwMTEtMy4wNTAyIDEuOTczOC00LjQxMDIgMi40MTk5LTEuMzU3NiAwLjQ0ODQ0LTIuNDY2OCAwLjcwNTA4LTIuNDY2OCAwLjcwNTA4IDAuNTk3OSAwLjQ4NTQyIDEuMjM4MSAxLjA4OCAxLjU4NTkgMS43NzkzIDAuMzQ1MzQgMC42ODg2OSAwLjU0NDkyIDEuNDY2OSAwLjU0NDkyIDIuMzEyNSAwIDEuNjU0My0wLjYzNzAzIDMuMDc3Ni0xLjY3NTggNC4wODk4LTEuMDM5MyAxLjAwOTctMi40ODI4IDEuNjA3NC00LjA5NzcgMS42MDc0LTEuOTYwNCAwLTMuNTExMS0wLjU4MjUyLTQuNTcyMy0xLjU4MDEtMS4wNjExLTEuMDAwMS0xLjYzMjgtMi40MTczLTEuNjMyOC00LjA4NCAwLTAuNjM0NSAwLjA5NTc4LTEuMjE4NiAwLjI2OTUzLTEuNzQ4IDAuMTc0Mi0wLjUyNjkzIDAuNDI1OTktMS4wMDEzIDAuNzQyMTktMS40MTggMCAwLTAuNDcwNzYgMC4wNjI5Ni0xLjMwODYtMC4xMTMyOC0wLjgzNTc5LTAuMTc2ODEtMi4wNDMtMC41OTU2Ni0zLjUxNTYtMS41NTg2LTEuMjUyNC0wLjgxODU4LTIuMzQ1Mi0xLjk2MzctMy4xMjctMi45MDIzLTAuNzc5NDMtMC45Mzg3Ny0xLjI0NjEtMS42NzM4LTEuMjQ2MS0xLjY3MzggMCAwIDAuMDQ0NjggMy43ODcxIDAuMDI3MzQgNS44ODI4LTAuMDQzODcgNS44MDM2LTAuNjMwODYgNS44Mzk4LTAuNjMwODYgNS44Mzk4LTAuNzE1Ni0xLjAxMjUtMS40ODg2LTEuODg0LTIuNDEwMi0yLjUwMzktMC45MjM1My0wLjYyMDIxLTEuOTk1Ny0wLjk4NDc4LTMuMzE2NC0wLjk4MjQyLTEuNTk3NyAwLjAwMjQtMi40OTI0IDAuNTk0MjktMy4wMDIgMS40MTgtMC41MDk4NCAwLjgyNTkxLTAuNjM0MDkgMS44ODA2LTAuNjg1NTUgMi44MDQ3LTAuMDkzMTYgMS41OTMgMC43MDk0OCAzLjU4NjYgMi4wMzUyIDUuMTc5NyAxLjMyNzkgMS41OTMgMy4xODEzIDIuNzg3NSA1LjE5MzQgMi43ODUyIDAuMTQyMTMgMCAwLjI5MjktMC4wMDk2IDAuNDQ3MjctMC4wMjkzIDAuMTU0MTgtMC4wMjIxMyAwLjMxMjg0LTAuMDUyMTEgMC40NzQ2MS0wLjA5Mzc1IDAgMCAwLjQ1Mjc4IDAuNDM2MjIgMS40OTQxIDEuMTA1NSAxLjA0MTUgMC42NzEyOSAyLjY3MDkgMS41NzM2IDUuMDIzNCAyLjUwOTggMS4yMjAzIDAuNDg1MDQgMi41MjE0IDAuOTk3MjEgNC4xNDg0IDEuMzk2NSAxLjYyNzEgMC4zOTk2NiAzLjU3NjYgMC42ODY4NyA2LjA5NTcgMC43MTg3NSAzLjQ0NTQgMC4wNDE1NyA1LjkwMzQtMC43MTk1IDcuNzM2My0xLjgyMjMgMS44MzU1LTEuMTAyOSAzLjA0OTctMi41NTA3IDQuMDA3OC0zLjg4ODcgMS43Mjk5LTIuNDIxNiAyLjc2OTgtNS4zMjU1IDMuMzc1LTguMTQ2NSAwLjYwNTM2LTIuODE4NSAwLjc3NzUyLTUuNTU0NCAwLjc2NzU4LTcuNjM0OC0wLjAxNzI4LTMuNzA1Ni0wLjI5ODAzLTUuODcxNS0wLjU3MjI3LTcuMTExM2gtMmUtM2MtMC4yNzcxOS0xLjI0MDQtMC41NDg3OC0xLjU1NDctMC41NDg3OC0xLjU1NDd6bS0yNS43MjkgMTAuOTc3YzEuODQ3NSAwLjAxMjQzIDMuNjA1OCAxLjYyNTUgMy41OTU3IDMuNTY2NC0wLjAwOTYgMS43NTc1LTEuNTIyMiAzLjUxMTctMy42MjcgMy41MTE3LTIuNjc4My0wLjAwMjYtMy43NTY2LTEuNzQ3NS0zLjczNDQtMy4yOTg4IDAuMDI0NjgtMS42OTYxIDAuNzM0MzItMy44MDEzIDMuNzY1Ni0zLjc3OTN6bTExLjMxMiAxLjA0MWMtMS40MTg4IDAtMi41NjY0IDEuMTM3Mi0yLjU2NjQgMi41MzkxIDAgMS4zOTkzIDEuMTQ3NiAyLjUzNTIgMi41NjY0IDIuNTM1MnMyLjU2ODQtMS4xMzU4IDIuNTY4NC0yLjUzNTJjMC0xLjQwMTktMS4xNDk1LTIuNTM5MS0yLjU2ODQtMi41Mzkxem0tMjEuOTI0IDEuMTAxNmMxLjA4MDggMCAxLjk2MDkgMC44Nzc3NSAxLjk2MDkgMS45NjA5IDAgMS4wODMzLTAuODgwMTEgMS45NjA5LTEuOTYwOSAxLjk2MDktMS4wODMxIDAtMS45NTktMC44Nzc2Mi0xLjk1OS0xLjk2MDkgMC0xLjA4MzIgMC44NzU5Mi0xLjk2MDkgMS45NTktMS45NjA5em0xMS4yMjEgMC4yODcxMWMtMC45MTYzMiAwLTEuNjU4MiAwLjc1NzU1LTEuNjU4MiAxLjY5MTQgMCAwLjkzNjQxIDAuNzQxODIgMS42OTM0IDEuNjU4MiAxLjY5MzQgMC45MTM5NiAwIDEuNjU2Mi0wLjc1Njk1IDEuNjU2Mi0xLjY5MzQgMC0wLjkzMzg2LTAuNzQyMjgtMS42OTE0LTEuNjU2Mi0xLjY5MTR6bTEwLjc2OCAwLjIyNjU2YzAuNTM5MjQgMCAwLjk4MDQ3IDAuNDQxMjMgMC45ODA0NyAwLjk4MDQ3IDAgMC41NDE3Mi0wLjQ0MTIzIDAuOTc4NTItMC45ODA0NyAwLjk3ODUyLTAuNTQxNiAwLTAuOTgwNDctMC40MzY3OS0wLjk4MDQ3LTAuOTc4NTIgMC0wLjUzOTI0IDAuNDM4ODctMC45ODA0NyAwLjk4MDQ3LTAuOTgwNDd6bS0xMC43NDIgMS4wOTE4YzAuMjcyMTQgMCAwLjQ5MDIzIDAuMjIwNzEgMC40OTAyMyAwLjQ5MDIzIDAgMC4yNzIwMS0wLjIxODEgMC40OTAyNC0wLjQ5MDIzIDAuNDkwMjMtMC4yNjk1OCAwLTAuNDkwMjQtMC4yMTgyMy0wLjQ5MDI0LTAuNDkwMjMgMC0wLjI2OTU5IDAuMjIwNjUtMC40OTAyMyAwLjQ5MDI0LTAuNDkwMjN6bTE0LjQ4NCA2Ljk0MTRzMC4zOTU1MiAwLjA0NjQ1IDAuODYzMjggMC4yMzA0N2MwLjQ2ODE0IDAuMTg2MDYgMS4wMTE4IDAuNTA2MjMgMS4zMTA1IDEuMDUyNyAwLjIzMjggMC40MjY1NyAwLjE1OTE4IDAuODg5ODcgMC4wMjkzIDEuMjUtMC4xMzIzNyAwLjM2MDU3LTAuMzE4MzYgMC42MTMyOC0wLjMxODM2IDAuNjEzMjhzMC4wNzEzMy0wLjM5NDcxIDAuMDc2MTctMC42ODE2NGMwLjAwMjMtMC4yOTYzNy0wLjA3NjE3LTAuNjU4Mi0wLjA3NjE3LTAuNjU4MnMtMC4yMDc5OSAwLjQ0MjU5LTAuOTQzMzYgMC44ODg2N2MtMC43MzQ5OCAwLjQ0MzU5LTIuMDE4NiAxLTQuMTMwOSAxLTEuODA4NSAwLTIuODAzOS0wLjI3NDMyLTMuMzY1Mi0wLjQzMzU5LTAuNTYzNjYtMC4xNjE4OS0wLjY3MzgzLTAuMzIwMzEtMC42NzM4My0wLjMyMDMxczEuNDIzMSAwLjEzMzY1IDIuODg4NyAwLjA1MjczYzEuOTY1LTAuMTA1MDggMy4wNTUyLTAuNTA4ODUgNC4yNDYxLTAuOTU3MDMgMC42ODg4Mi0wLjI2MjE5IDEuNTAzOS0wLjkzNTU1IDEuNTAzOS0wLjkzNTU1cy0wLjI2MDktMC4yNzYxLTAuNjIxMDktMC41NjA1NWMtMC4zMzgwNy0wLjI2MjEyLTAuNzg5MDYtMC41NDEwMi0wLjc4OTA2LTAuNTQxMDJ6IiBmaWx0ZXI9InVybCgjZmlsdGVyOTA5KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii45OTk5OCIvPgogPHBhdGggZD0ibTUwLjA2MSAxNi40NTlzLTAuNTQ5NTggMS4xNDgtMS4zOTI2IDIuNTI1NGMtMC44NDMwNiAxLjM4LTIuMTkxNCAyLjg0NDMtMy4zNTU1IDMuNzY1Ni0xLjUxNDMgMS4yMDExLTMuMDUwMiAxLjk3MzgtNC40MTAyIDIuNDE5OS0xLjM1NzYgMC40NDg0NC0yLjQ2NjggMC43MDUwOC0yLjQ2NjggMC43MDUwOCAwLjU5NzkgMC40ODU0MiAxLjIzODEgMS4wODggMS41ODU5IDEuNzc5MyAwLjM0NTM0IDAuNjg4NjkgMC41NDQ5MiAxLjQ2NjkgMC41NDQ5MiAyLjMxMjUgMCAxLjY1NDMtMC42MzcwMyAzLjA3NzYtMS42NzU4IDQuMDg5OC0xLjAzOTMgMS4wMDk3LTIuNDgyOCAxLjYwNzQtNC4wOTc3IDEuNjA3NC0xLjk2MDQgMC0zLjUxMTEtMC41ODI1Mi00LjU3MjMtMS41ODAxLTEuMDYxMS0xLjAwMDEtMS42MzI4LTIuNDE3My0xLjYzMjgtNC4wODQgMC0wLjYzNDUgMC4wOTU3NzktMS4yMTg2IDAuMjY5NTMtMS43NDggMC4xNzQyLTAuNTI2OTMgMC40MjU5OS0xLjAwMTMgMC43NDIxOS0xLjQxOCAwIDAtMC40NzA3NiAwLjA2Mjk1Ni0xLjMwODYtMC4xMTMyOC0wLjgzNTc5LTAuMTc2ODEtMi4wNDMtMC41OTU2Ni0zLjUxNTYtMS41NTg2LTEuMjUyNC0wLjgxODU4LTIuMzQ1Mi0xLjk2MzctMy4xMjctMi45MDIzLTAuNzc5NDMtMC45Mzg3Ny0xLjI0NjEtMS42NzM4LTEuMjQ2MS0xLjY3MzggMCAwIDAuMDQ0Njg0IDMuNzg3MSAwLjAyNzM0NCA1Ljg4MjgtMC4wNDM4NyA1LjgwMzYtMC42MzA4NiA1LjgzOTgtMC42MzA4NiA1LjgzOTgtMC43MTU2LTEuMDEyNS0xLjQ4ODYtMS44ODQtMi40MTAyLTIuNTAzOS0wLjkyMzUzLTAuNjIwMjEtMS45OTU3LTAuOTg0NzgtMy4zMTY0LTAuOTgyNDItMS41OTc3IDAuMDAyNC0yLjQ5MjQgMC41OTQyOS0zLjAwMiAxLjQxOC0wLjUwOTg0IDAuODI1OTEtMC42MzQwOSAxLjg4MDYtMC42ODU1NSAyLjgwNDctMC4wOTMxNiAxLjU5MyAwLjcwOTQ4IDMuNTg2NiAyLjAzNTIgNS4xNzk3IDEuMzI3OSAxLjU5MyAzLjE4MTMgMi43ODc1IDUuMTkzNCAyLjc4NTIgMC4xNDIxMyAwIDAuMjkyOS0wLjAwOTU3NyAwLjQ0NzI3LTAuMDI5Mjk3IDAuMTU0MTgtMC4wMjIxMyAwLjMxMjg0LTAuMDUyMTEgMC40NzQ2MS0wLjA5Mzc1IDAgMCAwLjQ1Mjc4IDAuNDM2MjIgMS40OTQxIDEuMTA1NSAxLjA0MTUgMC42NzEyOSAyLjY3MDkgMS41NzM2IDUuMDIzNCAyLjUwOTggMS4yMjAzIDAuNDg1MDQgMi41MjE0IDAuOTk3MjEgNC4xNDg0IDEuMzk2NSAxLjYyNzEgMC4zOTk2NiAzLjU3NjYgMC42ODY4NyA2LjA5NTcgMC43MTg3NSAzLjQ0NTQgMC4wNDE1NyA1LjkwMzQtMC43MTk1IDcuNzM2My0xLjgyMjMgMS44MzU1LTEuMTAyOSAzLjA0OTctMi41NTA3IDQuMDA3OC0zLjg4ODcgMS43Mjk5LTIuNDIxNiAyLjc2OTgtNS4zMjU1IDMuMzc1LTguMTQ2NSAwLjYwNTM2LTIuODE4NSAwLjc3NzUyLTUuNTU0NCAwLjc2NzU4LTcuNjM0OC0wLjAxNzI4LTMuNzA1Ni0wLjI5ODAzLTUuODcxNS0wLjU3MjI3LTcuMTExM2gtMC4wMDE5NTNjLTAuMjc3MjQtMS4yNDA0LTAuNTQ4ODMtMS41NTQ3LTAuNTQ4ODMtMS41NTQ3em0tMjUuNzI5IDEwLjk3N2MxLjg0NzUgMC4wMTI0MyAzLjYwNTggMS42MjU1IDMuNTk1NyAzLjU2NjQtMC4wMDk2IDEuNzU3NS0xLjUyMjIgMy41MTE3LTMuNjI3IDMuNTExNy0yLjY3ODMtMC4wMDI2LTMuNzU2Ni0xLjc0NzUtMy43MzQ0LTMuMjk4OCAwLjAyNDY4LTEuNjk2MSAwLjczNDMyLTMuODAxMyAzLjc2NTYtMy43Nzkzem0xMS4zMTIgMS4wNDFjLTEuNDE4OCAwLTIuNTY2NCAxLjEzNzItMi41NjY0IDIuNTM5MSAwIDEuMzk5MyAxLjE0NzYgMi41MzUyIDIuNTY2NCAyLjUzNTJzMi41Njg0LTEuMTM1OCAyLjU2ODQtMi41MzUyYzAtMS40MDE5LTEuMTQ5NS0yLjUzOTEtMi41Njg0LTIuNTM5MXptLTIxLjkyNCAxLjEwMTZjMS4wODA4IDAgMS45NjA5IDAuODc3NzUgMS45NjA5IDEuOTYwOSAwIDEuMDgzMy0wLjg4MDExIDEuOTYwOS0xLjk2MDkgMS45NjA5LTEuMDgzMSAwLTEuOTU5LTAuODc3NjItMS45NTktMS45NjA5IDAtMS4wODMyIDAuODc1OTItMS45NjA5IDEuOTU5LTEuOTYwOXptMTEuMjIxIDAuMjg3MTFjLTAuOTE2MzIgMC0xLjY1ODIgMC43NTc1NS0xLjY1ODIgMS42OTE0IDAgMC45MzY0MSAwLjc0MTgyIDEuNjkzNCAxLjY1ODIgMS42OTM0IDAuOTEzOTYgMCAxLjY1NjItMC43NTY5NSAxLjY1NjItMS42OTM0IDAtMC45MzM4Ni0wLjc0MjI4LTEuNjkxNC0xLjY1NjItMS42OTE0em0xMC43NjggMC4yMjY1NmMwLjUzOTI0IDAgMC45ODA0NyAwLjQ0MTIzIDAuOTgwNDcgMC45ODA0NyAwIDAuNTQxNzItMC40NDEyMyAwLjk3ODUyLTAuOTgwNDcgMC45Nzg1Mi0wLjU0MTYgMC0wLjk4MDQ3LTAuNDM2NzktMC45ODA0Ny0wLjk3ODUyIDAtMC41MzkyNCAwLjQzODg3LTAuOTgwNDcgMC45ODA0Ny0wLjk4MDQ3em0tMTAuNzQyIDEuMDkxOGMwLjI3MjE0IDAgMC40OTAyMyAwLjIyMDcxIDAuNDkwMjMgMC40OTAyMyAwIDAuMjcyMDEtMC4yMTgxIDAuNDkwMjQtMC40OTAyMyAwLjQ5MDIzLTAuMjY5NTggMC0wLjQ5MDI0LTAuMjE4MjMtMC40OTAyNC0wLjQ5MDIzIDAtMC4yNjk1OSAwLjIyMDY1LTAuNDkwMjMgMC40OTAyNC0wLjQ5MDIzem0xNC40ODQgNi45NDE0czAuMzk1NTIgMC4wNDY0NSAwLjg2MzI4IDAuMjMwNDdjMC40NjgxNCAwLjE4NjA2IDEuMDExOCAwLjUwNjIzIDEuMzEwNSAxLjA1MjcgMC4yMzI4IDAuNDI2NTcgMC4xNTkxOCAwLjg4OTg3IDAuMDI5Mjk3IDEuMjUtMC4xMzIzNyAwLjM2MDU3LTAuMzE4MzYgMC42MTMyOC0wLjMxODM2IDAuNjEzMjhzMC4wNzEzMzEtMC4zOTQ3MSAwLjA3NjE3MS0wLjY4MTY0YzAuMDAyMy0wLjI5NjM3LTAuMDc2MTcxLTAuNjU4Mi0wLjA3NjE3MS0wLjY1ODJzLTAuMjA3OTkgMC40NDI1OS0wLjk0MzM2IDAuODg4NjdjLTAuNzM0OTggMC40NDM1OS0yLjAxODYgMS00LjEzMDkgMS0xLjgwODUgMC0yLjgwMzktMC4yNzQzMi0zLjM2NTItMC40MzM1OS0wLjU2MzY2LTAuMTYxODktMC42NzM4My0wLjMyMDMxLTAuNjczODMtMC4zMjAzMXMxLjQyMzEgMC4xMzM2NSAyLjg4ODcgMC4wNTI3MzVjMS45NjUtMC4xMDUwOCAzLjA1NTItMC41MDg4NSA0LjI0NjEtMC45NTcwMyAwLjY4ODgyLTAuMjYyMTkgMS41MDM5LTAuOTM1NTUgMS41MDM5LTAuOTM1NTVzLTAuMjYwOS0wLjI3NjEtMC42MjEwOS0wLjU2MDU1Yy0wLjMzODA3LTAuMjYyMTItMC43ODkwNi0wLjU0MTAyLTAuNzg5MDYtMC41NDEwMnoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iLjk5OTk4Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gimp,gimp,image,gif,tiff,png,jpeg,bmp,tga,pcx,bitmap,jpg,pixmap\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"gimp.desktop\"\nLABEL oc.launch=\"gimp.Gimp\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Gimp\"\nLABEL oc.displayname=\"Gimp\"\nLABEL oc.path=\"/usr/bin/gimp\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;\"\nLABEL oc.fileextensions=\"dds\"\nLABEL oc.legacyfileextensions=\"dds\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gimp\"\nENV APPBIN \"/usr/bin/gimp\"\nENV APP \"/usr/bin/gimp\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gimp/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gimp/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gimp/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gimp/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnumeric glpk\nLABEL oc.icon=\"gnumeric.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL2lua3NjYXBlLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMiIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40MyIKICAgd2lkdGg9IjQ4IgogICBoZWlnaHQ9IjQ4IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL3ZpbmljaXVzL3RhbmdvLWljb24tdGhlbWUtY29kZS9hcHBzL3NjYWxhYmxlIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnbnVtZXJpYy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvdmluaWNpdXMvdGFuZ28taWNvbi10aGVtZS1jb2RlL2FwcHMvc2NhbGFibGUvZ251bWVyaWMucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI5MCIKICAgdmlld0JveD0iMCAwIDQ4IDQ4Ij4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzNSI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzOTAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjA2ODM3NjA3OyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMzOTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuMjEzNjc1MjI7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzM5NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5MDYwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0OTA2MiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A0OTA2NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3NjAyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RiZGJkNTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNzYwNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YxZjFmMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNzYwNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI1ODA1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNTgwNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNTgwOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI0MDQ3Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0ZjE5NztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDA0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izc0ZDIxODtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNDA1MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE4Nzg2Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzM0NjVhNDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxODc4OCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxODc5MCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE2MTQ3Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxNjE0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxNjE1MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDk5NDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY3MTcxO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDk5NTAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkYzI1MjU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wOTk1MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE1NjYyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wMTU2NjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOGY4Zjg7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDE1NjY2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjU5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZhZmFmYTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wMjYwIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYmJiYmJiO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AyNjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNjkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTNhM2EzO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AyNzAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0YzRjNGM7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDI3MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2OTkiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MDEiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY3MTcxO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MDMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2MwMDAwO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcxMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxMyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1YjhjY2I7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxNSIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzNDY1YTQ7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NzE5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NzIxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3M2QyMTY7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MjMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDVmN2IzO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTA0OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTA1MCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwLjUiCiAgICAgICAgIGlkPSJzdG9wNTA1NiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1MDUyIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3NjAyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc2MDgiCiAgICAgICB4MT0iMTEuOTE4OTIiCiAgICAgICB5MT0iNDIuMDIwNDc3IgogICAgICAgeDI9IjExLjkxODkyIgogICAgICAgeTI9IjYuOTgyNzQ3NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NTgxNiwwLDAsMS4xNzE3MDIsLTgxLjc0NDU1LC00LjE4OTQ4MSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3NjAyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzI5NjYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSIxMS45MTg5MiIKICAgICAgIHkxPSI0Mi4wMjA0NzciCiAgICAgICB4Mj0iMTEuOTE4OTIiCiAgICAgICB5Mj0iNi45ODI3NDc2IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLDgwKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjU4MDUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMjk2OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgY3g9Ii03NC4wMTEwOTMiCiAgICAgICBjeT0iMzguODkwOTQyIgogICAgICAgZng9Ii03NC4wMTEwOTMiCiAgICAgICBmeT0iMzguODkwOTQyIgogICAgICAgcj0iMTMuNjYzNTg2IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyOTcwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjk3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyOTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTkuMjU2NjM3NiIKICAgICAgIHkxPSI1NS44MzI5NDMiCiAgICAgICB4Mj0iLTE2LjYwNTM5MiIKICAgICAgIHkyPSI0OC41ODk0NzQiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0MDQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzI5NzYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjk3OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNTgwNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM1NzA0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBjeD0iLTc0LjAxMTA5MyIKICAgICAgIGN5PSIzOC44OTA5NDIiCiAgICAgICBmeD0iLTc0LjAxMTA5MyIKICAgICAgIGZ5PSIzOC44OTA5NDIiCiAgICAgICByPSIxMy42NjM1ODYiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE2MTQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU3MDYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41Mzk0NDMsMCwwLDEuNTEwODcxLDEwMC45NjU2LC0xNS4xODMxOSkiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTcwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzEwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzg5MzY1LDAsMCwxLjM4OTM2NSw0OC45OTAyOSwtNDYuMjA0MDUpIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzEyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzg5MzY1LDAsMCwxLjM4OTM2NSw0OC45OTAyOSwtNDYuMjA0MDUpIgogICAgICAgeDE9Ii0xOC4wNzk4ODIiCiAgICAgICB5MT0iNDguNjY1NjgiCiAgICAgICB4Mj0iLTE4LjUiCiAgICAgICB5Mj0iNTYuODI3Nzc4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzE0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI1ODA1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDEwNDkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGN4PSItNzQuMDExMDkzIgogICAgICAgY3k9IjM4Ljg5MDk0MiIKICAgICAgIGZ4PSItNzQuMDExMDkzIgogICAgICAgZnk9IjM4Ljg5MDk0MiIKICAgICAgIHI9IjEzLjY2MzU4NiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTA1MSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5OTQ4IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDEwNTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItNTQuMTAyNzgzIgogICAgICAgeTE9IjIwLjQ1Nzg3OCIKICAgICAgIHgyPSItNDkuOTk0MTQ4IgogICAgICAgeTI9IjMzLjU0MzM2NSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTg3ODYiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTA1NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMDU3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTE4LjA3OTg4MiIKICAgICAgIHkxPSI0OC42NjU2OCIKICAgICAgIHgyPSItMTguNSIKICAgICAgIHkyPSI1Ni44Mjc3NzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE2MTQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDEwNTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItNDkuOTk0MTQ4IgogICAgICAgeTE9IjM3LjAzNjQ5OSIKICAgICAgIHgyPSItNDkuOTk0MTQ4IgogICAgICAgeTI9IjE3Ljg1NzIwMyIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjU4MDUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTE0MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgY3g9Ii03NC4wMTEwOTMiCiAgICAgICBjeT0iMzguODkwOTQyIgogICAgICAgZng9Ii03NC4wMTEwOTMiCiAgICAgICBmeT0iMzguODkwOTQyIgogICAgICAgcj0iMTMuNjYzNTg2IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMTQ1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTE0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMTQ5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTkuMjU2NjM3NiIKICAgICAgIHkxPSI1NS44MzI5NDMiCiAgICAgICB4Mj0iLTE2LjYwNTM5MiIKICAgICAgIHkyPSI0OC41ODk0NzQiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0MDQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDExNTEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTE1MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNzYwMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5MDY2IgogICAgICAgeDE9IjI0LjQ5NzAxNSIKICAgICAgIHkxPSI0My4wMTI5MDkiCiAgICAgICB4Mj0iMjQuNDk3MDE1IgogICAgICAgeTI9IjUuOTg3MDE3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA0NzAwNiwwLDAsMS4wNTM2OTYsLTEuMTU0MzY2LC0xLjMwODg1KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgcj0iMTcuNTc2NjU0IgogICAgICAgZnk9IjM1LjM3MzA5MyIKICAgICAgIGZ4PSIyMi45MzA0NjIiCiAgICAgICBjeT0iMzUuMzczMDkzIgogICAgICAgY3g9IjIyLjkzMDQ2MiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDAsMC4wMDAwMDAsMC4wMDAwMDAsMC4zMzMzMzMsMi42NTg0NjNlLTE2LDIzLjU4MjA2KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjI1MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NDYiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxODIiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTM2ZDE4O3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MTg0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDc5MDIwO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MTg2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDE5MiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlOWI5NmU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDE5NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YxZDE5ZTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDE5NiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQyMTAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWFiYTZmO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MjEyIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjk3YTFiO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MjE0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDIyMiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDIyNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC42ODYzOTA1MjsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDQyMjYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTQ2Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0OTQ4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDQ5NTAiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTc5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZiZjBlMDtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDk4MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YwY2U5OTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDk4MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5OTUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGU5NTIzO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDQ5OTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhMzZkMTg7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDQ5OTkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODcxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4NzMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2NjY2NjO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExNDIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDUxMTQ0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAuNSIKICAgICAgICAgaWQ9InN0b3A1MTE0NiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1MTE0OCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNzYwMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYwMzIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MTIyMTYsMCwwLDEuMDUzNjk2LC0wLjQ0OTQ5NSwtMS4zMDg4NSkiCiAgICAgICB4MT0iMjQuNDk3MDE1IgogICAgICAgeTE9IjQzLjAxMjkwOSIKICAgICAgIHgyPSIyNC40OTcwMTUiCiAgICAgICB5Mj0iNS45ODcwMTcyIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNTgwNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDYwMzQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGN4PSItNzQuMDExMDkzIgogICAgICAgY3k9IjM4Ljg5MDk0MiIKICAgICAgIGZ4PSItNzQuMDExMDkzIgogICAgICAgZnk9IjM4Ljg5MDk0MiIKICAgICAgIHI9IjEzLjY2MzU4NiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDM2IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDM4IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTU0LjEwMjc4MyIKICAgICAgIHkxPSIyMC40NTc4NzgiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIzMy41NDMzNjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE4Nzg2IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjA0MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYwNDIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDQ0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzOTAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMzk2IgogICAgICAgeDE9IjciCiAgICAgICB5MT0iLTE5LjUiCiAgICAgICB4Mj0iMTMiCiAgICAgICB5Mj0iLTE5LjUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDUuNTU5OTFlLTM1LDAuNzA5Njc4LDEuNjI2NDkzZS0xNiwtMTAuMTYxMjkpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzkwIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzQwNCIKICAgICAgIHgxPSItMy45OTY0NTA3IgogICAgICAgeTE9Ii0yOC41NTAxODYiCiAgICAgICB4Mj0iLTEzIgogICAgICAgeTI9Ii0yOC41NTAxODYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC44MjM1MjksMCwtNy4yMzUyOTQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzkwIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzQwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjYuOTk3MDA1NSIKICAgICAgIHkxPSItMjcuNjg2Njg0IgogICAgICAgeDI9IjEzLjY2OTE0NiIKICAgICAgIHkyPSItMjguNzIzODU2IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsLTIuMjQxOTAzZS0zNCwwLjI5MDMyMywxLjExMDcyMWUtMTYsLTIuODM4NzEpIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTAyNCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBpZD0iYmFzZSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgc2hvd2d1aWRlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgogICAgIGZpbGw9IiM4ODhhODUiCiAgICAgaW5rc2NhcGU6em9vbT0iMSIKICAgICBpbmtzY2FwZTpjeD0iMzYiCiAgICAgaW5rc2NhcGU6Y3k9IjEyLjUiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIKICAgICBzaG93Ym9yZGVyPSJmYWxzZSIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiIC8+CiAgPHJlY3QKICAgICByeD0iMi44OTE0OTQiCiAgICAgcnk9IjIuODkxNDk0IgogICAgIHk9IjUuNTI2NDk0IgogICAgIHg9IjIuMzk0MzIxIgogICAgIGhlaWdodD0iMzcuOTYwMzM5IgogICAgIHdpZHRoPSIzNC4xMDYwNzkiCiAgICAgaWQ9InJlY3Q1OTc2IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NjAzMik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM1NTU3NTM7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMzY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHk9Ii0zNSIKICAgICB4PSI3IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzUiCiAgICAgaWQ9InJlY3Q1OTgwIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLDEsLTEsMCwwLDApIiAvPgogIDxyZWN0CiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q1OTgyIgogICAgIHdpZHRoPSIzNSIKICAgICBoZWlnaHQ9IjEiCiAgICAgeD0iNyIKICAgICB5PSItMjQiIC8+CiAgPHJlY3QKICAgICB5PSItMTMiCiAgICAgeD0iNyIKICAgICBoZWlnaHQ9IjEiCiAgICAgd2lkdGg9IjM1IgogICAgIGlkPSJyZWN0NTk4NCIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSIgLz4KICA8cmVjdAogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgIGlkPSJyZWN0NTk4NiIKICAgICB3aWR0aD0iMzUiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjciCiAgICAgeT0iLTUiIC8+CiAgPHJlY3QKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q1OTg4IgogICAgIHdpZHRoPSIzMSIKICAgICBoZWlnaHQ9IjEiCiAgICAgeD0iNCIKICAgICB5PSIyMCIgLz4KICA8cmVjdAogICAgIHk9IjI0IgogICAgIHg9IjQiCiAgICAgaGVpZ2h0PSIxIgogICAgIHdpZHRoPSIzMSIKICAgICBpZD0icmVjdDU5OTAiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiAvPgogIDxyZWN0CiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgIGlkPSJyZWN0NTk5MiIKICAgICB3aWR0aD0iMzEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjQiCiAgICAgeT0iMjgiIC8+CiAgPHJlY3QKICAgICB5PSIzMiIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q1OTk0IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDU5OTYiCiAgICAgd2lkdGg9IjMxIgogICAgIGhlaWdodD0iMSIKICAgICB4PSI0IgogICAgIHk9IjM2IiAvPgogIDxyZWN0CiAgICAgeT0iNDEiCiAgICAgeD0iNCIKICAgICBoZWlnaHQ9IjEiCiAgICAgd2lkdGg9IjMxIgogICAgIGlkPSJyZWN0NTk5OCIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPHJlY3QKICAgICB5PSIxNiIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q2MDAwIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDYwMDIiCiAgICAgd2lkdGg9IjMxIgogICAgIGhlaWdodD0iMSIKICAgICB4PSI0IgogICAgIHk9IjEyIiAvPgogIDxyZWN0CiAgICAgeT0iNyIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q2MDA0IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjIzMzg5ZS0xNywxLC0xLDEuNjAwNjc3ZS0xNywwLDApIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzM5Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjU5MzA3MzU5IgogICAgIGlkPSJyZWN0NjAwOCIKICAgICB3aWR0aD0iNiIKICAgICBoZWlnaHQ9IjIyIgogICAgIHg9IjciCiAgICAgeT0iLTM1IiAvPgogIDxyZWN0CiAgICAgeT0iLTEzIgogICAgIHg9IjciCiAgICAgaGVpZ2h0PSI5IgogICAgIHdpZHRoPSI2IgogICAgIGlkPSJyZWN0MzQwNiIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM0MDgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC41OTMwNzM1OSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjA5NTY4MmUtMTgsMSwtMSwzLjkxMjc2NmUtMTcsMCwwKSIgLz4KICA8cmVjdAogICAgIHk9Ii00MSIKICAgICB4PSItMTMiCiAgICAgaGVpZ2h0PSIyOCIKICAgICB3aWR0aD0iOSIKICAgICBpZD0icmVjdDYwMzAiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNDA0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAuNTkzMDczNTkiCiAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiIC8+CiAgPHJlY3QKICAgICByeD0iMS44OTU0OTUzIgogICAgIHJ5PSIxLjg5NTQ5NTMiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNDgyNzU4NTk7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDU5NzgiCiAgICAgd2lkdGg9IjMyLjA2MjY2NCIKICAgICBoZWlnaHQ9IjM1Ljk1ODM0NyIKICAgICB4PSIzLjQwNTA3OTEiCiAgICAgeT0iNi41MTM4OTAzIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAuMDc4NiwtMTguMDkxNDgpIgogICAgIGlkPSJnNjAxMCI+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yMjA2NywwLDAsMC45NTgzMzMsNzIuMTI1MDMsMTUuODUzMzcpIgogICAgICAgZD0iTSAtNjAuMzQ3NTA3IDM4Ljg5MDk0MiBBIDEzLjY2MzU4NiAxMy42NjM1ODYgMCAxIDEgIC04Ny42NzQ2NzksMzguODkwOTQyIEEgMTMuNjYzNTg2IDEzLjY2MzU4NiAwIDEgMSAgLTYwLjM0NzUwNyAzOC44OTA5NDIgeiIKICAgICAgIHNvZGlwb2RpOnJ5PSIxMy42NjM1ODYiCiAgICAgICBzb2RpcG9kaTpyeD0iMTMuNjYzNTg2IgogICAgICAgc29kaXBvZGk6Y3k9IjM4Ljg5MDk0MiIKICAgICAgIHNvZGlwb2RpOmN4PSItNzQuMDExMDkzIgogICAgICAgaWQ9InBhdGg2MDEyIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDYwMzQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhNDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2NzAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE4LjU0ODU5MiwzNy41OTM3NSBDIC0yNi4yOTQyNDksMzcuODA2MTY1IC0zMi40OTg0MzYsNDIuNDI4MzEzIC0zMi40OTg0MzksNDguMDYyNSBDIC0zMi40OTg0MzksNDguMzc4MDE1IC0zMi40OTg0MzksNTEuNzQ2OTg2IC0zMi40OTg0MzksNTIuMDYyNSBDIC0zMi40OTg0MzksNTcuODMxOTA4IC0yNS45ODkzMTgsNjIuNDk5OTk5IC0xNy45ODQzMjksNjIuNSBDIC05Ljk3OTMzOTgsNjIuNSAtMy41MDE1Njc3LDU3LjgzMTkwOSAtMy41MDE1Njc4LDUyLjA2MjUgQyAtMy41MDE1Njc4LDUxLjc0Njk4NSAtMy41MDE1Njc4LDQ4LjM3MTI1NCAtMy41MDE1Njc4LDQ4LjA2MjUgQyAtMy41MDE1Njc4LDQyLjI5MzA5MiAtOS45NzkzMzg4LDM3LjU5Mzc0OCAtMTcuOTg0MzI5LDM3LjU5Mzc1IEMgLTE4LjE3MTk0NiwzNy41OTM3NSAtMTguMzYyNjk2LDM3LjU4ODY1MiAtMTguNTQ4NTkyLDM3LjU5Mzc1IHogIgogICAgICAgaWQ9InBhdGg2MDE0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3Nzc3NzYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE1LDU3IEwgLTE1LDYxLjc5OTI0MyBDIC0xMC45MTIwNzksNjEuMTkxMzkgLTQuOTgwMzM4OSw1OC41Nzg4NzUgLTQsNTMgTCAtNCw0OCBMIC0xNSw1NyB6ICIKICAgICAgIGlkPSJwYXRoNjAxNiIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzRlOWEwNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIC0yMyw1Ny4zNjk4MjIgTCAtMjMsNjEuMzM3MjIzIEMgLTIxLjAyOTIyMiw2MS44ODUxMzcgLTE3LjU3MjgxNCw2Mi4zMDE5NzUgLTE1LDYxLjc2NDY1OCBMIC0xNSw1Ny43NjQ2NTggTCAtMjMsNTcuMzY5ODIyIHogIgogICAgICAgaWQ9InBhdGg2MDE4IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2NjU5NSwwLDAsMS4wNDI1MjgsMzUuMzMxNTMsMjMuNDM0MDYpIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTczODQ7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NjAzNik7c3Ryb2tlLXdpZHRoOjAuOTQ4MzIyNjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAtMzcuMzI4OTY0LDI3LjQ0Njg1IEMgLTM3LjMyODk2NCwzMi40NzU1OTQgLTQzLjAwMjk2NywzNi41NTY4OTQgLTQ5Ljk5NDE0OCwzNi41NTY4OTQgQyAtNTYuOTg1MzMsMzYuNTU2ODk0IC02Mi42NTkzMzIsMzIuNDc1NTk0IC02Mi42NTkzMzIsMjcuNDQ2ODUgQyAtNjIuNjU5MzMyLDI3LjIwNjAxNCAtNjIuNjQ2MzE4LDI1LjA0ODkzNyAtNjIuNjIwNzY4LDI0LjgxMjc5MSBDIC02Mi4xMTI4MzMsMjAuMTE4MTMgLTU2LjY1MDUwOSwxOC4zMzY4MDUgLTQ5Ljk5NDE0OCwxOC4zMzY4MDUgQyAtNDMuMzY5MTIsMTguMzM2ODA1IC0zNy45MjY5MTIsMjAuMDgzMzgyIC0zNy4zNzUwMjksMjQuNzQ2NTY0IEMgLTM3LjM0NDUyOCwyNS4wMDQyODkgLTM3LjMyODk2NCwyNy4xODM0NzcgLTM3LjMyODk2NCwyNy40NDY4NSB6ICIKICAgICAgIGlkPSJwYXRoNjAyMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3NzYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwMzgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZmY3MTcxO3N0cm9rZS13aWR0aDowLjk0ODMyMjY1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDYwMjIiCiAgICAgICBzb2RpcG9kaTpjeD0iLTQ5Ljk5NDE0OCIKICAgICAgIHNvZGlwb2RpOmN5PSIyNy40NDY4NSIKICAgICAgIHNvZGlwb2RpOnJ4PSIxMi42NjUxODQiCiAgICAgICBzb2RpcG9kaTpyeT0iOS4xMTAwNDQ1IgogICAgICAgZD0iTSAtMzcuMzI4OTY0IDI3LjQ0Njg1IEEgMTIuNjY1MTg0IDkuMTEwMDQ0NSAwIDEgMSAgLTYyLjY1OTMzMiwyNy40NDY4NSBBIDEyLjY2NTE4NCA5LjExMDA0NDUgMCAxIDEgIC0zNy4zMjg5NjQgMjcuNDQ2ODUgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY2NTk1LDAsMCwxLjA0MjUyOCwzNS4zMzE1MywxOS40MzQwNikiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE4LjAwNzg0Myw0Ny41MjU1NDUgTCAtNC44MzQ5MTE5LDQ0LjY0Mjk2OSBDIC0xLjY2MDI5ODIsNTEuNDQzMDI3IC04LjQ5MDk0OTcsNTcuMDk4MTI0IC0xNC45ODgwMjQsNTcuODIzMTI4IEwgLTE4LjAwNzg0Myw0Ny41MjU1NDUgeiAiCiAgICAgICBpZD0icGF0aDYwMjQiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDIpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE3Ljk2MzAxOCw0Ny41NTYyMTMgTCAtMjMuMDAxOTE5LDU3LjM4MTU0MSBDIC0yMC4zODA4Myw1OC4xMTcwMTEgLTE3Ljc4MTA1Niw1OC4xNjMwNzEgLTE0Ljk2MzAxOCw1Ny44MTUzMTkgTCAtMTcuOTYzMDE4LDQ3LjU1NjIxMyB6ICIKICAgICAgIGlkPSJwYXRoNjAyNiIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2NjU5NSwwLDAsMS4wNDI1MjgsMzUuMzMxNTMsMTkuNDM0MDYpIgogICAgICAgZD0iTSAtMzcuMzI4OTY0IDI3LjQ0Njg1IEEgMTIuNjY1MTg0IDkuMTEwMDQ0NSAwIDEgMSAgLTYyLjY1OTMzMiwyNy40NDY4NSBBIDEyLjY2NTE4NCA5LjExMDA0NDUgMCAxIDEgIC0zNy4zMjg5NjQgMjcuNDQ2ODUgeiIKICAgICAgIHNvZGlwb2RpOnJ5PSI5LjExMDA0NDUiCiAgICAgICBzb2RpcG9kaTpyeD0iMTIuNjY1MTg0IgogICAgICAgc29kaXBvZGk6Y3k9IjI3LjQ0Njg1IgogICAgICAgc29kaXBvZGk6Y3g9Ii00OS45OTQxNDgiCiAgICAgICBpZD0icGF0aDYwMjgiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjUxNDc2NzkzO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDQpO3N0cm9rZS13aWR0aDowLjk0ODMyMjY1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"gnumeric,numeric\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"gnumeric.desktop\"\nLABEL oc.launch=\"gnumeric.Gnumeric\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Gnumeric\"\nLABEL oc.displayname=\"Gnumerix (alpine)\"\nLABEL oc.path=\"/usr/bin/gnumeric\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-gnumeric;application/x-oleo;application/x-planperfect;application/x-sc;application/x-sylk;application/x-xbase;\"\nLABEL oc.fileextensions=\"gnm\"\nLABEL oc.legacyfileextensions=\"gnm\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gnumeric\"\nENV APPBIN \"/usr/bin/gnumeric\"\nENV APP \"/usr/bin/gnumeric\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gnumeric/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gnumeric/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gnumeric/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gnumeric/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends golly && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"golly.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUwOCA1MDgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwOCA1MDg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZEODQ2OTsiIGN4PSIyNTQiIGN5PSIyNTQiIHI9IjI1NCIvPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzMyNEE1RTsiIGQ9Ik0yNTQuOCwyNTMuNmwtODUuNiwxMy4yYy0yLDAuNC00LjQtMC40LTUuNi0ybC01NC40LTY3LjZjLTEuMi0xLjYtMS42LTQtMC44LTZsMzEuMi04MC44DQoJCWMwLjgtMiwyLjQtMy42LDQuOC0zLjZMMjMwLDkzLjJjMi0wLjQsNC40LDAuNCw1LjYsMmw1NC40LDY4YzEuMiwxLjYsMS42LDQsMC44LDZMMjU5LjYsMjUwQzI1OC44LDI1MS42LDI1Ni44LDI1My4yLDI1NC44LDI1My42eg0KCQkgTTE3MC44LDI1NC40bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYyTDE0OS42LDExOGwtMjguOCw3NC40TDE3MC44LDI1NC40eiIvPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiMzMjRBNUU7IiBkPSJNMjc3LjYsNDAxLjZMMTkyLDQxNC44Yy0yLDAuNC00LjQtMC40LTUuNi0ybC01NC02Ny42Yy0xLjItMS42LTEuNi00LTAuOC02bDMxLjItODAuOA0KCQljMC44LTIsMi40LTMuNiw0LjgtMy42bDg1LjYtMTMuMmMyLTAuNCw0LjQsMC40LDUuNiwybDU0LjQsNjcuNmMxLjIsMS42LDEuNiw0LDAuOCw2TDI4Mi40LDM5OEMyODEuNiw0MDAsMjgwLDQwMS42LDI3Ny42LDQwMS42eg0KCQkgTTE5My42LDQwMi44bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYybC03OC44LDEyLjRsLTI4LjgsNzQuNEwxOTMuNiw0MDIuOHoiLz4NCgk8cGF0aCBzdHlsZT0iZmlsbDojMzI0QTVFOyIgZD0iTTM5NC44LDMwNy42bC04NS42LDEzLjJjLTIsMC40LTQuNC0wLjQtNS42LTJsLTU0LjQtNjcuNmMtMS4yLTEuNi0xLjYtNC0wLjgtNmwzMS4yLTgwLjgNCgkJYzAuOC0yLDIuNC0zLjYsNC44LTMuNmw4NS42LTEzLjJjMi0wLjQsNC40LDAuNCw1LjYsMmw1NC40LDY3LjZjMS4yLDEuNiwxLjYsNCwwLjgsNkwzOTkuNiwzMDRDMzk4LjgsMzA2LDM5Ni44LDMwNy4yLDM5NC44LDMwNy42DQoJCXogTTMxMC44LDMwOC44bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYybC03OC44LDEyLjRsLTI4LjgsNzQuNEwzMTAuOCwzMDguOHoiLz4NCjwvZz4NCjxnPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIyODUuMiIgY3k9IjE2Ni44IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjM3MC44IiBjeT0iMTUzLjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iNDI1LjIiIGN5PSIyMjAuOCIgcj0iMjcuNiIvPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIzOTMuNiIgY3k9IjMwMC40IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjMwOCIgY3k9IjMxNS4yIiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjI1NCIgY3k9IjI0Ny42IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjE2OC40IiBjeT0iMjYwLjgiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTE0IiBjeT0iMTkzLjIiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTQ2IiBjeT0iMTE1LjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMjMzLjYiIGN5PSI5OC44IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjEzNi44IiBjeT0iMzQxLjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTkxLjIiIGN5PSI0MDkuMiIgcj0iMjcuNiIvPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIyNzYuNCIgY3k9IjM5Mi44IiByPSIyNy42Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"golly,golly\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"golly.Golly\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"Golly\"\nLABEL oc.displayname=\"Golly\"\nLABEL oc.path=\"/usr/games/golly\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Golly\"\nENV APPBIN \"/usr/games/golly\"\nENV APP \"/usr/games/golly\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/golly/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/golly/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/golly/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/golly/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gretl && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gretl.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwODhwdCIgaGVpZ2h0PSI4MjBwdCIgdmlld0JveD0iMCAwIDEwODggODIwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGw9IiNmZGZkZmQiIGQ9IiBNIDAuMDAgMC4wMCBMIDEwODguMDAgMC4wMCBMIDEwODguMDAgODIwLjAwIEwgMC4wMCA4MjAuMDAgTCAwLjAwIDAuMDAgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gNjExLjk5IDE5LjA3IEMgNjE5LjM4IDE5LjM5IDYyNS44NSAxNS40MCA2MzIuNDYgMTIuNzMgQyA2MzEuMzEgMTYuNjIgNjMwLjcwIDIwLjcwIDYzMS4yNiAyNC43NSBDIDYzNC4wNiAyNy41NCA2MzguNDEgMjcuMjcgNjQxLjYzIDI5LjMyIEMgNjQ0LjYwIDMxLjQxIDY0NS44MCAzNS40OCA2NDkuMzkgMzYuNzcgQyA2NTEuNDYgMzcuNjEgNjUzLjQwIDM1LjkyIDY1NS4yNiAzNS4yMiBDIDY1NS4wMCAzOC43MCA2NTMuODIgNDIuMTMgNjU0LjE5IDQ1LjYzIEMgNjU2LjQ2IDQ5LjgyIDY2MS40NiA1MS4yMCA2NjUuOTIgNTEuMTMgQyA2NzAuNzYgNTEuMzkgNjc1LjU5IDUxLjg0IDY4MC40NCA1MS45MCBDIDY4MC44MCA0OS43OCA2ODEuMTEgNDcuNjUgNjgxLjQ3IDQ1LjU0IEMgNjgzLjc0IDQ5LjM2IDY4NS41NCA1My40NCA2ODcuNjYgNTcuMzQgQyA2ODkuMzAgNTkuMzYgNjkxLjAwIDYxLjM0IDY5Mi4yMiA2My42NyBDIDY5MC4wNiA2My44MyA2ODcuOTIgNjMuOTkgNjg1Ljc5IDY0LjMxIEMgNjg3LjY4IDY5LjU1IDY4OS44NSA3NS4wNiA2ODguNjcgODAuNzMgQyA2ODcuODQgODQuMTUgNjg5LjExIDg3LjUxIDY5MC4wNSA5MC43NiBDIDY5NC4xMCA5MS44MSA2OTcuNzYgOTQuMTAgNzAxLjg2IDk0Ljg4IEMgNzA1LjM0IDkzLjcxIDcwOC4zNCA5MS4zNiA3MTEuOTEgOTAuNDIgQyA3MTQuNzEgODkuOTQgNzE3LjU2IDg5Ljk3IDcyMC40MCA4OS44NSBDIDcyMS40NCA4OC4xNCA3MjIuMzYgODYuMjYgNzI0LjA0IDg1LjA1IEMgNzI4LjkzIDgxLjMxIDczMi44MCA3Ni40NSA3MzcuNTIgNzIuNTAgQyA3MzkuODMgNzAuNzUgNzQxLjI0IDY4LjE4IDc0My4xMSA2Ni4wMiBDIDc0NC45NyA2NS4xMCA3NDcuMDggNjUuNzUgNzQ5LjA2IDY1Ljc4IEMgNzU5LjQ1IDY2LjE3IDc3MC4wMiA2Ni43MCA3NzkuOTggNzAuMDAgQyA3ODMuOTYgNzEuNDAgNzg4LjMyIDcwLjQzIDc5Mi4yOSA3MS43NCBDIDc5OC43OSA3NC43OCA4MDYuMTggNzQuMDUgODEzLjAyIDc1LjkwIEMgODE2LjUyIDc1Ljk2IDgxOC40MyA3OS4xOCA4MjAuNjkgODEuMzUgQyA4MjIuMTQgODMuMDUgODI0LjMwIDgzLjgwIDgyNi4xNyA4NC45MyBDIDgzNC45NSA5MS43MCA4NDAuMTggMTAxLjY5IDg0Ni4zMCAxMTAuNzEgQyA4NDguNzQgMTE1LjA3IDg1MS4yMiAxMTkuNDYgODUyLjc3IDEyNC4yNCBDIDg1NS45MCAxMzMuNzUgODYxLjMzIDE0Mi42MSA4NjIuMzEgMTUyLjczIEMgODYzLjgyIDE1Ny42MyA4NjYuMzQgMTYyLjM2IDg2OS44MSAxNjYuMTYgQyA4NzMuNjEgMTY5LjM0IDg3Ny45MiAxNzIuNDEgODc5LjgyIDE3Ny4xOSBDIDg4MS42MiAxODIuMjggODgwLjQ5IDE4Ny44MCA4ODEuOTMgMTkyLjk3IEMgODg0LjQ2IDE5My4wMCA4ODcuMDAgMTkzLjAxIDg4OS41NSAxOTMuMDMgQyA4OTAuMTYgMTk1LjY4IDg5MC44MyAxOTguNDAgODkyLjM4IDIwMC42OCBDIDg5NS42MyAyMDIuODIgODk5LjcxIDIwMi44MyA5MDMuNDIgMjAzLjYwIEMgOTA4LjU4IDIwNC4zNyA5MTMuNTggMjA1Ljg5IDkxOC41NCAyMDcuNDggQyA5MjEuMTYgMjA4LjIzIDkyMi4zNCAyMTAuOTkgOTI0LjU2IDIxMi4zOCBDIDkzMS4wNSAyMTYuNjkgOTM5LjA5IDIxNy45OSA5NDUuMzkgMjIyLjY1IEMgOTQ5LjYxIDIyNS43OCA5NTQuMTYgMjI4LjQ1IDk1OC4zMyAyMzEuNjcgQyA5NjEuMTQgMjMzLjc5IDk2NC43NCAyMzQuNDIgOTY3LjY4IDIzNi4zNCBDIDk3My4xNCAyMzkuODUgOTc5LjE4IDI0Mi4yNiA5ODUuMDAgMjQ1LjA4IEMgOTg3LjgwIDI0Ni43NiA5OTEuMDggMjQ1LjM1IDk5NC4xMiAyNDUuODMgQyA5OTYuNzAgMjQ1Ljc5IDk5OS4wNSAyNDYuOTAgMTAwMS4zMSAyNDguMDYgQyAxMDAwLjcyIDI1MC4yOSA5OTkuNDAgMjUyLjQxIDk5OS4zOSAyNTQuNzQgQyAxMDAwLjIyIDI1Ni42NCAxMDAxLjY3IDI1OC4xOCAxMDAyLjk2IDI1OS43OSBDIDEwMDEuODUgMjYxLjE3IDEwMDAuNjggMjYyLjUyIDk5OS45MCAyNjQuMTIgQyAxMDAwLjU3IDI2OC41MSAxMDA3LjU1IDI2OS4yMSAxMDA2Ljk3IDI3My45NiBDIDEwMDYuODYgMjc1LjcwIDEwMDYuNDYgMjc3LjQxIDEwMDYuMTYgMjc5LjEzIEMgMTAwOC42NyAyNzkuMjAgMTAxMS4xOCAyNzkuMTUgMTAxMy43MSAyNzkuMjEgQyAxMDEzLjkwIDI4My4zMyAxMDEzLjk5IDI4Ny40NiAxMDE0LjA5IDI5MS41OSBDIDEwMTcuMzggMjkzLjQ5IDEwMTkuNjIgMjk2LjU2IDEwMjEuNDIgMjk5Ljg0IEMgMTAxOS4xNCAyOTkuNTAgMTAxNi44NyAyOTkuMTQgMTAxNC42MCAyOTguOTAgQyAxMDE1Ljk1IDMwNS4zMiAxMDIwLjUzIDMxMC40NCAxMDIyLjM3IDMxNi42OSBDIDEwMjUuNTIgMzI0LjQ2IDEwMjkuMzUgMzMyLjAyIDEwMzQuODEgMzM4LjQ1IEMgMTAzMS4zNCAzMzguMzcgMTAyNy44OCAzMzguNzUgMTAyNC43MCAzNDAuMjQgQyAxMDI3LjY3IDM0OC4zNyAxMDMxLjE2IDM1Ni4zMyAxMDMzLjI3IDM2NC43NCBDIDEwMzcuMzAgMzc2Ljg3IDEwMzcuNzYgMzg5Ljc2IDEwNDAuOTIgNDAyLjA5IEMgMTA0Mi40OSA0MDkuMzIgMTA0NC45MSA0MTYuNTMgMTA0NC43MyA0MjQuMDEgQyAxMDQ1LjEwIDQyNy4wOSAxMDQ2LjgyIDQyOS44NyAxMDQ2Ljk1IDQzMy4wMSBDIDEwNDcuMjcgNDM5LjAzIDEwNDYuMzggNDQ1LjE3IDEwNDcuODkgNDUxLjEwIEMgMTA0OS4yMCA0NTYuNDYgMTA0OS41MCA0NjIuMDEgMTA1MC43MyA0NjcuMzggQyAxMDUzLjcwIDQ3NC41MCAxMDUyLjk4IDQ4Mi4zNCAxMDU0LjAwIDQ4OS44MyBDIDEwNTQuMTAgNDk2LjQ2IDEwNTYuNTUgNTAyLjcwIDEwNTcuODggNTA5LjEzIEMgMTA1OC42OSA1MTIuOTUgMTA1OC41NSA1MTYuODYgMTA1OC43OCA1MjAuNzQgQyAxMDU4LjkxIDUyNC42NCAxMDYwLjg1IDUyOC4zNCAxMDYwLjI1IDUzMi4zMCBDIDEwNTkuMzYgNTM3LjkwIDEwNjMuMjggNTQzLjc5IDEwNTkuOTIgNTQ4Ljk4IEMgMTA2MC43MyA1NDkuODYgMTA2MS41OSA1NTAuNzIgMTA2Mi4zNyA1NTEuNjcgQyAxMDYyLjMwIDU1My40NiAxMDYxLjc3IDU1NS4yMCAxMDYxLjY5IDU1Ny4wMCBDIDEwNjIuMDcgNTU5Ljk0IDEwNjMuNTEgNTYzLjA3IDEwNjIuMDIgNTY1Ljk1IEMgMTA1OS42OSA1NzEuMzQgMTA2MS43MSA1NzcuMjAgMTA2Mi4zNSA1ODIuNzMgQyAxMDYzLjQyIDU4Ny40NiAxMDYxLjY2IDU5Mi4xOSAxMDYxLjk5IDU5Ni45NyBDIDEwNjIuMjAgNjAyLjMzIDEwNjEuODEgNjA3LjY4IDEwNjEuMTMgNjEzLjAwIEMgMTA2MS4xNSA2MTkuNjQgMTA1OS4yNyA2MjYuMjEgMTA2MC4xOSA2MzIuODYgQyAxMDYwLjcyIDYzNi4zMSAxMDYxLjQyIDYzOS43NiAxMDYxLjMyIDY0My4yOCBDIDEwNjEuMDcgNjQ2LjE4IDEwNjQuMDggNjQ4LjEwIDEwNjMuOTYgNjUxLjAwIEMgMTA2NC4yMyA2NTYuOTkgMTA2My43NyA2NjMuMDEgMTA2NC4wMyA2NjkuMDEgQyAxMDY0LjEzIDY3Mi4yMSAxMDY2LjE3IDY3NC44NyAxMDY3LjEyIDY3Ny44NSBDIDEwNjguNDIgNjgxLjA5IDEwNjcuNzkgNjg0LjYzIDEwNjcuOTggNjg4LjAzIEMgMTA2OC4wMyA2OTEuNDEgMTA2OS4zNSA2OTQuNTkgMTA3MC4yNCA2OTcuODIgQyAxMDY2LjQ3IDcwMC4wMiAxMDYyLjc1IDcwMi43MyAxMDU4LjMwIDcwMy4yNiBDIDEwNTUuMTIgNzAzLjkzIDEwNTEuNTkgNzAzLjgwIDEwNDguOTYgNzA2LjAwIEMgMTA0NS40NyA3MDguNjQgMTA0MS41NiA3MTAuNjIgMTAzNy43NSA3MTIuNzQgQyAxMDM1LjE4IDcxNS4zMSAxMDMzLjAzIDcxOC4yOCAxMDMwLjg5IDcyMS4yMiBDIDEwMjguOTIgNzIzLjY5IDEwMzEuMTMgNzI2Ljc4IDEwMzEuNDkgNzI5LjQ2IEMgMTAzMi40NyA3MzUuNzIgMTAzMi45MyA3NDIuNDUgMTAzMC41MCA3NDguNDcgQyAxMDI5LjY2IDc1MS40OSAxMDMwLjAxIDc1NC42OCAxMDI5Ljk0IDc1Ny43OSBDIDEwMjUuNDYgNzYxLjQxIDEwMjEuMTggNzY1LjQ3IDEwMTUuODUgNzY3Ljg1IEMgMTAxMi45NCA3NjkuMTYgMTAwOS42MSA3NjguNjYgMTAwNi42NSA3NjkuNjcgQyAxMDAwLjE3IDc3My41MSA5OTIuMjUgNzcyLjkyIDk4NS4wMCA3NzMuMDEgQyA5NzguMDYgNzczLjIyIDk3MC45NiA3NzIuMjAgOTY0LjIwIDc3NC4xOSBDIDk1Ni4yMSA3NzYuNDcgOTQ4LjA4IDc3My42OCA5NDAuMDEgNzczLjk3IEMgOTMyLjc1IDc3My44OCA5MjUuMzYgNzc0LjY2IDkxOC4yNiA3NzIuNzUgQyA5MTEuMTEgNzcwLjgxIDkwMy4wNyA3NzMuODYgODk2LjUyIDc2OS41NCBDIDg5MC4yNiA3NjcuMjcgODg1Ljg4IDc2Mi4xMyA4ODAuMzggNzU4LjYyIEMgODc2LjU0IDc1Ni4yMSA4NzMuNDggNzUyLjc1IDg2OS41MiA3NTAuNTMgQyA4NjIuODYgNzQ3LjYyIDg2MC41MCA3NDAuMTUgODU2LjAyIDczNC45OCBDIDg1NC43OSA3MzIuNjkgODUxLjU4IDczMS4wNiA4NTIuMDQgNzI4LjIxIEMgODUzLjQyIDcyNS4xMiA4NTUuNjEgNzIxLjg0IDg1OS4xNCA3MjEuMDYgQyA4NjEuMjggNzIxLjE2IDg2My40MiA3MjEuNzEgODY1LjQyIDcyMi41NCBDIDg2OC41NyA3MjQuMzcgODcwLjg3IDcyOC40MyA4NzQuOTggNzI4LjAxIEMgODgxLjE5IDcyNy4zMiA4ODcuMzkgNzI2LjQ2IDg5My41OSA3MjUuNjYgQyA4OTYuNTkgNzIxLjQ0IDg5OS4zNCA3MTYuNDQgODk5LjUxIDcxMS4xMCBDIDg5OS4xNCA3MDguNzQgODk2LjY1IDcwNy43MyA4OTUuMDAgNzA2LjM5IEMgODk1LjA2IDcwNC4wMSA4OTQuNjEgNzAxLjYzIDg5Mi40OSA3MDAuMjMgQyA4ODYuMDUgNjk4LjU3IDg4MC4zOSA3MDMuNTYgODczLjk4IDcwMy4xMCBDIDg3MS4wMyA3MDMuNjEgODY5LjE3IDcwMS4wMyA4NjYuNzYgNjk5Ljk2IEMgODY0LjA0IDY5OS43MSA4NjEuNjcgNzAxLjMxIDg1OS4yMyA3MDIuMjAgQyA4NTIuNDMgNzA0LjY5IDg0NC43NyA3MDYuNDAgODM3Ljc2IDcwMy43MiBDIDgzMi40OSA3MDQuNzkgODI1LjYzIDcwNy4wNCA4MjEuMzIgNzAyLjY2IEMgODE4LjE3IDY5OS42MiA4MTMuMzQgNzAxLjkxIDgwOS41OCA3MDAuMzggQyA4MDYuMDIgNjk5LjM5IDgwMy40NyA2OTUuMTQgNzk5LjQxIDY5Ni4zOSBDIDc5NS4yOSA2OTcuMzQgNzkxLjE1IDY5Ni4wOSA3ODcuMjkgNjk0Ljc1IEMgNzg0LjA3IDY5My41MSA3ODAuMjYgNjk0LjY5IDc3Ny4zMiA2OTIuNjcgQyA3NzQuMTUgNjkwLjI1IDc3MC4wMiA2OTEuMDkgNzY2LjMzIDY5MC45MyBDIDc2NS4yMCA2ODkuMzQgNzY0LjA3IDY4Ny43NyA3NjIuOTAgNjg2LjIzIEMgNzU5LjAyIDY4Ni4yMSA3NTUuMTQgNjg1Ljk2IDc1MS4yNyA2ODUuOTUgQyA3NTAuNDEgNjg0LjYzIDc0OS41NiA2ODMuMzIgNzQ4LjcxIDY4Mi4wMiBDIDc0NC4yMiA2ODEuNzEgNzM4LjcxIDY4My4yNyA3MzUuMTcgNjc5LjcxIEMgNzM0LjU0IDY3NC4zOSA3MzUuMzggNjY5LjA0IDczNS4yMiA2NjMuNzEgQyA3MzUuMDMgNjU4LjUzIDczNy42MCA2NTMuODQgNzM5LjA1IDY0OS4wMSBDIDc0MC4zMSA2NDQuOTQgNzQzLjQ5IDY0MS44MCA3NDQuODEgNjM3Ljc5IEMgNzQ1LjI4IDYzMy4xOSA3NDQuOTMgNjI4LjU1IDc0NS4wNCA2MjMuOTQgQyA3NDQuOTAgNjIxLjk5IDc0NS4zMiA2MTkuNzIgNzQzLjkwIDYxOC4xNSBDIDc0MS42OCA2MTUuMDggNzM5Ljc1IDYxMS41NiA3MzYuMjEgNjA5LjgxIEMgNzMxLjIyIDYwNy4yMCA3MjcuMDkgNjAzLjM0IDcyMi42NSA1OTkuOTQgQyA3MjYuNTEgNTk1LjY5IDczMC44MCA1OTEuODcgNzM1LjEyIDU4OC4xMSBDIDczOS4wNCA1ODEuNzUgNzQxLjM5IDU3NC41NiA3NDMuMjkgNTY3LjM3IEMgNzQ0LjE0IDU2NC42MiA3NDIuMzAgNTYxLjUzIDc0My44OSA1NTguOTcgQyA3NDYuMzEgNTU0LjYwIDc0OC4yOSA1NDkuODkgNzQ4Ljg4IDU0NC44OSBDIDc0OS4zMiA1NDIuMDIgNzQ4Ljk3IDUzOC45OCA3NTAuMjAgNTM2LjI3IEMgNzUyLjczIDUyOS45MyA3NTQuNDYgNTIzLjI5IDc1NS41OSA1MTYuNTYgQyA3NTYuMTIgNTEzLjQ1IDc1My44OSA1MTAuMzkgNzU1LjI1IDUwNy4zMyBDIDc1Ny42NCA1MDEuODMgNzU5Ljk0IDQ5Ni4xMSA3NjAuMDYgNDkwLjAxIEMgNzYwLjExIDQ4NS40OCA3NjIuMDkgNDgxLjA2IDc2MS4yMSA0NzYuNTIgQyA3NjAuNzMgNDczLjkwIDc2MS41MCA0NzEuMjggNzYxLjc2IDQ2OC42OSBDIDc2MS44MSA0NjUuNDUgNzY2LjAyIDQ2NC4yMCA3NjUuOTUgNDYwLjk0IEMgNzY2LjM3IDQ1Mi4yNyA3NjQuOTYgNDQzLjM5IDc2Ny43MiA0MzQuOTcgQyA3NjguMDEgNDMxLjIzIDc3MS4wMSA0MjguNzUgNzcyLjU5IDQyNS42MCBDIDc3NC4xOSA0MjEuMjEgNzczLjc0IDQxNi40MyA3NzQuOTggNDExLjk3IEMgNzc3Ljk2IDQwMS4wMiA3ODMuMDAgMzkwLjgxIDc4Ny42MiAzODAuNTAgQyA3ODkuMDggMzc3LjMyIDc4Ni4yOCAzNzQuNTYgNzg1LjIzIDM3MS43NyBDIDc4NS4zNCAzNjkuNDQgNzg2LjM5IDM2Ny4zMCA3ODcuMDcgMzY1LjExIEMgNzg5LjMzIDM1OS4wNyA3OTAuNzEgMzUyLjY0IDc5NC4wNSAzNDcuMDUgQyA3OTcuMjUgMzQxLjYyIDgwMC44MCAzMzYuMzQgODAzLjA2IDMzMC40MiBDIDgwNC44NSAzMjUuMzcgODA4LjExIDMyMS4wMiA4MTAuMDAgMzE2LjAyIEMgODExLjQzIDMxMi45MSA4MTEuNzMgMzA5LjQwIDgxMy4yOSAzMDYuMzYgQyA4MTUuNTAgMzA0LjMyIDgxOC4zMCAzMDMuMDUgODIwLjY0IDMwMS4xNyBDIDgxOC40MCAyOTguNjQgODE1Ljg2IDI5Ni4zNiA4MTIuNzUgMjk0Ljk3IEMgODEyLjkxIDI5OC4wOSA4MTIuODUgMzAyLjYyIDgwOS40MyAzMDMuOTcgQyA4MDUuNDIgMzA0LjQ1IDgwMS4zNCAzMDMuNDMgNzk3LjM1IDMwNC4xOSBDIDc5NC45MCAzMDUuNjggNzk0Ljg3IDMwOC43OCA3OTQuMjQgMzExLjI1IEMgNzkzLjU2IDMxNS4xOSA3OTIuMjQgMzE4Ljk5IDc5MC42MCAzMjIuNjMgQyA3ODkuMjQgMzI1LjcyIDc4Ni41MiAzMjcuODYgNzg0LjQ4IDMzMC40NyBDIDc3OS4zMSAzMzYuOTMgNzcyLjMzIDM0MS44NyA3NjguMDIgMzQ5LjAzIEMgNzY1Ljk3IDM1Mi40NiA3NjYuMTggMzU2LjczIDc2NC4wNyAzNjAuMTQgQyA3NjEuOTQgMzYzLjY1IDc1OC41MyAzNjcuMzEgNzU0LjA1IDM2Ny4wNSBDIDc0Ny4yNSAzNjcuMTQgNzQyLjgxIDM2MC44MyA3MzYuNDMgMzU5LjQ5IEMgNzMzLjYzIDM1OC40NyA3MzAuNzUgMzU5LjU5IDcyOC4wMSAzNjAuMTkgQyA3MjcuOTIgMzY0LjE0IDcyNy44NSAzNjguMTcgNzI5LjAxIDM3Mi4wMSBDIDczMC4zMSAzNzYuNDEgNzMwLjU1IDM4MS42OCA3MjcuNTYgMzg1LjQ5IEMgNzIzLjM0IDM4Ny40NSA3MTkuNjUgMzkwLjI2IDcxNS42NCAzOTIuNTggQyA3MDkuMzAgMzk0Ljk4IDcwNC4xMCAzOTkuOTEgNzAwLjcwIDQwNS43MCBDIDY5Ny43NyA0MTEuOTMgNzAwLjQ3IDQxOC41MCA3MDEuMjIgNDI0Ljg2IEMgNjk3LjY1IDQyMi44OCA2OTMuNzggNDIxLjU4IDY5MC4xMiA0MTkuNzkgQyA2ODguNDIgNDE4Ljg5IDY4Ni4zNCA0MTguNTkgNjg0LjU4IDQxOS40OCBDIDY4My40MyA0MjIuODYgNjg0LjAyIDQyNi41MCA2ODMuOTYgNDMwLjAwIEMgNjg0LjE4IDQzNy4yOCA2ODMuNjggNDQ0LjU4IDY4NC4yMiA0NTEuODUgQyA2ODUuMzAgNDU4LjAyIDY4NC45MCA0NjQuMjkgNjg1LjM0IDQ3MC41MiBDIDY4NS43MiA0NzUuNDAgNjg0LjM4IDQ4MC4zMyA2ODUuNjUgNDg1LjE2IEMgNjg2LjYzIDQ4OC43OCA2ODQuODEgNDkyLjM0IDY4NC45OSA0OTUuOTcgQyA2ODUuMDQgNDk4LjA4IDY4Ni4wMyA0OTkuOTkgNjg2LjQ0IDUwMi4wNCBDIDY4Ny4wMiA1MDcuMTMgNjg1LjQ2IDUxMi4yNCA2ODYuNjMgNTE3LjMwIEMgNjg3Ljg4IDUyNC4xMCA2ODguMDAgNTMwLjk4IDY4OC4yNSA1MzcuODYgQyA2ODkuNDUgNTQzLjI0IDY4Ny41MSA1NDguNjEgNjg3Ljk4IDU1NC4wMyBDIDY4Ny45OSA1NTcuMTIgNjg5LjYzIDU1OS45OCA2ODkuNDcgNTYzLjA3IEMgNjg5LjA3IDU2OC40OCA2OTAuMzAgNTczLjk0IDY4OC45NSA1NzkuMjggQyA2ODkuNjIgNTc4LjM4IDY5MC4zMSA1NzcuNDkgNjkxLjAxIDU3Ni42MSBDIDY4OS45NSA1ODIuMjkgNjkxLjYzIDU4OC4wMyA2OTAuNzAgNTkzLjczIEMgNjg5LjU0IDYwMC4wOSA2OTAuMTIgNjA2LjU3IDY5MC4xMiA2MTIuOTkgQyA2OTAuNDcgNjIxLjc1IDY4OS4xMSA2MzAuNjEgNjkwLjc3IDYzOS4zMCBDIDY5MS4zOSA2NDIuNjIgNjg5Ljc2IDY0NS45MyA2OTAuNjcgNjQ5LjI0IEMgNjkyLjAxIDY1NS42MyA2OTMuMTMgNjYyLjA3IDY5My41NiA2NjguNjAgQyA2OTQuMTAgNjczLjI4IDY5My44MCA2NzguNDMgNjk2LjY3IDY4Mi40NSBDIDY5OC4xNCA2ODQuNDMgNjk3LjUyIDY4Ny4wMiA2OTcuOTcgNjg5LjI5IEMgNjk4LjEzIDY5Mi4xNyA3MDAuOTUgNjk0LjA5IDcwMC45NiA2OTcuMDAgQyA3MDEuMTUgNzAwLjMxIDcwMS4wMCA3MDMuNjQgNzAwLjk3IDcwNi45NiBDIDY5Ni42NiA3MDcuMzMgNjkyLjI2IDcwNy40NSA2ODguMTUgNzA1Ljg3IEMgNjg0LjUwIDcwNS4xMiA2ODMuMjAgNzAxLjIzIDY4MS45MSA2OTguMjEgQyA2ODAuMDEgNjkxLjA1IDY4MC4yMCA2ODMuNTggNjc5LjY2IDY3Ni4yNiBDIDY3Ny41MSA2NjkuODAgNjc4LjI0IDY2Mi45MyA2NzYuOTUgNjU2LjMxIEMgNjc2LjY3IDY0OC41NSA2NzcuMzQgNjQwLjc3IDY3Ni45MSA2MzMuMDEgQyA2NzYuNTUgNjI5LjUxIDY3NC45NyA2MjYuMjUgNjc0Ljc2IDYyMi43MiBDIDY3NC4zNCA2MjAuMTcgNjc2LjEyIDYxNy44NCA2NzUuNzAgNjE1LjI5IEMgNjc0LjY3IDYwOC41NSA2NzIuNjIgNjAxLjg5IDY3My4wMCA1OTUuMDAgQyA2NzMuMzMgNTg5LjIwIDY3MS43MyA1ODMuNTcgNjcxLjI2IDU3Ny44NCBDIDY3MS40NyA1NzMuNjIgNjcyLjMzIDU2OS4zOSA2NzEuNDcgNTY1LjE4IEMgNjcxLjg1IDU2NS4zMCA2NzIuNjAgNTY1LjUzIDY3Mi45NyA1NjUuNjUgQyA2NzMuMDAgNTY1LjA4IDY3My4wNSA1NjMuOTUgNjczLjA3IDU2My4zOCBDIDY3Mi41NyA1NjMuNDggNjcxLjU3IDU2My42NyA2NzEuMDcgNTYzLjc3IEMgNjcyLjU2IDU1Ni45MiA2NzEuOTIgNTQ5Ljg5IDY3Mi4yMSA1NDIuOTYgQyA2NzEuNDQgNTM1LjY0IDY3Mi40MCA1MjguMzAgNjcyLjMxIDUyMC45OCBDIDY3Mi40OSA1MTguNjYgNjcxLjMzIDUxNi42NSA2NzAuMTkgNTE0Ljc0IEMgNjcyLjcyIDUxMC4xMyA2NzAuNTYgNTA0Ljk3IDY2OS4xMSA1MDAuMzkgQyA2NjguMDUgNDkzLjc5IDY2Ny45NCA0ODcuMDkgNjY3LjgyIDQ4MC40MiBDIDY2Ny43OCA0NzYuNDQgNjY2LjMzIDQ3Mi43MCA2NjUuNTkgNDY4Ljg0IEMgNjY1LjQ0IDQ2Mi4xOSA2NjQuMjkgNDU1LjYwIDY2My4wMSA0NDkuMDkgQyA2NjEuMDUgNDQ4LjcxIDY1OS4xMyA0NDguMTUgNjU3LjE0IDQ0OC4wMyBDIDY1My44NCA0NDguOTMgNjUxLjk1IDQ1Mi4wMiA2NDkuODAgNDU0LjQyIEMgNjQ4Ljc1IDQ0Ni42NCA2NDguNjQgNDM4LjQxIDY0NC41OCA0MzEuNDIgQyA2NDIuMjMgNDI4LjA5IDYzOC4yOSA0MjUuODkgNjM2Ljk5IDQyMS44NyBDIDYzNy4yMiA0MTcuMzcgNjM5Ljg2IDQxMy41MCA2NDEuMzEgNDA5LjM0IEMgNjQzLjUxIDQwMi43OSA2NDMuMTEgMzk1Ljc4IDY0Mi45MCAzODguOTggQyA2NDIuOTAgMzg2LjI0IDY0MS42OCAzODMuMTEgNjQzLjY3IDM4MC43NiBDIDY0OS4xOSAzNzIuNDMgNjU5LjkyIDM3MC4zNyA2NjkuMTUgMzY5LjI1IEMgNjc3Ljk4IDM2OS40MSA2ODYuNjIgMzY2LjY0IDY5NC4xOSAzNjIuMjEgQyA2OTcuNzcgMzYwLjQzIDY5OC41NiAzNTQuMDggNjk0LjUyIDM1Mi40NiBDIDY4OS40NiAzNTAuMTIgNjgzLjc2IDM1MC4zNCA2NzguMzcgMzQ5LjYxIEMgNjczLjI1IDM0OC44NCA2NzEuMjIgMzQzLjEzIDY2Ni42NiAzNDEuMjkgQyA2NjQuNTIgMzQxLjA4IDY2Mi40MiAzNDEuNzcgNjYwLjMyIDM0Mi4wNCBDIDY1OS4xMCAzMzkuOTEgNjU4LjQzIDMzNi45NyA2NTUuNzcgMzM2LjIxIEMgNjUyLjExIDMzNC44NSA2NDguMjIgMzM0LjI1IDY0NC40MSAzMzMuNDcgQyA2MzYuNzkgMzMxLjYyIDYyOS44OSAzMzcuMzUgNjIyLjI1IDMzNi4zMiBDIDYxOC4wOSAzMzQuNTMgNjE1LjcxIDMzMC4wOCA2MTEuMzAgMzI4Ljc1IEMgNjA3Ljc3IDMyNy43NyA2MDQuMTEgMzI3LjQwIDYwMC41OCAzMjYuNDUgQyA1OTUuNDggMzI1LjQ5IDU5MC43OSAzMjMuMDMgNTg1LjYxIDMyMi40MiBDIDU3NS44OSAzMjEuMTYgNTY2LjA5IDMyMC41NiA1NTYuMzQgMzE5LjcyIEMgNTUzLjg4IDMxNy45MyA1NTMuMDIgMzE0Ljg0IDU1MS43NyAzMTIuMjIgQyA1NDkuNzMgMzA3LjIzIDU0Ni44NiAzMDIuNjQgNTQzLjY3IDI5OC4zMyBDIDUzOS44MSAyOTMuODUgNTM1LjAyIDI5MC4yMiA1MzEuNTkgMjg1LjM2IEMgNTI5LjY3IDI4Mi42MiA1MjYuNjggMjgwLjcyIDUyNS4yNiAyNzcuNjQgQyA1MjUuMzkgMjY1LjE0IDUyOS41NSAyNTMuMjQgNTMyLjE5IDI0MS4xNCBDIDUzMi44OCAyMzcuOTkgNTM1LjMzIDIzNS4zNyA1MzguNDQgMjM0LjQ5IEMgNTQ0LjM1IDIzMi44MSA1NDkuNTUgMjI5LjQyIDU1NS4yOCAyMjcuMjggQyA1NjAuMjEgMjI1LjQyIDU2NC4xMiAyMjEuNzcgNTY4Ljg1IDIxOS41NSBDIDU2OC45MyAyMjEuMDAgNTY5LjAxIDIyMi40NiA1NjkuMDkgMjIzLjkyIEMgNTY1LjA2IDIyNy4zNCA1NjEuNzMgMjMxLjU2IDU1Ny4xOSAyMzQuMzkgQyA1NTMuMTAgMjM3LjgwIDU0Ny4yMyAyMzguODAgNTQ0LjE5IDI0My40NiBDIDU0Mi43NCAyNDcuNTUgNTQ2Ljc1IDI1MC4zNiA1NDguODkgMjUzLjI0IEMgNTQ2Ljg4IDI1Ni4yNyA1NDQuMTggMjU5LjIwIDU0NC4wMCAyNjMuMDIgQyA1NDMuODAgMjY1LjI3IDU0My40MSAyNjcuNTIgNTQzLjQ5IDI2OS43OSBDIDU0NC40NCAyNzMuNzIgNTQ5LjAxIDI3NS43NyA1NTIuNzcgMjc0Ljk0IEMgNTU0LjMxIDI3NC44MSA1NTUuMjYgMjczLjM5IDU1NS40NiAyNzEuOTggQyA1NTYuNDUgMjY2LjkzIDU1OC45MyAyNjIuMzcgNTYwLjU2IDI1Ny41MiBDIDU2MS41NCAyNTQuOTYgNTYzLjQ2IDI1MS4yMCA1NjYuNzggMjUyLjA2IEMgNTcxLjMxIDI1My44NiA1NzUuMzQgMjU2Ljc5IDU3OC43NyAyNjAuMjMgQyA1ODAuNjggMjYyLjYwIDU4NC42MSAyNjIuNzQgNTg2LjkyIDI2MC45NCBDIDU4OC45MSAyNTguODYgNTkwLjQ4IDI1Ni40MSA1OTIuNDkgMjU0LjMzIEMgNTkzLjQ1IDI1Ny4zNyA1OTQuNTMgMjYwLjY1IDU5My4zMCAyNjMuNzkgQyA1OTEuNjYgMjY4LjI0IDU5MS4wMyAyNzMuNzkgNTk0LjI5IDI3Ny42OCBDIDU5OC42NCAyODIuMzUgNjAyLjY2IDI4Ny4zMCA2MDcuMTUgMjkxLjg1IEMgNjExLjU3IDI5Ni40MiA2MTQuODcgMzAyLjI2IDYyMC41MSAzMDUuNDkgQyA2MjYuNjEgMzA4LjQ3IDYzMy4yMyAzMTAuNTMgNjQwLjAzIDMxMC45NiBDIDY0NS41OSAzMTEuMTcgNjUxLjE1IDMxMi43NyA2NTYuNzIgMzExLjc0IEMgNjU5LjUwIDMxMC4zNSA2NTYuOTggMzA3LjU2IDY1NS43NSAzMDYuMDMgQyA2NTUuMDAgMzA3LjQ1IDY1NC4yNCAzMDguODcgNjUzLjQ1IDMxMC4yNyBDIDY1My4xMCAzMDguMzEgNjUyLjc5IDMwNi4zNSA2NTIuNDMgMzA0LjM5IEMgNjU1Ljk2IDMwMy42MiA2NTkuMDkgMzAxLjc0IDY2Mi40NCAzMDAuNDcgQyA2NjYuNDIgMjk5LjY2IDY3MC42NSAzMDAuMTkgNjc0LjQ3IDI5OC41OCBDIDY3Ni45NCAyOTYuMDEgNjc5LjUxIDI5MS44OSA2ODMuNzIgMjkzLjE2IEMgNjk2LjA2IDI5Ni4yOCA3MDcuOTYgMzAxLjU2IDcyMC44MyAzMDIuMTkgQyA3MjIuMjMgMjk5LjIyIDcyMi45MyAyOTUuNjcgNzI1LjM1IDI5My4zNCBDIDcyOS44MCAyOTMuMzAgNzM0LjU2IDI5Mi4xMyA3MzYuODIgMjg3Ljg4IEMgNzM5LjAwIDI4Mi41NCA3NDIuMDYgMjc3LjY0IDc0NC43NSAyNzIuNTYgQyA3NDYuMTQgMjY3Ljg0IDc0MC45OSAyNjQuNTUgNzQwLjQzIDI2MC4wNiBDIDczNy40NCAyNjAuMDIgNzM0LjQ2IDI1OS45OSA3MzEuNDggMjU5Ljk2IEMgNzMwLjc2IDI1Ny43NiA3MzAuNzEgMjU0LjcyIDcyOC4zMiAyNTMuNjAgQyA3MjUuNDcgMjUyLjE2IDcyMi4xMSAyNTMuMjQgNzE5LjM0IDI1NC4zMiBDIDcxNi4zOSAyNTUuMTkgNzE2LjEyIDI1OC42NiA3MTQuODkgMjYxLjAxIEMgNzEyLjgwIDI1OS44OCA3MTAuNjggMjU4LjgwIDcwOC42MCAyNTcuNzAgQyA3MDguNTMgMjUyLjg2IDcxNC45MiAyNTEuMDMgNzE0LjA4IDI0Ni4xMSBDIDcxNC4zNiAyNDQuMDkgNzEyLjQ4IDI0Mi45MiA3MTEuMDcgMjQxLjkyIEMgNzA4LjM2IDIzOS45MiA3MDQuODggMjM5LjkxIDcwMS43NCAyMzkuMTQgQyA2OTguMTUgMjQyLjc1IDY5OS4yNCAyNDguMTIgNjk3LjU4IDI1Mi41NiBDIDY5Ni41MiAyNTUuMjcgNjk1LjQ2IDI1OC4xOSA2OTMuMjIgMjYwLjE3IEMgNjg5LjczIDI2Mi42NyA2ODkuMjIgMjY3LjY1IDY4NS4wMiAyNjkuNDMgQyA2ODYuMDkgMjY2LjUzIDY4Ny41NiAyNjMuNzggNjg4LjU0IDI2MC44NSBDIDY4OS45NSAyNTMuMzUgNjg3LjUzIDI0NS45NiA2ODYuNDIgMjM4LjU5IEMgNjg1Ljk0IDIzNC40NiA2ODIuNjMgMjMxLjY3IDY4MC4wOCAyMjguNzAgQyA2NzUuODcgMjMwLjQ5IDY3MS4wNCAyMzAuNTIgNjY3LjE2IDIzMy4xMCBDIDY2MS43MSAyMzYuMzEgNjU3Ljk4IDI0MS42MSA2NTIuOTggMjQ1LjQwIEMgNjU2Ljc0IDIzOS41NCA2NjEuNDcgMjMzLjk4IDY2My4wMiAyMjcuMDEgQyA2NjQuMzQgMjIyLjY1IDY2NS4zNCAyMTcuOTMgNjY4LjI4IDIxNC4zMSBDIDY3MS45NiAyMTAuNTggNjc1Ljk4IDIwNy4xNyA2ODAuMDUgMjAzLjg2IEMgNjgwLjAxIDIwMS45OCA2ODAuMDAgMjAwLjEwIDY4MC4wMCAxOTguMjIgQyA2NzYuMTggMTk1LjYwIDY3Mi42NCAxOTIuNTIgNjY4LjU3IDE5MC4zMCBDIDY2NC41NCAxODkuMzYgNjYwLjIzIDE5MC45MCA2NTYuNjYgMTkyLjczIEMgNjU0Ljc1IDE5Ni43MyA2NTUuNjcgMjAxLjUyIDY1My40MiAyMDUuMzggQyA2NTEuNzggMjA4LjI0IDY1MC42MiAyMTIuMzAgNjQ2LjgyIDIxMi43OCBDIDY0My41MSAyMTMuOTMgNjM5LjExIDIxMy42MyA2MzcuMTIgMjE3LjA1IEMgNjMzLjk4IDIyMS43MCA2MjkuMTIgMjI0LjYyIDYyNC4zMiAyMjcuMjkgQyA2MjEuMzAgMjI4Ljg0IDYxOS4yNCAyMzEuNjUgNjE2LjQ5IDIzMy41NyBDIDYxMy41MCAyMzUuMDEgNjA5LjI1IDIzNC45MyA2MDguMDIgMjM4LjY2IEMgNjA0LjMyIDIzOC44NiA2MDAuNzggMjM5LjkwIDU5Ny4zOCAyNDEuMzEgQyA1OTYuMjMgMjM4Ljg4IDU5NC43MSAyMzYuNTkgNTkzLjk4IDIzMy45OSBDIDU5NS4wNCAyMjkuOTIgNTk4LjQxIDIyNS45MyA1OTYuNjQgMjIxLjU1IEMgNTk0LjgwIDIxOS4yMiA1OTIuNjcgMjE3LjA5IDU5MS40MSAyMTQuMzYgQyA1OTUuOTAgMjEyLjg0IDYwMC41OCAyMTEuODIgNjA0LjkzIDIwOS45MSBDIDYwNy43NyAyMDguMTIgNjEwLjM1IDIwNS44OCA2MTIuNjkgMjAzLjQ4IEMgNjEzLjIzIDIwMS44MyA2MTMuMTQgMjAwLjA0IDYxMi45MSAxOTguMzQgQyA2MTAuOTQgMTk1Ljg0IDYwNy40OSAxOTUuNDYgNjA0LjY4IDE5Ni42MyBDIDU5OS45NyAxOTcuODcgNTk0LjE0IDIwMC44OCA1ODkuODAgMTk3LjIxIEMgNTg2LjIyIDE5My44NyA1ODEuMTQgMTkyLjY4IDU3Ni4zNyAxOTMuMDIgQyA1NzQuNTEgMTk3LjAyIDU3Mi43OSAyMDEuNjkgNTY4LjcxIDIwMy45MSBDIDU2NS41MCAyMDQuNDUgNTYzLjE5IDIwMS43OSA1NjAuNjIgMjAwLjM4IEMgNTU2LjIzIDE5OC4zMiA1NTcuMjMgMTkyLjY3IDU1NC44OCAxODkuMTAgQyA1NTIuMjggMTg1LjExIDU0Ny44NSAxODAuODAgNTQ5LjUwIDE3NS42MSBDIDU1MC43MiAxNzEuMjggNTUyLjE3IDE2Ni42OCA1NTUuNTIgMTYzLjUwIEMgNTU4LjA3IDE2MS4wNCA1NTguNjcgMTU3LjAxIDU1Ny4yMyAxNTMuODEgQyA1NTYuMjUgMTUwLjI3IDU1Mi41OCAxNDguNzkgNTQ5LjU4IDE0Ny4zNyBDIDU0Ni4xOSAxNDYuMzcgNTQ2LjA1IDE0Mi4xOSA1NDMuNjQgMTQwLjA3IEMgNTM5Ljg1IDEzOS4wMCA1MzYuNzkgMTQxLjYwIDUzMy43NyAxNDMuMzkgQyA1MzUuMzMgMTQwLjU0IDUzNy4yMyAxMzcuOTAgNTM5LjAzIDEzNS4yMCBDIDUzOC41NiAxMzMuODUgNTM4LjEzIDEzMi40OSA1MzcuNzEgMTMxLjE0IEMgNTM1LjE0IDEzMC40OSA1MzIuNTcgMTI5Ljg4IDUzMC4wMiAxMjkuMjAgQyA1MjcuMzcgMTMyLjQ2IDUyNC42MyAxMzUuNjggNTIyLjc0IDEzOS40NiBDIDUyMS4wNSAxMzguMzcgNTE5LjQwIDEzNi42MCA1MTcuMjEgMTM2Ljk1IEMgNTE1LjM1IDEzNy44OCA1MTMuOTggMTM5LjUyIDUxMi40OCAxNDAuOTAgQyA1MTEuMTcgMTQwLjcyIDUwOS44NyAxNDAuNTEgNTA4LjU3IDE0MC4zMSBDIDUwNy4xNiAxNDIuOTkgNTA1LjAwIDE0NS4xNiA1MDIuNDEgMTQ2LjcyIEMgNTAzLjA4IDE0My4zOSA1MDMuNTMgMTM5LjYzIDUwNi4zMSAxMzcuMzEgQyA1MDkuNjIgMTM0LjMxIDUxMS40NSAxMzAuMTQgNTE0LjI4IDEyNi43MyBDIDUxMi42NyAxMjUuNTcgNTEwLjY0IDEyNC44MiA1MDkuNjAgMTIzLjA0IEMgNTEzLjUyIDEyMC4wNCA1MTguMTAgMTE3Ljk1IDUyMS43MSAxMTQuNTQgQyA1MjQuNjYgMTEwLjEzIDUxOS4xMiAxMDUuOTQgNTIwLjMxIDEwMS4zMiBDIDUyMS43MyA5NS41OSA1MTguOTYgODguOTMgNTIyLjkxIDgzLjkxIEMgNTI1LjQ3IDgwLjQ4IDUyOC4zNiA3Ny4zMiA1MzAuODYgNzMuODUgQyA1MzQuMzggNjguOTggNTQwLjY0IDY3LjcwIDU0NS4xNyA2NC4xMyBDIDU0Ny4yMCA2Mi42MiA1NDcuMzggNTkuODEgNTQ2Ljc3IDU3LjU0IEMgNTQ1LjAxIDU2LjE5IDU0My4wMCA1NS4yMSA1NDAuOTkgNTQuMjkgQyA1MzYuMjIgNTcuOTAgNTMwLjI2IDU5LjY0IDUyNC4zNCA1OS45MiBDIDUyNy4wMiA1Ny44MiA1MzAuNTcgNTcuODUgNTMzLjYzIDU2LjYyIEMgNTM0LjgxIDU2LjEyIDUzNS4yOSA1NS4yMSA1MzUuMDYgNTMuOTAgQyA1MzUuMTYgNTEuMTcgNTM0LjU0IDQ4LjQ5IDUzMy45MyA0NS44NCBDIDUzNS4zMCA0Ni45MSA1MzYuNDIgNDguNDcgNTM4LjEzIDQ5LjAzIEMgNTQwLjQ1IDQ5LjQzIDU0MS42MCA0Ni44NSA1NDMuMjMgNDUuNjcgQyA1NDUuMDAgNDcuOTEgNTQ2LjU3IDUwLjM5IDU0OC44NCA1Mi4xOSBDIDU1Mi42NyA1NC41MSA1NTguMTggNTQuNzMgNTYwLjkzIDUwLjYxIEMgNTYxLjIyIDQ2LjYzIDU1OS4yNSA0Mi45NiA1NTguNjYgMzkuMDkgQyA1NjIuMDIgMzcuNDAgNTY1LjgyIDM2Ljg0IDU2OS4xOCAzNS4xOSBDIDU3MS42OCAzMy4wMCA1NzMuNDYgMzAuMTIgNTc1LjcyIDI3LjY5IEMgNTc4LjQ3IDI0LjYzIDU3Ny45MiAyMC4xNiA1NzkuNjcgMTYuNjIgQyA1ODIuOTMgMTUuMzcgNTg2LjYxIDE2LjMyIDU5MC4wNSAxNS45NyBDIDU5My40MCAxNi4xNiA1OTYuMzAgMTMuMzUgNTk5LjY2IDE0LjE0IEMgNjAzLjcwIDE1LjkwIDYwNy4zNCAxOS4xNyA2MTEuOTkgMTkuMDcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gODA4LjI1IDc3LjI1IEMgODA4Ljc4IDc3Ljc5IDgwOC43OCA3Ny43OSA4MDguMjUgNzcuMjUgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gOTc5LjI1IDEyMy4yNiBDIDk3OS43OSAxMjMuNzkgOTc5Ljc5IDEyMy43OSA5NzkuMjUgMTIzLjI2IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDI2Mi4yNSAxODkuMjAgQyAyNjYuNzYgMTgzLjM4IDI3My41MyAxODAuMTcgMjc5LjkzIDE3Ni45MSBDIDI3OS40MiAxNzkuNDcgMjc5LjA2IDE4Mi4wNiAyNzguODMgMTg0LjY2IEMgMjgyLjcyIDE4NS44OSAyODcuMDUgMTg2LjgzIDI5MC44OSAxODQuODYgQyAyOTcuNDUgMTgxLjY3IDMwNC41NyAxNzkuNTcgMzExLjg2IDE3OS4wNiBDIDMxNC42MCAxNzkuNTkgMzE2LjYwIDE4Mi4wMCAzMTkuMzYgMTgyLjY2IEMgMzI0LjQ2IDE4My44MCAzMjkuNjIgMTgyLjIxIDMzNC43MiAxODEuODEgQyAzMzYuODggMTg0LjQ1IDMzOS42NiAxODYuNDIgMzQyLjQ2IDE4OC4zMiBDIDM0MC43MiAxODguOTMgMzM4Ljk5IDE4OS41MyAzMzcuMjUgMTkwLjEzIEMgMzM3LjcxIDE5Mi4xNyAzMzcuOTQgMTk0LjI3IDMzOC42MiAxOTYuMjUgQyAzNDMuMTMgMTk5LjI3IDM0Ny40MyAyMDIuNjMgMzUyLjA4IDIwNS40NSBDIDM1MC4wMSAyMDYuMjQgMzQ3Ljk3IDIwNy4xMCAzNDUuOTYgMjA4LjAzIEMgMzQ2LjUzIDIxMy41NyAzNDYuMzMgMjE5LjE2IDM0Ny4xMCAyMjQuNjkgQyAzNDcuNDcgMjI3LjMwIDM0NS42NyAyMjkuODAgMzQ2LjQ4IDIzMi40MiBDIDM0Ny4wMCAyMzkuMTkgMzUyLjkzIDI0My4yOCAzNTcuMDMgMjQ3Ljk4IEMgMzU5LjU1IDI1MC4zOSAzNjEuNDUgMjUzLjMyIDM2My4xNiAyNTYuMzQgQyAzNjAuMzIgMjU4LjY4IDM1Ny4wNyAyNjAuNDMgMzUzLjg0IDI2Mi4xNSBDIDM1NC4zNCAyNjQuNjUgMzU0Ljg4IDI2Ny4xNSAzNTUuMjkgMjY5LjY3IEMgMzUxLjgyIDI3MS44NCAzNDkuMzcgMjc1Ljc4IDM0OS45MyAyNzkuOTggQyAzNDkuNDcgMjg0LjUwIDM1Mi42NyAyODkuNTYgMzQ5LjYyIDI5My42MSBDIDM0Ny40NCAyOTYuNDMgMzQ0LjkwIDI5OC45NyAzNDIuMTUgMzAxLjIzIEMgMzQwLjAyIDMwMy4xNSAzMzcuMDMgMzAyLjQyIDMzNC40MyAzMDIuNTcgQyAzMzAuNzUgMzAyLjg2IDMyNy4yOCAzMDAuNzMgMzIzLjYwIDMwMS41MCBDIDMyMC44MSAzMDEuODkgMzE3Ljk2IDMwMi4yNCAzMTUuMzUgMzAzLjM2IEMgMzEzLjUwIDMwNC4wNiAzMTQuMTIgMzA2LjMxIDMxNC4xMyAzMDcuODMgQyAzMTQuNjYgMzExLjQ0IDMxNC44NiAzMTUuMDkgMzE1LjMwIDMxOC43MiBDIDMxNi45MiAzMjMuMDEgMzE5Ljg5IDMyNi42NyAzMjIuOTEgMzMwLjA4IEMgMzI0LjgzIDMzMi4zMSAzMjQuOTIgMzM1LjgwIDMyNy42MSAzMzcuMzggQyAzMzAuMjkgMzM5LjMzIDMzMi45OSAzNDEuNDcgMzM0LjUwIDM0NC41MSBDIDMzNi41MyAzNDcuNDQgMzM1LjY4IDM1MS4yMCAzMzYuNjEgMzU0LjQ4IEMgMzM3LjMyIDM1OC4xMyAzNDAuOTUgMzYwLjA1IDM0Mi43NSAzNjMuMTQgQyAzNDkuMzIgMzcxLjMxIDM1Mi4yNCAzODEuNTcgMzU1Ljc3IDM5MS4yNiBDIDM1Ny45OCAzOTYuMTAgMzU1LjkzIDQwMS43NyAzNTguNTMgNDA2LjUwIEMgMzYyLjk3IDQxNS4yMyAzNjIuNzIgNDI1LjIzIDM2NS41MyA0MzQuNDUgQyAzNjYuNzMgNDQwLjQ2IDM2NS4wMSA0NDYuODIgMzY3LjMwIDQ1Mi42OCBDIDM2OS42NiA0NTkuMzAgMzY4LjQ4IDQ2Ni4zOSAzNjkuODEgNDczLjE4IEMgMzcyLjAyIDQ4NC45OSAzNzAuNjEgNDk3LjA2IDM3MS4wMCA1MDkuMDAgQyAzNzAuNTcgNTE3LjIxIDM3Mi40NSA1MjUuOTggMzY4LjY3IDUzMy42NiBDIDM2Ni43OCA1MzcuOTcgMzYzLjg0IDU0Mi4wOCAzNjMuOTYgNTQ2Ljk4IEMgMzYzLjkyIDU1MC4yOSAzNjIuNTIgNTUzLjM0IDM2MS40MiA1NTYuNDEgQyAzNTkuNDUgNTYwLjc3IDM2MC4yNiA1NjUuODEgMzU4LjE4IDU3MC4xNiBDIDM1NS45NCA1NzQuOTkgMzU0LjYxIDU4MC4xNCAzNTMuMzMgNTg1LjI5IEMgMzUyLjY0IDU4OS4wOSAzNTMuMzEgNTkyLjk4IDM1Mi44MiA1OTYuODAgQyAzNTEuODcgNTk5LjQzIDM1MC4wNCA2MDEuNzIgMzQ5LjYwIDYwNC41NSBDIDM0OC4yOCA2MTEuMTEgMzQ3LjczIDYxNy45MCAzNDUuMTcgNjI0LjE1IEMgMzQzLjIwIDYyOC41OSAzNDQuNzYgNjMzLjYyIDM0My4xMyA2MzguMTMgQyAzNDIuMjkgNjQwLjMyIDM0Mi4wNiA2NDIuNjUgMzQxLjk1IDY0NC45OCBDIDM0MS44MyA2NTAuMzEgMzM4LjM2IDY1NC42NyAzMzYuNDMgNjU5LjQzIEMgMzM1LjYyIDY2Mi41NyAzMzYuMTcgNjY1Ljg2IDMzNS45OSA2NjkuMDYgQyAzMzYuMTcgNjcyLjkwIDMzMy4wNiA2NzUuODEgMzMyLjYxIDY3OS41NCBDIDMzMS40MCA2ODkuMDEgMzI5LjExIDY5OC4zNyAzMjguOTggNzA3Ljk3IEMgMzI5LjAwIDcyMS4zMiAzMjkuMDIgNzM0LjY3IDMyOC45OCA3NDguMDIgQyAzMjguODYgNzUzLjY5IDMzMC4xNyA3NTkuMjcgMzMwLjA4IDc2NC45NSBDIDMzMC4wMiA3NjguODMgMzM1LjAxIDc2OS4zNiAzMzYuODYgNzcyLjExIEMgMzM5LjIwIDc3NS41NiAzNDIuMTggNzc4LjU2IDM0NC4xMCA3ODIuMjkgQyAzNDYuMjUgNzgyLjc2IDM0OC41MCA3ODMuMjMgMzUwLjIwIDc4NC43NiBDIDM1Mi42MSA3ODYuOTYgMzU1Ljg5IDc4Ny41MiAzNTguOTQgNzg4LjMyIEMgMzU5LjY2IDc5MS40MiAzNjAuMDUgNzk0LjU4IDM2MC4xNSA3OTcuNzggQyAzNTMuMTYgNzk4LjY5IDM0Ni40NSA4MDIuMjEgMzM5LjI4IDgwMC43MyBDIDMzNC45MSA3OTkuODQgMzMwLjMxIDgwMC40NSAzMjYuMDkgNzk4Ljg4IEMgMzIzLjkwIDc5OC4xNSAzMjEuODYgNzk3LjA1IDMxOS42NiA3OTYuMzggQyAzMTYuNzQgNzk1LjgyIDMxMy42NyA3OTYuMTMgMzEwLjgzIDc5NS4xNCBDIDMwNi4zOSA3OTMuODIgMzAyLjgzIDc5MC4wNCAyOTguMDAgNzkwLjAyIEMgMjkxLjM5IDc4OS44OSAyODQuNzcgNzkwLjA2IDI3OC4xNiA3OTAuMDAgQyAyNzcuMTQgNzg1LjQzIDI3Ny4wNSA3ODAuNzYgMjc2Ljc4IDc3Ni4xMyBDIDI3NS45NCA3NzIuMTAgMjc0LjM2IDc2OC4xOCAyNzQuMzIgNzY0LjAxIEMgMjc0LjU4IDc1OS42MCAyNzUuOTIgNzU0LjkyIDI3NC40MiA3NTAuNjUgQyAyNzAuMTEgNzQ1LjEyIDI3MS40MiA3MzcuNzcgMjcwLjY2IDczMS4yOCBDIDI2OS40NSA3MjQuNTIgMjcwLjU1IDcxNy41OSAyNjkuMjEgNzEwLjg0IEMgMjY4LjgwIDcwMi4yNiAyNjguOTQgNjkzLjY1IDI2OS4xMyA2ODUuMDYgQyAyNzAuNDQgNjc3LjQ0IDI2OS45MSA2NjkuNzAgMjcwLjAxIDY2Mi4wMCBDIDI3MC4wMCA2NTcuNTIgMjcwLjIxIDY1My4wMSAyNjkuNDMgNjQ4LjU3IEMgMjY4LjMwIDY0MS42NyAyNjkuODUgNjM0LjU4IDI2OC4yNSA2MjcuNzQgQyAyNjYuMDMgNjE4Ljk5IDI2Ny4zMyA2MDkuOTEgMjY3LjAwIDYwMS4wMCBDIDI2Ni42NiA1OTIuNTEgMjY4LjA2IDU4My43NyAyNjUuNDggNTc1LjUxIEMgMjY0LjIwIDU3MS42MyAyNjMuNzkgNTY3LjUxIDI2Mi4zMCA1NjMuNjkgQyAyNjAuMzIgNTU5LjAwIDI2MS4wMCA1NTMuNjYgMjU5LjA0IDU0OC45NiBDIDI1Ni45NyA1NDMuOTkgMjUwLjM4IDU0Mi4zMyAyNDkuMjYgNTM2Ljc3IEMgMjQ3Ljc3IDUzMC40OCAyNDQuMzcgNTI0Ljc1IDI0My42NyA1MTguMjggQyAyNDIuNjYgNTExLjQ2IDIzNy40MyA1MDYuMDkgMjM2LjgyIDQ5OS4xNyBDIDIzNS44NSA0OTAuODEgMjMwLjk2IDQ4My41NyAyMjkuNjkgNDc1LjI5IEMgMjI4Ljg0IDQ3MC44OSAyMjkuMTUgNDY2LjM1IDIyOC4wNiA0NjIuMDAgQyAyMjIuOTMgNDYyLjExIDIxNy40OCA0NjEuMjAgMjEyLjc0IDQ2My42NyBDIDIwOC4yNiA0NjQuODAgMjA1LjgxIDQ2OS45MSAyMDAuOTcgNDY5Ljk4IEMgMTk0LjM2IDQ3MC41NyAxODguMzMgNDc0LjAyIDE4My41NCA0NzguNDcgQyAxODEuNTQgNDc5Ljk2IDE3OS43MSA0ODIuMzcgMTc2Ljk0IDQ4Mi4xMCBDIDE3NC40NCA0ODIuMzYgMTcyLjQzIDQ4MC43MCAxNzAuNDEgNDc5LjUxIEMgMTY4LjQ3IDQ3OC4wMCAxNjUuOTEgNDc4LjM4IDE2My42MiA0NzguMDUgQyAxNjIuMzMgNDgxLjM0IDE2MC40OSA0ODQuNTEgMTU3LjQ0IDQ4Ni40NiBDIDE1My43NiA0ODguNTkgMTU0LjQzIDQ5My4zMiAxNTIuNjcgNDk2LjY1IEMgMTUxLjQyIDQ5OC4yMiAxNDkuNjUgNDk5LjIzIDE0OC4wNiA1MDAuNDAgQyAxNDcuOTQgNTA0LjE5IDE0Ny45MSA1MDcuOTkgMTQ3Ljk3IDUxMS44MCBDIDE0Ni4xOCA1MTIuNjcgMTQ0LjIzIDUxMy4zMSAxNDIuNjYgNTE0LjU5IEMgMTQwLjg4IDUxOC41NCAxMzkuMjYgNTIyLjU2IDEzNy40NCA1MjYuNTAgQyAxMzUuMDkgNTMwLjM3IDEzMi4xNiA1MzMuODQgMTI5LjQ3IDUzNy40NyBDIDEyNy4xOSA1NDEuNTEgMTI2LjI4IDU0Ni4xNiAxMjUuNjYgNTUwLjcyIEMgMTI1LjIwIDU1My43MyAxMjIuMzIgNTU2LjAzIDEyMi43NyA1NTkuMjEgQyAxMjMuMDggNTYzLjkyIDEyMi40MiA1NjguOTYgMTI0LjY0IDU3My4zMiBDIDEyNy41NSA1NzQuNDQgMTMwLjk3IDU3My41NCAxMzMuNzEgNTc1LjI4IEMgMTM2LjIyIDU3Ni42OCAxMzkuMDkgNTc3LjE5IDE0MS43MCA1NzguMzcgQyAxNDQuMzQgNTc5LjU0IDE0Ni4xNCA1ODEuODkgMTQ4LjQ3IDU4My41MyBDIDE1NC4yNyA1ODYuOTYgMTYwLjk3IDU4OC4zMSAxNjcuNTQgNTg5LjQwIEMgMTcxLjYxIDU5MS44MCAxNzQuMzkgNTk2LjA0IDE3OC41NCA1OTguNDIgQyAxODAuMzQgNTk5LjUzIDE4Mi42OSA2MDAuNDEgMTgzLjMwIDYwMi42OCBDIDE4NS43NiA2MDkuODMgMTg3LjMxIDYxNy4zOSAxODcuMDMgNjI1LjAwIEMgMTg2Ljg5IDYzMS45OCAxODcuMTcgNjM4Ljk3IDE4Ni45NSA2NDUuOTYgQyAxODcuMDggNjQ5LjgxIDE4Mi4yOSA2NTEuMzQgMTgyLjEzIDY1NS4wOCBDIDE4MS44NCA2NTcuOTkgMTgwLjczIDY2MC43MSAxNzkuMjYgNjYzLjIyIEMgMTc3LjA1IDY2Ni42NCAxNzguOTcgNjcxLjIwIDE3Ni41MyA2NzQuNTUgQyAxNzQuMjUgNjc3LjY5IDE3My40MiA2ODEuNTEgMTcxLjk5IDY4NS4wMyBDIDE2OS41MyA2ODcuNzUgMTY3Ljk4IDY5MS4wMiAxNjcuMzMgNjk0LjYzIEMgMTY1LjgzIDY5NS4xNCAxNjQuMjcgNjk1LjU0IDE2Mi44OSA2OTYuMzQgQyAxNTkuOTYgNzAwLjc5IDE2MC41MCA3MDYuNDMgMTU4LjE1IDcxMS4xMiBDIDE1Ny4xMyA3MTMuMzkgMTU2Ljc0IDcxNS44NiAxNTYuMjggNzE4LjMwIEMgMTU1LjgyIDcyNC4yOSAxNTAuNjkgNzI5LjQ3IDE1Mi44OSA3MzUuNjkgQyAxNTAuMTMgNzM4LjE5IDE0OS4xNyA3NDEuODggMTQ4LjQ0IDc0NS4zOSBDIDE0OC4yNCA3NDguMzAgMTQ5LjA2IDc1MS4yNSAxNDguMTMgNzU0LjExIEMgMTQ2Ljk1IDc1Ny45MCAxNDguOTAgNzYxLjcyIDE0OC4yMyA3NjUuNTggQyAxNDcuMDMgNzY1LjQzIDE0NS44MyA3NjUuMzAgMTQ0LjYzIDc2NS4xOSBDIDE0NS4xNCA3NjYuMTYgMTQ1LjY1IDc2Ny4xNSAxNDYuMTcgNzY4LjE0IEMgMTQ3LjQ0IDc2Ny41NCAxNDguNzEgNzY2LjkzIDE0OS45NyA3NjYuMzMgQyAxNTAuMTEgNzY4Ljk5IDE0OS41NiA3NzEuODQgMTUwLjUxIDc3NC4zOSBDIDE1My41OSA3NzguNjggMTU4LjM2IDc4MS4yNiAxNjEuOTIgNzg1LjEyIEMgMTY0LjUzIDc4OC4yNCAxNjguOTUgNzg3LjU5IDE3Mi41MiA3ODguNDYgQyAxNzQuMzkgNzg5LjU0IDE3NS44NiA3OTEuMTcgMTc3LjYwIDc5Mi40MyBDIDE4MC4wMCA3OTMuMjggMTgyLjU0IDc5My42NSAxODUuMDIgNzk0LjE5IEMgMTg2LjMzIDc5Ny41MiAxODYuNjEgODAxLjk5IDE4My4xOCA4MDQuMTYgQyAxNzIuODYgODA5LjEyIDE2MS4xMyA4MDguMDAgMTUwLjA0IDgwNy45MSBDIDE0My4zNSA4MDYuOTMgMTM2LjY2IDgwNS42NyAxMzAuMTYgODAzLjgxIEMgMTI0LjAwIDgwMS4zMyAxMTYuNzUgODAxLjA0IDExMS42NSA3OTYuMzggQyAxMTAuMDUgNzk0Ljk1IDEwNy43OSA3OTUuMDEgMTA1LjgzIDc5NC41MSBDIDEwNy43MyA3ODkuMzkgMTA4LjM5IDc4My44NSAxMTAuOTkgNzc4Ljk5IEMgMTEyLjk3IDc3NS4zNiAxMTMuNjUgNzcxLjI2IDExNC4zNCA3NjcuMjUgQyAxMTUuMDEgNzYzLjI2IDExNy44NCA3NTkuNTkgMTE2LjczIDc1NS40MSBDIDExNS4xNiA3NDcuODcgMTEyLjg3IDc0MC4zMiAxMTMuNTQgNzMyLjUyIEMgMTE0LjE3IDcyOC45MyAxMTIuMjAgNzI1LjY0IDExMS44NiA3MjIuMTMgQyAxMTAuNDEgNzE1LjgwIDExMi4xNyA3MDkuMzkgMTEyLjAwIDcwMy4wMiBDIDExMi4wMSA3MDAuMzMgMTExLjg5IDY5Ny42NSAxMTIuMDQgNjk0Ljk4IEMgMTEyLjAwIDY5MS42OSAxMTQuOTIgNjg5LjI3IDExNC45NSA2ODYuMDEgQyAxMTUuMTUgNjgxLjI2IDExNC43NSA2NzYuNDcgMTE1LjU0IDY3MS43NiBDIDExNC4xNCA2NzEuNDkgMTEyLjc0IDY3MS4xNSAxMTEuMzEgNjcxLjA5IEMgMTA3LjYwIDY3Mi45MiAxMDQuNDEgNjc2LjczIDk5LjkxIDY3Ni4xOSBDIDk1LjUzIDY3NS44MCA5MS44NCA2NzguNDcgODcuODAgNjc5LjYyIEMgODMuNDMgNjgwLjcxIDc4LjkwIDY4MS40MSA3NC40MCA2ODEuMTEgQyA3Mi4xMiA2NzkuOTYgNzAuMzkgNjc3Ljg0IDY3Ljg4IDY3Ny4xNiBDIDYzLjQ4IDY3NS45MCA1OS4xNyA2NzQuMTkgNTUuMzcgNjcxLjYxIEMgNTAuNTEgNjY3Ljg0IDQzLjk5IDY3MS4yMiAzOC42MiA2NjkuNTUgQyAzNS40MCA2NjYuMjkgMzIuODYgNjYyLjQ1IDMwLjI2IDY1OC43MSBDIDI4LjY2IDY1Ni4zMyAyNi4yMyA2NTQuNjggMjQuNTkgNjUyLjM0IEMgMjMuMDEgNjQ3LjYyIDIyLjUxIDY0Mi40NyAxOS44MyA2MzguMTggQyAxNy4xNSA2MzMuNTMgMTUuNDMgNjI4LjM1IDE0Ljk0IDYyMy4wMSBDIDE0LjY4IDYxOC43MyAxMC45OSA2MTUuNDggMTEuMTAgNjExLjEyIEMgMTAuOTggNjAyLjY4IDEwLjg4IDU5NC4yNCAxMS4yMCA1ODUuODEgQyAxMS4xNiA1ODEuMzQgMTAuNjcgNTc2Ljg1IDExLjQzIDU3Mi40MiBDIDEzLjMwIDU2MC41OSAxMC4xOCA1NDguMzMgMTMuNTcgNTM2LjcwIEMgMTQuNDMgNTMxLjU2IDE2LjE3IDUyNi42MyAxNi40NiA1MjEuMzkgQyAxNy4xMyA1MTYuMTkgMjAuMDEgNTExLjczIDIxLjk3IDUwNi45OCBDIDIzLjk0IDUwMi4wMCAyMy4xOCA0OTYuMzQgMjUuNDQgNDkxLjQ1IEMgMjguNDQgNDg0LjMyIDMwLjE0IDQ3Ni42OCAzMy42OCA0NjkuNzcgQyAzNS4zNSA0NjcuNDAgMzguNDkgNDY2LjM5IDM5LjYwIDQ2My41OSBDIDQxLjU3IDQ2MC42OSA0MS43MiA0NTcuMTEgNDIuOTggNDUzLjk2IEMgNDUuODYgNDQ4Ljk1IDQ4LjI4IDQ0My41NyA1Mi4zMCA0MzkuMzQgQyA1NC4zMyA0MzYuOTcgNTYuMjEgNDM0LjQ3IDU4LjAxIDQzMS45MyBDIDYwLjI1IDQyOC45NSA2MC41NyA0MjQuOTcgNjMuMTUgNDIyLjIxIEMgNjcuMDggNDE2LjQ1IDczLjQyIDQxMi42OCA3Ni4zMCA0MDYuMTYgQyA4MC40OCA0MDEuNDIgODUuMzQgMzk3LjI0IDkwLjI1IDM5My4yNSBDIDk1Ljg3IDM4Ni45MSAxMDYuNTMgMzg0LjI0IDEwNy42MyAzNzQuNjUgQyAxMTQuNTEgMzc0LjAwIDExNy42NCAzNjYuNzcgMTIzLjgwIDM2NC41MSBDIDEyNC4xNiAzNjIuNDEgMTI0LjkwIDM2MC4zMyAxMjQuODAgMzU4LjE5IEMgMTI0LjE4IDM1NS4yNCAxMjIuOTcgMzUyLjQ2IDEyMS44NyAzNDkuNjggQyAxMTcuODYgMzUzLjA0IDExMy4xNSAzNTUuODQgMTEwLjQ0IDM2MC40OCBDIDEwOC42NCAzNjMuNTYgMTAzLjk5IDM2Mi4xMiAxMDEuOTYgMzY0Ljk4IEMgOTcuNzYgMzY5LjYyIDkyLjUwIDM3My4yMCA4Ni44OCAzNzUuOTEgQyA4NC43MyAzNzYuOTcgODQuMTMgMzc5LjQxIDgzLjQwIDM4MS40OCBDIDc4Ljg5IDM4My4wMCA3NC41MiAzODQuOTggNzAuNDAgMzg3LjM3IEMgNjYuNjkgMzg5LjUwIDY0LjQ5IDM5My40NiA2MC43MiAzOTUuNDkgQyA1Ni45NCAzOTUuMzQgNTMuMTYgMzk0Ljg5IDQ5LjM3IDM5NC44OSBDIDQ4LjMwIDM5Mi4wMyA0NS44MyAzODkuNTEgNDUuOTkgMzg2LjMyIEMgNDcuOTMgMzg0LjE3IDQ5Ljg0IDM4MS44MCA1Mi40MCAzODAuMzcgQyA2MC4yMiAzNzkuMzkgNjguNzkgMzc5LjM5IDc1LjI3IDM3NC4yNiBDIDc4LjkxIDM3MC41MCA4MC45NiAzNjUuNDIgODQuOTUgMzYxLjk0IEMgODcuNjAgMzYwLjI2IDkxLjAxIDM1OS42NCA5Mi45OCAzNTcuMDIgQyA5NS4xMCAzNTQuNDAgOTcuNjUgMzUyLjE2IDk5LjY5IDM0OS40OCBDIDEwMS4wNiAzNDcuMjUgOTkuMTIgMzQ0LjUxIDk2Ljc3IDM0NC4xNiBDIDkzLjg1IDM0My44MCA5MC44OSAzNDMuODggODcuOTYgMzQ0LjAwIEMgODMuNDMgMzQ0LjE1IDc5LjE3IDM0Ni44OCA3NC41OCAzNDUuNTUgQyA2OC44MiAzNDUuMzMgNjMuODIgMzQyLjQ0IDU4LjYwIDM0MC4zOSBDIDU0LjczIDMzOS42OCA1MC43MCAzNDAuMjYgNDYuOTAgMzM5LjEwIEMgNDQuNTIgMzM4LjcyIDQzLjIwIDMzNi40NyA0MS40NyAzMzUuMDQgQyAzOC4xNyAzMzguNTQgMzMuNzUgMzM1LjQxIDMwLjU2IDMzMy40MyBDIDI3LjQzIDMzMC42MiAyOC4wMiAzMjYuMDUgMjcuOTMgMzIyLjI2IEMgMzEuNzIgMzIyLjM1IDM1LjIwIDMyMC45MSAzOC44MCAzMjAuMDkgQyA0MS43NiAzMjEuNTAgNDQuNTIgMzIzLjMzIDQ3LjYzIDMyNC40NCBDIDUxLjg3IDMyNS44OCA1NC4yMSAzMzEuMDQgNTkuMDYgMzMwLjkzIEMgNjIuNDMgMzMwLjc4IDY1LjI0IDMzMi42MiA2OC4yNCAzMzMuODEgQyA3MS40NCAzMzMuOTYgNzQuNTggMzMyLjY4IDc3Ljc5IDMzMy4xNyBDIDgxLjc1IDMzMy42NiA4Ni4xMCAzMzQuOTkgODkuODAgMzMyLjgxIEMgOTIuNTUgMzMxLjI4IDk1Ljg0IDMzMS4xMSA5OC41NCAzMjkuNTMgQyAxMDEuNzYgMzI1LjMwIDEwMy42NyAzMTkuODkgMTA4Ljg0IDMxNy41MyBDIDEwOC43MiAzMTAuNjEgMTEwLjc0IDMwMy45MiAxMTEuMDcgMjk3LjA0IEMgMTExLjMwIDI5MS45OSAxMTQuNDkgMjg3Ljc1IDExNS40OCAyODIuOTAgQyAxMTUuNTggMjc5LjMxIDExNS45NSAyNzUuNjkgMTE3LjQyIDI3Mi4zNyBDIDExOS4xNiAyNjguMjkgMTE1Ljc1IDI2My44NSAxMTcuODYgMjU5Ljg2IEMgMTE5LjEzIDI1Ni44MSAxMjEuODEgMjU0LjcyIDEyMy45OSAyNTIuMzUgQyAxMjUuNzQgMjUzLjAyIDEyNy41OCAyNTQuNTIgMTI5LjUzIDI1My42NiBDIDEzMi4yOCAyNTIuNzEgMTM0Ljg2IDI1MS4zNCAxMzcuMzQgMjQ5LjgzIEMgMTM2LjY0IDI0Ny43MCAxMzUuODMgMjQ1LjYxIDEzNS4wMCAyNDMuNTMgQyAxMzguMjQgMjQyLjQyIDE0MS4xOCAyNDAuNjQgMTQ0LjMyIDIzOS4zMiBDIDE0OC43NiAyMzguMzMgMTUzLjMxIDIzOS40NCAxNTcuNzggMjM5LjU3IEMgMTYzLjQ3IDIzNy45MSAxNjguNTYgMjMzLjc0IDE3NC44MCAyMzQuMjcgQyAxODAuMTcgMjM1LjMwIDE4NS40MiAyMzcuNDIgMTkwLjk5IDIzNi45OSBDIDE5My40OCAyMzcuMjQgMTk2LjY3IDIzNi4yMyAxOTguNTMgMjM4LjQzIEMgMjAxLjUyIDI0MS42OSAyMDUuODMgMjQzLjExIDIwOS4zNSAyNDUuNjQgQyAyMTQuNTAgMjQ5LjQyIDIyMC4zMiAyNTIuNTcgMjI0LjA4IDI1Ny45MCBDIDIyNi4zNCAyNjEuNTggMjI4Ljc4IDI2NS4zMyAyMjkuMzIgMjY5LjczIEMgMjMwLjEyIDI3NC41MyAyMzMuNTkgMjc4LjE3IDIzNS41NSAyODIuNDggQyAyMzcuNzMgMjg5LjQxIDIzNS4zNCAyOTYuNDggMjM0LjczIDMwMy40NCBDIDIzMi4wMiAzMDQuNzEgMjI5LjE2IDMwNi4wMSAyMjcuMjAgMzA4LjM2IEMgMjI2LjcxIDMxMi4wMSAyMjYuNDMgMzE2LjE1IDIyOC42OSAzMTkuMzIgQyAyMzAuMzMgMzIxLjcyIDIzMi40NiAzMjMuNzQgMjM0LjMwIDMyNS45OCBDIDIzMC44OSAzMjguNTIgMjI2LjU5IDMzMC42NSAyMjUuMTkgMzM1LjAwIEMgMjIzLjk3IDMzOC42NSAyMjEuODQgMzQyLjYyIDIyMy42MSAzNDYuNDcgQyAyMjMuOTIgMzQ3Ljc4IDIyNS4wNSAzNDkuMDcgMjI0LjY4IDM1MC40NiBDIDIyMy4yNSAzNTEuNDcgMjIxLjcwIDM1Mi4zMSAyMjAuMjAgMzUzLjIxIEMgMjIwLjQzIDM1OC4xMyAyMTguNTkgMzYyLjg1IDIxNS44MiAzNjYuODMgQyAyMTMuMjYgMzY4Ljg2IDIwOS44MSAzNjkuNzAgMjA2LjU3IDM2OS40NSBDIDIwMi4yNiAzNjkuMjIgMTk3Ljk0IDM2OS43NCAxOTMuNzQgMzcwLjY5IEMgMTg4Ljk5IDM3MS44NCAxODQuNDIgMzY5LjMzIDE3OS42OCAzNjkuNDkgQyAxNzYuMTAgMzcwLjIzIDE3NC40MCAzNzMuODIgMTcyLjM0IDM3Ni40NCBDIDE3MC40MiAzNzcuNjIgMTY4LjEyIDM3Ny45MCAxNjUuOTcgMzc4LjQyIEMgMTY2LjA0IDM4MS40NiAxNjUuNjkgMzg0LjU2IDE2Ni4zNSAzODcuNTUgQyAxNjguNzAgMzkxLjc0IDE3Mi45MCAzOTQuNDYgMTc1LjQyIDM5OC41NCBDIDE3Ny41MiA0MDEuNDMgMTc5LjE0IDQwNS4wMCAxODIuMzggNDA2LjgxIEMgMTg0LjYxIDQwNy4zOCAxODYuODggNDA2LjU3IDE4OS4wNCA0MDYuMDcgQyAxOTQuNTcgNDA0LjU1IDE5OS45OCA0MDIuMTMgMjA0LjI4IDM5OC4yOCBDIDIwNi42NSAzOTYuMDEgMjEwLjEzIDM5NS42NyAyMTIuNzEgMzkzLjcxIEMgMjE2Ljc0IDM5MC43MyAyMjAuODIgMzg3LjgxIDIyNC45NyAzODUuMDEgQyAyMjcuNDEgMzgzLjY5IDIzMC4yNSAzODMuMjAgMjMyLjUyIDM4MS41NSBDIDIzNS41MyAzNzcuMTkgMjM3LjIzIDM3Mi4xMyAyMzkuMzggMzY3LjM1IEMgMjQzLjM3IDM2MS43NSAyNDUuMzUgMzU1LjAyIDI0OS40OCAzNDkuNTAgQyAyNTIuMDAgMzQ1LjA4IDI1NC4xMSAzNDAuMzkgMjU3LjU4IDMzNi41OSBDIDI1OS44NyAzMzIuNTggMjYyLjI0IDMyOC42MSAyNjUuMTcgMzI1LjAzIEMgMjY2LjExIDMyNS4yNiAyNjcuMDYgMzI1LjUwIDI2OC4wMSAzMjUuNzQgQyAyNjYuMzcgMzIyLjUxIDI2Ni45MiAzMTguODcgMjY3LjA3IDMxNS40MSBDIDI3MC40MCAzMTMuNTQgMjcyLjYxIDMxMC40MyAyNzQuMzkgMzA3LjE2IEMgMjcyLjExIDMwNC43MiAyNjkuNzEgMzAyLjI5IDI2OC4zMiAyOTkuMjEgQyAyNjYuODYgMjk5LjExIDI2NS40MCAyOTkuMDMgMjYzLjk1IDI5OC45NSBDIDI2NC42NSAyOTguMzAgMjY1LjM1IDI5Ny42NiAyNjYuMDUgMjk3LjAyIEMgMjYzLjg3IDI5Ni44NCAyNjEuNjkgMjk2Ljc2IDI1OS41MSAyOTYuNzYgQyAyNTcuMzEgMjkyLjQyIDI1NC43NCAyODguMTQgMjUwLjg4IDI4NS4wOCBDIDI0Ny4zMiAyODIuMjAgMjQ3LjQ3IDI3Ny4yMSAyNDUuNTYgMjczLjM4IEMgMjQxLjU2IDI2Ni4xNiAyNDEuMDUgMjU3LjQ3IDIzNi40NyAyNTAuNTMgQyAyMzMuMzAgMjQ2LjEyIDIzNi4xNSAyNDAuMzYgMjM0LjUwIDIzNS41NSBDIDIzMy4zOSAyMzQuMDcgMjMxLjk1IDIzMi44OSAyMzAuNjYgMjMxLjU3IEMgMjMzLjcwIDIzMC4xOCAyMzguNDQgMjI5LjkwIDIzOC45NyAyMjUuNzkgQyAyMzkuOTEgMjIyLjg4IDIzNy41NCAyMjAuOTYgMjM1LjQ5IDIxOS40MSBDIDIzNS43MiAyMTguMDMgMjM1LjkyIDIxNi42NSAyMzYuMTMgMjE1LjI4IEMgMjQwLjg1IDIxMy4wNSAyNDUuODYgMjExLjU2IDI1MC43NCAyMDkuNzUgQyAyNTUuMjMgMjA3Ljc4IDI1OC4yOCAyMDMuNzYgMjYyLjE2IDIwMC45MiBDIDI2MS4yOCAxOTkuODkgMjYwLjQwIDE5OC44OCAyNTkuNTIgMTk3Ljg2IEMgMjYwLjY5IDE5NS4wNSAyNjAuODcgMTkxLjkxIDI2Mi4yNSAxODkuMjAgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gMzM1LjI3IDE5NS4yNiBDIDMzNS43OCAxOTUuNzkgMzM1Ljc4IDE5NS43OSAzMzUuMjcgMTk1LjI2IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDY1MS4yNSAyNDUuMjYgQyA2NTEuNzkgMjQ1LjgwIDY1MS43OSAyNDUuODAgNjUxLjI1IDI0NS4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjZmRmZGZkIiBkPSIgTSA5OTYuMjcgMjUwLjI2IEMgOTk2Ljc3IDI1MC43OCA5OTYuNzcgMjUwLjc4IDk5Ni4yNyAyNTAuMjYgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNTY3LjcyIDI2OS43NyBDIDU3MC40MCAyNjcuNDUgNTc0LjMyIDI2Ny43MCA1NzcuNjAgMjY4LjIzIEMgNTg0LjM5IDI3Mi41MiA1ODEuNDAgMjgxLjQxIDU4Mi4wMCAyODguMDMgQyA1NzcuODcgMjg4Ljc5IDU3Mi4yMiAyOTAuNzUgNTY5LjE4IDI4Ni43OSBDIDU2Ni44MiAyODQuMjYgNTY3LjAyIDI4MC41OCA1NjYuNDYgMjc3LjQwIEMgNTY1Ljk0IDI3NC44MiA1NjYuMjIgMjcxLjk4IDU2Ny43MiAyNjkuNzcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNzcwLjI2IDM0Mi4yNSBDIDc3MC43OSAzNDIuNzkgNzcwLjc5IDM0Mi43OSA3NzAuMjYgMzQyLjI1IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDc1Ny4yNiAzNjguMjYgQyA3NTcuNzcgMzY4Ljc4IDc1Ny43NyAzNjguNzggNzU3LjI2IDM2OC4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjZmRmZGZkIiBkPSIgTSA2ODUuMTQgMzg1Ljg3IEMgNjg4LjkwIDM4NS45MiA2OTMuNjAgMzg1Ljc3IDY5NS45MyAzODkuMzMgQyA2OTcuMTIgMzk0LjQ5IDY5Mi41OSAzOTguMjcgNjg5LjEzIDQwMS4yNyBDIDY4Ny40NyA0MDIuOTIgNjg0Ljk4IDQwMS43NCA2ODMuMzMgNDAwLjcxIEMgNjgwLjE2IDM5NS45NyA2ODIuNzAgMzkwLjI5IDY4NS4xNCAzODUuODcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNjUyLjc0IDQxMy41OSBDIDY1My41NiA0MTAuMjcgNjU3LjY1IDQwOS4zNyA2NjAuNTggNDEwLjE1IEMgNjYyLjM5IDQxMS40NCA2NjQuMTUgNDEzLjA1IDY2NS4wNiA0MTUuMTQgQyA2NjQuNjIgNDE5LjkxIDY2Mi4xNiA0MjQuMjAgNjU5Ljc3IDQyOC4yNiBDIDY1OC4wOSA0MjcuNjAgNjU2LjM2IDQyNy4wNyA2NTQuNzggNDI2LjIxIEMgNjUxLjU2IDQyMi44NCA2NTEuOTQgNDE3LjgxIDY1Mi43NCA0MTMuNTkgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNjk3LjI1IDQxOS4zMCBDIDY5Ny43OCA0MTkuODQgNjk3Ljc4IDQxOS44NCA2OTcuMjUgNDE5LjMwIFoiIC8+CjxwYXRoIGZpbGw9IiNmZGZkZmQiIGQ9IiBNIDIwNS45MyA0MjUuOTMgQyAyMTAuODUgNDIyLjU0IDIxNi43NCA0MjEuMjAgMjIyLjQ4IDQxOS45NSBDIDIxOS43OSA0MjQuMzAgMjE3LjEwIDQyOC44NiAyMTMuNDMgNDMyLjQyIEMgMjA1LjQ4IDQzNS44NSAxOTkuMTMgNDQyLjE0IDE5MC45MiA0NDQuOTcgQyAxODcuMDEgNDQ2LjYyIDE4My41NCA0NDkuODAgMTc5LjE3IDQ1MC4wMyBDIDE3NC44MSA0NDguMzIgMTcyLjMzIDQ0My45MCAxNjkuMjAgNDQwLjY1IEMgMTY4Ljc5IDQzNy43NiAxNjkuMDEgNDM0LjgzIDE2OS4wMCA0MzEuOTMgQyAxNzIuMDcgNDMyLjE3IDE3NS44NiA0MzEuMTMgMTc4LjExIDQzMy44OCBDIDE4MC4zNiA0MzYuMzggMTgzLjMxIDQzNy45OCAxODYuNjggNDM4LjM3IEMgMTkxLjMxIDQzMS44MCAxOTkuNjMgNDMwLjI3IDIwNS45MyA0MjUuOTMgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gMTA0NS4yNiA0NTEuMjYgQyAxMDQ1Ljc4IDQ1MS43OCAxMDQ1Ljc4IDQ1MS43OCAxMDQ1LjI2IDQ1MS4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjMDMwMzAzIiBkPSIgTSAyMDEuMjcgNzIxLjI1IEMgMjAxLjc3IDcyMS43NyAyMDEuNzcgNzIxLjc3IDIwMS4yNyA3MjEuMjUgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gMTY0LjI1IDc4My4yNSBDIDE2NC43OSA3ODMuNzkgMTY0Ljc5IDc4My43OSAxNjQuMjUgNzgzLjI1IFoiIC8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gretl,gretl\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"gretl_x11.Gretl_x11\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Gretl\"\nLABEL oc.displayname=\"Gretl\"\nLABEL oc.path=\"/usr/bin/gretl\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"Gretl\"\nENV APPBIN \"/usr/bin/gretl\"\nENV APP \"/usr/bin/gretl\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gretl/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gretl/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gretl/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gretl/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libx11-xcb1 libasound2 && apt-get clean\nRUN curl -Ls -o /tmp/hyper.deb https://releases.hyper.is/download/deb && apt-get install --no-install-recommends --yes /tmp/hyper.deb && apt-get clean && rm -rf /tmp/hyper.deb\nLABEL oc.icon=\"hyper.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojM2QzZDNkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzQ3NDc0NyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0yMyAxMi0xMSA5IDUgMy0zIDggMTAtOS01LTN6bTIgMTh2MmgxMHYtMnoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8cGF0aCBkPSJtMzUgMzF2LTJoLTEwdjJtMTAgMCIgc3R5bGU9ImZpbGw6I2Y0NjA5ZCIvPgogPHBhdGggZD0ibTEyIDIwIDExLTktNCA4IDUgMy0xMCA5IDMtOHoiIHN0eWxlPSJmaWxsOiNmMWFiNDUiLz4KIDxwYXRoIGQ9Im0xMiAyMCAxMS05LTQgOCA1IDMtMTAgOSAzLTh6IiBzdHlsZT0iZmlsbDojZjNiNjRkIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"hyper,terminal,remote\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"hyper.desktop\"\nLABEL oc.launch=\"hyper.Hyper\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"hyper\"\nLABEL oc.displayname=\"hyper\"\nLABEL oc.path=\"/opt/Hyper/hyper\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/ssh\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"hyper\"\nENV APPBIN \"/opt/Hyper/hyper\"\nENV APP \"/opt/Hyper/hyper\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/hyper/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/hyper/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/hyper/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/hyper/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_impress.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1NWEwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE4MjgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjciIHkyPSI1NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmNmNWQyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0NS41MDEiIHgyPSI0NS41MDEiIHkxPSI3LjEwNTUiIHkyPSIyOS44OTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlZmNlYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2Y5ZTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzUiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSIzOC4wNjYiIGN5PSIyNi4xOTIiIHI9IjI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0uOCAzZS04IC0xLjkyNjVlLTggLS45NDAzNCA4MC40NTMgMzguNjI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWUzNTNjIiBzdG9wLW9wYWNpdHk9Ii40ODUzOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxOTE5MTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI3NTYiIHgyPSI3NTYiIHkxPSItODYwLjY0IiB5Mj0iLTg3Ni42NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjM2MzYgMCAwIDEuMzYzNiAtOTg5LjM2IDEyMTUuNCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2QzNjExOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMDllNmYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iMTUyLjMzIiBjeT0iLTc1NC42NCIgcj0iMTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMTU3ZS02IC4wOTAyNDcgLTEuMDY5MyAwIC03NzUgMzQuNTY2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9Ii41MDE5NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI4MTIiIHgyPSI4MTIiIHkxPSItMTA3NS42IiB5Mj0iLTExMTUuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNSAwIDAgLjU0OTk4IC0zNjIgNjMzLjU5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJhZDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNjMzYSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9InAiIHgxPSI1MjMiIHgyPSI1MjMiIHkxPSItMTA2NC42IiB5Mj0iLTEwODguNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjg1NzEgMCAwIC40MTY2NyAtMTE1LjQzIDQ4MS42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYjNiM2IzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9InEiIHgxPSI3MTQiIHgyPSI3MTQiIHkxPSItMTA2My42IiB5Mj0iLTEwODMuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjU2NDEgMCAwIC41IC0xNDkuMDggNTY5LjgyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9Ii41ODgyNCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjg2Mjc0IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iciIgeDE9Ijg4OSIgeDI9Ijg4MS43NyIgeTE9Ii0xMDU0LjYiIHkyPSItMTA0NC42IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC42NDIzNyAwIDAgLjYzODc2IC01MzEuMDkgNzA0LjI0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMThhMzAzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzEwNjgwMiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJhIiB4PSItLjA1MiIgeT0iLS4wNzA5MDkiIHdpZHRoPSIxLjEwNCIgaGVpZ2h0PSIxLjE0MTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNjUwMDAyNSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8cGF0aCBkPSJtMzMuMDEyIDM5LTEuNDg0NCAxLjQ4NDQtMC41MzkwNi0wLjQ4NDM4aC0yLjU3MDNsMS43NjE3IDEuODMwMS0wLjE2OTkyIDAuMTY5OTJoLTEuMDA5OHYxLjAwOThsLTUuOTkyMiA1Ljk5MDJoMy45MDIzbDQuMzM1OS01aDEuMDI1NGw0LjgxODQgNWgzLjkwMjNsLTUuOTkyMi01LjM5MDZ2LTEuNjA5NGgtMS43ODkxbC0wLjEyODkxLTAuMTE3MTkgMi41LTIuODgyOGgtMi41NzAzeiIgb3BhY2l0eT0iLjUiLz4KIDxwYXRoIGQ9Im0xOC4zNjQgMjBoMjQuNzMyYzAuNzU1NDUgMCAzLjkwNDQgMy4yNDQ2IDMuOTA0NCA0djE2LjQ1NWMwIDAuNzU1NDUtMC42MDgxOSAxLjM2MzYtMS4zNjM2IDEuMzYzNmgtMjcuMjczYy0wLjc1NTQ1IDAtMS4zNjM2LTAuNjA4MTktMS4zNjM2LTEuMzYzNnYtMTkuMDkxYzAtMC43NTU0NSAwLjYwODE5LTEuMzYzNiAxLjM2MzYtMS4zNjM2eiIgZmlsbD0idXJsKCNqKSIvPgogPHBhdGggZD0ibTE4LjM2NCAyMGgyNC43MzJjMC43NTU0NSAwIDMuOTA0NCAzLjI3MTYgMy45MDQ0IDQuMDMzM3YxNi41OTJjMCAwLjc2MTczLTAuNjA4MTkgMS4zNzQ5LTEuMzYzNiAxLjM3NDloLTI3LjI3M2MtMC43NTU0NSAwLTEuMzYzNi0wLjYxMzIzLTEuMzYzNi0xLjM3NDl2LTE5LjI1YzAtMC43NjE3MyAwLjYwODE5LTEuMzc0OSAxLjM2MzYtMS4zNzQ5eiIgZmlsdGVyPSJ1cmwoI2EpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0xOC4zNjQgMjBoMjQuNzMyYzAuNzU1NDUgMCAzLjkwNDQgMy4yNzE2IDMuOTA0NCA0LjAzMzN2MTYuNTkyYzAgMC43NjE3My0wLjYwODE5IDEuMzc0OS0xLjM2MzYgMS4zNzQ5aC0yNy4yNzNjLTAuNzU1NDUgMC0xLjM2MzYtMC42MTMyMy0xLjM2MzYtMS4zNzQ5di0xOS4yNWMwLTAuNzYxNzMgMC42MDgxOS0xLjM3NDkgMS4zNjM2LTEuMzc0OXoiIGZpbGw9InVybCgjbCkiLz4KIDxwYXRoIGQ9Im0xNi45MTQgNDdoMzAuMTcxYzAuNTA2NDkgMCAwLjkxNDI3IDAuNDAyMTMgMC45MTQyNyAwLjkwMTh2MC44NjMwN2MwIDAuNDk5NjctMC40MDc3NyAwLjkwMTgtMC45MTQyNyAwLjkwMThoLTMwLjE3MWMtMC41MDY0OSAwLTAuOTE0MjctMC40MDIxMy0wLjkxNDI3LTAuOTAxOHYtMC44NjMwN2MwLTAuNDk5NjcgMC40MDc3Ny0wLjkwMTggMC45MTQyNy0wLjkwMTh6IiBmaWxsPSJ1cmwoI2kpIiBvcGFjaXR5PSIuNCIvPgogPGcgZmlsbD0iI2ZmZiI+CiAgPHJlY3QgeD0iMjAiIHk9IjIzIiB3aWR0aD0iMjQiIGhlaWdodD0iMyIgb3BhY2l0eT0iLjM1Ii8+CiAgPHJlY3QgeD0iMjQiIHk9IjI4IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBvcGFjaXR5PSIuMzUiLz4KICA8ZWxsaXBzZSBjeD0iMjEiIGN5PSIyOSIgcng9IjEiIHJ5PSIxIiBvcGFjaXR5PSIuMzUiLz4KICA8cmVjdCB4PSIyNCIgeT0iMzIiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIG9wYWNpdHk9Ii4zNSIvPgogIDxlbGxpcHNlIGN4PSIyMSIgY3k9IjMzIiByeD0iMSIgcnk9IjEiIG9wYWNpdHk9Ii4zNSIvPgogIDxyZWN0IHg9IjI0IiB5PSIzNiIgd2lkdGg9IjgiIGhlaWdodD0iMS45OTk5IiBvcGFjaXR5PSIuMzUiLz4KICA8ZWxsaXBzZSBjeD0iMjEiIGN5PSIzNyIgcng9IjEiIHJ5PSIxIiBvcGFjaXR5PSIuMzUiLz4KIDwvZz4KIDxyZWN0IHg9IjM0IiB5PSIyOCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiBmaWxsPSJ1cmwoI3ApIi8+CiA8cmVjdCB4PSIzNCIgeT0iMjgiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0idXJsKCNxKSIvPgogPHBhdGggZD0ibTM2IDM2LjM1MyAyLTQgMi42NjY3IDEuMzMzMyAyLTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNyKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZCkiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8cGF0aCBkPSJtNTYuODk2IDI5Ljg5Ni0yMi43OTEtMjIuNzkxYTI1IDI1IDAgMCAwIDIyLjc5MSAyMi43OTF6IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"impress,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-impress.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-impress\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--impress\"\nLABEL oc.name=\"impress\"\nLABEL oc.displayname=\"Impress\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroenabled.12;application/vnd.oasis.opendocument.presentation-flat-xml;application/x-iwork-keynote-sffkey;\"\nLABEL oc.fileextensions=\"odp;pot;potm;potx;pps;ppsx;ppt;pptx;pptm\"\nLABEL oc.legacyfileextensions=\"odp\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"impress\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--impress\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/impress/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/impress/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/impress/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/impress/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y inkscape inkscape-lang && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_inkscape.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iU2tldGNoIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMDEuNTMiIHgyPSIxMDEuNTMiIHkxPSIxOC44ODgiIHkyPSIxODMuNTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMy41MjIzIDAgMCAzLjUyMjMgMTYyLjM4IDE2Ny4wOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkN2Q3ZDciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzU3NjMiIHk9Ii0uMDM2MjQiIHdpZHRoPSIxLjA3MTUiIGhlaWdodD0iMS4wNzI1IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3LjYyOTQwMyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjU0MC4xMSIgeDI9IjU0MC4xMSIgeTE9IjIuMDA3OCIgeTI9IjEwMjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMi4wMDA0IDEuOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iLjUwNzY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0YTRhNGEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjEwNDY4OCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtLjYxNDI0IC0uNjc4KSI+CiAgPGcgaWQ9InNoYWRvdyIgdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMiAyKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPjwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjAwMDcgMCAwIDEuMDAwNyAtLjkyNDYzIC4xNzU5OCkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTk2Ny45NiAzOTIuNDJjLTEuMDk1Ny00LjMzMy0yLjM0MDgtOC45NjQ4LTMuNjM1Ny0xMy41NDctMC45OTYxLTMuMzg2Ny0xLjk5MjItNi44MjMyLTMuMTM3Ny0xMC40NTktMS41OTM4LTUuMTI5OS0zLjM4NjctMTAuNDU5LTUuMjc5My0xNS43ODgtNi40MjQ4LTE4LjE3OS0xNC4wOTUtMzUuOTA5LTIzLjA2LTUzLjQ0LTMuNzg1MS03LjM3MTEtNy45MTg5LTE0Ljg5Mi0xMi4yNTItMjIuMzEyLTIwLjIyMS0zNC4zNjUtNDUuNjIxLTY2LjkzNy03Ni4wNTItOTcuMzY4LTcyLjMxNi03Mi4zMTYtMTU2LjU0LTExNi4xOS0yNTIuNjYtMTMxLjUzLTE2LjE4Ny0yLjU4OTgtMzIuNjcyLTQuMzgyOC00OS44NTQtNS4zMjkxLTkuNjYyMS0wLjU0Nzg1LTE5Ljc3Mi0wLjg0NjY4LTI5Ljk4Mi0wLjg0NjY4LTkuMzEzNSAwLTE4LjUyNyAwLjI0OTAyLTI3Ljc5MSAwLjc0NzA3LTExNy44OSA2LjA3NjItMjE5LjQ0IDUxLjc0Ny0zMDQuNjYgMTM2Ljk2cS0xMzcuNzEgMTM3LjcxLTEzNy43MSAzMzIuNDVjMCAxMjkuODQgNDUuOTIgMjQwLjcxIDEzNy43MSAzMzIuNSA1Ni40NzkgNTYuNDI5IDEyMC4wOCA5NS41MjUgMTkwLjM1IDExNy4wOSAzNi42MDYgMTEuMjA2IDc0LjUwOCAxNy43OCAxMTQuMyAxOS44NzJoMC4zOTg0NGM4LjQ2NjggMC40NDgzIDE2LjUzNSAwLjY5NzMgMjQuNDA0IDAuNjk3M2gyLjk4ODNjMTAuMjYgMCAyMC40Mi0wLjI5ODggMjkuOTgyLTAuNzk2OSAyLjQ5MDItMC4xNDk0IDQuNzMxNC0wLjI5ODggNi45MjI4LTAuNDQ4MiAyMC4xMjEtMS40NDQzIDM5Ljc0NC00LjAzNDIgNTguNDcxLTcuNjY5OSA3LjkxODktMS41NDQgMTUuNzM4LTMuMjg3MiAyMy4zMDktNS4xMjk5IDgwLjQ4NC0yMC4yMjEgMTUxLjU2LTYxLjM1OSAyMTMuODEtMTIzLjYyIDQ4LjQxLTQ4LjQxIDg0LjA3LTEwMi4xIDEwNi45My0xNjEuMTcgMTguMzc4LTQ3LjQ2NCAyOC41MzgtOTguNDE0IDMwLjQzMS0xNTIuOSAwLjE5OTItNi4wMjY0IDAuMjk4OS0xMi4yMDIgMC4yOTg5LTE4LjQyOHYtMS45OTIyLTAuOTk2MDljLTAuMTk5My00MC40OTEtNC45MzA3LTc5LjE4OS0xNC4yNDQtMTE2LjU0eiIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiLz4KICAgIDxwYXRoIGQ9Im05NjcuOTYgMzkyLjQyYy0xLjA5NTctNC4zMzMtMi4zNDA4LTguOTY0OC0zLjYzNTctMTMuNTQ3LTAuOTk2MS0zLjM4NjctMS45OTIyLTYuODIzMi0zLjEzNzctMTAuNDU5LTEuNTkzOC01LjEyOTktMy4zODY3LTEwLjQ1OS01LjI3OTMtMTUuNzg4LTYuNDI0OC0xOC4xNzktMTQuMDk1LTM1LjkwOS0yMy4wNi01My40NC0zLjc4NTEtNy4zNzExLTcuOTE4OS0xNC44OTItMTIuMjUyLTIyLjMxMi0yMC4yMjEtMzQuMzY1LTQ1LjYyMS02Ni45MzctNzYuMDUyLTk3LjM2OC03Mi4zMTYtNzIuMzE2LTE1Ni41NC0xMTYuMTktMjUyLjY2LTEzMS41My0xNi4xODctMi41ODk4LTMyLjY3Mi00LjM4MjgtNDkuODU0LTUuMzI5MS05LjY2MjEtMC41NDc4NS0xOS43NzItMC44NDY2OC0yOS45ODItMC44NDY2OC05LjMxMzUgMC0xOC41MjcgMC4yNDkwMi0yNy43OTEgMC43NDcwNy0xMTcuODkgNi4wNzYyLTIxOS40NCA1MS43NDctMzA0LjY2IDEzNi45NnEtMTM3LjcxIDEzNy43MS0xMzcuNzEgMzMyLjQ1YzAgMTI5Ljg0IDQ1LjkyIDI0MC43MSAxMzcuNzEgMzMyLjUgNTYuNDc5IDU2LjQyOSAxMjAuMDggOTUuNTI1IDE5MC4zNSAxMTcuMDkgMzYuNjA2IDExLjIwNiA3NC41MDggMTcuNzggMTE0LjMgMTkuODcyaDAuMzk4NDRjOC40NjY4IDAuNDQ4MyAxNi41MzUgMC42OTczIDI0LjQwNCAwLjY5NzNoMi45ODgzYzEwLjI2IDAgMjAuNDItMC4yOTg4IDI5Ljk4Mi0wLjc5NjkgMi40OTAyLTAuMTQ5NCA0LjczMTQtMC4yOTg4IDYuOTIyOC0wLjQ0ODIgMjAuMTIxLTEuNDQ0MyAzOS43NDQtNC4wMzQyIDU4LjQ3MS03LjY2OTkgNy45MTg5LTEuNTQ0IDE1LjczOC0zLjI4NzIgMjMuMzA5LTUuMTI5OSA4MC40ODQtMjAuMjIxIDE1MS41Ni02MS4zNTkgMjEzLjgxLTEyMy42MiA0OC40MS00OC40MSA4NC4wNy0xMDIuMSAxMDYuOTMtMTYxLjE3IDE4LjM3OC00Ny40NjQgMjguNTM4LTk4LjQxNCAzMC40MzEtMTUyLjkgMC4xOTkyLTYuMDI2NCAwLjI5ODktMTIuMjAyIDAuMjk4OS0xOC40Mjh2LTEuOTkyMi0wLjk5NjA5Yy0wLjE5OTMtNDAuNDkxLTQuOTMwNy03OS4xODktMTQuMjQ0LTExNi41NHoiIGZpbGw9InVybCgjYSkiLz4KICAgPC9nPgogIDwvZz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjA5NzMgMCAwIDEuMDk3MyAtNTEuNTQ4IC01Ni4zOTYpIiBkPSJtNTA5Ljg1IDI4MS44OWMtMTUuODMzLTAuMDMyMS0zMS41NzIgNS43MjQ5LTQyLjkzNSAxNy4zNTRsLTE4OC45OSAxOTMuNDFjLTYzLjg2OCA3OS4wOTMgNDMuNDY5IDY5LjkxIDg5LjQ4MSA5Mi42OTEgMTYuNTA1IDE2Ljg3MS02My4yNTIgMjkuMjYtNDYuNzQ3IDQ2LjE0NSAxNi41MDUgMTYuODcxIDk5LjczMiAzMi40ODQgMTE2LjI2IDQ5LjM1NSAxNi41MDUgMTYuODcxLTMzLjc1OSAzNC43OTEtMTcuMjU0IDUxLjY2MiAxNi41MDUgMTYuODcxIDU0LjY0NiAwLjg3NjgzIDYxLjc5NCAzOS44MjUgNS4wOTM3IDI3LjgzMiA2OC44NjEgMTEuOTYxIDEwMC4wMS0xMC44MzQgMTYuNTA1LTE2Ljg4NS0zMS41NTItMTUuMjMtMTUuMDQ3LTMyLjEwMSA0MS4wNDUtNDEuOTc0IDc5LjI1LTE1LjMyMiA5My4yOTMtNTcuMzggNi45MzY5LTIwLjc4My02MC40NzEtMzEuOTgyLTQzLjkzOC00OC44NTMgNDcuNDg5LTI3LjczNCAyMTEuNi00NS44MDYgMTMzLjcyLTEyMy42OWwtMTk1LjkxLTIwMC4yM2MtMTEuOTgxLTExLjUwMy0yNy45MDQtMTcuMzIzLTQzLjczNy0xNy4zNTR6bTEuNjA1IDE4LjM1OGMxMS4zMDQgMC4wNTk3IDIyLjU4NCA0LjMyMTkgMzAuNjk2IDEyLjUzOWw3NC44MzUgNzUuOTM4YzcuMDkxNyA3LjI0NjUgNi45Nzc0IDIxLjI0MSAzLjAwOTQgMjUuMjc5bC0zNy4xMTYtMjkuNjkzLTcuMzIzIDQ0LjAzOC0zMC45OTctMTYuMzUxLTQ5Ljc1NiAzMS4yOTgtMTYuNDUyLTY2LjEwNy0yNi42ODQgNDYuMTQ1aC00MC43MjhjLTE2LjYzMiAwLTE4LjYyMy0yMS4xMDItMy41MTEtMzYuMjE0IDI2LjM5Ny0yOC40OTQgNTYuNjY3LTU3LjUwNCA3My4xMjktNzQuMzMzIDguMjczNy04LjQ1NjYgMTkuNTkzLTEyLjU5OSAzMC44OTctMTIuNTM5em0tODkuNzgyIDI5NS41M2M1LjA1MTUgMy4xMzc4IDgxLjQ0MiAxOC42NzMgMTAwLjExIDIxLjc2OCA2LjQ3MjYgMS4zNjQ5IDEuODk4OSA4LjAzNjctNy4wMjIgMTIuNTM5LTIwLjEyMSA1LjM0Ny0xMTcuNzItMzQuMzA4LTkzLjA5Mi0zNC4zMDh6bTI5Ny4xMyA1My4xNjdjLTE1LjM3MiAwLjUyOTQxLTMwLjUzIDguMzQ3Mi0zNC43MDkgMjMuMDcyIDAgOS41OTY0IDcwLjYyMiAxNS45NDUgNzAuNjIyLTIuMjA2OS01LjAzNzQtMTQuNTc3LTIwLjU0LTIxLjM5NS0zNS45MTMtMjAuODY1em0tMzI0LjIyIDQxLjUzYy0yMi4xNTktMC4yMDU0NC00OC4xMDUgMTYuMDQ3LTI4Ljk5MSAzMi42MDIgMTYuNzQ0IDE0LjQ3OSA0Mi42MDUtMy42NjkxIDUwLjM1OC0yMy44NzUtNC41NjI5LTYuMDYyOC0xMi42OTYtOC42NDctMjEuMzY3LTguNzI3NHptMjgwLjU4IDEuMzA0MWMtMjEuNTg1IDE5LjM2MiAyLjM5OTEgMzguOTkyIDIzLjY3NCAyNi40ODMgNC43NDE5LTQuODEyMi0wLjEwNTYxLTIxLjY3MS0yMy42NzQtMjYuNDgzeiIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMiIgc3Ryb2tlLXdpZHRoPSI1MC4zNDUiLz4KICA8cGF0aCBkPSJtNTA3LjkgMjQxLjk0Yy0xNy4zNzMtMC4wMzUyLTM0LjY0NCA2LjI4MTgtNDcuMTExIDE5LjA0M2wtMjA3LjM4IDIxMi4yMmMtNzAuMDgxIDg2Ljc4NiA0Ny42OTcgNzYuNzExIDk4LjE4NSAxMDEuNzEgMTguMTExIDE4LjUxMi02OS40MDUgMzIuMTA2LTUxLjI5NCA1MC42MzQgMTguMTExIDE4LjUxMiAxMDkuNDMgMzUuNjQ0IDEyNy41NyA1NC4xNTYgMTguMTExIDE4LjUxMi0zNy4wNDMgMzguMTc2LTE4LjkzMyA1Ni42ODggMTguMTExIDE4LjUxMiA1OS45NjIgMC45NjIxMiA2Ny44MDUgNDMuNjk5IDUuNTg5MiAzMC41NCA3NS41NTkgMTMuMTI0IDEwOS43NC0xMS44ODggMTguMTExLTE4LjUyNy0zNC42MjItMTYuNzExLTE2LjUxMS0zNS4yMjMgNDUuMDM3LTQ2LjA1NyA4Ni45NTktMTYuODEzIDEwMi4zNy02Mi45NjIgNy42MTE3LTIyLjgwNC02Ni4zNTQtMzUuMDkzLTQ4LjIxMi01My42MDYgNTIuMTA5LTMwLjQzMiAyMzIuMTktNTAuMjYxIDE0Ni43My0xMzUuNzJsLTIxNC45Ny0yMTkuNzFjLTEzLjE0Ny0xMi42MjItMzAuNjE4LTE5LjAwOC00Ny45OTItMTkuMDQzem0xLjc2MTIgMjAuMTQzYzEyLjQwNCAwLjA2NTUgMjQuNzgxIDQuNzQyNCAzMy42ODIgMTMuNzU5bDgyLjExNCA4My4zMjVjNy43ODE2IDcuOTUxNCA3LjY1NjIgMjMuMzA3IDMuMzAyMiAyNy43MzhsLTQwLjcyNy0zMi41ODItOC4wMzUzIDQ4LjMyMi0zNC4wMTMtMTcuOTQyLTU0LjU5NiAzNC4zNDMtMTguMDUyLTcyLjUzOC0yOS4yNzkgNTAuNjM0aC00NC42OWMtMTguMjUgMC0yMC40MzUtMjMuMTU0LTMuODUyNS0zOS43MzYgMjguOTY1LTMxLjI2NSA2Mi4xNzktNjMuMDk4IDgwLjI0My04MS41NjQgOS4wNzg1LTkuMjc5MiAyMS40OTktMTMuODI1IDMzLjkwMi0xMy43NTl6bS05OC41MTUgMzI0LjI3YzUuNTQyOCAzLjQ0MyA4OS4zNjQgMjAuNDg5IDEwOS44NSAyMy44ODYgNy4xMDIyIDEuNDk3NyAyLjA4MzYgOC44MTg0LTcuNzA1MSAxMy43NTktMjIuMDc5IDUuODY3MS0xMjkuMTctMzcuNjQ1LTEwMi4xNS0zNy42NDV6bTMyNi4wNCA1OC4zMzljLTE2Ljg2OCAwLjU4MDkxLTMzLjUgOS4xNTkyLTM4LjA4NSAyNS4zMTcgMCAxMC41MyA3Ny40OTEgMTcuNDk2IDc3LjQ5MS0yLjQyMTYtNS41Mjc0LTE1Ljk5NS0yMi41MzgtMjMuNDc2LTM5LjQwNi0yMi44OTV6bS0zNTUuNzYgNDUuNTdjLTI0LjMxNS0wLjIyNTQyLTUyLjc4NSAxNy42MDgtMzEuODExIDM1Ljc3NCAxOC4zNzMgMTUuODg3IDQ2Ljc0OS00LjAyNiA1NS4yNTctMjYuMTk3LTUuMDA2OC02LjY1MjYtMTMuOTMxLTkuNDg4MS0yMy40NDYtOS41NzY0em0zMDcuODcgMS40MzFjLTIzLjY4NCAyMS4yNDUgMi42MzI0IDQyLjc4NSAyNS45NzcgMjkuMDU5IDUuMjAzMi01LjI4MDMtMC4xMTU4OC0yMy43NzktMjUuOTc3LTI5LjA1OXoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iNTUuMjQyIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"inkscape,inkscape\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.inkscape.Inkscape.desktop\"\nLABEL oc.launch=\"org.inkscape.Inkscape.Inkscape\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"inkscape\"\nLABEL oc.displayname=\"inkscape\"\nLABEL oc.path=\"/usr/bin/inkscape\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/svg+xml;image/svg+xml-compressed;application/vnd.corel-draw;application/pdf;application/postscript;image/x-eps;application/illustrator;image/cgm;image/x-wmf;application/x-xccx;application/x-xcgm;application/x-xcdt;application/x-xsk1;application/x-xcmx;image/x-xcdr;application/visio;application/x-visio;application/vnd.visio;application/visio.drawing;application/vsd;application/x-vsd;image/x-vsd;\"\nLABEL oc.fileextensions=\"ai;cdr\"\nLABEL oc.legacyfileextensions=\"ai;cdr\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"inkscape\"\nENV APPBIN \"/usr/bin/inkscape\"\nENV APP \"/usr/bin/inkscape\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/inkscape/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/inkscape/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/inkscape/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/inkscape/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.20.04:$TAG\nUSER root\nRUN add-apt-repository ppa:mozillateam/ppa\nCOPY etc/apt/preferences.d/mozilla-firefox /etc/apt/preferences.d/mozilla-firefox\nRUN apt-get update && apt-get install --no-install-recommends --yes firefox && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes sudo && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes build-essential python3.9 python3-pip python-is-python3 curl libcurl4-openssl-dev libssl-dev firefox wget && apt-get clean\nRUN pip3 install torch\nRUN pip3 install jupyterlab\nRUN pip install jupyterlab-nvdashboard\nRUN # jupyter labextension install jupyterlab-nvdashboard\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"jupyter.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCA0NCA1MSIgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpmaWdtYT0iaHR0cDovL3d3dy5maWdtYS5jb20vZmlnbWEvbnMiPgo8dGl0bGU+R3JvdXAuc3ZnPC90aXRsZT4KPGRlc2M+Q3JlYXRlZCB1c2luZyBGaWdtYSAwLjkwPC9kZXNjPgo8ZyBpZD0iQ2FudmFzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY0MCAtMjQ1MykiIGZpZ21hOnR5cGU9ImNhbnZhcyI+CjxnIGlkPSJHcm91cCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9Ikdyb3VwIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0iR3JvdXAiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGg5IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQwLjU0IDI0NzQuMzYpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTAgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGgxX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDUuNjggMjQ3NC4zNykiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxMSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDJfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY1My4zOSAyNDc0LjI2KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDEyIGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoM19maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjYwLjQzIDI0NzQuMzkpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTMgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg0X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NjcuNTUgMjQ3Mi41NCkiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDVfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3Mi40NyAyNDc0LjI5KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE1IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoNl9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjc5Ljk4IDI0NzQuMjQpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNiBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDdfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3My40OCAyNDUzLjY5KSIgZmlsbD0iIzc2NzY3NyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE3IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoOF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQzLjIxIDI0ODQuMjcpIiBmaWxsPSIjRjM3NzI2IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTggZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg5X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjEgMjQ1Ny44OCkiIGZpbGw9IiNGMzc3MjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxOSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDEwX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjggMjQ5Ni4wOSkiIGZpbGw9IiM5RTlFOUUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgyMCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDExX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDEuODcgMjQ1OC40MykiIGZpbGw9IiM2MTYyNjIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxkZWZzPgo8cGF0aCBpZD0icGF0aDBfZmlsbCIgZD0iTSAxLjc0NDk4IDUuNDc1MzNDIDEuNzQ0OTggNy4wMzMzNSAxLjYyMDM0IDcuNTQwODIgMS4yOTk4MyA3LjkxNDc0QyAwLjk0MzExOSA4LjIzNTk1IDAuNDgwMDI0IDguNDEzNTggMCA4LjQxMzMxTCAwLjEyNDY0MiA5LjMwMzZDIDAuODY4ODQgOS4zMTM2NiAxLjU5MDk1IDkuMDUwNzggMi4xNTQ1MiA4LjU2NDY2QyAyLjQ1Nzc1IDguMTk0ODcgMi42ODM0IDcuNzY3ODEgMi44MTggNy4zMDg5M0MgMi45NTI2MSA2Ljg1MDA1IDIuOTkzNDEgNi4zNjg3NiAyLjkzNzk4IDUuODkzNzdMIDIuOTM3OTggMEwgMS43NDQ5OCAwTCAxLjc0NDk4IDUuNDM5NzJMIDEuNzQ0OTggNS40NzUzM1oiLz4KPHBhdGggaWQ9InBhdGgxX2ZpbGwiIGQ9Ik0gNS41MDIwNCA0Ljc2MzA5QyA1LjUwMjA0IDUuNDMwODEgNS41MDIwNCA2LjAyNzMxIDUuNTU1NDUgNi41NDM2OEwgNC40OTYgNi41NDM2OEwgNC40MjQ3OCA1LjQ4NDIzQyA0LjIwMzE4IDUuODU5MDkgMy44ODYyNyA2LjE2ODU4IDMuNTA2MjggNi4zODEyNUMgMy4xMjYyOCA2LjU5MzkyIDIuNjk2NzUgNi43MDIxOSAyLjI2MTM1IDYuNjk1MDNDIDEuMjI4NjEgNi42OTUwMyAwIDYuMTM0MTUgMCAzLjg0NjA4TCAwIDAuMDQ0NTE0OUwgMS4xOTMgMC4wNDQ1MTQ5TCAxLjE5MyAzLjYwNTdDIDEuMTkzIDQuODQzMjIgMS41NzU4MyA1LjY3MTE5IDIuNjUzMDkgNS42NzExOUMgMi44NzQ3MiA1LjY3MzU4IDMuMDk0NTkgNS42MzE2OCAzLjI5OTgyIDUuNTQ3OTZDIDMuNTA1MDUgNS40NjQyNCAzLjY5MTQ5IDUuMzQwMzkgMy44NDgyMiA1LjE4MzY2QyA0LjAwNDk0IDUuMDI2OTQgNC4xMjg4IDQuODQwNDkgNC4yMTI1MiA0LjYzNTI3QyA0LjI5NjIzIDQuNDMwMDQgNC4zMzgxMyA0LjIxMDE2IDQuMzM1NzUgMy45ODg1M0wgNC4zMzU3NSAwTCA1LjUyODc0IDBMIDUuNTI4NzQgNC43Mjc0OEwgNS41MDIwNCA0Ljc2MzA5WiIvPgo8cGF0aCBpZD0icGF0aDJfZmlsbCIgZD0iTSAwLjA1MzQxNzggMi4yNzI2NEMgMC4wNTM0MTc4IDEuNDQ0NjYgMC4wNTM0MTc4IDAuNzY4MDM2IDAgMC4xNTM3MzFMIDEuMDY4MzYgMC4xNTM3MzFMIDEuMTIxNzcgMS4yNjY2QyAxLjM1OTggMC44NjQ1MzUgMS43MDI0NyAwLjUzNDU5NCAyLjExMzI1IDAuMzExOTU0QyAyLjUyNDA0IDAuMDg5MzE0NSAyLjk4NzU0IC0wLjAxNzY3ODYgMy40NTQzNSAwLjAwMjM4MDk1QyA1LjAzOTA4IDAuMDAyMzgwOTUgNi4yMzIwOCAxLjMyODkyIDYuMjMyMDggMy4zMDUzOEMgNi4yMzIwOCA1LjYzNzk2IDQuNzk4NyA2Ljc5NTM1IDMuMjQ5NTggNi43OTUzNUMgMi44NTMwOSA2LjgxMzA0IDIuNDU4NzQgNi43MjgxIDIuMTA0NjkgNi41NDg3NEMgMS43NTA2NCA2LjM2OTM3IDEuNDQ4ODggNi4xMDE2NiAxLjIyODYxIDUuNzcxNTFMIDEuMjI4NjEgNS43NzE1MUwgMS4yMjg2MSA5LjMzMjY5TCAwLjA1MzQxNzggOS4zMzI2OUwgMC4wNTM0MTc4IDIuMjk5MzVMIDAuMDUzNDE3OCAyLjI3MjY0Wk0gMS4yMjg2MSA0LjAwODcyQyAxLjIzMTg0IDQuMTcwMjYgMS4yNDk3MiA0LjMzMTE3IDEuMjgyMDMgNC40ODk0OEMgMS4zODMwNCA0Ljg4NDc5IDEuNjEyOTkgNS4yMzUxMyAxLjkzNTQ4IDUuNDg1MDZDIDIuMjU3OTggNS43MzUgMi42NTQ2MSA1Ljg3MDI2IDMuMDYyNjIgNS44Njk0NEMgNC4zMTc5NCA1Ljg2OTQ0IDUuMDU2ODkgNC44NDU2IDUuMDU2ODkgMy4zNTg4QyA1LjA1Njg5IDIuMDU4OTcgNC4zNjI0NiAwLjk0NjA5NiAzLjEwNzE0IDAuOTQ2MDk2QyAyLjYxMDM2IDAuOTg2Nzc3IDIuMTQ1NDggMS4yMDcyNiAxLjc5OTY1IDEuNTY2MkMgMS40NTM4MiAxLjkyNTE0IDEuMjUwNzkgMi4zOTc5IDEuMjI4NjEgMi44OTU4NUwgMS4yMjg2MSA0LjAwODcyWiIvPgo8cGF0aCBpZD0icGF0aDNfZmlsbCIgZD0iTSAxLjMxNzY0IDAuMDE3ODA1OUwgMi43NTEwMiAzLjg1NDk5QyAyLjkwMjM3IDQuMjgyMzMgMy4wNjI2MiA0Ljc5ODcgMy4xNjk0NiA1LjE4MTUzQyAzLjI5NDEgNC43ODk4IDMuNDI3NjQgNC4yOTEyMyAzLjU4NzkgMy44MjgyOEwgNC44ODc3MyAwLjAxNzgwNTlMIDYuMTQzMDUgMC4wMTc4MDU5TCA0LjM2MjQ2IDQuNjQ3MzVDIDMuNDcyMTYgNi44NzMwOSAyLjkyOTA4IDguMDIxNTggMi4xMSA4LjcxNjAxQyAxLjY5NzQ1IDkuMDkyODMgMS4xOTQ0OCA5LjM1NjU4IDAuNjQ5OTE3IDkuNDgxNjZMIDAuMzU2MTE5IDguNDg0NTNDIDAuNzM2ODg2IDguMzU5NDIgMS4wOTAzOCA4LjE2MzA0IDEuMzk3NzcgNy45MDU4NEMgMS44MzIxIDcuNTUxODggMi4xNzY3OCA3LjEwMDQ0IDIuNDAzOCA2LjU4ODJDIDIuNDUyMzkgNi40OTk0OSAyLjQ4NTUxIDYuNDAzMTQgMi41MDE3MyA2LjMwMzNDIDIuNDkxNjEgNi4xOTU4NiAyLjQ2NDU3IDYuMDkwNyAyLjQyMTYxIDUuOTkxN0wgMCAwTCAxLjI5OTgzIDBMIDEuMzE3NjQgMC4wMTc4MDU5WiIvPgo8cGF0aCBpZD0icGF0aDRfZmlsbCIgZD0iTSAyLjE5MDEzIDBMIDIuMTkwMTMgMS44Njk2MkwgMy44OTk1IDEuODY5NjJMIDMuODk5NSAyLjc1OTkyTCAyLjE5MDEzIDIuNzU5OTJMIDIuMTkwMTMgNi4yNjc2OUMgMi4xOTAxMyA3LjA2ODk2IDIuNDIxNjEgNy41MzE5MSAzLjA4MDQzIDcuNTMxOTFDIDMuMzE0NDIgNy41MzU3NCAzLjU0Nzg5IDcuNTA4OCAzLjc3NDg2IDcuNDUxNzlMIDMuODI4MjggOC4zNDIwOEMgMy40ODc5NCA4LjQ1OTk5IDMuMTI4ODEgOC41MTQzMSAyLjc2ODgyIDguNTAyMzRDIDIuNTMwNDIgOC41MTcyNiAyLjI5MTYxIDguNDgwNDMgMi4wNjg3OCA4LjM5NDM3QyAxLjg0NTk1IDguMzA4MzEgMS42NDQzOCA4LjE3NTA2IDEuNDc3ODkgOC4wMDM3N0MgMS4xMTUyNSA3LjUxODczIDAuOTQ5ODI2IDYuOTE0MzEgMS4wMTQ5NCA2LjMxMjIxTCAxLjAxNDk0IDIuNzUxMDJMIDAgMi43NTEwMkwgMCAxLjg2MDcyTCAxLjAzMjc0IDEuODYwNzJMIDEuMDMyNzQgMC4yNzU5OTJMIDIuMTkwMTMgMFoiLz4KPHBhdGggaWQ9InBhdGg1X2ZpbGwiIGQ9Ik0gMS4xNzcxNiAzLjU3ODk5QyAxLjE1MyAzLjg4MDkzIDEuMTk0NjggNC4xODQ1MSAxLjI5OTMzIDQuNDY4NzZDIDEuNDAzOTggNC43NTMwMSAxLjU2OTEgNS4wMTExNCAxLjc4MzI5IDUuMjI1MzJDIDEuOTk3NDcgNS40Mzk1MSAyLjI1NTYgNS42MDQ2MyAyLjUzOTg1IDUuNzA5MjhDIDIuODI0MSA1LjgxMzkzIDMuMTI3NjggNS44NTU2MSAzLjQyOTYyIDUuODMxNDVDIDQuMDQwMzMgNS44NDUxMSA0LjY0NzA2IDUuNzI5ODMgNS4yMTAyMSA1LjQ5MzEzTCA1LjQxNDk4IDYuMzgzNDNDIDQuNzIzOTMgNi42NjgwOSAzLjk4MDg1IDYuODA0NTggMy4yMzM3NSA2Ljc4NDA2QyAyLjc5ODIxIDYuODEzODggMi4zNjEzOCA2Ljc0OTE0IDEuOTUzMjIgNi41OTQyN0MgMS41NDUwNSA2LjQzOTQxIDEuMTc1MjIgNi4xOTgwOSAwLjg2OTA3MSA1Ljg4Njg4QyAwLjU2MjkyOCA1LjU3NTY2IDAuMzI3NzIzIDUuMjAxOSAwLjE3OTU5MSA0Ljc5MTI1QyAwLjAzMTQ1ODQgNC4zODA1OSAtMC4wMjYwOTYyIDMuOTQyNzYgMC4wMTA4NzQ4IDMuNTA3NzdDIDAuMDEwODc0OCAxLjU0OTEyIDEuMTc3MTYgMCAzLjA4MjQgMEMgNS4yMTkxMSAwIDUuNzUzMjkgMS44Njk2MiA1Ljc1MzI5IDMuMDYyNjJDIDUuNzY0NzEgMy4yNDY0NCA1Ljc2NDcxIDMuNDMwNzkgNS43NTMyOSAzLjYxNDYxTCAxLjE1MDQ2IDMuNjE0NjFMIDEuMTc3MTYgMy41Nzg5OVpNIDQuNjY3MTMgMi42ODg3QyA0LjcwMTQ5IDIuNDUwNjcgNC42ODQ0MyAyLjIwODA1IDQuNjE3MDkgMS45NzcxOEMgNC41NDk3NiAxLjc0NjMxIDQuNDMzNzIgMS41MzI1NSA0LjI3NjggMS4zNTAzMUMgNC4xMTk4NyAxLjE2ODA4IDMuOTI1NzEgMS4wMjE2IDMuNzA3MzkgMC45MjA3NDRDIDMuNDg5MDcgMC44MTk4OSAzLjI1MTY2IDAuNzY3MDA2IDMuMDExMTggMC43NjU2NTZDIDIuNTIyMDEgMC44MDEwNjQgMi4wNjM3MSAxLjAxNzg4IDEuNzI2MDkgMS4zNzM2MkMgMS4zODg0NyAxLjcyOTM1IDEuMTk1ODggMi4xOTgzNSAxLjE4NjA3IDIuNjg4N0wgNC42NjcxMyAyLjY4ODdaIi8+CjxwYXRoIGlkPSJwYXRoNl9maWxsIiBkPSJNIDAuMDUzNDE3OCAyLjE5MjI4QyAwLjA1MzQxNzggMS40MjY2MyAwLjA1MzQxNzggMC43Njc4MDYgMCAwLjE2MjQwNEwgMS4wNjgzNiAwLjE2MjQwNEwgMS4wNjgzNiAxLjQzNTUzTCAxLjEyMTc3IDEuNDM1NTNDIDEuMjMzOTEgMS4wNDI1OSAxLjQ2NTYgMC42OTQzMTQgMS43ODQ2OCAwLjQzOTA0OUMgMi4xMDM3NiAwLjE4Mzc4MyAyLjQ5NDQgMC4wMzQxOTYgMi45MDIzNyAwLjAxMTA1MzhDIDMuMDE0NjYgLTAuMDAzNjg0NTkgMy4xMjgzOSAtMC4wMDM2ODQ1OSAzLjI0MDY4IDAuMDExMDUzOEwgMy4yNDA2OCAxLjEyMzkzQyAzLjEwNDYyIDEuMTA4MTcgMi45NjcyIDEuMTA4MTcgMi44MzExNCAxLjEyMzkzQyAyLjQyNyAxLjEzOTU4IDIuMDQyMzcgMS4zMDE4MiAxLjc0OTEgMS41ODAzNUMgMS40NTU4MyAxLjg1ODg3IDEuMjczOTggMi4yMzQ2MiAxLjIzNzUxIDIuNjM3NDNDIDEuMjA0MjIgMi44MTk2IDEuMTg2MzUgMy4wMDQyNSAxLjE4NDEgMy4xODk0MUwgMS4xODQxIDYuNjUyNjdMIDAuMDA4OTAyOTcgNi42NTI2N0wgMC4wMDg5MDI5NyAyLjIwMTE4TCAwLjA1MzQxNzggMi4xOTIyOFoiLz4KPHBhdGggaWQ9InBhdGg3X2ZpbGwiIGQ9Ik0gNi4wMzA1OSAyLjgzNTY1QyA2LjA2NzE1IDMuNDMzNzYgNS45MjQ4NSA0LjAyOTIxIDUuNjIxOCA0LjU0NjE1QyA1LjMxODc1IDUuMDYzMSA0Ljg2ODY5IDUuNDc4MTMgNC4zMjg5MyA1LjczODM5QyAzLjc4OTE3IDUuOTk4NjQgMy4xODQxNiA2LjA5MjMzIDIuNTkwOTcgNi4wMDc1M0MgMS45OTc3OCA1LjkyMjcyIDEuNDQzMjYgNS42NjMyNiAwLjk5ODA0OCA1LjI2MjE5QyAwLjU1MjgzNyA0Ljg2MTEzIDAuMjM3MDkgNC4zMzY2MSAwLjA5MTAzMDcgMy43NTU0NkMgLTAuMDU1MDI4NyAzLjE3NDMxIC0wLjAyNDc4OTEgMi41NjI4MyAwLjE3Nzg5NyAxLjk5ODkzQyAwLjM4MDU4MyAxLjQzNTAzIDAuNzQ2NTQxIDAuOTQ0MjIxIDEuMjI5MTUgMC41ODkwMzdDIDEuNzExNzYgMC4yMzM4NTMgMi4yODkxOCAwLjAzMDM2ODYgMi44ODc4NCAwLjAwNDUwNTQzQyAzLjI4MDM1IC0wLjAxNzA5MzIgMy42NzMyNiAwLjAzOTExNDQgNC4wNDM5NiAwLjE2OTg5NkMgNC40MTQ2NyAwLjMwMDY3NyA0Ljc1NTg3IDAuNTAzNDUzIDUuMDQ3OTQgMC43NjY1NjFDIDUuMzQgMS4wMjk2NyA1LjU3NzE4IDEuMzQ3OTIgNS43NDU4MiAxLjcwMzAxQyA1LjkxNDQ2IDIuMDU4MSA2LjAxMTI0IDIuNDQzMDMgNi4wMzA1OSAyLjgzNTY1TCA2LjAzMDU5IDIuODM1NjVaIi8+CjxwYXRoIGlkPSJwYXRoOF9maWxsIiBkPSJNIDE4LjY5NjIgNy4xMjIzOEMgMTAuNjgzNiA3LjEyMjM4IDMuNjQxMzEgNC4yNDY3MiAwIDBDIDEuNDEyODQgMy44MjA0MSAzLjk2MjE1IDcuMTE2MyA3LjMwNDc5IDkuNDQ0MDRDIDEwLjY0NzQgMTEuNzcxOCAxNC42MjMgMTMuMDE5NiAxOC42OTYyIDEzLjAxOTZDIDIyLjc2OTUgMTMuMDE5NiAyNi43NDUgMTEuNzcxOCAzMC4wODc3IDkuNDQ0MDRDIDMzLjQzMDMgNy4xMTYzIDM1Ljk3OTYgMy44MjA0MSAzNy4zOTI1IDQuMDQ4NmUtMTNDIDMzLjc2MDEgNC4yNDY3MiAyNi43NDQ1IDcuMTIyMzggMTguNjk2MiA3LjEyMjM4WiIvPgo8cGF0aCBpZD0icGF0aDlfZmlsbCIgZD0iTSAxOC42OTYyIDUuODk3MjVDIDI2LjcwODkgNS44OTcyNSAzMy43NTEyIDguNzcyOTEgMzcuMzkyNSAxMy4wMTk2QyAzNS45Nzk2IDkuMTk5MjIgMzMuNDMwMyA1LjkwMzMzIDMwLjA4NzcgMy41NzU1OUMgMjYuNzQ1IDEuMjQ3ODUgMjIuNzY5NSA0LjA0ODZlLTEzIDE4LjY5NjIgMEMgMTQuNjIzIDQuMDQ4NmUtMTMgMTAuNjQ3NCAxLjI0Nzg1IDcuMzA0NzkgMy41NzU1OUMgMy45NjIxNSA1LjkwMzMzIDEuNDEyODQgOS4xOTkyMiAwIDEzLjAxOTZDIDMuNjQxMzEgOC43NjQwMSAxMC42NDggNS44OTcyNSAxOC42OTYyIDUuODk3MjVaIi8+CjxwYXRoIGlkPSJwYXRoMTBfZmlsbCIgZD0iTSA3LjU5NTc2IDMuNTY2NTZDIDcuNjQyNzYgNC4zMTk5MiA3LjQ2NDQyIDUuMDcwMjIgNy4wODM0NyA1LjcyMTg2QyA2LjcwMjUxIDYuMzczNSA2LjEzNjE5IDYuODk2OTggNS40NTY2NiA3LjIyNTYxQyA0Ljc3NzEzIDcuNTU0MjQgNC4wMTUxNSA3LjY3MzE0IDMuMjY3ODEgNy41NjcxNkMgMi41MjA0NiA3LjQ2MTE3IDEuODIxNTggNy4xMzUxMSAxLjI2MDIxIDYuNjMwNTFDIDAuNjk4ODM5IDYuMTI1OTEgMC4zMDAzOTQgNS40NjU2MSAwLjExNTYzNyA0LjczMzc1QyAtMC4wNjkxMTkxIDQuMDAxODggLTAuMDMxODIxOSAzLjIzMTU5IDAuMjIyNzc3IDIuNTIwOTlDIDAuNDc3Mzc2IDEuODEwNCAwLjkzNzc1IDEuMTkxNjkgMS41NDUyNCAwLjc0MzY4NUMgMi4xNTI3NCAwLjI5NTY3OCAyLjg3OTg1IDAuMDM4NjU5NSAzLjYzMzk0IDAuMDA1Mzc1ODlDIDQuMTI3OTMgLTAuMDIxMDQ3MSA0LjYyMjI5IDAuMDUwMTE3MyA1LjA4ODc4IDAuMjE0ODAzQyA1LjU1NTI2IDAuMzc5NDkgNS45ODQ3MyAwLjYzNDQ3IDYuMzUyNjQgMC45NjUxNzlDIDYuNzIwNTUgMS4yOTU4OSA3LjAxOTcxIDEuNjk1ODQgNy4yMzMgMi4xNDIyQyA3LjQ0NjMgMi41ODg1NSA3LjU2OTU3IDMuMDcyNTYgNy41OTU3NiAzLjU2NjU2TCA3LjU5NTc2IDMuNTY2NTZaIi8+CjxwYXRoIGlkPSJwYXRoMTFfZmlsbCIgZD0iTSAyLjI1MDYxIDQuMzc5NDNDIDEuODE4ODYgNC4zOTEzNSAxLjM5MzIyIDQuMjc1MzUgMS4wMjcyMiA0LjA0NjAyQyAwLjY2MTIyNCAzLjgxNjY4IDAuMzcxMjA2IDMuNDg0MjQgMC4xOTM2NDEgMy4wOTA1MkMgMC4wMTYwNzYyIDIuNjk2NzkgLTAuMDQxMTA3OCAyLjI1OTM1IDAuMDI5MjgwNCAxLjgzMzIxQyAwLjA5OTY2ODYgMS40MDcwNyAwLjI5NDQ4NiAxLjAxMTI1IDAuNTg5MjMzIDAuNjk1NTQyQyAwLjg4Mzk4MSAwLjM3OTgzIDEuMjY1NSAwLjE1ODMxNiAxLjY4NTgxIDAuMDU4ODU3N0MgMi4xMDYxMSAtMC4wNDA2MDA1IDIuNTQ2NDQgLTAuMDEzNTYyMiAyLjk1MTQzIDAuMTM2NTcyQyAzLjM1NjQxIDAuMjg2NzA3IDMuNzA3OTYgMC41NTMyMzQgMy45NjE4NiAwLjkwMjYzNkMgNC4yMTU3NyAxLjI1MjA0IDQuMzYwNyAxLjY2ODcyIDQuMzc4NDIgMi4xMDAyN0MgNC4zOTUyOSAyLjY4MzggNC4xODEzMSAzLjI1MDQ0IDMuNzgyOTMgMy42NzcxNUMgMy4zODQ1NSA0LjEwMzg3IDIuODMzOTIgNC4zNTYyMyAyLjI1MDYxIDQuMzc5NDNaIi8+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"jupyter,jupyter\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.jupyter\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.20.04\"\nENV ARGS=\"--disable-factory --class=jupyter -- /usr/local/bin/startjupyter.sh\"\nLABEL oc.name=\"jupyter\"\nLABEL oc.displayname=\"jupyter\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"jupyter\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=jupyter -- /usr/local/bin/startjupyter.sh\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nCOPY startjupyter.sh /usr/local/bin/startjupyter.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/jupyter/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/jupyter/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/jupyter/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/jupyter/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN add-apt-repository ppa:mozillateam/ppa\nCOPY etc/apt/preferences.d/mozilla-firefox /etc/apt/preferences.d/mozilla-firefox\nRUN apt-get update && apt-get install --no-install-recommends --yes firefox wget sudo && apt-get clean\nCOPY cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb /tmp\nRUN apt-get update && apt-get install --no-install-recommends --yes -f /tmp/cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb && apt-get clean\nRUN cp /var/cudnn-local-repo-ubuntu2204-8.7.0.84/cudnn-local-BF23AD8A-keyring.gpg /usr/share/keyrings/\nENV PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nENV LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64\nRUN apt-get update && apt-get install --no-install-recommends --yes build-essential python3.9 python3-pip python-is-python3 libcurl4-openssl-dev libssl-dev wget && apt-get clean\nRUN # wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh -O /tmp/anaconda3.sh && bash /tmp/anaconda3.sh -b -p /usr/local/anaconda\nRUN pip3 install torch\nRUN pip3 install tensorflow-gpu\nRUN pip3 install jupyter notebook\nRUN pip3 install jupyterlab\nRUN pip3 install jupyterlab-nvdashboard\nRUN # jupyter labextension install jupyterlab-nvdashboard\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"jupyter.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCA0NCA1MSIgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpmaWdtYT0iaHR0cDovL3d3dy5maWdtYS5jb20vZmlnbWEvbnMiPgo8dGl0bGU+R3JvdXAuc3ZnPC90aXRsZT4KPGRlc2M+Q3JlYXRlZCB1c2luZyBGaWdtYSAwLjkwPC9kZXNjPgo8ZyBpZD0iQ2FudmFzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY0MCAtMjQ1MykiIGZpZ21hOnR5cGU9ImNhbnZhcyI+CjxnIGlkPSJHcm91cCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9Ikdyb3VwIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0iR3JvdXAiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGg5IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQwLjU0IDI0NzQuMzYpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTAgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGgxX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDUuNjggMjQ3NC4zNykiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxMSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDJfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY1My4zOSAyNDc0LjI2KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDEyIGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoM19maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjYwLjQzIDI0NzQuMzkpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTMgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg0X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NjcuNTUgMjQ3Mi41NCkiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDVfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3Mi40NyAyNDc0LjI5KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE1IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoNl9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjc5Ljk4IDI0NzQuMjQpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNiBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDdfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3My40OCAyNDUzLjY5KSIgZmlsbD0iIzc2NzY3NyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE3IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoOF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQzLjIxIDI0ODQuMjcpIiBmaWxsPSIjRjM3NzI2IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTggZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg5X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjEgMjQ1Ny44OCkiIGZpbGw9IiNGMzc3MjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxOSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDEwX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjggMjQ5Ni4wOSkiIGZpbGw9IiM5RTlFOUUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgyMCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDExX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDEuODcgMjQ1OC40MykiIGZpbGw9IiM2MTYyNjIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxkZWZzPgo8cGF0aCBpZD0icGF0aDBfZmlsbCIgZD0iTSAxLjc0NDk4IDUuNDc1MzNDIDEuNzQ0OTggNy4wMzMzNSAxLjYyMDM0IDcuNTQwODIgMS4yOTk4MyA3LjkxNDc0QyAwLjk0MzExOSA4LjIzNTk1IDAuNDgwMDI0IDguNDEzNTggMCA4LjQxMzMxTCAwLjEyNDY0MiA5LjMwMzZDIDAuODY4ODQgOS4zMTM2NiAxLjU5MDk1IDkuMDUwNzggMi4xNTQ1MiA4LjU2NDY2QyAyLjQ1Nzc1IDguMTk0ODcgMi42ODM0IDcuNzY3ODEgMi44MTggNy4zMDg5M0MgMi45NTI2MSA2Ljg1MDA1IDIuOTkzNDEgNi4zNjg3NiAyLjkzNzk4IDUuODkzNzdMIDIuOTM3OTggMEwgMS43NDQ5OCAwTCAxLjc0NDk4IDUuNDM5NzJMIDEuNzQ0OTggNS40NzUzM1oiLz4KPHBhdGggaWQ9InBhdGgxX2ZpbGwiIGQ9Ik0gNS41MDIwNCA0Ljc2MzA5QyA1LjUwMjA0IDUuNDMwODEgNS41MDIwNCA2LjAyNzMxIDUuNTU1NDUgNi41NDM2OEwgNC40OTYgNi41NDM2OEwgNC40MjQ3OCA1LjQ4NDIzQyA0LjIwMzE4IDUuODU5MDkgMy44ODYyNyA2LjE2ODU4IDMuNTA2MjggNi4zODEyNUMgMy4xMjYyOCA2LjU5MzkyIDIuNjk2NzUgNi43MDIxOSAyLjI2MTM1IDYuNjk1MDNDIDEuMjI4NjEgNi42OTUwMyAwIDYuMTM0MTUgMCAzLjg0NjA4TCAwIDAuMDQ0NTE0OUwgMS4xOTMgMC4wNDQ1MTQ5TCAxLjE5MyAzLjYwNTdDIDEuMTkzIDQuODQzMjIgMS41NzU4MyA1LjY3MTE5IDIuNjUzMDkgNS42NzExOUMgMi44NzQ3MiA1LjY3MzU4IDMuMDk0NTkgNS42MzE2OCAzLjI5OTgyIDUuNTQ3OTZDIDMuNTA1MDUgNS40NjQyNCAzLjY5MTQ5IDUuMzQwMzkgMy44NDgyMiA1LjE4MzY2QyA0LjAwNDk0IDUuMDI2OTQgNC4xMjg4IDQuODQwNDkgNC4yMTI1MiA0LjYzNTI3QyA0LjI5NjIzIDQuNDMwMDQgNC4zMzgxMyA0LjIxMDE2IDQuMzM1NzUgMy45ODg1M0wgNC4zMzU3NSAwTCA1LjUyODc0IDBMIDUuNTI4NzQgNC43Mjc0OEwgNS41MDIwNCA0Ljc2MzA5WiIvPgo8cGF0aCBpZD0icGF0aDJfZmlsbCIgZD0iTSAwLjA1MzQxNzggMi4yNzI2NEMgMC4wNTM0MTc4IDEuNDQ0NjYgMC4wNTM0MTc4IDAuNzY4MDM2IDAgMC4xNTM3MzFMIDEuMDY4MzYgMC4xNTM3MzFMIDEuMTIxNzcgMS4yNjY2QyAxLjM1OTggMC44NjQ1MzUgMS43MDI0NyAwLjUzNDU5NCAyLjExMzI1IDAuMzExOTU0QyAyLjUyNDA0IDAuMDg5MzE0NSAyLjk4NzU0IC0wLjAxNzY3ODYgMy40NTQzNSAwLjAwMjM4MDk1QyA1LjAzOTA4IDAuMDAyMzgwOTUgNi4yMzIwOCAxLjMyODkyIDYuMjMyMDggMy4zMDUzOEMgNi4yMzIwOCA1LjYzNzk2IDQuNzk4NyA2Ljc5NTM1IDMuMjQ5NTggNi43OTUzNUMgMi44NTMwOSA2LjgxMzA0IDIuNDU4NzQgNi43MjgxIDIuMTA0NjkgNi41NDg3NEMgMS43NTA2NCA2LjM2OTM3IDEuNDQ4ODggNi4xMDE2NiAxLjIyODYxIDUuNzcxNTFMIDEuMjI4NjEgNS43NzE1MUwgMS4yMjg2MSA5LjMzMjY5TCAwLjA1MzQxNzggOS4zMzI2OUwgMC4wNTM0MTc4IDIuMjk5MzVMIDAuMDUzNDE3OCAyLjI3MjY0Wk0gMS4yMjg2MSA0LjAwODcyQyAxLjIzMTg0IDQuMTcwMjYgMS4yNDk3MiA0LjMzMTE3IDEuMjgyMDMgNC40ODk0OEMgMS4zODMwNCA0Ljg4NDc5IDEuNjEyOTkgNS4yMzUxMyAxLjkzNTQ4IDUuNDg1MDZDIDIuMjU3OTggNS43MzUgMi42NTQ2MSA1Ljg3MDI2IDMuMDYyNjIgNS44Njk0NEMgNC4zMTc5NCA1Ljg2OTQ0IDUuMDU2ODkgNC44NDU2IDUuMDU2ODkgMy4zNTg4QyA1LjA1Njg5IDIuMDU4OTcgNC4zNjI0NiAwLjk0NjA5NiAzLjEwNzE0IDAuOTQ2MDk2QyAyLjYxMDM2IDAuOTg2Nzc3IDIuMTQ1NDggMS4yMDcyNiAxLjc5OTY1IDEuNTY2MkMgMS40NTM4MiAxLjkyNTE0IDEuMjUwNzkgMi4zOTc5IDEuMjI4NjEgMi44OTU4NUwgMS4yMjg2MSA0LjAwODcyWiIvPgo8cGF0aCBpZD0icGF0aDNfZmlsbCIgZD0iTSAxLjMxNzY0IDAuMDE3ODA1OUwgMi43NTEwMiAzLjg1NDk5QyAyLjkwMjM3IDQuMjgyMzMgMy4wNjI2MiA0Ljc5ODcgMy4xNjk0NiA1LjE4MTUzQyAzLjI5NDEgNC43ODk4IDMuNDI3NjQgNC4yOTEyMyAzLjU4NzkgMy44MjgyOEwgNC44ODc3MyAwLjAxNzgwNTlMIDYuMTQzMDUgMC4wMTc4MDU5TCA0LjM2MjQ2IDQuNjQ3MzVDIDMuNDcyMTYgNi44NzMwOSAyLjkyOTA4IDguMDIxNTggMi4xMSA4LjcxNjAxQyAxLjY5NzQ1IDkuMDkyODMgMS4xOTQ0OCA5LjM1NjU4IDAuNjQ5OTE3IDkuNDgxNjZMIDAuMzU2MTE5IDguNDg0NTNDIDAuNzM2ODg2IDguMzU5NDIgMS4wOTAzOCA4LjE2MzA0IDEuMzk3NzcgNy45MDU4NEMgMS44MzIxIDcuNTUxODggMi4xNzY3OCA3LjEwMDQ0IDIuNDAzOCA2LjU4ODJDIDIuNDUyMzkgNi40OTk0OSAyLjQ4NTUxIDYuNDAzMTQgMi41MDE3MyA2LjMwMzNDIDIuNDkxNjEgNi4xOTU4NiAyLjQ2NDU3IDYuMDkwNyAyLjQyMTYxIDUuOTkxN0wgMCAwTCAxLjI5OTgzIDBMIDEuMzE3NjQgMC4wMTc4MDU5WiIvPgo8cGF0aCBpZD0icGF0aDRfZmlsbCIgZD0iTSAyLjE5MDEzIDBMIDIuMTkwMTMgMS44Njk2MkwgMy44OTk1IDEuODY5NjJMIDMuODk5NSAyLjc1OTkyTCAyLjE5MDEzIDIuNzU5OTJMIDIuMTkwMTMgNi4yNjc2OUMgMi4xOTAxMyA3LjA2ODk2IDIuNDIxNjEgNy41MzE5MSAzLjA4MDQzIDcuNTMxOTFDIDMuMzE0NDIgNy41MzU3NCAzLjU0Nzg5IDcuNTA4OCAzLjc3NDg2IDcuNDUxNzlMIDMuODI4MjggOC4zNDIwOEMgMy40ODc5NCA4LjQ1OTk5IDMuMTI4ODEgOC41MTQzMSAyLjc2ODgyIDguNTAyMzRDIDIuNTMwNDIgOC41MTcyNiAyLjI5MTYxIDguNDgwNDMgMi4wNjg3OCA4LjM5NDM3QyAxLjg0NTk1IDguMzA4MzEgMS42NDQzOCA4LjE3NTA2IDEuNDc3ODkgOC4wMDM3N0MgMS4xMTUyNSA3LjUxODczIDAuOTQ5ODI2IDYuOTE0MzEgMS4wMTQ5NCA2LjMxMjIxTCAxLjAxNDk0IDIuNzUxMDJMIDAgMi43NTEwMkwgMCAxLjg2MDcyTCAxLjAzMjc0IDEuODYwNzJMIDEuMDMyNzQgMC4yNzU5OTJMIDIuMTkwMTMgMFoiLz4KPHBhdGggaWQ9InBhdGg1X2ZpbGwiIGQ9Ik0gMS4xNzcxNiAzLjU3ODk5QyAxLjE1MyAzLjg4MDkzIDEuMTk0NjggNC4xODQ1MSAxLjI5OTMzIDQuNDY4NzZDIDEuNDAzOTggNC43NTMwMSAxLjU2OTEgNS4wMTExNCAxLjc4MzI5IDUuMjI1MzJDIDEuOTk3NDcgNS40Mzk1MSAyLjI1NTYgNS42MDQ2MyAyLjUzOTg1IDUuNzA5MjhDIDIuODI0MSA1LjgxMzkzIDMuMTI3NjggNS44NTU2MSAzLjQyOTYyIDUuODMxNDVDIDQuMDQwMzMgNS44NDUxMSA0LjY0NzA2IDUuNzI5ODMgNS4yMTAyMSA1LjQ5MzEzTCA1LjQxNDk4IDYuMzgzNDNDIDQuNzIzOTMgNi42NjgwOSAzLjk4MDg1IDYuODA0NTggMy4yMzM3NSA2Ljc4NDA2QyAyLjc5ODIxIDYuODEzODggMi4zNjEzOCA2Ljc0OTE0IDEuOTUzMjIgNi41OTQyN0MgMS41NDUwNSA2LjQzOTQxIDEuMTc1MjIgNi4xOTgwOSAwLjg2OTA3MSA1Ljg4Njg4QyAwLjU2MjkyOCA1LjU3NTY2IDAuMzI3NzIzIDUuMjAxOSAwLjE3OTU5MSA0Ljc5MTI1QyAwLjAzMTQ1ODQgNC4zODA1OSAtMC4wMjYwOTYyIDMuOTQyNzYgMC4wMTA4NzQ4IDMuNTA3NzdDIDAuMDEwODc0OCAxLjU0OTEyIDEuMTc3MTYgMCAzLjA4MjQgMEMgNS4yMTkxMSAwIDUuNzUzMjkgMS44Njk2MiA1Ljc1MzI5IDMuMDYyNjJDIDUuNzY0NzEgMy4yNDY0NCA1Ljc2NDcxIDMuNDMwNzkgNS43NTMyOSAzLjYxNDYxTCAxLjE1MDQ2IDMuNjE0NjFMIDEuMTc3MTYgMy41Nzg5OVpNIDQuNjY3MTMgMi42ODg3QyA0LjcwMTQ5IDIuNDUwNjcgNC42ODQ0MyAyLjIwODA1IDQuNjE3MDkgMS45NzcxOEMgNC41NDk3NiAxLjc0NjMxIDQuNDMzNzIgMS41MzI1NSA0LjI3NjggMS4zNTAzMUMgNC4xMTk4NyAxLjE2ODA4IDMuOTI1NzEgMS4wMjE2IDMuNzA3MzkgMC45MjA3NDRDIDMuNDg5MDcgMC44MTk4OSAzLjI1MTY2IDAuNzY3MDA2IDMuMDExMTggMC43NjU2NTZDIDIuNTIyMDEgMC44MDEwNjQgMi4wNjM3MSAxLjAxNzg4IDEuNzI2MDkgMS4zNzM2MkMgMS4zODg0NyAxLjcyOTM1IDEuMTk1ODggMi4xOTgzNSAxLjE4NjA3IDIuNjg4N0wgNC42NjcxMyAyLjY4ODdaIi8+CjxwYXRoIGlkPSJwYXRoNl9maWxsIiBkPSJNIDAuMDUzNDE3OCAyLjE5MjI4QyAwLjA1MzQxNzggMS40MjY2MyAwLjA1MzQxNzggMC43Njc4MDYgMCAwLjE2MjQwNEwgMS4wNjgzNiAwLjE2MjQwNEwgMS4wNjgzNiAxLjQzNTUzTCAxLjEyMTc3IDEuNDM1NTNDIDEuMjMzOTEgMS4wNDI1OSAxLjQ2NTYgMC42OTQzMTQgMS43ODQ2OCAwLjQzOTA0OUMgMi4xMDM3NiAwLjE4Mzc4MyAyLjQ5NDQgMC4wMzQxOTYgMi45MDIzNyAwLjAxMTA1MzhDIDMuMDE0NjYgLTAuMDAzNjg0NTkgMy4xMjgzOSAtMC4wMDM2ODQ1OSAzLjI0MDY4IDAuMDExMDUzOEwgMy4yNDA2OCAxLjEyMzkzQyAzLjEwNDYyIDEuMTA4MTcgMi45NjcyIDEuMTA4MTcgMi44MzExNCAxLjEyMzkzQyAyLjQyNyAxLjEzOTU4IDIuMDQyMzcgMS4zMDE4MiAxLjc0OTEgMS41ODAzNUMgMS40NTU4MyAxLjg1ODg3IDEuMjczOTggMi4yMzQ2MiAxLjIzNzUxIDIuNjM3NDNDIDEuMjA0MjIgMi44MTk2IDEuMTg2MzUgMy4wMDQyNSAxLjE4NDEgMy4xODk0MUwgMS4xODQxIDYuNjUyNjdMIDAuMDA4OTAyOTcgNi42NTI2N0wgMC4wMDg5MDI5NyAyLjIwMTE4TCAwLjA1MzQxNzggMi4xOTIyOFoiLz4KPHBhdGggaWQ9InBhdGg3X2ZpbGwiIGQ9Ik0gNi4wMzA1OSAyLjgzNTY1QyA2LjA2NzE1IDMuNDMzNzYgNS45MjQ4NSA0LjAyOTIxIDUuNjIxOCA0LjU0NjE1QyA1LjMxODc1IDUuMDYzMSA0Ljg2ODY5IDUuNDc4MTMgNC4zMjg5MyA1LjczODM5QyAzLjc4OTE3IDUuOTk4NjQgMy4xODQxNiA2LjA5MjMzIDIuNTkwOTcgNi4wMDc1M0MgMS45OTc3OCA1LjkyMjcyIDEuNDQzMjYgNS42NjMyNiAwLjk5ODA0OCA1LjI2MjE5QyAwLjU1MjgzNyA0Ljg2MTEzIDAuMjM3MDkgNC4zMzY2MSAwLjA5MTAzMDcgMy43NTU0NkMgLTAuMDU1MDI4NyAzLjE3NDMxIC0wLjAyNDc4OTEgMi41NjI4MyAwLjE3Nzg5NyAxLjk5ODkzQyAwLjM4MDU4MyAxLjQzNTAzIDAuNzQ2NTQxIDAuOTQ0MjIxIDEuMjI5MTUgMC41ODkwMzdDIDEuNzExNzYgMC4yMzM4NTMgMi4yODkxOCAwLjAzMDM2ODYgMi44ODc4NCAwLjAwNDUwNTQzQyAzLjI4MDM1IC0wLjAxNzA5MzIgMy42NzMyNiAwLjAzOTExNDQgNC4wNDM5NiAwLjE2OTg5NkMgNC40MTQ2NyAwLjMwMDY3NyA0Ljc1NTg3IDAuNTAzNDUzIDUuMDQ3OTQgMC43NjY1NjFDIDUuMzQgMS4wMjk2NyA1LjU3NzE4IDEuMzQ3OTIgNS43NDU4MiAxLjcwMzAxQyA1LjkxNDQ2IDIuMDU4MSA2LjAxMTI0IDIuNDQzMDMgNi4wMzA1OSAyLjgzNTY1TCA2LjAzMDU5IDIuODM1NjVaIi8+CjxwYXRoIGlkPSJwYXRoOF9maWxsIiBkPSJNIDE4LjY5NjIgNy4xMjIzOEMgMTAuNjgzNiA3LjEyMjM4IDMuNjQxMzEgNC4yNDY3MiAwIDBDIDEuNDEyODQgMy44MjA0MSAzLjk2MjE1IDcuMTE2MyA3LjMwNDc5IDkuNDQ0MDRDIDEwLjY0NzQgMTEuNzcxOCAxNC42MjMgMTMuMDE5NiAxOC42OTYyIDEzLjAxOTZDIDIyLjc2OTUgMTMuMDE5NiAyNi43NDUgMTEuNzcxOCAzMC4wODc3IDkuNDQ0MDRDIDMzLjQzMDMgNy4xMTYzIDM1Ljk3OTYgMy44MjA0MSAzNy4zOTI1IDQuMDQ4NmUtMTNDIDMzLjc2MDEgNC4yNDY3MiAyNi43NDQ1IDcuMTIyMzggMTguNjk2MiA3LjEyMjM4WiIvPgo8cGF0aCBpZD0icGF0aDlfZmlsbCIgZD0iTSAxOC42OTYyIDUuODk3MjVDIDI2LjcwODkgNS44OTcyNSAzMy43NTEyIDguNzcyOTEgMzcuMzkyNSAxMy4wMTk2QyAzNS45Nzk2IDkuMTk5MjIgMzMuNDMwMyA1LjkwMzMzIDMwLjA4NzcgMy41NzU1OUMgMjYuNzQ1IDEuMjQ3ODUgMjIuNzY5NSA0LjA0ODZlLTEzIDE4LjY5NjIgMEMgMTQuNjIzIDQuMDQ4NmUtMTMgMTAuNjQ3NCAxLjI0Nzg1IDcuMzA0NzkgMy41NzU1OUMgMy45NjIxNSA1LjkwMzMzIDEuNDEyODQgOS4xOTkyMiAwIDEzLjAxOTZDIDMuNjQxMzEgOC43NjQwMSAxMC42NDggNS44OTcyNSAxOC42OTYyIDUuODk3MjVaIi8+CjxwYXRoIGlkPSJwYXRoMTBfZmlsbCIgZD0iTSA3LjU5NTc2IDMuNTY2NTZDIDcuNjQyNzYgNC4zMTk5MiA3LjQ2NDQyIDUuMDcwMjIgNy4wODM0NyA1LjcyMTg2QyA2LjcwMjUxIDYuMzczNSA2LjEzNjE5IDYuODk2OTggNS40NTY2NiA3LjIyNTYxQyA0Ljc3NzEzIDcuNTU0MjQgNC4wMTUxNSA3LjY3MzE0IDMuMjY3ODEgNy41NjcxNkMgMi41MjA0NiA3LjQ2MTE3IDEuODIxNTggNy4xMzUxMSAxLjI2MDIxIDYuNjMwNTFDIDAuNjk4ODM5IDYuMTI1OTEgMC4zMDAzOTQgNS40NjU2MSAwLjExNTYzNyA0LjczMzc1QyAtMC4wNjkxMTkxIDQuMDAxODggLTAuMDMxODIxOSAzLjIzMTU5IDAuMjIyNzc3IDIuNTIwOTlDIDAuNDc3Mzc2IDEuODEwNCAwLjkzNzc1IDEuMTkxNjkgMS41NDUyNCAwLjc0MzY4NUMgMi4xNTI3NCAwLjI5NTY3OCAyLjg3OTg1IDAuMDM4NjU5NSAzLjYzMzk0IDAuMDA1Mzc1ODlDIDQuMTI3OTMgLTAuMDIxMDQ3MSA0LjYyMjI5IDAuMDUwMTE3MyA1LjA4ODc4IDAuMjE0ODAzQyA1LjU1NTI2IDAuMzc5NDkgNS45ODQ3MyAwLjYzNDQ3IDYuMzUyNjQgMC45NjUxNzlDIDYuNzIwNTUgMS4yOTU4OSA3LjAxOTcxIDEuNjk1ODQgNy4yMzMgMi4xNDIyQyA3LjQ0NjMgMi41ODg1NSA3LjU2OTU3IDMuMDcyNTYgNy41OTU3NiAzLjU2NjU2TCA3LjU5NTc2IDMuNTY2NTZaIi8+CjxwYXRoIGlkPSJwYXRoMTFfZmlsbCIgZD0iTSAyLjI1MDYxIDQuMzc5NDNDIDEuODE4ODYgNC4zOTEzNSAxLjM5MzIyIDQuMjc1MzUgMS4wMjcyMiA0LjA0NjAyQyAwLjY2MTIyNCAzLjgxNjY4IDAuMzcxMjA2IDMuNDg0MjQgMC4xOTM2NDEgMy4wOTA1MkMgMC4wMTYwNzYyIDIuNjk2NzkgLTAuMDQxMTA3OCAyLjI1OTM1IDAuMDI5MjgwNCAxLjgzMzIxQyAwLjA5OTY2ODYgMS40MDcwNyAwLjI5NDQ4NiAxLjAxMTI1IDAuNTg5MjMzIDAuNjk1NTQyQyAwLjg4Mzk4MSAwLjM3OTgzIDEuMjY1NSAwLjE1ODMxNiAxLjY4NTgxIDAuMDU4ODU3N0MgMi4xMDYxMSAtMC4wNDA2MDA1IDIuNTQ2NDQgLTAuMDEzNTYyMiAyLjk1MTQzIDAuMTM2NTcyQyAzLjM1NjQxIDAuMjg2NzA3IDMuNzA3OTYgMC41NTMyMzQgMy45NjE4NiAwLjkwMjYzNkMgNC4yMTU3NyAxLjI1MjA0IDQuMzYwNyAxLjY2ODcyIDQuMzc4NDIgMi4xMDAyN0MgNC4zOTUyOSAyLjY4MzggNC4xODEzMSAzLjI1MDQ0IDMuNzgyOTMgMy42NzcxNUMgMy4zODQ1NSA0LjEwMzg3IDIuODMzOTIgNC4zNTYyMyAyLjI1MDYxIDQuMzc5NDNaIi8+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"jupyternvidia,jupyter\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.jupyternvidia\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=jupyternvidia -- /usr/local/bin/startjupyter.sh\"\nLABEL oc.name=\"jupyternvidia\"\nLABEL oc.displayname=\"jupyter nvidia\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"jupyternvidia\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=jupyternvidia -- /usr/local/bin/startjupyter.sh\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nCOPY startjupyter.sh /usr/local/bin/startjupyter.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/jupyternvidia/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/jupyternvidia/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/jupyternvidia/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/jupyternvidia/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kalzium\nLABEL oc.icon=\"kalzium.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiCiAgIHdpZHRoPSIxMjgiCiAgIGhlaWdodD0iMTI4IgogICBpZD0ic3ZnMjQyNSIKICAgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyNDI4Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTk4NjEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMTk4NjMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNTAxOTYwODEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxOTg2NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE1MDAyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQzYmFmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDE1MDA0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjk4NGZmO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAuNTE4NTE4NTEiCiAgICAgICAgIGlkPSJzdG9wMjU3MDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwZjRmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxNTAwNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDEzMDU0Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEzMDU2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojM2MzYzNjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMTMwNTgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjA3MyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxMjA3NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQ1NDU0NTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDEyMDc3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTAxMjUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzgzODM4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMTAxMjciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwZjBmMGY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMDEyOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyMDAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWVhZWFlO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNzIwMiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJmMmYyZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjkyNTkyNTkxIgogICAgICAgICBpZD0ic3RvcDcyMDQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2MTYxNjE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A3MjA2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzE4NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A3MTg3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmJmYmZiO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuMTUwMDAwMDEiCiAgICAgICAgIGlkPSJzdG9wNzE4OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2U5ZTllOTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjQ0OTk5OTk5IgogICAgICAgICBpZD0ic3RvcDcxOTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjOGM4Yzg7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC42NDk5OTk5OCIKICAgICAgICAgaWQ9InN0b3A3MTkzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojODA4MDgwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNzE5NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTI5MjkyO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNjIxMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzRkNGQ0ZDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjY4NTE4NTE5IgogICAgICAgICBpZD0ic3RvcDYyMTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MjE0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE4NiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjY2RhZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1MTg4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTg4NWZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzIwNTYwOTciCiAgICAgICAgIGlkPSJzdG9wNTE5MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMGViMTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDUxOTIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTc0Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDUxNzYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmYmZiZmI7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4xOTgwNDUyNSIKICAgICAgICAgaWQ9InN0b3A1MTc4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDdlNWZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNDQiCiAgICAgICAgIGlkPSJzdG9wNTE4MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk3YzZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjY5ODA0NTI1IgogICAgICAgICBpZD0ic3RvcDUxODIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2Mzk2ZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A1MTg0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE2NiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4OWMxZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1MTY4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTM4MmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNTcyNjI1OTQiCiAgICAgICAgIGlkPSJzdG9wNTE3MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzA4MDBkYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDUxNzIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MzM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDQzNDAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZhZjU7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4yIgogICAgICAgICBpZD0ic3RvcDkwNjIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmM4YmQ7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC41IgogICAgICAgICBpZD0ic3RvcDQzNDgiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZjc0NjM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC44MDAwMDAwMSIKICAgICAgICAgaWQ9InN0b3A5MDY5IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYyMTA5O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNDM0MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM0MzIiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZhNWExO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzQzNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ExMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjk0NDQ0NDQyIgogICAgICAgICBpZD0ic3RvcDM0MzYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMTAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzNDM4IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAyMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmNTZmNmE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMDIzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYxNzE2O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNTcyNjI1OTQiCiAgICAgICAgIGlkPSJzdG9wMzAzMSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzZjMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMwMjUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExNi43NTkyMiIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE2Ljc1OTIyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzAyNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMwMjEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41NDk3MzA2LDAsMCwxLjU0OTQ5NDgsLTUyLjI4OTAzMSwtNjQuMTU4NTcxKSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iOTUuMTQ3NDM4IgogICAgICAgeTE9IjEyMS43ODY4IgogICAgICAgeDI9Ijk1LjE0NzQzOCIKICAgICAgIHkyPSI3MC4wMzc3MjciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNDE4IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzAyMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExOC4zMTY5NSIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE4LjMxNjk1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzQzMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM0MzIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi41NzM2OTIiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMyLjU3MzY5MiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDYyOTgiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0MzM4IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoODI0MCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODI5ODYwNSwwLDAsMC45NjEwOTI2LDE1LjQ0MDE0NywtMzkuMjg5NjUpIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgaWQ9InBhdGg4MjQyIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTYuNzU5MjIiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExNi43NTkyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDkyMTkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDIxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNzQxNDM2NiwwLDAsMS42NTQ4NTI5LC03MC41MjM2MzMsLTc2LjQ2MDExNikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi4yNDcwNyIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzAuMzAxMDE0IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50OTIyMSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNTY4MzI1LC0xLjk2MzU5MzllLTcsMS41OTk4MTE3ZS03LDEuMjY0MTc3NCwtMTQuODAwOTg1LC03LjU0MDkwOTkpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjIyNSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxNzQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjI0NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzE5NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iODUuNzg4OTc5IgogICAgICAgeTE9IjU4LjA0MjQzNSIKICAgICAgIHgyPSIxMDEuMDgxNTUiCiAgICAgICB5Mj0iNTcuNTg0NjM3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTAxMzEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMDEyNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iNTcuMTg0MTEzIgogICAgICAgeTE9IjkzLjIwMDI0OSIKICAgICAgIHgyPSI2My4xNzU5NjEiCiAgICAgICB5Mj0iODAuMDE1NzAxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTIwNzkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjA3MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iNDIuMjEyNjAxIgogICAgICAgeTE9IjI3LjI0NzE3MSIKICAgICAgIHgyPSI2NS4wNDM4ODQiCiAgICAgICB5Mj0iNTEuNTY1NDc5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTMwNjAiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMzA1NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTIuMjczMDE4IgogICAgICAgY3k9IjQzLjE5MjY0NiIKICAgICAgIHI9IjguNDIzNjc3NCIKICAgICAgIGZ4PSI5Mi4yNzMwMTgiCiAgICAgICBmeT0iNDMuMTkyNjQ2IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTUwMDgiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNTAwMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE5ODkzMjIsLTAuMzYxOTI5MSwwLjIxOTI2OTQsMC43MjYzNTUsLTI3LjU1NzA3Niw0NS45NDM2NTIpIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjE3OTE3Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjE3OTE5IgogICAgICAgICBzdGREZXZpYXRpb249IjAuMzk0ODkwMDUiCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDwvZmlsdGVyPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNDAuMjgzNDI0IgogICAgICAgY3k9IjgwLjcwOTgwOCIKICAgICAgIHI9IjguMTA5Nzg3OSIKICAgICAgIGZ4PSI0MC4yODM0MjQiCiAgICAgICBmeT0iODAuNzA5ODA4IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTk4NjciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxOTg2MSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMS40NzEzODEzLC0xLjMyNDgzNzQsMS40MDQzNTMzLC0xLjU1OTY5MjMsLTExLjgzMjE4NSwyNTIuMjI2MikiIC8+CiAgICA8ZmlsdGVyCiAgICAgICBpZD0iZmlsdGVyMjE4MDciPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMjE4MDkiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zOTE4ODQyNCIKICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPC9maWx0ZXI+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI2Ni4wMDQ5NzQiCiAgICAgICBjeT0iMzkuNDI0NTE1IgogICAgICAgcj0iNy4yNjg5NTc2IgogICAgICAgZng9IjY2LjAwNDk3NCIKICAgICAgIGZ5PSIzOS40MjQ1MTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNDcyNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE1MDAyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzkwNjQ1MywtMS4wOTEyMjkxLDEuNjE2NjQ0MywwLjU3ODczNjUsLTIxLjM2NjE0OCw4OC45NzE3MDkpIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjI1Njk3Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjI1Njk5IgogICAgICAgICBzdGREZXZpYXRpb249IjAuMzc1NDAzMzUiCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDwvZmlsdGVyPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjcwNDkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi41NzM2OTIiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMyLjU3MzY5MiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI3MDYwIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NjgyMzMsMCwwLDEuMDU2MzkxOCwtMTUuNzQzODYsLTAuNzk4NTY2NykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzIuNTczNjkyIgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMi41NzM2OTIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNzA3MSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjcwOTIiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJmaWx0ZXI5MDY0Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjkwNjYiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC40NDYyOTY5MyIKICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPC9maWx0ZXI+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MDcxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzIuNTczNjkyIgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMi41NzM2OTIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MDgzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE3NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NjgyMzMsMCwwLDEuMDU2MzkxOCwtMTUuNzQzODYsLTAuNzk4NTY2NykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MTAxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE2Ljc1OTIyIgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTYuNzU5MjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA2NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxNjYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTU3MTYsMCwwLDEuODIwNDY3MiwtODcuMTAwNjY5LC05NS43OTcxMTYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA2NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxODYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMC45Mzc4NzQiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMzLjQ1ODA5OSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDExMDY5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE3NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA4MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTYuNzU5MjIiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExNi43NTkyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDExMDg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjIwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjc3MzE3OTYsMCwwLDEuNjg1MDE3NiwtNzMuNTQyOTQ3LC03OS45ODIxMjYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA4NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMTE0MjAyLDQuNjk0NDQyNWUtOCwtMy42MjU5ODcxZS04LDEuMTUxNDM4OCwtMTAuNTE1MjIxLC0zLjk0NTY1NjQpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMwLjkzNzg3NCIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzMuNDU4MDk5IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTIwNzAiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MTg1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDY2MDA3OSwwLDAsMS4xMDQzOTE0LC02LjIyOTQ2NDUsLTIuNDkwMTA1MikiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODMwMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMDczOTY2LDAsMCwxLjA0MzY2OTcsLTAuNjk4MDUzNSwtMC42MTE1MDQ0KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTguMzE2OTUiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExOC4zMTY5NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE4NTY3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE4NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjYwMjE5NjYsLTIuNzk2NjQ0NWUtMiwyLjc5NjIxOWUtMiwxLjYwMTk1MjgsLTYwLjU4Nzg3MiwtNjcuNzA1MTQ2KSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExOC4zMTY5NSIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE4LjMxNjk1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTg1NzIiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNDMyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNjAyMTk2NiwtMi43OTY2NDQ1ZS0yLDIuNzk2MjE5ZS0yLDEuNjAxOTUyOCwtNjAuNTg3ODcyLC02Ny43MDUxNDYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODU3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTguMzE2OTUiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExOC4zMTY5NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE4NTc5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE4NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjY0OTYxNDksLTIuODc5NDEzNGUtMiwyLjg3ODk3NTNlLTIsMS42NDkzNjM5LC03My45MzkyMSwtMTM2LjY0MzY3KSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjE5NTUxIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjE5NTUzIgogICAgICAgICBzdGREZXZpYXRpb249IjAuNTg2ODc1IgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaWQ9ImxheWVyMiI+CiAgICA8ZwogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgaWQ9ImxheWVyOSI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02LjgxODI4OTIsLTYxLjM2NzY0NSkiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODM5OSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJNIDg2LjM3NSw1LjE4NzUgQyA3MS4xNzA5NTgsNS4xODc1IDU4Ljg0Mzc1LDE3LjUxNDcwOSA1OC44NDM3NSwzMi43MTg3NSBDIDU4Ljg0Mzc1LDM0LjQwMjU5NyA1OC45OTE0MTksMzYuMDU1NTQ0IDU5LjI4MTI1LDM3LjY1NjI1IEMgNTUuMDAyMzk3LDQxLjQ3NzQ3MiA1Mi4yNjQ3ODUsNDMuOTIyMjkxIDQ3LjU5Mzc1LDQ4LjA5Mzc1IEMgNDMuMjQ0NzU5LDQ1LjIzMjgwMiAzOC4wNTk5MTQsNDMuNTYyNSAzMi40Njg3NSw0My41NjI1IEMgMTcuMjMxMDI3LDQzLjU2MjUgNC44NDM3NDk5LDU1LjkxODUzIDQuODQzNzUsNzEuMTU2MjUgQyA0Ljg0Mzc1LDg2LjM5Mzk3MSAxNy4yMzEwMjYsOTguNzgxMjUxIDMyLjQ2ODc1LDk4Ljc4MTI1IEMgMzkuOTY2NDQ2LDk4Ljc4MTI1IDQ2Ljc0MjQ1Nyw5NS43NjMzMDMgNTEuNzE4NzUsOTAuOTA2MjUgQyA1OC41MzU4NDEsOTMuNjU1MDc3IDYwLjg3NTk5LDk0LjYxNzg0IDY3LjA5Mzc1LDk3LjEyNSBDIDY4LjA5OTE5NCwxMTEuNDEyNDQgODAuMDIwNTc1LDEyMi42ODc1IDk0LjU2MjUsMTIyLjY4NzUgQyAxMDkuNzYyODUsMTIyLjY4NzUgMTIyLjA5Mzc1LDExMC4zNTY0NiAxMjIuMDkzNzUsOTUuMTU2MjUgQyAxMjIuMDkzNzUsODIuMDc3ODUgMTEyLjk1MDUzLDcxLjE0ODI2OSAxMDAuNzE4NzUsNjguMzQzNzUgQyAxMDAuNTQ3Myw2My43MDk3NyAxMDAuNDkyNTYsNjIuMjExNTIxIDEwMC4yODEyNSw1Ni41IEMgMTA4LjQzNzk5LDUxLjcxNjU0NiAxMTMuOTA2MjUsNDIuODUxNTQgMTEzLjkwNjI1LDMyLjcxODc1IEMgMTEzLjkwNjI1LDE3LjUxNDcwOCAxMDEuNTc5MDQsNS4xODc1IDg2LjM3NSw1LjE4NzUgeiBNIDY1LjU5Mzc1LDUwLjgxMjUgQyA3MC42MDYwNTEsNTYuNTY5OTM2IDc3Ljk3MzI4NCw2MC4xOTQ0NzMgODYuMTg3NSw2MC4yNSBDIDg2LjI2OTI0MSw2NC41NTU4NjEgODYuMjc4NzMsNjUuNDQ5OTI1IDg2LjM0Mzc1LDY4Ljg3NSBDIDc5LjE4NzUyNSw3MS4xMTA4NDggNzMuMjk2NjQsNzYuMTgzMzA0IDY5Ljk2ODc1LDgyLjc4MTI1IEMgNjUuMTc2MTgsODAuODkxMjIyIDY0LjI2OTI0Miw4MC41NTMzNjMgNTkuMDYyNSw3OC41IEMgNTkuNzA1NTg1LDc2LjE2MzgzNSA2MC4wNjI1LDczLjY5NTg3MSA2MC4wNjI1LDcxLjE1NjI1IEMgNjAuMDYyNSw2Ni43MjE4OTkgNTkuMDE2ODYsNjIuNTI2NTY3IDU3LjE1NjI1LDU4LjgxMjUgQyA2MC4zODExMzYsNTUuNzU0MTE3IDYxLjU4MzgyMiw1NC42MTUzOTQgNjUuNTkzNzUsNTAuODEyNSB6ICIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LDYyLjU0OTM1NykiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUyOTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjE5NTUxKSIKICAgICAgICAgICBpZD0icGF0aDE4NDAxIiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MS44MTY4ODEsLTI0LjE4MzExOSkiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODQxNSIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDY3Mjg0LDAsMCwxLjAwNjcxOTIsLTAuNDUxODY4LC0wLjgyMzU0NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODQzNSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI1Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgsLTYyLjU0OTM1NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9Imc5MDg1Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA4MzMzLDAsMCwxLjAyMDgzMzMsLTIuNzI0NzIxOSwtMy40NTkxMTk1KSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDY3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICBpZD0icGF0aDkwODciIC8+CiAgICAgICAgPGcKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxNTUwMzksMCwwLDEuMDE1NTAzOSwtMS40NjMxNjk5LC0xLjQ3ODI0NjIpIgogICAgICAgICAgIGlkPSJnOTA4OSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMjEuODY5MzggOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgNjguMzY1NzQ3LDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDEyMS44NjkzOCA5Ni43ODk1NTEgeiIKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk1ODMzMywwLDAsMC44OTU4MzMzLDkuMTY0OTczNCw4LjYzOTU3NDUpIgogICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTA2NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTM1MjExMzI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuNTAxOTYwNzgiCiAgICAgICAgICAgICBpZD0icGF0aDkwOTEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMTEuNzY0MDcsMzguNDU1NzM0IEMgMTExLjc2NDA3LDQ1LjgxMjIyMiAxMDYuMzEyMTMsNTEuNzgyNzA0IDk0LjM3NDQ1OCw1MS43ODI3MDQgQyA4Mi42MDM4MzEsNTEuNzgyNzA0IDc2Ljk4NDg0Niw0NS44MTIyMjIgNzYuOTg0ODQ2LDM4LjQ1NTczNCBDIDc2Ljk4NDg0NiwzMS4wOTkyNDcgODQuNzc1MzkyLDI1LjEyODc2NCA5NC4zNzQ0NTgsMjUuMTI4NzY0IEMgMTAzLjk3MzUyLDI1LjEyODc2NCAxMTEuNzY0MDcsMzEuMDk5MjQ3IDExMS43NjQwNywzOC40NTU3MzQgeiAiCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA3OTQ5ODcsMCwwLDAuOTMyMDk4OCwtNy41MDI2NDU2LDQ1LjI2MTQxKSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTA2OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDkwOTMiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxMjEuNjg3NTYgOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDY4LjU0NzU2Miw5Ni43ODk1NTEgQSAyNi41NyAyNi41NyAwIDEgMSAgMTIxLjY4NzU2IDk2Ljc4OTU1MSB6IgogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTkyNDU1LDAsMCwwLjk5MjQ1NSwyLjg5Mzk2NjdlLTIsLTAuODQ1NDgzNCkiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDA5OGY7c3Ryb2tlLXdpZHRoOjIuMjc4MTI5NTg7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg5MDk1IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgaWQ9ImxheWVyOCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gNzUuMDQ1NjcyLDMxLjMwNjk2NiBDIDY2LjI1NDAzMywyNS4wMDAxNTEgNjAuMDk5MzkxLDMzLjkxMDE5MiA2Ni4zMDgwMzcsNDEuMDI0NTIzIEMgNzQuOTY1OTA1LDUxLjY4MDM2MSA4Mi43NTU3OSwzNi44Mzc5MzYgNzUuMDQ1NjcyLDMxLjMwNjk2NiB6ICIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0NzI2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMjU2OTcpIgogICAgICAgICBpZD0icGF0aDIxODExIiAvPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDQwLjkxNzEwMyw1NC4wNjQzNDkgQyA0MC45MTcxMDMsNTQuMDY0MzQ5IDY1LjEzMDcwNSwzMi40NDA0MzYgNjUuMTMwNzA1LDMyLjQ0MDQzNiBDIDY1LjU5MzkxOSwzMS45MTEwNDggNjkuODYyMzYxLDMwLjIxMjgwNCA3My40MTc3MTQsMzQuNDQ3NDQ2IEMgNzYuNjkyNjczLDM4LjM0ODEyMiA3NS4zNzE0MzEsNDEuNDkyOTAyIDc0Ljg0MjA0Myw0Mi4wMjIyOSBDIDc0Ljg0MjA0Myw0Mi4wMjIyOSA1MS4wMTY4OTQsNjQuNjE3MzM1IDUxLjAxNjg5NCw2NC42MTczMzUgTCA0MC45MTcxMDMsNTQuMDY0MzQ5IHogIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MTMwNjApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaWQ9InBhdGgxMjA4MyIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI2Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTYxLjgxNjg4MSwtMjQuMTgzMTE5KSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgICBpZD0iZzExMDcxIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA4MzMzLDAsMCwxLjAyMDgzMzMsLTIuNzI0NzIxOSwtMy40NTkxMTk1KSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDgzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICBpZD0icGF0aDExMDczIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTU1MDM5LDAsMCwxLjAxNTUwMzksLTEuNDYzMTY5OSwtMS40NzgyNDYyKSIKICAgICAgICAgICBpZD0iZzExMDc1Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJNIDEyMS44NjkzOCA5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICA2OC4zNjU3NDcsOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgMTIxLjg2OTM4IDk2Ljc4OTU1MSB6IgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTU4MzMzLDAsMCwwLjg5NTgzMzMsOS4xNjQ5NzM0LDguNjM5NTc0NSkiCiAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDg1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICAgIGlkPSJwYXRoMTEwNzciIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMTEuNzY0MDcsMzguNDU1NzM0IEMgMTExLjc2NDA3LDQ1LjgxMjIyMiAxMDYuMzEyMTMsNTEuNzgyNzA0IDk0LjM3NDQ1OCw1MS43ODI3MDQgQyA4Mi42MDM4MzEsNTEuNzgyNzA0IDc2Ljk4NDg0Niw0NS44MTIyMjIgNzYuOTg0ODQ2LDM4LjQ1NTczNCBDIDc2Ljk4NDg0NiwzMS4wOTkyNDcgODQuNzc1MzkyLDI1LjEyODc2NCA5NC4zNzQ0NTgsMjUuMTI4NzY0IEMgMTAzLjk3MzUyLDI1LjEyODc2NCAxMTEuNzY0MDcsMzEuMDk5MjQ3IDExMS43NjQwNywzOC40NTU3MzQgeiAiCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA3OTQ5ODcsMCwwLDAuOTMyMDk4OCwtNy41MDI2NDU2LDQ1LjI2MTQxKSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxODMwMCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDExMDc5IiAvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjY4NzU2IDk2Ljc4OTU1MSBBIDI2LjU3IDI2LjU3IDAgMSAxICA2OC41NDc1NjIsOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDEyMS42ODc1NiA5Ni43ODk1NTEgeiIKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5MjQ1NDgsMCwwLDAuOTkyNDU0OCwtMi4xODQ0NDEyZS0yLC0wLjcxNjAwMDcpIgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjI3ODE0MjkzO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoMTEwODEiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI3Ij4KICAgICAgPHBhdGgKICAgICAgICAgZD0iTSA5My40Mzg2OTIsNDcuNTIxNzI3IEMgMTA0LjI4MDg3LDQ2LjI1NTcyOCAxMDIuNTg0NDgsMzIuODI4NjIyIDkyLjA0Mjc3MSwzMy41MjQyMTIgQyA4MS44MjA0NTcsMzQuMTk4NzI4IDgxLjExNTY1Nyw0OC45NjA2NDEgOTMuNDM4NjkyLDQ3LjUyMTcyNyB6ICIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE1MDA4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMTc5MTcpIgogICAgICAgICBpZD0icGF0aDEzMDYyIiAvPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDg1Ljg1MTEzOSw0My4xMzQzODEgQyA4NS44NTExMzksNDMuMTM0MzgxIDg2LjUyMzYwNiw3OC41NTc5NCA4Ni41MjM2MDYsNzguNTU3OTQgTCAxMDEuMDgxNTUsNzguMDA4NTg0IEMgMTAxLjA4MTU1LDc4LjAwODU4NCA5OS43NDI3OTQsNDEuODIzNDQ0IDk5Ljc0Mjc5NCw0MS44MjM0NDQgQyA5OS4yMzk1MzIsMzkuMDE5MTY0IDk2LjE2MjAwNSwzNi4yMDQ1NyA5Mi42ODM0NTIsMzYuNDQzNzIgQyA4OC44MzcyNTUsMzYuNzA4MTQ2IDg1LjM5OTc4MSw0MC4wMzUwNDggODUuODUxMTM5LDQzLjEzNDM4MSB6ICIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMDEzMSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpZD0icGF0aDkxNTQiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMzIuODk4NDc2LDczLjg3Njg4MyBDIDI3LjYyNjcwMyw4MC45Njg5NjggMzcuODk3OTE5LDkyLjU1NDI0NSA0NS4xMzYzODYsODMuMjQ2MjAxIEMgNTIuNjk3ODc4LDczLjUyMjc3NCAzOC44NjY0NjQsNjUuODQ4MTgyIDMyLjg5ODQ3Niw3My44NzY4ODMgeiAiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxOTg2Nyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjIxODA3KSIKICAgICAgICAgaWQ9InBhdGgxNzkyMSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgZD0iTSA0My42NzM4Miw3Mi40MjM0NjIgQyA0My42NzM4Miw3Mi40MjM0NjIgODIuNjc4MTExLDg3LjgwNTQzNiA4Mi42NzgxMTEsODcuODA1NDM2IEwgNzguMjgzMjYyLDEwMS42MzA5IEMgNzguMjgzMjYyLDEwMS42MzA5IDM4LjU0NjQ5NSw4NS42MDgwMTIgMzguNTQ2NDk1LDg1LjYwODAxMiBDIDM0LjQ3MjEwMyw4My4zNjQ4MDcgMzMuNDU2NzQ4LDgwLjI5NjMzMyAzNC43MDEwMDIsNzYuNzI2NzUyIEMgMzYuMDk3MjgyLDcyLjcyMTAzIDQxLjI3MDM4Niw3MS41MDc4NjggNDMuNjczODIsNzIuNDIzNDYyIHogIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MTIwNzkpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaWQ9InBhdGgxMDEzMyIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI0Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDY3Mjg0LDAsMCwxLjAwNjcxOTIsLTAuNDUxODY4LC0wLjgyMzU0NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcyMTk5Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTM0NTI5LDAsMCwwLjk5MzQ1MjksLTAuMTIwMzY2NCwtMC44MDg5ODQzKSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDM0MzApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjUzNTIxMTMyO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4IgogICAgICAgICAgIGlkPSJwYXRoMzQyOCIgLz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDA4NzA3OCwwLDAsMS4wMDg3MDc4LC0wLjgyODM0NDEsLTAuODIzNzAxMSkiCiAgICAgICAgICAgaWQ9Imc5MjE1Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJNIDEyMS44NjkzOCA5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICA2OC4zNjU3NDcsOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgMTIxLjg2OTM4IDk2Ljc4OTU1MSB6IgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTU4MzMzLDAsMCwwLjg5NTgzMzMsOS4xNjQ5NzM0LDguNjM5NTc0NSkiCiAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDkyMTkpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjUzNTIxMTMyO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4IgogICAgICAgICAgICAgaWQ9InBhdGgyNDM0IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMTExLjc2NDA3LDM4LjQ1NTczNCBDIDExMS43NjQwNyw0NS44MTIyMjIgMTA2LjMxMjEzLDUxLjc4MjcwNCA5NC4zNzQ0NTgsNTEuNzgyNzA0IEMgODIuNjAzODMxLDUxLjc4MjcwNCA3Ni45ODQ4NDYsNDUuODEyMjIyIDc2Ljk4NDg0NiwzOC40NTU3MzQgQyA3Ni45ODQ4NDYsMzEuMDk5MjQ3IDg0Ljc3NTM5MiwyNS4xMjg3NjQgOTQuMzc0NDU4LDI1LjEyODc2NCBDIDEwMy45NzM1MiwyNS4xMjg3NjQgMTExLjc2NDA3LDMxLjA5OTI0NyAxMTEuNzY0MDcsMzguNDU1NzM0IHogIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNzk0OTg3LDAsMCwwLjkzMjA5ODgsLTcuNTAyNjQ1Niw0NS4yNjE0MSkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50OTA3MSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDUzMjEiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxMjEuNjg3NTYgOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDY4LjU0NzU2Miw5Ni43ODk1NTEgQSAyNi41NyAyNi41NyAwIDEgMSAgMTIxLjY4NzU2IDk2Ljc4OTU1MSB6IgogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTg1ODIyLDAsMCwwLjk4NTgyMiwwLjU4MTMzMTEsLTkuODg0MjY0MmUtMikiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2ODAwMDA7c3Ryb2tlLXdpZHRoOjIuMjc4MTM5NTk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg4MjQ0IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"kalzium,kalzium\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kalzium.desktop\"\nLABEL oc.launch=\"kalzium.kalzium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Kalzium\"\nLABEL oc.displayname=\"Kalzium\"\nLABEL oc.path=\"/usr/bin/kalzium\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Kalzium\"\nENV APPBIN \"/usr/bin/kalzium\"\nENV APP \"/usr/bin/kalzium\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kalzium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kalzium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kalzium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kalzium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kdiamond\nLABEL oc.icon=\"kdiamond.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgaGVpZ2h0PSI0OCIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNiIgeDI9IjciIHkxPSIyMCIgeTI9IjciPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZjQyMzEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZjU4MjczIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjM5IiB4Mj0iMzAiIHkxPSIyMCIgeTI9IjciPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmE5MmQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZjMTY5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE3IiB4Mj0iMTAiIHkxPSI0MC4xMjQiIHkyPSIyOCI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzNiYjU2NiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3Y2VjYTQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzgiIHgyPSIzMCIgeTE9IjQyIiB5Mj0iMjkiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzYjg1YjUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjN2NiY2VjIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8Zz4KICAgIDxwYXRoIGQ9Im0xMi45OTkwNzQgNC4wMDAwMDQ4Yy0uMjQyNTE4IDAtLjQ4NDk2NS4wOTIxMTgtLjY3MDc5NC4yNzc5MzY5bC04LjA0OTUzMDUgOC4wNTA5MDgzYy0uMzcxNjU5Ny4zNzE2MzgtLjM3MTY1OTcuOTY5ODcxIDAgMS4zNDE1MDlsOC4wNDk1MzA1IDguMDUwOTA4Yy4zNzE2NTkuMzcxNjM4Ljk3MTc4MS4zNzE2MzggMS4zNDM0NCAwbDguMDQ5NTMtOC4wNTA5MDhjLjM3MTY2MS0uMzcxNjM4LjM3MTY2MS0uOTY5ODcxIDAtMS4zNDE1MDlsLTguMDQ5NTMtOC4wNTA5MDgzYy0uMTg1ODI5LS4xODU4MTg5LS40MzAxMjktLjI3NzkzNjktLjY3MjY0Ni0uMjc3OTM2OXoiIGZpbGw9InVybCgjYSkiLz4KICAgIDxwYXRoIGQ9Im0zNC45OTkwNzQgNC4wMDAwMDQ4Yy0uMjQyNTE4IDAtLjQ4NDk2NS4wOTIxMTgtLjY3MDc5NC4yNzc5MzY5bC04LjA0OTUzMSA4LjA1MDkwODNjLS4zNzE2NTkuMzcxNjM4LS4zNzE2NTkuOTY5ODcxIDAgMS4zNDE1MDlsOC4wNDk1MzEgOC4wNTA5MDhjLjM3MTY1OS4zNzE2MzguOTcxNzgxLjM3MTYzOCAxLjM0MzQ0IDBsOC4wNDk1My04LjA1MDkwOGMuMzcxNjYxLS4zNzE2MzguMzcxNjYxLS45Njk4NzEgMC0xLjM0MTUwOWwtOC4wNDk1My04LjA1MDkwODNjLS4xODU4MjktLjE4NTgxODktLjQzMDEyOS0uMjc3OTM2OS0uNjcyNjQ2LS4yNzc5MzY5eiIgZmlsbD0idXJsKCNiKSIvPgogICAgPHBhdGggZD0ibTEyLjk5OTA3NCAyNi4wMDAwMDVjLS4yNDI1MTggMC0uNDg0OTY1LjA5MjEyLS42NzA3OTQuMjc3OTM3bC04LjA0OTUzMDUgOC4wNTA5MDhjLS4zNzE2NTk3LjM3MTYzOC0uMzcxNjU5Ny45Njk4NzEgMCAxLjM0MTUwOWw4LjA0OTUzMDUgOC4wNTA5MDhjLjM3MTY1OS4zNzE2MzguOTcxNzgxLjM3MTYzOCAxLjM0MzQ0IDBsOC4wNDk1My04LjA1MDkwOGMuMzcxNjYxLS4zNzE2MzguMzcxNjYxLS45Njk4NzEgMC0xLjM0MTUwOWwtOC4wNDk1My04LjA1MDkwOGMtLjE4NTgyOS0uMTg1ODE5LS40MzAxMjktLjI3NzkzNy0uNjcyNjQ2LS4yNzc5Mzd6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCBkPSJtMzQuOTk5MDc0IDI2LjAwMDAwNWMtLjI0MjUxOCAwLS40ODQ5NjUuMDkyMTItLjY3MDc5NC4yNzc5MzdsLTguMDQ5NTMxIDguMDUwOTA4Yy0uMzcxNjU5LjM3MTYzOC0uMzcxNjU5Ljk2OTg3MSAwIDEuMzQxNTA5bDguMDQ5NTMxIDguMDUwOTA4Yy4zNzE2NTkuMzcxNjM4Ljk3MTc4MS4zNzE2MzggMS4zNDM0NCAwbDguMDQ5NTMtOC4wNTA5MDhjLjM3MTY2MS0uMzcxNjM4LjM3MTY2MS0uOTY5ODcxIDAtMS4zNDE1MDlsLTguMDQ5NTMtOC4wNTA5MDhjLS4xODU4MjktLjE4NTgxOS0uNDMwMTI5LS4yNzc5MzctLjY3MjY0Ni0uMjc3OTM3eiIgZmlsbD0idXJsKCNkKSIvPgogICAgPHBhdGggZD0ibTQuMTY2MDE1NiAxMi41Yy0uMjMzNDk3OS4zNjcxMjEtLjIwNzcyMTUuODQ4OTM4LjExMzI4MTMgMS4xNjk5MjJsOC4wNDg4MjgxIDguMDUwNzgxYy4zNzE2NTkuMzcxNjM4Ljk3MjA5MS4zNzE2MzggMS4zNDM3NSAwbDguMDQ4ODI4LTguMDUwNzgxYy4zMjEwMDQtLjMyMDk4NC4zNDY3OC0uODAyODAxLjExMzI4MS0xLjE2OTkyMi0uMDM2NjY1LjA1NzQyOS0uMDYzMDI0LjExOTY2OC0uMTEzMjgxLjE2OTkyMmwtOC4wNDg4MjggOC4wNTA3ODFjLS4zNzE2NTkuMzcxNjM4LS45NzIwOTEuMzcxNjM4LTEuMzQzNzUgMGwtOC4wNDg4MjgxLTguMDUwNzgxYy0uMDUwMjU2Ni0uMDUwMjU0LS4wNzY2MTYzLS4xMTI0OTMtLjExMzI4MTMtLjE2OTkyMnptMjIuMDAwMDAwNCAwYy0uMjMzNDk4LjM2NzEyMS0uMjA3NzIxLjg0ODkzOC4xMTMyODEgMS4xNjk5MjJsOC4wNDg4MjggOC4wNTA3ODFjLjM3MTY1OS4zNzE2MzguOTcyMDkxLjM3MTYzOCAxLjM0Mzc1IDBsOC4wNDg4MjgtOC4wNTA3ODFjLjMyMTAwNC0uMzIwOTg0LjM0Njc4LS44MDI4MDEuMTEzMjgxLTEuMTY5OTIyLS4wMzY2NjUuMDU3NDI5LS4wNjMwMjQuMTE5NjY4LS4xMTMyODEuMTY5OTIybC04LjA0ODgyOCA4LjA1MDc4MWMtLjM3MTY1OS4zNzE2MzgtLjk3MjA5MS4zNzE2MzgtMS4zNDM3NSAwbC04LjA0ODgyOC04LjA1MDc4MWMtLjA1MDI1Ny0uMDUwMjU0LS4wNzY2MTYtLjExMjQ5My0uMTEzMjgxLS4xNjk5MjJ6bS0yMi4wMDAwMDA0IDIyYy0uMjMzNDk3OS4zNjcxMjEtLjIwNzcyMTUuODQ4OTM4LjExMzI4MTMgMS4xNjk5MjJsOC4wNDg4MjgxIDguMDUwNzgxYy4zNzE2NTkuMzcxNjM4Ljk3MjA5MS4zNzE2MzggMS4zNDM3NSAwbDguMDQ4ODI4LTguMDUwNzgxYy4zMjEwMDQtLjMyMDk4NC4zNDY3OC0uODAyODAxLjExMzI4MS0xLjE2OTkyMi0uMDM2NjY1LjA1NzQyOS0uMDYzMDI0LjExOTY2OC0uMTEzMjgxLjE2OTkyMmwtOC4wNDg4MjggOC4wNTA3ODFjLS4zNzE2NTkuMzcxNjM4LS45NzIwOTEuMzcxNjM4LTEuMzQzNzUgMGwtOC4wNDg4MjgxLTguMDUwNzgxYy0uMDUwMjU2Ni0uMDUwMjU0LS4wNzY2MTYzLS4xMTI0OTMtLjExMzI4MTMtLjE2OTkyMnptMjIuMDAwMDAwNCAwYy0uMjMzNDk4LjM2NzEyMS0uMjA3NzIxLjg0ODkzOC4xMTMyODEgMS4xNjk5MjJsOC4wNDg4MjggOC4wNTA3ODFjLjM3MTY1OS4zNzE2MzguOTcyMDkxLjM3MTYzOCAxLjM0Mzc1IDBsOC4wNDg4MjgtOC4wNTA3ODFjLjMyMTAwNC0uMzIwOTg0LjM0Njc4LS44MDI4MDEuMTEzMjgxLTEuMTY5OTIyLS4wMzY2NjUuMDU3NDI5LS4wNjMwMjQuMTE5NjY4LS4xMTMyODEuMTY5OTIybC04LjA0ODgyOCA4LjA1MDc4MWMtLjM3MTY1OS4zNzE2MzgtLjk3MjA5MS4zNzE2MzgtMS4zNDM3NSAwbC04LjA0ODgyOC04LjA1MDc4MWMtLjA1MDI1Ny0uMDUwMjU0LS4wNzY2MTYtLjExMjQ5My0uMTEzMjgxLS4xNjk5MjJ6IiBvcGFjaXR5PSIuMTUiLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"kdiamond,kdiamond\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"kdiamond.kdiamond\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"kDiamond\"\nLABEL oc.displayname=\"kDiamond\"\nLABEL oc.path=\"/usr/games/kdiamond\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kDiamond\"\nENV APPBIN \"/usr/games/kdiamond\"\nENV APP \"/usr/games/kdiamond\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kdiamond/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kdiamond/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kdiamond/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kdiamond/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kgeography\nLABEL oc.icon=\"kgeography.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB5Mj0iMTUuODI3IiB4Mj0iMTAuNDY3IiB5MT0iNDIuNTI2IiB4MT0iMTAuNzk1IiBpZD0iMCI+PHN0b3Agc3RvcC1jb2xvcj0iIzE5N2NmMSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzIwYmNmYSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeTE9IjQyLjQ3NSIgeDI9IjAiIHkyPSIyOC44OTkiPjxzdG9wIHN0b3AtY29sb3I9IiNjNTI4MjgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZjU0NTQiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjAyMTIxIDAgMCAxLjAyMTIxLS4wNC0uMzY2KSI+PHBhdGggZD0ibS0xLjM0NiAxNS40NThoMjIuODA4Yy44OTYgMCAxLjYxOC43NDcgMS42MTggMS42NzR2MjMuNTk3YzAgLjkyNy0uNzIyIDEuNjc0LTEuNjE4IDEuNjc0aC0yMi44MDhjLS44OTYgMC0xLjYxOC0uNzQ3LTEuNjE4LTEuNjc0di0yMy41OTdjMC0uOTI3LjcyMi0xLjY3NCAxLjYxOC0xLjY3NCIgZmlsbD0idXJsKCMwKSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjc3MzU2IDAgMCAxLjcxNDI2IDYuMTA4LTI1Ljk4NikiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz48cGF0aCBkPSJtMTEuNDA2IDYuNDY5bC4zNS0uMzcxaDIuMDk2bC43NTkuNjcyLS4wNDYgMS4wNDYuNjQuNTg4LS41MzIuMzgxLjExOSAxLjM3NS0xLjkgMi4zMDN2Mi4xNjNsMS4wMTguNDkzdjEuOTQybC45ODcgMS42NjkuNzg3LjExOS4xMDEtLjU3NC0uOTMxLTEuNDQ1LS4xODUtMS40MDdoLjU1M2wuMjM0IDEuNDQ5IDEuMzU4IDEuOTgxLS4zNjQuNjMzLjg3MSAxLjMyNiAyLjE0OS41MzJ2LS4zNWwuODU3LjEyMi0uMDc3LjYxNmMuNzU2LjEyMi41MjUuMDczIDEuNzE1LjQwMmwxLjQ3IDEuNjc2IDEuODc2LjE0My4xODIgMS41MzMtMS4yODguOTAzLS4wNjMgMS4zNjEtLjE3OC44NCAxLjg1NSAyLjMyNC4xNDMuNzk4YzAgMCAuNjc1LjE4Mi43NDkuMTgyLjA4IDAgMS41MTUgMS4wOTIgMS41MTUgMS4wOTJ2NC4xOTJsLjUxMS4xNS0uMzU3IDEuOTI1Ljg2MSAxLjEzNy0uMTU0IDEuOTI1IDEuMTMgMS45OTEgMS40NTYgMS4yNjcgMS40NTYuMDMyLjE0Ny0uNDY5LTEuMDcxLS45MDZjLjA4LS41NTMuMDI1LS4zNDMuMjU5LTEuMDFsLjA0Mi0uNTQ5LS43MzEtLjAyNS0uMzc0LS40NTUuNjA1LS41ODQuMDg0LS40MzQtLjY3NS0uMTg5LjAzOC0uNDEzLjk1OS0uMTQzIDEuNDU5LS42OTZjLjY1NC0xLjIuOTc2LTEuNTIyIDIuMDIzLTIuODU5bC0uMzUtMS41MjkuNDY5LS44MTUgMS40MDcuMDM1Ljk0NS0uNzM4LjMwOC0yLjk2MSAxLjA1LTEuMzQ0LjE4OS0uODUtLjk2Mi0uMzExLS42My0xLjAzNi0yLjE2Ni0uMDI0LTEuNzE1LS42NTQtLjA4LTEuMjI4LS41NzQtLjk5Ny0xLjU0LS4wMjEtLjg5OS0xLjQxLS43OTgtLjM3OC0uMDQyLjQyLTEuNDQ1LjA5MS0uNTMyLS43MzUtMS41MTUtLjMwOC0xLjI0NiAxLjQzMS0xLjk1Ni0uMzI5LS4xNDMtMi4yMDgtMS40MzEtLjI0NS41NzQtMS4wODgtLjE2NC0uNjEyLTEuODcyIDEuMjU2LTEuMTc5LS4xNDMtLjQzLS45MzFjLjMyMi0xLjE3Mi4xMjktLjcxLjkxNy0yLjE1NmwxLjQ5OC0uNzYzaDIuODk4bC0uMDA3Ljg4MiAxLjA0My40OS0uMDg0LTEuNTA4Yy43OTgtLjgwMS41NTYtLjYyNiAyLjI2NC0xLjc1bC4wOTgtLjY5NiAxLjUxNS0xLjU3NSAxLjYxLS44ODUtLjE0My0uMTE1IDEuMDg1LTEuMDI1LjQwMi4xMDUuMTg1LjIzMS40MTMtLjQ2Mi4wOTQtLjA0OWMtLjU0Ni0uMDczLS4zNS0uMDI0LS45MDMtLjIxM3YtLjQ0NGwuMjQxLS4xOTloLjUzOWwuMjQ4LjEwOC4yMS40MjcuMjU5LS4wMzh2LS4wMjRsLjA3Ny4wMjEuNzQ5LS4xMTkuMTA1LS4zNjcuNDIuMTA1di4zOTVsLS4zOTUuMjc2LjA1OS40NDEgMS4zNjguNDJjMCAwIC4wMDMuMDA3LjAwMy4wMTRsLjMxMS0uMDI0LjAyMS0uNTg4LTEuMDgxLS40OTMtLjA2My0uMjkuODk2LS4zMDguMDM4LS44NS0uOTM0LS41NzQtLjA2My0xLjQ0NS0xLjI5NS42M2gtLjQ2OWwuMTI2LTEuMTAyLTEuNzQzLS40MTYtLjcyOC41NDZ2MS42NzZsLTEuMzAyLjQwNi0uNTI1IDEuMDkyLS41NjMuMDg3di0xLjM4OWwtMS4yMjEtLjE3NS0uNjEyLS4zOTUtLjI0OC0uODk5IDIuMTkxLTEuMjg0IDEuMDcxLS4zMjUuMTA1LjcxNy42MDItLjAyOC4wNDktLjM2NC42MjMtLjA4Ny4wMDctLjEyMi0uMjYyLS4xMTItLjA2My0uMzgxLjc2Ni0uMDY2LjQ2Mi0uNDgzLjAzNS0uMDM1di4wMDRsLjE0My0uMTQ3IDEuNjEzLS4yMDMuNzEuNjA1LTEuODc2Ljk5NyAyLjM4My41Ni4zMDQtLjc5OGgxLjA0NmwuMzY0LS42OTMtLjczMS0uMTgydi0uODc1bC0yLjMwNi0xLjAyMi0xLjU5Mi4xODItLjkwMy40NjkuMDcgMS4xNDQtLjk0MS0uMTQzLS4xNDMtLjYzLjg4OS0uODE1LTEuNjI0LS4wODQtLjQ2OS4xMzYtLjIxLjU1My42MTYuMTA1LS4xMjYuNjEyLTEuMDM2LjA2My0uMTY0LjQwMi0xLjUxOS4wNDJjMCAwLS4wMzUtLjg1Ny0uMDk0LS44NTctLjA2MyAwIDEuMTgzLS4wMTcgMS4xODMtLjAxN2wuODk5LS44NzgtLjQ5LS4yNDgtLjY1NC42MzctMS4wODUtLjA1OS0uNjQ3LS44OTloLTEuMzg5bC0xLjQ1MiAxLjA4NWgxLjMzbC4xMjIuMzg4LS4zNS4zMjUgMS40Ny4wNDIuMjI3LjUzMi0xLjY1NS0uMDY2LS4wOC0uNDA5LTEuMDM5LS4yMjctLjU1My0uMzAxLTIuNDUuMDI0LS43NTIuNzMxLS41MTQtLjA0Mi0uNTctLjMzMi0xLjY5NC0uNTA0aC0zLjEwMWwtMS43OTUgMS4yMjEtMS4yMDQuMTg1LS41NTMuNDMuODU3LjEyNnYuMzQzaC0xLjgzbC0uNzE3LjUxMS45MTcuNzc3IDIuNTA5LjAyMW0xNS40NjggNi4xMTdoLS43OGwuMTIyLS41MzIuMzY3LS4wMzkuMDg0LS4xODIuNTYtLjA3N3YuNDc2aC4wMDNsLS4zNTcuMzUzbS41NDMtMS4zMTZsLS4zNjcuMjM4LS40NjIuMDhjMCAwIDAtLjcyOCAwLS44MDVoLjgyOXYuNDg2bS42OTYtLjU2M2wuMzc4LjIzMS0uMzA0LjI0OC0uMjktLjI0OC4yMTctLjIzMW0tLjQ5Ny42MDloLjA1OWwuOTM4LjI3M3YuNDc5aC0uNzg3bC0uMjEtLjMwOGMwIDAgMC0uNDQ0IDAtLjQ0NG0tLjYwOS0xLjMxNmwuNTA3LjQ2Mi0uNTA3LjEyMnYtLjU4NG0tMi4xNDkuMDc3bC43MDctLjI5aC45Njl2LjI5aC4yMXYuNTA3aC0xLjQ3N2wtLjU0Ni0uMTUuMTM2LS4zNTdtLS4xMzMgMS4zMTZsLjU2LS42MDloLjgxMmwtMS4wMzkgMS40NTItLjQzNC0uMjMxLjEwMS0uNjEybS0uNzUyLTMuNDU4bC41NzcuMTMzLS4xOTkuNzg0LS42MjMuMjAzLS4zOTItLjgxNS42MzctLjMwNG0tMi45MDUtMy43MDN2LS4wNDVoLjUzNWwuMDQ5LS4xODVoLjg3OHYuMzg1bC0uMjU5LjMzMmgtMS4yMDR2LS40ODZ6bS44NSAxLjE5M2MwIDAgLjUzOS0uMDk0LjU4MS0uMDk0LjA0MiAwIDAgLjUzOSAwIC41MzlsLTEuMjA3LjA3Ny0uMjI3LS4yNzMuODU0LS4yNDgiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjg1MSIvPjxnIHRyYW5zZm9ybT0ibWF0cml4KDEuNTcyNjcgMCAwIDEuNTcyNjctMTQuMTQtMjEuMTQpIj48Y2lyY2xlIGN5PSIzNS44NTgiIGN4PSIxNi42MTQiIHI9IjcuNjAxIiBmaWxsPSJ1cmwoIzEpIi8+PHBhdGggZD0ibTE2LjQ5OCAzMS4zODhjLTEuODA5IDAtMy4yNzUgMS40NjYtMy4yNzUgMy4yNzUgMCAuMTM4LjAxMS4yNzMuMDI4LjQwNy4yOCAyLjU1OCAzLjAzNSA1LjUwNyAzLjAzNSA1LjUwNy4wNDkuMDU1LjA5Ni4wODkuMTQyLjExM2guMDAybC4wOTIuMDI5LjA5Mi0uMDI5aC4wMDJjLjA0Ni0uMDI1LjA5My0uMDYuMTQyLS4xMTMgMCAwIDIuNzE1LTIuOTU0IDIuOTg4LTUuNTEzLjAxNi0uMTMyLjAyNy0uMjY2LjAyNy0uNDAyIDAtMS44MDgtMS40NjYtMy4yNzUtMy4yNzUtMy4yNzVtMCA1LjM4MmMtMS4xNjEgMC0yLjEwNy0uOTQ1LTIuMTA3LTIuMTA3IDAtMS4xNjEuOTQ1LTIuMTA3IDIuMTA3LTIuMTA3IDEuMTYxIDAgMi4xMDYuOTQ1IDIuMTA2IDIuMTA3IDAgMS4xNjEtLjk0NSAyLjEwNy0yLjEwNiAyLjEwNyIgZmlsbD0iI2ZhZmFmYSIgZmlsbC1vcGFjaXR5PSIuOTAzIiBzdHJva2Utd2lkdGg9IjEuMzE3Ii8+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"kgeography,kgeography,geography\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kgeography.desktop\"\nLABEL oc.launch=\"kgeography.kgeography\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Kgeography\"\nLABEL oc.displayname=\"Kgeography\"\nLABEL oc.path=\"/usr/bin/kgeography\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Kgeography\"\nENV APPBIN \"/usr/bin/kgeography\"\nENV APP \"/usr/bin/kgeography\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kgeography/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kgeography/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kgeography/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kgeography/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.kigo /composer/init.d/init.kigo\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 dbus-user-session gnugo kigo && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"kigo.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojODJiMzM5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzhkYzEzZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSkiPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLDEpIj4KICAgIDxnIHN0eWxlPSJvcGFjaXR5Oi4xIj4KICAgICA8cGF0aCBkPSJtMjMgMzAuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIvPgogICAgIDxwYXRoIGQ9Im0zNiAzMC41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41Ii8+CiAgICAgPHBhdGggZD0ibTIzIDE3LjVjMCAzLjAzOS0yLjQ2MSA1LjUtNS41IDUuNXMtNS41LTIuNDYxLTUuNS01LjUgMi40NjEtNS41IDUuNS01LjUgNS41IDIuNDYxIDUuNSA1LjUiLz4KICAgICA8cGF0aCBkPSJtMzYgMTcuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im0yMyAzMC41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41IiBzdHlsZT0iZmlsbDojMmQyZDJkIi8+CiAgPHBhdGggZD0ibTM2IDMwLjVjMCAzLjAzOS0yLjQ2MSA1LjUtNS41IDUuNXMtNS41LTIuNDYxLTUuNS01LjUgMi40NjEtNS41IDUuNS01LjUgNS41IDIuNDYxIDUuNSA1LjUiIHN0eWxlPSJmaWxsOiNmOWY5ZjkiLz4KICA8cGF0aCBkPSJtMjMgMTcuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIgc3R5bGU9ImZpbGw6I2Y5ZjlmOSIvPgogIDxwYXRoIGQ9Im0zNiAxNy41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41IiBzdHlsZT0iZmlsbDojMmQyZDJkIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"kigo,go,kigo,gnugo\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.kde.kigo.desktop\"\nLABEL oc.launch=\"kigo.kigo\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"kigo\"\nLABEL oc.displayname=\"kigo\"\nLABEL oc.path=\"/usr/games/kigo\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-go-sgf;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kigo\"\nENV APPBIN \"/usr/games/kigo\"\nENV APP \"/usr/games/kigo\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kigo/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kigo/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kigo/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kigo/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends breeze-icon-theme dbus-x11 dbus-user-session klickety && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"klickety.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6bnMxPSJodHRwOi8vc296aS5iYWllcm91Z2UuZnIiCiAgICB4bWxuczpjYz0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvIgogICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgICBpZD0ic3ZnMSIKICAgIHNvZGlwb2RpOmRvY25hbWU9ImtsaWNrZXR5LnN2ZyIKICAgIHZpZXdCb3g9IjAgMCA2MCA2MCIKICAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgICBfU1ZHRmlsZV9fZmlsZW5hbWU9Im9sZHNjYWxlL2FwcHMva2xpY2tldHkuc3ZnIgogICAgdmVyc2lvbj0iMS4wIgogICAgeT0iMCIKICAgIHg9IjAiCiAgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQwIgogICAgc29kaXBvZGk6ZG9jYmFzZT0iL2hvbWUvZGFubnkvd29yay9mbGF0L1NWRy9tb25vL3NjYWxhYmxlL2FwcHMiCiAgPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICAgaWQ9ImJhc2UiCiAgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2OTkiCiAgICAgIGlua3NjYXBlOnpvb209IjUuMzE1Nzc5NSIKICAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMSIKICAgICAgaW5rc2NhcGU6Y3g9IjU0LjcwNjc3MSIKICAgICAgaW5rc2NhcGU6Y3k9IjIwLjY3MTY0MyIKICAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMDI0IgogICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogIC8+CiAgPHBhdGgKICAgICAgaWQ9InBhdGgxMTAwIgogICAgICBzdHlsZT0ic3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTojZmZmZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS13aWR0aDo4LjEyNTtmaWxsOm5vbmUiCiAgICAgIGQ9Im0xMC4wNTEgNC42ODcydjUwLjYyNmgzOS44OTh2LTUwLjYyNiIKICAvPgogIDxnCiAgICAgIGlkPSJnMTA4MSIKICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjkzMTU4IDAgMCAuOTMxNTggMi4xNzI2IDEuOTMyMykiCiAgICA+CiAgICA8cmVjdAogICAgICAgIGlkPSJyZWN0OTMxIgogICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6My4xMjU7ZmlsbDojZmZmZmZmIgogICAgICAgIHJ4PSIxLjYxMzQiCiAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS45MzgyIC0uMzU5ODkpIgogICAgICAgIGhlaWdodD0iNTQuNzA0IgogICAgICAgIHdpZHRoPSI0My4wMDciCiAgICAgICAgeT0iMi45NTcyIgogICAgICAgIHg9IjIuNTE5MiIKICAgIC8+CiAgICA8cGF0aAogICAgICAgIGlkPSJwYXRoOTMyIgogICAgICAgIHN0eWxlPSJzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjMuMzU0NTtmaWxsOm5vbmUiCiAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjM1OTg5KSIKICAgICAgICBkPSJtOC40NTc1IDMuMzE3MXY1NC4zNDRoNDIuODI4bC0wLjAwMS01NC4zNDQiCiAgICAvPgogICAgPGcKICAgICAgICBpZD0iZzk0NSIKICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSguMDI3MzEwKSIKICAgICAgPgogICAgICA8ZwogICAgICAgICAgaWQ9Imc5MzIiCiAgICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTMzIgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTgzNDtmaWxsOiMwMDAwMDAiCiAgICAgICAgICAgIGQ9Im0xMi42OTYgNDUuNjA0Yy0wLjU1NCAwLTEgMC40NDYtMSAxdjYuODE4YzAgMC41NTQgMC40NDYgMSAxIDFoNi44MThjMC41NTQgMCAxLTAuNDQ2IDEtMXYtNi44MThjMC0wLjU1NC0wLjQ0Ni0xLTEtMWgtNi44MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxNDggMCAwIDEuMDE0OCAuMDE2NDYxIC0xLjE3MjcpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5MzQiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45ODM0O2ZpbGw6IzAwMDAwMCIKICAgICAgICAgICAgZD0ibTIzLjUwNiA0NS4yNDRjLTAuNTU0IDAtMSAwLjQ0Ni0xIDF2Ni44MThjMCAwLjU1NCAwLjQ0NiAxIDEgMWg2LjgxOGMwLjU1NCAwIDEtMC40NDYgMS0xdi02LjgxOGMwLTAuNTU0LTAuNDQ2LTEtMS0xaC02LjgxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDE0OCAwIDAgMS4wMTQ4IC0xLjk5MjIgLS44MDc1MikiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDkzNSIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk4MzQ7ZmlsbDojMDAwMDAwIgogICAgICAgICAgICBkPSJtMzQuMTM2IDQ1LjI0NGMtMC41NTQgMC0xIDAuNDQ2LTEgMXY2LjgxOGMwIDAuNTU0IDAuNDQ2IDEgMSAxaDYuODE4YzAuNTU0IDAgMS0wLjQ0NiAxLTF2LTYuODE4YzAtMC41NTQtMC40NDYtMS0xLTFoLTYuODE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTQ4IDAgMCAxLjAxNDggLTMuODE4MiAtLjgwNzUyKSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTM3IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im0yMy41MyA0NS4xMDVjLTAuNTYyIDAtMS4wMTQgMC40NTMtMS4wMTQgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MiAxLjAxNSAxLjAxNCAxLjAxNWg2LjkxOGMwLjU2MyAwIDEuMDE1LTAuNDUzIDEuMDE1LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUyLTEuMDE1LTEuMDE1LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgMSAwIC02LjA3MDggNzYuNTMyKSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTM4IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im0zMi40OTEgNDUuMTA1Yy0wLjU2MiAwLTEuMDE1IDAuNDUzLTEuMDE1IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTMgMS4wMTUgMS4wMTUgMS4wMTVoNi45MThjMC41NjIgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1My0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwIC0xIDEgMCAtNi4wNzA4IDc2LjUzMikiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDkzOSIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAxMjc7ZmlsbDojZmZmZmZmIgogICAgICAgICAgICBkPSJtNDEuNDUyIDQ1LjEwNWMtMC41NjIgMC0xLjAxNSAwLjQ1My0xLjAxNSAxLjAxNXY2LjkxOGMwIDAuNTYyIDAuNDUzIDEuMDE1IDEuMDE1IDEuMDE1aDYuOTE4YzAuNTYyIDAgMS4wMTUtMC40NTMgMS4wMTUtMS4wMTV2LTYuOTE4YzAtMC41NjItMC40NTMtMS4wMTUtMS4wMTUtMS4wMTVoLTYuOTE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAtMSAxIDAgLTYuMDcwOCA3Ni41MzIpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDAiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibS00NC4wNCAyOC40MDRjLTAuNTYzIDAtMS4wMTUgMC40NTMtMS4wMTUgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MiAxLjAxNSAxLjAxNSAxLjAxNWg2LjkxOGMwLjU2MiAwIDEuMDE0LTAuNDUzIDEuMDE0LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUyLTEuMDE1LTEuMDE0LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgMSAwIDEuNDM5NiAwKSIKICAgICAgICAvPgogICAgICA8L2cKICAgICAgPgogICAgICA8ZwogICAgICAgICAgaWQ9Imc5NDAiCiAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtLjMyMzQ0KSIKICAgICAgICA+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDEiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibTEyLjkgMTMuMjE1Yy0wLjU2MiAwLTEuMDE0IDAuNDUzLTEuMDE0IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTIgMS4wMTUgMS4wMTQgMS4wMTVoNi45MThjMC41NjMgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1Mi0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwIDEgLTEgMCAzNC4zNzIgLTYuOTExNSkiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDk0MiIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAxMjc7ZmlsbDojZmZmZmZmIgogICAgICAgICAgICBkPSJtMjEuODYxIDEzLjIxNWMtMC41NjIgMC0xLjAxNSAwLjQ1My0xLjAxNSAxLjAxNXY2LjkxOGMwIDAuNTYyIDAuNDUzIDEuMDE1IDEuMDE1IDEuMDE1aDYuOTE4YzAuNTYyIDAgMS4wMTUtMC40NTMgMS4wMTUtMS4wMTV2LTYuOTE4YzAtMC41NjItMC40NTMtMS4wMTUtMS4wMTUtMS4wMTVoLTYuOTE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIC0xIDAgMzQuMzcyIC02LjkxMTUpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDMiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibTMwLjgyMiAxMy4yMTVjLTAuNTYyIDAtMS4wMTUgMC40NTMtMS4wMTUgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MyAxLjAxNSAxLjAxNSAxLjAxNWg2LjkxOGMwLjU2MiAwIDEuMDE1LTAuNDUzIDEuMDE1LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUzLTEuMDE1LTEuMDE1LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgMSAtMSAwIDM0LjM3MiAtNi45MTE1KSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTQ0IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im01Ljk4ODktMzEuNzg3Yy0wLjU2MjIgMC0xLjAxNDcgMC40NTMtMS4wMTQ3IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTI1IDEuMDE1IDEuMDE0NyAxLjAxNWg2LjkxODFjMC41NjIgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1My0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTgxeiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIC0xIDAgLTEuMjU5NiAwKSIKICAgICAgICAvPgogICAgICA8L2cKICAgICAgPgogICAgPC9nCiAgICA+CiAgPC9nCiAgPgogIDxtZXRhZGF0YQogICAgPgogICAgPHJkZjpSREYKICAgICAgPgogICAgICA8Y2M6V29yawogICAgICAgID4KICAgICAgICA8ZGM6Zm9ybWF0CiAgICAgICAgICA+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0CiAgICAgICAgPgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiCiAgICAgICAgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi8iCiAgICAgICAgLz4KICAgICAgICA8ZGM6cHVibGlzaGVyCiAgICAgICAgICA+CiAgICAgICAgICA8Y2M6QWdlbnQKICAgICAgICAgICAgICByZGY6YWJvdXQ9Imh0dHA6Ly9vcGVuY2xpcGFydC5vcmcvIgogICAgICAgICAgICA+CiAgICAgICAgICAgIDxkYzp0aXRsZQogICAgICAgICAgICAgID5PcGVuY2xpcGFydDwvZGM6dGl0bGUKICAgICAgICAgICAgPgogICAgICAgICAgPC9jYzpBZ2VudAogICAgICAgICAgPgogICAgICAgIDwvZGM6cHVibGlzaGVyCiAgICAgICAgPgogICAgICA8L2NjOldvcmsKICAgICAgPgogICAgICA8Y2M6TGljZW5zZQogICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9wdWJsaWNkb21haW4vIgogICAgICAgID4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1JlcHJvZHVjdGlvbiIKICAgICAgICAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjRGlzdHJpYnV0aW9uIgogICAgICAgIC8+CiAgICAgICAgPGNjOnBlcm1pdHMKICAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEZXJpdmF0aXZlV29ya3MiCiAgICAgICAgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"klickety,klickety\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"klickety.klickety\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Klickety\"\nLABEL oc.displayname=\"Klickety\"\nLABEL oc.path=\"/usr/games/klickety\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Klickety\"\nENV APPBIN \"/usr/games/klickety\"\nENV APP \"/usr/games/klickety\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/klickety/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/klickety/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/klickety/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/klickety/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-klotski && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-klotski.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzgiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYuOTMzIDE2LjkzMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcyBpZD0iZGVmczE4Ij4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA1OCI+CiAgIDxzdG9wIGlkPSJzdG9wMTA1NCIgc3RvcC1jb2xvcj0iIzEzNmRlMiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wMTA1NiIgc3RvcC1jb2xvcj0iIzI2YmJjZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA0MiI+CiAgIDxzdG9wIGlkPSJzdG9wMTAzOCIgc3RvcC1jb2xvcj0iI2ZmYjYzNiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wMTA0MCIgc3RvcC1jb2xvcj0iI2VlZWQ1MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjIiIHN0ZERldmlhdGlvbj0iMC4yMzgxMjAzMiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjkuMjYwMyIgeDI9IjkuMjYwMyIgeTE9Ii0uMjYyNDkiIHkyPSIxNS42MTIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS43OTM4NCAuNzkxNjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wNSIgc3RvcC1jb2xvcj0iIzJlMzIzZSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wNyIgc3RvcC1jb2xvcj0iIzUwNTY2NCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMyIiB4PSItLjA2IiB5PSItLjA2IiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzNCIgc3RkRGV2aWF0aW9uPSIwLjYiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA0NCIgeDE9IjM4LjgzOCIgeDI9IjM4Ljg3NSIgeTE9IjMxLjgyOSIgeTI9IjE1LjU5OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNDIiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA1MiIgeDE9IjE2IiB4Mj0iMzEuMzU5IiB5MT0iMzkuMDQiIHkyPSIzOS4wNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNDIiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA2MCIgeDE9IjI5LjkxOSIgeDI9IjI5Ljk3NSIgeTE9IjM0Ljc2NyIgeTI9IjI1LjMzOSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNTgiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA2OCIgeDE9IjE3LjQ0MyIgeDI9IjE3LjcxIiB5MT0iMjIuNTAyIiB5Mj0iMTMuNDk4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTA1OCIvPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlMjAiIGN4PSI4LjQ2NjUiIGN5PSI4LjQ2NjUiIHI9IjcuOTM3MyIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjk2Mjk5IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPGNpcmNsZSBpZD0iY2lyY2xlMjIiIGN4PSI4LjQ2NjUiIGN5PSI4LjQ2NjUiIHI9IjcuOTM3MyIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIuOTYyOTkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiA8ZyBpZD0iZzMzIiB0cmFuc2Zvcm09Im1hdHJpeCguMzM4NjYgMCAwIC4zMzg2NiAuNTA3OTkgLjUwNzk5KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMzIpIiBvcGFjaXR5PSIuMjUiPgogIDxwYXRoIGlkPSJwYXRoMjEiIGQ9Im0xNS4zMzIgMTRoNS4zMzZjMC43MzQgMCAxLjMzMiAwLjU5OCAxLjMzMiAxLjMzMnY1LjMzNmMwIDAuNzM0LTAuNTk4IDEuMzMyLTEuMzMyIDEuMzMyaC01LjMzNmMtMC43MzQgMC0xLjMzMi0wLjU5OC0xLjMzMi0xLjMzMnYtNS4zMzZjMC0wLjczNCAwLjU5OC0xLjMzMiAxLjMzMi0xLjMzMiIvPgogIDxwYXRoIGlkPSJwYXRoMjMiIGQ9Im0yNy4zMzIgMjZoNS4zMzZjMC43MzggMCAxLjMzMiAwLjU5OCAxLjMzMiAxLjMzMnY1LjMzNmMwIDAuNzM4LTAuNTk0IDEuMzMyLTEuMzMyIDEuMzMyaC01LjMzNmMtMC43MzQgMC0xLjMzMi0wLjU5NC0xLjMzMi0xLjMzMnYtNS4zMzZjMC0wLjczNCAwLjU5OC0xLjMzMiAxLjMzMi0xLjMzMiIvPgogIDxwYXRoIGlkPSJwYXRoMjUiIGQ9Im0xNCAyNGMtMS4xMDkgMC0yIDAuODkxLTIgMnY4YzAgMS4xMDkgMC44OTEgMiAyIDJoOGMxLjEwOSAwIDItMC44OTEgMi0ydi04YzAtMS4xMDktMC44OTEtMi0yLTJtLTggMWg4YzAuNTU1IDAgMSAwLjQ0NSAxIDF2OGMwIDAuNTU1LTAuNDQ1IDEtMSAxaC04Yy0wLjU1NSAwLTEtMC40NDUtMS0xdi04YzAtMC41NTUgMC40NDUtMSAxLTEiLz4KICA8cGF0aCBpZD0icGF0aDI3IiBkPSJtMTUgMjZoNmMwLjU1MSAwIDEgMC40NDkgMSAxdjZjMCAwLjU1MS0wLjQ0OSAxLTEgMWgtNmMtMC41NTEgMC0xLTAuNDQ5LTEtMXYtNmMwLTAuNTUxIDAuNDQ5LTEgMS0xIi8+CiAgPHBhdGggaWQ9InBhdGgyOSIgZD0ibTI2IDEyYy0xLjEwOSAwLTIgMC44OTEtMiAydjhjMCAxLjEwOSAwLjg5MSAyIDIgMmg4YzEuMTA5IDAgMi0wLjg5MSAyLTJ2LThjMC0xLjEwOS0wLjg5MS0yLTItMm0tOCAxaDhjMC41NTUgMCAxIDAuNDQ1IDEgMXY4YzAgMC41NTUtMC40NDUgMS0xIDFoLThjLTAuNTU1IDAtMS0wLjQ0NS0xLTF2LThjMC0wLjU1NSAwLjQ0NS0xIDEtMSIvPgogIDxwYXRoIGlkPSJwYXRoMzEiIGQ9Im0yNyAxNGg2YzAuNTUxIDAgMSAwLjQ0OSAxIDF2NmMwIDAuNTUxLTAuNDQ5IDEtMSAxaC02Yy0wLjU1MSAwLTEtMC40NDktMS0xdi02YzAtMC41NTEgMC40NDktMSAxLTEiLz4KIDwvZz4KIDxnIGlkPSJnNTkiIHRyYW5zZm9ybT0ibWF0cml4KC4zMzg2NiAwIDAgLjMzODY2IC4xNjkzMyAuMTY5MzMpIj4KICA8ZyBpZD0iZzU3Ij4KICAgPGcgaWQ9Imc1NSI+CiAgICA8cGF0aCBpZD0icGF0aDQzIiBkPSJtMTUuMzMyIDE0aDUuMzM2YzAuNzM0IDAgMS4zMzIgMC41OTggMS4zMzIgMS4zMzJ2NS4zMzZjMCAwLjczNC0wLjU5OCAxLjMzMi0xLjMzMiAxLjMzMmgtNS4zMzZjLTAuNzM0IDAtMS4zMzItMC41OTgtMS4zMzItMS4zMzJ2LTUuMzM2YzAtMC43MzQgMC41OTgtMS4zMzIgMS4zMzItMS4zMzIiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxMDY4KSIvPgogICAgPHBhdGggaWQ9InBhdGg0NSIgZD0ibTI3LjMzMiAyNmg1LjMzNmMwLjczOCAwIDEuMzMyIDAuNTk4IDEuMzMyIDEuMzMydjUuMzM2YzAgMC43MzgtMC41OTQgMS4zMzItMS4zMzIgMS4zMzJoLTUuMzM2Yy0wLjczNCAwLTEuMzMyLTAuNTk0LTEuMzMyLTEuMzMydi01LjMzNmMwLTAuNzM0IDAuNTk4LTEuMzMyIDEuMzMyLTEuMzMyIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTA2MCkiLz4KICAgIDxwYXRoIGlkPSJwYXRoNDciIHRyYW5zZm9ybT0ibWF0cml4KC43ODEyNSAwIDAgLjc4MTI1IC0uNSAtLjUpIiBkPSJtMTguNTYxIDMxLjM1OWMtMS40MTk1IDAtMi41NjA1IDEuMTQxLTIuNTYwNSAyLjU2MDV2MTAuMjRjMCAxLjQxOTUgMS4xNDEgMi41NjA1IDIuNTYwNSAyLjU2MDVoMTAuMjRjMS40MTk1IDAgMi41NTg2LTEuMTQxIDIuNTU4Ni0yLjU2MDV2LTEwLjI0YzAtMS40MTk1LTEuMTM5MS0yLjU2MDUtMi41NTg2LTIuNTYwNWgtMTAuMjR6bTAgMS4yODEyaDEwLjI0YzAuNzEwNCAwIDEuMjc5MyAwLjU2ODkgMS4yNzkzIDEuMjc5M3YxMC4yNGMwIDAuNzEwNC0wLjU2ODkgMS4yNzkzLTEuMjc5MyAxLjI3OTNoLTEwLjI0Yy0wLjcxMDQgMC0xLjI4MTItMC41Njg5LTEuMjgxMi0xLjI3OTN2LTEwLjI0YzAtMC43MTA0IDAuNTcwODUtMS4yNzkzIDEuMjgxMi0xLjI3OTN6bTEuMjc5MyAxLjI3OTNjLTAuNzA1MjggMC0xLjI3OTMgMC41NzQwMi0xLjI3OTMgMS4yNzkzdjcuNjgxNmMwIDAuNzA1MjggMC41NzQwMiAxLjI3OTMgMS4yNzkzIDEuMjc5M2g3LjY3OTdjMC43MDUyOCAwIDEuMjgxMi0wLjU3NDAyIDEuMjgxMi0xLjI3OTN2LTcuNjgxNmMwLTAuNzA1MjgtMC41NzU5Ny0xLjI3OTMtMS4yODEyLTEuMjc5M2gtNy42Nzk3eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDEwNTIpIi8+CiAgICA8cGF0aCBpZD0icGF0aDUxIiB0cmFuc2Zvcm09Im1hdHJpeCguNzgxMjUgMCAwIC43ODEyNSAtLjUgLS41KSIgZD0ibTMzLjkyIDE2Yy0xLjQxOTUgMC0yLjU2MDUgMS4xNDEtMi41NjA1IDIuNTYwNXYxMC4yNGMwIDEuNDE5NSAxLjE0MSAyLjU1ODYgMi41NjA1IDIuNTU4NmgxMC4yNGMxLjQxOTUgMCAyLjU2MDUtMS4xMzkxIDIuNTYwNS0yLjU1ODZ2LTEwLjI0YzAtMS40MTk1LTEuMTQxLTIuNTYwNS0yLjU2MDUtMi41NjA1aC0xMC4yNHptMCAxLjI3OTNoMTAuMjRjMC43MTA0IDAgMS4yNzkzIDAuNTcwODUgMS4yNzkzIDEuMjgxMnYxMC4yNGMwIDAuNzEwNC0wLjU2ODkgMS4yNzkzLTEuMjc5MyAxLjI3OTNoLTEwLjI0Yy0wLjcxMDQgMC0xLjI3OTMtMC41Njg5LTEuMjc5My0xLjI3OTN2LTEwLjI0YzAtMC43MTA0IDAuNTY4OS0xLjI4MTIgMS4yNzkzLTEuMjgxMnptMS4yNzkzIDEuMjgxMmMtMC43MDUyOCAwLTEuMjc5MyAwLjU3NDAyLTEuMjc5MyAxLjI3OTN2Ny42Nzk3YzAgMC43MDUyOCAwLjU3NDAyIDEuMjgxMiAxLjI3OTMgMS4yODEyaDcuNjgxNmMwLjcwNTI4IDAgMS4yNzkzLTAuNTc1OTcgMS4yNzkzLTEuMjgxMnYtNy42Nzk3YzAtMC43MDUyOC0wLjU3NDAyLTEuMjc5My0xLjI3OTMtMS4yNzkzaC03LjY4MTZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTA0NCkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"klotski,gnome klotski,game klotski,klotski\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-klotski.desktop\"\nLABEL oc.launch=\"gnome-klotski.Gnome-klotski\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"klotski\"\nLABEL oc.displayname=\"klotski\"\nLABEL oc.path=\"/usr/games/gnome-klotski\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"384M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"klotski\"\nENV APPBIN \"/usr/games/gnome-klotski\"\nENV APP \"/usr/games/gnome-klotski\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/klotski/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/klotski/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/klotski/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/klotski/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/konsole/#post-run-command","title":"POST run command","text":"
POST run command are run after the package install comman
RUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update konsole, sudo\nLABEL oc.icon=\"konsole.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJvIiB4Mj0iMSIgeTI9IjEiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMxMTEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNTU1Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJuIiB4MT0iNTUuOTUiIHgyPSI1NS45NSIgeTE9IjgxIiB5Mj0iODAiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wODggMCAwIDEgMy4zNjQgMTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGRiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRUUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0NCIgeDI9IjQ0IiB5MT0iNDQiIHkyPSI0MCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjRkZGIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFRUVFQyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjI0IiB4Mj0iMjQiIHkxPSI0MCIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiNGRkYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUVFRUVDIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iOSIgeDI9IjEwNi41NiIgeTE9IjI0LjMyIiB5Mj0iNTMuNjYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNTU1NzUzIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjYzIiBzdG9wLWNvbG9yPSIjMkUyRTJFIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzJFMkUyRSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjU2IiB4Mj0iNTYiIHkxPSI4MSIgeTI9IjciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wODIgMCAwIDEuMDE0IDMuNDMgNy45MDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0JCQiIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii41OSIgc3RvcC1jb2xvcj0iIzlGOUY5RiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM4ODgiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJpIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjQwIiB5Mj0iMjAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2IiIGlkPSJqIiB4MT0iNDQiIHgyPSI0NCIgeTE9IjQ0IiB5Mj0iNDAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJsIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjQwIiB5Mj0iMjAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2MiIGlkPSJmIiB4MT0iOCIgeDI9IjEyMCIgeTE9IjQwLjY3IiB5Mj0iNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOCAwIC05LjE4OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2QiIGlkPSJwIiB4MT0iNjQiIHgyPSI2NCIgeTE9IjE3LjM2IiB5Mj0iNjUuODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOCAwIC05LjE4OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8ZmlsdGVyIGlkPSJrIiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjQ4IiB4PSItLjEiIHk9Ii0uMiI+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii40Ii8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIgaWQ9Im0iIHdpZHRoPSIxLjIyIiBoZWlnaHQ9IjEuMTciIHg9Ii0uMSIgeT0iLS4xIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjcyIi8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIgaWQ9ImUiPgogICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjA4Ii8+CiAgICA8L2ZpbHRlcj4KICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjUyIiBjeT0iLTMxIiByPSIxMzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iNTIiIGN5PSItMzEiIHI9IjEzNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNjNmM2YzYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuNTIiIHN0b3AtY29sb3I9IiNFRUUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzZjNmM2Ii8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogIDwvZGVmcz4KICA8cGF0aCBkPSJNMyAwQzEuNCAwIDAgMS40IDAgM3Y5MGMwIDEuNiAxLjQgMyAzIDNoMTA2YzEuNiAwIDMtMS40IDMtM1YzYzAtMS42LTEuNC0zLTMtM0gzeiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzYgMCAwIDEuMTM1IDYgNykiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2YpIiBkPSJNMTEgOGMtMS42IDAtMyAxLjUtMyAzLjN2OTdjMCAyIDEuNCAzLjQgMyAzLjRoMTA2YzEuNiAwIDMtMS41IDMtMy4zdi05N2MwLTItMS40LTMuMy0zLTMuM0gxMXoiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2cpIiBkPSJNMTIgMTVjLS41IDAtMSAuNS0xIDF2NzNjMCAuNi41IDEgMSAxaDEwNGMuNSAwIDEtLjUgMS0xVjE2YzAtLjYtLjUtMS0xLTFIMTJ6Ii8+CiAgPHBhdGggZD0iTTEyIDE2aDEwNHY4MEgxMnoiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2gpIiBkPSJNMTAzIDc2YzAgMS42LTEuNCAzLTMgM0gxMmMtMS42IDAtMy0xLjQtMy0zVjEyYzAtMS42IDEuNC0zIDMtM2g4OGMxLjYgMCAzIDEuNCAzIDN2NjR6IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjA4NSAwIDAgMS4xMTQgMy4yMzQgNi45NykiLz4KICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMgNTNjNDItMjIuNCA4Mi4yLTI3LjYgMTAyLTI4LjdWMTdIMTN2MzZ6IiBvcGFjaXR5PSIuMDUiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2kpIiBkPSJtMzYgNDgtMTYgOHYtNC4zTDMwLjcgNDYgMjAgNDAuM1YzNmwxNiA4LjNWNDh6IiBvcGFjaXR5PSIuOSIvPgogIDxwYXRoIGZpbGw9InVybCgjaikiIGQ9Ik01NiA2MEg0MHYtNGgxNnY0eiIgb3BhY2l0eT0iLjkiLz4KICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNNjAgNjBINDR2LTRoMTZ2NHoiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjIiIHRyYW5zZm9ybT0ibWF0cml4KDEuMTI1IDAgMCAxLjUgLTEwLjUgLTI5KSIvPgogIDxwYXRoIGZpbGw9InVybCgjbCkiIGQ9Im0zNiA0OC0xNiA4di00LjNMMzAuNyA0NiAyMCA0MC4zVjM2bDE2IDguM1Y0OHoiIGZpbHRlcj0idXJsKCNtKSIgb3BhY2l0eT0iLjQiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI24pIiBkPSJtMTE3LjIgOTYuNy0uNi0uN0gxMmwtLjguNmMuMi4yLjUuNC44LjRoMTA0LjVjLjMgMCAuNSAwIC43LS4zeiIvPgogIDxnIGZpbGw9InVybCgjbykiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDggMTUpIj4KICAgIDxjaXJjbGUgY3g9IjEwMSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMDQiIGN5PSI4OSIgcj0iMSIvPgogICAgPGNpcmNsZSBjeD0iMTAzIiBjeT0iOTIiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9Ijk3IiBjeT0iODYiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwMCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzOSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyOSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyOCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5IiBjeT0iODYiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iODkiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOTIiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjgiIGN5PSI4OSIgcj0iMSIvPgogIDwvZz4KICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNMTEgOGMtMS42IDAtMyAxLjUtMyAzLjN2OTdjMCAxIC40IDIgMSAyLjZWMTIuM2MwLTEuOCAxLjMtMy4yIDMtMy4yaDEwNGMxLjcgMCAzIDEuNCAzIDMuMi43IDI1IDAgOTguMiAwIDk4LjJ2LjNjLjYtLjcgMS0xLjYgMS0yLjV2LTk3YzAtMS44LTEuNC0zLjItMy0zLjJIMTF6IiBvcGFjaXR5PSIuOSIvPgo8L3N2Zz4=\"\nLABEL oc.keyword=\"konsole,ksonsole,console,shell,bash,sh\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"konsole.konsole\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"konsole\"\nLABEL oc.displayname=\"konsole\"\nLABEL oc.path=\"/usr/bin/konsole\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"konsole\"\nENV APPBIN \"/usr/bin/konsole\"\nENV APP \"/usr/bin/konsole\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/konsole/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/konsole/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/konsole/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/konsole/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 dbus-user-session ksquares && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"ksquares.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmVyc2lvbj0iMSI+CiA8cmVjdCBzdHlsZT0ib3BhY2l0eTowLjIiIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgeD0iLTMxIiB5PSItMzAiIHJ4PSIxLjQiIHJ5PSIxLjQiIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCwwLDApIi8+CiA8cmVjdCB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHg9Ii0zMCIgeT0iLTMwIiByeD0iMS40IiByeT0iMS40IiB0cmFuc2Zvcm09Im1hdHJpeCgwLC0xLC0xLDAsMCwwKSIgc3R5bGU9ImZpbGw6IzhlOGU4ZSIvPgogPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzNmM2YzZjtzdHJva2Utd2lkdGg6MiIgZD0iTSA2LDIwIEggMTYgViAxMiBIIDI2Ii8+CiA8cGF0aCBkPSJtIDE2LDExIGEgMiwyIDAgMCAwIC0yLDIgMiwyIDAgMCAwIDIsMiAyLDIgMCAwIDAgMiwtMiAyLDIgMCAwIDAgLTIsLTIgeiBtIDEwLDAgYSAyLDIgMCAwIDAgLTIsMiAyLDIgMCAwIDAgMiwyIDIsMiAwIDAgMCAyLC0yIDIsMiAwIDAgMCAtMiwtMiB6IE0gNiwxOSBhIDIsMiAwIDAgMCAtMiwyIDIsMiAwIDAgMCAyLDIgMiwyIDAgMCAwIDIsLTIgMiwyIDAgMCAwIC0yLC0yIHogbSAxMCwwIGEgMiwyIDAgMCAwIC0yLDIgMiwyIDAgMCAwIDIsMiAyLDIgMCAwIDAgMiwtMiAyLDIgMCAwIDAgLTIsLTIgeiIgc3R5bGU9Im9wYWNpdHk6MC4yIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmIiBkPSJNIDE2IDEwIEEgMiAyIDAgMCAwIDE0IDEyIEEgMiAyIDAgMCAwIDE2IDE0IEEgMiAyIDAgMCAwIDE4IDEyIEEgMiAyIDAgMCAwIDE2IDEwIHogTSAyNiAxMCBBIDIgMiAwIDAgMCAyNCAxMiBBIDIgMiAwIDAgMCAyNiAxNCBBIDIgMiAwIDAgMCAyOCAxMiBBIDIgMiAwIDAgMCAyNiAxMCB6IE0gNiAxOCBBIDIgMiAwIDAgMCA0IDIwIEEgMiAyIDAgMCAwIDYgMjIgQSAyIDIgMCAwIDAgOCAyMCBBIDIgMiAwIDAgMCA2IDE4IHogTSAxNiAxOCBBIDIgMiAwIDAgMCAxNCAyMCBBIDIgMiAwIDAgMCAxNiAyMiBBIDIgMiAwIDAgMCAxOCAyMCBBIDIgMiAwIDAgMCAxNiAxOCB6Ii8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmO29wYWNpdHk6MC4xIiBkPSJNIDMuNDAwMzkwNiAyIEMgMi42MjQ3OTA2IDIgMiAyLjYyNDc5MDYgMiAzLjQwMDM5MDYgTCAyIDQuNDAwMzkwNiBDIDIgMy42MjQ3OTA2IDIuNjI0NzkwNiAzIDMuNDAwMzkwNiAzIEwgMjguNTk5NjA5IDMgQyAyOS4zNzUyMDkgMyAzMCAzLjYyNDc5MDYgMzAgNC40MDAzOTA2IEwgMzAgMy40MDAzOTA2IEMgMzAgMi42MjQ3OTA2IDI5LjM3NTIwOSAyIDI4LjU5OTYwOSAyIEwgMy40MDAzOTA2IDIgeiIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"ksquares,ksquares\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"ksquares.ksquares\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu\"\nLABEL oc.name=\"kSquares\"\nLABEL oc.displayname=\"kSquares\"\nLABEL oc.path=\"/usr/games/ksquares\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kSquares\"\nENV APPBIN \"/usr/games/ksquares\"\nENV APP \"/usr/games/ksquares\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/ksquares/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/ksquares/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/ksquares/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/ksquares/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kturtle mesa-dri-gallium\nLABEL oc.icon=\"kturtle.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZlcnNpb249IjEuMCIKICAgeD0iMC4wMDAwMDAwIgogICB5PSIwLjAwMDAwMDAiCiAgIHdpZHRoPSIyNTYuMDAwMDAiCiAgIGhlaWdodD0iMjU2LjAwMDAwIgogICB2aWV3Qm94PSIwIDAgMjU2IDI1NiIKICAgaWQ9InN2ZzE0MzIiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjxkZWZzCiAgIGlkPSJkZWZzMTUzNiI+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDc4NSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwNjdhMDc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMCIKICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgaWQ9InN0b3A0Nzg3IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTllZWE4O3N0b3Atb3BhY2l0eTowLjc1NjM0NTE1IgogICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICBpZD0ic3RvcDQ3ODkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICB4MT0iLTIwMi40NjUxMiIKICAgICB5MT0iNTIuMDQ2NTUxIgogICAgIHgyPSItNzYuMjUyMzEyIgogICAgIHkyPSIyNDguMzc1MzciCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDc5MSIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0Nzg1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNTczMTAsMC4wMDAwMDAsMC4wMDAwMDAsMS4wNTczMTAsMjk4LjE2MzUsNy4wMjA2MTMpIiAvPjwvZGVmcz4KCQo8cGF0aAogICBkPSJNIDEwNy41Mjg0MCw1LjE3MDM2MzMgTCAxMDcuNTI4NDAsMjUuNjQxOTY5IEwgODcuMDU2ODAwLDI1LjY0MTk2OSBMIDg3LjA1NjgwMCw0Ni4xMTM1NzUgTCA4Ny4wNTY4MDAsNjYuNTg1MTgxIEwgMTA3LjUyODQwLDY2LjU4NTE4MSBMIDEwNy41Mjg0MCw4Ny4wNTY3ODYgTCA4Ny4wNTY4MDAsODcuMDU2Nzg2IEwgODcuMDU2ODAwLDEwNy41MjgzOSBMIDY2LjU4NTE5NCwxMDcuNTI4MzkgTCA2Ni41ODUxOTQsMTI4LjAwMDAwIEwgNDYuMTEzNTg4LDEyOC4wMDAwMCBMIDQ2LjExMzU4OCwxNDguNDcxNjEgTCA0Ni4xMTM1ODgsMTY4Ljk0MzIwIEwgNDYuMTEzNTg4LDE4OS40MTQ4MiBMIDY2LjU4NTE5NCwxODkuNDE0ODIgTCA2Ni41ODUxOTQsMjA5Ljg4NjQxIEwgODcuMDU2ODAwLDIwOS44ODY0MSBMIDg3LjA1NjgwMCwyMzAuMzU4MDMgTCAxMDcuNTI4NDAsMjMwLjM1ODAzIEwgMTI4LjAwMDAwLDIzMC4zNTgwMyBMIDE0OC40NzE2MSwyMzAuMzU4MDMgTCAxNjguOTQzMjAsMjMwLjM1ODAzIEwgMTY4Ljk0MzIwLDIwOS44ODY0MSBMIDE4OS40MTQ4MywyMDkuODg2NDEgTCAxODkuNDE0ODMsMTg5LjQxNDgyIEwgMjA5Ljg4NjQzLDE4OS40MTQ4MiBMIDIwOS44ODY0MywxNjguOTQzMjAgTCAyMDkuODg2NDMsMTQ4LjQ3MTYxIEwgMjA5Ljg4NjQzLDEyOC4wMDAwMCBMIDE4OS40MTQ4MywxMjguMDAwMDAgTCAxODkuNDE0ODMsMTA3LjUyODM5IEwgMTY4Ljk0MzIwLDEwNy41MjgzOSBMIDE2OC45NDMyMCw4Ny4wNTY3ODYgTCAxNDguNDcxNjEsODcuMDU2Nzg2IEwgMTQ4LjQ3MTYxLDY2LjU4NTE4MSBMIDE2OC45NDMyMCw2Ni41ODUxODEgTCAxNjguOTQzMjAsNDYuMTEzNTc1IEwgMTY4Ljk0MzIwLDI1LjY0MTk2OSBMIDE0OC40NzE2MSwyNS42NDE5NjkgTCAxNDguNDcxNjEsNS4xNzAzNjMzIEwgMTI4LjAwMDAwLDUuMTcwMzYzMyBMIDEwNy41Mjg0MCw1LjE3MDM2MzMgeiBNIDE4OS40MTQ4MywxMDcuNTI4MzkgTCAyMDkuODg2NDMsMTA3LjUyODM5IEwgMjA5Ljg4NjQzLDg3LjA1Njc4NiBMIDIzMC4zNTgwMiw4Ny4wNTY3ODYgTCAyMzAuMzU4MDIsNjYuNTg1MTgxIEwgMjA5Ljg4NjQzLDY2LjU4NTE4MSBMIDE4OS40MTQ4Myw2Ni41ODUxODEgTCAxODkuNDE0ODMsODcuMDU2Nzg2IEwgMTg5LjQxNDgzLDEwNy41MjgzOSB6IE0gMTg5LjQxNDgzLDIwOS44ODY0MSBMIDE4OS40MTQ4MywyMzAuMzU4MDMgTCAxODkuNDE0ODMsMjUwLjgyOTY0IEwgMjA5Ljg4NjQzLDI1MC44Mjk2NCBMIDIzMC4zNTgwMiwyNTAuODI5NjQgTCAyMzAuMzU4MDIsMjMwLjM1ODAzIEwgMjA5Ljg4NjQzLDIzMC4zNTgwMyBMIDIwOS44ODY0MywyMDkuODg2NDEgTCAxODkuNDE0ODMsMjA5Ljg4NjQxIHogTSA2Ni41ODUxOTQsMjA5Ljg4NjQxIEwgNDYuMTEzNTg4LDIwOS44ODY0MSBMIDQ2LjExMzU4OCwyMzAuMzU4MDMgTCAyNS42NDE5ODMsMjMwLjM1ODAzIEwgMjUuNjQxOTgzLDI1MC44Mjk2NCBMIDQ2LjExMzU4OCwyNTAuODI5NjQgTCA2Ni41ODUxOTQsMjUwLjgyOTY0IEwgNjYuNTg1MTk0LDIzMC4zNTgwMyBMIDY2LjU4NTE5NCwyMDkuODg2NDEgeiBNIDY2LjU4NTE5NCwxMDcuNTI4MzkgTCA2Ni41ODUxOTQsODcuMDU2Nzg2IEwgNjYuNTg1MTk0LDY2LjU4NTE4MSBMIDQ2LjExMzU4OCw2Ni41ODUxODEgTCAyNS42NDE5ODMsNjYuNTg1MTgxIEwgMjUuNjQxOTgzLDg3LjA1Njc4NiBMIDQ2LjExMzU4OCw4Ny4wNTY3ODYgTCA0Ni4xMTM1ODgsMTA3LjUyODM5IEwgNjYuNTg1MTk0LDEwNy41MjgzOSB6ICIKICAgc3R5bGU9Im9wYWNpdHk6MS4wMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQ3OTEpO2ZpbGwtb3BhY2l0eToxLjAwMDAwMDA7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjguNDk5OTk4MTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQuMDAwMDAwMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MS4wMDAwMDAwO292ZXJmbG93OnZpc2libGUiCiAgIGlkPSJwYXRoNDA1NyIgLz48L3N2Zz4=\"\nLABEL oc.keyword=\"kturtle,kturtle\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kturtle.desktop\"\nLABEL oc.launch=\"kturtle.kturtle\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"kTurtle\"\nLABEL oc.displayname=\"kTurtle\"\nLABEL oc.path=\"/usr/bin/kturtle\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kTurtle\"\nENV APPBIN \"/usr/bin/kturtle\"\nENV APP \"/usr/bin/kturtle\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kturtle/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kturtle/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kturtle/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kturtle/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends leocad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"leocad.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSIwIiB4MT0iMjcuNDU2IiB5MT0iNDcuMzkiIHgyPSIyNi40NDIiIHkyPSIxLjAxNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNlMWUxZTEiLz48c3RvcCBzdG9wLWNvbG9yPSIjZjRmNGZmIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iMSIgeDE9IjI0LjE0IiB5MT0iNDAuNjgzIiB4Mj0iMjMuODYiIHkyPSI2LjMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2M1MjgyOCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZjU0NTQiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Im0yLjk4LS4wMDJoNDIuMDRjMS42NTIgMCAyLjk4MiAxLjMzIDIuOTgyIDIuOTgydjQyLjA0YzAgMS42NTItMS4zMyAyLjk4Mi0yLjk4MiAyLjk4MmgtNDIuMDRjLTEuNjUyIDAtMi45ODItMS4zMy0yLjk4Mi0yLjk4MnYtNDIuMDRjMC0xLjY1MiAxLjMzLTIuOTgyIDIuOTgyLTIuOTgyIiBmaWxsPSJ1cmwoIzApIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJtMjQuMTcgN2MtMS43MSAwLTIuOTk5Ljc0NS0zIDEuNzMydjEuMjU0Yy0uMDI2LjAwMS0uMDUzLjAwOS0uMDc4LjAyMWwtMS45MzggMWMtLjA4My4wNDMtLjE1Mi4xMDItLjIwOS4xNjgtLjQ5MS0uMjAyLTEuMDk2LS4zMjItMS43NzMtLjMyMi0xLjcwOSAwLTIuOTk4Ljc0My0yLjk5OCAxLjczdjEuMDY4Yy0uMTA4LjAwMy0uMjE2LjAyMy0uMzE2LjA3OGwtMy43MDEgMi4wMWMtLjEyOC4wNjktLjIxNC4xNzctLjI3Ny4yOTctLjAxOC4wMjctLjAyOS4wNTMtLjA0My4wODItLjAxMi4wMzQtLjAyLjA2Ny0uMDI3LjEwMi0uMDIuMDY2LS4wNTMuMTI4LS4wNTMuMTk5djE2LjI5M2MwIC4yNTUuMTM4LjQ5MS4zNjEuNjE3bDEzLjQ1OSA3LjU3NmMuMDA5LjAwNS4wMi4wMDMuMDI5LjAwOC4wOTEuMDQ2LjE4OS4wNzIuMjg5LjA3Ni4wMDEgMCAuMDE5LjAwOC4wMjkuMDA4LjA4OSAwIC4xNzEtLjAzOC4yNTQtLjA3LjAzLS4wMTIuMDY1LS4wMDcuMDk0LS4wMjNsLjAwNC0uMDAyYy4wMDItLjAwMDEuMDA0LS4wMDAxLjAwNi0uMDAyLjAwMi0uMDAwMS4wMDItLjAwMy4wMDQtLjAwNGwxMy41OC03LjYyNWMuMjI0LS4xMjUuMzYxLS4zNjIuMzYxLS42MTdsLjAxNC0xNi4yMDVjMC0uMjUxLS4xMzItLjQ4NS0uMzUtLjYxMS0uMDIzLS4wMTQtLjA1Mi0uMDExLS4wNzYtLjAyMS0uMDMyLS4wMjUtLjA1NS0uMDU2LS4wOTItLjA3NmwtMy43MDMtMi4wMWMtLjAxNi0uMDA5LS4wMzMtLjAwOC0uMDQ5LS4wMTZ2LTEuMTQzYzAtLjk4OC0xLjI4OS0xLjczMi0yLjk5OC0xLjczMi0uNzI2IDAtMS4zNjcuMTM5LTEuODc1LjM2OS0uMDM1LS4wMjgtLjA2NC0uMDYyLS4xMDUtLjA4NGwtMS43NjItLjkxYy0uMDItLjAwMS0uMDQyLS4wMDktLjA2My0uMDE4di0xLjQ2NWMwLS45ODgtMS4yODktMS43MzItMi45OTgtMS43MzJtLTEuOTM4IDMuMDYzYy41MTcuMjQ4IDEuMTgxLjM5OCAxLjkzOC4zOTguNzU2IDAgMS40MTktLjE1MSAxLjkzNi0uMzk4djEuOTYzYzAgLjIwNS0uNzMxLjY3LTEuOTM2LjY3LTEuMjA1IDAtMS45MzgtLjQ2NS0xLjkzOC0uNjd2LTEuOTYzbS0xLjA2MyAxLjQ5OHYuNDY1YzAgLjk4NyAxLjI5IDEuNzMgMyAxLjczIDEuNzExIDAgMi45OTktLjc0MyAyLjk5OC0xLjczdi0uMjVsLjg2MS40NDVjLS4wMzcuMTEzLS4wNTcuMjMtLjA1Ny4zNTJ2My4yOTNjMCAuOTg3IDEuMjkgMS43MyAzIDEuNzMgMS43MSAwIDIuOTk5LS43NDMgMi45OTgtMS43M3YtLjU1MWwyLjEgMS4xNDMtMTIuMTQzIDYuNzk5LTEyLjA0LTYuODQyIDIuMjkxLTEuMjQ2di43MDljMCAuOTg3IDEuMjg5IDEuNzMyIDIuOTk4IDEuNzMyIDEuNzA5IDAgMi45OTgtLjc0NSAyLjk5OC0xLjczMnYtMy4yOTNjMC0uMTU5LS4wNDQtLjMwOS0uMTA3LS40NTNsMS4xMDctLjU3bTcuODY1IDIuMzQyYy41MTYuMjQ4IDEuMTgxLjQgMS45MzguNC43NTYgMCAxLjQxOS0uMTUzIDEuOTM2LS40djEuOTYzYzAgLjE5NC0uNjc4LjY2OC0xLjkzNi42NjgtMS4yMDUgMC0xLjkzOC0uNDYzLTEuOTM4LS42Njh2LTEuOTYzbS0xMy44MDEuMDEyYy41MTcuMjQ4IDEuMTgxLjQgMS45MzguNC43NTUgMCAxLjQxOS0uMTUxIDEuOTM2LS4zOTh2MS45NjFjMCAuMTk0LS42NzguNjctMS45MzYuNjctMS4yNTggMC0xLjkzOC0uNDc2LTEuOTM4LS42N3YtMS45NjNtOC44OTEuNzIxYy0xLjcwOSAwLTMgLjc0NS0zIDEuNzMydjMuMjkzYzAgLjk4NyAxLjI5MSAxLjczMiAzIDEuNzMyIDEuNzA5IDAgMi45OTYtLjc0NSAyLjk5Ni0xLjczMnYtMy4yOTNjMC0uOTg3LTEuMjg3LTEuNzMyLTIuOTk2LTEuNzMybS0xLjkzOCAzLjA2MmMuNTE3LjI0OCAxLjE4MS40IDEuOTM4LjQuNzU1IDAgMS40MTgtLjE1MSAxLjkzNC0uMzk4djEuOTYxYzAgLjE5NC0uNjc2LjY3LTEuOTM0LjY3LTEuMjA1IDAtMS45MzgtLjQ2NS0xLjkzOC0uNjd2LTEuOTYzIiBmaWxsPSJ1cmwoIzEpIi8+PC9zdmc+Cg==\"\nLABEL oc.keyword=\"leocad,cad,lego\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"leocad.Leocad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"-l /usr/bin/leocad.library.bin\"\nLABEL oc.name=\"Leocad\"\nLABEL oc.displayname=\"Leocad\"\nLABEL oc.path=\"/usr/bin/leocad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.leocad;application/x-ldraw;application/x-multi-part-ldraw;application/x-ldlite;\"\nLABEL oc.fileextensions=\"lcd\"\nLABEL oc.legacyfileextensions=\"lcd\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Leocad\"\nENV APPBIN \"/usr/bin/leocad\"\nLABEL oc.args=\"-l /usr/bin/leocad.library.bin\"\nENV APP \"/usr/bin/leocad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/leocad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/leocad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/leocad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/leocad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends librecad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"librecad.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48dGl0bGU+TGlicmVDQUQgSWNvbjwvdGl0bGU+PHBhdGggZmlsbD0iIzhlZDkwMCIgZD0iTTAgMGgxMi4xMzh2MTIuMTRIMHoiLz48cGF0aCBmaWxsPSIjOGVkOTAwIiBkPSJNMCA4Ny44NjJoMTIuMTM4djEyLjE0SDB6Ii8+PHBhdGggZmlsbD0iIzhlZDkwMCIgZD0iTTg3Ljg2IDBIMTAwdjEyLjE0SDg3Ljg2eiIvPjxwYXRoIGZpbGw9IiM4ZWQ5MDAiIGQ9Ik04Ny44NiA4Ny44NjJIMTAwdjEyLjE0SDg3Ljg2eiIvPjxwYXRoIGQ9Ik01MCAuMDMyQzIyLjM4Ni4wMzIgMCAyMi4zODYgMCA1MGMwIDI3LjYxNSAyMi4zODYgNTAgNTAgNTBzNTAtMjIuMzg1IDUwLTUwQzEwMCAyMi4zODYgNzcuNjE0LjAzMiA1MCAuMDMyem0wIDEyYzIwLjk4NyAwIDM4IDE2Ljk4MiAzOCAzNy45NjggMCAyMC45ODctMTcuMDEzIDM4LjAzMi0zOCAzOC4wMzItMjAuOTg2IDAtMzgtMTcuMDQ1LTM4LTM4LjAzMiAwLTIwLjk4NiAxNy4wMTQtMzcuOTY4IDM4LTM3Ljk2OHoiIGZpbGw9IiM4ZWQ5MDAiLz48cGF0aCBmaWxsPSIjNGQ0ZDRkIiBkPSJNMTAwIDU2SDI0djZIMFYzOGgyNHY2aDc2eiIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"librecad,librecad,modeling\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"librecad.Librecad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"LibreCAD\"\nLABEL oc.displayname=\"LibreCAD\"\nLABEL oc.path=\"/usr/bin/librecad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/vnd.dxf;\"\nLABEL oc.fileextensions=\"dxf;dwg\"\nLABEL oc.legacyfileextensions=\"dxf;dwg\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"LibreCAD\"\nENV APPBIN \"/usr/bin/librecad\"\nENV APP \"/usr/bin/librecad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/librecad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/librecad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/librecad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/librecad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
This array describe the application list ready to use with abcdesktop.
icon displayname comment description json file 2048 (alpine gtk) Obtain the 2048 tile 2048-alpine.md 2048-alpine.d.3.0.json 2048 (ubuntu qt) The 2048 number game implemented in Qt 2048-ubuntu.md 2048-ubuntu.d.3.0.json Apache Directory Studio no comment apachedirectorystudio.md apachedirectorystudio.d.3.0.json astromenace hardcore 3D space shooter with spaceship upgrade possibilities astromenace.md astromenace.d.3.0.json Base Manage databases, create queries and reports to track and manage your information by using Base. base.md base.d.3.0.json Beekeeper-studio An easy-to use SQL query editor and database UI for Mac, Windows, and Linux beekeeperstudio.md beekeeperstudio.d.3.0.json Blender 3D modeling, animation, rendering and post-production blender.md blender.d.3.0.json Bless Edit binary files bless.md bless.d.3.0.json blobby no comment blobby.md blobby.d.3.0.json Gnome-boxes View and use virtual machines boxes.md boxes.d.3.0.json Brackets no comment brackets.md brackets.d.3.0.json calculator Perform arithmetic, scientific or financial calculations calculator.md calculator.d.3.0.json chess Play the classic two-player board game of chess chess.md chess.d.3.0.json Chrome Access the Internet chrome.md chrome.d.3.0.json chromium (alpine) no comment chromium.md chromium.d.3.0.json citrix-client no comment citrix.md citrix.d.3.0.json Cloud Foundry cli no comment cloudfoundry.md cloudfoundry.d.3.0.json cmd.exe wine (alpine) no comment cmd.exe.md cmd.exe.d.3.0.json corsix-th Open source clone of Theme Hospital corsix-th.md corsix-th.d.3.0.json cuda Use the command line cuda.md cuda.d.3.0.json cuda demo Use the command line cudademo.md cudademo.d.3.0.json cuda developper Use the command line cudadev.md cudadev.d.3.0.json Dia Edit your Diagrams dia.md dia.d.3.0.json Doom no comment doom.md doom.d.3.0.json Draw Create and edit drawings, flow charts and logos by using Draw. draw.md draw.d.3.0.json draw.io draw.io desktop drawio.md drawio.d.3.0.json Microsoft Edge Access the Internet edge.md edge.d.3.0.json eog Browse and rotate images eog.md eog.d.3.0.json Evince View multi-page documents evince.md evince.d.3.0.json Evolution Manage your email, contacts and schedule evolution.md evolution.d.3.0.json file-roller Create and modify an archive file-roller.md file-roller.d.3.0.json Filelight View disk usage information filelight.md filelight.d.3.0.json filezilla (alpine) Download and upload files via FTP, FTPS and SFTP filezilla.md filezilla.d.3.0.json Firefox (esr alpine) Browse the World Wide Web firefox-esr.md firefox-esr.d.3.0.json Firefox (alpine) Browse the World Wide Web firefox.md firefox.d.3.0.json flare A single player, 2D-isometric, action Role-Playing Game flare.md flare.d.3.0.json frozen-bubble no comment frozen-bubble.md frozen-bubble.d.3.0.json GCompris no comment gcompris.md gcompris.d.3.0.json Geany A fast and lightweight IDE using GTK+ geany.md geany.d.3.0.json Gedit no comment gedit.md gedit.d.3.0.json gElemental View the periodic table of elements gelemental.md gelemental.d.3.0.json Geogebra no comment geogebra.md geogebra.d.3.0.json Gimp Create images and edit photographs gimp.md gimp.d.3.0.json Gnumerix (alpine) Calculation, Analysis, and Visualization of Information gnumeric.md gnumeric.d.3.0.json Golly no comment golly.md golly.d.3.0.json hyper A terminal built on web technologies hyper.md hyper.d.3.0.json Impress Create and edit presentations for slideshows, meeting and Web pages by using Impress. impress.md impress.d.3.0.json inkscape no comment inkscape.md inkscape.d.3.0.json jupyter Use the command line jupyter.md jupyter.d.3.0.json jupyter nvidia Use the command line jupyternvidia.md jupyternvidia.d.3.0.json Kalzium KDE Periodic Table of Elements kalzium.md kalzium.d.3.0.json kDiamond no comment kdiamond.md kdiamond.d.3.0.json Kgeography A Geography Learning Program kgeography.md kgeography.d.3.0.json kigo no comment kigo.md kigo.d.3.0.json Klickety no comment klickety.md klickety.d.3.0.json klotski no comment klotski.md klotski.d.3.0.json konsole no comment konsole.md konsole.d.3.0.json kSquares no comment ksquares.md ksquares.d.3.0.json kTurtle Educational Programming Environment kturtle.md kturtle.d.3.0.json Leocad no comment leocad.md leocad.d.3.0.json LibreCAD no comment librecad.md librecad.d.3.0.json mahjongg no comment mahjongg.md mahjongg.d.3.0.json maps A simple maps application maps.md maps.d.3.0.json Math Create and edit scientific formulas and equations by using Math. math.md math.d.3.0.json Mathwar no comment mathwar.md mathwar.d.3.0.json minecraft Official Minecraft Launcher minecraft.md minecraft.d.3.0.json gnome-mines (alpine) Clear hidden mines from a minefield mines.md mines.d.3.0.json FileManager Access and organize files nautilus.md nautilus.d.3.0.json Notepad Wine (alpine) no comment notepad-wine.md notepad-wine.d.3.0.json notepadqq Edit source code files notepadqq.md notepadqq.d.3.0.json octave no comment octave.md octave.d.3.0.json OnlyOffice Edit office documents onlyoffice.md onlyoffice.d.3.0.json Pinta (alpine) Easily create and edit images pinta.md pinta.d.3.0.json Planner no comment planner.md planner.d.3.0.json Postman no comment postman.md postman.d.3.0.json Powershell no comment powershell.md powershell.d.3.0.json Putty Unix no comment putty-unix.md putty-unix.d.3.0.json Putty Wine (alpine) no comment putty-wine.md putty-wine.d.3.0.json qElectrotech no comment qelectrotech.md qelectrotech.d.3.0.json Remarkable A free, fully featured markdown editor for Linux. remarkable.md remarkable.d.3.0.json Remmina Access remote desktops with Remmina remmina.md remmina.d.3.0.json RemoteDesktop no comment remotedesktopmanager.md remotedesktopmanager.d.3.0.json rhythmbox Play and organize your music collection rhythmbox.md rhythmbox.d.3.0.json Robots no comment robots.md robots.d.3.0.json Shotcut Shotcut is a free, open source, cross-platform video editor. shotcut.md shotcut.d.3.0.json Stellarium Planetarium stellarium.md stellarium.d.3.0.json Step Simulate physics experiments step.md step.d.3.0.json stress no comment stress.md stress.d.3.0.json sublime-Text Sophisticated text editor for code, markup and prose sublime-text.md sublime-text.d.3.0.json sudoku Test your logic skills in this number grid puzzle sudoku.md sudoku.d.3.0.json supertux2 Play a classic 2D platform game supertux2.md supertux2.d.3.0.json swell-foop Clear the screen by removing groups of colored and shaped tiles swell-foop.md swell-foop.d.3.0.json taquin Slide tiles to their correct places taquin.md taquin.d.3.0.json Microsoft Teams Microsoft Teams for Linux is your chat-centered workspace in Office 365. teams.md teams.d.3.0.json Terminal sudo Use the command line terminal.md terminal.d.3.0.json Terminal [ephemeral container] Use the command line terminalephemeral.md terminalephemeral.d.3.0.json Terminal [Pod] Use the command line terminalpod.md terminalpod.d.3.0.json Tetravex no comment tetravex.md tetravex.d.3.0.json Thunderbird Send and receive mail with Thunderbird thunderbird.md thunderbird.d.3.0.json Commodore64 vice.md vice.d.3.0.json videolan Read, capture, broadcast your multimedia streams vlc.md vlc.d.3.0.json vmmacos no comment vmmacos.md vmmacos.d.3.0.json VMRC Connect to remote virtual machines vmrc.md vmrc.d.3.0.json vmubuntu no comment vmubuntu.md vmubuntu.d.3.0.json VSCode Code Editing. Redefined. vscode.md vscode.d.3.0.json weather Show weather conditions and forecast weather.md weather.d.3.0.json whatsdesk unofficial whatsapp client for linux whatsdesk.md whatsdesk.d.3.0.json Winefile Wine (alpine) no comment winefile-wine.md winefile-wine.d.3.0.json WineMine Wine (alpine) no comment winemine-wine.md winemine-wine.d.3.0.json Winhelp Wine no comment winhelp-wine.md winhelp-wine.d.3.0.json WinSCP no comment winscp-wine.md winscp-wine.d.3.0.json wireshark (alpine) Network traffic analyzer wireshark.md wireshark.d.3.0.json Writer alpine Create and edit text and graphics in letters, reports, documents and Web pages by using Writer. writer.md writer.d.3.0.json Xclock no comment xclock.md xclock.d.3.0.json Xedit no comment xedit.md xedit.d.3.0.json xeyes no comment xeyes.md xeyes.d.3.0.json Xman no comment xman.md xman.d.3.0.json Xpad Jot down notes for later xpad.md xpad.d.3.0.json Xterm (sudo) standard terminal emulator for the X window system xterm.md xterm.d.3.0.json"},{"location":"applications/mahjongg/","title":"mahjongg","text":""},{"location":"applications/mahjongg/#inherite-from","title":"inherite from","text":"
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-mahjongg && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-mahjongg.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnNzgiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMzgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5IDAgMCAyLjE0MjkgLTgyNi4zNiAtMTEwNy41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBpZD0ic3RvcDIiIHN0b3AtY29sb3I9IiMzODg5ZTkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDQiIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI3IiBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTEyIiB4MT0iMzAuNzY1IiB4Mj0iMzEuMTA2IiB5MT0iNTYuOTkzIiB5Mj0iNy4zNjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMjQ0LjY1IDAgMCAyMjguMzQgMTUyLjY2IC0xMTMuNjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wMzMiIHN0b3AtY29sb3I9IiM2MjYyNjIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDM1IiBzdG9wLWNvbG9yPSIjMzgzODM4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjkzMiIgeD0iLS4wNzE1MzgiIHk9Ii0uMDUxNjY3IiB3aWR0aD0iMS4xNDMxIiBoZWlnaHQ9IjEuMTAzMyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjkzNCIgc3RkRGV2aWF0aW9uPSIwLjc3NSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlNDAiIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgaWQ9Imc0OCIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgaWQ9ImNpcmNsZTQyIiBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDkxMikiLz4KICA8Y2lyY2xlIGlkPSJjaXJjbGU0NCIgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgaWQ9ImNpcmNsZTQ2IiBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KIDwvZz4KIDxnPgogIDxyZWN0IGlkPSJyZWN0OTE0IiB4PSIxOSIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzNiIgcng9IjIiIHJ5PSIyIiBmaWx0ZXI9InVybCgjZmlsdGVyOTMyKSIgb3BhY2l0eT0iLjUiLz4KICA8cmVjdCBpZD0icmVjdDg5NCIgeD0iMTkiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMzYiIHJ4PSIyIiByeT0iMiIgZmlsbD0iI2YyZjJmMiIvPgogIDxwYXRoIGlkPSJwYXRoNCIgZD0ibTI5LjAyIDIwLjUyNWMtMC4yMDg4MiAwLjE1MzUyLTAuMjYxMDggMC4zODM1Ny0wLjI2MTA4IDAuNjUyMzUgMCAwLjQ5ODg4IDAuMjA4ODIgMS4xMTI4IDAuMzEzMjUgMS4zNDMxIDAgMCAwLjE1NjYyIDIuNjg2MiAwLjIwODg0IDIuOTkzMi0wLjQ2OTg4IDAuMDM4MzctMS4zMDUyIDAuMDc2NzYtMS42MTg0IDAuMTUzNWgtMC40MTc2NmMtMC44ODc1NCAwLjAzODUtMS43MjI4IDAuMDc2NzYtMi4wODg0IDAuMzQ1MzFsLTAuMTU2NjMgMC4xMTUxMiAwLjE1NjYzIDAuMTUzNWMwLjI2MTAzIDAuMjMwMjQgMC4zNjU0NyAwLjg4MjYxIDAuNDY5ODggMS41NzM0IDAuMjYxMDMgMS40MTk4IDAuNTc0MjggMy4xODUgMi4xNDA2IDMuODc1OWwwLjMxMzI1IDAuMTE1MTJ2LTAuMjY4NjJzMC4wNTIzLTAuMTE1MTIgMC4wNTIzLTAuMjY4NjJjMC0wLjExNTEyLTAuMDUyMy0wLjMwNy0wLjEwNDM2LTAuNTc1NjIgMC40MTc2NiAwLjAzODM3IDEuMzA1MiAwLjExNTEyIDEuNjE4NCAwLjExNTEyIDAuMDUyMjYgMC4zMDcwNSAxLjQwOTcgMTIuODE4IDEuNDA5NyAxMi44MThoMC41MjIxNnMwLjU3NDMxLTEyLjM1NiAwLjU3NDMxLTEyLjc0YzAuMzY1NDQgMCAxLjk4MzkgMC4wMzgzNSAyLjQ1MzggMC4wNzY3Ni0wLjEwNDI5IDAuMjMwMjgtMC41MjE5MyAxLjE4OTctMC41MjE5MyAxLjE4OTdsMC43MzA3NS0wLjQ5ODgzYzAuMjA4ODItMC4xMTUyNiA0Ljc1MDgtMy4xNDY3IDQuMTI1NS01LjE0MjMtMC4yMDk5OC0wLjY1MjM1LTAuOTQwMjctMS4xMTI5LTIuMTQxOC0xLjM0M2gtMC4xMDQ2NmMtMC42Nzg3MiAwLTIuNzY3MSAwLjAzODM3LTQuMzMzNCAwLjExNTEyIDAuMDUyMzQtMC45OTc3MyAwLjA1MjM0LTEuNTM1IDAuMDUyMzQtMS44MDM3di0wLjM0NTM4YzAtMC4xOTE4OCAwLjI2MTAzLTAuNDYwNSAwLjQ2OTg4LTAuNjUyMzggMC4yMDg4NC0wLjIzMDI0IDAuNDY5OS0wLjQyMjEyIDAuNDY5OS0wLjY1MjM4IDAtMC4wNzY3Ni0wLjA1MjMxLTAuMTUzNS0wLjEwNDM2LTAuMjMwMjQtMC4zMTI0MS0wLjM0NTU0LTIuNjA5Ni0xLjIyODItMy42MDE1LTEuMzA0OS0wLjMxMzM0IDAuMDM4MjYtMC41MjIxNiAwLjA3Njc2LTAuNjI2NjkgMC4xOTE3OHptMC4wNTIzMiA2LjI5MzVoMC4yNjEwM2MwIDAuMzQ1MzggMC4xNTY2MyAyLjc2MjkgMC4yMDg4MiAzLjEwODItMC40MTc2NC0wLjAzODUtMS40MDk1LTAuMTE1MjYtMS43MjI4LTAuMTE1MjYtMC4xNTY3OS0wLjQ5ODgzLTAuMjA4ODItMS4wMzYyLTAuMjYxMDgtMS41NzMzLTAuMDUyMjYtMC40NjA1Ny0wLjEwNDI5LTAuOTIxMTQtMC4yMDg4Mi0xLjM0MzIgMC40Njk4OCAwIDEuNzIyOS0wLjA3Njc2IDEuNzIyOS0wLjA3Njc2em0zLjE4NDggMS4xODk0czAuMDUyMTctMC45MjEgMC4wNTIxNy0xLjIyOGMwLjY3ODcgMC4wNzY3NiAxLjU2NjIgMC4xMTUxMiAyLjQwMTUgMC4xMTUxMmgwLjkzOTc1YzAgMC4xNTM1LTAuMDUyMzIgMC4zNDUzOC0wLjA1MjMyIDAuMzQ1MzgtMC4xMDQzNiAwLjg0NDIzLTAuMjYxMDMgMS44NDE5LTAuNzMwOTQgMi44Mzk3LTAuMzEzMjMgMC0yLjI0NDktMC4wNzY3Ni0yLjY2MjYtMC4xMTUxMiAwLTAuMjY4NjIgMC4wNTIzMi0xLjk1NzEgMC4wNTIzMi0xLjk1NzF6IiBmaWxsPSIjZTY0YzRjIiBzdHJva2Utd2lkdGg9IjIuMzMzMiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"mahjongg,gnome mahjongg,game mahjongg,mahjongg\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-mahjongg.desktop\"\nLABEL oc.launch=\"gnome-mahjongg.Gnome-mahjongg\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"mahjongg\"\nLABEL oc.displayname=\"mahjongg\"\nLABEL oc.path=\"/usr/games/gnome-mahjongg\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"mahjongg\"\nENV APPBIN \"/usr/games/gnome-mahjongg\"\nENV APP \"/usr/games/gnome-mahjongg\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mahjongg/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mahjongg/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mahjongg/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mahjongg/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-maps\nLABEL oc.icon=\"org.gnome.Maps.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjIzOS4zOSIgeDI9IjI0Mi45NSIgeTE9Ii0xMDEuNDQiIHkyPSItNTg1LjU1IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMTEuMTYgODMuOTQzKSBzY2FsZSgxLjI0NDkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzE3MTkxZCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUzNTk2MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI1NDAiIHgyPSI1MzIuODMiIHkxPSI0IiB5Mj0iNjk0LjM2IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0uNTQ2IC0uNTQ2KSBzY2FsZSguMDYzNTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzI4YjE2MiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM1ZTk4MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMi4yMTMiIHgyPSIzMS45MzkiIHkxPSI2Mi4wNjIiIHkyPSIyMy40OTgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjM2E3YWYwIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjNDNhZGYxIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjMxLjc5MSIgeDI9IjMyIiB5MT0iNDYuMTU5IiB5Mj0iMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNlMWU3ZjIiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJlIiB4PSItLjE0NSIgeT0iLS4xMDIiIHdpZHRoPSIxLjI5MSIgaGVpZ2h0PSIxLjIwNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyNS43MjIiLz48L2ZpbHRlcj48L2RlZnM+PHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS41NDYgLS41NDYpIHNjYWxlKC4wNjM1NikiIGQ9Ik05NjYuMSAzNzguNDVjLTIuNS04Ljc1LTUuMzUtMTcuNi04LjQ1LTI2LjM1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNC0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1Qzc3My4yNSAxMDUuNyA2ODguNyA2MS42NSA1OTIuMiA0Ni4yNWMtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LS41NS0xOS44NS0uODUtMzAuMS0uODUtOS4zNSAwLTE4LjYuMjUtMjcuOS43NS0xMTguMzUgNi4xLTIyMC4zIDUxLjk1LTMwNS44NSAxMzcuNVE0MC4wNSAzMTYuNTUgNDAuMDUgNTEyLjA1YzAgMTMwLjM1IDQ2LjEgMjQxLjY1IDEzOC4yNSAzMzMuOCA4NS41NSA4NS41IDE4Ny41IDEzMS4zNSAzMDUuODUgMTM3LjVoLjRjOC41LjQ1IDE2LjYuNyAyNC41LjdoOC40NWM4LjU1LS4xIDE2LjgtLjQgMjQuNjUtLjggMi41LS4xNSA0Ljc1LS4zIDYuOTUtLjQ1IDIwLjItMS40NSAzOS45LTQuMDUgNTguNy03LjcgNy45NS0xLjU1IDE1LjgtMy4zIDIzLjQtNS4xNSA4MC44LTIwLjMgMTUyLjE1LTYxLjYgMjE0LjY1LTEyNC4xIDQ4LjYtNDguNiA4NC40LTEwMi41IDEwNy4zNS0xNjEuOCAxNi42LTQyLjkgMjYuNTUtODguNjUgMjkuNzUtMTM3LjQ1LjM1LTUuMi42LTEwLjYuOC0xNi4wNS4yLTYuMDUuMy0xMi4yNS4zLTE4LjV2LTNjLS4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42eiIgZmlsdGVyPSJ1cmwoI2EpIiBvcGFjaXR5PSIuMjUiLz48cGF0aCBkPSJNNjAuODU5IDIzLjUwOWEyOC40MSAyOC40MSAwIDAgMC0yLjAwOC01LjA4NWMtLjI0Mi0uNDctLjUwNi0uOTUtLjc4Mi0xLjQyNC0xLjI5LTIuMTkyLTIuOTExLTQuMjctNC44NTMtNi4yMTItNC42MTQtNC42MTUtOS45ODgtNy40MTUtMTYuMTIyLTguMzkzYTMwLjc0NCAzMC43NDQgMCAwIDAtMy4xODEtLjM0IDMzLjk4NCAzMy45ODQgMCAwIDAtMy42ODctLjAwN2MtNy41MjIuMzg4LTE0LjAwMiAzLjMwMi0xOS40NCA4Ljc0UTIgMTkuNTc1IDIgMzJjMCA4LjI4NSAyLjkzIDE1LjM1OSA4Ljc4NyAyMS4yMTYgNS40MzggNS40MzQgMTEuOTE3IDguMzQ4IDE5LjQ0IDguNzM5aC4wMjZjLjU0LjAyOSAxLjA1NS4wNDQgMS41NTcuMDQ0aC41MzdhNDAuMDA5IDQwLjAwOSAwIDAgMCAxLjU2Ny0uMDVsLjQ0MS0uMDI5YTMxLjQ0MSAzMS40NDEgMCAwIDAgMy43MzEtLjQ5Yy41MDYtLjA5OCAxLjAwNS0uMjEgMS40ODgtLjMyNyA1LjEzNS0xLjI5IDkuNjctMy45MTUgMTMuNjQzLTcuODg3IDMuMDg5LTMuMDkgNS4zNjQtNi41MTUgNi44MjMtMTAuMjg0IDEuMDU1LTIuNzI3IDEuNjg3LTUuNjM1IDEuODktOC43MzdBMzMuNyAzMy43IDAgMCAwIDYyIDMydi0uMTlhMzEuMjA5IDMxLjIwOSAwIDAgMC0uOTA4LTcuNDM3Yy0uMDctLjI3Ni0uMTUtLjU3Mi0uMjMyLS44NjR6IiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggZD0iTTMyIDJjLS41OTQgMC0xLjE4Mi4wMTUtMS43NzMuMDQ3LTcuNTIzLjM4OC0xNC4wMDIgMy4zMDMtMTkuNDQgOC43NEM0LjkzIDE2LjY0NSAyIDIzLjcxNyAyIDMyYzAgMi41NDkuMjggNC45ODIuODM0IDcuM0w2MC45MiAyMy43MzhjLS4wMi0uMDc3LS4wMzgtLjE1MS0uMDYtLjIyOWEyOC4zNjUgMjguMzY1IDAgMCAwLTIuMDA4LTUuMDg0Yy0uMjQxLS40Ny0uNTA3LS45NS0uNzgzLTEuNDIzLTEuMjktMi4xOTMtMi45MS00LjI3Mi00Ljg1Mi02LjIxMy00LjYxNC00LjYxNS05Ljk5LTcuNDE0LTE2LjEyMy04LjM5M2EzMC43MTUgMzAuNzE1IDAgMCAwLTMuMTgtLjM0IDM0LjAwNyAzNC4wMDcgMCAwIDAtMS45MTMtLjA1NHoiIGZpbGw9InVybCgjYykiLz48cGF0aCBkPSJNMTkuNDEgNC42NzRjLTIuNDMgMS4xMy00LjcxMyAyLjYxOS02Ljg0OCA0LjQ2N2wyMC4wNzQgMjAuMDc0LTMwLjIgOC4wOWEyOC4xOTUgMjguMTk1IDAgMCAwIDIuNDA0IDcuNjRsMzQuMzI4LTkuMi40MjctLjExNCAyMi4zMTgtNS45OGEzMC41NiAzMC41NiAwIDAgMC0uODIyLTUuMjc4IDI4LjM2NSAyOC4zNjUgMCAwIDAtLjc3LTIuNTM5Yy0uMDAzLS4wMTItLjAxLS4wMjItLjAxMy0uMDMzTDQxLjU2IDI2LjgyNCAxOS40MSA0LjY3NHoiIGZpbGw9InVybCgjZCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDQ3MTMgMCAwIC4wNDQ4NyAyMi45ODMgNDYuNjk3KSIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMzUiIHN0cm9rZS13aWR0aD0iLjk3MyI+PHBhdGggZD0iTTE5MS4zLTY0NS4wMmMtMTE3LjE3IDAtMjEyLjE2IDk0Ljk5MS0yMTIuMTYgMjEyLjE2IDAgOC45Ny43MiAxNy43MTEgMS44MTYgMjYuMzc3IDE4LjEzIDE2NS43MiAxOTYuNTcgMzU2LjczIDE5Ni41NyAzNTYuNzMgMy4xOCAzLjU1OCA2LjI0NSA1Ljc1MyA5LjE5NiA3LjM0MWwuMTUyLjA3NiA1Ljk0MiAxLjg5MyA1Ljk0Mi0xLjg5My4xNTItLjA3NmMyLjk1Mi0xLjU5IDYuMDE4LTMuODk3IDkuMTk2LTcuMzQxIDAgMCAxNzUuODctMTkxLjM0IDE5My41OC0zNTcuMSAxLjA2LTguNTUzIDEuNzgtMTcuMjIgMS43OC0yNi4wMzgtLjA0LTExNy4xMy05NC45OTItMjEyLjEyLTIxMi4xNi0yMTIuMTJ6bTAgMzQ4LjYzYy03NS4yMzYgMC0xMzYuNDctNjEuMjMzLTEzNi40Ny0xMzYuNDdzNjEuMjMzLTEzNi40NyAxMzYuNDctMTM2LjQ3IDEzNi40MyA2MS4yMzMgMTM2LjQzIDEzNi40Ny02MS4xOTUgMTM2LjQ3LTEzNi40MyAxMzYuNDd6Ii8+PC9nPjxwYXRoIGQ9Ik0xOTEuMy02NDUuMDJjLTExNy4xNyAwLTIxMi4xNiA5NC45OTEtMjEyLjE2IDIxMi4xNiAwIDguOTcuNzIgMTcuNzExIDEuODE2IDI2LjM3NyAxOC4xMyAxNjUuNzIgMTk2LjU3IDM1Ni43MyAxOTYuNTcgMzU2LjczIDMuMTggMy41NTggNi4yNDUgNS43NTMgOS4xOTYgNy4zNDFsLjE1Mi4wNzYgNS45NDIgMS44OTMgNS45NDItMS44OTMuMTUyLS4wNzZjMi45NTItMS41OSA2LjAxOC0zLjg5NyA5LjE5Ni03LjM0MSAwIDAgMTc1Ljg3LTE5MS4zNCAxOTMuNTgtMzU3LjEgMS4wNi04LjU1MyAxLjc4LTE3LjIyIDEuNzgtMjYuMDM4LS4wNC0xMTcuMTMtOTQuOTkyLTIxMi4xMi0yMTIuMTYtMjEyLjEyem0wIDM0OC42M2MtNzUuMjM2IDAtMTM2LjQ3LTYxLjIzMy0xMzYuNDctMTM2LjQ3czYxLjIzMy0xMzYuNDcgMTM2LjQ3LTEzNi40NyAxMzYuNDMgNjEuMjMzIDEzNi40MyAxMzYuNDctNjEuMTk1IDEzNi40Ny0xMzYuNDMgMTM2LjQ3eiIgZmlsbD0idXJsKCNmKSIgdHJhbnNmb3JtPSJtYXRyaXgoLjA0NzEzIDAgMCAuMDQ3MTMgMjIuOTgzIDQ4LjE1NSkiIHN0cm9rZS13aWR0aD0iLjk1Ii8+PC9zdmc+\"\nLABEL oc.keyword=\"maps,maps\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Maps.desktop\"\nLABEL oc.launch=\"org.gnome.Maps.org.gnome.Maps\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"maps\"\nLABEL oc.displayname=\"maps\"\nLABEL oc.path=\"/usr/bin/gnome-maps\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.geo+json;x-scheme-handler/geo;application/vnd.google-earth.kml+xml;application/gpx+xml;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"maps\"\nENV APPBIN \"/usr/bin/gnome-maps\"\nENV APP \"/usr/bin/gnome-maps\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/maps/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/maps/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/maps/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/maps/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_math.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjMyIiB4Mj0iMzIiIHkxPSI3IiB5Mj0iNTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U3ZTdlNyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iNDUuNTAxIiB4Mj0iNDUuNTAxIiB5MT0iNy4xMDU1IiB5Mj0iMjkuODk2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNWY1ZjUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjc1Ii8+CiAgPC9maWx0ZXI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iMzguMDY2IiBjeT0iMjYuMTkyIiByPSIyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtLjggM2UtOCAtMS45MjY1ZS04IC0uOTQwMzQgODAuNDUzIDM4LjYyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFlMzUzYyIgc3RvcC1vcGFjaXR5PSIuNDg1MzgiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTkxOTE5IiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iMzYxOC40IiB4Mj0iMzYxOC40IiB5MT0iLTc1OC42NCIgeTI9Ii03NzIuNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS44NzUgMCAwIDIgLTY3NTkuMiAxNTYzLjMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjM3MTYuMiIgeDI9IjM3MTYuMiIgeTE9IjY4My45OCIgeTI9IjcwNS4xMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJqIiB4MT0iMTk1Ljc1IiB4Mj0iMTk1Ljc1IiB5MT0iMTAxNi4yIiB5Mj0iMTAzMi4yIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MzUuNSwtMTg5MS41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iMTk1Ljc1IiB4Mj0iMTk1Ljc1IiB5MT0iMTAxNi4yIiB5Mj0iMTAzMi4yIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDM4MzAuNSwtMTg5MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjM3MTYuMiIgeDI9IjM3MTYuMiIgeTE9IjY4My45OCIgeTI9IjcwNS4xMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk0NTkgMCAwIDEgMjAuMDM5IC0uMTMwNTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8ZmlsdGVyIGlkPSJvIiB4PSItLjA1OCIgeT0iLS4wNjIxNDMiIHdpZHRoPSIxLjExNiIgaGVpZ2h0PSIxLjEyNDMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzI1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibiIgeD0iLS4wNTI4MjYiIHk9Ii0uMDY5NDI4IiB3aWR0aD0iMS4xMDU3IiBoZWlnaHQ9IjEuMTM4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC40MDQ5OTYyMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1IDAgMCAxLjI1IC00NTA1LjUgMTExNS4zKSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgc3Ryb2tlLXdpZHRoPSIuOCI+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjggMCAwIC44IDM2MDQuNCAtODkyLjI0KSIgZD0ibTE5IDE4Yy0xLjEwOCAwLTIgMC44OTE5OS0yIDJ2MjRjMCAxLjEwOCAwLjg5MTk5IDIgMiAyaDI2YzEuMTA4IDAgMi0wLjg5MTk5IDItMnYtMTljMC0zLTUtNy04LTdoLTIweiIgZmlsdGVyPSJ1cmwoI28pIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC44IDAgMCAuOCAzNjA0LjQgLTg5Mi4yNCkiIGQ9Im0xOSAxOGMtMS4xMDggMC0yIDAuODkxOTktMiAydjI0YzAgMS4xMDggMC44OTE5OSAyIDIgMmgyNmMxLjEwOCAwIDItMC44OTE5OSAyLTJ2LTE5YzAtMy01LTctOC03aC0yMHoiIGZpbGw9InVybCgjaSkiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxnIGZpbGw9IiNmMDllNmYiPgogICA8cmVjdCB4PSIzNjE4IiB5PSItODU3Ljg0IiB3aWR0aD0iMjQiIGhlaWdodD0iLjc5OTk4Ii8+CiAgIDxyZWN0IHg9IjM2MTgiIHk9Ii04NzYuMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIuODAwMDMiLz4KICAgPHJlY3QgdHJhbnNmb3JtPSJyb3RhdGUoOTApIiB4PSItODc3Ljg0IiB5PSItMzYyMC40IiB3aWR0aD0iMjIuNCIgaGVpZ2h0PSIuOCIvPgogICA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIHg9Ii04NzcuODQiIHk9Ii0zNjQwLjQiIHdpZHRoPSIyMi40IiBoZWlnaHQ9Ii43OTk5MiIvPgogIDwvZz4KICA8ZyBmaWx0ZXI9InVybCgjbikiIG9wYWNpdHk9Ii4yNSI+CiAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuNTA0MSwwLDAsMS41MDQxLC0xOTYzLjksLTE5MTQuMikiIGQ9Im0zNzI0LjkgNjkxLjY2djEuOTk0NWgtMC45OTE4di0wLjkzMDc4aC02LjE0OTZsLTEuMzg4NyA4LjI0NDFoLTEuNTg2OWwtMS4zMjI1LTQuMTg4NWgtMC43OTM2di0xLjEzMDJsMS42NTMyIDJlLTUgMS4xNTcxIDMuMzI0MiAxLjE1NzItNy4zMTMzIiBzdHJva2Utd2lkdGg9Ii44Ii8+CiAgIDxwYXRoIGQ9Im0zNjM3LTg2Ny42NC03IDciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogICA8cGF0aCBkPSJtMzYzMC04NjcuNjQgNyA3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS41MDQxIDAgMCAxLjUwNDEgLTE5NjMuOSAtMTkxNC4yKSIgZmlsbD0idXJsKCNoKSI+CiAgIDxwYXRoIGQ9Im0zNzI0LjkgNjkxLjY2djEuOTk0NWgtMC45OTE4di0wLjkzMDc4aC02LjE0OTZsLTEuMzg4NyA4LjI0NDFoLTEuNTg2OWwtMS4zMjI1LTQuMTg4NWgtMC43OTM2di0xLjEzMDJsMS42NTMyIDJlLTUgMS4xNTcxIDMuMzI0MiAxLjE1NzItNy4zMTMzIiBmaWxsPSJ1cmwoI20pIiBzdHJva2Utd2lkdGg9Ii44Ii8+CiAgPC9nPgogIDxwYXRoIGQ9Im0zNjM3LTg2Ny42NC03IDciIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNqKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogIDxwYXRoIGQ9Im0zNjMwLTg2Ny42NCA3IDciIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNsKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"math,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-math.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-math\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--math\"\nLABEL oc.name=\"math\"\nLABEL oc.displayname=\"Math\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.formula;application/vnd.sun.xml.math;application/vnd.oasis.opendocument.formula-template;text/mathml;application/mathml+xml;\"\nLABEL oc.fileextensions=\"odf;odc\"\nLABEL oc.legacyfileextensions=\"odf;odc\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"math\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--math\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/math/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/math/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/math/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f math.d -t math .\n
"},{"location":"applications/math/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect math > math.json\ndocker image save math -o math.tar\nctr -n k8s.io images import math.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @math.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends mathwar && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"mathwar.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0IgogICBoZWlnaHQ9IjY0IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ3IHIyMjU4MyIKICAgc29kaXBvZGk6ZG9jbmFtZT0ibWF0aHdhci5zdmciPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIzLjYyMDM4NjciCiAgICAgaW5rc2NhcGU6Y3g9Ii0zNS4wNzUzMzkiCiAgICAgaW5rc2NhcGU6Y3k9IjgzLjA3MDU0MSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXI0IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyODAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTM0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTkxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTkzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkM2Q3Y2Y7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxOTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTcxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTczIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTU1NzUzO3N0b3Atb3BhY2l0eTowLjg3ODQzMTM3OyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDcxODUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjAuNzU2ODYyNzU7IgogICAgICAgICBvZmZzZXQ9IjAuNSIKICAgICAgICAgaWQ9InN0b3A3MTgzIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxNzUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU1NTc1MztzdG9wLW9wYWNpdHk6MC41MTIwNDgxODsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1NTI3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1NTI5IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4ODhhODU7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU1MzEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izg4OGE4NTtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1NDY1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1NDY3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU0NjkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODI0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4NjMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzcyMyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM3NDEtMyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzc0MS0wOSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTA5NiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg0MyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzODQzLTciIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg0My04IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM4NDMtNzEiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEwMjYuNjA2NyIKICAgICAgIHgyPSIxNzU3LjAzMTYiCiAgICAgICB5MT0iMTAyNi42MDY3IgogICAgICAgeDE9IjEyMjcuODQ1NSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDU1MzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1NTI3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NDMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTU0My00IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTEwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTEyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuMjA4NzI5NzQiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjYWRiZWQ7c3RvcC1vcGFjaXR5OjAuNDk4MDM5MjI7IgogICAgICAgICBpZD0ic3RvcDM1NDkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzU1MSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYzllNDtzdG9wLW9wYWNpdHk6MC43NDkwMTk2MTsiCiAgICAgICAgIG9mZnNldD0iMC40MjAwMTUwNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjYzMzU0NzI1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eTowLjg3NDUwOTgxOyIKICAgICAgICAgaWQ9InN0b3AzNTUzIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuODMzMzMyNiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzRmN2ZiZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIGlkPSJzdG9wMzUyMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTIyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzQ2NWE0O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzUzMyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzUzNSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTQ1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzQ2NWE0O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU1NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIwNGE4NztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIGlkPSJzdG9wMzU1NyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTcxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWJiY2RiO3N0b3Atb3BhY2l0eTowLjQ5ODAzOTIyOyIKICAgICAgICAgb2Zmc2V0PSIwLjY1NTYwNTk3IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuODA4NDY4NCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MC4yNDcwNTg4MjsiCiAgICAgICAgIGlkPSJzdG9wMzU3MyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTc1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTZlZmY2O3N0b3Atb3BhY2l0eTowLjEyMTU2ODYzOyIKICAgICAgICAgb2Zmc2V0PSIwLjg3NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjg3NTQ0MzA0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjJmNmZhO3N0b3Atb3BhY2l0eTowLjA1ODgyMzUzOyIKICAgICAgICAgaWQ9InN0b3AzNTc3IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM1NzkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOGZhZmM7c3RvcC1vcGFjaXR5OjAuMDI3NDUwOTg7IgogICAgICAgICBvZmZzZXQ9IjAuOTU3ODcyODciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC45ODQzNzUiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmYmZjZmQ7c3RvcC1vcGFjaXR5OjAuMDExNzY0NzE7IgogICAgICAgICBpZD0ic3RvcDM1ODEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzU4MyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZkZmRmZTtzdG9wLW9wYWNpdHk6MC4wMDM5MjE1NzsiCiAgICAgICAgIG9mZnNldD0iMC45ODQzNzUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIGlkPSJzdG9wMzU2NyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzMTkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMzMjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzMyMyIKICAgICAgICAgb2Zmc2V0PSIwLjU3NDI0MDYyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjE0MzgzNTYyOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMzI1IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0OCA6IDI0IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNCA6IDE2IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU2NTUiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTc2OCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NzY4LTIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTc2OC0xIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU3NjgtNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1ODkxIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU4OTEtMSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1OTM0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU5MzQtNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1OTM0LTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTkzNC0wNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU2MDI5IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjIiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtOSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTciCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTg5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTkxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTkzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5NSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjIwNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS05IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0My02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0wIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxODktOCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE5MS0zIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTkzLTYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTk1LTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS00IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0My00IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0zIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNjIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTYiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTg5LTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxOTEtOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5My05IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5NS03IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTYxODEtMiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtNSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi0yIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTYxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE4OS02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0yIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTkxLTQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTMtNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTUtNTgiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtOSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS0yNiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMzciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItMzciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtMCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtOCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxODktMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMzciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxOTEtMzgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTMtNyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTUtMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0zNyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtNyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MzkzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0MDEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjQxMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjIiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjU0OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0yLTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTktMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItMi0xIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTgtOCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNjEtMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjU1NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjU1OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY1NjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMi0xIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjU2OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjYxMyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0MTAtMiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NjIyIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjYyNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYzMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjYxMy02IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjQxMC02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi03IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYyMi0xIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI0LTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI2LTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2MzItMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjcwOCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTktMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC02LTciCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcxNyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxOSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOS0xIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcyOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjc3MyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTktMyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC02LTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMjciCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3ODIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3ODQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2Nzg2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTktMyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3OTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTY4MzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYzMi0yMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTItMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNzctNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg0NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjg0OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY4NTEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg1NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjkwMCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTMtMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3OTMtNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItOS0zLTIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNi05LTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMjctOCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkwOSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjkxMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY5MTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOS0zLTIiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTIwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU2OTY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC04IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg1Ny03IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC0yLTEtMiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNzctNi0yIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTc0Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc2IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjk3OCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5ODQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTY5NjUtNCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTkiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtMi0xLTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3LTYtNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk3NC04Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc2LTIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc4LTEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTg0LTciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTcwNjAiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5ODQtNy04IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS02Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTItMS04LTAiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3LTYtNy0wIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDY5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDcxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzA3MyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS02IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA3OSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNzA2MC02IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTg0LTctNiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC0yLTEtOC03IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2Ni03Ny02LTctNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA2OS02Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDcxLTAiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDczLTYiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwNzktNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjY1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI3MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNzciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzU4IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzM3MCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNzQiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3Mzc0LTYzNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNC04MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTgyIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDA1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQwNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNzItNzQ3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTQ5NyIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTQ5NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQxMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzcwLTczNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNi0zNjAiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNi0zNjAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MTciCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDE5IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjMmMyYzI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzM2OC0zNDMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTYtNTIzIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTYtNTIzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDIzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQyNSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjkzMS42NDg5OSIKICAgICAgIHgyPSIxODA4LjE3MzEiCiAgICAgICB5MT0iOTMxLjY0ODk5IgogICAgICAgeDE9IjEyMDUuMTEyMSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNzgwNzk1MSwwLDAsMC4wNzgwNzk1MSwtODUuODMzNTY3LDk0OC41Njk3OSkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMxMzgtNzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1ODQ5LTM4OCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTg0OS0zODgiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MjkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJhYWYxODtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQzMSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMmFhZjE4O3N0b3Atb3BhY2l0eTowOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSI5MzEuNjQ4OTkiCiAgICAgICB4Mj0iMTgwOC4xNzMxIgogICAgICAgeTE9IjkzMS42NDg5OSIKICAgICAgIHgxPSIxMjA1LjExMjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDc4MDc5NTEsMCwwLDAuMDc4MDc5NTEsLTg1LjgzMzU2Nyw5NDguNTY5NzkpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTQwLTI4NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4ODctMjcxIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODg3LTI3MSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQzNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDM3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjYtNjYyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03NjAiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNzYwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDQxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ0MyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjQtNTM2IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03MSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03MSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ0NyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NDkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYyLTY3MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTgtNTI0IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC04LTUyNCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1MyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYwLTc1NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTgtMTIwIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC04LTEyMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzU4LTk4NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTIyNSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtMjI1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDY1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ2NyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNTYtNDg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtNDQ3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC00NDciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NzEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDczIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjMmMyYzI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iNzc3LjM2MjE4IgogICAgICAgeDI9IjMxMTguNTcxNSIKICAgICAgIHkxPSI5MDkuNTA1MDciCiAgICAgICB4MT0iMzExOC41NzE1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjA3ODA3OTUxLDAsMCwwLjA3ODA3OTUxLC0yMTIuNjYwMSw5NjMuMDgyMjgpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTI4LTg5OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxOTktODUyIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTk5LTg1MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ3NyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzgzZTQ5O3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDc5IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzODNlNDk7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg4MyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4OC4zNjIxOCkiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iQ2FwYSAxIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMyIKICAgICBpZD0ibGF5ZXI1IgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiIC8+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC05ODguMzYyMTgpIgogICAgIHN0eWxlPSJkaXNwbGF5Om5vbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMSIKICAgICBpZD0ibGF5ZXIzIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzgxMSIKICAgICAgIGQ9Im0gMTIxNi45MzA4LDk2MS42MzQwMyA1NTYuOTAzNCwtMS4zNjA2NiAtOS41MDgsMzIuNjU1ODMgLTIzLjA5MTEsOC4xNjQgLTYuNzkxNiw1MC4zNDQzIC01MS42MTU0LDI5LjkzNDYgLTQzLjQ2NTcsOS41MjQ2IC0zMjUuOTkyMiwxLjM2MDcgLTI5Ljg4MjcsLTM1LjM3NzIgLTE3LjY1NzksLTQuMDgyIC0xNi4yOTk2LC0zNS4zNzcyIC0zMS4yNDA5LC0xMy42MDY1IC0xLjM1ODMsLTQyLjE4MDQ3IHoiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTU1NzUzO3N0cm9rZS13aWR0aDo5LjUxNjM1OTMzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgPC9nPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTpub25lIgogICAgIGlua3NjYXBlOmxhYmVsPSJDYXBhIzQiCiAgICAgaWQ9ImxheWVyNiIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU0NDIiCiAgICAgICBkPSJtIDE3NDUuNTQzNiw5NzMuNTcwMjggYyAtMTcyLjA2MjcsLTAuMzM2NzIgLTM0NC4xMjUzLC0wLjY3MzQzIC01MTYuMTg4LC0xLjAxMDE1IC0wLjMzNjcsNy4wNzEwNyAtMC42NzM0LDE0LjE0MjEzIC0xLjAxMDEsMjEuMjEzMiAxMC43NzUsNC43MTQwNiAyMS41NDk5LDkuNDI4MDcgMzIuMzI0OSwxNC4xNDIxNyA0LjM3NzMsMTIuMTIxOCA4Ljc1NDcsMjQuMjQzNyAxMy4xMzIsMzYuMzY1NSA5LjE1OTgsMy41MTYgMTkuNDExMiw1LjU1NCAyNy45MDQsOS45NzMxIDYuNTI0Myw5LjEzNDIgMTMuMDQ4NywxOC4yNjgzIDE5LjU3MzEsMjcuNDAyNSAxMDQuNzE5MiwtMC42NzM0IDIwOS40MzgzLC0xLjM0NjkgMzE0LjE1NzUsLTIuMDIwMyAxNi4zNDc3LC00LjYzNTIgMzMuNDA1MywtNy42MTEzIDQ5LjMxNSwtMTMuMjcwNSAxMi44NTYxLC04LjAzNSAyNS43MTIxLC0xNi4wNzAxIDM4LjU2ODIsLTI0LjEwNTEgMi4zNTcsLTE2LjQ5OTIgNC43MTQxLC0zMi45OTgzIDcuMDcxMSwtNDkuNDk3NTIgNy4wMzkyLC0zLjU1ODcxIDE1LjUxOTksLTUuNTg4NSAyMS42OTc4LC0xMC4wNjA2MyAzLjAwMzYsLTUuOTg5NDkgOS4xNzYsLTE0LjMxOTM2IC0xLjkwNjIsLTkuOTA1NDkgLTEuNTQ2NCwwLjI1Nzc0IC0zLjA5MjksMC41MTU0OCAtNC42MzkzLDAuNzczMjIgeiIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1NTMzKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogIDwvZz4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4OC4zNjIxOCkiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlua3NjYXBlOmxhYmVsPSJDYXBhIzUiCiAgICAgaWQ9ImxheWVyNyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEiCiAgICAgaWQ9ImxheWVyMiIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMiIKICAgICBpZD0ibGF5ZXI0IgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNzIwNy0wIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBkPSJtIDU0LjQwNDg3NiwxMDI5Ljc3NDcgMTIuNzk5MDU3LDAgLTAuNTg1NTc0LDAuOTczMSAtMy4xMDYzMTYsMS41MTM2IC0yLjc0NTM3LDAuNTQwNiAtNC4yNDUxNzcsMi4xNjI0IC0yLjQzNTE3OCwwLjEwODEgLTMuMTA2NDg3LDEuNTEzOCAtNC44MTcxMTUsMS4wODExIC0zLjMxNDgzLDAuODY1IC0yLjg4NDM1NiwwLjEwODIgLTIuOTM1MTk4LDAuNjQ4NyAtMjcuOTEyOTk2NSwtMC4yMTYzIC0wLjI3Nzk2NSwtMC44NjQ5IDAuMjQwNzM4LC0wLjY0ODggLTEuOTg2MTc0LDAuMTA4MSAxLjEyMDIxOSwtMS40MDU1IC0xLjMzMTE1OSwtMC42NDg4IC0wLjE3MzYyNCwtMC41NDA2IDYuODMyODY3NSwtMy44OTIzIDUuMTk2ODQxLC0xLjI5NzUgNC42ODA2MjUsLTAuMTA4IDIuNzYxNTc0LC0xLjE4OTQgNS4xNzgxNTYsLTIuMDU0MyAyLjk4NjAyNSwtMS4xODkzIDMuMTk0NDY2LC0wLjU0MDYgMi42OTQ1MzYsMCAxLjk2NzU2NiwtMC44NjUgMy41NTc5ODksLTAuMTA4MSAtMS42NzM0ODksMS4wODExIDEuNTM3MDA2LC0wLjEwOCAxLjU1MzE5NywtMC43NTY5IDEwLjEzOTI0MSwwLjEwODEgLTEuMzI4NTcxLDAuNzU2OCA5LjY3MTUzNCwtMC42NDg3IDYuODM4MDE5LC0xLjA4MTIgNi42MTM0NywtMS4wODEyIC0xLjg2MzMwOSwxLjE4OTQgLTEyLjEzOTAyNCwyLjA1NDMgLTcuMjUyMzgsMS4xODkzIC0zLjgzMDg4NCwyLjA1NDMgMC4zODIwNSwxLjE4OTQgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuMjk4MDM5MjI7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg3MjA3IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBkPSJtIDQzLjU1NTMzNSwxMDE3LjM1MjcgMTIuNzE1ODEyLDAgMS4xMTU0MiwyLjAwNzggLTAuNDQ2MTcsMy4xMjMxIC0xLjc4NDY3MSwxLjExNTQgLTAuNDQ2MTcsNC40NjE3IC0yLjIzMDg0LDAuMjIzIC0wLjQ0NjE3MSwzLjEyMzMgLTIuOTAwMDk5LDIuMjMwOCAtMS43ODQ2NzEsMS43ODQ3IC0yLjY3NzAxMSwwLjIyMzEgLTEuNzg0Njc5LDEuMzM4NSAtMjguMTA4NjI0LC0wLjQ0NjIgLTEuNzg0NjcyLC0xLjc4NDYgLTAuODkyMzM5LC0xLjMzODYgLTEuNzg0NjcyLDAuMjIzMSAtMS4zMzg1MDg5LC0yLjkwMDEgLTIuNDUzOTI5OCwtMS4zMzg1IC0xLjExNTQyMDYsLTEuMTE1NSAwLC04LjAzMDkgMi45MDAwOTk2LC0yLjY3NzEgNC40NjE2ODI3LC0wLjIyMyAwLjY2OTI1OCwtMi40NTQgMS41NjE1OSwtNC4yMzg2IDAuODkyMzMyLC0yLjQ1MzkgMi4yMzA4NDgsLTEuMTE1NCAyLjY3NzAxMSwwIDAuNDQ2MTcsLTEuNzg0NyAzLjM0NjI2MiwtMC4yMjMxIDAuMjIzMDgsMi4yMzA4IDEuMzM4NTEsLTAuMjIzIDAuMjIzMDgxLC0xLjU2MTYgMTAuMjYxODgxLDAuMjIzMSAwLDEuNTYxNSA4LjQ3NzIwMiwtMS4zMzg1IDQuOTA3ODU5LC0yLjIzMDggNC42ODQ3NzEsLTIuMjMwOCAwLjIyMzA4MSwyLjQ1MzkgLTguNDc3MjAyLDQuMjM4NiAtNS4xMzA5NCwyLjQ1MzkgLTAuMjIzMDgxLDQuMjM4NiAyLjQ1MzkyMSwyLjQ1NCB6IgogICAgICAgc3R5bGU9ImZpbGw6I2NiZmY4NztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzJhYWYxODtzdHJva2Utd2lkdGg6MS41NjE1OTAzMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzg4NSIKICAgICAgIGQ9Im0gMTkuMTQ1MzUzLDEwMDkuNjc4OCAtMS4yNjE5NTIsMS4xODMyIC0yLjgzOTQsOS4yMjggLTUuNDQyMTgxNywwLjMxNTUgLTEuMjYxOTYwMiwxLjM0MDggLTAuMDc4ODY4LDUuODM2NSAyLjkxODI2ODksMS4xMDQzIDEuMDI1MzQsMi40NDQ5IDEuNzM1MTkyLC0wLjIzNjUgMi42ODE2NTYsMy43MDcgMjUuNjMzNDY2LDAgMi4yMDg0MjQsLTEuNDk4NiAyLjI4NzI5MiwwLjIzNjYgMy42MjgxMjEsLTMuMzEyNiAwLjU1MjEwOCwtMy42MjgxIDIuMjA4NDI1LC0wLjcwOTkgMC4zOTQzNTYsLTIuNjgxNyAwLjMxNTQ5NSwtMC44Njc1IDEuNDk4NTczLC0wLjk0NjUgLTAuMDc4ODcsLTEuMTgzMSAtMC4wNzg4NywtMC41NTIxIC0xMS41OTQyMjIsMC4xNTc3IC0xLjE4MzA4NSwwLjA3OSAtMi45MTgyNjgsLTMuNjI4MSAtMC41NTIxMDgsLTAuNzA5OSAwLjMxNTQ4OCwtNC45Njg5IDAuMDc4ODcsLTAuODY3NiAxLjM0MDgyOCwtMC41NTIxIC01LjM2MzMxMywxLjAyNTMgLTAuNjMwOTc2LC0xLjk3MTcgLTUuODM2NTQ1LDAgLTEuMTgzMDg1LDEuODE0IC0zLjg2NDc0LC0wLjA3OSAtMC4zOTQzNTYsLTAuOTQ2NSAtMC41NTIxMDgsMCAtMC44Njc1OTYsMS4wMjU0IC0yLjgzOTQwMSwtMC4xNTc4IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzEzOC03Myk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzMTQwLTI4NSk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtkaXNwbGF5OmlubGluZSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU3NTQiCiAgICAgICBkPSJtIDE5Ljg1MjYyOSwxMDE2LjIzNzIgYyAwLjcyNTAyMywtMC4xNjcyIDMuOTAzOTc1LC0zLjIzNDcgMy45MDM5NzUsLTMuMjM0NyAwLDAgNC41MTc0NjIsLTIuMTc1IDQuMTgyODM3LDEuMTcxMiAtMC4zMzQ2MzQsMy4zNDYyIC03LjMwNjAxNyw2LjEzNDkgLTcuMzA2MDE3LDYuMTM0OSAwLDAgLTQuOTYzNjI0LC0xLjQ1MDEgLTIuODQ0MzE5LC0yLjc4ODcgMi4xMTkyOTYsLTEuMzM4NSAyLjAwNzc1MSwtMS4zMzg1IDIuMDYzNTI0LC0xLjI4MjcgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMyYWFmMTg7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg1NzU2IgogICAgICAgZD0ibSAzMi40MDExMjMsMTAxNS44NDY4IGMgLTEuMTcxMTkzLDMuMTc5IC01Ljg1NTk2NCwyLjA2MzYgLTAuOTQ4MTA0LDMuMzQ2MyA0LjkwNzg1MiwxLjI4MjcgMi41NjU0NjYsMi4xNzUxIDQuOTA3ODUyLDEuMjI2OSAyLjM0MjM4NSwtMC45NDgxIDEuNzI4OTA2LDEuMzM4NSAyLjM0MjM4NSwtMC45NDgxIDAuNjEzNDc5LC0yLjI4NjYgMi4wNjM1MzIsMS4xNzEzIDAuNjEzNDc5LC0yLjI4NjYgLTEuNDUwMDQ2LC0zLjQ1NzcgLTEuNzI4ODk5LC0yLjIzMDggLTEuNDUwMDQ2LC0zLjUxMzUgMC4yNzg4NTMsLTEuMjgyOCAtNS40MDk3OTQsMi4xMTkzIC01LjQ2NTU2NiwyLjE3NSB6IgogICAgICAgc3R5bGU9ImZpbGw6IzJhYWYxODtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU3NTgiCiAgICAgICBkPSJtIDQ0LjA1NzI3OCwxMDIxLjIwMDkgYyA1Ljg1NTk2MywwLjUwMiAwLjM5MDM5NywxLjcyODkgMC4zOTAzOTcsMS43Mjg5IDAsMCAtMy41NjkzNSwtMS4xMTU1IC0yLjUwOTY5NCwtMS44NDA1IDEuMDU5NjQ5LC0wLjcyNSAyLjExOTI5NywwLjExMTYgMi4xMTkyOTcsMC4xMTE2IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMmFhZjE4O3N0cm9rZTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNTgxOCIKICAgICAgIGQ9Im0gMjQuNjY2NDEsMTAxNC40OSBjIDEuMTc0MzQ3LDIuNTYxOCAzLjQyOTA3Myw0LjYxNDIgNi4xMDU0NzUsNS41MDc3IC0wLjA2MDU5LDAuOTI0IDEuMzkwOSwzLjE0NzMgMS4yNDc2OTUsMS4wMDMzIDAuMTA0NTY0LC0xLjg5MSAtMC4wMjMyMiwtNi4wNTMgLTIuOTEwNjAxLC00Ljc5MzEgLTEuOTU1NzM2LDAuNTM0NCAtMi4zNzU3MTEsLTIuODIyNyAtNC4xMzAxMSwtMi4wODU3IGwgLTAuMTcyMzI5LDAuMTYxIC0wLjE0MDEzLDAuMjA2OCAwLDAgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMyYWFmMTg7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg1ODI5IgogICAgICAgZD0ibSAzMy4xMDU3NDQsMTAxMC43MDQyIGMgLTAuMDI2MywwIC0wLjA1NTM2LC0wLjAxMiAtMC4wNzg4NywwIC0wLjA4NDc5LDAuMDQyIC0wLjE0OTQ5MSwwLjEyMDMgLTAuMjM2NjIsMC4xNTc4IC0wLjA5OTYzLDAuMDQzIC0wLjIxMzk4NSwwLjA0MSAtMC4zMTU0ODgsMC4wNzkgLTAuMTEwMDg0LDAuMDQxIC0wLjIwNzQxOSwwLjExMTQgLTAuMzE1NDg4LDAuMTU3NyAtMC4wNzY0MSwwLjAzMyAtMC4xNTk0MjMsMC4wNDggLTAuMjM2NjEyLDAuMDc5IC0wLjA1NDU5LDAuMDIxIC0wLjEwMDA5OSwwLjA2NyAtMC4xNTc3NDUsMC4wNzkgLTAuMzEyNjIyLDAuMDYyIC0wLjE1MzI0NiwtMC4wODIgLTAuMzk0MzY0LDAuMDc5IC0wLjAzMDkzLDAuMDIxIC0wLjA2MjI1LDAuMDQ2IC0wLjA3ODg3LDAuMDc5IC0wLjAxMTc1LDAuMDIzIDAuMDExNzYsMC4wNTYgMCwwLjA3OSAtMC4wMTY2MiwwLjAzMyAtMC4wNjIyNSwwLjA0NiAtMC4wNzg4NiwwLjA3OSAtMC4wMDgxLDAuMDE3IC0wLjAxMTEzLDAuMjI1NSAwLDAuMjM2NyAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODYsMCAwLjAyNjM5LDAuMDI2IC0wLjAyNjM4LDAuMTMxMyAwLDAuMTU3NyAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODcsMCAwLjAzNzE4LDAuMDM3IC0wLjAzNzE5LDAuMTIwNSAwLDAuMTU3NyAwLjAxODU5LDAuMDE5IDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ3OTQsMC4wNTkgMC4wNzg4OCwwLjA3OSAwLjA0ODkyLDAuMDMyIDAuMTE2MTc0LDAuMDM3IDAuMTU3NzQ0LDAuMDc5IDAuMDQxNTcsMC4wNDIgMC4wNDYyNiwwLjEwODkgMC4wNzg4NywwLjE1NzggMC4wNDc4NiwwLjA3MSAwLjIwMTY1NywwLjE2NjcgMC4yMzY2MTIsMC4yMzY2IDAuMDExNzYsMC4wMjQgLTAuMDExNzYsMC4wNTYgMCwwLjA3OSAwLjAzMzI2LDAuMDY2IDAuMTI0NDkxLDAuMDkxIDAuMTU3NzQ1LDAuMTU3OCAwLjAxMTc2LDAuMDIzIC0wLjAxODU5LDAuMDYxIDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMzcxOSwwLjAzNyAtMC4wMzcxOSwwLjEyMDYgMCwwLjE1NzggMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg2LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTg1OSwwLjA2MSAwLDAuMDc5IDAuMTYzMTk0LDAuMTYzMiAtMC4wMDY0LC0wLjI0OTQgMC4xNTc3NDQsMC4wNzkgMC4wMTE3NiwwLjAyMyAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDMzMjYsMC4wNjYgMC4xMTY1MDMsMC4wOTYgMC4xNTc3NDQsMC4xNTc4IDAuMDc2NjMsMC4xMTQ5IDAuMDQ5MjQsMC4xNjQyIDAuMTU3NzQ0LDAuMjM2NiAwLjA0ODkyLDAuMDMyIDAuMTA4ODM1LDAuMDQ2IDAuMTU3NzQ0LDAuMDc5IDAuMDMwOTQsMC4wMiAwLjA1MjU4LDAuMDUzIDAuMDc4ODcsMC4wNzkgMC4wMjYyOSwwLjAyNiAwLjA2MjI1LDAuMDQ2IDAuMDc4ODcsMC4wNzkgMC4wMjMyNiwwLjA0NyAtMC4wMTgwOSwwLjE4MjQgMCwwLjIzNjYgMC4wMTg1OCwwLjA1NiAwLjA2MDI4LDAuMTAyIDAuMDc4ODYsMC4xNTc4IDAuMDE0MjMsMC4wNDMgMCwwLjI4ODYgMCwwLjMxNTQgMCwwLjA2NyAwLjAxNDE0LDAuMjczMSAwLDAuMzE1NSAtMC4wMTE3NiwwLjAzNSAtMC4wNzg4NiwwLjA0MiAtMC4wNzg4NiwwLjA3OSAwLDAuMDU5IDAuMDYwMjgsMC4xMDIgMC4wNzg4NiwwLjE1NzggMC4wMTY2MywwLjA1IDAsMC4xMDUxIDAsMC4xNTc3IDAsMC4xMzE1IDAsMC4yNjI5IDAsMC4zOTQ0IDAsMC4wNTMgMCwwLjEwNTEgMCwwLjE1NzcgMCwwLjAyNiAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDMzMjYsMC4wNjYgMC4xMTY0OTUsMC4wOTYgMC4xNTc3NDQsMC4xNTc3IDAuMDMyNjEsMC4wNDkgMC4wMzczLDAuMTE2MiAwLjA3ODg4LDAuMTU3OCAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODcsMCAwLjAxODU5LDAuMDE5IC0wLjAxODU5LDAuMDYxIDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA1MjU4LDAgMC4wNzg4NywwIDAuMDI2MjksMCAwLjA1MjU4LDAgMC4wNzg4NywwIDAuMjg5MTk5LDAgMC41NzgzOTgsMCAwLjg2NzU5NiwwIDAuNjAxNjg5LDAgLTAuMDYyMjIsMC4wMzUgMC4zOTQzNjQsLTAuMDc5IDAuMDUxMDEsLTAuMDEzIDAuMTA2NzI4LDAuMDEzIDAuMTU3NzQ1LDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY0IDAuMTU3NzQ0LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNzg1OSwwLjAxNyAwLjE1Nzc0NCwwIDAuMDM1MjcsLTAuMDEyIDAuMDQzNiwtMC4wNjcgMC4wNzg4NiwtMC4wNzkgMCwtMWUtNCAwLjIzNjU0MiwxMGUtNSAwLjIzNjYyLDAgMC4wMTg1OSwtMC4wMTkgLTAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IC0wLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAwLjAxODU5LC0wLjAxOSAwLjA2MDI4LDAuMDE5IDAuMDc4ODcsMCAwLjAxODU5LC0wLjAxOSAtMC4wMTE3NiwtMC4wNTYgMCwtMC4wNzkgMC4wMzMyNiwtMC4wNjYgMC4xMjQ0OSwtMC4wOTEgMC4xNTc3NDQsLTAuMTU3NyAwLjAxMTc1LC0wLjAyNCAtMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgMC4wMTg1OSwtMC4wMTkgMC4wNjAyOCwwLjAxOCAwLjA3ODg3LDAgMC4wMTg1OSwtMC4wMTkgLTAuMDExNzUsLTAuMDU2IDAsLTAuMDc5IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODgsLTAuMDc5IDAuMDIzNTIsLTAuMDQ3IC0wLjAyMzUyLC0wLjExMDcgMCwtMC4xNTc3IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODcsLTAuMDc5IDAuMDAxNywwIDAuMDAxNywtMC41NDg3IDAsLTAuNTUyMSAtMC4wMzMyNiwtMC4wNjYgLTAuMTE2NTAyLC0wLjA5NiAtMC4xNTc3NTIsLTAuMTU3NyAtMC4wNDgwMywtMC4wNzIgLTAuMDY3MzIsLTAuMTkxNCAtMC4xNTc3NDQsLTAuMjM2NiAtMC4wMjM1MSwtMC4wMTIgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg3LDAgLTAuMDM3MTksLTAuMDM3IDAuMDM3MTksLTAuMTIwNiAwLC0wLjE1NzggLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg3LDAgLTAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IDAsLTAuMDI2IC0wLjAxODU5LC0wLjA2IDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IC0wLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAwLjE2MzE5NCwtMC4xNjMyIC0wLjAwNjQsMC4yNDk0IDAuMTU3NzQ0LC0wLjA3OSAwLjAxMTc2LC0wLjAyMyAtMC4wMDgzLC0wLjA1NCAwLC0wLjA3OSAwLjAxODU5LC0wLjA1NiAwLjA2MDI4LC0wLjEwMiAwLjA3ODg3LC0wLjE1NzggMC4wMDgzLC0wLjAyNCAtMC4wMTE3NiwtMC4wNTYgMCwtMC4wNzkgMC4wMTY2MywtMC4wMzMgMC4wNjIyNSwtMC4wNDYgMC4wNzg4NywtMC4wNzkgMC4wMTE3NSwtMC4wMjMgLTAuMDExNzUsLTAuMDU2IDAsLTAuMDc5IDAuMDQ3MzMsLTAuMDk1IDAuMTg5Mjk2LC0wLjE0MiAwLjIzNjYyLC0wLjIzNjUgMC4wMTE3NiwtMC4wMjQgLTAuMDExNzYsLTAuMDU2IDAsLTAuMDc5IDAuMDM0OTYsLTAuMDcgMC4xODg3NSwtMC4xNjQ4IDAuMjM2NjIsLTAuMjM2NiAwLjEyMzU5MywwLjA2MSAwLjA2NDEzLC0wLjIwNzEgMC4wNzg4NywtMC4yMzY2IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODcsLTAuMDc5IDAuMDExNzUsLTAuMDIzIC0wLjAxMTc2LC0wLjA1NiAwLC0wLjA3OSAwLjAxNjYyLC0wLjAzMyAwLjA2MjI1LC0wLjA0NiAwLjA3ODg2LC0wLjA3OSAwLjAxMiwtMC4wMjQgMCwtMC4yNjEgMCwtMC4zMTU0IDAsLTAuMTU3OCAwLC0wLjMxNTUgMCwtMC40NzMzIDAsLTAuMDI2IDAsLTAuMDUzIDAsLTAuMDc5IDAsLTAuMDI2IDAuMDExNzYsLTAuMDU2IDAsLTAuMDc5IC0wLjAxNjYyLC0wLjAzMyAtMC4wNjIyNSwtMC4wNDYgLTAuMDc4ODYsLTAuMDc5IC0wLjAxNTY0LC0wLjAzMSAwLjAxNjEyLC0wLjIyMDUgMCwtMC4yMzY3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAzNzE5LC0wLjAzNyAwLjAzNzE5LC0wLjEyMDUgMCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOCAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAzNzE4LC0wLjAzNyAwLjAzNzE5LC0wLjEyMDUgMCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAxODU5LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODYsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTE3NSwtMC4wNTYgMCwtMC4wNzkgLTAuMDMzMjYsLTAuMDY3IC0wLjEyNDQ5MSwtMC4wOTEgLTAuMTU3NzQ1LC0wLjE1NzggLTAuMDExNzYsLTAuMDI0IDAuMDE4NTgsLTAuMDYxIDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNTUzNiwwLjAxMiAtMC4wNzg4NywwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDU2MiwtMC4wNjMgLTAuMDc4ODgsLTAuMDc5IC0wLjAyMzUxLC0wLjAxMiAtMC4wNTUzNSwwLjAxMiAtMC4wNzg4NiwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDU2MiwtMC4wNjIgLTAuMDc4ODcsLTAuMDc5IC0wLjA0Mjc4LC0wLjAyMSAtMC4yOTM5MDYsMC4wMjIgLTAuMzE1NDg4LDAgLTAuMDE4NTksLTAuMDE5IDAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNTI1OCwwIC0wLjA3ODg3LDAgLTAuMTU3NzQzLDAgLTAuMzE1NDg3LDAgLTAuNDczMjMxLDAgLTAuMDI2MywwIC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg4LDAgLTAuMDE4NTksLTAuMDE5IDAuMDE4NTksLTAuMDYgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA1MjU4LDAgLTAuMDc4ODcsMCAtMC4xODQwNDEsMCAtMC4zNjgwNzQsMCAtMC41NTIxMDcsMCAtMC4xODQwMzQsMCAtMC4zNjgwNzUsMCAtMC41NTIxMDksMCAtMC4wMjYyOSwwIC0wLjA2MDI4LC0wLjAxOSAtMC4wNzg4NiwwIC0wLjAxODU5LDAuMDE5IDAuMDE4NTksMC4wNjEgMCwwLjA3OSAtMC4wMzk0NCwwLjAzOSAtMC4xOTcxODMsLTAuMDM5IC0wLjIzNjYyMSwwIC0wLjAxODU5LDAuMDE5IDAuMDE4NTksMC4wNjEgMCwwLjA3OSAtMC4wMzcxOSwwLjAzNyAtMC4xMTA3MTcsLTAuMDI0IC0wLjE1Nzc0NCwwIC0wLjAzMzI2LDAuMDE3IC0wLjA0NTYyLDAuMDYyIC0wLjA3ODg2LDAuMDc5IC0wLjAyMzUyLDAuMDEyIC0wLjA3ODg3LDAuMDI2IC0wLjA3ODg3LDAgMCwtMC4wMjYgMC4wNjUzNCwtMC4wMjMgMC4wNzg4NywwIDAuMDcyODQsMC4xMjE0IDAuMTA1MTU4LDAuMjYyOSAtMC4xNTc3NDQsMC4zOTQzIHoiCiAgICAgICBzdHlsZT0iZmlsbDojMmFhZjE4O3N0cm9rZTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNTgzMyIKICAgICAgIGQ9Im0gMTYuNzc5MTkzLDEwMjAuNTYzMiBjIDAuMDI2MjksMCAwLjA1NywwLjAxNSAwLjA3ODg2LDAgMC4wNjE4OCwtMC4wNDEgMC4wOTM5OSwtMC4xMTk1IDAuMTU3NzQ1LC0wLjE1NzcgMC4wNzEyOSwtMC4wNDMgMC4xNTk0MywtMC4wNDggMC4yMzY2MiwtMC4wNzkgMC4yMTAzMjMsLTAuMDg0IDAuMTMyNzc0LC0wLjEwNTQgMC4zOTQzNjQsLTAuMTU3OCAwLjA1MTU2LC0wLjAxIDAuMTA2NzI3LDAuMDEzIDAuMTU3NzQ0LDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY0IDAuMTU3NzQ0LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNzg1OSwwLjAxNyAwLjE1Nzc0MywwIDAuMDM1MjcsLTAuMDEyIDAuMDQ1NjIsLTAuMDYyIDAuMDc4ODcsLTAuMDc5IDAuMDQ3MDMsLTAuMDI0IDAuMTIwNTYzLDAuMDM3IDAuMTU3NzQ1LDAgMC4wMTg1OSwtMC4wMTkgLTAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IDAuMDI2MjksMCAwLjA1NTM2LDAuMDEyIDAuMDc4ODcsMCAwLjA2NjUyLC0wLjAzMyAwLjA4NzIsLTAuMTM0MyAwLjE1Nzc0NCwtMC4xNTc4IDAuMDQ5ODksLTAuMDE3IDAuMTA2NzM1LDAuMDEzIDAuMTU3NzUyLDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY1IDAuMTU3NzQ1LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNjcyNiwwLjAxMyAwLjE1Nzc0MywwIDAuMTE0MDY3LC0wLjAyOCAwLjIwMTQyMiwtMC4xMjkzIDAuMzE1NDg4LC0wLjE1NzcgMC4wNTEwMSwtMC4wMTMgMC4xMDc4NTksMC4wMTcgMC4xNTc3NDUsMCAwLjAzNTI3LC0wLjAxMiAwLjA0NzkzLC0wLjA1OSAwLjA3ODg3LC0wLjA3OSAwLjAzOTcxLC0wLjE3MzcgMC4xNjIyNTcsLTAuMDQyIDAuMjM2NjE5LC0wLjA3OSAwLjAzMzI2LC0wLjAxNyAwLjA0NTYyLC0wLjA2MiAwLjA3ODg3LC0wLjA3OSAwLjAyMzUyLC0wLjAxMiAwLjA1NTM2LDAuMDEyIDAuMDc4ODgsMCAwLjAzMzI2LC0wLjAxNyAwLjA0NTYyLC0wLjA2MyAwLjA3ODg3LC0wLjA3OSAwLjAyMzUyLC0wLjAxMiAwLjA1NTM2LDAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LC0wLjAxNyAwLjA0MzU5LC0wLjA2NyAwLjA3ODg4LC0wLjA3OSAwLjA5OTc2LC0wLjAzMyAwLjIxNTcxOCwwLjAzMyAwLjMxNTQ4OCwwIDAuMDM1MjcsLTAuMDEyIDAuMDQzNTksLTAuMDY3IDAuMDc4ODcsLTAuMDc5IDAuMDE5NjYsLTAuMDEgMC4zODYyMzYsMC4wMSAwLjM5NDM2NCwwIDAuMDE4NTksLTAuMDE4IC0wLjAxODU5LC0wLjA2IDAsLTAuMDc5IDAuMDAzNiwwIDAuMzU3MTc1LDAgMC4zOTQzNTYsMCAwLjE1Nzc0NSwwIDAuMzE1NDk2LDAgMC40NzMyNCwwIDAuMDI2MjksMCAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDQ1MjEsMC4wOSAwLjE2NDU2OSwwLjEwOTggMC4yMzY2MjEsMC4xNTc3IDAuMDcxNzksMC4wNDggMC4xNjY3MDcsMC4yMDE4IDAuMjM2NjEyLDAuMjM2NyAwLjAyMzUyLDAuMDEyIDAuMDUzOTMsLTAuMDEgMC4wNzg4NywwIDAuNTcxMywwLjE5MDQgLTAuMTI0MzQ5LC0wLjAyMiAwLjIzNjYxMiwwLjE1NzggMC4wMjM1MiwwLjAxMiAwLjA2MDI4LC0wLjAxOSAwLjA3ODg4LDAgMC4wMTg1OSwwLjAxOCAtMC4wMTg1OSwwLjA2IDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTE3NSwwLjA1NiAwLDAuMDc5IDAuMDE2NjMsMC4wMzMgMC4wNjIyNSwwLjA0NiAwLjA3ODg3LDAuMDc5IDAuMDExNzYsMC4wMjMgLTAuMDE4NTksMC4wNiAwLDAuMDc5IDAuMDE4NTksMC4wMTkgMC4wNjAyOCwtMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksMC4wMTkgLTAuMDExNzUsMC4wNTYgMCwwLjA3OSAwLjA0NTIyLDAuMDkxIDAuMTY0NTY4LDAuMTA5OCAwLjIzNjYyLDAuMTU3OCAwLjA2MTg3LDAuMDQxIDAuMDk1ODgsMC4xMTY1IDAuMTU3NzQ0LDAuMTU3NyAwLjM0NDQ3OSwwLjIyOTcgLTAuMDI2LC0wLjAzNSAwLjMxNTQ4OCwwLjA3OSAwLjAzNTI4LDAuMDEyIDAuMDQ1NjIsMC4wNjIgMC4wNzg4NywwLjA3OSAwLjAyMzUxLDAuMDEyIDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ1NjIsMC4wNjIgMC4wNzg4OCwwLjA3OSAwLjAyMzUxLDAuMDEyIDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ1NjIsMC4wNjMgMC4wNzg4NywwLjA3OSAwLjA0NzAyLDAuMDIzIDAuMTEwNzA5LC0wLjAyNCAwLjE1Nzc0NCwwIDAuMDMzMjYsMC4wMTcgMC4wNDU2MiwwLjA2MiAwLjA3ODg2LDAuMDc5IDAuMDUwNDEsMC4wMjUgMC4yNTIwMSwtMC4wMjEgMC4zMTU0ODksMCAwLjA1NTc3LDAuMDE5IDAuMTAxOTc5LDAuMDYxIDAuMTU3NzUxLDAuMDc5IDAuMDI0OTQsMC4wMSAwLjA1NTM1LC0wLjAxMiAwLjA3ODg3LDAgMC4wMzMyNiwwLjAxNyAwLjA0MzU5LDAuMDY3IDAuMDc4ODcsMC4wNzkgMC4wMzYwNywwLjAxMiAwLjI4MDM5MSwtMC4wMTggMC4zMTU0ODksMCAwLjAyNjQ5LDAuMDE0IDAuMTMxMjUxLDAuMTQ0NSAwLjE1Nzc0NCwwLjE1NzggMC4wMjM1MSwwLjAxMiAwLjA1NTM2LC0wLjAxMiAwLjA3ODg3LDAgMC4wMzMyNiwwLjAxNyAwLjA0NTYyLDAuMDYyIDAuMDc4ODgsMC4wNzkgMC4wMjM1MSwwLjAxMiAwLjA1NTM2LC0wLjAxMiAwLjA3ODg2LDAgMC4wMzMyNiwwLjAxNyAwLjA0NTYyLDAuMDYzIDAuMDc4ODgsMC4wNzkgMC4wNDcwMiwwLjAyMyAwLjEyMDU2MywtMC4wMzcgMC4xNTc3NDQsMCAwLjAwMzYsMCAwLDAuMzU3MiAwLDAuMzk0NCAwLDAuMDE5IDAuMDAyNSwwLjIzNDEgMCwwLjIzNjYgLTAuMDE4NTksMC4wMTkgLTAuMDU1MzYsLTAuMDEyIC0wLjA3ODg3LDAgLTAuMDc3NjIsMC4wMzkgLTAuMjM3ODc3LDAuMjc2NiAtMC4zMTU0ODgsMC4zMTU1IC0wLjAyMzUxLDAuMDEyIC0wLjA2MDI4LC0wLjAxOSAtMC4wNzg4NywwIC0wLjAxODU5LDAuMDE5IDAuMDExNzUsMC4wNTYgMCwwLjA3OSAtMC4wODcyLDAuMTc0NCAtMC4wNDg5NiwwLjAyNSAtMC4xNTc3NDQsMC4wNzkgLTAuMDMzMjYsMC4wMTcgLTAuMDQ1NjIsMC4wNjIgLTAuMDc4ODgsMC4wNzkgLTAuMDIzNTIsMC4wMTIgLTAuMDUyNTgsMCAtMC4wNzg4NiwwIC0wLjA1MjU4LDAgLTAuMTA2NzM1LC0wLjAxMyAtMC4xNTc3NDUsMCAtMC4xNDI3NiwtMC4wNDggLTAuMTQ2Njg3LDAuMTI3NyAtMC4yMzY2MiwwLjE1NzcgLTAuMDQ5ODksMC4wMTcgLTAuMTA2NzM0LC0wLjAxMyAtMC4xNTc3NDQsMCAtMC4wNTcwMywwLjAxNSAtMC4xMDA3MTUsMC4wNjUgLTAuMTU3NzQzLDAuMDc5IC0wLjA1MTAxLDAuMDEzIC0wLjEwNjczNSwtMC4wMTMgLTAuMTU3NzQ0LDAgLTAuMDU3MDQsMC4wMTUgLTAuMTAwNzE1LDAuMDY0IC0wLjE1Nzc0NSwwLjA3OSAtMC4wNTk5OCwwLjAxNSAtMC4zMjgzMTYsMCAtMC4zOTQzNjQsMCAtMC4xMzE0NTQsMCAtMC4yNjI5MDksMCAtMC4zOTQzNTYsMCAtMC4wMjYzLDAgLTAuMDUyNTgsMCAtMC4wNzg4OCwwIC0wLjAyNjI5LDAgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODgsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYyIC0wLjA3ODg2LC0wLjA3OSAtMC4wNDcwMiwtMC4wMjMgLTAuMTEwNzE3LDAuMDIzIC0wLjE1Nzc0NCwwIC0wLjAyMTEsLTAuMDExIC0wLjEzNjYzOSwtMC4xNDcxIC0wLjE1Nzc0NCwtMC4xNTc3IC0wLjAyMzUyLC0wLjAxMiAtMC4wNTUzNiwwLjAxMiAtMC4wNzg4OCwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNTI1OCwtMC4wNTMgLTAuMDc4ODYsLTAuMDc5IC0wLjA5MDI1LC0wLjA5IC0wLjA5MzM2LC0wLjExIC0wLjIzNjYyLC0wLjE1NzcgLTAuMDI0OTMsLTAuMDEgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMjA5NCwtMC4wMTEgLTAuMjI2MTUsLTAuMjE1NyAtMC4yMzY2MjEsLTAuMjM2NyAtMC4wMTE3NiwtMC4wMjMgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYyIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg4LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OCwtMC4wMTkgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMzcxOCwtMC4wMzcgLTAuMTEwNzEsMC4wMjMgLTAuMTU3NzQ0LDAgLTAuMDMzMjYsLTAuMDE3IC0wLjA0NTYyLC0wLjA2MiAtMC4wNzg4NywtMC4wNzkgLTAuMDQ5NzYsLTAuMDI0IC0wLjM0NDYwNCwwLjAyNCAtMC4zOTQzNjMsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjg1MiwtMC4wMTUgLTAuMzM5NTA2LDAgLTAuMzk0MzY0LDAgLTAuMDI2MjksMCAtMC4wNjAyOCwtMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwwLjAxOSAwLjAyMzUxLDAuMDY3IDAsMC4wNzkgLTAuMTU3NzQ0LDAuMDc5IC0wLjExODMxNCwtMC4wMzkgLTAuMjM2NjIsMCAtMC4wNTU3NywwLjAxOSAtMC4xMDA3MTUsMC4wNjQgLTAuMTU3NzQ0LDAuMDc5IC0wLjA1MTAxLDAuMDEzIC0wLjEwNzg1OSwtMC4wMTcgLTAuMTU3NzQ1LDAgLTAuMDM1MjgsMC4wMTIgLTAuMDQ1NjIsMC4wNjIgLTAuMDc4ODcsMC4wNzkgLTAuMDMxMjcsMC4wMTYgLTAuMjIwNDg5LC0wLjAxNiAtMC4yMzY2MTIsMCAtMC4wMTg1OSwwLjAxOSAwLjAyMzUxLDAuMDY3IDAsMC4wNzkgLTAuMDQ3MDMsMC4wMjMgLTAuMTEwNzE4LC0wLjAyNCAtMC4xNTc3NDQsMCAtMC4wMjM1MiwwLjAxMiAwLjAxODU5LDAuMDYxIDAsMC4wNzkgLTAuMDM3MTksMC4wMzcgLTAuMTEwNzE3LC0wLjAyMyAtMC4xNTc3NDUsMCAtMC4wMzMyNiwwLjAxNyAtMC4wNDU2MiwwLjA2MiAtMC4wNzg4NywwLjA3OSAtMC4wMjQwMSwwLjAxMiAtMC4yMDEwOTQsMCAtMC4yMzY2MTIsMCAtMC4xODQwNDIsMCAtMC4zNjgwNzUsMCAtMC41NTIxMDksMCAtMC4yNjI5MDksMCAtMC41MjU4MTgsMCAtMC43ODg3MiwwIC0wLjAyNjMsMCAtMC4wNTI1OCwwIC0wLjA3ODg4LDAgLTAuMDI2MjksMCAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NiwwIC0wLjAxODU5LC0wLjAxOCAwLjAxODU5LC0wLjA2IDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4OCwwIC0wLjAxODU5LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMzcxOSwtMC4wMzcgLTAuMTEwNzE3LDAuMDIzIC0wLjE1Nzc0NCwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDE2OSwtMC4wNzkgLTAuMDc4ODcsLTAuMDc5IC0wLjAyNjMsMCAwLjAyNjI5LDAuMDc5IDAsMC4wNzkgLTAuMTY0MTMxLDAgLTAuMDMxNzQsLTAuMTEwNiAtMC4wNzg4OCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAxODU4LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMTg1OCwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODgsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg2LDAgLTAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IC0wLjEzMTQ1NSwtMC4xMDUyIC0wLjI2MjkxLC0wLjIxMDMgMCwtMC42MzEgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNjYmZmODc7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg3MTY5IgogICAgICAgZD0ibSAxMC4zMTI2ODcsMTAyMS40OTE3IC0xLjAwMzg4NDUsMS4zMzg1IC0wLjIyMzA4MSwzLjc5MjQgMi43ODg1NTQ1LDEuNzg0NyAwLjU1NzcwNywyLjAwNzggMi4xMTkzMDQsMCAyLjQ1MzkzMSwzLjY4MDkgMjQuNjUwODE4LDAgMi4yMzA4NDEsLTEuNjczMSAyLjM0MjM4NiwwLjExMTUgMy43OTI0MzEsLTIuNzg4NSAwLjY2OTI1MSwtMy4xMjMzIDEuMDAzODg0LC0wLjg5MjMgMC44OTIzMzgsLTEuMjI2OSAtMC4yMjMwODgsLTEuNTYxNiAtMi4wMDc3NiwtMS4wMDM5IC00MC4wNDM2MzIsLTAuNDQ2MiB6IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDMxMjgtODk5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yNDguMjMyMjUsOTUwLjI4MzUpIgogICAgICAgaWQ9Imc2NDAzLTMtMCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIxMzIzLjI5OTgiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIxMzc2LjYyMTEiCiAgICAgICAgIHNvZGlwb2RpOnJ4PSI1Ny41Nzg2OTMiCiAgICAgICAgIHNvZGlwb2RpOnJ5PSI1Ny41Nzg2OTMiCiAgICAgICAgIGQ9Im0gMTM4MC44Nzg1LDEzNzYuNjIxMSBjIDAsMzEuNzk5OCAtMjUuNzc4OSw1Ny41Nzg3IC01Ny41Nzg3LDU3LjU3ODcgLTMxLjc5OTgsMCAtNTcuNTc4NywtMjUuNzc4OSAtNTcuNTc4NywtNTcuNTc4NyAwLC0zMS43OTk4IDI1Ljc3ODksLTU3LjU3ODcgNTcuNTc4NywtNTcuNTc4NyAzMS43OTk4LDAgNTcuNTc4NywyNS43Nzg5IDU3LjU3ODcsNTcuNTc4NyB6IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzEzLjcyNDgsLTI5OC45ODQxMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnNTc0NS00LTQtOC0zLTciCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzU4LTk4NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02IgogICAgICAgICAgIGQ9Im0gMTA4MC4wNjYyLDExNzUuNTk4NiBjIC04Ljg3NzksMC4xNDYgLTQuNjU5MiwxNy4yMTYzIC0xMy4zMzc5LDE5LjA5MTUgLTguNjc4OCwxLjg3NTIgLTExLjk5MTUsLTE1LjMwMSAtMjAuMTM3NywtMTEuNzY4NyAtOC4xNDYyLDMuNTMyMiAyLjMzMTUsMTcuNjk5MiAtNC45NjksMjIuNzUyOSAtNy4zMDA2LDUuMDUzNiAtMTYuODQwMSwtOS43ODA3IC0yMy4wMTQ1LC0zLjM5OTkgLTYuMTc0Myw2LjM4MDggOC43MzM4LDE1LjU1MTcgMy45MjMsMjMuMDE0NSAtNC44MTA5LDcuNDYyNyAtMTkuNDkwNCwtMi4yNDI4IC0yMi43NTI5Nyw2LjAxNTEgLTMuMjYyNSw4LjI1NzkgMTQuMTQyMTcsMTAuODc4OSAxMi41NTMzNywxOS42MTQ2IC0xLjU4ODgsOC43MzU3IC0xOC43MTQ0Nyw1LjI0NDcgLTE4LjU2ODQ3LDE0LjEyMjUgMC4xNDYsOC44Nzc4IDE3LjIxNjM3LDQuNjU5MSAxOS4wOTE0NywxMy4zMzc5IDEuODc1Miw4LjY3ODggLTE1LjMwMDk3LDExLjk5MTUgLTExLjc2ODcsMjAuMTM3NyAzLjUzMjMsOC4xNDYyIDE3LjY5OTIsLTIuMzMxNiAyMi43NTI5LDQuOTY5IDUuMDUzNyw3LjMwMDUgLTkuNzgwNywxNi44NDAxIC0zLjM5OTksMjMuMDE0NCA2LjM4MDgsNi4xNzQ0IDE1LjU1MTcsLTguNzMzOCAyMy4wMTQ1LC0zLjkyMjkgNy40NjI4LDQuODEwOSAtMi4yNDI4LDE5LjQ5MDQgNi4wMTUxLDIyLjc1MyA4LjI1OCwzLjI2MjUgMTAuODc4OSwtMTQuMTQyMiAxOS42MTQ2LC0xMi41NTM0IDguNzM1OCwxLjU4ODggNS4yNDQ3LDE4LjcxNDUgMTQuMTIyNSwxOC41Njg1IDguODc3OSwtMC4xNDYgNC42NTkyLC0xNy4yMTY0IDEzLjMzNzksLTE5LjA5MTUgOC42Nzg4LC0xLjg3NTIgMTEuOTkxNSwxNS4zMDEgMjAuMTM3NywxMS43Njg3IDguMTQ2MiwtMy41MzIzIC0yLjMzMTUsLTE3LjY5OTMgNC45NjksLTIyLjc1MjkgNy4zMDA2LC01LjA1MzcgMTYuODQwMSw5Ljc4MDcgMjMuMDE0NSwzLjM5OTggNi4xNzQzLC02LjM4MDggLTguNzMzOCwtMTUuNTUxNiAtMy45MjMsLTIzLjAxNDQgNC44MTA5LC03LjQ2MjggMTkuNDkwNCwyLjI0MjggMjIuNzUzLC02LjAxNTEgMy4yNjI1LC04LjI1OCAtMTQuMTQyMiwtMTAuODc4OSAtMTIuNTUzNCwtMTkuNjE0NiAxLjU4ODgsLTguNzM1OCAxOC43MTQ1LC01LjI0NDcgMTguNTY4NSwtMTQuMTIyNSAtMC4xNDYsLTguODc3OSAtMTcuMjE2NCwtNC42NTkyIC0xOS4wOTE1LC0xMy4zMzggLTEuODc1MiwtOC42Nzg3IDE1LjMwMSwtMTEuOTkxNCAxMS43Njg3LC0yMC4xMzc2IC0zLjUzMjMsLTguMTQ2MiAtMTcuNjk5MiwyLjMzMTUgLTIyLjc1MjksLTQuOTY5IC01LjA1MzcsLTcuMzAwNiA5Ljc4MDcsLTE2Ljg0MDEgMy4zOTk5LC0yMy4wMTQ1IC02LjM4MDksLTYuMTc0MyAtMTUuNTUxNyw4LjczMzggLTIzLjAxNDUsMy45MjI5IC03LjQ2MjgsLTQuODEwOCAyLjI0MjgsLTE5LjQ5MDQgLTYuMDE1MSwtMjIuNzUyOSAtOC4yNTgsLTMuMjYyNSAtMTAuODc4OSwxNC4xNDIyIC0xOS42MTQ2LDEyLjU1MzQgLTguNzM1OCwtMS41ODg4IC01LjI0NDcsLTE4LjcxNDUgLTE0LjEyMjUsLTE4LjU2ODUgeiBtIDEuNTY5MSw0MC44NzAyIGMgMjUuNDA4LDAgNDcuMDAzMiwyMS41OTUyIDQ3LjAwMzIsNDcuMDAzMSAwLDI1LjQwOCAtMjEuNTk1Miw0Ny4wMDMxIC00Ny4wMDMyLDQ3LjAwMzEgLTI1LjQwNzksMCAtNDcuMDAzMSwtMjEuNTk1MSAtNDcuMDAzMSwtNDcuMDAzMSAwLC0yNS40MDc5IDIxLjU5NTIsLTQ3LjAwMzEgNDcuMDAzMSwtNDcuMDAzMSB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzU2LTQ4NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLXdpZHRoOjQuMDg3MjI2Mzk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yMzcuOTE0NjEsOTUwLjExNjE4KSIKICAgICAgIGlkPSJnNjQwMy0zLTAtNCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy00IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjY5NjY3NzQ5LDAsMCwwLjY5NjY3NzQ5LDI4ODIuOTMxNSwxOTguMjUwMTEpIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2Mi02NzMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmUiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc2Njc3NzYyIKICAgICAgICAgICBpZD0icGF0aDU2NjUtOS00LTUtMzEtNi04IgogICAgICAgICAgIGQ9Im0gMTA4MC4wNjYyLDExNzUuNTk4NiBjIC04Ljg3NzksMC4xNDYgLTQuNjU5MiwxNy4yMTYzIC0xMy4zMzc5LDE5LjA5MTUgLTguNjc4OCwxLjg3NTIgLTExLjk5MTUsLTE1LjMwMSAtMjAuMTM3NywtMTEuNzY4NyAtOC4xNDYyLDMuNTMyMiAyLjMzMTUsMTcuNjk5MiAtNC45NjksMjIuNzUyOSAtNy4zMDA2LDUuMDUzNiAtMTYuODQwMSwtOS43ODA3IC0yMy4wMTQ1LC0zLjM5OTkgLTYuMTc0Myw2LjM4MDggOC43MzM4LDE1LjU1MTcgMy45MjMsMjMuMDE0NSAtNC44MTA5LDcuNDYyNyAtMTkuNDkwNCwtMi4yNDI4IC0yMi43NTI5Nyw2LjAxNTEgLTMuMjYyNSw4LjI1NzkgMTQuMTQyMTcsMTAuODc4OSAxMi41NTMzNywxOS42MTQ2IC0xLjU4ODgsOC43MzU3IC0xOC43MTQ0Nyw1LjI0NDcgLTE4LjU2ODQ3LDE0LjEyMjUgMC4xNDYsOC44Nzc4IDE3LjIxNjM3LDQuNjU5MSAxOS4wOTE0NywxMy4zMzc5IDEuODc1Miw4LjY3ODggLTE1LjMwMDk3LDExLjk5MTUgLTExLjc2ODcsMjAuMTM3NyAzLjUzMjMsOC4xNDYyIDE3LjY5OTIsLTIuMzMxNiAyMi43NTI5LDQuOTY5IDUuMDUzNyw3LjMwMDUgLTkuNzgwNywxNi44NDAxIC0zLjM5OTksMjMuMDE0NCA2LjM4MDgsNi4xNzQ0IDE1LjU1MTcsLTguNzMzOCAyMy4wMTQ1LC0zLjkyMjkgNy40NjI4LDQuODEwOSAtMi4yNDI4LDE5LjQ5MDQgNi4wMTUxLDIyLjc1MyA4LjI1OCwzLjI2MjUgMTAuODc4OSwtMTQuMTQyMiAxOS42MTQ2LC0xMi41NTM0IDguNzM1OCwxLjU4ODggNS4yNDQ3LDE4LjcxNDUgMTQuMTIyNSwxOC41Njg1IDguODc3OSwtMC4xNDYgNC42NTkyLC0xNy4yMTY0IDEzLjMzNzksLTE5LjA5MTUgOC42Nzg4LC0xLjg3NTIgMTEuOTkxNSwxNS4zMDEgMjAuMTM3NywxMS43Njg3IDguMTQ2MiwtMy41MzIzIC0yLjMzMTUsLTE3LjY5OTMgNC45NjksLTIyLjc1MjkgNy4zMDA2LC01LjA1MzcgMTYuODQwMSw5Ljc4MDcgMjMuMDE0NSwzLjM5OTggNi4xNzQzLC02LjM4MDggLTguNzMzOCwtMTUuNTUxNiAtMy45MjMsLTIzLjAxNDQgNC44MTA5LC03LjQ2MjggMTkuNDkwNCwyLjI0MjggMjIuNzUzLC02LjAxNTEgMy4yNjI1LC04LjI1OCAtMTQuMTQyMiwtMTAuODc4OSAtMTIuNTUzNCwtMTkuNjE0NiAxLjU4ODgsLTguNzM1OCAxOC43MTQ1LC01LjI0NDcgMTguNTY4NSwtMTQuMTIyNSAtMC4xNDYsLTguODc3OSAtMTcuMjE2NCwtNC42NTkyIC0xOS4wOTE1LC0xMy4zMzggLTEuODc1MiwtOC42Nzg3IDE1LjMwMSwtMTEuOTkxNCAxMS43Njg3LC0yMC4xMzc2IC0zLjUzMjMsLTguMTQ2MiAtMTcuNjk5MiwyLjMzMTUgLTIyLjc1MjksLTQuOTY5IC01LjA1MzcsLTcuMzAwNiA5Ljc4MDcsLTE2Ljg0MDEgMy4zOTk5LC0yMy4wMTQ1IC02LjM4MDksLTYuMTc0MyAtMTUuNTUxNyw4LjczMzggLTIzLjAxNDUsMy45MjI5IC03LjQ2MjgsLTQuODEwOCAyLjI0MjgsLTE5LjQ5MDQgLTYuMDE1MSwtMjIuNzUyOSAtOC4yNTgsLTMuMjYyNSAtMTAuODc4OSwxNC4xNDIyIC0xOS42MTQ2LDEyLjU1MzQgLTguNzM1OCwtMS41ODg4IC01LjI0NDcsLTE4LjcxNDUgLTE0LjEyMjUsLTE4LjU2ODUgeiBtIDEuNTY5MSw0MC44NzAyIGMgMjUuNDA4LDAgNDcuMDAzMiwyMS41OTUyIDQ3LjAwMzIsNDcuMDAzMSAwLDI1LjQwOCAtMjEuNTk1Miw0Ny4wMDMxIC00Ny4wMDMyLDQ3LjAwMzEgLTI1LjQwNzksMCAtNDcuMDAzMSwtMjEuNTk1MSAtNDcuMDAzMSwtNDcuMDAzMSAwLC0yNS40MDc5IDIxLjU5NTIsLTQ3LjAwMzEgNDcuMDAzMSwtNDcuMDAzMSB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzYwLTc1NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLXdpZHRoOjQuMDg3MjI2Mzk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yMjcuODc1ODEsOTUwLjExNjE4KSIKICAgICAgIGlkPSJnNjQwMy0zLTAtMyIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIxMzIzLjI5OTgiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIxMzc2LjYyMTEiCiAgICAgICAgIHNvZGlwb2RpOnJ4PSI1Ny41Nzg2OTMiCiAgICAgICAgIHNvZGlwb2RpOnJ5PSI1Ny41Nzg2OTMiCiAgICAgICAgIGQ9Im0gMTM4MC44Nzg1LDEzNzYuNjIxMSBjIDAsMzEuNzk5OCAtMjUuNzc4OSw1Ny41Nzg3IC01Ny41Nzg3LDU3LjU3ODcgLTMxLjc5OTgsMCAtNTcuNTc4NywtMjUuNzc4OSAtNTcuNTc4NywtNTcuNTc4NyAwLC0zMS43OTk4IDI1Ljc3ODksLTU3LjU3ODcgNTcuNTc4NywtNTcuNTc4NyAzMS43OTk4LDAgNTcuNTc4NywyNS43Nzg5IDU3LjU3ODcsNTcuNTc4NyB6IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzEzLjcyNDgsLTI5OC45ODQxMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnNTc0NS00LTQtOC0zLTctNiIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC42OTY2Nzc0OSwwLDAsMC42OTY2Nzc0OSwyODgyLjkzMTUsMTk4LjI1MDExKSIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDczNjYtNjYyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzM0Njc0YjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NjY3Nzc2MiCiAgICAgICAgICAgaWQ9InBhdGg1NjY1LTktNC01LTMxLTYtMCIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2NC01MzYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNDc4MDk2NywwLDAsMC4wNDc4MDk2NywtMTI2LjU3MDExLDk3Ni4wMDg4OCkiCiAgICAgICBpZD0iZzY0MDMtMy0wLTMtNiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQtNiIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy02LTYiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzcwLTczNyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02LTAtMiIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2OC0zNDMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNTEzNzA4MywwLDAsMC4wNTEzNzA4MywtMTc0LjMyMTM1LDk3MC4xNjA0OCkiCiAgICAgICBpZD0iZzY0MDMtMy0wLTMtMSIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQtNSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy02LTgiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3Mzc0LTYzNCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02LTAtOSIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM3Mi03NDcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"mathwar,mathwar,math\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"mathwar.Mathwar\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Mathwar\"\nLABEL oc.displayname=\"Mathwar\"\nLABEL oc.path=\"/usr/games/mathwar\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Mathwar\"\nENV APPBIN \"/usr/games/mathwar\"\nENV APP \"/usr/games/mathwar\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mathwar/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mathwar/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mathwar/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mathwar/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libflite1 openjdk-8-jre at-spi2-core dbus-x11 orca libsecret-1-0 && curl -Ls 'https://launcher.mojang.com/download/Minecraft.deb' -o /tmp/Minecraft.deb && apt-get install --yes /tmp/Minecraft.deb && rm /tmp/Minecraft.deb && rm -rf /var/lib/apt/lists/*\nCOPY composer/init.d/init.minecraft-launcher /composer/init.d\nLABEL oc.icon=\"circle_minecraft.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYgMCAwIDEuMzI3NiAtNTEwLjY0IC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjU2MjM3OSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjg4OTcyNDQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZiIgeD0iLS4wNjQ2NjYiIHk9Ii0uMDU2MDAyIiB3aWR0aD0iMS4xMjkzIiBoZWlnaHQ9IjEuMTEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjY2MTQ0MzYzIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMjUuNjgiIHgyPSIyNi40NDgiIHkxPSIzOS4zOTUiIHkyPSIxNy4zNzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM0NWYyOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1OWE0NDYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMTUuNzA3IiB4Mj0iMjUuNjgiIHkxPSIzMi41NjEiIHkyPSIzOS4zOTUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2FkN2M1OSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4MzViNDEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxMTUgMCAwIDEuMDExNSAtMzg5LjMyIC00ODkuOTIpIiB4PSIzODYuODUiIHk9IjQ4Ni4zMSIgd2lkdGg9IjU5LjMxNSIgaGVpZ2h0PSI1OS4zMTUiIHJ5PSIyOS42NTciIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cmVjdCB4PSIxLjk4MjYiIHk9IjEuOTc4NCIgd2lkdGg9IjU5Ljk5NyIgaGVpZ2h0PSI1OS45OTciIHJ5PSIyOS45OTgiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iMS4wMTE1Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwMzUgMCAwIDEuMzE3IC0xLjQ3NTIgLTYuNTUxMSkiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjEiPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuMDIyOSAwIDAgMS4wMTI0IC44NzU5OSA0Ljk3NDEpIiBkPSJtMjUgMTEtMTIgN3YxNGwxMiA3IDEyLTd2LTE0eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwMzUgMCAwIDEuMzE3IC0yLjQ3NDcgLTcuODg0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgPHBhdGggZD0ibTE0LjE3MyAyMy4yIDEyLjI3NSAyMS4yNTcgMTIuMjczLTIxLjI1Ny0xMi4yNzMtNy4wOSIgZmlsbD0idXJsKCNlKSIvPgogIDxwYXRoIGQ9Im0xNC4xNzMgMjMuMnYzLjU0M2wxMi4yNzQgNy4wOSAxZS0zIC0zLjU0N3oiIGZpbGw9IiM1OWE4NDkiLz4KICA8cGF0aCBkPSJtMjYuNDQ4IDMzLjgyNyAxMi4yNzQtNy4wODd2LTMuNTQzbC0xMi4yNzQgNy4wODZ6IiBmaWxsPSIjM2U3MjMxIi8+CiAgPHBhdGggZD0ibTE0LjE3MyAyNi43NHYxMC42M2wxMi4yNzQgNy4wODd2LTEwLjYzeiIgZmlsbD0idXJsKCNhKSIvPgogIDxwYXRoIGQ9Im0yNi40NDggMzMuODI3IDEyLjI3NC03LjA4N3YxMC42M2wtMTIuMjc0IDcuMDg3eiIgZmlsbD0iIzU3M2QyYiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"minecraft,minecraft\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"minecraft-launcher.desktop\"\nLABEL oc.launch=\"minecraft-launcher.Minecraft Launcher\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"minecraft\"\nLABEL oc.displayname=\"minecraft\"\nLABEL oc.path=\"/usr/bin/minecraft-launcher\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"4G\\\",\\\"shm_size\\\":\\\"2G\\\",\\\"cpu_period\\\":200000,\\\"cpu_quota\\\":200000,\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"minecraft\"\nENV APPBIN \"/usr/bin/minecraft-launcher\"\nENV APP \"/usr/bin/minecraft-launcher\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/minecraft/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/minecraft/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/minecraft/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/minecraft/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-mines\nLABEL oc.icon=\"circle_gnome-mines.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQXBwcy1WaXN1YWwtU3R1ZGlvLUNvZGUiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ5OS45NSIgeDI9IjQ5OS45NSIgeTE9IjIuMDA3OCIgeTI9IjEwMjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMiAyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSI1MTIuMDEiIGN5PSI1MTIuMDEiIHI9IjQ3MC4xNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2MjUgMCAwIC45NzYyNSAxMi4xNTIgMTIuMTQxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9Ii41MjU5MyIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTUuMjk5NzE1Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjEzIiB5Mj0iNTEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDYzODI5IiB5PSItLjA1NjYwNCIgd2lkdGg9IjEuMTI3NyIgaGVpZ2h0PSIxLjExMzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODk2MjM0MzIiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNTg4MjUgMCAwIC4wNTg4MjUgMS44ODE4IDEuODgyNSkiPgogIDxwYXRoIGQ9Im05ODQuODggMzE2Ljc1cS05LjI5MjMtMjIuNTI5LTIwLjk2Mi00NC4xMzljLTQuMzc2LTguMTU3OC05LjAyMjItMTYuMjYxLTEzLjkzOC0yNC4yMDMtMjEuMTI0LTM0LjI1Mi00Ni44OTQtNjYuNjE0LTc3LjMxMS05Ny4wMjktOTkuNTY4LTk5LjU2OC0yMTkuODMtMTQ5LjM4LTM2MC42Ny0xNDkuMzgtMTQwLjg1IDAtMjYxLjA1IDQ5LjgxMS0zNjAuNjEgMTQ5LjM4LTk5LjU2OSA5OS41NzItMTQ5LjM4IDIxOS43OC0xNDkuMzggMzYwLjYxczQ5LjgxMSAyNjEuMTEgMTQ5LjM4IDM2MC42N2M5OS41NjggOTkuNTY4IDIxOS43OCAxNDkuMzIgMzYwLjYxIDE0OS4zMiAxNDAuODQgMCAyNjEuMTEtNDkuNzU4IDM2MC42Ny0xNDkuMzIgNTQuODM2LTU0Ljg5IDk0LjU5OC0xMTYuMDQgMTE5LjIzLTE4My40MiAyMC4wNDMtNTQuOTQzIDMwLjA5Mi0xMTMuOTkgMzAuMDkyLTE3Ny4yNSAwLTQ4LjUxNS01Ljg4ODgtOTQuNTk4LTE3LjcyLTEzOC4yNS0xLjM1MDctNC45MTYzLTIuNzU1My05LjgzMjYtNC4yMTM5LTE0LjY5NS00LjQzMDItMTQuMzcxLTkuNTA4NS0yOC40NzEtMTUuMTgxLTQyLjMwMnoiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE4LjM2OCIvPgogIDxwYXRoIGlkPSJwYXRoIiBkPSJtOTg0Ljg4IDMxNi43NXEtOS4yOTIzLTIyLjUyOS0yMC45NjItNDQuMTM5Yy00LjM3Ni04LjE1NzgtOS4wMjIyLTE2LjI2MS0xMy45MzgtMjQuMjAzLTIxLjEyNC0zNC4yNTItNDYuODk0LTY2LjYxNC03Ny4zMTEtOTcuMDI5LTk5LjU2OC05OS41NjgtMjE5LjgzLTE0OS4zOC0zNjAuNjctMTQ5LjM4LTE0MC44NSAwLTI2MS4wNSA0OS44MTEtMzYwLjYxIDE0OS4zOC05OS41NjkgOTkuNTcyLTE0OS4zOCAyMTkuNzgtMTQ5LjM4IDM2MC42MXM0OS44MTEgMjYxLjExIDE0OS4zOCAzNjAuNjdjOTkuNTY4IDk5LjU2OCAyMTkuNzggMTQ5LjMyIDM2MC42MSAxNDkuMzIgMTQwLjg0IDAgMjYxLjExLTQ5Ljc1OCAzNjAuNjctMTQ5LjMyIDU0LjgzNi01NC44OSA5NC41OTgtMTE2LjA0IDExOS4yMy0xODMuNDIgMjAuMDQzLTU0Ljk0MyAzMC4wOTItMTEzLjk5IDMwLjA5Mi0xNzcuMjUgMC00OC41MTUtNS44ODg4LTk0LjU5OC0xNy43Mi0xMzguMjUtMS4zNTA3LTQuOTE2My0yLjc1NTMtOS44MzI2LTQuMjEzOS0xNC42OTUtNC40MzAyLTE0LjM3MS05LjUwODUtMjguNDcxLTE1LjE4MS00Mi4zMDJ6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjE4LjM2OCIvPgogIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjUxMS45OSIgcj0iNDU4Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZW5hYmxlLWJhY2tncm91bmQ9ImFjY3VtdWxhdGUiIGZpbGw9IiM2NjYiIHN0cm9rZS13aWR0aD0iMzguNDI2Ii8+CiAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTExLjk5IiByPSI0NTguOTkiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0iYWNjdW11bGF0ZSIgZmlsbD0idXJsKCNhKSIgc3Ryb2tlLXdpZHRoPSIzOC40MjYiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zMS45MjQgMTNjLTEuMzUwNyAwLTIuMjEyMyAwLjk5MTcyLTIuMjk3NiAyLjMwMnYyLjY3YzAuMTIxMTYgMS4xOTgxIDEuMTQ0MyAyLjE1NCAyLjM3MzggMi4xNTRhMi40MjMyIDIuNDIzMiAwIDAgMCAwLjg4ODUxLTAuMTUyNTcgMi40Mjc3IDIuNDI3NyAwIDAgMCAxLjQ4MDgtMi4wMDE0di0yLjU5ODJhMi40MTQyIDIuNDE0MiAwIDAgMC0yLjQ0NTYtMi4zNzM4em0tNC41OTk2IDUuNTY0NGExNC44NDQgMTQuODQ0IDAgMCAwLTQuMzA3OSAyLjQ1MDEgNC4zOTc3IDQuMzk3NyAwIDAgMSAxLjMzNzMgMS40ODA4YzAuMDEzNDYgMC4wMTc5Ni0wLjAwOTEgMC4wNTgzMyAwIDAuMDc2MjlhNC4yNTg2IDQuMjU4NiAwIDAgMSAwLjM3MjQ2IDAuODkzYzAuMDA5MSAwLjAyMjQ0IDAgMC4wNDkzNyAwIDAuMDcxOGE0LjU0NTggNC41NDU4IDAgMCAxIDAuMDc2MjkgMS45Mjk2Yy0wLjA1ODM0IDAuMjg3Mi0wLjE4ODQ3IDAuNTU2NDQtMC4yOTYxNyAwLjgxNjcxYTQuMjU4NiA0LjI1ODYgMCAwIDEtMy45MzU1IDIuNjcgMy45MjY1IDMuOTI2NSAwIDAgMS0yLjIyNTgtMC42Njg2M2MtMC4wOTQyMyAwLjI2OTI0LTAuMjM3ODMgMC41Mjk1Mi0wLjI5NjE3IDAuODE2NzF2MC4wNzYyOGMtMC4wODk3NCAwLjQzOTc3LTAuMTc5NSAwLjg3OTU0LTAuMjI0MzcgMS4zMzI4djAuMDc2MjhjLTAuMDQ0ODggMC40NTc3Mi0wLjA3MTggMC45NDIzNi0wLjA3MTggMS40MDkxdjAuMTQ4MDhjMCAwLjQ0NDI2IDAuMDMxNDEgMC45MDY0NiAwLjA3MTggMS4zMzczdjAuMTQ4MDljMC4wNDkzNyAwLjQyNjMgMC4xMzQ2MiAwLjg0MzY0IDAuMjI0MzcgMS4yNjEgMC4wODA3NyAwLjQxMjg0IDAuMTc5NSAwLjc5NDI4IDAuMjk2MTcgMS4xODkyYTUuOTIzNCA1LjkyMzQgMCAwIDEgMi41MjE5LTAuNzQ0OTFjMC44NjE1OS0wLjA0NDg4IDEuNjYwMyAwLjIwNjQyIDIuMzAyIDAuNjczMTFhMy45NDQ0IDMuOTQ0NCAwIDAgMSAxLjQwOTEgMS44NDg4IDQuNjMxIDQuNjMxIDAgMCAxIDAuMjk2MTcgMS43MDUyYzAgMS4yMDcxLTAuOTg3MjMgMi43OTEyLTEuNzA1MiAzLjU2NzUgMC4yOTE2OCAwLjIyNDM3IDAuNTc0MzkgMC40NTc3MiAwLjg4ODUxIDAuNjY0MTQgMC4zNzY5NCAwLjI1MTMgMC43MTc5OSAwLjUyOTUyIDEuMTEyOSAwLjc0NDkxIDAuNTY1NDIgMC4zMDUxNCAxLjE3NTcgMC41ODMzNiAxLjc4MTUgMC44MTY3MSAwLjExNjY3IDAuMDQ0ODggMC4yNDY4MSAwLjA1Mzg1IDAuMzcyNDYgMC4wNzE4YTIuNTEzIDIuNTEzIDAgMCAxLTAuMDc2MjktMC41MjA1NGMwLTEuODg0NyAyLjEyNy0zLjQxMDQgNC43NTIyLTMuNDEwNCAyLjYyMDcgMCA0Ljc0NzcgMS41MjU3IDQuNzQ3NyAzLjQxMDQgMCAwLjE3MDUyLTAuMDQ0ODggMC4zNTg5OS0wLjA3NjI4IDAuNTIwNTQgMC43MTc5OS0wLjI0NjgxIDEuNDIyNS0wLjUzODQ5IDIuMDc3Ny0wLjg4ODUxIDAuNTA3MDgtMC4yNjkyNCAwLjk0MjM2LTAuNTY5OSAxLjQxMzUtMC44OTMgMC4xNDM2LTAuMDk4NzIgMC4zMDUxNC0wLjE4ODQ3IDAuNDQ0MjYtMC4yOTYxNyAwLjExMjE4LTAuMDgwNzcgMC4xODg0Ny0wLjIwNjQyIDAuMjk2MTctMC4yOTYxN2E0LjU5MDYgNC41OTA2IDAgMCAxLTAuODE2NzEtMC44MTY3MSAzLjg5NTEgMy44OTUxIDAgMCAxLTAuODE2NzEtMS43ODE1IDUuMDkzMiA1LjA5MzIgMCAwIDEtMC4wNzE4LTAuODg4NTFjMC0wLjU3ODg4IDAuMTMwMTQtMS4xNDQzIDAuMjk2MTctMS42MzM0IDAuMDA0NS0wLjAyMjQ0LTAuMDA5MS0wLjA1Mzg1IDAtMC4wNzYyOWEzLjY3OTcgMy42Nzk3IDAgMCAxIDAuMjk2MTctMC42NjQxNGMwLjEzNDYyLTAuMjI0MzcgMC4yNzgyMi0wLjQwMzg3IDAuNDQ4NzQtMC41OTY4MyAwLjE3NTAxLTAuMjA2NDIgMC4zNzY5NC0wLjM1NDUgMC41OTIzNC0wLjUxNjA1YTMuNjM0OCAzLjYzNDggMCAwIDEgMS4zMzI4LTAuNjczMTEgNC4zNTczIDQuMzU3MyAwIDAgMSAwLjgxNjcxLTAuMTQzNmMwLjY2ODYzLTAuMDQwMzkgMS43OTUgMC4yMjg4NiAyLjY3IDAuNzQwNDIgMC4xMDc3LTAuMzcyNDYgMC4yMjQzNy0wLjcyNjk2IDAuMzAwNjYtMS4xMTI5IDAuMDg1MjYtMC40MTczMyAwLjE3MDUyLTAuODM0NjYgMC4yMjQzNy0xLjI2MSAwLTAuMDQ5MzYtMC4wMDkxLTAuMDk4NzMgMC0wLjE0ODA5YTE0Ljk0MyAxNC45NDMgMCAwIDAgMC0yLjk3MDdjLTAuMDQ5MzctMC40NDg3NC0wLjEzNDYyLTAuODkzLTAuMjI0MzctMS4zMzI4LTAuMDA5MS0wLjAyMjQ0IDAtMC4wNTM4NiAwLTAuMDc2MjktMC4wNjczLTAuMzE0MTItMC4xOTI5Ni0wLjU5NjgzLTAuMzAwNjYtMC44ODg1MWEzLjkyMiAzLjkyMiAwIDAgMS0yLjIyNTggMC42Njg2MiA0LjIzMTYgNC4yMzE2IDAgMCAxLTMuMDQyNS0xLjI2MSA0LjUwOTkgNC41MDk5IDAgMCAxLTAuNTE2MDUtMC42NzMxMSA0LjI0OTYgNC4yNDk2IDAgMCAxLTAuMjI0MzctNC40NTE1IDQuMjQ5NiA0LjI0OTYgMCAwIDEgMC41MjA1NC0wLjgxMjIyIDQuNTMyMyA0LjUzMjMgMCAwIDEgMC43NDA0Mi0wLjY3MzEyIDE0LjE4IDE0LjE4IDAgMCAwLTQuMjI3Mi0yLjQ0NTZjMC4wMzE0MSAwLjE2NjA0IDAuMDcxNzkgMC4zNTAwMiAwLjA3MTc5IDAuNTIwNTQgMCAxLjg4NDctMi4xMjcgMy40MTA0LTQuNzQ3NyAzLjQxMDQtMS42NDI0IDAtMy4wNzg0LTAuNTc0MzktMy45MzU1LTEuNDgwOGEzLjQxMDQgMy40MTA0IDAgMCAxLTAuNDQ0MjctMC41OTIzMiAyLjYyNTEgMi42MjUxIDAgMCAxLTAuMzY3OTctMS4zMzczYzAtMC4xNzA1MiAwLjA0MDM5LTAuMzU4OTkgMC4wNzE4LTAuNTIwNTR6bS0xMC4zMTcgMS42MzM0YTIuNDcyNiAyLjQ3MjYgMCAwIDAtMS40ODA4IDEuMTEyOSAyLjQyMzIgMi40MjMyIDAgMCAwIDAuNzQwNDIgMy4zMzg2bDEuOTI5NiAxLjE4OTIgMC43NDA0MiAwLjQ0NDI1YTIuOTE2OCAyLjkxNjggMCAwIDAgMC45NjQ4IDAuMjI0MzcgMi44NDA1IDIuODQwNSAwIDAgMCAxLjg1NzgtMC43NDQ5MSAyLjMzMzUgMi4zMzM1IDAgMCAwIDAuNzQwNDMtMS43MDUyIDIuNDc3MSAyLjQ3NzEgMCAwIDAtMC44MTY3MS0xLjg1NzhsLTAuODg4NTEtMC41MTYwNi0yLjAwNTktMS4xODkyYTIuMzA2NSAyLjMwNjUgMCAwIDAtMS43ODE1LTAuMjk2MTd6bTI5LjA5MiAwYTIuMzE1NSAyLjMxNTUgMCAwIDAtMC44OTMgMC4yOTYxN2wtMi4wMDE0IDEuMTg5Mi0wLjg5MyAwLjUyMDU0Yy0wLjAyNjkzIDAuMDE3OTUtMC4wNDQ4OCAwLjA0NDg4LTAuMDcxNzkgMC4wNzE4YTIuMTA5MSAyLjEwOTEgMCAwIDAtMC43NDQ5MSAxLjcwNTIgMi4zMzM1IDIuMzMzNSAwIDAgMCAwLjc0NDkxIDEuNzA1MiAyLjgzNjEgMi44MzYxIDAgMCAwIDIuODE4MSAwLjU5MjM0bDAuNzQwNDMtMC40Mzk3NyAxLjkyOTYtMS4xODkyYTIuNDIzMiAyLjQyMzIgMCAwIDAgMC43NDQ5MS0zLjMzODYgMi4zNTU5IDIuMzU1OSAwIDAgMC0yLjM3ODMtMS4xMTI5em0tMTQuMDk5IDcuMDQ5N2E0Ljc0OTkgNC43NDk5IDAgMSAxIDAgOS40OTk5Yy0xLjMxNDggMC0yLjQ4MTUtMC41NTE5NS0zLjMzODYtMS40MTM1LTAuMjE1NC0wLjIxMDkxLTAuNDI2MzEtMC40MTI4NC0wLjU5NjgzLTAuNjY0MTRhNC43ODM2IDQuNzgzNiAwIDAgMS0wLjgxNjcxLTIuNjc0NWMwLTAuMzI3NTggMC4wMTM0Ny0wLjY1NTE2IDAuMDc2MjktMC45NjQ4IDAuNDQ0MjUtMi4xNjI5IDIuMzc4My0zLjc4MjkgNC42NzU5LTMuNzgyOXptMCAyLjM3ODNjLTAuOTg3MjMgMC0xLjc5NSAwLjYyODI0LTIuMTU0IDEuNDgwOGEyLjIzMDMgMi4yMzAzIDAgMCAwLTAuMjI0MzcgMC44ODg1MSAyLjM3MzggMi4zNzM4IDAgMSAwIDIuMzc4My0yLjM3Mzh6bS0xMi4wOTggNy45MzgzYy0wLjU1MTk1IDAuMDU4MzMtMC43MDAwNCAwLjE5NzQ1LTAuOTY0OCAwLjI5NjE3bC0wLjUxNjA1IDAuMjk2MTctMS45Mjk2IDEuMTg0N2EyLjQyMzIgMi40MjMyIDAgMCAwLTAuNzQ0OTEgMy4zNDMxIDIuNDQ1NiAyLjQ0NTYgMCAwIDAgMy4zMzg2IDAuODEyMjJsMS45Mjk2LTEuMTg0NyAwLjY3MzExLTAuNDQ4NzRhMi43NTUzIDIuNzU1MyAwIDAgMCAwLjczNTk0LTEuMTg0NyAxLjQ4NTMgMS40ODUzIDAgMCAwIDAuMDc2MjktMC40NDg3NCAyLjg2MyAyLjg2MyAwIDAgMC0wLjc0MDQyLTEuODUzMyAyLjYwMjcgMi42MDI3IDAgMCAwLTAuODE2NzEtMC42NjQxNCAyLjA2NDIgMi4wNjQyIDAgMCAwLTEuMDQxMS0wLjE0ODA4em0yNC4yNjggMC4xNDgwOGEyLjUzMDkgMi41MzA5IDAgMCAwLTIuNTI2NCAyLjUyMTljMCAwLjY1MDY4IDAuMTgzOTggMS4xMjE5IDAuNTk2ODMgMS41NTcxbDAuNzQwNDMgMC41MjA1NCAxLjkyOTYgMS4xODQ3YTIuNDQ1NiAyLjQ0NTYgMCAwIDAgMy4zMzg2LTAuODEyMjIgMi40MjMyIDIuNDIzMiAwIDAgMC0wLjc0MDQyLTMuMzQzMWwtMS45Mjk2LTEuMTg0N2MtMC4xNzA1Mi0wLjA5ODczLTAuMzMyMDctMC4yMTA5MS0wLjUyMDU0LTAuMjk2MTdhMi43NTUzIDIuNzU1MyAwIDAgMC0wLjg4ODUxLTAuMTQ4MDh6bS0xMi4xNyA2LjE1NjdhMi40NDU2IDIuNDQ1NiAwIDAgMC0wLjg5MyAwLjE0ODA4IDMuMDkxOCAzLjA5MTggMCAwIDAtMC44MTY3MSAwLjUyMDU0IDIuMTk4OCAyLjE5ODggMCAwIDAtMC44MTIyMiAxLjQ4MDh2Mi42MDcyYzAgMS4zMTAzIDEuMDk0OSAyLjM3MzggMi40NDU2IDIuMzczOGEyLjQxNDIgMi40MTQyIDAgMCAwIDIuNDUwMS0yLjM3ODN2LTIuNTkzN2EyLjQwOTcgMi40MDk3IDAgMCAwLTIuMzc4My0yLjE1NHoiIGZpbHRlcj0idXJsKCNlKSIgb3BhY2l0eT0iLjc1IiBzdHJva2Utd2lkdGg9IjMuNzc5NiIvPgogPHBhdGggZD0ibTMxLjkyNCAxM2MtMS4zNTA3IDAtMi4yMTIzIDAuOTkxNzItMi4yOTc2IDIuMzAydjIuNjdjMC4xMjExNiAxLjE5ODEgMS4xNDQzIDIuMTU0IDIuMzczOCAyLjE1NGEyLjQyMzIgMi40MjMyIDAgMCAwIDAuODg4NTEtMC4xNTI1NyAyLjQyNzcgMi40Mjc3IDAgMCAwIDEuNDgwOC0yLjAwMTR2LTIuNTk4MmEyLjQxNDIgMi40MTQyIDAgMCAwLTIuNDQ1Ni0yLjM3Mzh6bS00LjU5OTYgNS41NjQ0YTE0Ljg0NCAxNC44NDQgMCAwIDAtNC4zMDc5IDIuNDUwMSA0LjM5NzcgNC4zOTc3IDAgMCAxIDEuMzM3MyAxLjQ4MDhjMC4wMTM0NiAwLjAxNzk2LTAuMDA5MSAwLjA1ODMzIDAgMC4wNzYyOWE0LjI1ODYgNC4yNTg2IDAgMCAxIDAuMzcyNDYgMC44OTNjMC4wMDkxIDAuMDIyNDQgMCAwLjA0OTM3IDAgMC4wNzE4YTQuNTQ1OCA0LjU0NTggMCAwIDEgMC4wNzYyOSAxLjkyOTZjLTAuMDU4MzQgMC4yODcyLTAuMTg4NDcgMC41NTY0NC0wLjI5NjE3IDAuODE2NzFhNC4yNTg2IDQuMjU4NiAwIDAgMS0zLjkzNTUgMi42NyAzLjkyNjUgMy45MjY1IDAgMCAxLTIuMjI1OC0wLjY2ODYzYy0wLjA5NDIzIDAuMjY5MjQtMC4yMzc4MyAwLjUyOTUyLTAuMjk2MTcgMC44MTY3MXYwLjA3NjI4Yy0wLjA4OTc0IDAuNDM5NzctMC4xNzk1IDAuODc5NTQtMC4yMjQzNyAxLjMzMjh2MC4wNzYyOGMtMC4wNDQ4OCAwLjQ1NzcyLTAuMDcxOCAwLjk0MjM2LTAuMDcxOCAxLjQwOTF2MC4xNDgwOGMwIDAuNDQ0MjYgMC4wMzE0MSAwLjkwNjQ2IDAuMDcxOCAxLjMzNzN2MC4xNDgwOWMwLjA0OTM3IDAuNDI2MyAwLjEzNDYyIDAuODQzNjQgMC4yMjQzNyAxLjI2MSAwLjA4MDc3IDAuNDEyODQgMC4xNzk1IDAuNzk0MjggMC4yOTYxNyAxLjE4OTJhNS45MjM0IDUuOTIzNCAwIDAgMSAyLjUyMTktMC43NDQ5MWMwLjg2MTU5LTAuMDQ0ODggMS42NjAzIDAuMjA2NDIgMi4zMDIgMC42NzMxMWEzLjk0NDQgMy45NDQ0IDAgMCAxIDEuNDA5MSAxLjg0ODggNC42MzEgNC42MzEgMCAwIDEgMC4yOTYxNyAxLjcwNTJjMCAxLjIwNzEtMC45ODcyMyAyLjc5MTItMS43MDUyIDMuNTY3NSAwLjI5MTY4IDAuMjI0MzcgMC41NzQzOSAwLjQ1NzcyIDAuODg4NTEgMC42NjQxNCAwLjM3Njk0IDAuMjUxMyAwLjcxNzk5IDAuNTI5NTIgMS4xMTI5IDAuNzQ0OTEgMC41NjU0MiAwLjMwNTE0IDEuMTc1NyAwLjU4MzM2IDEuNzgxNSAwLjgxNjcxIDAuMTE2NjcgMC4wNDQ4OCAwLjI0NjgxIDAuMDUzODUgMC4zNzI0NiAwLjA3MThhMi41MTMgMi41MTMgMCAwIDEtMC4wNzYyOS0wLjUyMDU0YzAtMS44ODQ3IDIuMTI3LTMuNDEwNCA0Ljc1MjItMy40MTA0IDIuNjIwNyAwIDQuNzQ3NyAxLjUyNTcgNC43NDc3IDMuNDEwNCAwIDAuMTcwNTItMC4wNDQ4OCAwLjM1ODk5LTAuMDc2MjggMC41MjA1NCAwLjcxNzk5LTAuMjQ2ODEgMS40MjI1LTAuNTM4NDkgMi4wNzc3LTAuODg4NTEgMC41MDcwOC0wLjI2OTI0IDAuOTQyMzYtMC41Njk5IDEuNDEzNS0wLjg5MyAwLjE0MzYtMC4wOTg3MiAwLjMwNTE0LTAuMTg4NDcgMC40NDQyNi0wLjI5NjE3IDAuMTEyMTgtMC4wODA3NyAwLjE4ODQ3LTAuMjA2NDIgMC4yOTYxNy0wLjI5NjE3YTQuNTkwNiA0LjU5MDYgMCAwIDEtMC44MTY3MS0wLjgxNjcxIDMuODk1MSAzLjg5NTEgMCAwIDEtMC44MTY3MS0xLjc4MTUgNS4wOTMyIDUuMDkzMiAwIDAgMS0wLjA3MTgtMC44ODg1MWMwLTAuNTc4ODggMC4xMzAxNC0xLjE0NDMgMC4yOTYxNy0xLjYzMzQgMC4wMDQ1LTAuMDIyNDQtMC4wMDkxLTAuMDUzODUgMC0wLjA3NjI5YTMuNjc5NyAzLjY3OTcgMCAwIDEgMC4yOTYxNy0wLjY2NDE0YzAuMTM0NjItMC4yMjQzNyAwLjI3ODIyLTAuNDAzODcgMC40NDg3NC0wLjU5NjgzIDAuMTc1MDEtMC4yMDY0MiAwLjM3Njk0LTAuMzU0NSAwLjU5MjM0LTAuNTE2MDVhMy42MzQ4IDMuNjM0OCAwIDAgMSAxLjMzMjgtMC42NzMxMSA0LjM1NzMgNC4zNTczIDAgMCAxIDAuODE2NzEtMC4xNDM2YzAuNjY4NjMtMC4wNDAzOSAxLjc5NSAwLjIyODg2IDIuNjcgMC43NDA0MiAwLjEwNzctMC4zNzI0NiAwLjIyNDM3LTAuNzI2OTYgMC4zMDA2Ni0xLjExMjkgMC4wODUyNi0wLjQxNzMzIDAuMTcwNTItMC44MzQ2NiAwLjIyNDM3LTEuMjYxIDAtMC4wNDkzNi0wLjAwOTEtMC4wOTg3MyAwLTAuMTQ4MDlhMTQuOTQzIDE0Ljk0MyAwIDAgMCAwLTIuOTcwN2MtMC4wNDkzNy0wLjQ0ODc0LTAuMTM0NjItMC44OTMtMC4yMjQzNy0xLjMzMjgtMC4wMDkxLTAuMDIyNDQgMC0wLjA1Mzg2IDAtMC4wNzYyOS0wLjA2NzMtMC4zMTQxMi0wLjE5Mjk2LTAuNTk2ODMtMC4zMDA2Ni0wLjg4ODUxYTMuOTIyIDMuOTIyIDAgMCAxLTIuMjI1OCAwLjY2ODYyIDQuMjMxNiA0LjIzMTYgMCAwIDEtMy4wNDI1LTEuMjYxIDQuNTA5OSA0LjUwOTkgMCAwIDEtMC41MTYwNS0wLjY3MzExIDQuMjQ5NiA0LjI0OTYgMCAwIDEtMC4yMjQzNy00LjQ1MTUgNC4yNDk2IDQuMjQ5NiAwIDAgMSAwLjUyMDU0LTAuODEyMjIgNC41MzIzIDQuNTMyMyAwIDAgMSAwLjc0MDQyLTAuNjczMTIgMTQuMTggMTQuMTggMCAwIDAtNC4yMjcyLTIuNDQ1NmMwLjAzMTQxIDAuMTY2MDQgMC4wNzE3OSAwLjM1MDAyIDAuMDcxNzkgMC41MjA1NCAwIDEuODg0Ny0yLjEyNyAzLjQxMDQtNC43NDc3IDMuNDEwNC0xLjY0MjQgMC0zLjA3ODQtMC41NzQzOS0zLjkzNTUtMS40ODA4YTMuNDEwNCAzLjQxMDQgMCAwIDEtMC40NDQyNy0wLjU5MjMyIDIuNjI1MSAyLjYyNTEgMCAwIDEtMC4zNjc5Ny0xLjMzNzNjMC0wLjE3MDUyIDAuMDQwMzktMC4zNTg5OSAwLjA3MTgtMC41MjA1NHptLTEwLjMxNyAxLjYzMzRhMi40NzI2IDIuNDcyNiAwIDAgMC0xLjQ4MDggMS4xMTI5IDIuNDIzMiAyLjQyMzIgMCAwIDAgMC43NDA0MiAzLjMzODZsMS45Mjk2IDEuMTg5MiAwLjc0MDQyIDAuNDQ0MjVhMi45MTY4IDIuOTE2OCAwIDAgMCAwLjk2NDggMC4yMjQzNyAyLjg0MDUgMi44NDA1IDAgMCAwIDEuODU3OC0wLjc0NDkxIDIuMzMzNSAyLjMzMzUgMCAwIDAgMC43NDA0My0xLjcwNTIgMi40NzcxIDIuNDc3MSAwIDAgMC0wLjgxNjcxLTEuODU3OGwtMC44ODg1MS0wLjUxNjA2LTIuMDA1OS0xLjE4OTJhMi4zMDY1IDIuMzA2NSAwIDAgMC0xLjc4MTUtMC4yOTYxN3ptMjkuMDkyIDBhMi4zMTU1IDIuMzE1NSAwIDAgMC0wLjg5MyAwLjI5NjE3bC0yLjAwMTQgMS4xODkyLTAuODkzIDAuNTIwNTRjLTAuMDI2OTMgMC4wMTc5NS0wLjA0NDg4IDAuMDQ0ODgtMC4wNzE3OSAwLjA3MThhMi4xMDkxIDIuMTA5MSAwIDAgMC0wLjc0NDkxIDEuNzA1MiAyLjMzMzUgMi4zMzM1IDAgMCAwIDAuNzQ0OTEgMS43MDUyIDIuODM2MSAyLjgzNjEgMCAwIDAgMi44MTgxIDAuNTkyMzRsMC43NDA0My0wLjQzOTc3IDEuOTI5Ni0xLjE4OTJhMi40MjMyIDIuNDIzMiAwIDAgMCAwLjc0NDkxLTMuMzM4NiAyLjM1NTkgMi4zNTU5IDAgMCAwLTIuMzc4My0xLjExMjl6bS0xNC4wOTkgNy4wNDk3YTQuNzQ5OSA0Ljc0OTkgMCAxIDEgMCA5LjQ5OTljLTEuMzE0OCAwLTIuNDgxNS0wLjU1MTk1LTMuMzM4Ni0xLjQxMzUtMC4yMTU0LTAuMjEwOTEtMC40MjYzMS0wLjQxMjg0LTAuNTk2ODMtMC42NjQxNGE0Ljc4MzYgNC43ODM2IDAgMCAxLTAuODE2NzEtMi42NzQ1YzAtMC4zMjc1OCAwLjAxMzQ3LTAuNjU1MTYgMC4wNzYyOS0wLjk2NDggMC40NDQyNS0yLjE2MjkgMi4zNzgzLTMuNzgyOSA0LjY3NTktMy43ODI5em0wIDIuMzc4M2MtMC45ODcyMyAwLTEuNzk1IDAuNjI4MjQtMi4xNTQgMS40ODA4YTIuMjMwMyAyLjIzMDMgMCAwIDAtMC4yMjQzNyAwLjg4ODUxIDIuMzczOCAyLjM3MzggMCAxIDAgMi4zNzgzLTIuMzczOHptLTEyLjA5OCA3LjkzODNjLTAuNTUxOTUgMC4wNTgzMy0wLjcwMDA0IDAuMTk3NDUtMC45NjQ4IDAuMjk2MTdsLTAuNTE2MDUgMC4yOTYxNy0xLjkyOTYgMS4xODQ3YTIuNDIzMiAyLjQyMzIgMCAwIDAtMC43NDQ5MSAzLjM0MzEgMi40NDU2IDIuNDQ1NiAwIDAgMCAzLjMzODYgMC44MTIyMmwxLjkyOTYtMS4xODQ3IDAuNjczMTEtMC40NDg3NGEyLjc1NTMgMi43NTUzIDAgMCAwIDAuNzM1OTQtMS4xODQ3IDEuNDg1MyAxLjQ4NTMgMCAwIDAgMC4wNzYyOS0wLjQ0ODc0IDIuODYzIDIuODYzIDAgMCAwLTAuNzQwNDItMS44NTMzIDIuNjAyNyAyLjYwMjcgMCAwIDAtMC44MTY3MS0wLjY2NDE0IDIuMDY0MiAyLjA2NDIgMCAwIDAtMS4wNDExLTAuMTQ4MDh6bTI0LjI2OCAwLjE0ODA4YTIuNTMwOSAyLjUzMDkgMCAwIDAtMi41MjY0IDIuNTIxOWMwIDAuNjUwNjggMC4xODM5OCAxLjEyMTkgMC41OTY4MyAxLjU1NzFsMC43NDA0MyAwLjUyMDU0IDEuOTI5NiAxLjE4NDdhMi40NDU2IDIuNDQ1NiAwIDAgMCAzLjMzODYtMC44MTIyMiAyLjQyMzIgMi40MjMyIDAgMCAwLTAuNzQwNDItMy4zNDMxbC0xLjkyOTYtMS4xODQ3Yy0wLjE3MDUyLTAuMDk4NzMtMC4zMzIwNy0wLjIxMDkxLTAuNTIwNTQtMC4yOTYxN2EyLjc1NTMgMi43NTUzIDAgMCAwLTAuODg4NTEtMC4xNDgwOHptLTEyLjE3IDYuMTU2N2EyLjQ0NTYgMi40NDU2IDAgMCAwLTAuODkzIDAuMTQ4MDggMy4wOTE4IDMuMDkxOCAwIDAgMC0wLjgxNjcxIDAuNTIwNTQgMi4xOTg4IDIuMTk4OCAwIDAgMC0wLjgxMjIyIDEuNDgwOHYyLjYwNzJjMCAxLjMxMDMgMS4wOTQ5IDIuMzczOCAyLjQ0NTYgMi4zNzM4YTIuNDE0MiAyLjQxNDIgMCAwIDAgMi40NTAxLTIuMzc4M3YtMi41OTM3YTIuNDA5NyAyLjQwOTcgMCAwIDAtMi4zNzgzLTIuMTU0eiIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlLXdpZHRoPSIzLjc3OTYiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"mines,gnome mines,game mines,mines\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Mines.desktop\"\nLABEL oc.launch=\"gnome-mines.Gnome-mines\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Mines\"\nLABEL oc.displayname=\"gnome-mines (alpine)\"\nLABEL oc.path=\"/usr/bin/gnome-mines\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Mines\"\nENV APPBIN \"/usr/bin/gnome-mines\"\nENV APP \"/usr/bin/gnome-mines\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mines/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mines/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mines/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mines/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN mkdir -p /run/user/4096 /var/run/dbus/ chown balloon:balloon /run/user/4096 /var/run/dbus\nCOPY composer/node /composer/node\nRUN cd /composer/node/ocdownload && npm install\nCOPY composer/init.d/init.nautilus /composer/init.d/init.nautilus\nCOPY composer/desktop_download.py /composer/desktop_download.py\nENV NAUTILUS_PYTHON_DEBUG=misc\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus gnome-icon-theme gnome-icon-theme-symbolic numix-gtk-theme numix-icon-theme gnome-font-viewer dbus-x11 python3-nautilus python3-shellescape nautilus desktop-file-utils shared-mime-info xdg-user-dirs && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_filemanager.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIGlkPSJDYWxjdWxhdG9yIgogICB3aWR0aD0iNjQiCiAgIGhlaWdodD0iNjQiCiAgIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIKICAgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIgogICB2ZXJzaW9uPSIxLjEiCiAgIHZpZXdCb3g9IjAgMCA2NCA2NCIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmlsZW1hbmFnZXIuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEyNDQ1NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNDQwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjYxNSIKICAgICBpZD0ibmFtZWR2aWV3MjQ0NTMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjMuNjkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0xNC4wNzA0NjEiCiAgICAgaW5rc2NhcGU6Y3k9IjMyIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FsY3VsYXRvciIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMjQ0MTMiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiMyZjVmZGQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDM5MiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzFhN2ZkNCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI0Mzk0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjUyMCIKICAgICAgIHgyPSI1MjAiCiAgICAgICB5MT0iNCIKICAgICAgIHkyPSIxMDI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNDQwMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiNmZWM1ODkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDM5NyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iI2YzNGYxNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI0Mzk5IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImQiCiAgICAgICB4MT0iNTIwIgogICAgICAgeDI9IjUyMCIKICAgICAgIHkxPSI0IgogICAgICAgeTI9IjEwMjQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNjA4NjI3MywwLDAsMC4wNjA1NDkwMiwwLjc4MzE2OCwwLjkxODY2OTUpIj4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzExMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI0NDAzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjM2IzYjNiIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjQ0MDUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYyIKICAgICAgIHgxPSI1MjAiCiAgICAgICB4Mj0iNTIwIgogICAgICAgeTE9IjQiCiAgICAgICB5Mj0iMTAyNCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNjk0NTI0NCwwLDAsMC4wNjk0NTI0NCwtMy41MjYyMDYzLC0zLjU5NTY2NSkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHhsaW5rOmhyZWY9IiNhIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYiIKICAgICAgIHgxPSI3NjAiCiAgICAgICB4Mj0iNzYwIgogICAgICAgeTE9IjQiCiAgICAgICB5Mj0iMTAyNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeGxpbms6aHJlZj0iI2EiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDYyNzQ1LDAsMCwwLjA2Mjc0NSwtMC4xMjU0OSwtMC4xMjU0OSkiIC8+CiAgICA8ZmlsdGVyCiAgICAgICBpZD0iZSIKICAgICAgIHg9Ii0uMDM2IgogICAgICAgeT0iLS4wMzYiCiAgICAgICB3aWR0aD0iMS4wNzIiCiAgICAgICBoZWlnaHQ9IjEuMDcyIgogICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5IgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIyNDQxMCIgLz4KICAgIDwvZmlsdGVyPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYy0xIgogICAgICAgeDE9Ii0yNi4yMDEiCiAgICAgICB4Mj0iLTI2LjIwMSIKICAgICAgIHkxPSIxMDcwLjIiCiAgICAgICB5Mj0iMTA4Mi42IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjNzhjM2ZkIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNTQzOSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzdiYzZmZiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDU0NDEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYi04IgogICAgICAgeDE9Ii05LjkxMTk5OTciCiAgICAgICB4Mj0iLTkuOTExOTk5NyIKICAgICAgIHkxPSIxMDgxLjQiCiAgICAgICB5Mj0iMTEzOS44IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjMzVhNWZjIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNTQ0NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzQ1YzBmZiIKICAgICAgICAgb2Zmc2V0PSIuNSIKICAgICAgICAgaWQ9InN0b3A1NDQ2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjNGRhY2Y2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNTQ0OCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJhLTciCiAgICAgICB4MT0iLTkuNjE2OTk5NiIKICAgICAgIHgyPSItOS42MTY5OTk2IgogICAgICAgeTE9IjExMzguNCIKICAgICAgIHkyPSIxMTQwLjIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3Atb3BhY2l0eT0iLjA0Njc4NCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDU0NTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A1NDUzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImQtOSIKICAgICAgIHgxPSI4IgogICAgICAgeDI9IjgiCiAgICAgICB5MT0iMiIKICAgICAgIHkyPSIxNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzAzYjZlYyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI2OTI1IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjMTNjMGY3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjY5MjciIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iZC0zIgogICAgICAgeDE9IjEwMS4xOCIKICAgICAgIHgyPSIxMDEuMTgiCiAgICAgICB5MT0iOTIxLjQ4OTk5IgogICAgICAgeTI9IjEwMDAuMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4yMjMxNjc5NiwwLDAsMC4yMTcyMDYyNCw4LjMwMjQzMTEsLTE3NC4xMTE0NCkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiMwM2I2ZWMiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyOTMwMiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzEzYzBmNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI5MzA0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPGNpcmNsZQogICAgIGlkPSJjaXJjbGUyNDQxNSIKICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O3N0cm9rZS13aWR0aDoxNS45Mzc5OTk3MztwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsO2ZpbHRlcjp1cmwoI2UpIgogICAgIHI9IjQ3OC4xMiIKICAgICBjeT0iNTEyIgogICAgIGN4PSI1MTIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNjI3NDUsMCwwLDAuMDYyNzQ1LC0wLjEyNTQ5LC0wLjEyNTQ5KSIgLz4KICA8ZwogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MTUuOTM3OTk5NzMiCiAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjA2MjQ5OTY3KSIKICAgICBpZD0ic2hhZG93IiAvPgogIDxjaXJjbGUKICAgICBjeD0iMzEuOTk5OTUiCiAgICAgY3k9IjMxLjk5OTk1IgogICAgIHI9IjI5Ljk5OTY0IgogICAgIHN0eWxlPSJmaWxsOnVybCgjYyk7c3Ryb2tlLXdpZHRoOjEuMDAwMDI5ODtwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIgogICAgIGlkPSJjaXJjbGUyNDQxOCIgLz4KICA8ZWxsaXBzZQogICAgIGN4PSIzMS45MTQ0NTUiCiAgICAgY3k9IjMxLjk1MDA0MyIKICAgICBzdHlsZT0iZmlsbDp1cmwoI2QpO3N0cm9rZS13aWR0aDowLjk2NzUyNzAzO3BhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiCiAgICAgaWQ9ImNpcmNsZTI0NDIwIgogICAgIHJ4PSIyNi4yODg0NDEiCiAgICAgcnk9IjI2LjE1MjkzOSIgLz4KICA8ZwogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMTg0NDA1MjUsMCwwLDAuMTg0NDE0MTgsMTMuNDQ3NDEzLDEzLjA3MzQ3NSkiCiAgICAgaWQ9Imc1NDY2Ij4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2MtMSkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4yMTM5LDAsMCwyLjIxMzksMTA5LjUsLTIzNDQuOSkiCiAgICAgICBkPSJtIC00NC43NjIsMTA3MC4yIGggMjIuMTMxIGMgMy4yODcsMCA0LjY1Miw3LjA3MSA3LjcyOCw3LjA3MSBoIDUxLjUyMiBhIDMuMjc2LDMuMjc2IDAgMCAxIDMuMjgzLDMuMjgzIHYgNTAuNTA4IGMgMCwxLjgxOSAtMS40NjQsLTIuMDIgLTMuMjgzLC0yLjAyIGggLTgxLjM4IGEgMy4yNzYsMy4yNzYgMCAwIDEgLTMuMjgzLC0zLjI4MyB2IC01Mi4yNzUgYSAzLjI3NiwzLjI3NiAwIDAgMSAzLjI4MywtMy4yODMgeiIKICAgICAgIGlkPSJwYXRoNTQ1OCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2ItOCkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4yMTM5LDAsMCwyLjIxMzksMTA5LjUsLTIzNDQuOSkiCiAgICAgICBkPSJtIC00NC43NjIsMTA4MS4zIGggODEuMzggYSAzLjI3NiwzLjI3NiAwIDAgMSAzLjI4MywzLjI4MyB2IDUyLjI3NSBhIDMuMjc2LDMuMjc2IDAgMCAxIC0zLjI4MywzLjI4MyBoIC04MS4zOCBhIDMuMjc2LDMuMjc2IDAgMCAxIC0zLjI4MywtMy4yODMgdiAtNTIuMjc1IGEgMy4yNzYsMy4yNzYgMCAwIDEgMy4yODMsLTMuMjgzIHoiCiAgICAgICBpZD0icGF0aDU0NjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gMy4xNiwxNjUuODQgdiAyLjIxNCBIIDE5Ny44NCBWIDE2NS44NCBIIDMuMTUgWiBtIDAsNC44NyB2IDEuMTc2IGMgMCwwLjM1OSAwLjAxOSwwLjY5NCAwLjA2OCwxLjAzOCBoIDE5NC41NSBjIDAuMDUsLTAuMzQ0IDAuMDY5LC0wLjY3OSAwLjA2OSwtMS4wMzggViAxNzAuNzEgSCAzLjE1NyBaIgogICAgICAgc3R5bGU9InRleHQtaW5kZW50OjA7dGV4dC10cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjAuMDc5OTk5OTgiCiAgICAgICBpZD0icGF0aDU0NjIiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjEzOSwwLDAsMi4yMTM5LDEwOS41LC0yMzQ0LjkpIgogICAgICAgZD0ibSAtNDcuNzUsMTEzOC4yIGEgMy4yOCwzLjI4IDAgMCAwIDMsMS45MzggaCA4MS4zNzUgYyAxLjM0LDAgMi40ODgsLTAuNzkzIDMsLTEuOTM4IHoiCiAgICAgICBzdHlsZT0idGV4dC1pbmRlbnQ6MDt0ZXh0LXRyYW5zZm9ybTpub25lO29wYWNpdHk6MC4yNTtmaWxsOnVybCgjYS03KSIKICAgICAgIGlkPSJwYXRoNTQ2NCIgLz4KICA8L2c+CiAgPHBhdGgKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgIGQ9Im0gMjUuNjQ1NjcsMjYuMDI1NzM2IGEgMC42MDI0NTU0OCwwLjU4NjM1NzU4IDAgMCAwIC0wLjYwMjM4OCwwLjU4NjI5MSB2IDE1LjkwMzMzOSBhIDAuNjAyNDU1NDgsMC41ODYzNTc1OCAwIDAgMCAwLjYwMjM4OCwwLjU4NjI2OSBoIDEyLjEyMzI5NyBhIDAuNjAyNDU1NDgsMC41ODYzNTc1OCAwIDAgMCAwLjYwMjM4OCwtMC41ODYyNjkgViAzMi4yNDYxNTIgbCAtNi4zOTA5MTYsLTYuMjIwMTA1IHogbSAwLjYwMjM4OCwxLjE3MjYwNCBoIDQuMzg4NTI3IGMgMC42ODkzNTQsMC4wNTc5OCAxLjE0NTk1MiwwLjM0NjYwMiAxLjE0NTk1MiwxLjgxMzg2NSB2IDIuODU4MjM1IGggMy4wMzA3MDkgYyAwLjczNzcxLDAgMi4wNjk4ODMsLTAuMDI2NjQgMi4zNTMxNzUsMC43Njk0OTYgdiA5LjI4OTA5NSBIIDI2LjI0Nzk4NiBaIgogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO3RleHQtaW5kZW50OjA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7dGV4dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWw7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2QtMyk7c3Ryb2tlLXdpZHRoOjIuMjU3NDA1MDQ7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG8iCiAgICAgaWQ9InBhdGgyOTMxOSIgLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"nautilus,file,manager,nautilus\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Nautilus.desktop\"\nLABEL oc.launch=\"org.gnome.Nautilus.Org.gnome.Nautilus\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"nautilus\"\nLABEL oc.displayname=\"FileManager\"\nLABEL oc.path=\"/usr/bin/nautilus\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"nautilus\"\nENV APPBIN \"/usr/bin/nautilus\"\nENV APP \"/usr/bin/nautilus\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/nautilus/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/nautilus/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/nautilus/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/nautilus/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/notepad-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"notepad.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjU2IgogICBoZWlnaHQ9IjI1NiIKICAgaWQ9InN2ZzQ3NDIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40NyByMjI1ODMiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im5vdGVwYWQuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDc0NCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQ3NTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQ4MjAiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTM1MiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1Mzc0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTUzOTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTQzMCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NDUyIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjIiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTU2Mi0zIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjItOCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTYyLTM4IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjItNSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTYyLTAiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxwYXR0ZXJuCiAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgd2lkdGg9IjExNC44OTQ2OCIKICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgcGF0dGVyblRyYW5zZm9ybT0idHJhbnNsYXRlKDI4LjAzMzg4Niw5MTQuMzUzODYpIgogICAgICAgaWQ9InBhdHRlcm41NjgwIj4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NjQ3IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjguMDMzODg2LC05MTQuMzUzODYpIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDEyNy4xNDI4NiwxMjMuODU3MTQgYyA4LjI1MDc4LDAuMDIzNiAxMy42NDMwNCwzLjQ0MTc0IDE0LjI4NTcxLDEyLjUgbCAtMC4zNTcxNCw4MS43ODU3MiBjIC0wLjY2MzI4LDEyLjA5OCAtNy4xNzQ4OSwxMS45Njc2NSAtMTIuODU3MTQsMTMuNTcxNDMgbCAtNTEuOTY0Mjg5LDAuMTc4NTcgQyA2Ni40MDYyMTYsMjMwLjg1NzI1IDYxLjUwMTAyOCwyMjcuMDA5NjkgNTkuODIxNDI4LDIxNy4yNSBsIDAuODkyODU4LC03OS44MjE0MyBjIDAuNDAwODQxLC01Ljk4MTU2IDIuMjQyOTA2LC0xMC43ODM5NCA3Ljg1NzE0MywtMTIuNSBsIDU4LjU3MTQzMSwtMS4wNzE0MyB6IgogICAgICAgICAgIGlkPSJwYXRoNDgyNiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiCiAgICAgICAgICAgaWQ9InBhdGg0ODMwIgogICAgICAgICAgIGQ9Im0gMTI5LjkyMDc4LDEyNC4xMDk2OCAtMTcuMzg2MTYsODAuMTQzNTggYyAtMi45MzYxMiwxMS41OTI5MyAtOS40NDc3MywxMC40NTI0MiAtMTUuNjM1MDU5LDExLjA0NjA1IGwgLTM3LjAyOTk0MSwtMC4yMDc1NCAwLjg0NDY2NiwtNzcuNjYzMiBjIDAuNDAwODQxLC01Ljk4MTU2IDIuMjQyOTA2LC0xMC43ODM5NCA3Ljg1NzE0MywtMTIuNSBsIDYxLjM0OTM1MSwtMC44MTg4OSB6IgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjYxODAyNTg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjkuNzAwNTI2LDEwMTUuOTk2NyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjkuMzIxNzE5LDEwMDYuMDIxNCA2MC4zNTY2MTEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDItMiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTYiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Ik0gNjkuMTMyMzE2LDk4NS44ODE1IDEyOS40ODg5Myw5ODUuNjI5IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTEiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDItMCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2Ny45NjQzMjYsOTY1LjM5NDMzIDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTYiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTYtMSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2Ny43NzQ5MjMsOTQ1LjI1NDQxIDYwLjM1NjYxNywtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTEtNSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzVmZDVkNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMzcuMTQyODU4LDk5MC41NzY0NyBjIC0xMC44NDI4MTUsLTIuOTU5MzUgLTcuNjkxMTg2LC04Ljg5NzQxIC01LjA2MTI3NiwtMTQuOTgyMDYgTCA1Ni42MTI0LDkyNy45NTM5MiBjIDEuNTM1NTgyLC00LjI0MzI3IDcuNDI3MjYyLC03LjI0OTE1IDExLjI0NDc0MywtNi42NjMxNiBsIDYwLjM1NzE0NywtMC4zNTcxNSBjIDMuNzA5MjcsMC44NjA0OSA4Ljc4Nzc2LDAuODA4MTYgNC4yODU3MSw3LjE0Mjg2IGwgLTI3LjQ1NjY3LDUzLjY5Mzk4IGMgLTEuMDI0MjMsNS44MDg2OSAtNy42NDMyNjMsOC43NjE1MSAtMTEuNDk3MjgyLDguOTEwNjIgbCAtNTYuNDAzMTksLTAuMTA0NiB6IgogICAgICAgICAgIGlkPSJwYXRoNDgyOCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY1LjUzNTk3OSw5MzcuODQ1NTcgNDUuNzEzNzYxLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTktNCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Imc1NTUwIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1NDY4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1NDY2IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMC40Njg5MDEsMC40NjMxNjA3NSkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNjI3MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2Ni05IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMS4yMDQ4NTEsMC40NTk0NDM3NCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTkiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNjI3MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2Ni04IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMi4xMTAzOTksMC43MTE5ODE4OCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMDkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjYtNiIKICAgICAgICAgICAgIGQ9Im0gMTIyLjMyMTQzLDEyOC41ODkyOSBjIC03LjAzNjgsLTcuMzIxNDggMy4yNjY3NywtMTMuNzQ3MzQgNC4yODU3MSwtNi4yNSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM4MzgzODI7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDIuNjgwNDY4LDAuOTIxMTkxMzMpIgogICAgICAgICAgIGlkPSJnNTU1MC01NiI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4wNDUxMTI4LDAsMCwxLjQ3MzY4NDIsLTEyNy4zMTgxNSw3MzUuNDIyNCkiCiAgICAgICAgICAgICBkPSJtIDEyMi45ODYwNywxMjguNzgzOTIgYyAwLDAuNjYyNSAtMC4zOTU3MywxLjE5OTU2IC0wLjg4Mzg4LDEuMTk5NTYgLTAuNDg4MTYsMCAtMC44ODM4OSwtMC41MzcwNiAtMC44ODM4OSwtMS4xOTk1NiAwLC0wLjY2MjUgMC4zOTU3MywtMS4xOTk1NiAwLjg4Mzg5LC0xLjE5OTU2IDAuNDg4MTUsMCAwLjg4Mzg4LDAuNTM3MDYgMC44ODM4OCwxLjE5OTU2IHoiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeT0iMS4xOTk1NTYxIgogICAgICAgICAgICAgc29kaXBvZGk6cng9IjAuODgzODgzNDgiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeT0iMTI4Ljc4MzkyIgogICAgICAgICAgICAgc29kaXBvZGk6Y3g9IjEyMi4xMDIxOSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2OC0xIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1NDY2LTEiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTk4Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1NDY4LTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjYtODEiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L3BhdHRlcm4+CiAgICA8cGF0dGVybgogICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHdpZHRoPSIxMjQuMjQ4NzYiCiAgICAgICBoZWlnaHQ9IjEyNC4yNDg3NiIKICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InRyYW5zbGF0ZSgyMi4yMjMzNTYsOTA5LjkzMDY2KSIKICAgICAgIGlkPSJwYXR0ZXJuNTg0NCI+CiAgICAgIDxyZWN0CiAgICAgICAgIHk9IjEuMTM2ODY4NGUtMTMiCiAgICAgICAgIHg9IjAiCiAgICAgICAgIGhlaWdodD0iMTI0LjI0ODc2IgogICAgICAgICB3aWR0aD0iMTI0LjI0ODc2IgogICAgICAgICBpZD0icmVjdDU4NDIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0NTcxNCIKICAgICAgICAgeT0iNC40MjMyMTc4IgogICAgICAgICB4PSI1LjgxMDUyOTciCiAgICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgICB3aWR0aD0iMTE0Ljg5NDY4IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpub25lIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzU3NzgiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4yMjMzNTYsLTkwOS45MzA2NikiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMTI3LjE0Mjg2LDEyMy44NTcxNCBjIDguMjUwNzgsMC4wMjM2IDEzLjY0MzA0LDMuNDQxNzQgMTQuMjg1NzEsMTIuNSBsIC0wLjM1NzE0LDgxLjc4NTcyIGMgLTAuNjYzMjgsMTIuMDk4IC03LjE3NDg5LDExLjk2NzY1IC0xMi44NTcxNCwxMy41NzE0MyBsIC01MS45NjQyODksMC4xNzg1NyBDIDY2LjQwNjIxNiwyMzAuODU3MjUgNjEuNTAxMDI4LDIyNy4wMDk2OSA1OS44MjE0MjgsMjE3LjI1IGwgMC44OTI4NTgsLTc5LjgyMTQzIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNTguNTcxNDMxLC0xLjA3MTQzIHoiCiAgICAgICAgICAgaWQ9InBhdGg1NzgwIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIKICAgICAgICAgICBpZD0icGF0aDU3ODIiCiAgICAgICAgICAgZD0ibSAxMjkuOTIwNzgsMTI0LjEwOTY4IC0xNy4zODYxNiw4MC4xNDM1OCBjIC0yLjkzNjEyLDExLjU5MjkzIC05LjQ0NzczLDEwLjQ1MjQyIC0xNS42MzUwNTksMTEuMDQ2MDUgbCAtMzcuMDI5OTQxLC0wLjIwNzU0IDAuODQ0NjY2LC03Ny42NjMyIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNjEuMzQ5MzUxLC0wLjgxODg5IHoiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNjE4MDI1ODtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS43MDA1MjYsMTAxNS45OTY3IDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTc4NCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS4zMjE3MTksMTAwNi4wMjE0IDYwLjM1NjYxMSwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTc4NiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzg4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJNIDY5LjEzMjMxNiw5ODUuODgxNSAxMjkuNDg4OTMsOTg1LjYyOSIKICAgICAgICAgICBpZD0icGF0aDU3OTAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU3OTIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjcuOTY0MzI2LDk2NS4zOTQzMyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU3OTQiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzk2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY3Ljc3NDkyMyw5NDUuMjU0NDEgNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzk4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojNWZkNWQ0O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSAzNy4xNDI4NTgsOTkwLjU3NjQ3IGMgLTEwLjg0MjgxNSwtMi45NTkzNSAtNy42OTExODYsLTguODk3NDEgLTUuMDYxMjc2LC0xNC45ODIwNiBMIDU2LjYxMjQsOTI3Ljk1MzkyIGMgMS41MzU1ODIsLTQuMjQzMjcgNy40MjcyNjIsLTcuMjQ5MTUgMTEuMjQ0NzQzLC02LjY2MzE2IGwgNjAuMzU3MTQ3LC0wLjM1NzE1IGMgMy43MDkyNywwLjg2MDQ5IDguNzg3NzYsMC44MDgxNiA0LjI4NTcxLDcuMTQyODYgbCAtMjcuNDU2NjcsNTMuNjkzOTggYyAtMS4wMjQyMyw1LjgwODY5IC03LjY0MzI2Myw4Ljc2MTUxIC0xMS40OTcyODIsOC45MTA2MiBsIC01Ni40MDMxOSwtMC4xMDQ2IHoiCiAgICAgICAgICAgaWQ9InBhdGg1ODAwIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzE3MTcxODtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjUuNTM1OTc5LDkzNy44NDU1NyA0NS43MTM3NjEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU4MDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1ODA0IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzU4MDYiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MDgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTAiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwLjQ2ODkwMSwwLjQ2MzE2MDc1KSIKICAgICAgICAgICBpZD0iZzU4MTIiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTYiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIxLjIwNDg1MSwwLjQ1OTQ0Mzc0KSIKICAgICAgICAgICBpZD0iZzU4MTgiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjIiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyLjExMDM5OSwwLjcxMTk4MTg4KSIKICAgICAgICAgICBpZD0iZzU4MjQiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjgiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjY4MDQ2OCwwLjkyMTE5MTMzKSIKICAgICAgICAgICBpZD0iZzU4MzAiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MzIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MzQiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1ODM2Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1ODM4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1ODQwIgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9wYXR0ZXJuPgogICAgPHBhdHRlcm4KICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB3aWR0aD0iMTI0LjI0ODc2IgogICAgICAgaGVpZ2h0PSIxMjQuMjQ4NzYiCiAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMi4xMDU2OTEyLDAsMCwyLjEwNTY5MTIsLTkuMDkxMzcyOSw3OTMuNzYzMTEpIgogICAgICAgaWQ9InBhdHRlcm41OTUwIj4KICAgICAgPHJlY3QKICAgICAgICAgaWQ9InJlY3Q1ODgwIgogICAgICAgICB5PSIxLjEzNjg2ODRlLTEzIgogICAgICAgICB4PSIwIgogICAgICAgICBoZWlnaHQ9IjEyNC4yNDg3NiIKICAgICAgICAgd2lkdGg9IjEyNC4yNDg3NiIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6bm9uZSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgeT0iMS4xMzY4Njg0ZS0xMyIKICAgICAgICAgeD0iMCIKICAgICAgICAgaGVpZ2h0PSIxMjQuMjQ4NzYiCiAgICAgICAgIHdpZHRoPSIxMjQuMjQ4NzYiCiAgICAgICAgIGlkPSJyZWN0NTg4MiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0NTg4NCIKICAgICAgICAgeT0iNC40MjMyMTc4IgogICAgICAgICB4PSI1LjgxMDUyOTciCiAgICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgICB3aWR0aD0iMTE0Ljg5NDY4IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpub25lIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzU4ODYiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4yMjMzNTYsLTkwOS45MzA2NikiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMTI3LjE0Mjg2LDEyMy44NTcxNCBjIDguMjUwNzgsMC4wMjM2IDEzLjY0MzA0LDMuNDQxNzQgMTQuMjg1NzEsMTIuNSBsIC0wLjM1NzE0LDgxLjc4NTcyIGMgLTAuNjYzMjgsMTIuMDk4IC03LjE3NDg5LDExLjk2NzY1IC0xMi44NTcxNCwxMy41NzE0MyBsIC01MS45NjQyODksMC4xNzg1NyBDIDY2LjQwNjIxNiwyMzAuODU3MjUgNjEuNTAxMDI4LDIyNy4wMDk2OSA1OS44MjE0MjgsMjE3LjI1IGwgMC44OTI4NTgsLTc5LjgyMTQzIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNTguNTcxNDMxLC0xLjA3MTQzIHoiCiAgICAgICAgICAgaWQ9InBhdGg1ODg4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIKICAgICAgICAgICBpZD0icGF0aDU4OTAiCiAgICAgICAgICAgZD0ibSAxMjkuOTIwNzgsMTI0LjEwOTY4IC0xNy4zODYxNiw4MC4xNDM1OCBjIC0yLjkzNjEyLDExLjU5MjkzIC05LjQ0NzczLDEwLjQ1MjQyIC0xNS42MzUwNTksMTEuMDQ2MDUgbCAtMzcuMDI5OTQxLC0wLjIwNzU0IDAuODQ0NjY2LC03Ny42NjMyIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNjEuMzQ5MzUxLC0wLjgxODg5IHoiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNjE4MDI1ODtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS43MDA1MjYsMTAxNS45OTY3IDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTg5MiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS4zMjE3MTksMTAwNi4wMjE0IDYwLjM1NjYxMSwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTg5NCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1ODk2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJNIDY5LjEzMjMxNiw5ODUuODgxNSAxMjkuNDg4OTMsOTg1LjYyOSIKICAgICAgICAgICBpZD0icGF0aDU4OTgiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MDAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjcuOTY0MzI2LDk2NS4zOTQzMyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTA0IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY3Ljc3NDkyMyw5NDUuMjU0NDEgNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTA2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojNWZkNWQ0O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSAzNy4xNDI4NTgsOTkwLjU3NjQ3IGMgLTEwLjg0MjgxNSwtMi45NTkzNSAtNy42OTExODYsLTguODk3NDEgLTUuMDYxMjc2LC0xNC45ODIwNiBMIDU2LjYxMjQsOTI3Ljk1MzkyIGMgMS41MzU1ODIsLTQuMjQzMjcgNy40MjcyNjIsLTcuMjQ5MTUgMTEuMjQ0NzQzLC02LjY2MzE2IGwgNjAuMzU3MTQ3LC0wLjM1NzE1IGMgMy43MDkyNywwLjg2MDQ5IDguNzg3NzYsMC44MDgxNiA0LjI4NTcxLDcuMTQyODYgbCAtMjcuNDU2NjcsNTMuNjkzOTggYyAtMS4wMjQyMyw1LjgwODY5IC03LjY0MzI2Myw4Ljc2MTUxIC0xMS40OTcyODIsOC45MTA2MiBsIC01Ni40MDMxOSwtMC4xMDQ2IHoiCiAgICAgICAgICAgaWQ9InBhdGg1OTA4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzE3MTcxODtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjUuNTM1OTc5LDkzNy44NDU1NyA0NS43MTM3NjEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MTAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTEyIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzU5MTQiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MTgiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwLjQ2ODkwMSwwLjQ2MzE2MDc1KSIKICAgICAgICAgICBpZD0iZzU5MjAiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjQiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIxLjIwNDg1MSwwLjQ1OTQ0Mzc0KSIKICAgICAgICAgICBpZD0iZzU5MjYiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzAiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyLjExMDM5OSwwLjcxMTk4MTg4KSIKICAgICAgICAgICBpZD0iZzU5MzIiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzYiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjY4MDQ2OCwwLjkyMTE5MTMzKSIKICAgICAgICAgICBpZD0iZzU5MzgiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5NDAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5NDIiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1OTQ0Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1OTQ2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1OTQ4IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9wYXR0ZXJuPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC45ODk5NDk0OSIKICAgICBpbmtzY2FwZTpjeD0iMTA0Ljk4MzQ4IgogICAgIGlua3NjYXBlOmN5PSIxMjkuNDQ4MzgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI4NTEiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjU3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIzMTIiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NzQ3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC03OTYuMzYyMTgpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3BhdHRlcm41OTUwKTtzdHJva2U6bm9uZSIKICAgICAgIHdpZHRoPSIyNjEuNjI5NTIiCiAgICAgICBoZWlnaHQ9IjI2MS42Mjk1MiIKICAgICAgIHg9Ii05LjA5MTM3MjUiCiAgICAgICB5PSI3OTMuNzYzMTIiCiAgICAgICBpZD0icmVjdDU5ODciIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"notepad-wine,wine,notepad,text\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"notepad.exe.notepad.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"notepad-wine\"\nLABEL oc.displayname=\"Notepad Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/notepad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/text;\"\nLABEL oc.fileextensions=\"txt;log;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"notepad-wine\"\nENV APPBIN \"/usr/bin/notepad\"\nENV APP \"/usr/bin/notepad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/notepad-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/notepad-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/notepad-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/notepad-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends notepadqq && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"notepadqq.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzIiCiAgIHZpZXdCb3g9IjAgMCAxOTIgMTkxLjk5OTk5IgogICBoZWlnaHQ9IjE5MiIKICAgd2lkdGg9IjE5MiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0Mjk2Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0Mjk4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2NDY0NjQ7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNDMwMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjQ2NDY0O3N0b3Atb3BhY2l0eTowIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9Ik9tYnJhXzEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDI4NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDQyODYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00LjAwMDAwNTYsLTIuOTY4NzUpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTAzNi41NzkzIgogICAgICAgeDI9Ijk4LjM2MzQ4IgogICAgICAgeTE9Ijk5OS4zMjk0MSIKICAgICAgIHgxPSI1OS4xMjUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MjgwIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDI5NiIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDcuNjIyMTgyNmUtOCwxLjMzODA2MzQsLTEuNzExOTA1NCw5Ljc1MTc0NjhlLTgsLTI1Ny4xMjQxNSw4MjkuMjczNDQpIgogICAgICAgcj0iNjUuMDAwMDA4IgogICAgICAgZnk9Ii0xNjYuMTk2MTciCiAgICAgICBmeD0iMjguNzI2MDEzIgogICAgICAgY3k9Ii0xNjYuMTk2MTciCiAgICAgICBjeD0iMjguNzI2MDEzIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDE5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNPbWJyYV8xIiAvPgogICAgPGZpbHRlcgogICAgICAgeD0iLTAuMDUwMDAwMDAwMDAwMDAwMDAzIgogICAgICAgd2lkdGg9IjEuMTAwMDAwMDAwMDAwMDAwMSIKICAgICAgIHk9Ii0wLjAyOTk5OTk5OTk5OTk5OTk5OSIKICAgICAgIGhlaWdodD0iMS4wNjAwMDAwMDAwMDAwMDAxIgogICAgICAgaWQ9ImZpbHRlcjQ2NTMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0I7Ij4KICAgICAgPGZlRmxvb2QKICAgICAgICAgaWQ9ImZlRmxvb2Q0NjU1IgogICAgICAgICByZXN1bHQ9ImZsb29kIgogICAgICAgICBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIKICAgICAgICAgZmxvb2Qtb3BhY2l0eT0iMC40NTAwMDAwMDAwMDAwMDAwMSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGlkPSJmZUNvbXBvc2l0ZTQ2NTciCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBpbjI9IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluPSJmbG9vZCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGR5PSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NjU5IgogICAgICAgICByZXN1bHQ9ImJsdXIiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMSAxLjUiCiAgICAgICAgIGluPSJjb21wb3NpdGUxIiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgaWQ9ImZlT2Zmc2V0NDY2MSIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiCiAgICAgICAgIGR5PSIzIgogICAgICAgICBkeD0iMCIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGlkPSJmZUNvbXBvc2l0ZTQ2NjMiCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMiIKICAgICAgICAgb3BlcmF0b3I9Im92ZXIiCiAgICAgICAgIGluMj0ib2Zmc2V0IgogICAgICAgICBpbj0iU291cmNlR3JhcGhpYyIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC04NjAuMzYyMikiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtNC00IgogICAgICAgZD0ibSAxMzYsODY3LjM2MDIzIHYgMC4wMDQgaCAtNjQuNjU4MTgxIC0zMy4zMTA1NSAtNS4zNzEwOSBjIC0yLjU3MjcsMCAtNC42NDQ1NCwyLjA2NjE5IC00LjY0NDU0LDQuNjMyODIgdiAzNi41OTc2NSBjIDAsMC4wMzI3IDAuMDA1OCwwLjA2NDIgMC4wMDk4LDAuMDk1NyBsIC0wLjAwMiwxNC42NzE4NyBoIC0wLjAyMzQ0IHYgOSAxIDEwIDM1IDEgMSA2Ljg1OTM4IDEuMTQwNjIgMSBoIDAuMDA5OCB2IDAuMDAyIGwgLTAuMDAzOSwxOS43NDYwMyBoIC0wLjAwNTkgdiAwIDMxLjY4NzUgYyAwLDIuNTI4OSAyLjA0OTAxLDQuNTY0NCA0LjU5Mzc1LDQuNTY0NCBoIDUuNDUzMTMgMzMuMzMyMDMgNzIuNTY2MzgxIGMgMS4zODgwOSwwIDIuNzQzNTMsLTAuMTQ3NCA0LjA1MDc4LC0wLjQyNTcgMC4zMjY5NiwtMC4wNyAwLjY1MTc5LC0wLjE0NjUgMC45NzI2NiwtMC4yMzI1IDAuNjQxMTMsLTAuMTcxNyAxLjI3MDQzLC0wLjM3NjkgMS44ODQ3NywtMC42MTEzIDAuMzA3NDQsLTAuMTE3MyAwLjYxMTk5LC0wLjI0MjYgMC45MTIxLC0wLjM3NSA0LjIwMTUxLC0xLjg1MyA3LjY2NDI1LC01LjE1NzggOS44MjAzMiwtOS4zMjAzIDAuNjE2MDIsLTEuMTg5MyAxLjEyNjE1LC0yLjQ0ODIgMS41MTU2MiwtMy43NjM3IDAuNTg0MjEsLTEuOTczMiAwLjg5ODQ0LC02LjI1MTkgMC44OTg0NCwtNi4yNTE5IHYgLTEuMTQ2NSAtMTQuMTI3IC0yMC43NDc5OCAtOCAtMSAtNDYgLTEgLTcuODYxMzMgLTEuMTM4NjcgLTMzLjg3MzA1IGMgMCwtMC4yMjQzNyAtMC4wMDksLTAuNDQ3MjcgLTAuMDE1NiwtMC42Njk5MiB2IC0wLjAwMiAtMC4zOTI1OCBjIDAsLTIuMTg3NiAtMC4zMTQyMywtNC4yOTY1NiAtMC44OTg0NCwtNi4yNzczNCAtMC4zODk0NywtMS4zMjA1MiAtMC44OTk2MSwtMi41ODM1MSAtMS41MTU2MywtMy43NzczNSAtMi4zMTAzNiwtNC40Nzc0NCAtNi4xMjAwNCwtNy45NjU5OCAtMTAuNzMyNDIsLTkuNzMyNDIgLTAuMzA3NDUsLTAuMTE3NzggLTAuNjE3MjgsLTAuMjI3ODIgLTAuOTMxNjQsLTAuMzMwMDggLTAuNjI5MzIsLTAuMjA0NyAtMS4yNzEyMiwtMC4zNzc2OSAtMS45MjU3OCwtMC41MTc1OCAtMC4zMjY5NiwtMC4wNjk5IC0wLjY1NTY0LC0wLjEzMjQ2IC0wLjk4ODI4LC0wLjE4NTU0IC0wLjk3NTMxLC0wLjE1NTY0IC0xLjk3NTA2LC0wLjIzNDYzIC0yLjk5MjE5LC0wLjIzODI4IHYgLTAuMDA2IGggLTggeiIKICAgICAgIHN0eWxlPSJmaWxsOiM2NDY0NjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDY1MykiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtNCIKICAgICAgIGQ9Im0gMjguMDAwMDI0LDEwMDkuMTExNiB2IDMxLjY4ODEgYyAwLDIuNTI4OSAyLjA0ODE1LDQuNTY0NSA0LjU5Mjg5LDQuNTY0NSBoIDUuNDUzNyAzMy4zMzEyMSA3Mi41NjgwOTYgYyAxMS4xMSwwIDIwLjA1NDE0LC0yMC45Nzk5IDIwLjA1NDE0LC0yMC45Nzk5IHYgLTE1LjI3MjcgeiIKICAgICAgIHN0eWxlPSJmaWxsOiM2NDY0NjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtMy0zIgogICAgICAgZD0ibSAzMi42NTkyNTksODY3LjM2NDE4IGMgLTIuNTcyNywwIC00LjY0MzY0LDIuMDY2MDggLTQuNjQzNjQsNC42MzI3MSB2IDM2LjU5ODIxIGMgMCwwLjA1IDAuMDA5LDAuMDk3IDAuMDEzNywwLjE0NiBIIDE2My45ODQwOCB2IC0yMC4zMTY1NSBjIDAsLTExLjY2NzIgLTguOTQ0MTcsLTIxLjA2MDM3IC0yMC4wNTQxOCwtMjEuMDYwMzcgaCAtNzIuNTg5MTcxIC0zMy4zMDk3NCAtNS4zNzE3MiB6IgogICAgICAgc3R5bGU9ImZpbGw6IzkxOTE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icmVjdDQxMzYtNDAiCiAgICAgICBkPSJtIDMyLjY3NDg3NCw4NjguMzY2NzkgYyAtMi41NzI2OSwwIC00LjY0MzY1LDIuMDcyMTMgLTQuNjQzNjUsNC42NDYzIGwgLTAuMDMxMiwxNjYuNzUxODEgYyAwLDIuNTQ2MSAyLjA0ODE2LDQuNTk1NSA0LjU5MjksNC41OTU1IGggNS40NTM3IDMzLjMzMTIxIDcyLjU2ODA4NiBjIDExLjExLDAgMjAuMDU0MTQsLTkuNDIwOCAyMC4wNTQxNCwtMjEuMTIyMyBWIDg4OS40ODkwMSBjIDAsLTExLjcwMTQ2IC04Ljk0NDE0LC0yMS4xMjIyMiAtMjAuMDU0MTQsLTIxLjEyMjIyIGggLTcyLjU4OTU1NiAtMzMuMzA5NzQgLTUuMzcxNzIgeiIKICAgICAgIHN0eWxlPSJmaWxsOiM3NTc1NzU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5MTkuNTAyNTYiCiAgICAgICB4PSIyNy45OTk5OTgiCiAgICAgICBoZWlnaHQ9IjYzLjg1OTYzOCIKICAgICAgIHdpZHRoPSIxMzUuOTk5OTgiCiAgICAgICBpZD0icmVjdDQxNjctMS0zIgogICAgICAgc3R5bGU9ImZpbGw6IzcwYmY3MztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIG1hc2s9Im5vbmUiCiAgICAgICBjbGlwLXBhdGg9Im5vbmUiCiAgICAgICBpZD0icmVjdDQxMzYtNDAtOSIKICAgICAgIGQ9Im0gMjguMDA3NzgzLDk5My4zNjE1NyA1MS41ODc4MTMsNTAuOTk3NTMgaCA2NC4zMzgwNTQgYyA0LjE0ODgyLDAgNy45OTU3MywtMS4zMTQ3IDExLjE4NzUsLTMuNTcwMyBsIDUuNzA3MDMsLTYuMTcxOSBjIDEuOTkxOTksLTMuMjgyNyAzLjE2MDE1LC03LjE3OTggMy4xNjAxNSwtMTEuMzgwOCBsIDhlLTUsLTI5Ljg3NDUzIGggLTAuMDA4IC0xMzUuOTcyODE3IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDI4MCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5NDcuMzYyMTgiCiAgICAgICB4PSIyNy45OTk5OTgiCiAgICAgICBoZWlnaHQ9IjQ2IgogICAgICAgd2lkdGg9IjEzNS45OTk5OCIKICAgICAgIGlkPSJyZWN0NDE2Ny0xLTEiCiAgICAgICBzdHlsZT0iZmlsbDojNDQ5NjRiO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5MjAuMzYyMTgiCiAgICAgICB4PSIyOC4wMDAwMDYiCiAgICAgICBoZWlnaHQ9IjcxLjk5OTk5MiIKICAgICAgIHdpZHRoPSIxMzUuOTk5OTgiCiAgICAgICBpZD0icmVjdDQxNjctMSIKICAgICAgIHN0eWxlPSJmaWxsOiM0Y2FmNTA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxyZWN0CiAgICAgICB5PSI4NjcuMzYxODIiCiAgICAgICB4PSIxMzYiCiAgICAgICBoZWlnaHQ9IjE3OC4wMDA3MyIKICAgICAgIHdpZHRoPSI4IgogICAgICAgaWQ9InJlY3Q0MzA3LTUiCiAgICAgICBzdHlsZT0iZmlsbDojNDI0MjQyO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPC9nPgogIDxnCiAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZSIKICAgICBpZD0ibGF5ZXIyIj4KICAgIDx0ZXh0CiAgICAgICBpZD0idGV4dDQzMDMtMCIKICAgICAgIHk9Ijk2OC40NDgxMiIKICAgICAgIHg9IjQ3LjcyNDYwOSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtODYwLjM2MjIpIj48dHNwYW4KICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjQ1cHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpWZXJkYW5hOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246VmVyZGFuYTtsZXR0ZXItc3BhY2luZzowcHg7ZmlsbDojZTBlMGUwO2ZpbGwtb3BhY2l0eToxIgogICAgICAgICB5PSI5NjguNDQ4MTIiCiAgICAgICAgIHg9IjQ3LjcyNDYwOSIKICAgICAgICAgaWQ9InRzcGFuNDMwNS04Ij5ucXE8L3RzcGFuPjwvdGV4dD4KICA8L2c+CiAgPGcKICAgICBpZD0iZzUzMTYiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0idGV4dDUzMTQiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6NDBweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC04NjAuMzYyMikiCiAgICAgICBhcmlhLWxhYmVsPSJucXEiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDUzMTgiCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0NXB4O2ZvbnQtZmFtaWx5OlZlcmRhbmE7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpWZXJkYW5hO2xldHRlci1zcGFjaW5nOjBweDtmaWxsOiNlMGUwZTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNzIuMzEyMDEyLDk2OC40NDgxMiBoIC00LjEzMDg2IHYgLTEzLjk3NDYxIHEgMCwtMS42OTE4OSAtMC4xOTc3NTQsLTMuMTY0MDYgLTAuMTk3NzUzLC0xLjQ5NDE0IC0wLjcyNTA5NywtMi4zMjkxIC0wLjU0OTMxNywtMC45MjI4NSAtMS41ODIwMzEsLTEuMzYyMzEgLTEuMDMyNzE1LC0wLjQ2MTQyIC0yLjY4MDY2NSwtMC40NjE0MiAtMS42OTE4OTQsMCAtMy41Mzc1OTcsMC44MzQ5NiAtMS44NDU3MDMsMC44MzQ5NiAtMy41Mzc1OTgsMi4xMzEzNCB2IDE4LjMyNTIgaCAtNC4xMzA4NTkgdiAtMjQuNTQzNDYgaCA0LjEzMDg1OSB2IDIuNzI0NjEgcSAxLjkzMzU5NCwtMS42MDQgMy45OTkwMjQsLTIuNTA0ODggMi4wNjU0MjksLTAuOTAwODggNC4yNDA3MjIsLTAuOTAwODggMy45NzcwNTEsMCA2LjA2NDQ1MywyLjM5NTAyIDIuMDg3NDAzLDIuMzk1MDIgMi4wODc0MDMsNi44OTk0MSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDUzMjAiCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0NXB4O2ZvbnQtZmFtaWx5OlZlcmRhbmE7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpWZXJkYW5hO2xldHRlci1zcGFjaW5nOjBweDtmaWxsOiNlMGUwZTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTAwLjE3MzM0LDk3Ny41MDA4NSBoIC00LjEzMDg2IHYgLTExLjgyMTI4IHEgLTEuOTExNjIxLDEuNjQ3OTQgLTMuODAxMjY5LDIuNDYwOTMgLTEuODg5NjQ5LDAuNzkxMDIgLTQuMDg2OTE0LDAuNzkxMDIgLTQuMzcyNTU5LDAgLTYuOTg3MzA1LC0zLjM2MTgyIC0yLjU5Mjc3MywtMy4zODM3OSAtMi41OTI3NzMsLTkuMzE2NCAwLC0zLjE2NDA3IDAuOTAwODc5LC01LjU4MTA2IDAuOTIyODUxLC0yLjQzODk2IDIuNDE2OTkyLC00LjA4NjkxIDEuNDUwMTk1LC0xLjYwNDAxIDMuNDA1NzYyLC0yLjQ4MjkxIDEuOTU1NTY2LC0wLjg3ODkxIDQuMTMwODU5LC0wLjg3ODkxIDEuOTc3NTM5LDAgMy40OTM2NTIsMC40Mzk0NSAxLjUzODA4NiwwLjQzOTQ2IDMuMTIwMTE3LDEuMjk2MzkgbCAwLjI2MzY3MiwtMS4wNTQ2OSBoIDMuODY3MTg4IHogbSAtNC4xMzA4NiwtMTUuMjkyOTYgdiAtMTMuODg2NzIgcSAtMS43MTM4NjcsLTAuNzY5MDUgLTMuMDMyMjI2LC0xLjA3NjY2IC0xLjMxODM1OSwtMC4zMDc2MiAtMi44NTY0NDUsLTAuMzA3NjIgLTMuNTgxNTQzLDAgLTUuNDQ5MjE5LDIuNDM4OTYgLTEuODY3Njc2LDIuNDE3IC0xLjg2NzY3Niw2LjY3OTY5IDAsNC4zMDY2NCAxLjQ5NDE0MSw2LjYzNTc0IDEuNTE2MTEzLDIuMzA3MTMgNC43NDYwOTMsMi4zMDcxMyAxLjgwMTc1OCwwIDMuNjAzNTE2LC0wLjc2OTA0IDEuODAxNzU4LC0wLjc5MTAyIDMuMzYxODE2LC0yLjAyMTQ4IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoNTMyMiIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjQ1cHg7Zm9udC1mYW1pbHk6VmVyZGFuYTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOlZlcmRhbmE7bGV0dGVyLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMjguMjEwNDUsOTc3LjUwMDg1IGggLTQuMTMwODYgdiAtMTEuODIxMjggcSAtMS45MTE2MiwxLjY0Nzk0IC0zLjgwMTI3LDIuNDYwOTMgLTEuODg5NjUsMC43OTEwMiAtNC4wODY5MSwwLjc5MTAyIC00LjM3MjU2LDAgLTYuOTg3MzEsLTMuMzYxODIgLTIuNTkyNzcsLTMuMzgzNzkgLTIuNTkyNzcsLTkuMzE2NCAwLC0zLjE2NDA3IDAuOTAwODgsLTUuNTgxMDYgMC45MjI4NSwtMi40Mzg5NiAyLjQxNjk5LC00LjA4NjkxIDEuNDUwMTksLTEuNjA0MDEgMy40MDU3NiwtMi40ODI5MSAxLjk1NTU3LC0wLjg3ODkxIDQuMTMwODYsLTAuODc4OTEgMS45Nzc1NCwwIDMuNDkzNjUsMC40Mzk0NSAxLjUzODA5LDAuNDM5NDYgMy4xMjAxMiwxLjI5NjM5IGwgMC4yNjM2NywtMS4wNTQ2OSBoIDMuODY3MTkgeiBtIC00LjEzMDg2LC0xNS4yOTI5NiB2IC0xMy44ODY3MiBxIC0xLjcxMzg3LC0wLjc2OTA1IC0zLjAzMjIzLC0xLjA3NjY2IC0xLjMxODM2LC0wLjMwNzYyIC0yLjg1NjQ0LC0wLjMwNzYyIC0zLjU4MTU0LDAgLTUuNDQ5MjIsMi40Mzg5NiAtMS44Njc2OCwyLjQxNyAtMS44Njc2OCw2LjY3OTY5IDAsNC4zMDY2NCAxLjQ5NDE0LDYuNjM1NzQgMS41MTYxMiwyLjMwNzEzIDQuNzQ2MSwyLjMwNzEzIDEuODAxNzYsMCAzLjYwMzUxLC0wLjc2OTA0IDEuODAxNzYsLTAuNzkxMDIgMy4zNjE4MiwtMi4wMjE0OCB6IiAvPgogICAgPC9nPgogIDwvZz4KICA8ZwogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICBpZD0ibGF5ZXIzIj4KICAgIDxwYXRoCiAgICAgICBpZD0icmVjdDQxMzYtNC00LTUiCiAgICAgICBkPSJtIDMyLjY2MDAyNCw4NjcuMzY0MTcgYyAtMi41NzI3LDAgLTQuNjQ0NTMsMi4wNjYxOCAtNC42NDQ1Myw0LjYzMjgxIHYgMzYuNTk3NjYgYyAwLDAuMDMyNyAwLjAwNiwwLjA2NDIgMC4wMSwwLjA5NTcgbCAtMC4wMDQsMjMuNjcxODggaCAtMC4wMjE1IHYgMSA0NSAxIDEgaCAwLjAxMTczIGwgLTAuMDA2LDI4Ljc0OTk4IGggLTAuMDA2IHYgMzEuNjg3NSBjIDAsMi41Mjg5IDIuMDQ5LDQuNTY0NSA0LjU5Mzc0LDQuNTY0NSBoIDUuNDUzMTUgMzMuMzMyMDIgNzIuNTY2Njc2IGMgMTEuMTEsMCAyMC4wNTQ2OCwtMjAuOTgwNSAyMC4wNTQ2OCwtMjAuOTgwNSB2IC0xLjE0NjUgLTQyLjg3NDk4IGggMi44ZS00IHYgLTEgLTQ2IC0xIGggLTIuOGUtNCB2IC00Mi44NzMwNSBjIDAsLTAuMjI0NzcgLTAuMDA5LC0wLjQ0Njg4IC0wLjAxNTYsLTAuNjY5OTIgdiAtMC4zOTQ1MyBjIDAsLTExLjY2NzIgLTguOTQ0NjgsLTIxLjA2MDU1IC0yMC4wNTQ2OSwtMjEuMDYwNTUgaCAtNzIuNTg4MTY2IC0zMy4zMTA1NSAtNS4zNzEwOCB6IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtODYwLjM2MjIpIiAvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"notepadqq,notepad,plus,editor\"\nLABEL oc.cat=\"utilities,development\"\nLABEL oc.desktopfile=\"notepadqq.desktop\"\nLABEL oc.launch=\"notepadqq-bin.Notepadqq\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"notepadqq\"\nLABEL oc.displayname=\"notepadqq\"\nLABEL oc.path=\"/usr/bin/notepadqq\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/plain;text/html;text/x-php;text/x-c;text/x-shellscript;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"notepadqq\"\nENV APPBIN \"/usr/bin/notepadqq\"\nENV APP \"/usr/bin/notepadqq\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/notepadqq/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/notepadqq/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/notepadqq/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/notepadqq/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends octave && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"Gnu-octave-logo.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iMjgzLjI4OTEyIgogICBoZWlnaHQ9IjI4My4yODgzMyIKICAgaWQ9InN2ZzI4NzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDcgcjIyNTgzIgogICBzb2RpcG9kaTpkb2NuYW1lPSJkcmF3aW5nLnN2ZyI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMjk0MiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI2NDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgzIgogICAgIGlkPSJuYW1lZHZpZXcyOTQwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjIyNDI1NzM5IgogICAgIGlua3NjYXBlOmN4PSIxMzguNjkxOCIKICAgICBpbmtzY2FwZTpjeT0iMTQ3LjgyNTI1IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI2NDgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjE0NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzI4NzIiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczI4NzQiPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMTgyLjk4MzciCiAgICAgICBjeT0iMzk1LjA0ODcxIgogICAgICAgcj0iMTQ4Ljk1MzA5IgogICAgICAgZng9IjE4Mi45ODM3IgogICAgICAgZnk9IjM5NS4wNDg3MSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDMwMzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzU1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMjI5MTQzMzQsLTAuMjQ5MDE0NzksMC43NjQzNTcyLDAuODMwNjQyNjgsLTI3Mi44NTMzNywtMTU5LjY5NDgyKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc1NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1NyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwOGNiZTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMzLjM1NTQ0LC0zOTAuNzE4MDIpIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg4LjQ1MTk3MjMsMCwwLDguNDUxOTcyMywtMjc4LjQ1MDEyLC00MDMuODI5NzUpIgogICAgICAgaWQ9ImczMDI1Ij4KICAgICAgPHBhdGgKICAgICAgICAgZD0ibSA2Ni40MzIxMDMsOTcuNDg4Njc5IGMgLTUuMTk1ODQsNS42NDY0MzEgLTMuOTM2NjEsMTYuMTY5MDMxIDIuODExMDcsMjMuNTAxODcxIDYuNzQ3NjgsNy4zMzI4NSAxNi40Mjg5OCw4LjY5OTU1IDIxLjYyNDgzLDMuMDUzMTIgNS4xOTU4NSwtNS42NDY0MyAzLjk0MDIsLTE2LjE2OTQ2IC0yLjgwNzQ5LC0yMy41MDIzIC02Ljc0NzY4LC03LjMzMjg2MSAtMTYuNDMyNTYsLTguNjk5MTMxIC0yMS42Mjg0MSwtMy4wNTI2OTEgeiBtIDQuNzExNDksMi4zNDU1MyBjIDQuMDgyNTYsLTQuNDM2NTkgMTEuNTg5LC0zLjQ3MTUyIDE2Ljc2NzQxLDIuMTU1OTYxIDUuMTc4NDIsNS42Mjc1IDYuMDY2NDcsMTMuNzg0OTEgMS45ODM5MSwxOC4yMjE1IC00LjA4MjU2LDQuNDM2NTggLTExLjU5MDk3LDMuNDczNjkgLTE2Ljc2OTM5LC0yLjE1MzgxIC01LjE3ODQyLC01LjYyNzUgLTYuMDY0NDksLTEzLjc4NzA0IC0xLjk4MTkzLC0xOC4yMjM2NTEgeiIKICAgICAgICAgaWQ9InBhdGg1ODc0IgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzAzMyk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHdpZHRoPSI0LjM0OTg1NCIKICAgICAgICAgaGVpZ2h0PSI0LjM0OTg1NCIKICAgICAgICAgcng9IjAuNzY5NTg5NjYiCiAgICAgICAgIHJ5PSIwLjc2OTU4OTY2IgogICAgICAgICB4PSI4NS4zODE1NjEiCiAgICAgICAgIHk9Ijk5LjQ5Mzg4MSIKICAgICAgICAgaWQ9InJlY3Q1ODc2IgogICAgICAgICBzdHlsZT0iZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICA8cmVjdAogICAgICAgICB3aWR0aD0iMTAuMjQ1NDM2IgogICAgICAgICBoZWlnaHQ9IjEwLjI0NTQzNiIKICAgICAgICAgcng9IjEuODEyNjU0NSIKICAgICAgICAgcnk9IjEuODEyNjU0NSIKICAgICAgICAgeD0iNjAuOTI2NTkiCiAgICAgICAgIHk9IjEwNS4yMjQ1IgogICAgICAgICBpZD0icmVjdDU4NzgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZjdmMmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNkNDU1MDA7c3Ryb2tlLXdpZHRoOjAuNzQ0MDM3OTk7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHdpZHRoPSI2LjE4OTc1MzEiCiAgICAgICAgIGhlaWdodD0iNi4xODk3NTMxIgogICAgICAgICByeD0iMS4wOTUxMTAyIgogICAgICAgICByeT0iMS4wOTUxMTAyIgogICAgICAgICB4PSI4Ny40MDQ3MzkiCiAgICAgICAgIHk9IjExOC42MzcwNSIKICAgICAgICAgaWQ9InJlY3Q1ODgwIgogICAgICAgICBzdHlsZT0iZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"octave,octave\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"www.octave.org-octave.desktop\"\nLABEL oc.launch=\"octave-gui.octave-gui\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"octave\"\nLABEL oc.displayname=\"octave\"\nLABEL oc.path=\"/usr/bin/octave\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"octave\"\nENV APPBIN \"/usr/bin/octave\"\nENV APP \"/usr/bin/octave\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/octave/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/octave/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/octave/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/octave/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5\nRUN echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections\nRUN echo \"deb [arch=$(dpkg --print-architecture)] https://download.onlyoffice.com/repo/debian squeeze main\" > /etc/apt/sources.list.d/onlyoffice.list\nRUN apt-get update && apt-get install --yes libgl1 libnss3 qt5dxcb-plugin && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y onlyoffice-desktopeditors && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"onlyoffice-desktopeditors.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNzIiIGhlaWdodD0iNjciIHZpZXdCb3g9IjAgMCA3MiA2NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMS41MDMzIDY1Ljc3NDJMMS44OTE4NCA1Mi4xODA1Qy0wLjYzMDYxNSA1MC45OTM3IC0wLjYzMDYxNSA0OS4xNTk2IDEuODkxODQgNDguMDgwOEwxMi4yMDEgNDMuMzMzN0wzMS4zOTM2IDUyLjE4MDVDMzMuOTE2MSA1My4zNjcyIDM3Ljk3NCA1My4zNjcyIDQwLjM4NjggNTIuMTgwNUw1OS41Nzk0IDQzLjMzMzdMNjkuODg4NiA0OC4wODA4QzcyLjQxMSA0OS4yNjc1IDcyLjQxMSA1MS4xMDE2IDY5Ljg4ODYgNTIuMTgwNUw0MC4yNzcxIDY1Ljc3NDJDMzcuOTc0IDY2Ljg1MyAzMy45MTYxIDY2Ljg1MyAzMS41MDMzIDY1Ljc3NDJaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXIpIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEuNTAzMyA0OS4wNTE2TDEuODkxODQgMzUuNDU3OEMtMC42MzA2MTUgMzQuMjcxMSAtMC42MzA2MTUgMzIuNDM3IDEuODkxODQgMzEuMzU4MUwxMS45ODE3IDI2LjcxOUwzMS41MDMzIDM1LjY3MzZDMzQuMDI1OCAzNi44NjAzIDM4LjA4MzYgMzYuODYwMyA0MC40OTY0IDM1LjY3MzZMNjAuMDE4MSAyNi43MTlMNzAuMTA3OSAzMS4zNTgxQzcyLjYzMDQgMzIuNTQ0OSA3Mi42MzA0IDM0LjM3OSA3MC4xMDc5IDM1LjQ1NzhMNDAuNDk2NCA0OS4wNTE2QzM3Ljk3NCA1MC4yMzgzIDMzLjkxNjEgNTAuMjM4MyAzMS41MDMzIDQ5LjA1MTZaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXIpIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEuNTAzMyAzMi43NjA2TDEuODkxODQgMTkuMTY2OUMtMC42MzA2MTUgMTcuOTgwMSAtMC42MzA2MTUgMTYuMTQ2IDEuODkxODQgMTUuMDY3MkwzMS41MDMzIDEuNDczNDRDMzQuMDI1OCAwLjI4NjY4NSAzOC4wODM2IDAuMjg2Njg1IDQwLjQ5NjQgMS40NzM0NEw3MC4xMDc5IDE1LjA2NzJDNzIuNjMwNCAxNi4yNTM5IDcyLjYzMDQgMTguMDg4IDcwLjEwNzkgMTkuMTY2OUw0MC40OTY0IDMyLjc2MDZDMzcuOTc0IDMzLjgzOTUgMzMuOTE2MSAzMy44Mzk1IDMxLjUwMzMgMzIuNzYwNloiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcikiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjM1Ljk3NDMiIHkxPSI3OC42NTk0IiB4Mj0iMzUuOTc0MyIgeTI9IjI5LjAzMDIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZDQzJCMSIvPgo8c3RvcCBvZmZzZXQ9IjAuODg0OCIgc3RvcC1jb2xvcj0iI0Q5NDIwQiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXIiIHgxPSIzNS45NzQzIiB5MT0iNTcuMTcxMyIgeDI9IjM1Ljk3NDMiIHkyPSIyNC41MzE2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNERUVEQzkiLz4KPHN0b3Agb2Zmc2V0PSIwLjY2MDYiIHN0b3AtY29sb3I9IiM4QkJBMjUiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyIiB4MT0iMzUuOTc0MyIgeTE9IjQzLjk1NDciIHgyPSIzNS45NzQzIiB5Mj0iLTAuNDYwODYyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDMkVCRkEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjZBOERFIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"onlyoffice,office,onlyoffice,desktop,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"onlyoffice-desktopeditors.desktop\"\nLABEL oc.launch=\"DesktopEditors.DesktopEditors\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"onlyoffice\"\nLABEL oc.displayname=\"OnlyOffice\"\nLABEL oc.path=\"/usr/bin/desktopeditors\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/msexcel;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroenabled.12;application/vnd.ms-excel.sheet.binary.macroenabled.12;text/csv;text/spreadsheet;application/csv;application/excel;application/x-excel;application/x-msexcel;application/x-ms-excel;text/comma-separated-values;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;\"\nLABEL oc.fileextensions=\"doc;docx;odt;rtf;txt;xls;xlsx;ods;csv;ppt;pptx;odp\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"onlyoffice\"\nENV APPBIN \"/usr/bin/desktopeditors\"\nENV APP \"/usr/bin/desktopeditors\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/onlyoffice/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/onlyoffice/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/onlyoffice/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/onlyoffice/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/openshift/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN cd /tmp && wget \"https://cli.run.pivotal.io/stable?release=linux64-binary\" -O pivotal.tgz && tar -xvf pivotal.tgz && mv cf /usr/local/bin\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN cd /tmp && wget \"https://cli.run.pivotal.io/stable?release=linux64-binary\" -O pivotal.tgz && tar -xvf pivotal.tgz && mv cf /usr/local/bin\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends rhc gnome-terminal && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"openshift.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIGJ5IE1hcnN1cGlsYW1pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNzE5IgogICBoZWlnaHQ9Ijc2OCIKICAgdmlld0JveD0iLTEuNzMzODY3MSAtMS43MzM4NjcxIDYxLjI2MzMwNDIgNjUuNDA4MjI5MiIKICAgaWQ9InN2ZzQ1NDUzIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDU0NTUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDU0LjIyNzgyLDExLjk4NjYxNSBjIC0wLjU3MjUsLTEuMTgyNSAtMS4yMzUsLTIuMzIzNzUwNCAtMi4wMDM3NSwtMy40MDAwMDA0IGwgLTguMjEyNSwyLjk4ODc1MDQgYyAwLjk1NSwwLjk3NzUgMS43NTc1LDIuMDc2MjUgMi40MTM3NSwzLjI1MTI1IGwgNy44MDI1LC0yLjg0IHogbSAtMzYuMzAyODcsOS4wODMzOCAtOC4yMTUsMi45ODg3NSBjIDAuMTA1LDEuMzE3NSAwLjMzMjUsMi42MTg3NSAwLjY1MTI1LDMuODkzNzUgbCA3LjgwMzc1LC0yLjg0MTI1IGMgLTAuMjUzNzUsLTEuMzIgLTAuMzQzNzUsLTIuNjggLTAuMjQsLTQuMDQxMjUiCiAgICAgaWQ9InBhdGg0NDU2MCIKICAgICBzdHlsZT0iZmlsbDojYzIyMTMzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSAzNi4xNTYyLDkuNjYwMTE0NiBjIDEuNzA4NzUsMC43OTc1MDA0IDMuMTg4NzUsMS44ODUwMDA0IDQuNDM3NSwzLjE2MDAwMDQgbCA4LjIxMjUsLTIuOTg4NzUwNCBjIC0yLjI3NSwtMy4xOTI1IC01LjM3Mzc1LC01Ljg2IC05LjE3LC03LjYzMTI1IC0xMS43NDEyNSwtNS40NzUgLTI1Ljc0ODc1LC0wLjM3NzUgLTMxLjIyMjUsMTEuMzYyNTAwNCAtMS43NzI1LDMuNzk4NzUgLTIuNDMxMjUsNy44MzM3NSAtMi4xMjEyNSwxMS43NDEyNSBsIDguMjEzNzUsLTIuOTg4NzUgYyAwLjEzNjI1LC0xLjc4IDAuNTcsLTMuNTYzNzUgMS4zNjYyNSwtNS4yNzM3NSBDIDE5LjQyOTk1LDkuNDEzODY0NiAyOC41Mjg3LDYuMTAzODY0NiAzNi4xNTYyLDkuNjYwMTE0NiIKICAgICBpZD0icGF0aDQ0NTY0IgogICAgIHN0eWxlPSJmaWxsOiNkYjIxMmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDQ0LjkxNTgyLDI0LjY2ODI0NSBjIC0wLjEzMTI1LDEuNzc4NzUgLTAuNTgsMy41NjI1IC0xLjM3ODc1LDUuMjczNzUgLTMuNTU2MjUsNy42Mjg3NSAtMTIuNjU2MjUsMTAuOTM4NzUgLTIwLjI4MjUsNy4zODI1IC0xLjcxMTI1LC0wLjc5ODc1IC0zLjIwMjUsLTEuODc3NSAtNC40NDYyNSwtMy4xNTUgbCAtOC4xOTYyNSwyLjk4MjUgYyAyLjI3LDMuMTkyNSA1LjM2NSw1Ljg2MTI1IDkuMTYzNzUsNy42MzM3NSAxMS43NDEyNSw1LjQ3Mzc1IDI1Ljc0NjI1LDAuMzc2MjUgMzEuMjIxMjUsLTExLjM2NSAxLjc3Mzc1LC0zLjc5NjI1IDIuNDI3NSwtNy44MzEyNSAyLjExNSwtMTEuNzM1IGwgLTguMTk2MjUsMi45ODI1IHoiCiAgICAgaWQ9InBhdGg0NDU3MiIKICAgICBzdHlsZT0iZmlsbDojZGIyMTJlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSA0Ni45MzU0NSwxNC42NDExMTUgLTcuODAzNzUsMi44NCBjIDEuNDUsMi41OTc1IDIuMTM1LDUuNTg3NSAxLjkxLDguNTk1IGwgOC4xOTYyNSwtMi45ODEyNSBjIC0wLjIzNSwtMi45NDEyNSAtMS4wMTg3NSwtNS44MTI1IC0yLjMwMjUsLTguNDUzNzUgbSAtMzYuMDYyNzUsMTMuMTI0IC03LjgwMzc1LDIuODQyNSBjIDAuNzE2MjUsMi44NDUgMS45Niw1LjU0ODc1IDMuNjcsNy45NTUgbCA4LjE5NSwtMi45ODM3NSBjIC0yLjEwMzc1LC0yLjE2IC0zLjUwMjUsLTQuODkzNzUgLTQuMDYxMjUsLTcuODEzNzUiCiAgICAgaWQ9InBhdGg0NDU3NiIKICAgICBzdHlsZT0iZmlsbDojZWIyMTI2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSA1My4wMzgzMiw5LjgyMjk5NDYgYyAtMC4yNTg3NSwtMC40MiAtMC41Mjc1LC0wLjgzMzc1IC0wLjgxMzc1LC0xLjIzNjI1IGwgLTguMjEyNSwyLjk4ODc1MDQgYyAwLjM2MTI1LDAuMzcgMC42OTM3NSwwLjc2MjUgMS4wMTEyNSwxLjE2NSBsIDguMDE1LC0yLjkxNzUwMDQgeiBNIDE3Ljg5MzU3LDIyLjcxOTM2NSBjIC0wLjAyLC0wLjU0NzUgLTAuMDExMywtMS4wOTc1IDAuMDMxMiwtMS42NDg3NSBsIC04LjIxNSwyLjk4ODc1IGMgMC4wNDI1LDAuNTI2MjUgMC4xMDg3NSwxLjA0ODc1IDAuMTg3NSwxLjU3IGwgNy45OTYyNSwtMi45MSB6IgogICAgIGlkPSJwYXRoNDQ1ODQiCiAgICAgc3R5bGU9ImZpbGw6I2FkMjEzYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz4KICA8cGF0aAogICAgIGQ9Im0gNTMuMTExNTcsMjEuNjg1NjE1IC04LjE5NjI1LDIuOTgyNSBjIC0wLjA4NjMsMS4xOCAtMC4zMTYyNSwyLjM2MjUgLTAuNjkyNSwzLjUyNSBsIDguOTIxMjUsLTMuMjUyNSBjIDAuMDYzOCwtMS4wOSAwLjA1MzcsLTIuMTc3NSAtMC4wMzI1LC0zLjI1NSBtIC00Mi40OTg3NSwxNS40Njc1IGMgMC42MzEyNSwwLjg4ODc1IDEuMzMsMS43MzYyNSAyLjA4ODc1LDIuNTM2MjUgbCA4LjkyMjUsLTMuMjUzNzUgYyAtMS4wNDI1LC0wLjY1MjUgLTEuOTg1LC0xLjQxMzc1IC0yLjgxNjI1LC0yLjI2NjI1IGwgLTguMTk1LDIuOTgzNzUgeiIKICAgICBpZD0icGF0aDQ0NTg4IgogICAgIHN0eWxlPSJmaWxsOiNiYTIxMzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDUyLjY4OTMyLDU0LjUzMjExNSAwLDAuNzQgMi4xNDYyNSwwIDAsNi41NTM3NSAwLjgxMjUsMCAwLC02LjU1Mzc1IDIuMTQ3NSwwIDAsLTAuNzQgLTUuMTA2MjUsMCB6IG0gLTQuOTI4NSwwLjczOTM4IDAsMi40MTc1IDIsMCAwLDAuNzQgLTIsMCAwLDMuMzk2MjUgLTAuODEyNSwwIDAsLTcuMjkyNSA0LjI4MjUsMCAwLDAuNzM4NzUgLTMuNDcsMCB6IG0gLTMuNzE3NzUsLTAuNzM4NSAwLjgxMjUsMCAwLDcuMjkzNzUgLTAuODEyNSwwIDAsLTcuMjkzNzUgeiBtIC0yLjkwNDI1LDcuMjkyODcgMCwtMy40Mzg3NSAtMy42MjYyNSwwIDAsMy40Mzg3NSAtMC44MTI1LDAgMCwtNy4yOTM3NSAwLjgxMjUsMCAwLDMuMTE2MjUgMy42MjYyNSwwIDAsLTMuMTE2MjUgMC44MTI1LDAgMCw3LjI5Mzc1IC0wLjgxMjUsMCB6IG0gLTguNjY2NzUsMC4xMTQ2MyBjIC0wLjk5LDAgLTEuODc2MjUsLTAuNDI3NSAtMi40NDg3NSwtMS4wMSBsIDAuNTQyNSwtMC42MDUgYyAwLjU1MTI1LDAuNTMxMjUgMS4xODc1LDAuODc2MjUgMS45Mzc1LDAuODc2MjUgMC45Njg3NSwwIDEuNTczNzUsLTAuNDggMS41NzM3NSwtMS4yNTEyNSAwLC0wLjY3NzUgLTAuNDA2MjUsLTEuMDYyNSAtMS43NCwtMS41NDI1IC0xLjU3Mzc1LC0wLjU2MjUgLTIuMTA1LC0xLjA3MjUgLTIuMTA1LC0yLjEyNSAwLC0xLjE2NzUgMC45MTYyNSwtMS44NjYyNSAyLjI4MTI1LC0xLjg2NjI1IDAuOTgsMCAxLjYwNSwwLjI5MjUgMi4yMiwwLjc4MjUgbCAtMC41MjEyNSwwLjYzNSBjIC0wLjUzMTI1LC0wLjQzNzUgLTEuMDIxMjUsLTAuNjc3NSAtMS43NSwtMC42Nzc1IC0xLjAwMTI1LDAgLTEuNDE3NSwwLjUgLTEuNDE3NSwxLjA3Mzc1IDAsMC42MDUgMC4yNzEyNSwwLjk0NzUgMS43MywxLjQ3IDEuNjE1LDAuNTgyNSAyLjExNSwxLjEyNSAyLjExNSwyLjIwODc1IDAsMS4xNDYyNSAtMC44OTYyNSwyLjAzMTI1IC0yLjQxNzUsMi4wMzEyNSBtIC01Ljc0MTUsLTAuMTE0NjMgLTIuNjc3NSwtMy45OCBjIC0wLjE3NzUsLTAuMjcxMjUgLTAuNDE3NSwtMC42MzYyNSAtMC41MTEyNSwtMC44MjM3NSAwLDAuMjcxMjUgMC4wMjEyLDEuMTg3NSAwLjAyMTIsMS41OTM3NSBsIDAsMy4yMSAtMS40Mzg3NSwwIDAsLTcuMjkzNzUgMS4zOTYyNSwwIDIuNTg1LDMuODU1IGMgMC4xNzc1LDAuMjcxMjUgMC40MTYyNSwwLjYzNjI1IDAuNTEsMC44MjM3NSAwLC0wLjI3MTI1IC0wLjAyLC0xLjE4NzUgLTAuMDIsLTEuNTk1IGwgMCwtMy4wODM3NSAxLjQzNzUsMCAwLDcuMjkzNzUgLTEuMzAyNSwwIHogbSAtMTEuNTAxMTIsMCAwLC03LjI5Mzc1IDUuMDYzNzUsMCAwLDEuNDI3NSAtMy42MDUsMCAwLDEuMjYxMjUgMi4wOTUsMCAwLDEuNDE2MjUgLTIuMDk1LDAgMCwxLjc2MTI1IDMuNzYxMjUsMCAwLDEuNDI3NSAtNS4yMiwwIHogbSAtNC4xNDQ3NSwtMi41ODM2MiAtMS42MDUsMCAwLDIuNTgzNzUgLTEuNDU4NzUsMCAwLC03LjI5Mzc1IDMuMTg4NzUsMCBjIDEuMzc1LDAgMi41MTEyNSwwLjc2MTI1IDIuNTExMjUsMi4zMTI1IDAsMS42ODg3NSAtMS4xMjUsMi4zOTc1IC0yLjYzNjI1LDIuMzk3NSBtIDAuMDczOCwtMy4yOTI1IC0xLjY3ODc1LDAgMCwxLjg3NSAxLjY5ODc1LDAgYyAwLjY3NzUsMCAxLjA0MjUsLTAuMzEzNzUgMS4wNDI1LC0wLjk0ODc1IDAsLTAuNjM1IC0wLjQxNzUsLTAuOTI2MjUgLTEuMDYyNSwtMC45MjYyNSBNIDMuMjEsNjEuOTQwNDk1IGMgLTEuOTA3NSwwIC0zLjIxLC0xLjM5NjI1IC0zLjIxLC0zLjc1MTI1IDAsLTIuMzU1IDEuMzIzNzUsLTMuNzcyNSAzLjIzMTI1LC0zLjc3MjUgMS44OTYyNSwwIDMuMTk4NzUsMS4zOTc1IDMuMTk4NzUsMy43NTI1IDAsMi4zNTUgLTEuMzIzNzUsMy43NzEyNSAtMy4yMiwzLjc3MTI1IG0gLTAuMDEsLTYuMDc1IGMgLTEuMDIxMjUsMCAtMS42OTg3NSwwLjgyMzc1IC0xLjY5ODc1LDIuMzAzNzUgMCwxLjQ4IDAuNzA4NzUsMi4zMjI1IDEuNzMsMi4zMjI1IDEuMDIxMjUsMCAxLjY5NzUsLTAuODIyNSAxLjY5NzUsLTIuMzAyNSAwLC0xLjQ4IC0wLjcwNzUsLTIuMzIzNzUgLTEuNzI4NzUsLTIuMzIzNzUiCiAgICAgaWQ9InBhdGg0NDYyMiIKICAgICBzdHlsZT0iZmlsbDojMjQxZjIxO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4KPCEtLSB2ZXJzaW9uOiAyMDExMDMxMSwgb3JpZ2luYWwgc2l6ZTogNTcuNzk1NTcgNjEuOTQwNDk1LCBib3JkZXI6IDMlIC0tPgo=\"\nLABEL oc.keyword=\"openshift,oc,openshift\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.openshift.cli\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--disable-factory --class openshift.cli\"\nLABEL oc.name=\"openshift\"\nLABEL oc.displayname=\"OpenShift cli\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"openshift\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class openshift.cli\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/openshift/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/openshift/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/openshift/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/openshift/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update pinta pinta-lang adwaita-icon-theme libadwaita font-noto font-xfree86-type1\nLABEL oc.icon=\"pinta.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL2lua3NjYXBlLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iOTAuMDAwMDAwIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTAuMDAwMDAwIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL2FuZHJlYXMvcHJvamVrdC9iaWxkL3RhbmdvL3NjYWxhYmxlL2RyYXctcGVuY2lsMy5wbmciCiAgIHdpZHRoPSI0OHB4IgogICBoZWlnaHQ9IjQ4cHgiCiAgIGlkPSJzdmc5MTIxIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQzK2RldmVsIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS90aWdlcnQvY3ZzL2ZyZWVkZXNrdG9wLm9yZy90YW5nby1pY29uLXRoZW1lL3NjYWxhYmxlL2NhdGVnb3JpZXMiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFwcGxpY2F0aW9ucy1ncmFwaGljcy5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMyI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4MzUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY4MzciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjgzOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3NDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY3NTAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyYjU1ODI7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjc1MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3MjEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY3MjMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzYzc0YjE7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjcyNSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2NTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjJmMmYyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY2NTMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjM2MzYzM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjY1NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2MjkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWVhZWFlO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY2MzEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGM0YzQ7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjYzMyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI0NDYiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI0NDgiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjQ1MCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NzUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NzciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk3OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NjMiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjk2OTY5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NjUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk2NyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNmUzZDA5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NTMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjk1OSIKICAgICAgICAgb2Zmc2V0PSIwLjI0MjQyNDI1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWE4MTEzO3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzVjMzMwNztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMC42MjEyMTIxMiIKICAgICAgICAgaWQ9InN0b3A2OTYxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTA3YzEyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDY5NTUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTM5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2JkYmRiZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A2OTQxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY5NDciCiAgICAgICAgIG9mZnNldD0iMC4zMzMzMzMzNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhM2EzYTM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAuNjY2NjY2NjkiCiAgICAgICAgIGlkPSJzdG9wNjk0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RkZGRkZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2OTQzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkzOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NDUiCiAgICAgICB4MT0iMTkuMzk0NzM1IgogICAgICAgeTE9IjMwLjAwMTMzMSIKICAgICAgIHgyPSIyMy4xMDkzMzEiCiAgICAgICB5Mj0iMzMuNDM4ODMxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0zLjkwNjk1LC0xLjgwMjg1NikiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5NTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTU3IgogICAgICAgeDE9IjI4LjA1ODYzMiIKICAgICAgIHkxPSIxOC44Njc3NjciCiAgICAgICB4Mj0iMzMuNDM2OTg1IgogICAgICAgeTI9IjIzLjc0Mjc2NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMy45MDY5NSwtMS44MDI4NTYpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTYzIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50Njk2OSIKICAgICAgIGN4PSIxNS40MTUxMDEiCiAgICAgICBjeT0iMzUuMzU2NTA2IgogICAgICAgZng9IjE1LjQxNTEwMSIKICAgICAgIGZ5PSIzNS4zNTY1MDYiCiAgICAgICByPSI3LjU3OTE1NjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTk0NjU1LDMuMjYyODc2ZS0xNiw2LjU2NDU0NmUtMTMsMC45NjkzMjIsLTQuNTgzMDE3LDAuMTY1OTE5KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTc1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50Njk4MSIKICAgICAgIGN4PSIyNi43ODE2NyIKICAgICAgIGN5PSI0Mi4zNDMxNDciCiAgICAgICBmeD0iMjYuNzgxNjciCiAgICAgICBmeT0iNDIuMzQzMTQ3IgogICAgICAgcj0iMTQuNDA3MzAxIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjI4MjIwOSwxLjY3OTIxMmUtMTUsMzAuMzkzNTUpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0NDYiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNDUyIgogICAgICAgeDE9IjEzLjIzNjE1NSIKICAgICAgIHkxPSIzNy43NTIyNDciCiAgICAgICB4Mj0iNy43NTIxMDkxIgogICAgICAgeTI9IjQyLjI4MjE0NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjg1MjI5OCwwLDAsMC44NTIyOTgsLTEuNjc1MTA3LDMuNzUzOTc3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njk3NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDY5MDMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC4yODIyMDksMi45MzYxMjhlLTE1LDMwLjM5MzU1KSIKICAgICAgIGN4PSIyNi43ODE2NyIKICAgICAgIGN5PSI0Mi4zNDMxNDciCiAgICAgICBmeD0iMjYuNzgxNjciCiAgICAgICBmeT0iNDIuMzQzMTQ3IgogICAgICAgcj0iMTQuNDA3MzAxIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2ODM1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAwNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjQ4LjI1IgogICAgICAgeTE9IjU0Ljc1IgogICAgICAgeDI9IjQ4LjI1IgogICAgICAgeTI9IjcxLjI1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjcxODkxNCwwLDAsMC43MTg5MTQsLTEuODk3MTAzLC0yMC42ODYwNikiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDEwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzM3MzA3LDAsMCwwLjc3MDg1NCwtOC41MzIwMjMsNy4xMjE2MzYpIgogICAgICAgeDE9IjYwLjE2ODc2NiIKICAgICAgIHkxPSI0MC4xMTk3OTciCiAgICAgICB4Mj0iNjAuNDQwOTk0IgogICAgICAgeTI9IjQzLjg2OTc5NyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njc0OCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMTQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC43MTg5MTQsMCwwLDAuNzE4OTE0LC0xLjg5NzEwMywtMjIuNDI0ODEpIgogICAgICAgeDE9IjQ5Ljg1MzAzNyIKICAgICAgIHkxPSI2NC4yNTk2MjMiCiAgICAgICB4Mj0iNjIuNzY4MjIxIgogICAgICAgeTI9IjY0LjI1OTYyMyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjYyOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMTciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44ODg2MTksMCwwLDAuNzE4OTE0LC0xOC4yOTc2OCw5LjQ3MTcyOCkiCiAgICAgICB4MT0iNjEuODcxODQ1IgogICAgICAgeTE9IjI5LjYxNTIyMyIKICAgICAgIHgyPSI2MS44NzE4NDUiCiAgICAgICB5Mj0iNDEuNDU5MjYzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NjUxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAyMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjcxOTQ0LDAsMCwwLjcxODkxNCwtNy42OTYyNTIsOS40NzE3MjgpIgogICAgICAgeDE9IjUzLjE2ODc2NiIKICAgICAgIHkxPSIyNC4yNDQ3OTciCiAgICAgICB4Mj0iNjkuNjkwOTk0IgogICAgICAgeTI9IjI0LjI0NDc5NyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjcyMSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMjUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44NjI0ODIsMCwwLDAuNTgwNzE4LC0xNi4yNTY5NywxMS4wMTM0OCkiCiAgICAgICB4MT0iNTIuNzE3OTM2IgogICAgICAgeTE9IjIuMzE2MTYzOCIKICAgICAgIHgyPSI2Ny40NjU5ODgiCiAgICAgICB5Mj0iMi4zMTYxNjM4IiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjAuMTcyNTQ5MDIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjQiCiAgICAgaW5rc2NhcGU6Y3g9IjYxLjAzNjM2MyIKICAgICBpbmtzY2FwZTpjeT0iMjUuODYzOTA2IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjk1IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjExNTEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjQ3MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiCiAgICAgc3Ryb2tlPSIjMjA0YTg3IgogICAgIGZpbGw9IiMzNDY1YTQiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+R3JhcGhpY3MgQ2F0ZWdvcnk8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlIC8+CiAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5KYWt1YiBTdGVpbmVyPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvIiAvPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+Z3JhcGhpY3M8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5jYXRlZ29yeTwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnBpeGVsPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+dmVjdG9yPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+ZWRpdG9yPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+ZHJhdzwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnBhaW50PC9yZGY6bGk+CiAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxkYzpzb3VyY2U+aHR0cDovL3RhbmdvLXByb2plY3Qub3JnPC9kYzpzb3VyY2U+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvIj4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUmVwcm9kdWN0aW9uIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EaXN0cmlidXRpb24iIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9Ob3RpY2UiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9BdHRyaWJ1dGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGVyaXZhdGl2ZVdvcmtzIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU2hhcmVBbGlrZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY5MjI0LDAsMCwxLjEyMjk3NSw1Ljc2OTAyOCwtNy4xMTYxNikiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGQ9Ik0gNDEuMTg4OTcxIDQyLjM0MzE0NyBBIDE0LjQwNzMwMSA0LjA2NTg2NDEgMCAxIDEgIDEyLjM3NDM2OSw0Mi4zNDMxNDcgQSAxNC40MDczMDEgNC4wNjU4NjQxIDAgMSAxICA0MS4xODg5NzEgNDIuMzQzMTQ3IHoiCiAgICAgICBzb2RpcG9kaTpyeT0iNC4wNjU4NjQxIgogICAgICAgc29kaXBvZGk6cng9IjE0LjQwNzMwMSIKICAgICAgIHNvZGlwb2RpOmN5PSI0Mi4zNDMxNDciCiAgICAgICBzb2RpcG9kaTpjeD0iMjYuNzgxNjciCiAgICAgICBpZD0icGF0aDY5MDEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ2OTAzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDY5NTcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNjczOTA3O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGQ9Ik0gMTkuNjUxNjgyLDIyLjU4NjczNSBMIDIzLjcxNzU0NiwyNi4zODc0MzMgQyAzMC45MDUwNDUsMTkuMzI0OTM0IDQxLjUwMDYwNiwyLjQxMDE0NTUgNDEuNTAwNjA2LDIuNDEwMTQ1NSBDIDQxLjkzMDA5NiwxLjE4NTY5OTMgNDAuNDEzMzYxLDAuNDE0MjUyNjQgMzkuNjU0MjU0LDEuMjM5NjUwNSBDIDM5LjY1NDI1NCwxLjIzOTY1MDUgMjUuOTY0MTgxLDE1LjMzNjczNiAxOS42NTE2ODIsMjIuNTg2NzM1IHogIgogICAgICAgaWQ9InBhdGg2OTM3IgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc3NjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ2OTQ1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6Izg4OGE4NTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDEyLjA1MDI4NSwzMi44MTM4OTQgTCAxNC4yOTY2MDUsMzQuNzQ3NzE0IEwgMjIuNzg5MzcxLDI3LjM4MDY4MyBMIDIzLjA2NDQzMiwyNi42NzQ4NTUgTCAyNC4xNTg4MzcsMjYuNjU3MDQgQyAyMy43MjEzMzcsMjUuMDk0NTQgMjEuMjE3MzIzLDIyLjI3MzU4NSAxOS4zNDIzMjMsMjIuMjczNTg1IEwgMTkuNDI0MzQyLDIzLjM2MzY2IEwgMTguNzU0MzUxLDIzLjc0MzY4NyBMIDEyLjA1MDI4NSwzMi44MTM4OTQgeiAiCiAgICAgICBpZD0icGF0aDY5MzUiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDY5ODEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlkPSJwYXRoNjk3MyIKICAgICAgIHNvZGlwb2RpOmN4PSIyNi43ODE2NyIKICAgICAgIHNvZGlwb2RpOmN5PSI0Mi4zNDMxNDciCiAgICAgICBzb2RpcG9kaTpyeD0iMTQuNDA3MzAxIgogICAgICAgc29kaXBvZGk6cnk9IjQuMDY1ODY0MSIKICAgICAgIGQ9Ik0gNDEuMTg4OTcxIDQyLjM0MzE0NyBBIDE0LjQwNzMwMSA0LjA2NTg2NDEgMCAxIDEgIDEyLjM3NDM2OSw0Mi4zNDMxNDcgQSAxNC40MDczMDEgNC4wNjU4NjQxIDAgMSAxICA0MS4xODg5NzEgNDIuMzQzMTQ3IHoiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzM4MzcsMCwwLDEsLTIwLjkyNjQsLTMuNDA5MDExKSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50Njk2OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDEuNzU3NzA5LDQwLjcyMzkxNSBDIDguMzYzMDIxNiw0MC43MjM5MTUgMTMuMzc1ODk2LDQxLjUxMDUxNiAxNC4zMjQ5MzQsMzYuNzA0ODQyIEMgMTUuMDg5NzI3LDMyLjgzMjEzMyA5Ljc2NDYwOTYsMzAuOTc2NDgyIDcuMTI1ODAyNiwzNC40MzM3OTEgQyA0LjU4Mzc5OSwzNy43NjQyNyAxLjc1NzcwOSw0MC43MjM5MTUgMS43NTc3MDksNDAuNzIzOTE1IHogIgogICAgICAgaWQ9InBhdGg2OTMzIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc2MiIC8+CiAgICA8cGF0aAogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC41Mjc3Nzc4Mjtjb2xvcjojMDAwMDAwO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBpZD0icGF0aDY5NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNy42MjQ5OTkiCiAgICAgICBzb2RpcG9kaTpjeT0iMzcuNzUiCiAgICAgICBzb2RpcG9kaTpyeD0iMS4yNDk5OTk5IgogICAgICAgc29kaXBvZGk6cnk9IjEuMjQ5OTk5OSIKICAgICAgIGQ9Ik0gOC44NzQ5OTg5IDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgNi4zNzQ5OTkyLDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgOC44NzQ5OTg5IDM3Ljc1IHoiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODUyMjk4LDAsMCwwLjg1MjI5OCwzLjczMzU1NCwyLjU3NTYwNCkiIC8+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43ODc4NjcsMCwwLDAuNzg3ODY3LDE0LjI2NTM4LC00LjcyMzM2NikiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGQ9Ik0gOC44NzQ5OTg5IDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgNi4zNzQ5OTkyLDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgOC44NzQ5OTg5IDM3Ljc1IHoiCiAgICAgICBzb2RpcG9kaTpyeT0iMS4yNDk5OTk5IgogICAgICAgc29kaXBvZGk6cng9IjEuMjQ5OTk5OSIKICAgICAgIHNvZGlwb2RpOmN5PSIzNy43NSIKICAgICAgIHNvZGlwb2RpOmN4PSI3LjYyNDk5OSIKICAgICAgIGlkPSJwYXRoNjk4MyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgZD0iTSAxOC45NDE0MzgsMjYuMzk4MTU0IEwgMTMuNjM4MTM3LDMyLjU0MTE0NCIKICAgICAgIGlkPSJwYXRoNjk4NSIKICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDI3Nzc3NzY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNDUyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDMuMDcwODg3Miw0MC4wNjg5NzYgQyAzLjA3MDg4NzIsNDAuMDY4OTc2IDYuNDExOTk4NiwzOC40MjcxNTUgNy44MzU3MTU2LDM1Ljk4MjE0NyBDIDguMzM5NDIyNiwzNS4xMTcxMSA5LjQ4MDA4ODYsMzUuODU1MzExIDguNzc3MzgxNiwzNi43MTY2NDYgQyA3LjI1OTU1MzYsMzguNTc3MTA0IDMuMDcwODg3Miw0MC4wNjg5NzYgMy4wNzA4ODcyLDQwLjA2ODk3NiB6ICIKICAgICAgIGlkPSJwYXRoMTU3MSIKICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTMzMzMzMjc7Y29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaWQ9InBhdGgyNDU0IgogICAgICAgc29kaXBvZGk6Y3g9IjcuNjI0OTk5IgogICAgICAgc29kaXBvZGk6Y3k9IjM3Ljc1IgogICAgICAgc29kaXBvZGk6cng9IjEuMjQ5OTk5OSIKICAgICAgIHNvZGlwb2RpOnJ5PSIxLjI0OTk5OTkiCiAgICAgICBkPSJNIDguODc0OTk4OSAzNy43NSBBIDEuMjQ5OTk5OSAxLjI0OTk5OTkgMCAxIDEgIDYuMzc0OTk5MiwzNy43NSBBIDEuMjQ5OTk5OSAxLjI0OTk5OTkgMCAxIDEgIDguODc0OTk4OSAzNy43NSB6IgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjIzNzg2NywwLDAsMC4yMzc4NjcsMzguNDMzODksLTcuMTAxMDI4KSIgLz4KICAgIDxnCiAgICAgICBpZD0iZzcwMzgiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3NjIgogICAgICAgICBpZD0icGF0aDY2NTkiCiAgICAgICAgIGQ9Ik0gMzUuMTI2OTQsNy4zNTAwNzU5IEMgMzIuMDY5MDg0LDcuNDM3MzY0OCAyOS42NDI1NTEsOC40MDYxNTg0IDI5LjY0MjU1MSw5LjU3NDQwOTUgQyAyOS42NDI1NTEsOS44NTIxMDg1IDI5LjY0MjU1MSwxMi44NjY4MjkgMjkuNjQyNTUxLDEzLjE0NDUyOCBDIDI5LjY0MjU1MSwxNC4zNzAyMzQgMzIuMzEzNDgzLDE1LjM2ODg2MSAzNS41ODM5NzEsMTUuMzY4ODYxIEMgMzguODU0NDU3LDE1LjM2ODg2MSA0MS41LDE0LjM3MDIzNCA0MS41LDEzLjE0NDUyOCBDIDQxLjUsMTIuODY2ODI5IDQxLjUsOS44NTIxMDg1IDQxLjUsOS41NzQ0MDk1IEMgNDEuNSw4LjM0ODcwMzMgMzguODU0NDU3LDcuMzUwMDc1OSAzNS41ODM5NzEsNy4zNTAwNzU5IEMgMzUuNDMwNjY2LDcuMzUwMDc1OSAzNS4yNzczMjUsNy4zNDU3ODI2IDM1LjEyNjk0LDcuMzUwMDc1OSB6ICIKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzAyNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMyMDRhODc7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4NjI3OCwwLDAsMC40Njg5MTQsLTEwLjQ0MzkyLC05LjcxODg1OSkiCiAgICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICAgIGQ9Ik0gNTcuMzc1IDQ5Ljc1IEEgNS4zNzUgMS41IDAgMSAxICA0Ni42MjUsNDkuNzUgQSA1LjM3NSAxLjUgMCAxIDEgIDU3LjM3NSA0OS43NSB6IgogICAgICAgICBzb2RpcG9kaTpyeT0iMS41IgogICAgICAgICBzb2RpcG9kaTpyeD0iNS4zNzUiCiAgICAgICAgIHNvZGlwb2RpOmN5PSI0OS43NSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjUyIgogICAgICAgICBpZD0icGF0aDY3MjkiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6IzM0NjVhNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45OTk5OTk4MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpZD0icGF0aDY2MTciCiAgICAgICAgIGQ9Ik0gMjcuOTI2NDQ3LDM5LjE1NTQ2NyBMIDI4Ljk3MzQ1NiwxNy44MDYwMzIgTCAzMS40NjAxMDIsMTQuMTQyNTIgQyAzMy40MzEzOTQsMTMuNTA3MDgzIDM4LjE4NjUyOSwxMy41MDcwODMgMzkuOTY3MDUsMTQuMTQyNTIgTCA0Mi40NTM2OTcsMTcuMTc0MzkzIEwgNDUuMDcxMjIsMzkuNjYwNzggTCAyNy45MjY0NDcsMzkuMTU1NDY3IHogIgogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MDIwKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzVhNWE1YTtzdHJva2Utd2lkdGg6MS4wMDAwMDAzNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2NjE5IgogICAgICAgICBkPSJNIDI4LjgyODQ5NSwzOC44OTYxMDggQyAyOC44Mjg0OTUsMzguODk2MTA4IDMxLjQxOTE2OCwyOS4zNjQ1NjUgMzYuMzY4NjgzLDI5LjM2NDU2NSBDIDQxLjQ3NTI4NCwyOS4zNjQ1NjUgNDQuNTM3MjE4LDM5LjI3NzM3IDQ0LjUzNzIxOCwzOS4yNzczNyBMIDI4LjgyODQ5NSwzOC44OTYxMDggeiAiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2NjQxIgogICAgICAgICBkPSJNIDI5LjE4MDEzOCwyMC40OTg3MDggTCAyOC44ODQyMjUsMjYuOTczNDUgQyAzMC41NDY3MTQsMjUuODk1MDc5IDQwLjg3NjczNiwyNS43MDg5NjQgNDMuMjI3ODUsMjcuMzYxMDk4IEwgNDIuNTI2MzAyLDIwLjc2Mzc4NSBDIDQxLjEyODM0MiwxOS44MTA2MzEgMzEuOTQzNDY0LDE5LjI4NTU0IDI5LjE4MDEzOCwyMC40OTg3MDggeiAiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41OTQ0NDQzO2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjAwMDAwMDEyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgZD0iTSAyOS4wNDg3NjIsMzguMjIyMDk2IEwgMjkuOTI2MjU5LDE4LjAyNzc4NCBMIDMxLjc2NjIyNiwxNC45OTQ5NDkgQyAzMy41ODQ3ODIsMTQuNDAyNzc0IDM3Ljk3MTQ4NCwxNC40MDI3NzQgMzkuNjE0MDQ5LDE0Ljk5NDk0OSBMIDQxLjU3NDUzLDE3LjUyNzUzNSBMIDQ0LjAyNjc1NCwzOC43NzU5IEwgMjkuMDQ4NzYyLDM4LjIyMjA5NiB6ICIKICAgICAgICAgaWQ9InBhdGg2NjcwIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHJ5PSIwLjg4Mzg4MzY2IgogICAgICAgICByeD0iMC44ODM4ODQxMyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgeT0iMzcuNTM2MTMzIgogICAgICAgICB4PSIyNi41MTI3ODkiCiAgICAgICAgIGhlaWdodD0iMy45Mjc3NTI1IgogICAgICAgICB3aWR0aD0iMTkuOTc0NDEzIgogICAgICAgICBpZD0icmVjdDU3NDIiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNWE1YTVhO3N0cm9rZS13aWR0aDoxLjAwMDAwMDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpZD0icGF0aDY2NjgiCiAgICAgICAgIGQ9Ik0gMjkuMzk1MjE5LDE3Ljk5NjQ1MSBDIDMxLjI2OTc1NiwxNi42MzAyNjMgMzguNDkzMTUzLDE2LjM0MTI3NyA0Mi4xMTUxMzksMTcuMzg5NzQ3IEwgMzkuNzc3NzMzLDE0LjUwNDEyNCBDIDM3LjI5OTUzMiwxMy44MzY5MTYgMzMuODUzMzg2LDE0LjEyODM1OCAzMS41MDIyNzIsMTQuNTczMTY0IEwgMjkuMzk1MjE5LDE3Ljk5NjQ1MSB6ICIKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2ODMzIgogICAgICAgICBkPSJNIDMxLjE3Mjk0MSwxNy40MTYzODIgTCAzMS4xNzI5NDEsMzIuODczMDMzIEwgMzQuNDA4MDU0LDI5LjI3ODQ2MyBMIDM0LjA0ODU5NywxNi42OTc0NjggTCAzMS4xNzI5NDEsMTcuNDE2MzgyIHogIgogICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjg2MTExMTA5O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzAwNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8ZwogICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU3Nzc3Nzc4IgogICAgICAgICBpZD0iZzcwMzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZTZlN2U2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtvcGFjaXR5OjAuNDExMTExMTEiCiAgICAgICAgICAgZD0iTSAzMS4wMDkzOTEsOS4zODA5NzM4IEwgMzEuMDA5MzkxLDEyLjYyMTAwOSBDIDMxLjAwOTM5MSwxMi42MjEwMDkgMzEuNjIwNTgsMTIuMjczMzIzIDMyLDEyLjI1OTY4OCBMIDMyLDkgQyAzMS41MTg0MjgsOS4wNjk0NjI2IDMxLjAwOTM5MSw5LjM4MDk3MzggMzEuMDA5MzkxLDkuMzgwOTczOCB6ICIKICAgICAgICAgICBpZD0icGF0aDY2NjYiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpZD0icGF0aDcwMjkiCiAgICAgICAgICAgZD0iTSAzMy4wMDkzOTEsOC43NTk5NjQ4IEwgMzMuMDA5MzkxLDEyIEMgMzMuMDA5MzkxLDEyIDMzLjYyMDU4LDExLjkxNzQ3OSAzNCwxMS45MDM4NDQgTCAzNCw4LjU4ODkxMzMgQyAzMy40ODgzOTksOC42MTQ3MTc5IDMzLjAwOTM5MSw4Ljc1OTk2NDggMzMuMDA5MzkxLDguNzU5OTY0OCB6ICIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNlNmU3ZTY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZTZlN2U2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtvcGFjaXR5OjAuNDQ0NDQ0NDQiCiAgICAgICAgICAgZD0iTSAzNS4wMDkzOTEsOC41NjEwOTEgTCAzNS4wMDkzOTEsMTEuODU2MzY5IEMgMzUuMDA5MzkxLDExLjg1NjM2OSAzNS41NjUzMzcsMTEuODUxMTg3IDM2LDExLjg3MDY5OCBMIDM2LDguNTMzNjcwNiBDIDM1LjQ5OTQ0OCw4LjQ4MjEzNTQgMzUuMDA5MzkxLDguNTYxMDkxIDM1LjAwOTM5MSw4LjU2MTA5MSB6ICIKICAgICAgICAgICBpZD0icGF0aDcwMzEiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"pinta,pinta,paint\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"pinta.desktop\"\nLABEL oc.launch=\"Pinta.Pinta\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Pinta\"\nLABEL oc.displayname=\"Pinta (alpine)\"\nLABEL oc.path=\"/usr/bin/pinta\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-targa;image/x-tga;image/openraster;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Pinta\"\nENV APPBIN \"/usr/bin/pinta\"\nENV APP \"/usr/bin/pinta\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/pinta/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/pinta/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/pinta/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f Pinta.d -t Pinta .\n
"},{"location":"applications/pinta/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect Pinta > Pinta.json\ndocker image save Pinta -o Pinta.tar\nctr -n k8s.io images import Pinta.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @Pinta.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends planner && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"planner.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDQ5MCA0OTAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5MCA0OTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8ZyBpZD0iWE1MSURfODFfIj4NCgkJCTxnPg0KCQkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiBwb2ludHM9IjQ4MCwyOTcuNSA0MTUsMzYyLjUgNDE1LDI5Ny41IAkJCQkiLz4NCgkJCQk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSI0ODAsNTIuNSA0ODAsMjk3LjUgNDE1LDI5Ny41IDQxNSwzNjIuNSAxMCwzNjIuNSAxMCw1Mi41IAkJCQkiLz4NCgkJCTwvZz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiBkPSJNNDkwLDUyLjVjMC01LjUyMi00LjQ3Ny0xMC0xMC0xMEgxMGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMHYzMTBjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGg0MDVsMCwwDQoJCQkJYzIuNjAyLTAuMDAxLDUuMTU5LTEuMDE2LDcuMDcxLTIuOTI5bDY1LTY1YzEuOTEyLTEuOTEzLDIuOTA0LTQuNDcsMi45MDUtNy4wNzFINDkwVjUyLjV6IE00MTUsMjg3LjVjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTANCgkJCQl2NTVIMjB2LTI5MGg0NTB2MjI1SDQxNXogTTQyNSwzMzguMzU3VjMwNy41aDMwLjg1OEw0MjUsMzM4LjM1N3oiLz4NCgkJPC9nPg0KCTwvZz4NCgk8Zz4NCgkJPGcgaWQ9IlhNTElEXzgyXyI+DQoJCQk8Zz4NCgkJCQk8cmVjdCB4PSI2MCIgeT0iOTcuNSIgc3R5bGU9ImZpbGw6I0FGQjZCQjsiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiLz4NCgkJCQk8cmVjdCB4PSIyNTAiIHk9IjEwMi41IiBzdHlsZT0iZmlsbDojQUZCNkJCOyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIvPg0KCQkJCTxyZWN0IHg9IjI1MCIgeT0iMTgyLjUiIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIi8+DQoJCQkJPHJlY3QgeD0iMjUwIiB5PSIyNjIuNSIgc3R5bGU9ImZpbGw6I0FGQjZCQjsiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiLz4NCgkJCTwvZz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiBkPSJNMjUwLDE2Mi41aDEwMGM1LjUyMywwLDEwLTQuNDc4LDEwLTEwdi01MGMwLTUuNTIyLTQuNDc3LTEwLTEwLTEwSDI1MGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMA0KCQkJCXYxNWgtMjVjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTB2NzVoLTgwdi0zNWg1NWM1LjUyMywwLDEwLTQuNDc4LDEwLTEwdi02MGMwLTUuNTIyLTQuNDc3LTEwLTEwLTEwSDYwYy01LjUyMywwLTEwLDQuNDc4LTEwLDEwDQoJCQkJdjYwYzAsNS41MjIsNC40NzcsMTAsMTAsMTBoNDV2NDVjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGg5MHY3MGMwLDUuNTIyLDQuNDc3LDEwLDEwLDEwaDI1djEwYzAsNS41MjIsNC40NzcsMTAsMTAsMTBoMTAwDQoJCQkJYzUuNTIzLDAsMTAtNC40NzgsMTAtMTB2LTUwYzAtNS41MjItNC40NzctMTAtMTAtMTBIMjUwYy01LjUyMywwLTEwLDQuNDc4LTEwLDEwdjIwaC0xNXYtNjBoMTV2MTBjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGgxMDANCgkJCQljNS41MjMsMCwxMC00LjQ3OCwxMC0xMHYtNTBjMC01LjUyMi00LjQ3Ny0xMC0xMC0xMEgyNTBjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTB2MjBoLTE1di02NWgxNXYxNQ0KCQkJCUMyNDAsMTU4LjAyMiwyNDQuNDc3LDE2Mi41LDI1MCwxNjIuNXogTTI2MCwxMTIuNWg4MHYzMGgtODBWMTEyLjV6IE03MCwxMDcuNWgxMDB2NDBINzBWMTA3LjV6IE0yNjAsMjcyLjVoODB2MzBoLTgwVjI3Mi41eg0KCQkJCSBNMjYwLDE5Mi41aDgwdjMwaC04MFYxOTIuNXoiLz4NCgkJPC9nPg0KCTwvZz4NCgk8Zz4NCgkJPHJlY3QgeD0iNTAiIHk9IjI0Ny41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9Ijc1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI1MCIgeT0iMjc3LjUiIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiB3aWR0aD0iNzUiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjUwIiB5PSIzMDcuNSIgc3R5bGU9ImZpbGw6IzIzMUYyMDsiIHdpZHRoPSIxMzAiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjEzNSIgeT0iMjQ3LjUiIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjM4MCIgeT0iOTIuNSIgc3R5bGU9ImZpbGw6IzIzMUYyMDsiIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMCIvPg0KCTwvZz4NCgk8Zz4NCgkJPHJlY3QgeD0iNDIwIiB5PSI5Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjEyMi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjEyMi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjE1Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjE1Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjE4Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjE4Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8ZyBpZD0iWE1MSURfODNfIj4NCgkJCTxnPg0KCQkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNFN0VDRUQ7IiBwb2ludHM9IjQ4MCw0MTcuNSA0MjAsNDM3LjUgNDIwLDM5Ny41IAkJCQkiLz4NCgkJCQk8cmVjdCB4PSIxMCIgeT0iMzk3LjUiIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiB3aWR0aD0iNjAiIGhlaWdodD0iNDAiLz4NCgkJCQk8cmVjdCB4PSI3MCIgeT0iMzk3LjUiIHN0eWxlPSJmaWxsOiNGRkQyNDg7IiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjQwIi8+DQoJCQk8L2c+DQoJCQk8cGF0aCBzdHlsZT0iZmlsbDojMjMxRjIwOyIgZD0iTTQ4My4xNjIsNDA4LjAxM2wtNjAtMjBjLTEuMDMzLTAuMzQ0LTIuMS0wLjQ5OC0zLjE2Mi0wLjQ5OFYzODcuNUgxMGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMHY0MA0KCQkJCWMwLDUuNTIyLDQuNDc3LDEwLDEwLDEwaDQxMGwwLDBoMC4wMDFjMS4wNjEsMCwyLjEyOS0wLjE2OSwzLjE2MS0wLjUxM2w2MC0yMGM0LjA4My0xLjM2MSw2LjgzOC01LjE4Myw2LjgzOC05LjQ4Nw0KCQkJCUM0OTAsNDEzLjE5Niw0ODcuMjQ2LDQwOS4zNzQsNDgzLjE2Miw0MDguMDEzeiBNNjAsNDI3LjVIMjB2LTIwaDQwVjQyNy41eiBNNDEwLDQwNy41djIwSDgwdi0yMEg0MTB6IE00MzAsNDIzLjYyNnYtMTIuMjUyDQoJCQkJbDE4LjM3Nyw2LjEyNkw0MzAsNDIzLjYyNnoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"\nLABEL oc.keyword=\"planner\"\nLABEL oc.cat=\"office\"\nLABEL oc.launch=\"planner.Planner\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Planner\"\nLABEL oc.displayname=\"Planner\"\nLABEL oc.path=\"/usr/bin/planner\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-planner;\"\nLABEL oc.fileextensions=\"mpp;mpx\"\nLABEL oc.legacyfileextensions=\"mpp;mpx\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Planner\"\nENV APPBIN \"/usr/bin/planner\"\nENV APP \"/usr/bin/planner\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/planner/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/planner/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/planner/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/planner/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/postman/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libatk-bridge2.0-0 libx11-6 libxi6 libxxf86vm1 libxfixes3 libxrender1 libgl1 libnss3 qt5dxcb-plugin libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin && apt-get clean\nRUN curl -Ls -o /tmp/postman.tar.gz https://dl.pstmn.io/download/latest/linux64 && gunzip -d /tmp/postman.tar.gz && cd /usr/local/bin && tar -xvf /tmp/postman.tar && rm -rf /tmp/blender.tar\nLABEL oc.icon=\"circle_postman.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMjEiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9Ijk5LjAzNiIgeDI9Ijk5LjAzNiIgeTE9Ii0uNTA0NzIiIHkyPSIxOTkuODQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjMgMCAwIC4zIDIgMi4wMDE1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBpZD0ic3RvcDIiIHN0b3AtY29sb3I9IiNmZjUxMjIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDQiIHN0b3AtY29sb3I9IiNmZmFmMjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI3IiBzdGREZXZpYXRpb249IjE0LjA1OTg2MyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4NzAiIHgxPSI1MS41NzkiIHgyPSI1My4yNzEiIHkxPSItMzYuOTUxIiB5Mj0iNzcuNjQ3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODY0IiBzdG9wLWNvbG9yPSIjZmVlMGQ1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A4NjYiIHN0b3AtY29sb3I9IiNmYmZhYmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyODg4IiB4PSItLjA0OCIgeT0iLS4wNDgiIHdpZHRoPSIxLjA5NiIgaGVpZ2h0PSIxLjA5NiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjg5MCIgc3RkRGV2aWF0aW9uPSIyLjU0OTkxNjMiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgaWQ9ImNpcmNsZTIzIiB0cmFuc2Zvcm09Im1hdHJpeCguMDY0MDEyIDAgMCAuMDY0MDEyIC0uNzQyMjYgLTIuNjIpIiBjeD0iNTExLjUiIGN5PSI1NDAuODYiIHI9IjQ2OC42NiIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjYyMiIvPgogPGNpcmNsZSBpZD0iY2lyY2xlMjUiIGN4PSIzMiIgY3k9IjMyLjAwMiIgcj0iMzAiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2EpIi8+CiA8ZyBpZD0iZzg3NCIgdHJhbnNmb3JtPSJtYXRyaXgoLjM3NjQ5IDAgMCAuMzc2NDkgMTEuNzgzIDIzLjg2KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg4OCkiIG9wYWNpdHk9Ii4xNSI+CiAgPHBhdGggaWQ9InBhdGg4NzIiIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU2MSAwIDAgMi42NTYxIC0zMS4yOTcgLTYzLjM3NCkiIGQ9Im0zMS4zODkgOC4wMDU5Yy0xMS42NDggMC4yNzA0MS0yMS42NjMgOS4wMjE3LTIzLjE5MSAyMC45MzQtMS42ODYzIDEzLjE0NCA3LjU5NjEgMjUuMTc3IDIwLjc0IDI2Ljg2MyAxMy4xNDQgMS42ODYzIDI1LjE2NS03LjU5NDEgMjYuODY1LTIwLjczOCAxLjY4NjMtMTMuMTQ0LTcuNTk1My0yNS4xNzktMjAuNzU0LTI2Ljg2NS0xLjIzMjMtMC4xNTk0NC0yLjQ1NTItMC4yMjEzMy0zLjY2MDItMC4xOTMzNnptMTEuODU5IDkuMDI3M2MwLjg1NTc0LTAuMDM2MDMxIDEuNzI0MSAwLjIzMjEgMi40Mzc1IDAuODA4NTlsLTMuMjI4NSAzLjIxMjljLTAuMDg2NDc1IDAuMTAwODktMC4wODY0NzUgMC4yNDQ4MSAwIDAuMzQ1N2wyLjUwNzggMi40OTQxYy0xLjQxMjQgMC42OTE4LTMuMTEzNiAwLjQwMzQ3LTQuMjA5LTAuNzIwN2wwLjAxMzY3MiAwLjAyOTI5N2MtMS4zOTgtMS40NTU3LTEuMzQwNC0zLjc2MjEgMC4xMTUyNC01LjE2MDIgMC42NjI5Ny0wLjYzNDE1IDEuNTA3NS0wLjk3Mzc0IDIuMzYzMy0xLjAwOTh6bTIuNzgzMiAxLjEzODdjMS4zMjU5IDEuNDI2OCAxLjI4MjggMy42NDc3LTAuMTE1MjMgNS4wMzEyLTAuMTcyOTUgMC4xNTg1NC0wLjM0NzA1IDAuMzE3NTYtMC41NDg4MyAwLjQ0NzI3bC0yLjQwNjItMi40MDgyIDMuMDcwMy0zLjA3MDN6bS0wLjEyMTA5IDEuODUzNWMtMC4wNTk0NTEtMC4wMTA4MS0wLjEyMzk5LTguNzRlLTQgLTAuMTgxNjQgMC4wMzUxNTYtMC4xMjk3MSAwLjA1NzY1Mi0wLjIwMjE4IDAuMjE1OTktMC4xNDQ1MyAwLjM0NTcgMCAwLjAxNDQyIDAuMDEzNjcyIDAuMDE0ODc3IDAuMDEzNjcyIDAuMDI5Mjk3IDAuMTQ0MTIgMC4yODgyNSAwLjExNjU4IDAuNjQ3NTctMC4wOTk2MDkgMC44OTI1OC0wLjEwMDg5IDAuMTAwODktMC4xMTY1MSAwLjI3NDExLTAuMDE1NjI1IDAuMzc1bDAuMDE1NjI1IDAuMDE1NjI1YzAuMDU3NjUgMC4wMTQ0MiAwLjEyOTg1IDAuMDE0NDIgMC4xODc1IDAgMC4wNzIwNjIgMCAwLjE1NzkzLTAuMDQzOTEgMC4yMDExNy0wLjEwMTU2IDAuMzYwMzEtMC40MTc5NiAwLjQzMTMtMS4wMDggMC4xNzE4OC0xLjQ5OC0wLjAzNjAzMS0wLjA1MDQ0NS0wLjA4ODk4Ni0wLjA4Mjk0MS0wLjE0ODQ0LTAuMDkzNzV6bS03LjI0NjEgMi41MTc2YzAuNTE1OTIgMC4wNDE2NjEgMC45MjA5NyAwLjI4NTcgMS4zMjgxIDAuNjE3MTktMC40NDY3OSAwLjAxNDQyLTAuODY0NTcgMC4xODY4My0xLjE4MTYgMC41MDM5MWwtOC45MDgyIDguOTA2Mi0xLjkwMjMtMS45MDIzYzYuNTcyMS02LjU2MTMgOS4xMTYzLTguMjUgMTAuNjY0LTguMTI1em0xLjM1NzQgMS4xNjhjMC4zMTcwOCAwIDAuNjMzODkgMC4xMTc2NiAwLjg3ODkxIDAuMzU1NDcgMC4yNDUwMSAwLjI0NTAxIDAuMzczNzkgMC41NzY3MSAwLjM1OTM4IDAuOTA4Mi0wLjAxNDQxMiAwLjM0NTktMC4xNTg1NCAwLjY2MzkzLTAuNDE3OTcgMC44OTQ1M2wtOS4zODI4IDguMjczNC0xLjE5NTMtMS4yNTM5IDguODc3LTguODIyM2MwLjI0NTAxLTAuMjM3OCAwLjU2Mzc4LTAuMzU1NDcgMC44ODA4Ni0wLjM1NTQ3em0xLjM4MjggMi4yMzA1Yy0wLjMwMjY2IDIuNjgwNy00LjA3ODEgNi40ODU0LTcuOTU1MSAxMC4xODlsLTEuNjcxOS0xLjY3MTkgOS4zODA5LTguMjU3OGMwLjA4NjQ3NS0wLjA3MjA2MSAwLjE3NDAzLTAuMTU4ODggMC4yNDYwOS0wLjI1OTc3em0tMTMuNzUgNS4wMTU2IDEuNzczNCAxLjgxNjQtNC4wMjE1IDAuODYzMjhjLTAuMDg2NDc1IDAuMDE0NDE5LTAuMTczMDktMC4wNDI0MzQtMC4xODc1LTAuMTI4OTEtMC4wMTQ0MTItMC4wNTc2NTItMi42OWUtNCAtMC4xMDEyOSAwLjA0Mjk2OS0wLjE0NDUzbDAuMDQyOTY5LTAuMDU2NjQgMi4zNDk2LTIuMzQ5NnptMi4yNzczIDIuMzQ5NiAwLjk5NDE0IDAuOTIxODgtMi4yMDUxIDAuNTYyNWMtMC4wNDMyMzcgMC4wMjg4MzktMC4wODU2NjkgMC4wMjg4MzktMC4xMjg5MSAwLTAuMDI4ODI0LTAuMDQzMjQtMC4wMjg4MjQtMC4xMDEzIDAtMC4xNDQ1M2wxLjMzOTgtMS4zMzk4em0xLjQxMjEgMS4zNjkxIDEuNzQ0MSAxLjc0MjJjLTMuMTEzMSAyLjU5NDItNi41NDI0IDQuODAxLTEwLjIwMyA2LjU0NDl2MC4wMjczNDNoLTAuMDE1NjI1Yy0wLjE4NzM2IDAuMTAwODgtMC4yODczOCAwLjMwNDA5LTAuMjQ0MTQgMC41MDU4NmwwLjQwMjM0IDEuNzI4NWMwLjAyODgyNCAwLjExNTMtMC4wMjg3NTkgMC4yMzE0MS0wLjExNTI0IDAuMjg5MDYtMC4wODY0NzUgMC4wNzIwNjQtMC4yMTUwNSAwLjA3MjA2NC0wLjI4NzExIDBsLTIuNDUxMi0yLjUyMzQgNy41MjM0LTcuNTM3MSAzLjY0NjUtMC43NzczNHptLTExLjU1OSA4LjY3NTggMi40NTEyIDIuNDM1NS00LjIwOS0wLjI3MzQ0Yy0wLjA1NzY1Mi0wLjAxNDQyLTAuMTE2NDUtMC4wNTgzMjMtMC4xMzA4Ni0wLjEwMTU2LTAuMDE0NDE5LTAuMDU3NjQ4LTAuMDE0NDE5LTAuMTE0OTYgMC0wLjE1ODJsMS44ODg3LTEuOTAyM3oiIG9wYWNpdHk9IjEiIHN0cm9rZS13aWR0aD0iLjE0NDEyIi8+CiA8L2c+CiA8ZyBpZD0iZzUzIiB0cmFuc2Zvcm09Im1hdHJpeCguMzc2NDkgMCAwIC4zNzY0OSAxMS43ODMgMjMuODYpIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50ODcwKSI+CiAgPHBhdGggaWQ9InBhdGgyMiIgdHJhbnNmb3JtPSJtYXRyaXgoMi42NTYxIDAgMCAyLjY1NjEgLTMxLjI5NyAtNjMuMzc0KSIgZD0ibTMxLjM4OSA4LjAwNTljLTExLjY0OCAwLjI3MDQxLTIxLjY2MyA5LjAyMTctMjMuMTkxIDIwLjkzNC0xLjY4NjMgMTMuMTQ0IDcuNTk2MSAyNS4xNzcgMjAuNzQgMjYuODYzIDEzLjE0NCAxLjY4NjMgMjUuMTY1LTcuNTk0MSAyNi44NjUtMjAuNzM4IDEuNjg2My0xMy4xNDQtNy41OTUzLTI1LjE3OS0yMC43NTQtMjYuODY1LTEuMjMyMy0wLjE1OTQ0LTIuNDU1Mi0wLjIyMTMzLTMuNjYwMi0wLjE5MzM2em0xMS44NTkgOS4wMjczYzAuODU1NzQtMC4wMzYwMzEgMS43MjQxIDAuMjMyMSAyLjQzNzUgMC44MDg1OWwtMy4yMjg1IDMuMjEyOWMtMC4wODY0NzUgMC4xMDA4OS0wLjA4NjQ3NSAwLjI0NDgxIDAgMC4zNDU3bDIuNTA3OCAyLjQ5NDFjLTEuNDEyNCAwLjY5MTgtMy4xMTM2IDAuNDAzNDctNC4yMDktMC43MjA3bDAuMDEzNjcyIDAuMDI5Mjk3Yy0xLjM5OC0xLjQ1NTctMS4zNDA0LTMuNzYyMSAwLjExNTI0LTUuMTYwMiAwLjY2Mjk3LTAuNjM0MTUgMS41MDc1LTAuOTczNzQgMi4zNjMzLTEuMDA5OHptMi43ODMyIDEuMTM4N2MxLjMyNTkgMS40MjY4IDEuMjgyOCAzLjY0NzctMC4xMTUyMyA1LjAzMTItMC4xNzI5NSAwLjE1ODU0LTAuMzQ3MDUgMC4zMTc1Ni0wLjU0ODgzIDAuNDQ3MjdsLTIuNDA2Mi0yLjQwODIgMy4wNzAzLTMuMDcwM3ptLTAuMTIxMDkgMS44NTM1Yy0wLjA1OTQ1MS0wLjAxMDgxLTAuMTIzOTktOC43NGUtNCAtMC4xODE2NCAwLjAzNTE1Ni0wLjEyOTcxIDAuMDU3NjUyLTAuMjAyMTggMC4yMTU5OS0wLjE0NDUzIDAuMzQ1NyAwIDAuMDE0NDIgMC4wMTM2NzIgMC4wMTQ4NzcgMC4wMTM2NzIgMC4wMjkyOTcgMC4xNDQxMiAwLjI4ODI1IDAuMTE2NTggMC42NDc1Ny0wLjA5OTYwOSAwLjg5MjU4LTAuMTAwODkgMC4xMDA4OS0wLjExNjUxIDAuMjc0MTEtMC4wMTU2MjUgMC4zNzVsMC4wMTU2MjUgMC4wMTU2MjVjMC4wNTc2NSAwLjAxNDQyIDAuMTI5ODUgMC4wMTQ0MiAwLjE4NzUgMCAwLjA3MjA2MiAwIDAuMTU3OTMtMC4wNDM5MSAwLjIwMTE3LTAuMTAxNTYgMC4zNjAzMS0wLjQxNzk2IDAuNDMxMy0xLjAwOCAwLjE3MTg4LTEuNDk4LTAuMDM2MDMxLTAuMDUwNDQ1LTAuMDg4OTg2LTAuMDgyOTQxLTAuMTQ4NDQtMC4wOTM3NXptLTcuMjQ2MSAyLjUxNzZjMC41MTU5MiAwLjA0MTY2MSAwLjkyMDk3IDAuMjg1NyAxLjMyODEgMC42MTcxOS0wLjQ0Njc5IDAuMDE0NDItMC44NjQ1NyAwLjE4NjgzLTEuMTgxNiAwLjUwMzkxbC04LjkwODIgOC45MDYyLTEuOTAyMy0xLjkwMjNjNi41NzIxLTYuNTYxMyA5LjExNjMtOC4yNSAxMC42NjQtOC4xMjV6bTEuMzU3NCAxLjE2OGMwLjMxNzA4IDAgMC42MzM4OSAwLjExNzY2IDAuODc4OTEgMC4zNTU0NyAwLjI0NTAxIDAuMjQ1MDEgMC4zNzM3OSAwLjU3NjcxIDAuMzU5MzggMC45MDgyLTAuMDE0NDEyIDAuMzQ1OS0wLjE1ODU0IDAuNjYzOTMtMC40MTc5NyAwLjg5NDUzbC05LjM4MjggOC4yNzM0LTEuMTk1My0xLjI1MzkgOC44NzctOC44MjIzYzAuMjQ1MDEtMC4yMzc4IDAuNTYzNzgtMC4zNTU0NyAwLjg4MDg2LTAuMzU1NDd6bTEuMzgyOCAyLjIzMDVjLTAuMzAyNjYgMi42ODA3LTQuMDc4MSA2LjQ4NTQtNy45NTUxIDEwLjE4OWwtMS42NzE5LTEuNjcxOSA5LjM4MDktOC4yNTc4YzAuMDg2NDc1LTAuMDcyMDYxIDAuMTc0MDMtMC4xNTg4OCAwLjI0NjA5LTAuMjU5Nzd6bS0xMy43NSA1LjAxNTYgMS43NzM0IDEuODE2NC00LjAyMTUgMC44NjMyOGMtMC4wODY0NzUgMC4wMTQ0MTktMC4xNzMwOS0wLjA0MjQzNC0wLjE4NzUtMC4xMjg5MS0wLjAxNDQxMi0wLjA1NzY1Mi0yLjY5ZS00IC0wLjEwMTI5IDAuMDQyOTY5LTAuMTQ0NTNsMC4wNDI5NjktMC4wNTY2NCAyLjM0OTYtMi4zNDk2em0yLjI3NzMgMi4zNDk2IDAuOTk0MTQgMC45MjE4OC0yLjIwNTEgMC41NjI1Yy0wLjA0MzIzNyAwLjAyODgzOS0wLjA4NTY2OSAwLjAyODgzOS0wLjEyODkxIDAtMC4wMjg4MjQtMC4wNDMyNC0wLjAyODgyNC0wLjEwMTMgMC0wLjE0NDUzbDEuMzM5OC0xLjMzOTh6bTEuNDEyMSAxLjM2OTEgMS43NDQxIDEuNzQyMmMtMy4xMTMxIDIuNTk0Mi02LjU0MjQgNC44MDEtMTAuMjAzIDYuNTQ0OXYwLjAyNzM0M2gtMC4wMTU2MjVjLTAuMTg3MzYgMC4xMDA4OC0wLjI4NzM4IDAuMzA0MDktMC4yNDQxNCAwLjUwNTg2bDAuNDAyMzQgMS43Mjg1YzAuMDI4ODI0IDAuMTE1My0wLjAyODc1OSAwLjIzMTQxLTAuMTE1MjQgMC4yODkwNi0wLjA4NjQ3NSAwLjA3MjA2NC0wLjIxNTA1IDAuMDcyMDY0LTAuMjg3MTEgMGwtMi40NTEyLTIuNTIzNCA3LjUyMzQtNy41MzcxIDMuNjQ2NS0wLjc3NzM0em0tMTEuNTU5IDguNjc1OCAyLjQ1MTIgMi40MzU1LTQuMjA5LTAuMjczNDRjLTAuMDU3NjUyLTAuMDE0NDItMC4xMTY0NS0wLjA1ODMyMy0wLjEzMDg2LTAuMTAxNTYtMC4wMTQ0MTktMC4wNTc2NDgtMC4wMTQ0MTktMC4xMTQ5NiAwLTAuMTU4MmwxLjg4ODctMS45MDIzeiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg3MCkiIHN0cm9rZS13aWR0aD0iLjE0NDEyIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"postman,http,post,json\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"postman.Postman\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"postman\"\nLABEL oc.displayname=\"Postman\"\nLABEL oc.path=\"/usr/local/bin/Postman/app/Postman\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"postman\"\nENV APPBIN \"/usr/local/bin/Postman/app/Postman\"\nENV APP \"/usr/local/bin/Postman/app/Postman\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/postman/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/postman/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/postman/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/postman/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update powershell dbus-x11 gnome-terminal font-adobe-source-code-pro\nLABEL oc.icon=\"powershell.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlBvd2VyU2hlbGwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyMDQuNjkxcHgiIGhlaWdodD0iMTU0LjUyMXB4IiB2aWV3Qm94PSIwIDAgMjA0LjY5MSAxNTQuNTIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMDQuNjkxIDE1NC41MjE7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIHN0eWxlPSJkaXNwbGF5Om5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMjY3MUJFOyIgZD0iTS00Ny41NDcsMjI2Ljg3MgoJCWMwLTk3LjEyOSwwLjA5NC0xOTQuMjU5LTAuMTk1LTI5MS4zODdjLTAuMDIxLTYuOTgyLDEuNDA0LTguNDExLDguMzg4LTguMzg5Yzk0LjM5NywwLjI5MiwxODguNzk4LDAuMjkyLDI4My4xOTUsMAoJCWM2Ljk4NC0wLjAyMiw4LjQxLDEuNDA3LDguMzg5LDguMzg5Yy0wLjI4OSw5Ny4xMjgtMC4xOTUsMTk0LjI1OC0wLjE5NSwyOTEuMzg3Yy0zLjIzOCwyLjAwOC02LjgzNywxLjEyOS0xMC4yNjgsMS4xMzEKCQljLTkzLjAxNSwwLjA0OS0xODYuMDMxLDAuMDQ5LTI3OS4wNDcsMEMtNDAuNzExLDIyOC4wMDEtNDQuMzEsMjI4Ljg4LTQ3LjU0NywyMjYuODcyeiIvPgoJPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0UwRUFGNTsiIGQ9Ik0xMjAuMTQsMC4wMzJjMjMuMDExLTAuMDA4LDQ2LjAyMy0wLjA3OCw2OS4wMzQsMC4wMTkKCQljMTMuNjgsMC4wNTYsMTcuNTM3LDQuNjI3LDE0LjU4OCwxOC4xMzdjLTguNjM2LDM5LjU2Ni0xNy40NjYsNzkuMDkyLTI2LjQxNSwxMTguNTg5Yy0yLjgzLDEyLjQ4NC05LjMzMiwxNy41OTgtMjIuNDY1LDE3LjYzNwoJCWMtNDYuMDIzLDAuMTM3LTkyLjA0NiwwLjE1Mi0xMzguMDY4LTAuMDA2Yy0xNS4wNDMtMC4wNTMtMTktNS4xNDgtMTUuNzU5LTE5LjQwNEM5Ljg0OSw5Ni4yODcsMTguNjksNTcuNTgyLDI3LjYwMiwxOC44OTIKCQlDMzAuOTk3LDQuMTQ4LDM2LjA5OSwwLjEsNTEuMTA0LDAuMDU3Qzc0LjExNi0wLjAwOCw5Ny4xMjgsMC4wNCwxMjAuMTQsMC4wMzJ6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMjY3MUJFOyIgZD0iTTg1LjM2NSwxNDkuODEzYy0yMy4wMTQtMC4wMDgtNDYuMDI5LDAuMDk4LTY5LjA0Mi0wLjA1MwoJCWMtMTEuNjctMC4wNzYtMTMuNzkyLTIuODMtMTEuMTY1LTE0LjI0NGM4LjkwNi0zOC43MSwxOC4wOTktNzcuMzU1LDI2LjgwNy0xMTYuMTA5QzM0LjMsOS4wMTMsMzkuMzM3LDQuNDE5LDUwLjQ3Myw0LjUyMgoJCWM0Ni4wMjQsMC40MjcsOTIuMDU2LDAuMTM3LDEzOC4wODMsMC4xODRjMTEuNTQzLDAuMDExLDEzLjQ4MSwyLjQ4LDEwLjg5LDE0LjE4N2MtOC40MTMsMzguMDA3LTE2Ljg3OSw3Ni4wMDMtMjUuNDk0LDExMy45NjUKCQljLTMuMjI0LDE0LjIwNy02LjkzOCwxNi45MTgtMjEuODg1LDE2Ljk1MUMxMjkuODMzLDE0OS44NTYsMTA3LjU5OCwxNDkuODIxLDg1LjM2NSwxNDkuODEzeiIvPgoJPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0ZERkRGRTsiIGQ9Ik0xMDQuOTQ4LDczLjk1MWMtMS41NDMtMS44MS0zLjIzNy0zLjg5NC01LjAzMS01Ljg4NgoJCWMtMTAuMTczLTExLjMtMjAuMjU2LTIyLjY4NC0zMC42MS0zMy44MTVjLTQuNzM4LTUuMDk0LTYuMjQ4LTEwLjA0MS0wLjU1OC0xNS4wNjljNS42MjMtNC45NywxMS4xNDgtNC41MywxNi4zMDYsMS4xODgKCQljMTQuMzY1LDE1LjkxOSwyOC43MTMsMzEuODU2LDQzLjMxNiw0Ny41NTZjNS40NTIsNS44NjQsNC4xODIsOS44NTEtMS44MjMsMTQuMTk2Yy0yMy4wNDksMTYuNjgzLTQ1Ljk2OCwzMy41NDctNjguODYyLDUwLjQ0MwoJCWMtNS4xNDYsMy43OTktMTAuMDUyLDQuNzUtMTQuMjA5LTAuODYxYy00LjU4Ni02LjE4OS0wLjM0My05Ljg3MSw0LjQxNC0xMy4zMzVjMTcuMDEzLTEyLjM5MiwzMy45OTMtMjQuODMsNTAuOS0zNy4zNjYKCQlDMTAxLjE0Niw3OS4yNTYsMTA0LjUyNyw3OC4yMzgsMTA0Ljk0OCw3My45NTF6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkNGREZEOyIgZD0iTTExMi4yMzUsMTMzLjgxOWMtNi4xOTYsMC0xMi40MDEsMC4yMTMtMTguNTgzLTAuMDY4CgkJYy00LjkzMi0wLjIyMy03LjktMi45NzktNy44MzgtOC4xNzRjMC4wNi00LjkxMiwyLjUzNi04LjYwNSw3LjQ2My04LjczOGMxMy41NDItMC4zNjMsMjcuMTA0LTAuMjg1LDQwLjY1MS0wLjAyCgkJYzQuMzA1LDAuMDg0LDcuNDgzLDIuODg5LDcuNDU3LDcuMzc1Yy0wLjAzMSw1LjE0Ni0yLjczOSw5LjEzMy04LjI1LDkuNDY1Yy02Ljk0NCwwLjQyLTEzLjkzMSwwLjEwNC0yMC44OTksMC4xMDQKCQlDMTEyLjIzNSwxMzMuNzgsMTEyLjIzNSwxMzMuOCwxMTIuMjM1LDEzMy44MTl6Ii8+CjwvZz4KPC9zdmc+\"\nLABEL oc.keyword=\"powershell,powershell\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"gnome-terminal-server.powershell\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nENV ARGS=\"--class=powershell -- /usr/bin/pwsh\"\nLABEL oc.name=\"powershell\"\nLABEL oc.displayname=\"Powershell\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/hlp;\"\nLABEL oc.fileextensions=\"hlp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"powershell\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--class=powershell -- /usr/bin/pwsh\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/powershell/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/powershell/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/powershell/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/powershell/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update putty\nLABEL oc.icon=\"circle_putty-unix.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI1MTkuMiIgeDI9IjUxOS4yIiB5MT0iMTAyNC44IiB5Mj0iNC44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wNjM1ODYgMCAwIC4wNjM1ODMgLS41NTYxNyAtLjU1Mjg1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNjA2MDYwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQxNDE0MSIgb2Zmc2V0PSIuMDE5NTUxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTFlMWUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZyIgeD0iLS4wMzE2NTIiIHk9Ii0uMDQxOTQ3IiB3aWR0aD0iMS4wNjMzIiBoZWlnaHQ9IjEuMDgzOSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC42MTA2NTg0MiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjQwOS41NyIgeDI9IjQwOS45NCIgeTE9IjU0Mi44IiB5Mj0iNTA0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDUyMywwLDAsMS4wMjc2LC03Mi41NjgsLTguNjkzMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg2ZDBmYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNzk0ZjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMzg2LjU5IiB4Mj0iNDE0LjQ5IiB5MT0iNTMyLjk3IiB5Mj0iNTMwLjU5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC44NTcxNyAwIDAgLjg1NzE5IC0yOTEuNDMgLTQxMi4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYmViZWIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iaSIgeD0iLS4wNTk5OTgiIHk9Ii0uMDYwMDAyIiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjY5OTk5NzkyIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iNDguNSIgeDI9IjQ4LjUiIHkxPSIzOSIgeTI9IjU4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4xNzIzMSAwIDAgLjE3MDI1IDE1LjY1MSAtMTA1LjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTc2OWNjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVlZTZmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5IDAgMCAyLjE0MjkgLTgyNi4zNiAtMTEwNy41KSIgY3g9IjQwMC41NyIgY3k9IjUzMS44IiByPSIxNCIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjczMzMzIi8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KIDxwYXRoIGQ9Im01MC4yNDkgOC4xOTMycS0zLjg1OTctMi45NzI1LTguNDQ0LTQuNTU1Ny00LjczNzItMS42MzczLTkuODAyMS0xLjYzNzNjLTE2LjU3IDAtMzAuMDAzIDEzLjQzMi0zMC4wMDMgMzAuMDAxIDAgMTUuMTU4IDExLjI0NSAyNy42ODQgMjUuODQ1IDI5LjcwOSAwLjcxMjE2IDAuMDk4NTUgMS40MzM5IDAuMTc0ODUgMi4xNTg3IDAuMjE5MzYgMC42NjEyOCAwLjA0MTMzIDEuMzI1OCAwLjA2OTk0IDEuOTk5OCAwLjA2OTk0IDE2LjU2NyAwIDI5Ljk5Ny0xMy40MzIgMjkuOTk3LTI5Ljk5OSAwLTEuMzA5OC0wLjA4MjY2LTIuNjAzNy0wLjI0NDgxLTMuODY1OC0wLjE4NzU4LTEuNDc1MS0wLjQ5Mjc5LTIuOTA5LTAuODgzODctNC4zMDQ2cS0xLjMyODktNC42ODkyLTQuMDgyMi04LjcyNjUtMi43MjE1LTMuOTc3MS02LjU0MDEtNi45MTEyeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIuOTk3MjQiLz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC40NjU4NiAtLjA1NTU2NiAuMDU3MjU4IC40NTIwOSAtMjExLjQxIC0xNTYuNjMpIj4KICA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjczNSAuMjEzMjUgLS4yMTMyNSAxLjczNSAtNDYuMTE3IC01MjkuNzYpIiB4PSIzMzQuMjMiIHk9IjUxMy4xMyIgd2lkdGg9IjQ2LjMwMyIgaGVpZ2h0PSIzNC45MzkiIHJ5PSIxLjY0NDIiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWxsPSJ1cmwoI2EpIi8+CiAgPGcgZmlsbD0iI2Q1ZmZmZiI+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ5OC4zNSIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODkuODMiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDgxLjMxIiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjQ2NTg2IC0uMDU1NTY2IC4wNTcyNTggLjQ1MjA5IC0yMDYuNDEgLTE0OS42MykiPgogIDxyZWN0IHRyYW5zZm9ybT0ibWF0cml4KDEuNzM1IC4yMTMyNSAtLjIxMzI1IDEuNzM1IC00Ni4xMTcgLTUyOS43NikiIHg9IjMzNC4yMyIgeT0iNTEzLjEzIiB3aWR0aD0iNDYuMzAzIiBoZWlnaHQ9IjM0LjkzOSIgcnk9IjEuNjQ0MiIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuNzUiLz4KICA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjczNSAuMjEzMjUgLS4yMTMyNSAxLjczNSAtNDYuMTE3IC01MjkuNzYpIiB4PSIzMzQuMjMiIHk9IjUxMy4xMyIgd2lkdGg9IjQ2LjMwMyIgaGVpZ2h0PSIzNC45MzkiIHJ5PSIxLjY0NDIiIGZpbGw9InVybCgjYSkiLz4KICA8ZyBmaWxsPSIjZDVmZmZmIj4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDk4LjM1IiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ4OS44MyIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODEuMzEiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICA8L2c+CiA8L2c+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KC44NTQwOSAuMDcyNTY5IC0uMDcyODMgLjg1NDA5IC0yNTUuMzcgLTQzNS4yNikiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNpKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguOTk2NDEgLjA4NDY2MiAtLjA4NDk2NCAuOTk2MzggMCAwKSIgZD0ibTYzLjkyOSA0My43ODFhMTIgMTIuMDAxIDAgMCAxLTEyIDEyLjAwMSAxMiAxMi4wMDEgMCAwIDEtMTItMTIuMDAxIDEyIDEyLjAwMSAwIDAgMSAxMi0xMi4wMDEgMTIgMTIuMDAxIDAgMCAxIDEyIDEyLjAwMXoiIGZpbGw9InVybCgjaCkiLz4KIDxwYXRoIGQ9Im01MCAzOS03IDExaDZsLTIgOCA3LTExaC02eiIgZmlsbD0idXJsKCNkKSIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"putty-unix,putty,ssh,terminal\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"putty.Putty\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"putty-unix\"\nLABEL oc.displayname=\"Putty Unix\"\nLABEL oc.path=\"/usr/bin/putty\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"putty-unix\"\nENV APPBIN \"/usr/bin/putty\"\nENV APP \"/usr/bin/putty\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/putty-unix/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/putty-unix/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/putty-unix/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/putty-unix/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/putty-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nRUN mkdir -p /composer/bin\nRUN curl -Ls -o /composer/bin/putty.exe https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"putty.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMjAwMTA5MDQvL0VOIgoiaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQiPgo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMTI4LjAwMDAwcHQiIGlkPSJzdmcxMTU4IiBpbmtzY2FwZTp2ZXJzaW9uPSIwLjM5Y3ZzIiBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9hbmR5L0Rlc2t0b3AvZXRpcXVldHRlLWljb25zLTAuMy9zY2FsYWJsZS9hcHBzIiBzb2RpcG9kaTpkb2NuYW1lPSJnbm9tZS10ZXJtaW5hbC5zdmciIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiIHdpZHRoPSIxMjguMDAwMDBwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiPgogIDxtZXRhZGF0YT4KICAgIDxyZGY6UkRGIHhtbG5zOmNjPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzp0aXRsZT5FdGlxdWV0dGUgSWNvbnM8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkZXNjcmlwdGlvbj48L2RjOmRlc2NyaXB0aW9uPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+aGFzaDwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPjwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPmFwcGxpY2F0aW9uPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+Y29tcHV0ZXI8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5pY29uczwvcmRmOmxpPgogICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50IHJkZjphYm91dD0iaHR0cDovL3d3dy5vcGVuY2xpcGFydC5vcmciPgogICAgICAgICAgICA8ZGM6dGl0bGU+QW5keSBGaXR6c2ltb248L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnB1Ymxpc2hlcj4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkFuZHkgRml0enNpbW9uPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpyaWdodHM+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5BbmR5IEZpdHpzaW1vbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxkYzpkYXRlPjwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICAgICAgPGNjOmxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9QdWJsaWNEb21haW4iLz4KICAgICAgICA8ZGM6bGFuZ3VhZ2U+ZW48L2RjOmxhbmd1YWdlPgogICAgICA8L2NjOldvcms+CiAgICAgIDxjYzpMaWNlbnNlIHJkZjphYm91dD0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUHVibGljRG9tYWluIj4KICAgICAgICA8Y2M6cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL1JlcHJvZHVjdGlvbiIvPgogICAgICAgIDxjYzpwZXJtaXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGlzdHJpYnV0aW9uIi8+CiAgICAgICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EZXJpdmF0aXZlV29ya3MiLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMgaWQ9ImRlZnMxMTYwIj4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxNzIyIj4KICAgICAgPHN0b3AgaWQ9InN0b3AxNzIzIiBvZmZzZXQ9IjAuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogICAgICA8c3RvcCBpZD0ic3RvcDE3MjQiIG9mZnNldD0iMS4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjAwMDAwMDA7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE3MjEiIHgxPSIwLjg1NzE0Mjg3IiB4Mj0iMC42NTUxNzI0MSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTcyMiIgeTE9Ii0wLjQ2MDkzNzUwIiB5Mj0iMC43MzQzNzUwMCIvPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MTgiPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MTkiIG9mZnNldD0iMC4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjcwMDU2NDk4OyIvPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MjAiIG9mZnNldD0iMS4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjAwMDAwMDA7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDMwNDUiIHgxPSIwLjY3NzI5MDg2IiB4Mj0iMC41MDU5NzYwOCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTUxOCIgeTE9Ii0xLjEyOTAzMjMiIHkyPSIwLjg3MDk2Nzc1Ii8+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTU0NCI+CiAgICAgIDxzdG9wIGlkPSJzdG9wMTU0NSIgb2Zmc2V0PSIwLjAwMDAwMDAiIHN0eWxlPSJzdG9wLWNvbG9yOiMzNzUzNjc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTQ3IiBvZmZzZXQ9IjAuNDMxNTY0MjQiIHN0eWxlPSJzdG9wLWNvbG9yOiMzZTZhOGM7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTQ2IiBvZmZzZXQ9IjEuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6IzhjYzZlZTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQzMDQ2IiB4MT0iMC43MDUzMTM5OCIgeDI9IjAuNzM0Mjk5NTQiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE1NDQiIHkxPSItMC4zNTkzNzUwMCIgeTI9IjEuNDM3NTAwMCIvPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MTEiPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MTIiIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwMDtzdG9wLW9wYWNpdHk6MTsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTEzIiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmY7c3RvcC1vcGFjaXR5OjE7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MzciIHgxPSIwLjc3MjAyMDcwIiB4Mj0iMC42MDYyMTc2MiIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTUxMSIgeTE9IjMuNzk1NDU0NSIgeTI9Ii0wLjE0MzkzOTM5Ii8+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTgwNiI+CiAgICAgIDxzdG9wIGlkPSJzdG9wMTgwNyIgb2Zmc2V0PSIwLjAwMDAwMDAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNDA3ODQzMTQ7Ii8+CiAgICAgIDxzdG9wIGlkPSJzdG9wMzI3NiIgb2Zmc2V0PSIwLjY0Nzc3NzgwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjA3OTA5NjA0MjsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxODA4IiBvZmZzZXQ9IjEuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MC4wMDAwMDAwOyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudCBjeD0iMC40OTAzMjI1OSIgY3k9IjAuNTA2NDkzNTEiIGZ4PSIwLjU0MzU1NDAxIiBmeT0iMC4xOTIzMDc3MCIgaWQ9InJhZGlhbEdyYWRpZW50MTUyOCIgcj0iMC40NjAxNDI4OCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTgwNiIvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3IGJvcmRlcmNvbG9yPSIjNjY2NjY2IiBib3JkZXJvcGFjaXR5PSIxLjAiIGlkPSJiYXNlIiBpbmtzY2FwZTpjeD0iMTY3LjIxNDkwIiBpbmtzY2FwZTpjeT0iMzAuNzMyNTc4IiBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIiBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1OTciIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzgzIiBpbmtzY2FwZTp3aW5kb3cteD0iLTUiIGlua3NjYXBlOndpbmRvdy15PSI3MSIgaW5rc2NhcGU6em9vbT0iMS41NDU3MzkxIiBwYWdlY29sb3I9IiNmZmZmZmYiLz4KICA8cGF0aCBkPSJNIDgyLjA1NTMxMyAxNzUuODM1MjQgQSA1Ni4xNDMxMDggNTYuMTQzMTA4IDAgMSAwIC0zMC4yMzA5MDQsMTc1LjgzNTI0IEEgNTYuMTQzMTA4IDU2LjE0MzEwOCAwIDEgMCA4Mi4wNTUzMTMgMTc1LjgzNTI0IHoiIGlkPSJwYXRoMjY3MyIgc29kaXBvZGk6Y3g9IjI1LjkxMjIwNSIgc29kaXBvZGk6Y3k9IjE3NS44MzUyNCIgc29kaXBvZGk6cng9IjU2LjE0MzEwOCIgc29kaXBvZGk6cnk9IjU2LjE0MzEwOCIgc29kaXBvZGk6dHlwZT0iYXJjIiBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTUyOCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0OyIgdHJhbnNmb3JtPSJtYXRyaXgoMS41ODcxNzQsMC4wMDAwMDAsMC4wMDAwMDAsMC4zNTc5NzYsNDcuOTI2NzIsNTguMDE0MDQpIi8+CiAgPHBhdGggZD0iTSA4Mi4wNTUzMTMgMTc1LjgzNTI0IEEgNTYuMTQzMTA4IDU2LjE0MzEwOCAwIDEgMCAtMzAuMjMwOTA0LDE3NS44MzUyNCBBIDU2LjE0MzEwOCA1Ni4xNDMxMDggMCAxIDAgODIuMDU1MzEzIDE3NS44MzUyNCB6IiBpZD0icGF0aDI0NDkiIHNvZGlwb2RpOmN4PSIyNS45MTIyMDUiIHNvZGlwb2RpOmN5PSIxNzUuODM1MjQiIHNvZGlwb2RpOnJ4PSI1Ni4xNDMxMDgiIHNvZGlwb2RpOnJ5PSI1Ni4xNDMxMDgiIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE1MjgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoxLjAwMDAwMDBwdDsiIHRyYW5zZm9ybT0ibWF0cml4KDEuMzIzNTEyLDAuMDAwMDAwLDAuMDAwMDAwLDAuMzE0OTU1LDM4LjI2MDYwLDYxLjcxNDQwKSIvPgogIDxwYXRoIGQ9Ik0gMjQuNDA3Mzc4LDIxLjEyNzQ5MCBDIDE3LjU1NjcwMSwyMS4xNjQxMzEgOS40MjM5MDM2LDI5LjQ4NTU4NyAxMC40OTIzODEsMzYuMjUyNDk3IEwgMjEuMzgyMzg1LDEwNS4yMjI1MiBDIDIyLjI1MjMyNCwxMTAuNzMyMTAgMjYuNjk1MDExLDExNy45OTk0NyAzMi4yNzIzODksMTE3LjkyNzUyIEwgMTI2LjA0NzM3LDExNi43MTc1MiBDIDEzMS4xODg0NSwxMTYuNjUxMTggMTM2LjQzNjc1LDExMS40NTM3NCAxMzcuNTQyMzQsMTA2LjQzMjUyIEwgMTUyLjA2MjM3LDQwLjQ4NzQ5OCBDIDE1My44MzE4NCwzMi40NTEwOTMgMTQ1Ljc3MTE4LDIwLjQ3ODQ4MiAxMzcuNTQyMzQsMjAuNTIyNDg5IEwgMjQuNDA3Mzc4LDIxLjEyNzQ5MCB6ICIgaWQ9InBhdGgyNjUzIiBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6eiIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDE1MzcpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoyLjEyNTAwMDA7c3Ryb2tlOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogIDxwYXRoIGQ9Ik0gMjMuODAyNDA3LDM1LjY0NzQ5MyBMIDMzLjQ4MjM2OSwxMDUuODI3NTEgTCAxMzAuMjgyNDIsMTAyLjgwMjUyIEwgMTM4Ljc1MjQ5LDM1LjA0MjUwMiBMIDIzLjgwMjQwNywzNS42NDc0OTMgeiAiIGlkPSJwYXRoMjY1NCIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDMwNDYpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50MzA0NSk7c3Ryb2tlLXdpZHRoOjEuMTQ3MTk1MjtzdHJva2Utb3BhY2l0eTowLjMxMjg0OTEzOyIvPgogIDxwYXRoIGQ9Ik0gMjMuODgyNTE4LDIwLjY1MDQ2OSBDIDE0LjkxMjc4MSwyMC42ODM4OTkgMTEuMzE5MDc5LDI2Ljk4OTE1NiAxMi4zODc1NTYsMzIuOTcwNTAwIEMgMTcuODgyOTk2LDI3LjU3NjY2NyAyMC4wNTA4MzEsMjUuNDY0NTA5IDI1Ljg0ODc4MSwyNS4zNDE1MTQgTCAxMzAuMzYyNTEsMjQuNDQ1NDc2IEMgMTQxLjU1NTA0LDIzLjY3MjQxOSAxNDIuMjQxOTMsMjcuMDk4MzQ0IDE0OS40MjAwMCwzNC40NDYzNDAgQyAxNDkuNzQzNTQsMzAuOTA1NzY5IDE0NS4yNDYzMiwyMC4xOTgxMjQgMTM3LjAxNzQ3LDIwLjIyODc5NyBMIDIzLjg4MjUxOCwyMC42NTA0NjkgeiAiIGlkPSJwYXRoMjY1NSIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY3p6IiBzdHlsZT0iZmlsbDojMTkxOTE5O2ZpbGwtb3BhY2l0eTowLjIwNzU0NzE3O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoyLjEyNTAwMDA7Ii8+CiAgPHBhdGggZD0iTSAyMy4zNTg4MzksMzEuNzkxMjk2IEMgMjMuMzU4ODM5LDMxLjc5MTI5NiAzOC4xMTc2NjgsNzEuMjE5MTU3IDYyLjAzODkwOCw2NS4zNjE2NTcgQyA4NS45NjAxNDksNTkuNTA0MTU3IDExNy40MzU0OSw1NS45ODk2NjQgMTI0Ljk4OTU1LDc4LjI0ODE4MSBDIDEzMi41NDM2NCwxMDAuNTA2NjkgMTMwLjAyNTYyLDk5LjMzNTE4NyAxMzAuMDI1NjIsOTkuMzM1MTg3IEwgMzMuNTM2NDM2LDk4LjE2MzY4NyBMIDIzLjM1ODgzOSwzMS43OTEyOTYgeiAiIGlkPSJwYXRoMjY1OCIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxNzIxKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwcHQ7Ii8+PHRleHQgaWQ9InRleHQxMjMyIiBzdHlsZT0iZm9udC1zaXplOjEyLjAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwcHQ7Zm9udC1mYW1pbHk6aGVsdmV0aWNhOyIgeD0iMS4wODA3NzYxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIxODAuMzI4MzUiPjx0c3BhbiBpZD0idHNwYW4xMjMzIj5UZXJtaW5hbDwvdHNwYW4+PC90ZXh0Pjx0ZXh0IGlkPSJ0ZXh0MTIzNSIgc3R5bGU9ImZvbnQtc2l6ZToxMi4wMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0O2ZvbnQtZmFtaWx5OmhlbHZldGljYTsiIHRyYW5zZm9ybT0ic2NhbGUoMC4yNDY3MjksMC4yNDY3MjkpIiB4PSIyMy4xODgzNTEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9Ijc1Mi40Mjg2NSI+PHRzcGFuIGlkPSJ0c3BhbjEyMzYiPlNWRyAgSW1hZ2UgQ3JlYXRlZCBieSBBbmRyZXcgRml0enNpbW9uPC90c3Bhbj48dHNwYW4gaWQ9InRzcGFuMjE5NSIgc29kaXBvZGk6cm9sZT0ibGluZSIgeD0iMjMuMTg4MzUxIiB5PSI3NjQuNDI4NjUiPkljb24gaW5zcGlyZWQgYnkgR2FycmV0cyBCbHVlY3VydmUgR2FpbSBpY29uPC90c3Bhbj48L3RleHQ+CiAgPHBhdGggZD0iTSA3Mi43Nzc0NjIsNjguNjkzNTY4IEwgNzIuNzc3NDYyLDczLjIzNTU4OCBMIDU3LjYwMTg5OSw3My4yMzU1ODggTCA1Ny42MDE4OTksNjguNjkzNTY4IEwgNzIuNzc3NDYyLDY4LjY5MzU2OCB6IE0gMzYuNTA3Mjk2LDQ3LjYwMzA5OCBMIDM2LjUwNzI5Niw0My4yMDE5MTYgTCA1NC43OTIxMzcsNTEuMzUyOTA2IEwgNTQuNzkyMTM3LDU1LjUwNzYyMyBMIDM2LjUwNzI5Niw2My42NTg2MTQgTCAzNi41MDcyOTYsNTkuMjU3NDMyIEwgNTAuMjcwODQ3LDUzLjQ0Nzg2OSBMIDM2LjUwNzI5Niw0Ny42MDMwOTggeiAiIGlkPSJ0ZXh0OTM3IiBzdHlsZT0iZm9udC1zaXplOjI0LjAwMDAwMDtmb250LXN0eWxlOm9ibGlxdWU7Zm9udC13ZWlnaHQ6Ym9sZDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuNzk4NzQyMTI7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0O2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7Ii8+Cjwvc3ZnPgoK\"\nLABEL oc.keyword=\"putty-wine,wine,putty,ssh,terminal\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"putty.exe.putty.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nENV ARGS=\"/composer/bin/putty.exe\"\nLABEL oc.name=\"putty-wine\"\nLABEL oc.displayname=\"Putty Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/wine64\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"putty-wine\"\nENV APPBIN \"/usr/bin/wine64\"\nLABEL oc.args=\"/composer/bin/putty.exe\"\nENV APP \"/usr/bin/wine64\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/putty-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/putty-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/putty-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/putty-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends qelectrotech && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"qelectrotech.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxMi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDUxNDQ4KSAgLS0+Cgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJMaXZlbGxvXzEiCiAgIHdpZHRoPSIxMjgiCiAgIGhlaWdodD0iMTI4IgogICB2aWV3Qm94PSIwIDAgMTE2IDExNiIKICAgb3ZlcmZsb3c9InZpc2libGUiCiAgIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDExNiAxMTYiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYrZGV2ZWwiCiAgIHNvZGlwb2RpOmRvY25hbWU9IiBRRWxlY3Ryb1RlY2guc3ZneiIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmd6Lmlua3NjYXBlIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL3BpbmhlaXJvL3BpY3Mvb3h5Z2VuLWljb25zL3NjYWxhYmxlL2FwcHMvUUVsZWN0cm9UZWNoMTI4LnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjM2MCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjM2MCI+PG1ldGFkYXRhCiAgIGlkPSJtZXRhZGF0YTM3NzQiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnMzNzcyIj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM0MCI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MzQyIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MzQ0IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzMDMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNTMwNSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDUzMDciIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MjY3Ij48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUyNjkiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTMxNSIKICAgICAgIG9mZnNldD0iMC42ODY4MjY5NCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNDk4MDM5MjI7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjE2NjY2NjY3OyIKICAgICAgIG9mZnNldD0iMC43ODcyNTk1OCIKICAgICAgIGlkPSJzdG9wNTMxNyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDUyNzEiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE4MyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MTg1IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNTE4NyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTUzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UzZTNlMztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUxNTUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlM2UzZTM7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MTU3IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3NhbmRfYml0bWFwIgogICAgIGlkPSJwYXR0ZXJuNTE0OSIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTk3MzAxMSwxMTQuOTM4MzUsLTM4LjgwNjk1NikiIC8+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTYW5kIChiaXRtYXApIgogICAgIGlkPSJwYXR0ZXJuNTY3NiIKICAgICBoZWlnaHQ9IjI1NiIKICAgICB3aWR0aD0iMjU2IgogICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiPjwhLS0gU2VhbWxlc3MgdGV4dHVyZSBwcm92aWRlZCBieSBGcmVlU2VhbWxlc3NUZXh0dXJlcy5jb20gLS0+PCEtLSBMaWNlbnNlOiBjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIC0tPjxpbWFnZQogICAgICAgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFJQUl3QWpBQUQvMndCREFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCIEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUgvMndCREFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIgQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUgvd0FBUkNBRUVBUVFEQVNJQSBBaEVCQXhFQi84UUFIUUFBQWdJREFRRUJBQUFBQUFBQUFBQUFCZ2NGQ0FBREJBa0JBdi9FQUVJUUFBSUNBQVVEQkFFQ0JBUUZBd0VJIEF3VUdCQWNCQXdnVkZnQVhKUUlSRkNZbklUVVlKRFpGRXpFM1Jna1NRVlZXS0ZGMVpUUTRSMWRoWm1kMmhZYVYvOFFBR1FFQUFnTUIgQUFBQUFBQUFBQUFBQUFBQUFnTUFBUVFGLzhRQU94RUFBZ0lCQXdNREJBRUJCZ1VEQlFFQUFRSURFUklFRXlFQUlqRWpNa0VVUWxGaCBNME1GSkZKaWNZRTBVNUdoc1JWamNuT0N3dEhoOFAvYUFBd0RBUUFDRVFNUkFEOEFyMnlDNm5yUkxyZTM2K3p2OEZqZkpMWW4wYlpCIGdRdEMyaDN1NG9IcCt5S3JXME5iRDJCTXNiYjN3NjRFMFlXK1hrTWVBaHVyamdBQmdBcUtnOEQrd1BpU3JwSDhkRGpBdTdUNWFOajAgMlNzQzdhWGE0ZElWUFQ5YzJNSlBSYTN3WkJFeTFJVkpRQXlxMnNFRUNuczlscytLTjlKZHF2MkJnZmw5Z0Fmb3dWRkhnNi9nV28xVSBqUDAza3FmNFRXN0NZVmJPY1BtdVN4TEtLL0g2MitIVzZmTEhoMVJESDc0aDJaM2tGKzd4dmxYSS9hSUFBNThmOCtId3JjcDljdml2IGU1ZVZWdEp1NlNTaU1DUzdJOWVzbjhMNlFVS0dHRDdnbnNqNStPRDJuOXRPTGRRRTFkWFpxek9Pd1Nyamx1Z0Q1L253RHo0eVJ5WVQgR1daMmRJeklra2ZwU05BdGJJVmlYd3UzczB3OGNmbVJMRzd3UEdtQ1BOR1MyV1c0NUhlL2dZMzIwTE5mbnA1SjQ5MGdaZVRtMUxEQyBVUFlLR2t5OU45MldRWTRIYlRRNzIxcWdNT0MxekNHbnVCQ1o4Q2o5US9BK0NvYUh0bjR1NE9BUGVBQU1HLzR2aTdOTTlINVZvSitvIGUzMHJzUGxXbzJzSkF4aElpQjJoTjU1Rk1FSWI1Q2hyWWNjNFFWS3dJRnFKN040c1p3Zm0xb28vZ1BBWThCNldOVDJZRHI2NURKbXYgYmFKWnprSHE3cytCc0llcGh5aC9zM2FIZEJ3Y0VPR0h0UmdtSE9Id0ozQmlkTnRBd1lqOXJra0Y1LzMrL2RTTlowVzBYSklEMUxYMSBWMG0rU251Z1lrZ0FoMU93bUhJVVhsUmY1d3pxRXRTeUVNZWhxdEQzQldqd3lMUFp0WFpoanc3QkxSLzZIK2Zuai9VbmNSNHp4ek9yIHlvNmFoREQyTEFjTndwSXp0SE5YR1FmVG5IdHFzajFJaXpyTHBwNEZLUlBDOFdkSEhoOHdDb1NWTXFVa3h5SmRkd2FoU1VqcTlmejYgZm1EN2ZyR05USzI3UnJOa2FNN2xyZXNueHlRN0JmQU1NZ1ltQ0U5a1VCMitWS1BmSUtlalBLdXI4bTRUKy83K0ErZzRiLzJIRWR3eiBiTXZKenh1Qy9rT2xnTlhKQThsV1ZmdG44TkpSaHNhS1lIMlRXOTFtQTh4aC9rQjZsWTB6YzFkb0pvd00xVnhzSHg4QWduK0E4QjZZIFQ0NGFqSHl2NjN6V2pQc2g4VWdMSUpUbFViSXJLYlYxWHNMU0JReDBORFc0YjVNcjl3Zzgvbm5FTm1SaWdwNVJ2ellrN0IrWGQvOEEgUHIvWlVjekxWNmZhclFnVkxWM3p6RC9ZVkh1QUg1YWVCS0NZb0Z3WGpOOEovd0FPdHlEaDdrRktDdG95TnlpekJtOWhRbHFWRGJxQyBmZmorRDlpZllSS3F4c3hmMUpGVENOTWtqdjcweVl5TElQdGFTU1d1Y1FPY282d0gwNFV4MmtkbWtac3BKS3dBVjhRa1F4NW94eEpkIG5MTGl1T3A3UVUzZFhzSUMydmhLN0xHc0kzZHp4cHBQV3d3aDd1S1VOYlVXWVFYTElaSEQ4ZjhBQjIxZmJWWGpUTTBDeGlNRGRuYzAgREFQMUIxRndIWUg3QXFyTTVxRlRhekcyRG0xdXRtRnh4TjNkSHRTMmsvdVIyNTdOMUtIK0dIcmREd1ErU0hLMDdsbkxnd1dTbE5zdyB4SHBNSTdiQUE1L2l2bno2Q2dpdDRQQkN3Y3d6YjRIRmJzNW9XNUs5ZERzQmFGT3EzeUxYdGMwMnlWZXQxV3Qyb0g0K0hhbTFnQWczIEJack44M1RZN1JkdURvUFBzUDMvQUtnYndIc2xnMm8xV3FHdVpBVzR0cU5wYXAycVpIYkErbk9WTFZ6d2V2dzdJSDFJQjZUSEdFZEQgcjg5QmhpM2xvRkUyYjk3dzU5N2Y1NEFCa2tacFN4WjMzYWtKTDV4bzdVSGlqZWhuaHhrMktYYTBvSFVpWEVNbVNKZzVTMGpyT3NlUyBNelZYNHMwQ2Vlb0VkbDFQS3JNd0J5bkJ0R3E1S05wN0lEY240bnhRUGZnV3lFRStHK0xhMnRrREJ6a0VCSHJmMmFiNEdrMGMyN2M0IDJCK1FRSG4wSHJkWUdYRHErNEprQ3hrODJIN3dWTFlLdVNpT0R1WVYxZXZIeG9vZGdaRU1Qeng5SG1BZjdIdGd4REZzek53bm0xNGYgcnY4QXdGQndBZGl1NkIzd3hVc0FvMXY4MnhueGtkMmdPbmo2OVExZUxMUFNsdGdyZFA4QWgyb3lEMlN1UUpIdmdZV1ZrWHhuZkFqdCBTWno5L3dEN0JoUHRnZTZGd3BkaWJWV2NOVlF5UzJyeVBEY1Zkc2hsSmJEWEo1YnNDdHpFd05NRDEvZzg0MmZiVUV3em95dTBMTlFIIE9FdXh6Z093QVAzOWdhaXVWUnZPYnFsVmhxSXJvWDkyR1g0NXlJOGl1cHVKSzBqT01jYzZGM2UySTcrQjdzZ1AxNDV2aGcwdlY5ZDIgV0x0b1cwV1RHVks1eWFkYkhDdDNZd3ZNbW55cGJDN1NwNi9hbDJwNGREdFN2MXVDZVlFTkd1QW43L1p2ZElTUVovOEFyNCtBQVB5LyBXbFBlRS90V2t0cjVEd28xWHM1dGxoMG15TFlxZGtLVWpZZTF3MThPeVBsRGh3NDlibk5xZlBnek1Wa29MWmlmOWJkb2dCL3dHTDk3IDJFVDJ0a3I2bGlXVUd1QWxFclN3Z2t0Z3RTcTNCZU1OQ3V2RkxrVzhBOHlHeVExdFBaRWNDNDl1ZHNSaWxvak5qQ0pPK2NCUWZmMzYgWGluRHFzV1ljRTBYcUViWmxYamUwOGhxdWFTV01ORXJUZ2gxZk1JUS9lWXQvd0E0anRyQUJCek5zdzRLVDl0a2VNR0ErQSsvZTNTciBmWmxXUjhOMloyUUtNNUhqR0dMeHBhNVhaeUdReEFYazN3SktyVFJyZGU0azRvdnRyTjZPRjBhN1RaRGZqcXhjTjBjQmVZNGJOVlpKIFBNbUcyMlZkUHlSOWhUQUthd2xiR2hqekNHNEIvcjdKQm4xOVdqVVl0KzMxZFg3UWRrelp2WU4vNERib0RnSUNxSU5zdEJJMDdWN1IgWWF1Q2NPNlVwdHRndzFOVHhacjVMUTBqZm9aQ0crVEllbVBoOFBzc25nWjNCc1dobzV6dmZDZC8yRGY5L1BvUFI1VWF2WDRHUGsyWCBhRjVPeUhkd2RsRTEreURXQmVjS3Y1WWVvZUd3R0Zzd1ltTW16ZzU5WDc0SDR3TGFCak52ZFhlQTJBQWY4QmgxRHZraVdrUGhKTmdWIEtic0trWWNubEZlMkU0Y2JxOFdXRi9EWUZ0d2ZGdUd0anpFRnRzREVHeW93eDhmQmhQdWtFMk5CL2Z3QUR3QlFpTlpzQ0hsZEtkbFIgTDJhOFRHbU9XRm1rNHlzOXc0SkdUY0M5dllrbkdmbk5PREltUEdOMnZObi9BRVBRMnRzbGZ4WWV5bnJVN00xeUhweW5IaUhuVitKbSBBWHhJY25LcTAraDMyWXRoMlMwRERVZXIvVVBWYko5b1Z5Wk00azFjRU9JUDBGQjZZVFF2MkFNdFFiV21xQjJXM3k3cVpHbG1CMmhqIDlYYktBVjJGb2xJZmV6NWtOd1R4NFo0UGQ2ZmhqSG1yL3dCTjhDZWY3Ukg5L0FiQUFHNlBwTkRxV0hYekdyMlJ2MmxXcFpMWkhodTEgZ3BOYjIwbTBOWTFqSjVBd3RoM0RraWZET0hTTGJPMnlzeXF2Mnp0UkpTVFp6RS92K0gwRStBVXVXaHBhUWhtRWRvVDdrSktTUXQ2aCBjRU5QWUphSFl5Ylh0MmxEQ2VZUXc5VncwOWdXMnJ0Zjl3eEp2bkdXWjRDQkRaejhSZmZsOSs5eFpadlFHU042S1Jia01lMy9BRFZ3IGt1Ylp4akQxWXNGekpRWktPaWlaTXBXMm5HYjUwODI1NStCNmFWVmNubksvaXVRTy9KbVhYTEJNcVdLMU8weW0zeHRyMWY0M0orR0wgdHBJMzdqN0ppeUdPejVBeE9uOFJlREF3bnRpeThuTWNlRDhBUDcvKy9nUFdMVWhZRjZXcWhuNTl5RWh1bSs2WHdJV1J6RmhWUlU4UCBhN0RwRjhxdXNBOWJ2a08rR1JnM3pqN1kxSjlHNFdnTHJNbThHd2lTYnQwQnNIWG52bG80c1dMR3ZsdEtwSlBTR1JrWWEzMzVJVTAvIGRLeUZ2aGpqYmhNMDloektjSEJubUFDRDNQYTN3bXNvL20zamYrQW9KL2dMOGZlVXhIdlRUd0x1eVZQaC9NcmthcFM3QStHd01LMkIgMCt5eGJRSDVnWlc1Z2Z2QUhycWZaNzVSNGNtemZyV2U5dTNCK0FnSDcrd2ROWVJOT3VXYXpLaU9HS2VtbWRDbzN5OVM4TzQ0cGp4dyBjdUdDTjQ5TXhrQ0hUdE1xdVE5eUsrbnJOV2p4OUdSVEt1MUprOVczYjBqVU5sdU5JcThiWDJvSWxhSUV5dHFWaEk5ZTJwUjltbUt2IFBLY3BvNC9NTUI1a09hUW1jODM0Sit2QS9CcE4yQkhnQWZmUUI5K1FPcDRvVWowWU1zZzlUWmk0ekdhaHU5aE1DSG5HT3o1NW8ySDUgakJNTUdYeERtWU1pcStiQk9UM25pN1IrS3JSMlE2QVBvUDhBcEZzQjg4RjZtTDAwN3RGSjJyWDFuVUJhcmJaQzJrTUhDQ0M4SHNaWCBseWhjTndxdERodmljdHI2Zk9RN1FBbzc1eGxwUTZ6L0FON1k3L3NCL3dEejYwdHRtQjNKSDFnZHk5TWJZcTNTN0pLOUgwK05TZnc4IFhLcEdVaDJRd1RIeDhvZXEwOWdoenVIOEgvR2FIYUtNTU9PeHNKc0lEWUFGUlBwL3BDaGhjTHd1Mm1rcVpwei9BSGxHTWxkc1pxTDIgVmJIbklNT0Z4NUVzeDNIU1ZJM1Z5aWxQUkF4eHMxMzUzWUlIR05mZG4ybXlYM01zdVlCdHF3ZFMxdFpLazRWZFdVZGtHdUVTcTVWOCBXRWVpR05RT3ptRU9xekZmcllMVkxjQUY1c2dtVGZGY1k5UEFSSnBONDMrM2ZQOEFBVUVBRXgzQlBBMnc0WnRqR0tVdFVNdCtZenY0IGQ3TjR1ZWlLOHJidzc0SHJleUUvUytIVlcycjFLdWRzNEdMck1tRHE3VHhTZlB3TDloN2MrMkNIVHg1U2taaWUyNXEycE11bml0NUsgNlFXM1pnaUxjVUR3TXBXN0E0QjYzVDN4RFlKcXFQY0xMbzliV1JuS05zM3MzOSs3dXI5dUg2aTZnU0MzTnJsd3lhMHFBUHZBRmxVYiBDSHQ1S1NrVEl0akNSY1d5T1lMYkk0VnV0MkFuOER4NXdZUmthMEdnbU10VHRkL1VBRDh1b0lEcGpJc2I0UmoyMWhIK2JDazkzNm9mIEI4L0E2RWxsZmRrWEVHdHhpYWRheHh6am80L0lYdU4wUjVITWppVm9lVlVicXJXMGNPQWxkRXNqaTFURTE1VFkyaXBidHNhMnJIQU8gTDRpUkxnNGVuVTl0OWFIVEF1M2lpSDZWZ0ppN0pXTDkzZTM4NnZvVEJoOXJPc3dpNW1LdWxCOFpDUUYzeWFsc0pISlhYY0R1aHlVTSB0YmFiekJicmRiVzdIRHA1Z0dwSjlEUWJJUmxtMEdqYzNoMjV2aCtJbjRBQTVBd1B4Mm4xMkxNb2x6R0Qyb05TWk0ySkZyMm9EK2w1IGZZYjRQWEd3MlBFUTAvaldwdW42VHh0SGxhbGlRZ3cxcG5GbEJlQjN3WUszdmRDZlVMWUFBQTMxVVROTjlsMTNRNFlWVEp2U3ZBckYgSlhtaHFaTEFzeUlybnJZMUJSYTNwOFBEK3VROGJJOGVkQlF5YXh1aFBmRGxvdXh6OVVIOVQ1OCt2ZXprUUVPb2UyakNMdWJjaHgzWCBQY3Q3dHB3Y2NjUExYMDE0ZHRDeXRTVEhUMUE0SXZUdm5zYnNkK0ZxVER1TjVNT0NPVXBSWjA1V2xnV1E3VmV5YXF0T3VhMURsK095IExiZ1ZEaTNONFBVNU1Ub1FlWmF1S0dQWkora3h3OXNDWGVRbWo0UEJvMkVlR0FBZnd3NUJqMDVjdXQ2N0ZXaGttUmJJMnUwKzRhbGIgSkYyT3kvRmh2bHRNSjYwRnV2NWw4R0hDYkQrWXF2bG9xVFV5RGRRb3RXcUFZajJpYkNIT0FvTDlzQy96Nm9xNnVDT1U0dXRsSE5xVSBvZVVreGkyNUdLL0VMZGpKdGdpMWVIN3ZuNVVEajF1Q2VId0RuYUI1N29EQm1MdFNZVDkvUDdCeDgvMDRFZDBJVkJETUxjWEZKc0lwIFQ1UHZRTnIzVUFXZkdnWDhxS1lUOW50U3RvYWd3Ky9JRU5WMnlzM3dxekRIamUwcjhSWUgvd0RQZnlrVEJ2cUlvYzNhRVJ1elN4SzcgU0pqc3l1OHJ4NTRaU1lvcThaRzJGaTF4Rm1SRmRxVFR1cFdUL2x4c2ZWanErZDdGTyt4anQrMWkzUWZlRmdSN0xwOTJjbGRKcE9zVyBoVlVrZ2hYcWV3THkzVXFHa1dOWEtIYUQ3TWh1RndQakJ2a0J2dHF1ZnZLdnBmWnlZUHVpYjd1dno5OStBZTJFYkhxOTAwdE9GYjAyIG0yRU5mTlpGZXN2ZEFDK2FjR3hidTJrWGVyN1FvY2pnM2lFOWJtVmh5cWZZQ21jTUV4aFJEWmtZNGxHOU81eGc4K0F4QWIrdnM1c0ggajZ6TU1zcW9MQ05wR2JER2xrK3psV1FwdmtXWEU1UXR1Q2U0TWkyeVdvUDdjdHRmdnV6c3hNV2hqTjh3eENIQUNEejVBOXovQUVFciBkTGxLV3NUbTlWTGRBaDgxYnB4SVI3T1ExZVdZaXhXemEyUmZoNDJtSFphMkhyZ0p0SHdIaGtXVVlvTFJtWjROcE94OCszOCtBUWQvIDZJUEk2UmtOMmNZczQ5YzVTd1JuZVcrTWR5MDU1QVljWFlvcEdTcFpibVc5d2c1UnRZWEhGNkdWVTJYYUtOZGRqaE1UOHFRN1FNck8galcwN1BqSi9EODFZVU93dUVvVzJBWHhicjljTVVQRDJad1pBYzlRUFBCZ21NYUdqdStqL0FJdTJBQjkvUC81a2xnTFk4cEhwT3h0TyBWeldSZGtVeFVyWXY4a1lLOWNPMTZRVStZUnc3VncwTzRHQmtCZ2JnclNCdGd6akhuRW4vQUg4ZlFmUCtmRmN5eUhRb0NXM2ZOR2pZIGRMQjZLVTBkMlE0ekV0Z1VOaFBja1QwOWtEbUdTWVFod1VPQmROT3JheU1GK1RCbXpmQno3OC83QWdnSDdxTnR5R0tEVmdIYlJmQ1oga294SjIvdDY4V0U0SnA2c3JHRmJmTURMZHdPREp4dmdiQStLdkJobFhsSGpnL05naU9nLzJBQWc0ZENnWWJPWXhkY2x3dXdrWU1aaiBTNkY0OTFtaGQrQlhSbGxaSm9ramVkSk1EbkdaUTdTYzV1c01jc2VXZmJ3em5ERUFHeWVtZFdkZ1haZnFGWnlZTEpFZ0thWk5xYS9hIGo1UzlJOTJrMWRxWFQ2aDdPdDZrREQ0bnY2SE83UG53ZDJNM2RDaDBaWkIyalZ4dEgyRGdQK3J3RHBic2xnUTAxSGg5ME02U05RdzUgdVhHSk8xZjJhNHlyRzFIaTY1MVVKOWtUTElNVVB3K3lVZEQ1YURXMWxtS1Uyek0yOWhPRG4xOEJicDkrWHo5UmRNN3ZBVXNHbzc0ZCB3TjhFdEpaUTlUakN3V2N5VmY1UW83dmxYdzE5Yk1VUE1UMFBrZ05EWUxhQ0dPVHE2dldmaERmQjdkUG45LzhBUEgrZy9UMjJRbmRIIHptUEtySFR3TmltSTEzVXVURHY2OHlBU2w4NmM3azdYMlFoM3dudmhnaE1nd0xBbkk0ZThsbFh0QW5iN3hhUE5uallPUCszdUE2V0YgaVl4U08yeWlUUmg0WUpiajA4bk9TQmNWdjQ1NExVVFhWcXJzMHEzREpoQy92NUw1QlA4QWh4L1Z3L2tuNVhiaVY1ZTdIQTIyMDFhSCBLUDFCMTNpOWhFVnVzQVB1a2ZJSE9Yb2I5TGRUOGdqbTFoYWV2Vk95QWxzK2gzdEEyRnh6M0RPeWs5cGRUZVRMSm8rV3N4bDVmVkVnIGVyTEFuT3ZKNnliMHFmUysyenF1Wk5FZXNQSDBEOG1Ka2hDRkszUkpUVWN0QVdJL29ya3JMakxQcnBwdWhCSmNSeFIya0w2eElrdDggTVJERlFSRWpKeE1RQ2txVm5UY1A3WnYwZFVURmZwbmI4cGFZbitUNUZILy9BSENCL3dDbnRUTnBBN01BelB2QVpFMFMxYlRWWjVxeiBYSDQ2di9JT1hKWTJuL0pzdTd1TnpKZGtKTHZBSkIyQzJERlM2bHNiR1BMWThQTUQ3dzRja3JuK1FuTFpPOHZ4bU0rN082TWZ4dDNEIHdBQUFmaDA4WFhlbk80MnBETXA1S0hWN0dNdU9SdHNoVG1DeGFRcnZpZTRCK1lYWUhXMTdsVlNFS2xlSENvRmw4VnlhTWQ0VDdvUDMgNUIrL0FPZ25UbTY1K3BEQmxHUWFOQ0Y3ZmFna3RIU2F4cSt2b2NwV3VKeWlsN0FNZnF0c2xnZjArcFZYeG4zM05tdkJKMlRnTnU0diAyR0NEd0VBenJNWDF0ak9FbEp1MDYzR3Q1cXFiWWF2MUZUTEFYb2NvcHlpdWEzNDNETVB0MkJ5RjJJOEMwTGEzZ1p4ZmJDWGhFbXF6IDU4QmJ2QUxkUVVFQlVjdXcyQWJKQlN0SjdkdEZJMjB4dHNxdCs3SlFmeGZQVFpBc3JaT1V6UHVaekZIbHlvRkNLRkxybThpMVhRcXogMHBRN1JtVHg1S3l6Tll4aHRxNUNTNzd4blNLbm1PVVZocThxaGpvYUhNaHAvTUZxY2gzQlduK3I3UnlZbnduSEVIc0FBK3dZbi9BQiBOZ0VOVkdrR3hERlFKcmhVcWVta2xLd3F2YWoybjhzbmdlYnE5eTRMNGUxSEFQWkVQRVBnMi9BYW56eFl0NVdmd203Z3dIMzRCK3A3IHAyVm5EMHh1U21Tc2JXNWNCdk9EVjdWenUwTGN5aHkzUEhLd2p0U3A0K2ttUkRmSHpBZ3ljRCtmMnJXU2VuT3J5ZkJraTBjVG4wRisgOCtmQWRMRjRxY081VXVoaG90aE1qVkZtRzRpUUhRMStwdzFJZ1phSFkxUFZmRGNET204eHVDMjFnU0FHeDJRWldaUlhKL2hNMjdBeiAvZ01QYkRmNFRGcUpIVjg4RnhiRjB5Z2VRY1J1RGI2YlViVlBhMUpnSDhybDNMSWxqUUlwVDFFUXVBOXlLamNOSEltSXd5NEliSnJ4IGJqdDZjd2NXano4dGIweU1lb3BTWkRKSWFwNTl6WEs0N3hGMCsxa0JRNnJYNjNxdGF0OHhaREJNT2N3VW9LRzhqTnJSbVpIQ2JKNS8gSDNQbjE4LzBiS2NOa1hLenRydU5uTWxEcStUR3MxNEdnS2ZpQnowVjNsRkhEbUZWMG15ekszWC9BT1FYNlduTWhOR0ZGTGZabmgyTiA4SDhCd0UraFlvT0tUcmRvRm1jdlNqWEpxaHdsblpWYjNIYktkRHFaZitHQmxYeUx0QjhJTGI1eVNhSFh3Ky9PRUE0aDhadVJYWnNUIG5oQVFEZ0dQL3RBa0NIS0dSV3E4b1NRTGdQWEJKczFITUt5T1h1QURLcHdvcjhnbUxZZVpWZk1BOVYyWGFDaXE3WXpLNHZjem5DUDcgL3dEUWZzSFVLeW94a1V1ZVdMcThlQVp4TEpFN2p1ZjNiU25HdXpnVzNucGpkNFJXWkdkYUJkR3l0R2lna2pRclFyYjNXVU5rYy9OTCA0Nk1JL3IwMkxoU1lHYUt4dEc3QVMwZzJFamtnS2ZEbW9sb01WaWxGdC8yZ1BNL282ZEFyQ2ZneUl3c3BqOTQ4NWp2L0FCLzJQSU93IExFZk1yaEl2dFZpNmxXV0tBMHRPMFdMWDExdU9tK0h2OHFJQjRHUE1Keklub1V2Rmp0VEdycDhKUHczUjhlUnJ3YjNzNXo3M3dmdlogQlFHY2puSGhqUndMdStEWTF6SnFHU0xjd0FzRVFPbXhaZS9CMENXWWNERGc0T0FiOGdIb0VNWXNxNkhVRE1iZHF1ZHZ2NERZQUtDZiAzK1NYOHVsNHRObmx4RHJGa2ZMV01ha0lqUVlhYmY4QW1XMEJVME5ETU1FTndyZVlZVCtITlczendrUGJPTHZJd0c3V2liMy9BSDgrIEFxTFlOZ1pJR3lYTVl1WFJHUzdNTTRvQTVVTXR1eWFwY3NoeXRjcldPNDBJTUtvdHlxMWJXNXRZRXJWdC9pSGNDYXNHallwQTZkdzggTk50VE8wOFZVazZTN0N5bllhdks0RzRMdzJjOXB6WG1qNWhBTzRXUk1EMlJYOHljcE9DR0Q3WnZPMXJMejkyTmd3UDcvdjhBaUE2NyBJNGV4Q2luWHdITnJmSE9uekxSdGhIL2lRNUVZcm01YnV1UUN5TDYySERtSmdjZWh0WEQvQUp5R3N2Tlh0QXNZRENKSnNHQTM4L3lEIGYraVN5RWV2NnJSODVqRjhiVlFJRVlXSUhvY2RlaE5CNFNCMmNnWTVKRFpQOWhzR01HWXNqRmNvVEo3SUVkZ2VQZ05nK2c5YnRSR1kgbFVFWWZHaXk3eVNVbnZrYkVtTTQ5VjdDeVBsU2xzUGgwOHR1QzJobUZ0UHdSKzRGbGcyVEZtS0ZHWkdCaEVrMytyQi9RUDM2Q1dKZyBLQ05qVXNTeExVazIwRnlWWWxMeU43bDVSWHdzV09SWlJvVmpBdDJjbzZPcjdUNFo0VVFaWW44MGJBQzJCeVRRcG5NandyMWUyWnlsIGNqaDJsclN0KzNvZXduQ3Q5UGNPVmJTOVhNV3QrQnNoZVpOaDd4Qm4yZ0JlSWF5c3Znc21OZURac0k4YytmZ0hINmkrL05vZ2wxL2wgUGg1WFNMc0pWbFdvMGF3MmhZVEpaOU9XbTRpOVBiUkZaT04xQXQyb1loajF0Vjd3WFM3dzFubE8yTTZPa3BKdmYrUG52dndEQitSbCA2YWhVT2VRU1F4ckpiWHhTeWJSaWtGWE9NS1laOHNhNHdKNjRDRmpyWmd4eEJQMk51dkE5WE14R1dWZjZNYzRUVjNkMEFBUDcrZUFkIFJ4QnNSODU4dUN2bWk1a0N5S01tRFlrZk90U3A2Y01WS2VZWElBdHVMSjJIaG1FL2g3VTJwN2JzL0pueFhzejk3dXlqOS9md0hzQXcgUHZ5dzhqR0thVXBwbkxySnN5R0tXT1NNVUVMYmtMWlpjMEFGeDhIUElZdFl4STBtSjNZbzhWYWNEYmtTUTNraUczeEFzV2VjKzNoYSA1RDFPcjE5eXN5c29Da2h4cnpzRjJCeTJCOG9IVUJZVTBYS3JJQW1yWjhQY0ZidURJbmp3NlB1R3hvWXg1NVJ4ZzRiQ2VmOEFBQU4vIDJEcG5WbThyNmJsMm9obm1xMm5ab0d4ckNIQjJtNkY2WUxGcndHSi9xUXRoNlQreUF3TndmVCtNMmdVNE53bTBmZmY4RjhCeUEvajAgQnRDRytOdGYzOW11U3FOckVlcTIxWVk4Wk1FUzFvb2VMWEtMRGo2M01HRTk4VzA5ay9pSFQ2MHRTSHdaRHdHTFBOdlo0NEQvQU5OZyA2WVZUdm1ZaHNBNUlWN0lTU1ZsNmIxdGhZSzlwTmZFb1lzcC9GQTVjZnBNT3lNb2V5S2ZUMVY4cjlTYWc3Tnp4WEdXLytFOVBEeHlCIEFmdC9vVHJLeVRTTk1obDNVRWl4eWZVTkZCcTBraG1oa1pTMEVLUnA3UXRpSVdXdXUwRHE0cFkwazB5ZzdHb080MGVReWoyemhUdkogeGhuOERCdkJzOFgxWHRzNFg4Z3d1SHNteUU5eW1SWmEvd0RrQ0l5eFZkaGlvWWY4Vk9IekM3aERCdm45U2t5ZkZ5Zk9IYnpqK0FBQSBBQi9GQlA0UnBnSFlnWlREMW91WDhiUFpSNjR4UDRZRDE2dHhUNlJhQlNHdjQ0dUNmRG1FRnUxRks4UG5CeGd4RHdXZDhTVFpzNEFBIGZvZmZ0L3hhakFudUdVdHNvc0RNazFqbWdTVlpPRGhhbGtPOHpHbTZuUFJRNit5VS9EdURaOFBnMUw1eDhKMW5UYlFVMlBaVFp4K1EgZjl2Ny93Qll2bUt2Y21ET2dUNlROaDloQ2UxWW56RERNc1k4V0FsQS9BMjlEaDZrSVkrWjgvWVlWYi90WXlvT2JmMkRZTWNQMy9vQSBNSW5KZDN2Q3N6ZU5FZVA5YjUvMEg0NnpnQkpRWUVlVHhobXUxdVVWdXVYcXFGK2VXNlc2dURzak5LSjU2N3Irc2kxQmxuZkVUM3dDIHJzTTFYZkJJdDhNTDh4Ym1PRElZSHpJTURmbW9Qd2E1R2puSncyRWRqbjdCejRBdjlHMThEeWxRWmsydWRTVlN2MVk2aDFVSmJGb00gbVRxUWR3N2tldGdDNVF1SHJuYXU0RnRmTUk1NGdCT2UzNVFSa1k0N093UjQ0Q2ZBZlFlZmRKOWJlRmU2WS94YkJ0UjJ1Q0xXNjJKWCBqSzNXOU9PRFJVcllydERKWCtLM1Q5Y01pZlR6aGNWRDR0cVBodWRvdENNejcyYjRPZlFXQS80QkJQOEFWdEsvVzgzV1JZaVN1V3JEIGsyZHpCa3IxdzdWcDlzUHBSb0UxZkVNc0c4TGJKYWo1WU16OGdOcVA3TE9rdDhlaVlQZXpld29QSUVGK1BnSDQvbmxiWjFNSXRJNmggVDN2aUlPZkFwVHVaL3JieEtBMnhZVStOZHpUQmtrem1rbDdncTViZW5OZjhRY2hzN1hPMzc5NE05YlczVHFSRHRITURLNmZ4S3docCBpVk1rMGpITU9EaFdYeFh6VDBVbG1FOWtNZlJGdGd0UTRBci9BQU9MYXovUXhNNWFKei9yd0hmei9SV1BzUkxnQzBPZWtHRkxOK0dTIEV4MG5KWDFTWktWK2Vja3NCYk1HSm5KQjh6dEtReG5ZL3dCTDQrd1JKQ2MrWDkvL0FIOC9pMnRSRlR6SXBSUHVRTWt5UUticVFRTFkgdENqVDFvTzZIS2k2ajZ2VncvTUE1aGJNSjdBaHRTSGNFK2o1aU1NOW1abUJtL0I3K2dnSDRCejdnTlM4c3d3V015aDloRHhtcUE0RSBoSyt0c2tnc1lsdEZUaTMySFg0Y3dIY05uWDJRNVpZOVM3a1lWQTBXZ01XY1BPSEFHd2NCUGdPZkg5YWpDSVhLakllV2R6dGxNYW9WIDNabHJQeXRVUE5ta011VWg3TnUzalR6bGVaSXk4TDRyeDgva2RkaGlSbGhxUG1GQTFrQkVsM3AvVkZwN3E4UGVWZ3IwTytJcW5RNVQgY0hCRFpGdlNYTlQyVFlXQUM4N1lpdmxvakJteDlremdHb2dIZDFCZnYxdUF2ajVpa2gzTmFDdWgwbW5nZGFTM0UwajM5V05yL01sUiBTMTNLN2d3V1JEWk5HYWVoL01WZTBDbEJzZ21UVjBPek1FYzNzbEhud0Z1N0EvQU1NWDZ0TFlwbEh4MFc3TWZVTlNhczZuNUttcncxIHRIcHhEcSt4bmVtNHU0V1FINWd0d3F2Mk9CVjRFSGdNV1NqNHpMUE52Mzgvc0FBK0F3Mzg4clBMbUdXRE9NZ3Bra3haZVRHc0syQU8gbFpHWVdTeHRRUzlVcmtIc0J3TUorb1MxRnRoN3FUM0NoMVgvQUZrS0xYNXN3ZGppQ0FQMEcvUHg0K2Y2elB6Z1U4UXN1RVgvQUxpayBHV1BQL0wyVTJQT1E3UWZMQWhYdHp6ZmhpdU9PTWJVSTNKczN1VTVLME1jQ2JPVkN1azBvd2FmajlNMi9WVEkybm5FbWJpU0tPZkdDIFdIcVlvMjdGTVlQbVU4bjJwalg0ZXhxMHdVbXBiSjRYSXJzd3dIVnh2ZkQ0Qi9mZ0FEWU9ubWxuQTU1NHQ4OEJaS3VmTExzbGxpTDkga1Y2UStZS2NwY1dWWkZIOERNR0Z0YlQyU25TREFCZU83KzZQbW5vbnduN3dBUG56NkNnZ1BZK2t6allsdHJJTkF1ZGVqYmd4Y0pMdSA4V3BXN1JFY0h5TExhS3ZEc0JpWVloc2pKaXlQRjhXQmRNRmtwL2dkb1ZuWmp4dmY5ZmZRYWlBY0JBTTZISGRiVzFHVW5lZHlPMWtXIFJLbVZ1a0IyVEpyOWhyZTBOWDFaU3F2UTJBUE1jTGdxdVlBcFBZV0RmRnNtVVFueG0vZTZ1ZVAwN3Vua0FBZndrbTRyWnNxU0lJY2MgNUZEU2JrWkJqUm1zWmJ0dlJvRk1EdytYYkkvYmdPNTBtRHJHdk1rc0U5WEtpL08zdGNwZk9ZN2wrVzFEcGM0R3ArWUJnUTFKYjJGLyBZVEJoMlYrU0FTa3M4VkRqNWpKTXArR0hJQnppSDhEdHRaaXpmRFFUc3pDcnJST2UzdS9WRWZQZ04vV0l0Zk1OcFhCY2lnWFo4dVFDIGNpTUZicElmSCtJSnBMSWNYVGVuM0JRNjJIVDN4ZmhuSi9MVWZjOXJhTE1lWGhKMk1IVVhkM254L1lBUFh5WThVZlpaQkpGcm1tTnMgeVcxa3JkZ3JlNEtIMDM2MGJJbFhKcUVLV01uMTlEMmlaTXNoUFRvTDVZUHpwak1zMmdoMGI3bkFkWGVBZmovYUxnTDkxdkFNbVpQWSBLclBGT2ZyY0M4bTNaNGZIMnlIVjlqY3hmSHh4TWN3bVhDSElJYzVDc0NCekRiQ2d1MzFtcTBqZkFaOStQdno4QTJCQjZGSnUwc1hUIEJuWjJMdHQ0V0ZZZ0RGc3FqV1I3N2VJd3RkMWliSDdjL3dEd2p5cSsxYjd4V1VqUnhqLzVrL2JSZ2N5OEh4Y3NUT3pjMVBXd01CRHIgZDNqdzc0SDh3ZlBpV2hxMDRmY05WODhmQTYreUk4QnduMXk0TXlNci9qUDZUYVA0aTlzSDczdDNvOElTRk5Tc0N0NTZreVZ2WnpRZSBDV0ZwL1d6Rm9VamNFVXAyYmN0d3AvVEdZUTVuZUNIQTRmOEFBY0Ztek9MOG1SMGxKQ2ZyOSt2MUJRUUNDc2N0MGVLK3BiQmNEWFliIHA5SXlhdWQ2L2NNN2hFSW9CeGl4YlV3bVhCeVRaeDVocVViZ3RxMVE5UUxMUStMUE9Fa0k3K2ZQL1FlQTlXUFI2M2JhdlQyV1VpWk4gankxYUdnaUtQLzRsZFpGMjBRbk9kZlJJcmVPVDV0VmlMc2ZjTFRWYktRSHhyTVdjTFZ4Vlpvd1YyMk1GZ0JmcWo1Ky84OHdZQUl0eCBvOW1OcFpvbENWdENmR0tPUGVWdTY1SnR1MGdyanVYZFBCSXJMdVBwMHhtbjI0MmpVazU0UmlWcFVVaWg0M1dXN05sYm9lQWlMZGZNIHlwTXQ4YUQyU05NVHc2VHlnbFc4Z1RNRnVWaEh2aDRHSWVvUmtjSWRYaHdjK2ozMjR0cjd5SzZOWmh6bXpzOGJBZVAxRy9kZGxONWcgK3dhZnM1b3pYeTBTU2lCN0lzRmtJZGZpY0NsUzZjSzVhWnZ6S2ZEekU5a3g0TytONTVIaExKUG5peTh2R3lKSVBmei9BUFlBSFJWZSBDL0RNdmxBeThyT3FVTzBJWTBUUjhNUGJFdTdHaERzSVdCWkhBUGRrT0d0c2kvRHRUUzBQZ1RrT3pMZnZoRDJ6Wkt1NE9mQVB6OGZQIC9RY1Z1TFM3UVZ6RHNycStjazVOSTJFYUxJOHdiSHMxREtJYkZGcmt5djhBYmREWkVJUFlBZWp6dzg5T3JmYTZIRjRmU2dtTHlmd1EgZC8zL0FPZ2xJUVZYRVpQRzZiZ2FmZmtpSjlzN3lZSmx0MGNVd1hNdmVhNDl4UmJhU1ZNSEVNaU5qbXVQMUdKVzRQSnd6eVczN3d0RCB0YTdFOFl5RXV2bnl2QTZRdDZiN1BxQWJTYVFZcjBiWUJiZ1lGc0tXemc0OHdtQjNDbjArWkJnRDFKSG1MSXg4RjJZemJJRTRQc0IvIHdIUWRjT29TcjFlcDg1eU10VnRHTW5KVWw2dHlXbTlvcHpkQmJaRktzZy9aMDlrVHc2LzI0b2NncEtxMlRzd1cwVm1zbkVnMkU1OEEgUWZ2eDkrNk55bG1TT2NMWm5uZ1FPNzE0UzQvVExVdnhQaWdWOVhGaDArWStRdzh3UFBNUVZKd1F6a05HNEdMR0kyQ1RhSnM2QVgzNSBCUDdCejdxWHN3V3IvU1dOY1QxS0c1WjFTMWtqMmNxNFJLclRhbFlYS0wzUW1CL2hwL3p3NE9mUjc0RFQxbkRkSGtZRHdkdDgvVkNQIFB3SHdBeEt6bUtPcGxhU3lCRHpsSmNlNDdEakhMdG9jL1BQNFN6OXVhdENFU3MybUYxa1FWeEgreHk1OGdmNkc0dENIZFZ0bFZtQnMgWS9OMHk0TWp2bFpadG5nYXBiUjF5b05yQzJUTGlSQkIyUFBGNmVTVXFzeVdST0pDNUIyZWVnZXJLS0VXa3V5NEdjaktuUi9YNmVzNiA4a0oxck50dVJ4ak9NMDhSODRsRnlDZ1ZsbTFIREJxNmxQSncyWS9KRForUUdibkhObjVXR1NqemxHQUpsd1h1MmhCUldoTHhTQllQIHF3bVpxYW5aMG1wVTdZOVdGUlRTcnRBNHFDdEM5M21nS3Y1NU5lQWRabVk4a2drK1NZdEx5ZnovQU1OMVpNZUxXNEZCdUU5RGNJeVMgR2ZMSUV0R2RwWHBld254eXBHSUJwSXhhQ2U0VExWZkE0OFBxYVE2L3JRSFpGWkV4ZjVNQmhIYWszaEJma0Rmd1BnRUhJOWIzUVVTMiBxSzdtTEFXeWllUlIzZ2JXNmZiQmpzM2NjcVV0a0E4eGt0U3R3OW9UQWRadUVHQ0hSa1dyeWRHc3dQOEFmUUhud0hBUUhSZk15ME15IHZ1QjZMazNZazVXOWx0UEZuVEI4dUhGc1pJbEt6NHdodzZmY0VOa2NLM1ZaNCtCQk1ER2IrSE5tWmdlbmpaRWZmeitQSUQvc2ZpTzcgRnNLNk9TZUxCbVg5cUVZK2YyRjlxVHhLRUJBNm1yR2xHT1l6S3JzaUdZVDRmZW12OVBFSEFuYi9BTFZuL21rL2lJL1FhQ0FRZTd2UiBYRTJaR0JlRXFaWGQ4TTQ0N3ZTZ1lzTzIvd0NXejVIcDlBUXlCVGx0STNjRXJMMU8zY2NteDcrenRyZ0E4bStrbTRRNjNiWTVpMnErIHpqZHFTaVNrSno3SVRoN0RNRnZsWk9RRjhYekRJSVpKZ2VydzZyWmEvUHAxeFdSaFJvSjdGeloyMy9ZT2ZIOS9BZFdWekdCOHlXQ2sgelM1U2VtOGxYenNrMndZbzNSelYremk2dmJDaWIrTm9ka2FrSmdkZXdnZ2JBdW41Z3htUXhmSmdmaFAzL0ZmUDdBQTZYMlpUN281TyBoSzJoYWVFbVVqa2tvaGdDMVZ2RU1GSlREWEo0d1FaWWVOa1E0WkRaQUtlcEk2ZVRyUFRtK0RFWkhTY1VrNEF4UHZ4OC9pQXg2R282IFhBREQ2OVBjcWY2M3pVS3lDbzlxems5VG1GTGFTR2lVbi9NTWNiUTBQZUlQYjg5OHlzL29iTVRCNGZSMkQvTHord2FHRVRxVlkzZGMgM0t0RGkvNHBZN3V4N3JxalZjMnRKSFZnMkxpdmhXaTV1dk83Qkw0dmlnUERYZkZGWWVHRDNCUFE4cHF2VkpyUjJzaGhEbUxERHIwTSBxQjdjY2JjSWR3dUMzcUVaR0FPcXdMUVVwM0Jua29yck9IQ2ZObjkvNTgvSCtyVU9nZWt6THJmMEJ0dTFiczRLeURheVg2cnVDd1ZPIEg4b1RMVjYzK3lXUXlYV244d09OcS9BYWpDTlVDc0xXVmw0MUQrY3FMei9hSUI0Q29tcFJzdXd5RG9laHltY3RnVTNURzdmSXIzVHEgb0pBZXJ4YlpYTXFHUGlUSEF4TWNDRTE0eFg3TVZaak5XWXNXemI0RTV0aDkreHd4MkRya3I5Z3E4RFg5ZXZnc2JXOXdXMEhOdGtkSiBHT0ZlekdpbXhNVVgzUU1NbEQzQWhzamhWYlUrNDg0TVZtamQwT2N2QVRHaytBb1A5Z0FBRDY1QTl4eW1UQ1ozUklWeHlQRXNNakVtIHg4UnFwRmVHdjdhSlFMYnlnaE1JMHpaM2t3cXFJQVhGcnlzZ214UUhnNWNIWWM0cHEvOEFndVZoSWJJSHU3T1FLeUR3eWErNzdEZkMgOXFDbE9DK0hwK1pNaG1DSzIxUUxRUXpoaEdKdm1MendaMTlyVWZ0Z1A5b3NNRDc4ODJCMGZUelJYdVhRVXlOcGpiVW10eEsvUUlHaiA2eWhPUlIzdmlwY1BoV28rUGtORElmQTNDcFVkYlpxZ0ZxN010UEJ1N0t1T1B3Qi9ZUDhBdjFKNWh4Yk14MVZTcmtDNzE2bTJReWJPIFlxdFhYb2NxeG5jQzVCMkN5TEloaDZyRHB5SFZkbDBmeXBQclBhNnY4RzdCRWtHZTgrZlFkL3c2c0lEcXF0NzR3bVZ6cFZ2NTJRN1EgSlJsT09ucmxzVk95SVFDWFVvdGs1Sk0xT1Z2TTNEdHloc0NqY1JnbWpLNVJaWnZ4YzcxWGpzQUErL2MrNkdNQ2FSakpnSVFoM0ZrZSBrTUMwQkNVcnY4bW55WEVuMk5sUUZuYU00QSsyclA1NFUrUGp4WG41NnJTUHJNeGRPWldOTEFXclROVllBK0VZWGpPdjhna1BpYUtzIEpEdHB3WDN5SERXN2daQ0hGWHhmVXAxVmsxbG5hTE1HQStFaExVNENmQUw1L3dBQmdWVWVESDFVd1pOUVZmYlMzYmNwRDA4VmxiRjUgVEUrbkUrVUxYZ0xUTUhzaWZNeERzaEVPY1BEMUw2eTh2Z3RaSjJwNFhIRStnZ0Q2Q0F4WHdIRzJFTlNlV0d6bGRJeVg5a1Z4dmNGdyBZN3JINmhLM2ZFM2xHOFdERER1QzJodzE5UEJ0dFlQbThiWmNtMkVrZTdEZk9jZkFBTmdBQU1UQlFmTFJ6bnQxTXhkTlZBMkNCczZQIDlxTTU3dWhMRFFweXNGQmZxeFB0T3lNRVRBUmcyMWZwNWVHTjVlTVZjV3NveHgyTlk0bnp6Qmd3SDhNY0dUTEtxdUhoZkJheWRHaU8gTm14YXlTUlhkRURFbndicmk2M01wOFF3ZHpRVmZiOGkrU1c0NUhOYzMxRzNMVFhhclIrdDVyUzFMZG5TajJvaTR5QTNPcGRzVDJnVyBXUkJoZ2VZNGV0MVhNWUljNnRDTmFXcXlQUEYwTlp4cXVydnlwdjREejUvSGY1R2xIaVBiV1duMSs5MHlOczdTTlJ0eDA1YkI1SVI2IDlNYWdkVDZScDlUVSt3T0JvYjVNRC9FZUorbitsbmpEZzN2VUJMRUlEdzkwRyt6NERrREJnL2phdXlXSXBURDFmS1NleVdRQk1YcXAgcDlTMGJhRFkrSzZicWFLTkZxTDZHNEdkUGI0aEw2ZWoxb1FuM2d1V1lUdEI4ZXJNUndubk8wV3dZQU5nMkMwV29ONFI3VXQyZEZxdiBSMnphV0ZkY0hSQTloQmxpNDI5eWllaTJhdUxqcGN6QzBrK25VM0NlcHY2a3JZUEsyMGkwaDZPbkxzQ25rTDJ4UHIzL0FDK2s5SFRQIEdHWTdicnV2cDJoR3pZSW4weVRHWUZpbFVYRVVpU3d5V1ZsUnlxTUtTVXhLN1FOamNLd1NpdmZINUEveStvSTMrZjQ4Zm5JVW9zZ1cgcmdWTzRBTkdWdkowdTF5U2JWT3dERlNwNWFaWXRYcVo2MEphZStMY3dPWjI4eE9vZHdnVnd0L2FPVGM0MlIyUjhENkNBQThCMkJCZCBreDBzUVdERzNkbFdvazVXb3lqUnRJMWZVdW5VeERRd05ubGhkb010ZnA2M01XNWlnbnpFZDhJV1hUcklNWm1pK0NZeXEwa0phUGdQIFA5b3Qvd0NtTzJQa0I4MGVEYXZmS2ZVcU50NTJOUkxReWJVWDJ4dmxLMXhpNHZzbjBsak1NV1RhQVlIUTlvdmJ3bnM0dFdwcDV4M3QgSjJRQ3Y0bmtISDlUOGFUMEFXNXBDaUt6amJLU3l1Q3haZGNjbnBxeUtnYTF4bnRxSTAxZzlEcnRXNWpIY00yZTRiZ2ZBd0pwTmxaeCBydXN2TkkyaWxBc2NBR0tEWUhwOVI0OGxZOGxXTWg0OVNDSlpwSEVSeksxdWJheHpTWEhQYTR1ekxXMlFFYTJ4MEszOG9aRW1TUkFqIEtzbjhVNkFBRW5BM3RaR3VCbGJlM0hsUUVOVEU5Y3J4dnEvTnJhazRRR1k3Y3ZTYkNqbDRoNG92VzFRNGRlWkdUdFkzMG12c2x4Y1AgMUQ4YjNNb1VKakFSc0pxSHRUWVBQZ09RYkRPMWVQSUU3SFNSZ2VqUXVkUHZlN0ZQR3p0TWJSY2JpaHBwYmZqQStad01PWURENGdTdCBTQkNDWStobE1CWncyRTRPL0FENEFCd0hud0J0L3dBdlBPSitWcVdhcnNwTjNEclltd0UrWlUrMFZlNWFqNkhLUG84eE1od29hZnp6IFlTQ2ljNXlUVjJqalBDVGJ0NEFBZkFIei9zQUQxcys3NXptWmNhclcxR0paOU5HbFBCRU1BR0NaWXpqWWJQU1Q0UXc0MVpNSXpYNmUgcUlkbjFxakdHWVcwM0l0RERtRnBHMGMrL1lvSjgrd2MrNnBORTBjV3BiVHFnMUV2MUdvaWsxTTBzaVFUdnRaU2xwWGZaZ1dsOU9QQyBHUDdJMXlOcVhWa2FyU2pWVFRiVVR4eHZ0TFFPbEE3bGFqOXRxQWVTUVR3SzY3SENIcUVVcVR2SjdVb2RKMUxXanMyMkZvbmR0T29kIGdRejBTMk1CYmgzZ21XcGhaTXdnSGVNV0VDRGg0b3o0VHJQRUdGZGpYNWVxTUFBNUJoaUFyYUV1ZlZIVEZmMi9qVTFNcVNIRjFBcWIgYWdOeEljcVJFMXloeGhiMFN0NHhNcXdQTVlGdHFndUZhTkFobjNTME1lYzRjSk9JT0lERGtDQWdZbjdiT0NlcDJXK0dNTExvMVNMNiBsb2RvM0pJczViajZjQTlTMk13cHI3TTd3T0MzWkVPWi9xV1BnUVh3b3pLL0dSbFY2aCt5WnhCZnZBbjhkLzZTZFQ2c016S3ZpdDBOIFNRN0ltVmZhaEdKR3lhclYyRndWN2xiQUlHR1BEMlF0c2lFdHA1anRMYUFIL2E3UlVCUGhMc2srQTl6L0FENCtmeGFzRWo2YVdQV0YgTlpMTE04Z2pTTTZmQ05zY1lTd2ViSXJ6VGtMZDhxUG1GNHZxYzlJNGlUNlpJRll5ZlVneUtlK2FzWXNNdTJrN3VSZVhYSFgxVjBuWiBkVnA5TnZtbnVTa2k0ZDZpWEN3dFZBOXM3eHRGVHE0dFBjSENadkZKcDYrWWVEdytlY2NCbktPVGI0RXBMMlA3K2ZBY0IzL29rT0R6IElaTFc1VHZXTWthNU5TQWtWL1Vyc3JzS0VMcS9ma044SVZCZG1Ga0lmSDJUbHZ3R3BQV2VMUGd3WmlrdTNuOGYrd1lkV0VNTkY4dEcgV2V1bXVVTUpTY0NxN2pxZG9tQjVGRGJXQnNMVkFCTUwrRVF4RFQyVCtSZkhDMmdmQmhndFhSbG5lLzhBZndBQWdyK0dCL0dxTnNQayBodE9NalJZTXcyZXU0UEpkN1l1RE9ZRk14c0paeFY3VUlUSENaWkMyNEQ1anhXbFA3R3ljRzdON21qOElONC9YL3dDdno3NzBWTklDIFV6VFQ4TncrRWl5TldieVI0bXR3QmNSa2F4YXlmaWpJQjZtZmZKaUNjZkNSUnd4eG9SWjl1TEc3NURFVjIyWmp1QVB6UTU1U1NLOXEgVVBtcDVLdlNGYnJabVdZYUhLNDRvR0dRRHNqNXZDR1BUMGZWTFlDSE9tY2xGdEpUWTNaMlNRZ0JCd1FkL3dEUGdPTllzQnNnV3dobiBrT3d0aFVnTW1wekx0bkJtRHNqS3B4OGFNU0NmRFJMZ3V5Wnc5V0E0NzR5TTNlUVZ3WGhLU2sycDJpNTk0RFlFRXdaRGh5eGw4KzdxIDRFSWh2aGh0aVdRNERaREVIaWdmbEZHUmZUM0NaTW9kOFlOOGJhdmdRYTNHRE9MOXpBWnRKZGpxRGdmUDdCNERwYnVEQXI1TXdQYUUgck83TUxqSXlPNGRQTVZmTER2aXZRMm91cFh6NWdkYitGZTlvUG51UWZEaWVNL29aR3F0MmRqZUw4Qi9YbjJ3UHlXQ3ZFMFlONW9VUSAxeUoydzJTQmY2ZjVIUEY5TVVTQmtta2dmQTZsWTNLSE9rVVV5dFFYaVcxSVAyNGVHNm1FY2hUNlNZVzZXTXFxM25SY2tiY1llSFlTICs3cDR1Vk1sY0RZSWEyR2x6R1JnWks1VWs5RHRUQVlNS0ZLenFBSCtMamdESGZ2QUFGL29rcnVRK0ljeHFiYU1TU1ZCWm8xdFlhWHkgRnVPa0o0dG9ySTlYTEo5OC9oN1pEQytuM0VldEZEZUdTekt6YWJrNHljcTRJRU9Id0Z1Z2NhaTdRMUYwVlpZL1VRWnhkZ081VktxdCBGYnUvY0dabnI2UjhXMFd3Q0xNTUMzWkMzWkVPNENFemZ0SDlTempGbUUxZlRtOG95T2JTVGZBZTd0UmZmZ0hQbGp2aTJCVnh1VkFaIExJc0t4cXJDTDJrZTFFT3YwbHdLRk5RbTFoMkM0TlBlb1NrNjRXM0JrT0hxL3BhZFc2ejM0NE5abk5qWVB6L0FVSHdIUDQyWlZrYVAgY2N1eUlMQTVUR3plTGVjaHhYN3Mzd3NMSEd3bDlsb2o5dkVnTHFlMUpMN0srVGcyWEhpdVRDcERsWGhuQUNtNXRQM1pEdWxKNURjQSBlR3dMeTJldEYzcmtXeUw4T3Q2Z3BPMUUrd1ljRzI3UWJWVjhaaWZQRm1vQWZOdWNIOEVFQmJwK29rSkM2RmJzeXV6WkNaL2lucElFIERha241RFhUUEhsc0MrTUxRcjlyME9HaDF1K0J5RmtvOC9WaFV2MW0zeFpTczNrR0VTZWNXNy92NUIyRStuNi9zVGFxeVQ1VHZ1VHMgQm1KQlpmcXhia1d3eUM1Uys1U2d3L0NuM3g4REdDRXhWdG9oUTlqYm43MWZ1YVBWd1Q5L1FiZEFIL0FINTZvaWlHRkhzaDZwYTNRTCBhcTlWa3hIQlBEc0ZtODhmSWI0VVd4OHl5SWEyeVVPNGM0QXVEYk8zTjVxL25UejNScTVJUjlnZmdIdmkvZE9qM0dLczM5UkVTUWp2IGlsMmlRb2lrN2ZUVE5xVEU0Wis1c3VCN0VwWXlpcHhqSEkyRWllMGR5NG56Zi9ZOWRsbU5Hb0FXbjIxZWFSaFc0RFRTUzA4V0VIZHEgbHNsM1pHZ0MySzc1YWpBeWNEVzN4OHArWWNmTEIrRFQ2TXpjQ0prZ2JzazhIWUQ5UkgvUHYrd0d0enJkWG4zRE94QXk2QzFRNmJyVSBKTVE3Y3JBbU1qVGJTbkZQSWFnWU1HYlV1Rk9yOFJxWkE0S2JVWVdYcG41eXRkci9BR3hQOENQWVA2RGllZnA4N2wxdm5YSUJXNHNPIHlGV3RMQ1NYZm5rd2g4Tm90b3NCRnpGOURaSmxKbUhCZld3ZTRBV3BrN3YxZjNmUmtjM2FLU2IrL0lQUHQvMyt0Tms2aks3emFUTVYgeStWWGVySnFIZG0ySklkcitYM2ZkRTFzb2VVdHVGcHA0ZGJ4bVYrSCtlUVEzZjZOL29hY3RHcnF1N3VvSUEvc0NENThwQWp5S0NIdyBUM0NOTjFKTXNLWGN0TVhqbzVwaTFGMU44OVJKSFVPTTBGeVlZVE5oN01lWllhYXljN1VaOXBER3pseFpDRW50cDYwYUhyNFhVMWJ4IEo5Y1NvZ2VzYXhzbGh0UW1yNmcrZVlkdGtNdXh3OEdCYkJnVDU1cm1ER2Q4S1ZDallwV29mRklBdno5aS9ZQUQyQjdqbUQwZFhmR28gWFBKVktIYlVLcnBZK3NMSWppWEJOUTJGWDRld0o1aWg0ZkQvQUx6M1EyTmt0OFlVSzJac1pzM3NiQno0K2ZQNy93QmJiR1NHM1RvYyB5aGxCdEZLYWs2MFBWTUFmd0l4QlU3SGxKMHk5N3MwKzR5cUd2dkNySUpMMVlUN2VoMVV0WWV1bVNudUM5VldtZlUrbndYcDlIcjVCIDZjTzBySXNqS2lXMUxvSzFBbGthYjNhOVY1Z3FUT2VCVkVlekRiUXVrMkNrbVN5Tm1tSi93SUJHQXF3bm16TUgzRllCaExzNFBpZmYga0hmOFQ3OGZTUzhEWVJwSm5NaUJCSklGZ1hTNmU4R1JWUVJ4U052SENOSTEzYU51b2pBNm1DVEs1bURuYWNsakxGRWtna254TWNiUCBFaWJwZmFlbVpSaFhDOTU2TnN5SE1kOU41NEEyd3EzcG5VT3EyVExYeVZrRUVlWll4U0pLY3R2RGh6QmlXWTJkSFBWL1plOHN5elRZIHYyM3NJRU9jZjJFL3o1QlA5VnZzU3U1SE5GV2VHckZraHE1NGJFdkFDN0Q2Y3Zsb1RGNERwem1WZVljTGh1eFBReUFjSHVId1puYk4gb3VUem5DYXVPVkVmQUw2RHY1L29xU3hhVytEM1hpV3FodHJFb0hRTFpWNmY0K2tKNSswTE5pbjYzVDRiNVNaaXF3OWdPQ3J1RDVWYiBJVHhGMmc4czJ5QXpld2ZxQThCc0V3MlpsZnJsc0t0Y3JnMGxXRnF3NlRMSjlib1duZGVmSXJScUVWenlHdzRvZmVDWmFqQjg1RDRsIGFtR0t6dGU1ZytiRzBkQjJBQWYyQkIyQWtWb0dmQ1hKRmZVdXFibTVqNjI0UmRMVjd3QU5IMlhYTkE1RytvZHBaSWtqZHR1eEgyeG4gQ0tLTVlwemovSFo3ajdpUGl6MHBHbFE1Y1lEQjVwVmxnMVdxekRUUU1tVmpRMTNVd3dKNkNXQk01Y1JrTHVibjZtWjRtMDQvb3kxdSBJdXowcjF5WkJwYVBWSlByZHdVaU1RQXlRbDBGblJQbjBYVGVvTE9tbjVvN1p6aUljYkttWVYrMWFkV2JZc1piS0lqZWZpWklCdDlUIG1FbVpkZUVSZ2FVSnlNaXQxRDBRbEFRTitBY2hSZldXWkRVNlpuU3pxa1FsRHJ0c3FjVEhzaHNLeEdPVzR0aGFxNkZpK0Jab3hwNEcgcG0waFpqUlk3bms4V2EyelYwVFZtckl2bXhNV1NuMmc3dUJKRHI3VVVFczlrQXFTUVBzaEpYNnlEMXpYT3NWbnFWUElROVF0d1dveSBPRmdHTEdBM0EyNGJZc3RCU3M4ZGsxZTlxd0dPL3dDSjhBQWYra2t0cmRtTkF2T3Nxb0haYkQxZndCaHRpWWVIWEhaQ3VyaVJhdWhrIEVOa21Zc2lHNE1udHFBYmFQY09NaXhhTWpkMGZ2QjlCUCszUFQvVnpaaEE1ZDNZY2ZYSmdrdG5zNTJyRU94a25pd1RBdG9MUkhLR3YgdzZIZkZ0d3Fwd1F6bFNrTGF3VHlielYvSm5uaEtTYkIvWDhiZHgrZzFGU2RrcmNtQmVIWURWNUlsa3dLZlczZFBtYWFaQzhIdEJ5aSBOQXVZNEdOUWhpdDJSa1gzd0cyaitWSis1N1dMS0EzYndiOGcvcUErL0g3ajVWbFNKRmhoZUpvaTQzTXJzTVU5bTNJdERHVHZxejJuIG9aRWFBc0pONFRPanBJY1pZUElYRStyR004ZWVGOFhSSTRIVDRvNm8xTThsMTdjbE4yUXRyY3BWc2hUcSt3akZiaWQrdENteWx0UTYgL01USHZqYjRQaDNGZ1BRM2ozclBhL3lwc21KeTNlUUFPQSszVUN0MEhaRmcxZmJXVkFoamM1U20vTDFVVzFXeEJoRHE4bGVybFhjTCBBVzRlOFdSdUFkSHRzaFMwR1k4a3hkeTduK29SSEFBRDREOS9ZQUNsZkZ1cDgxNER1ZFMyUlcrb1N3YzRhdk1NeWs2bnNKbEZ5a2REIFBVTjh4UHZpbnk3Z25vZnp5Q0c4WWxCbG9WZWpQTnFmZG5nLzRBQWY1OTEyT2xzMzVVRmdPR1VVeVhacTBxbmpiWlU3VnBxeUxZZkogVVZlVjJsa1QzQVA4eGt3cTZIOEJQNzRRKzc1UW9UOTNaM3E1NEFWRWYyRG56OTFaU2ZISDA5UmVxUjZrVHNqZ0JQWUV5TzY2Zll1VSBlZG5sY2VWczhMTXFsNVljNFdpRGlYS1I1MnJ1UjhWRWU1WGN0TjdSM0d1dTJyNGVwU29MRWg2akxMNDNxdTA4TGNaVGoyRU5zQ3dsIHNwRnRoRGNxZkh1RU14REViaHZrQmcrRHRqTUxhQ2F6aWttK0RnUFBuOS8yQUFVZzBwZ1hFL090Vk1NVmNrNzlIN1hubHNld2h5Z3Qgc0tXTW5qekZxQjF2alpBeE80ZmlxN21UcThvVFJqbU85bkFGUW53SDBIOWV4UFpNdERyOFBseVlkYnRTYlQ2a0pZSmhKZnNLdDVWaiAwNWNuSkdDSE1EMnJEVzE4UHY0QS9PNHlzMmdMUnZOMWNiOThPQStmOC9BMG1QcE94aC95cXZhcmFmSjU1U2QzQXduSTdZNFZ6SzR1IEx0UStoL2toa2hwOE9DK0VUeXI3MlorVEtnM3BKN3FJT3dBRDU4K3dZSDJGVmFPUUNQYVFQZzBhdGNiWWxjU2kwTnVzaVNMYTdCc1YgMWNiWk9yTkk4cnAvR3puK095cGFoODVVQWVSV05jOWNaeFhUeFpTdHNwTm1jRGZNNVNkMThDNGZMK0xFaUFENjJ3UTdJVzRjMHhoeiBtQW5vY0V4eWJ0ZXpZbkhkSlNmNkJRWDd3QURxZWZFY2dMSUVseWZZS1RZVmcxWFV0ZXg2VE9oNGo0ZVY5UWl1TDVBNDk3RTlQWkNEIGhPVXJBUFBGa0V5UlFvc3MxVjdJYmVBQUFBZkFBUEFIeVFPUXk3R0gxNmtKb2RidUNmcVFKTzdCVXBpMEhldDY1bGJvbXNoQmpXNnIgTVh4TVgyUklQRDU5Y29hd1R4YVBhcTdSNzJQSDdCc0IvWU9nL01VMlFDeVdkbEtSaVN0cVRVZ0x5dk1KYzNUMHh5TFNnTXdldHJjTyB5US9lQnc1YTRQaVBNV2VVQzBVcHdud1lBQUFQNytBNkVzWkZWRWRIY1d5QjJNZWNiVmk0T0xlYU5pdTJoenowY1lWS3h6RlBHWHdmIEgxSXdjNHoybThjZ1EzSHVKeDU2WkMvZ0RhT2VQbThCRThYVzlGTHQ4TzI4TzZHZWl5eWptWUh3ekZrUXpFUDRjN2o5bDF5dDhaMnYgak85aFBQb08vbndEOWowSGc3Y0tkcjY5aTIwTlNiQ0YweUVZaCtTSElMMXdWeTBNSUdNSHhNVnYzVTVpNEIveGVCNUlNWnlndmpMdyBieDJOQkFlZjZHN1lyOUxnS2hKdDAwc2pJeUhnS1NrSzdJMVdBSlczdzlXUlNWWkRBSHJjT1lEdmxnV29xbng4OEdudkl0WEtET2NiIEpzWi8yUDhBbjlnNnRFUXR5czdWVXlVQm9UN3NySFdsTWY1Y2VIZnpCY1llME4ycStVWUlKOE5EaHZqZ1BNVnkrZTZyRDJ6N05XWUogS1NUZlBuNUJmdjdCMW1lT0k3VTB0Nm5abWpRU1E5MzB0NlU2WXBJUG1OTVE3VFdQT09BOTNXamMxTU1ld2dqaVdmMTBoMUVVUzdpUCBXTExLa2FTR2dEbHV0TFdTNFlndGtqVmRIeldPbjRhR21nV1RWRnFERDJqRTRyWVY0V0ZpS29pSlE4V1lQWkp0Sm1LM2ZQaDBlQkh0IDFWb2FNekZLdlpobmRFSmFPSDM0Ky9lQUFkUTlabkY5amVIeG90RGxvRjN3cllzNGFiN0NUMTRPTHg3b0s4TmZEb2Joczh6WjU4RDQgRUNIOURGMW16Rysxd1JINC93QUJmVC9uK2dPdjdjdnl2bkRVVm0xOHFWYytWZlp5VEVUN09xenQ2WWFJcGF1U2t4ZnJma2xWL0RjRyBTZDNoclRaeG5BME5aSnZBUUlrUEdQMS93Q0RzRXdwTURvcFptVEx0QWtFZHE1cXRrWGg5UDNZd05sa0s4cElGb2EzOE9xNmZjREV4IGZtUVR5K1BWZmQ1UXhmR1RwdTBUZmdQb1BXcG9uRDZoWlZDc1hTTVNYZWJtS0tXT05Wb0NPTWJwVkZ5YkNpYk9WREx2MjBMWXd0c28gRS9pb24ybXljalhpcTVxajF4M0JRZG0yTlg5MkdhZ1R3aklCRzF1Sjc1V0ZJRTF1MEpyWlY1NVE1SkVzaVp2Qy93QnhnTm9UenU1TCBOb1hKVUN6NFFJYzM3ZnovQVBsMHBWUGkrVlpCSmpTRU01RG5vY1lUSFNTUTkzY0hLVldTdVVpV0FZRHJmY2l5Rjh1Y3N1bjFMWjhSIGxORkNmQnpadEpCN0I1L2YvQVhMcU96Qjdrdmg4MWpoalVPdnM2eUJOZm4zQWUyZCtBTm11VVhrRGdZbWJPeUR3N1ZQK2VjRDdadWcgeDU3WEhIWjQ1OTlmUG44T2hDOUt5ZklvT3ZaK2FIakt0akhpVXIvR2RoOE1QS0tNUDA4aERaUG1HUHJjRnRIejFWd0dib3JyRE1jQyBKUDdBdi8yRGY3a2paaUVidHc4SHpsa0I4Y1ZXUDVQbnBRa1JWRFpYbDhIaXFyL1c3djhBWFFIVjdKYmp2a2ZqbDJKWk4zYVZodHNHIEt4bVd4TGh0RnRmRlRlSDl5S1RxdUVZY0RPdzg3Z3NqTThrNnYydzV3bEpCNFB5RHY1L3BrTUZ3V1lrQThtMEtxY0l3MWpMb0NRUGYgSWNlc3JJc1pYM1cyazhnbi9EY0dPWXdUSndGd0EyTnlZWjlHOEordjcvd0krL2NCRlE2bWo1Uy9rd01tc2VTWGREVzNjUG41eEN3byBibFhOZ3E3U3lENFlleU9IN2gzVTVoc2JnVDR1TFdTZXllYy8zOTduOWdqYXkwOTVsdFd4blZKS0pTVlVxaGJzSGRsdFhpVEZZV1c0IHV5WEJ5UXhodkZnR0FiYXdWS3FoOXNhVmRHSi9TUWdQZndHRy93RDY0VEJSUmQ4VUhiblY0UmloR2xXTHh0dWJGaml1T1NjWGtHQ1MgUEpSVldTN2s0M0hCeTdjK3ppaldJNStSRGp0VUN2S3pNa1htMVdrNU9hWUNWN1lLcTFSNWN3Q1VMbEhMaDRlWnpFdzRKMFA2ZUJhMSBzWnV2T2VEL0FFa0hpL2Z2K3dQM1RhMWNJOThDM0NtVmRvZHF1cG0ycTlxNHNIZkJ0SHJ6SWVLSkVYa25lQU8rR0ljUDRjNVNZQUlNIE9NZWhUUU1lWGcyYjgvNEZCMkFBQTZDRGhETXFWUG1CVTM0MWhSYkNJaXFIYWtsSHBHR1VBMkZYTVZQY0xJWkptRDVaSHpZS0hYNmsgY01JNnkrVTNVQXlxd3V5YkJ2NEEvd0RvZjZuVlpTcFZTUUZHV3AxQXhMaFBQUzRkZ04xdFdlMU9ObjQyRFp3c0xQTVZXeDFiampCaSAyS0RVVklLSEhXYzBEU1dBQjJ3cy9IMCtrQjZmZXY4QUZoOWE0cEZDSzdiMnp4UjA1eGxmaGJ4azUycXNmYStWL2JqeXo2ZnVlQStpIDVjbVFTOXVFbmFXalVXYzhLRnQyKzRkdjVGNnY5ZktFTlBNdTd0Z04yMlRzQUcxQjh0d2ZGZDNWOTRYMXU0SmhpdDNEa2dLaDJDcFYgVkQzTjh0QlpSbmcyYkNISDRBQTJEWUFDRDA0TXN1NEFSZDJjY21KTXl2aHJzcDBPNy9qSVBLaXhDaWJEWUZzdXQxdTRCK1lOUjVmYiBWWDdNTHRCR0dIQW52c0I5KzkvN0JBdURvcnFWd1E1VmZHRXF5RWdQSjR1aHVHMDlyNVVTeHhkYmorTnZpMllodUVQY1AwWkNheVV0IERIZlB1MXEvbDQ4ZlFjZC82TzJCSHJkWHJzT1pGdmthdmI5ZkZ0U3RoVld6RU1PMEFWNU5ybjZmaW5vY3hrK1o4K3dKN3d1RXlaUVggY0R5alZja2hBYjhBL29FL2dmNmlsWklvUkhtZnFFV1NFdW1HYVd0TUJreDUvSHh4K1IwYkxpU2hhTXZGVVRLaloxdGdBTVRRck96USBvMVI1UFNJbUN4OENIVExIWHkwdHpKV2RHbHVESU5ZSzlaSHlTMklZRlBJSWVvU2JEbTJwaXlBLzBPQnlieXJ0SEp2eGR3ajZDZ253IEcvNGRPRDE1WWRkRDNNaGk2OXFXN0pXb1JTMHRQREpNSTNIVzhXeG9tQlF3d01reVl0aHc2KzROVUJ3YlVjT01yTnBLTXl5OEc2dTIgTkJmcmRBUHdBK0EzOUc4c0tac2hxVHJIenBOWXFSaUxMSG1MQ2VGTXcwUGk4VTRlNG1NUDV5R1FaSndGd1BYOEhKbzNLQ2JOc215UCBBRGZ6L3R2L0FCOXdQQ3ZzelpXOWpLN3NrLzRwSlNTTFlhcGhpV3lJY1VUZHpSRC9BS2JjSzNXOFhDdWJNWUFPTElUck5vZkdaWk9PIHdUd0NDZlA3QWYzOEJIOU1yODNmY3ZiSXRWN0g1eHY1N1RkRDhkTGRZM0xTZSs4VXdBdVI4Nkd5aS9PNWozTmZaaDdXdmhWcGRicjggVXc3RktsYXJSWkxCdkw4SDVvMlBZVmJ0RXF3aGZKS3Z2aTdFTzFBNGYzZ3p5R0lOd1JtZkVyVUN5ajdKaURBSVBuMkRmd0I5eldCYyBCR242clZZRXF3bmFzVWpPQ2Z4QVZ1K0IyRXhGVGVMM0l0a0dSUDFJR0RGYi9EdFR1QTIvRFdWbmRCZ3c1NFE1d0h3RDhmUG9IU0JJIEw3NGtBL2dIbEJiTVFGdU1rYm1TVjdZaHlvZ2x5UFdvUVhFT0hkbGtXUW5oNTJtbmZweklUOHA1d0lFU2VQZ04vd0Riei9RMmpzbEYgd0pGaEN6TXdJUnlvWTFlRGgycXJpekpjb0dKRkYyUlg2M2FnZWgrWUQyU3EzeGZ3T01uT1dqN05zbkNmUG56L0FDQStBUGdDbVZuayBMcXJuY3JlVkZ5enhJd3ZsUXVOdlhCdS9pdWk3UWdWblE3U0pIcDRuYmJHMnA5b2tiMHhqeFpka3NOd0R6VG1zeVl2cTRleUxCTTFLIGtod05uSk5aRUZVRFNBaVlMcVVTK1JFTWl5Y3dEekZ0Z0QyTUJvK3k0UDVmRnE1UDhvNFdqejdmL3dCLzREMHppT1k2S1ZrV2RhR1YgeHVZQlpQbG1BOVN0Rk9MYXZVb29YYlMzOE5QUTRkYmhtRHVNQlQzeEhRK00vV1djNEVDSklOZ1Bud0cvSDJCQjZwK0R1d09lcWZFTiB6eEptT1MzVjBTdDhtd2lCZGJRMWQzbGk0YmdIbU1oaWErRU1JTStydUtyYU53TW96N0draFA2QUFIMEhwa1ZJajVRWVdlbEpxVFV0IGhWQnAyUVpmY0d4NjNMT0ZJdEFuRzJnN2pOUThMSDdxRG9iVjIvUFBEZ3NvMVg3WnNadmhDTUFQb093UHgvOEFRWkVjYmNSTzY0Mm8gdFFrZzNaSHYrTm8wdGFBcDhoWnNGT1JYVWpraTVlTm5TcStsbkRZSkZkYm00UUc5M1pqeUt4Sjg5RzFmcGJwbFpTMnBKcXE3T3g3NSBOWlYrWU1TQ3dkb3ErSlhOTncrWVRZZHdUTElJVFFiYW5nUVZxRTBaRFEyWkdCdXh2Zk5nQWIrZmZ3QUJCWkN1bjZmNStvZzhCdFdwIEszbVY4MU1rdnNPbnA0bUdlN2UzSmFLZVFyZUhXNWpnZGdUSU0vQnVOc2l5OHRIazlsQ0hEbmFMZndBQ290Z1AwelQxOXNZNkR6bWcgRFpxM1ZlcVVQcXJYa2V6bkQ0akltMjA3cHF1bnI3aFc3SXRza053Vy93RDB2dGtBTnViNHI5c3dlSVRVUHdGLzM4QUFRZkFPYU9ubyBXMTBuT2QycVNIYmRSUkpoSUhwaXUyVldMYUN5YUJmQ0FkYnNpdDVrMXdRMnFBUWJRYkl6RFB5Ly9xaWJCLzhBZnorR3dUY25jeUhkIDJ4Nm1tRWpHV0NTWFVkZ3hhS1dCYWpIbU9SWGZNRjdWTVJrUWdVeEV0QTh0cHA1bWQ0ZlFoMCtyMkYwcm1iTStwTkpPVWtpd0FqMjEgT2NoY0JVbVFzak1wRndtTGs4Q1NXM2VFeVdGVzhQNUM4dGdTaVJhT01OZlc1aTM4eUdRaGd5REJXbnc5c1YzeDVXWGdKVnpzYzMvSCBmOS9BZE8xcFpGOTNGMWk3dmdFSk1QMTZreEtQem9hK2ticEt0aVVobUhBd0hzZDhUOXdEMXo1NzVhTXMrVEovMXQ1OEFBZnRnQUFPIGhwZ21DeWo0bi9BbUlNeGRhMG1YWkNxa1hRdlE5MHNJV204ZzJlNFBtWHh2Q3Eyc0Z0SEhCbUtlK25vbWNDRzNZSGp3SDM3QjlOb08gK1dwVXVwd1BmcG1ud1ptdVllcEIza09BRWUyZkYwK3J3R3VxclgrZWN3bWNndFJxdHBmVWdiNVdmRjFmK3R1Nk5WOC9RUUhnRDZFQSBqS2pLSGtWM2RVZU4yV2FXSGNqbDJ3eW5hWmE5Z29zWHJrQ3ViRVBIR2tjVVpTQkM2c2djeE5VY1ZGWXh1d3lYam1iWmNENEJVOFVOIGxDRDRMdEJwN1A0TzlNdTllMDV3Y2E0VXZUcjVVcDUzcHdvdEVIeFBUN1VoMXU0UGtFQ1FmQWUyVysrWHc4Ly9BQUFEWVBvUFFIWGIgUlpHcVdvME03QWFqYnN4NU5rTHkvRDFSTUZoTWdHeHRQWXFMTStZR3Jmdll5Vis0VGg5ZnovbVcrekN5cU16STV6dlp2LzVkUDBIdiArd2NlWFhkcVdoUTVlNlZlRzdhVjZESE5yRFRBQzY4YkNXb3RFTnNVb29ZSjdpdHNrUGI1bW8xRHI4ODFkeTFob0tkcy93Qmt4d3czIC93QUFmQWRNaHpyQkhDM0l5T1F1Z1dTdmF2VzQybVVQa1ZMYUc4QUJWWkhzRU1jWUR6SWN5WVBtNHFUQWVuT0pQOERrOFVlclVsMk8gUDJ3UHg4QS9ZdngrS05LM3BOS2gxSnpVUzZhZmNyQ2JUeHo2YWRkdDlTdW9YNmlOcEV5MUcxUUYrcGZVYjZrQ1NWVmNSTGpNQTRDRyBPU1htTmtBOU40eGkyTHh4UTduTnJhanFQdmtKZE05NnlJTmIvd0RFS2RxeXoxVlNUMHV6SENnV2oxYWRSZW91MzFNQkRDMkJxQnNkIFJjYk5sUzJ1M0dRcEY5Q1U0V21KemM0RlkwZXZ3ekZDbm04K1JMWUMyZFhsVU5UR21NY3RnL1ZiZG54SzNaaUFOZW5RSXRwTVZHRzIgQnlWTUY0VkJWck5INUxocUNwa2l0cnRoQjRVZGxEcWtLQzdoUVdYTnpZd2w0OVVYSDBwcWJuU1BSWGhJTFVVRk80QllGZkdQNlA4QSAxL1hUZm85VGZlSnkzM2YzYlZlZVAvYS9mai9RZlBIbFlQUjc4VjBPd3BRdktKSHMwd0VsUEI2Z1VkM21BVmVzaWxJR0NCZ1BEbUdQIHZpT0JIMXBhamgrTGlpT001djhBMkFBZkFZYkEvQUxwTGF2Y21iV2JnVk0xakdHMkRTYWpVN3dCc2luNmN0U1ZwZlU1U0gyL21MUmkgK0Z1MVBPUU9XNmMrTXZOeUZWbDYvVDkvOWp3QS92OEEwc1ZzZk1zR1loeFExR29GekdlMjdEVDlZb2NoaGNYUGhDYXJzZmJkYlc0YyB4REgxV2oyV3dLUVAvUzlEWnF6Unpac0ljdDN3QjgrL0FINStoNnJYNnpYTFFNTWFRNFJxSDdNRWxQbFRTSGQ0ZlpIYStTZGszeDhzIGl0Mk9laDl5MDVENGVUR2RyOXNPSlBDVG5BYmRQZ0FDQ2ZQOU5sRWJwSnQ0R3NGMUxMRktrY3lOZFJUUEVrK0ViMGJEQTVrR2lNVDAgcEpwRWtoTFN5TzdaWUV2Q1hYRVJsc0k1Wkl0eStDMkxERWhiOGk4c2ZSdUN1RFZwbjIvS2RxdjBpMkNkc2lYWkdwdXlLZnNKUDJGZSBxYTQ2Zzdqek5RbGJwNWtkTWdnY0lCdms0ekRIQm14ZGtvM3Z4ODhmOENmeFBxdTFXRFZnWlF5VmFid3BIcXZtVnRUckFuNXpCTDRhICtDYlFybHcvMVVtT0FkZjRyUEliR3lNMkJSWEpzeU9id1NkZzU4QS9ZRC9WaXFEMUFRMUpIcmV0SzBzbGJyZHkwdXJlb1NRQkpJOXMgTFlFcmZOWDNMWkNlK1E2ckQxdUhyOFBBYlNId1RGbUUrTGpGbm14dit2a0g5RC8yQjJWY251Q2JsblExakdKT1RtVVBHcjBnWXIyMiBMNTVrTHJKWEtOOTRKL0czQkQyOWJhdjRnSjljd3lZeXJ5anc4OTBRbk9UNERnTDhBQUlQVmFNNnVSUW1vMHlSYWxIbWdnamllSnRXIEk5UHZrVHJnODBnK3BqamlrS1N5UHM1aVBNeXh6UnJjd2gwOGpTYVpwbjArQUxUQkpXZ2prMWNjTU1rZTdMSEZZZ2tuZGNsVTd1elogV0xJVldPUmZsaVFDRmV1VGFOcFBPcjYyaHRoR0dOUFh5eUhGS085b1ZKREhwNjNEMmV0dDRWancvVHh1Nk1zSzR0NVdRYVM3Sk5WbyBPL245L3dDZkh6L3dZU1R0UDcrN1dCcE10VFRPWU91dGNId0lGYkNtRjI5aWxPT2NpNGwwVGFiZmNNUmlBRjZlYmo1K3VwWk1uV0xOIGlVTzJmNjdQT0FWNndWLzFWOENZVHVNZG1RdzlqVmZiWXNvQkc1MHB3VzRpK241TGpFbUFjVk81RHhoZ0RtSzIrWXQxZk5lTVdDZUQgWkdmZEJmSmtkSlNkUER3ZmZ2ZCtQMUZ3SHJjeUNxcnlrZWpkUEhaL3N5cEtxa3czeHFvdmhQczFidERhZGhoMmhwN29kUFpLM1pIQyBHandHQnQ0MFRScms1eFdmbTNiQ29qNS93SFZUT1JKcDlPck9mcXY3cnFFUVJIWWpTRjVScUhWcDQ1Skkxd0lZUnhQamxic3ZhSHVNIDR3U1NHSlBTak9waGtVWTU3cEdhRmU2c2NGcHJOMlRpT2hXeUdpbzU5a08xalR4dEp3NjV0U0xadEhtWENwMTVEVFVOaEEyZ2hzRzggUGxKekdRZVluTnZBOTRKc3lHOXN3em13TTJFQUlPL2dPUDdCaGFGVG94UHRxNkdPb1YzZ052MmhXOXh0Y2hiR0lCWk9RNWQycHRUViBXblRNTHJxeDhXNEdJSnRyQ2ZpSFpzSHdYZ04yTkt1MUhxSkJ3QUFQMFA0VmtGdWo0R0RoMGhTaHltcFhNSk5PT0dvVFQyOEpDMktxIC9uaDZrMkJrVDdURDJtaDAvRGVLbEh6N1UzTjVxL2M5OHE2MFFod0J6N0h0RDdIK2hzRzhBNnpyKzdHT3M2bHRHSFBzaEpsOW56eXUgSmg0bEtuRnhkd2htSmlGWkc0TGZCTFE0T0dXS3pWMmpqS1ArdFZXN2JvQmYyQitma0REUVkzWmxjbk4yMm9tYXF1c2dHcXorVHhmbiA1NTZFU29GWGNPNGpjaENNY1pGeHdjbnV2SEltcTVzbXgxYTUwVDdORm85blZDR3pwTnByaUhxWnJKb3JDeUdDV251VGtrZkxyZGZ4IHNoUER1QWY0YngyUGZLNU1FOFZmRVo1dEpTZGdBQUQ2Q3dJSjhBQVRLMnJtTW9ncW1idVc3YVBDODQyV2tOUTBoRU1XTnUxY3lqQTkgRERzaUhaREl2bVBuNzk4UEZuNTRzak43Qm05LzVBZi9BTEIxRHJZdVJBVjJROEJhdFNBZW04cFNwRnBjRHc4dERxOFdqMk5LL0c5cSBYd25tRThnNEkvYi9BTGpTN3lXZVRyT3hoRGVDTy9lZlBvT0h2MDVRNUJZdmkxZFFlbURUbHB3dEI4YTBtcEY5UDBzTWZlME9CcWF2IFdBQ24rbXlHTVJDUkpqQytJMTBVOWJMU0dXN2VHVmM4a2NVbkVLY2ZjVi8xTDUvMGdUM3FYQ2xLa2MrYnVNZlVSTHl6bGhqNVhJWTEgdUErNDVVdzQ4OUxiRTVPc20xNTRta3lCeGlrazdUaXRmeFl0d2J6QitLTVFwdGhRQ3A4YzVVTmNKUjRJSklVbUhJSkNlcmxMQ2xBVSA0ZkRtTWlmYWdlZjI1YldDQThPQ0tzaTJsbTJQWXdtd2MrL3ovVVBqWEJWNGFtMDhOZkdUSkR6eVEySVBhbFV3SmhwcDV0c1lDNEVJIGtOYjRlNEw2ZXE5cjYwK1lNcURpeU04bkxSQ2V6OGZRVDRBK0E5OEZ1dDArOFh3REpQZ3VueHNPQlpGa0wwZ1BwdlQyR1krV2hFUE4gRlZML0FNeVloekE0L0ZxeEg4SFczbG0ydFovWkRaemYzNStmZ0NDL0h6OXE5T1dubTh0VHpmVzJuNFZZc3pUK01yZkpPaFFObUhVZyBKWEZPTUVSRlVqemErNW1LZTVxTWxvc3pWYzArbTRzWDYxQ2F4WnFPSHg5SG9ZbjQzWDRQTVlQU2JCUDFZVjhXYWVUUi9UT0tuZzlOIEVLMTZFcHNrN2ZHM0o5MlQyZ3JtUUNZTUYyWUp0eEk1Rk1xeThSc1RqSkh0U3g1UnlVMkxOZVdCb0FBNUNVTmtzVFQ2WTdxV1dOZHkgVEcxSk1URUNCY0dFT2VBdTR1MElZNkhRNjFqTVpGLzhsVmVlVlZzWXNvYlFNSjRZQkRZUkIvN0FmNllWc2NzZ0N3N2JWVEtON1NubiBhV25rVWtoTE1JamxUaDZWRFQ0Ykl0MVhUMXFPRU1HZTRHMVZ1ODFBK0RPTW80UTJrbktpUDRjK1A5STJaVmJ3NUorL0FaaUJmd3V0IHdsVGZEeVNGeDRYY1ZiS2JmVEZnTGRibU9IbDYvbVZ6MnZQZG54anlyMWV6RTBjNGs3R2c3QWYyRHdBQXcwLzVjT2U0YndycmFTK1cgRWVmMnpoNzRQcktZTGxSTEdjazhlR01NaGpraEFNMVBqQUJhc1NmRnhhTWpZdTNOdWZJT0dMOEFma0UvMUhkRks5MEltanZlaU10NyBlV0dESytBNytHd2ZIdG9uRTVjQ3lPMXlORzdKSzdPaGRkc2NsTWdCYlhYYlpzY0U4ZEtzUHpEL0FCTW1CeXFUREFubTFzWVBodUNRIFlhQUtuekxqK0MzOHhQWkhDWjhBZ2VhdzZ5czdXdGJHRTV2NytBZnYwUGdFL3Fra05rQ2pnNWxvWkpJRThraFZOWHI1d1Y5UGFlTHIgbHNhQ20zMC9NcCtiYWhqNFp3RGVIYXZuRnZsR2kzdk5tK0RuN2RxTHovNkw5eGdCeFRucFlIbHVjcFE3R0R1MFJvYWcrMHpMdXJDMiBCY3FZNEo5cUdFTmJoL0RzYWVRbjJNdC9sRGMyYmU2dXdPYi9BTEFBOW1EREZTc2xpTkNscGpNYVpJRmVwSml2aHdOVElUQU5nQ1RGIGpPVEM1UlM5Znd1QnpERXhnRHRRQmZmSGhqSi9mRmxHK2ttLzJBQjBySEYxMi9VMnB6RS9HTlI5aGFYN3J4b2Ruemw3aFhKSi9HKzQgeVJab1NtYlZrNkZjWXhRKy9JOTMyMTRKTkRSbGtMSWdORElCZ2JscURQUTlTRFl3WE5aMVAvRGFJb2xYK1oyVG1NaUhEVytCNzhQYiBVZVlUR0ZCWXhaQmhLdS9FUi9ZQUgwRStBbVpnTjBJTWg3TlRUcVMxV05WYVNwMmdxOTJXeDhQQVlsWG9ZWmdaTFVEc2hpSFlESmllIHE3RnF1Qm0ydnhoenpadytBdzU5MGphVGVGOWpzQVpYMEF3eU8xZzV4SmRqaDhCL0R4WlFzVTJkZnJpVzRRK04vd0Q0ZnR5cUhXZnEgNHlzK2JiSmpzSDM3ei9UeVpCMTgwaTBIaGNVODdQazlEalZsSFZUKzB3N2s0UWUwNXNpLzJUTVZXdHcyRGlwN3RMQmg3bnRZd1pzaiBzYy83QnY4QWlCQUZ1cTByS0dRVFNhWXlEVE8rTStEWUZHQ1VieXhheGZiUTVOOVFCakdzakRGSTdXUTNsakphaGsrTHhvZDN6bDRGIGNrZzhncjIrUFZhNXN0a2pEYWdQTWp2WUdkZ2pxWWRvY3JDUEM0WTlicXR3V3c3Z1BaQWUzejJwd3Q4WUw0eU1CbS95cDkrUWZQNDcgQnBiR0ZEaXFkWWdhSHdrNTJjTnJkMzdxTGNlVzROQUdKZHd0UTJlMUE2MkhzbmVEbkQ3YXhtTXl5TC9ZOWtOLzVmOEFZT21vaHRCUSB5TDFPTnRsclkyenFxVlVudWhmQklnMkdFTXBZUlFwaXd2aTJZcmNPbmtJWGJSZ1F6a3g1dC9nZVB1RWRnZ00vNzdBL0h6L1NNdnZJIGgwdzd6VmRpY05PRFUyZ1Z5a24vQUxlTEYyemJpcSsxOFpMa0FXak14RHNlTFBESFFOdnFVOE1VZW51c1VYQUc2cFdIc3dyNSszcS8gWU1HQ28ySlFtUWgwR0x5Qk5NN1h2U1ZHWlpBbERjc1lXdHJ0L3dDSnMrMlNnaFk1RkdVTGJmcWVLM2N2dDVzREg4aTcrSzUrdkFkSCBZMHVHTHJySmJWVlhyMnBVamxUVVBMQitMcWJSS2NDQmd3eU9Fd3h3TTJCcTc1NzRqSTNreG05bkt1L0VSLzhBWUFIc3dyUW1PRURNIFNXaktUZ2xuWnR0TWpDT2ZFbG8vbWlqREtUV1hlTElob2VMallFeURBcS9pcjRqSXo0cmpHWTVkZ1EyRFFUNkQ5QnczOCtoNi9iUDggSjBBbExHTXNqS3VKOFpza0FiSUhpR1FYcUNMZkVEV0JNUTlQYmhNVDJDSEFRKzdVNWJXV2ZsRE45SlNYWkgyQis0Q2Zmbi9xWUJzRSBsREozTTBXRFc3YTdCWHdIYk5UNTFoWFE4VldMQWlYSVh0OE5QZktydUNraUV5RGRWd0tRTU85TFBGMWw1T2MyQ0hmNy9pQXdBSDF5IFFPQm51NzFPNzF1eW5IY0NjWEhKRlI0RkZnMlZHZ3ZOaXJ4aWtjdkZrNk1DNlZsZ0xLRVpkOFp6RzR0aXdCejBTMksyTWtybTBvTVMgTmg2YmF1UE5HVFZZZHMrVTVTeFl0YkgyT0hyZGtxdVlRY2FkMVNwODlIWkZrWnp5My9PR3pnTStnNG9QZDBCdjU4dlJ5TFFVaHpiYSBpaDF2T2R6eEpoUHNqNVU3WW4xZkZsMXllNUFZdXd4ZkZXTFk5YlZkUEM4aC9NclBIbmd3WjlKQ1ZXL3Z6OGZRWDQvdi9TM3BxNkpDIDQ2Wk0vRkpXN1BET0ZrZkhKY0dFd3BWWHl3TmN6RjRPeVRBOHorbFVPd0xhK3M3WGFCTVlqMmpWM24vMy9DM2NlcGNlVUlXcjNDbEogdEdoQ1RSbkcyRlByR3ZYaFRaUHIxbzNKZGkvZGdkRER3cXJJaDFYVXNQZ0F6SGFBcHpsbVJuY0lrdkovNkNnZ0FCL2tDSjU4TXRLayBicjJSdVppT3g4OGlCR2Z1eHhPUjQ5dzQ2Y3NHWk1yeUkrSm1wVU4xdGJWMmVPR3pCQXJqRStiNDdaRFJXYzlzcndOYlhHMnJLcmR0IFh3NEYya1VOREtkdm5MVVl0c0h6SEMxQTlKanc5alh6L0l3MWxHS2NHV2VFbTdSZVBvSi9ZRUh6d0ZJVk10dHNDbjdHeWhxMkhUWmogdEwwenBOek5HcHBQVFRvazlMUXlOcUxhSDhRUDh6Q2ZSNmxWY01Zc29lMkRPRW0vQWUrL3YyT0hUc2tXUlErVThxZ0ZzeWRSOUF0cSA1VXp1WVpROTR6SWVGU2xkU290N0FUTElwTXV0VnV1ek1OUE9tQlNDVEdWNEZrOXRSZ2ZDTVFJSFlmb0hIL1VDV0RTZFh4YkFaQmQwIDM4cEo5akt0YmllNUhCMTViYUxhcjBEcGZjQjlrTXEyK0dIQmYyTlNyK0JYSWZrMVg5b0dZNGJ1eEpPQUVGKzMvRStBUG43RHhsWFYgQnRQZ1pKVmwwOHhPNE1iWlhjUnh0bmRNSW5rd3hVTVJrcEpHSmxrRXJENm9OL0ZKRnFJbzhjTVZUSVJuVWtoSTVaa0dSVExkWWoyRiBUcG1VK2wyV1l6bWpUNCtjMnRXd20wVFgrY3lXUkVtaTJoZWxDOFNFTk9mSWEybitEbldoQVZXUW04dmdzWjRUK2dRRy93RG53QUErIE5vY2lZaHRtMTJoTWsxSzIzTlVwWmZRcGcvWjVYMmkybjIwR1RFeGNENVcvRDJwU1FHMVZNY0c3eXJKTjRTZFBINy93RFlEL0FGZG4gVW9qNkc4cmlwblQ2U29FeG1rcFFrZVlUMGVXdDhEVTBOeXF0Z21CM0J3NUlQWkp5R1FQWVEwYkVXaWV5TzdXajc4K1ByNEEvN251ayBqWWxlU0lHWERhQ2FmWTlWcTVpbktjZUtaVDdmK0dmdTZ6VTBWWEMvV3hsdlR6TEl3R05oWHg2cnpyREVXelBKejZTOEFWOENBUVQ2IENBUDRNYVNPU29iZE56N25TZ0tyd011NzNjOGloUjV2aFdMUXNXRWVlRmNTbk93YUZxY1Z3OGMrNiszeFZtaUZxQm9iaytPemtldjYgU3RobnhKeERtS3J1Q3d0aGlxWjVEY0I0WkRwTlBaREZnV284VDAvWXd3d25UZG9MUEJ3Z1RnNEFCL3Y3ZityYUVLM2gwT3BvZGFUMSB0dUE1cWVTNE8zMlJINDBCaXRrcDhoa0poaVlZWkpoQmtzWURxUTRQL1ZDdXpJMVZtOTdxdCs0Q2YzOUJRVDNVOVc2bVlzQnNKTGlhIE5yYzlkTGpHbDEraHc3QVhwa1hGZVBPUmk0QTc1U2N5MVBaa3hReUhia1BXZTFsQ1l2bXh0SjFHSUlEbndEZ0lCQjZhanh2REhjajUgYlVESjJHMVRFYTJKQ1REc0JzY0hOTlhvdGN6V0FQeVd0cmdmTVU4NUFYeDV3UDJ6N3lkekVjSnNpUFVYZ0Q2Q2Z3NllkUmxNa0FYRiBJeGt6QVFySVpDVTJuUjRvWThOdTN5VmxrenlGRktPVkdHUkVhWm1EdkxNckxBVjdIZVQrUjNHUko4SlFyemZQUFN4eXlsbVhKcHZhIGROeDRiR3pxTlZIK1lIUTdnVHkzWnROZDN4b01XaGRscUxmd3pOd2NIYlhEWTdJRjJZcnZoTkdCdTN1YzRDaElJRHorL2hMSzhWL28gb1FxZ256czZ4ek5UWk5CWHhYK1RjeG1uUTRxVnFhT29hSVFXMldoOVNGSnkzOWwyRDRGcHJlS09oWHVUZVRnUTVpRGZqMVJNR0hBVCA3QWYwNStuK3A3SGRLeGJZbGtLUktBNEV1VUFUMWJsbVNNaHBKNU53Y0ljT3lMSTNoUFkxVUN3QUs1Vzl6dmdXczc1ZGdRSnNIdmlBIEFJT0FEcnNJSzZYTElFak1YT0Nja1EwbHNWNjkrT1doMmhUYlozR2NCNkhEWktIY0U2djZybmNQZk9OK3d0OHN3bThXanNnUHRGLy8gQUg1SWdpSVpjTk1VTGlRSXVud3hrYVdDV1JpZHc1WjdLS0JRd29ubngwWTFVOFU4VXVuazFJZFl6RVdmVVo0T0lwSVpRUFNIOU9kMSB1L3VCK09xNVpPajkvc1hJOURBd1dlaVZ4UDhBVG16aCtaV3ZxZWJ1RndxNWt4aVUzTU1vNFRKcUZ5elU3TVhWMWlrR1lJRDF4OHpOIHo4Z1Y2SXNETHo1UTJHT2w1K2RXUzlRUVpZUUJNSUZFalRHZUhMU3o2YTlUaGxtcVQxZHBoR1JhK09IRkpVUlJEbFdLbWlBY0Z3R0wgRlplYU9nejYxcnMvbnlKMDQrVENzR0J5UFlidG5SNWFlKzU0U2I1T3dCWnRiTlpuOS9KK2YzMVllY2dINm1md0Q3LzlQMStqL3dCVCAxQldKbUErQnpGZDhHcE9jMmtySUVrWWJJankzQVVtcVVXVXlkNExnaDF1dGhsLzRMNFBBMXpOWm5rcDdqRWU3QWdSSFBnQUdLRGhmIHV3b09pejBETFBsQzlMQjBsKzFDSko4R3dFSWxxWjlaNGpDYlhYUlJ3WHpGS1BnWVFaSFFyaWd2OTBJNGZIMmZjWGZERkpxNDRmeHggd1BBV0RqL1RQVDh4SHpiZ0pKcTVra2srbXh0a083aHdPeUY0eFY2WUpybXhnN0Rha0txME8xWWJCWkJ6OGxuREJQZ1l0WldUbG83SSBqZ2VBZ0QvN0FBNDE5TEx0RndFc3A4eVczVUxZSWNrcDZacGdHdjJ4d1Y0dHNKc3ZoOE95RTlQaEo3QlQ3d2gyaFBwMU9yUFQwVUtMIEt6d20wYVRCVzZmN1JJTy84L2ZpVmxTS1Znc0pjaFE3VEgzK2F4RmNWemZKdXgrT2dETkl5eE51TkQveTBYS3ZIbHNsODF4eCthOEQgclM2UTFzcGxwSzQ3Mm90bmx5MUgrc3RQL3dBT254S2ZjbG9PNzQrY2ZoaDRhZHFEY05uUjZXdUQ0QzNXWXhvRjZoUm0rWUpJTit0MiBvajl1cjREWUQ2cnZCSDFVVWpENHUrSkpzRFl3MlN3anI0MUZXQkU1bEZ0alYrZVQvbUxkVnpIQU9RbVZ6QW50dk1DYU1UYUJsbUEzIFoyQ2ZsM2dJRDhSSUtDVk9tbUNhajBua3FUNGh5WHlrV29rdld2UUtHUXMyR2VybXZiRkFtQ0V5SHc4UHVDM0JmR0NwVWN6Mnp0Qm8gZWRpTmhOOEFJRDhmNENBQWRXV2tFS3p6VXNEVURSUStvY0RBVzcxVTJCUDFJSzdEOFZ5ZGlndUg4TzdIRFVKVDh5d0ppckJ2QTlRTyBKTlpLZm84YjJFT1ZGK2lDQS9UcEJrTVZTc24xS0pOdHlDQnM1SVkrQTBycFE1am9ieVpEYkxMM05sd2NhYnR4QjAwenRDSFV5dDJTIFRpcjB1ZkZQeU1EaWR5Mk9LNDBhOW1CMVR0clJhbVV1Yy9XMjBPcFUyWXo3VXNpSk1sUGxaWGRLWksvVDlTRXd3dG1HRmJzYTJoNCsgZDR4WFF5Yk43ZHJnYjhmQUgvQVk3L08ySlNkaUhyVnJlNUswMDZza3k2UnNhMmRPeCtqY2l2VEg4UHVBdFhEcjlQaDBPcXpHS2V5UCBGMGorRDhtUm53cFppeUVkZ2wyZG9qNzkvUU8vbjYrekh5WmxXWE5ycGNyZTI1c29DRVUyaTZ5UkNJWXhhQ3dyNFpDR2htRnZnYSs0IE5RK3Y1OVZtSGxtWjBKNFprY0lsR3dtT3diOTdiQWZzelZEVmZWTUg2TUpvRm1YWFVOWFZ1Z3lUU2VrR2NBOHNwVGpCcVVFa0RaWisgcXBEbXAvMjFBc24xclR4NmhQcUY3NWo2VXQzd1lGL0ZBWU1EMi9tQTJuVUZTOCtQeklZbGNpeDduamhUTHdlV1UxOFZadGxySjZSRSBjYnZXQVFTbktpb2E5eWFTc1JWWTE1TjN4VzhoV0Nud2luM3Q0STA3U2RHWU5sZWFMM2FkWDloQldpMmRPTVo5RHdHL0Z2ZTFzeEFoIDBpZUFWa2JMa3VldEJUMCtsMVNVbEpmZWU0c0lBLzZsOWVUT290Z3ZEVDdxTGZLNnU1dkNGeW1uVjJySFQvV1dRa01Nc1hHRUpwV3EgeUNHNFdtWmg0QVBVYjk3TEJzbmN2Rm9aU250M1NlRHlDZmZzZXZzZ2V2aGtPc1pTNXlUbEJJR3cxZnFqU2JBL0hLYXZPWEcrZVZ1eSBHSWI1WUV5ZFpkb1dZanJZeTM4RmNZc25NUWwySFBBSDkrUDFGVVhVa0hVNjdLWnVjTHN0a3RHdDgwZEp0aGZUeVZzSk15S2hwRkkxIHpTWkF4RFExdmpROHhQUTJEbksyekZPQjRyT0FSSjRPZlB2MzlmYi9BTkdOeVU4K3hIWkdmL0RRam8xODVXZUxGVVRadmpPRXg5bUEgL09jZTU0cXF0aFhnMzVzbjlVVy9xc3RETWluSm1VNzV4dFY1VXQxbEhUOGhQU0UvWVphYkZNT0VORG1WWERXMkJiK2V2ei9oakNkbyBhZEVaWjdYTzFvNytBUDhBZ01mc0NDVzZMVHhiUVNuNVZoU1NXbmhrWkJNZkp0U09XdmlwV2hlQTIwbmo1aTNEVDBJdzRMYlVRVDU4IDROajRyakp3NEV4QmZyK0l2QVl1WVhaQ21hekZYS0ExaXlhYjJnbEppRHp4Z1BMbVBxYlhxYTVPTGhNVCtJTWpnUWh0U0d2OTFJYXogdGVBd21jQ2IyOEFENkRzRy93Q3dkYlVveE1BdUJnb1V5VW15QmRtMUtrVi9xaXA5UHNKYnE5RGR5aUc0RUpoaXEyU0hNWHpIWld3RiBKcURzeXpqaWpJMjlHM2J6NkRzRDgvYys2SFR5dUlaVkNQR2tjbTJxTUxkNjh2Q29vU0llTVhHUEh4MFVrY1VyeEs4a2JQTnQ3WWc5IEtPUE1keXp5RE1KSXVLZG1Kb2s4L2lldFJEWUFOSHRWdmdTVC9NTTZleHVtVmZwTzFQaVE5T1pXSWgxMHVFSnRiM0ErQjA5Z0QyTlcgbi9wWWljWnE4bldhejdXZ0UvcjRBZnczL2Y2T0k5QnFhUllGV1QyMjFEWi9UbWViWmJma3F0VE5pMjBTbmREbElaQU95Zk1oMlFRRCAxekExQVR6bjlVTkNOc2J0MnVCdjJEQjJpMkRZT254bDNyQ1Y0N1VHUElkYjB5eDE2N05pL1VrTWdXVzdIRnFjb3BhbG9Xb2hUREV3IHl2cDl4ZGp6M3cyWkdmRmRtSjJwemE2NnJRZC9BQUtpUDdCMVBHRXlHZXJ0UGlsS3JxNnlFeGpDUzZucVdZbmxwaXVldU05S01jd3MgaGtEaDAvNlBBY09WT0N5c3RHSXhHM3Y5VUh3RDl3SEErQWt4REtJdzd3elB6QXpyRXRPb1U1Z1N6eFpZWml3RDhna2ppeVFLa2huWCBDZXNROGF1VEcwYkFacElNVGVkQXFmdG9tamZHNFdEUjY1cDlrVTBocVUyVEtBdjdFd1VhQkllemswUzY1VjhDS0crQjJRek1IaG9NIDlQbm8xUGt5YlFyMW1zdkhzRTgvdi9BVDYrZlA3eWdkOEtKWVp0Q3ZoSzFGZFBmMTdHd2c1RDVoUThwdmx0d3g3SytXUVkrdnNsZEggaUI2eG9hTjdQZFpzM0Nic043Ky9jQkFBQUIvM0ZHUWhZRFJobk1hUWVDS21haHNrc2ZOZkUvdVI4VklmUDJlRlpHOFRDRDVzSStlaiB1RHl6QzFjWVRPYkpzZUw5Ky9nQUd3TUZQS0ZFMkdCWENnZFREMXBZVGFwTDh4d1gyeGJUYWJkL2loK1lVbmpNaHd5QzNWWjRoQXRSIGszUEJvZVdZNWdrNzJmOEFvSi9mOWdBQ1VkR0VqbThuUkFLcXN2SnV6NHJ4UStlZU9nK29SK3hHZUxMeXlQNXFxdnRIN3IvVS9ucU4gbUFrdElvUHZkTHVBazd1VllzaThRbG9hdnpDVStWa3JxNmZ4dER4ZklmSU9LejNDeXpoaFpHZldWaDRPQk44QUFPN3A4QjdIc1JacyBIbExHeTA4QWVtTm9FV1lOcWhCd3c0a0hBbmtobzQyUW1PRko0cDYyUjRxcEw1N0V3VFptZ29NM3czK3dNQ0NmMzhCc0hVT1VRakhhIE04Qk0xNlNjSlV4U2lHUGhoNVllTEZsbnE1WFBoMm9IWkhCd0h1RmpZc0Q0ZHA4WVRGdEc1by81UkJuMEhnUG4zNEFBbmxlUXR0RU4gUEZpNWpiM1ZEOGVNVnU0WFJ6dzloTGpTcGc4eGl0ekZ0YlgrMWQ4V0JQQnVIR1NtNXZLT0VOKzJQMzdmeitIVFN6UnZiTzZ2RzdMUCBKRTFJOVk0RldxMys4VVFNYitiQUFudXcwN0lBN0lqeG96WlNESThpU1dodUFVdGVtbEd6WGR3QlRLeVc1Ni9rMnJBV3hvZVZNdEd2IGRPOE5xSXNMSUx0QmVzYXVVOGU0TWllaGgwTWZEZzRwN2JYTGdqazFjb00yTzBmK3FCaXYvd0JnWVJUTXF1VVl5YUhzWVl0MXZkelUgTllaQmdrbjh3UTAwVHcxUElNbGJtSWNMbUJoVmdXaTJnMlFZekZCWk5HM3VycnNCbmtFK0FBZnYzVW02Wm1ZTHNCOFEzZXZVbXQzSyBaNGVZU0RyMVZ1UUhmZ0xJUGhobVNuOTRYOGE1bnNLR2oyUWpER2ovQUZ4ZDdSOXdCOStma0xud0FCMDVyWXIvQUdhcXJVMkd0MUs3IEtmMjBUUTZyTXNpV25vWjRTQmxHRjlERG1KaGlHdm1LNW9kd3JRNEhXYnhGMWNNWmdiczdKT3dIOS84QVA3QjBCa3pwTjN6M0s3TGwgSUpGeHdkM0pHZUZ0UzBvc2tYMGFsWUFYQzNWV0xxK1FQTkgvQUY4ZVNlcWM2cUE3aFl3eHhsRDBObEpWZTFScWNqdXcyUFhySWg0YiArQk1EMC91cHM1aFBjRG1uaTBQRC9hS0hLTXh3SGlrL2ZzZC9QWWJBZmMxWGc0OWxxOU1yZ2FnYXVsNVNUVGwzRDlOTmthZjFOa2NuIEpzdENVWHI3Z1lleUZ0a1R3OXFkajRFR3QyWVorTTBaNE5KSnQ0QWMrNCtBNStmNldJdFhqMXlEczZBR1pMa0d2aklnTzhmSkR1QmIgaHRTdTdSWE1NZXlURnR3VzBQallNRHdOcWhqSHBYNXlzdkFRMmJlTUFIZ04vd0NmWTNHdFNZWUExWFROKzAzcVdKVW5xTWNPYmozQyBzcTN4UXhmRXhkakxiQWh1SEc0ZGtNQWNHcE1IODR6Y1h4ZWJNKzdYYWMrZytmeHdQZ0h5YWhWVlZFWlNXWkpFaTFCZWtiK1BNdjIrIG5qa3VJeWJMSnVWSzhyR256UDFBa1JuUjQ1RzB5bktlTjBCRWJGTEYzYmdEajUvVjFYMUdXSXljMHpseWZROWJ2YjQxTzNlaHd6aDEgaFhBTGNyQ3E5cFc2L3RSUDB4dUZWMVdRRDl0TFErQ1lKb3JPVVdkOE40YzRBSC9idTVnQTM4OHJQV0pyTjFocDlKNmN3TmVxVlAxQiBVcWxmRS9KcjB4MmZRK1BKdGpjaFcwOWtXN0l0UmdtUVh4d29kSDV5c29iNXdZSTdHM2Jmejc4QVBuL1A5S1JRWHJuRHVhdHFHMHJWIGlTckZuMHBQMVVMd0ZqSUwzNGJTR2l4NGJBSG1vY090N0krRkJ4SHZqVVlHUE82ZjdKL3I0LzUvNzkwdHhFZ1BHdGNSYUY1MVhLVHEgZ1pEZU1pd3ROUVozZkVSWHRjREZjT2VieUhoaUc5bGdIb0ZsMk1IczFaYU9EckIzQTJsYi9pQjkvUG4rcTJrWmdBczVkRWpkWC9sMiBaMk5FVWNiTVZma0I3SEM0ODJqVEdRUmdSaEpYZVN5bXlrcU5oZzBiMis1Vk5sd29Ra2NuS2hjZHhaRmU3bVN6clZzWWxiVnpWZmN6IHN2VjhodUdtZVd5YnBZVnlWZnQ4d09IbXJjTndtdkdKQURWWWNteks1UVl6L3dCYkEvMy9BTno0RHF1elJlR3FUSm1KSzRtMmNFYXEgK21hbXUrRFRzNGxQRnZsT1hJaG1GOFA4UDhrTUNmdjF3UURrMFk4aThCZ3c1c2hzNStoLyt3ZE1GYlhxdjNESnNZeW51ejR1QjcrbCAvd0NERFYyR1pYTk9DZE5CNmIzVVd3OWJ1QWZlT1dqa05WaDFuMnYremIyRTkrMFgrWi9yakVTUWFSZkRWYXVrSFVoaGt6K1czSXZoIHoxZnFhZUNzYUpYS2FIWDVpM011QVFIVDFvNHBMNTZ1WEFtTUYyaGlpN0k3Y0grd0FOL0FjKzZTSTVvcy9UK28yQkhOcG9abXgwOE8geEZIR2lxMU5zK0N6SEY4N0FwY0xZM2YrSnhNWXR5Rm85UlBISnV5U1NkbnF5bkZMc2tsVSszdTdqZldBMWRmRm5HclVGZkJpcGJhNyBZbTdDSDJQUnVvQzduQkQ3c0pyNVpBNThNZk1tTXBCN2d6MkFEWTF3TXp5VUtvM0Ivd0FYSTU4QWZRV0Evd0NmUVlHd0VQTFNOUGRQIHdKZGtFZzRGa0pXRTBKTElIWDFxNVB2aXU0RVB3bVlaRERBWXRUczlXazZZOG8xb1dnVDlnbUtTZFFmdng4QjBlVVhWOTZNYTNEU2EgMG9GL1pHTkpOMDdIckhPa1dGTVZ6eW52MHh4VDVnZUdZWTdSRGc5dUF6M0FZelUyMGNtQjcyN0hPQTcrQVBuK1FQeWZxdERLVlZIMSBPSnJkazIxV0NRcXY4dFgxSUo4ZDNoOE5MVzByMlF3TFlkd2U0Y3h4WkxHQTEvc1poblpTZ3RhS0hIWUp6aC9mdlA3QUFQOEFSR0YzIEVySTlZelRXSzg3a0xSam5JY2pjSkhCdXE0dXhRbWpWUkd5bGtraFdLT1poRkdnMnBZWldaekZFdU40S29CejhraGhpVkwrNzhJYnYgWUZrYXBVM1RIVjFrSkUwWmR4QlZWcEYzVEZkWGg0SG5CZ3RTdDRhMnljZnc0azM3R2hreWFHaHN4UDhBWkRqOC9BQUhBVjhBZ2dCVyBuN1F1UzFjeFZ6YlZzNXRjQU5ialhkUHF0a1lHMWJpZ2RoaXJhKzRWWE1UN1VaTEJmT2VkcFRtMlBMUWhqRms0NnBLU2NBSC9BR0FiIEFmeDYzTWc5UHFDbDdPTXU5aFNhZjVVcFE2M3JFOUlYbHNXbWx2aWg2Zm1CNFllYW4vRGcwczRBUWQ4RFdiK0tCbVdYa0pkaVM4YisgdnYzL0FFNjJ4bXlTTHI4T3IzU24zSFc3UUF1U3Nnd0cvaUM5c0tHa2N5cXRnbVEzQ3lBK0k5YmVQMk1QemtYYUgwYzI3VmNjUG53QSBEZnovQUorMmVMRm1VSkxnNVFobEhGRk9RYk5aV2JGZkE1dndNWmxWWGlDdzZZakc1R05TVEFrZHBhaHVTQTN0cHhlVGl4MUpWQUtqIDZscVFQSkVXNXRKaDZCRGY2ZHBDSFdMZ2tyY3JVKzdJbHlYQVB1QmtMMXhUNWlBaEtvSzhRVHhpejRvVm9FOEFucGRxVEErN0FBUU0gVi9BL2lzc3dQUWR5MG5rd0VpdmJJRzAvQzFhSkR4bkRSOHNPaHlteDhRMC9oOHlHNE1uSGpKd0N3WHhYSmpncUhweVdkUXV5QkhhcSAzNC92NEJBUG9Pd00yVG1LK0xBSCtlaDZlTGFRME01YkErdDVsYnlyc1RiUXMwOUtEMkFZcCsxRnVHSC9BSjV0K2VDY0JpTlY5TnJMIE45MjRPQVA3K2cvZndIWDB4VjlickY0QVlxUmtxVVBOSkRVaXdDVU5wbG1KUUZobEM3czVndDhraWRuM0NuWUZ3VC9tRXhoUlg4R2IgOEg5QlBuei9BTG9PT1JnOGNwWkRORGpNSm95b3hqNXJKVWYrcjRBWTRxRXNjSExqU0pLQU9XT1VPMTdJaDR4N3JpaWl1cjhObDRzRSBjMmpiY2hXelBaN21BMVVub0RKcHVmTGFVK0IxTGFOWk1pRVRMQzlQdHFmRDNnd0dEZk1PSVpEZlU4bXMzSUxHSXlPRUNkcTlnZnNPIGZBRUhxeTBlK2ZsWEJZVXF3S3hHb2RYMlF5UzNESjA5bzlzR0s1RjFraHkxdGdEbUtyVzN5SFY2MmNmS3ZQV05XNk04K3l3aW81dm0gM1B0Z0FQNS8zNlpEWlgrWll5M2ZHdXZLejJSY1hBN0lwMS9jMS9jZW1SYkdyS3htZ3h5Umt1Q3Q2M1EyQndPVDEvQkh1Q29CbkYzcCBaT0cvQjRQK0hQaisvZ0FDbENNaUcwV0pNZ0ZHcC92SlNyRi9keUhBekFsRGxkN3FiQW9lOFlHSWN3T1BNVG9DKytIR1FaN29lMmYxIHNFNENmZnNRRDl2L0FGZEJqS3NMYlR1bUFTTWJUbS9tVkxhcXJ0NU4yM0lBNkdQZGorbnpYY1NHYU10TktkeUJjdjhBRE13M0RlSnkgemFRMkJqanplNWY1SmtaQktGT2hoU0JPT2NNVGkyRlpVUlpkalYrUEtOVTNNZDVveFNNSXhsT3lJUWlKbk0vcXc5QTFrQkRXdk9rZSB1UWRLQlZLT2JnSkt6blFJUXRHc3E3YUh0WFhyR3ZXbEVyRjVaV3BEcmtGcHRKTjRNQ3EyTE94c2FQa0FUWHB2c1RJekZ6MGsyd3BsIEsrUk45RXZQeUZuSkVZWldmR2crcUdKRzUwMmxQa1dmazhjbjgrT2s3akRnY0FjQVdUUS8xc2YrT3EwSEh5WmZENmt1Nkd0eGFUUSsgNklsZkpYbHlGd3BHcGQwaVRDQWVxNjNoaDF1d080d0ZmcFpxY0ZrWXJ0QXl6RGlUellHZy93QkFvT3dkVzA5ZmRSWE1RMmlLWTB1UCBsdGFZNDFaVitOdHF2MkdHbWxHRnlpcmEreUlhMkdEcDlnVEFmbnNLM1psbHBmS2cvdmdJK0JmdlBnRDUvb1BoNWpoYUNHU0ROdVRVIHRlb1kxYkUxdWh6RitzbkJ5cThURUY0a0ZyQXhERDJSdkNxZUhlWVdDYXUwSXlNRENKUE9QUDdBQUFkY1poT2VCYlFuNXJrcTF2YWkgNE5VbDZuKzFhZkVjRU9LN3M3NHQ5azNBT0haT1Boems4ZytUZU05K0ZjWnNkWE9ydHY4QXdId0hUSnlzbTRaQWt2b3k3a0IzZHg0SiBNTWR2YW1pc3lsRG5rRGhndFhrYUtLUXdYdzY2aEpwSkJJZzB6UUxJQnFkTklEcGRUcE5UL2VGN0pCcVVtanV5clJHbFpWdkhqNVZnIDVpM3BwbFY0L2g1OXpMZHNYUlc3czcyRW4wMlVZYnVsVEI5YjZrTlBZY09HcS8yVXJBYmRuck1ZVUZzeFB3bG9vKy8vQU9UOGY2UEogOXFMK1RJbU5GdERiUlpMZnlaUHlPWVBCYVlLVFVoOEF6SEJEUTYzdmdQTXhEd1ZKZ2dJOFB5bTJNeHczaWJSMEhzR0FRVUVBZVBuMyB4WUdaUzkzWG82MGhtdU5TMXU3ek5UTm1vOWUxdlg2NkhmTGEwOW5xNW1KL0pBL3c0WkNaMzRjTGErWXpVYXJsQmhOSCs3OEJQZ0Q1IDgrQVFRQURqa1dRNlFLenVBZStWamFOaFNpU1RZUmlaVzQvZ1pRV1dmRmZoNkd5SVRoalpCQXcxVkxqV25HOXI3TnJKTjROMWNiQ1cgNkF3MkIrUG4zN3BZQ3RHb0NQdlpxbHN1RzFuUXFyYmRSOGU5UFRzcXZkMFRvMlJMT2lJeU03UlJ2TkxIMllVWTFsbGJZa0dmYTY1ZSBlVlBGRzZQV2VvQzFYaEpVaGFyR1crM29ONHErdlh4b3MyR3J2a3M5S3F2NWpneUliNVc3QjdnYlFSRWVuM216S2JxOTVHVlc3QkFtIC9vTDl2L3NmZnVxclVXbnlFZ2dHWExhVys2bGFHSkxadHdjZkxjQ2wzQ1UxOGgxZUhNTGZ0REhwODdrQ0hhbkJrWVdVSnZQQ1RidjkgQmZnQjgvOEFyaXlGT2g2N1BqMitLMEhxY2hvYjR0bG1EVHExRUtjTUhnSWx5QWh4NWlaVDhNUE1UMXV4bEtybTJxNFpQdWcwUFBPRSBtcnNBWUIrUG53R0NEc0hVT0xaTHdRMlRPbjZhUTVMSlk2cmY5NGgyMHJ1OEt4azFUaWxKaS9NVzRlQWRidEJiQjRyODg1TW8wVzBWIGZabStCQWV4OC9BQUg3WVQ0RHEwWFBjRU95KzRVMjJoYVVPY2J1bmtsbndGTXZnYzg1ZUJWUGF0RzJNaXd4NUt5eU5GSkVqbkROV1cgS0NEUEdoUllpNzdRQ1RZcklhQWVVMFpNcXl3OXRXZGIrU04yOGx2RHU0eW9zdUxLcDhoYWkyeU1qSncrWkIrK0txM2NDTjJiWmlZTiAzTnBKekhnQi93REVmbnpaYkg1ZGZCMDlrbFZqR0Foc2thWERHTENZQkxJZVE2eVBSUSs4Y3doek1HQndnejAvQlZtamJNeGZCak41IHRKQi8xOS90OCtINm4xOWZ1a083TzdHcXlhOVBFdHBjRU81cENPWVBXMHZPVFJEWWVTSjh4a1F4OHdIOXRhbVFtekZFTmxyTUdrdTEgWGNCUGdOZ1BuMkRZRFZHaFdmS2NLbFBBWHgyTDJEbEcxUUFIeVovQWljcGhqYVgwOXd4cmlyRnUxR1JnTWZBWUlPSWNvVXJCWHQ4bSBETnUyT0xCVVcvc0FCZ0FiQWF1clF4aUNONDhzc0JLTUhockM4MDV2TzdIY0t4dm0rQUs0eU03bmN3eHJHRGRRNVZlRDdpK1BudC9IIFhKYURRVUZ1amhSa3FxMlMxRTJ2VUNuTFlUMnFNSlczTFVZa2JwdUQ1OHd3eVExOHdqbnRONTZEanRpdWg0a3puMG5BQmkvQU9mZUEgUXROZDRMNmt5Vmk1VzBreVNVVXhKaVZlN0VnOWhRMEk5d09MTXZENmV5T0FldjJTY0JJWUExc1p1bUZtREFuK2xaL2dQNy9pZUFGVCBXdnRHYkRQVlVrT3J2bkR5UkozL0FNYUc0V0ZNZkZkSWN2aGo1aUVIVDZyTUQzQUhBNGtxMlRabnNyK2MzdWt6bXdmdit3WXZ5cnJlIDFId0FEeVF3c2FFczVJbUxjdmVMVVIzZGtjb3JZK05FTWZETTNBaDRMYmdIT1R5QUpWTWNHNHVUSmZTZlBvT0lFKy9iK2Y2a1pLaFUgQnhkRVRkWHo0SmFlZi83NUdaeWxjWjQ1SDNFV1ZjaXdWOWx2NGc2NFZWWi9MV2ZhRDRvVU9iNE94OWJxOXExUFZlbk82Y2xBR2lrOSB0WG1BbGJhdXZiODBNS2ErUTk0cmQ4NWdIVHBrNVRRSzBCY1padHJHTElNSmFMdHYrd0h3UHV3SUtDTFRHUlBucTU2QVpKREhiS0pLIFRDcjB5MUk5M0dKUUFTTEYybzRHTzZsSmgrUUJ3ZExPRDRENHlURnEyNTQvZGdlLy93QlFIejRFQngyZzJkZ3VTWFRSbXJwSnlhMFYgUWxlcThPemg2Uk1HU2hJRm9tTDVod1phZlE1Zy93QTh3SVR2dWU2Qy9ZNTRRSHY0QUJ2NEEvMDdMTWgwUFh3LzREUnFvMDhUTGFmVSBDSmFMSUJ5SllkTnNaVEYyaGdRbUJ3OWtieGFFTkhiV0JTZ3A2d3pib3NvcU83QmNOLzd1Z09QdndIcEs2bU5HaFI1VXoxcjZpWFRxIDhXUmxrM1JMUGdwZEpJWTAzb2dpU1I4Y2tNd0xCWGZUQTdzckIwVFRKREhLVWF0cU1aYktuZzVjQ1FnOXZqOTlEN3dzMWNWMGUxbmYgNmxrWkQ1cU5YN3prWkxqWEJsMGpLMWlSTUtveEp0K0VKTnJxR3VoeHhIMUh0akdyUTBqNlIyUHFzNDBkOUdJTTk2TU0wMndlb1hjQiBnT2tZZE0yV1pjRkU4THV4YnIxWHBtdmFmMUNHYXZpbHE1MUJUQ0RLaHpMc3NnUFI1amx0d1ZLMUI4RVlvci9vN2hOaUFQd0Evd0RYIHord0tmVW93bmJCdDRGcmZPNmhCa3c5bmpvZnFFWThjbEFTMjYyS3hnVUlNeVFvaUdPdFNHOXJ3TC9tUi93RG1aaVMxaDZmVUZOcjIgS0hnd1lyeDAvaGIxdzAzMUl1U0VsTnJwcWY2cmZJWTJaZEYvWk9zaXZZWUdwWWxudEFkZm1YdTRwN0l0am9Tcldkb0tidXRyQXpGOCBHYzVDR3VjZ0FCL0UrQVFmY0F5QlpJMjlTZWFaSlpwNUFESHVTQkpKZDFJbmt6WExiTWhVTmlNckp4WHBidEhOSk5LVWhpV0xhaWtDIGtoNUhqamppYVZFcnZ6RVlMTGtOdTZ5Zkt3ZXEvRDdMVXlXdzJjeU5UR3ExY3ZWdjh4d3IxYmFJckRZL0pQbUxlOGRreDlxUWY0c1AgNGpIekJaRnREdzhuT2JPenlnOGY5MzcyMkNzWlNxNzRSdzZHazF6VmEyZWJjNk5ML3dBRmtSMGhEK1ZFc2F1UTQ5UFd6RElZRGo2ciBnOGdBdFRJVEdOSDFsSDVzYjU4QVFRRDlidm44WTI4RWNkY2xkMTdhR2FCTjFpVFc3QXMycHlTZlU2OElBeXE5S0ZIQmZ2aFBUM0JiIG1ENjNCVHlCNmN5Ym1ydEN6NXVyZ213UDJIZ0g0QUFBV0tTeCtvUzh5bWRYT2JuYjlGc2hiTER6eVRmQ25aRXFtMTRDcnVEaGZEaDMgNE1PQkRsU0dRQTJwRFp2RjhtUjNaM1NmdjJQN0FmNkdMRUlxSzZlcGtyaVJ0dVNLU0dWNDNSbzZhL2FDRGtQY1JYYlprdVc5dVBGTSByeUpISnhIVWJSdWV4a2p5cU82YXhiWFMvamxWaDVBdDNPSk5scVMzeHN6eEozSU95VHlFeEt0dVhZeFQ4SjF1K0lkOFRNRnVlaHA2IEhlQzJzczFYMDN1ZjNiei9BUDFmdmNBQnJkRjJSY0VnK0x5czQyQnpiSXVPdlE2SGN3ZVhEcVd1V0U4ZVQyQlBNVlhaRElZSWNWN2cgY3FUeWF6MnYrajJpYitndjM3K0E0RDAxTXpUbkRYS2JZNVYwbnVLMjFZUnRocSsycU5yZUxNRnhTejRydzJDWlc5a09FeUhZRU5IUCBmQWhMYXpqVisyTEx3RUNKTHh2L0FOK1BvT3dkSjl0YU5VREc4V3BsUmM2clNRRzFCbE9aK1RUS08yWXVTYnFhRjZqRnNmcHZUMlJQIEQzd1BNQTYwdUY4VlUvYkxrZldaWkIzWWtoRG13QUQ2Q3dId0FBK2NTb2pHUGNobG1HbVpKSVNZcEVUWkM3ck9YbGppbHdEb1J0U1AgN2psaGE1Z3JaTkR1cEtxSTRqQjA3ZGtjYlk3YWlQSGpIRnJKYnZ2d3RjeVFxck5RRmRJNGVlRnppSWRJczBMWnNkY3ZMUGlCNHF2WiBoL0ZPZjF4OERUVU95R0Z3T2ZsdHB4SkxUNHJlYzk3cnF4QVlBRnVnQUQ5c0dNbGxnMStVVW9jTTcyRlJWZWxMSXRwM3JZeGJWTHU5IGJ5anluYlZYOGdZOEdSa1QxdkdhY24xL3lwd0pzeXgzZlJuZkQ2T2c3QWY4K2dkUGZVK085Q3RiWmNWQnJKM3BXTlRER3BjcjArTEQgdUd2aEUwK0FVSU9PdFFQaWlHRzgvTFZKK0xCWXo0ejRxOVhyQ3hoaGc3cEhBTU1EeStmNCtBVFVoVFczRzJBUHRrbkVtZ3JDUUhkbyBaTE9ZRjRPVWl4SExqZnpGc3V5R0dSZm1IRkxpYlZ4bmRCbG1FM2ovQUZVQUlQOEFRUDJCZ3VOcDNqY05IOU84cVNKSEpsdTQ1eHZFIHgyMlZZM3JjRFZJamVLR05rOU5rMkE2aUo5MUJqdUtWeHZHV0dWZWNtcitKaDRQdUorS0lvaHc3RnFWNGFvRG1lSlhOcExoMjA3bUsgcnF1MkMzQTY0dGc4Qmh1REpNVDN5R3lkeUlGYUVIdzRoTEwxVjZHemJGdmU5Z0FBRFlPZmRiN0ltSGE1ek03TnRETytaQW1jVHZnbCBaMWJ0a09MdERSOHdmRDRlWTVoeHNIQjRIT2ZDYnlMdEFaN2IyYk9uMEUvNS9IRS8wd283STZad3M5WHhtNEgvQU9lazJrdTJBK0RyIEppTGI0bXJ6UktUeUlka2NJY09ZbnVFNVN1QURPaDhaRjRvMitjS3E3OWczL3dBLzBwWkdPVUd0eUcrTWN5TnVpMmJVMkJiemlDUjMgR1RlNDI4RVdSRFE3SURReC9ucVBJUWVjL2FGbkU0RVNMUlI2aWZnRy93RG53SFFrcUpacE1hY1F4NTR2THR0dEExaEM4anhRM3VHOSBwVnlvWjVZcmlVSHFHT0lkcVBNY1I3c04zQUg4WlZpUHhadngwMm9jeDVGcmQySWJiWG9RbFh5VGFLUThPeWVQaDNCeGVKejFEVCtCIHNuekpZOHdxd0dFOUJNRTBhaDdrL3JidWxoc0I4QWY5dVA4QVM5NUJDY2pqSXBVaUJrNU9Va3V5OVY1N0pxQmhMaTJoSVRZdk1FOHcgWWhPQ0p3OEcyajN5ZE0vYTJabSs3YkpzR0tDZlB2M2dKSkhPYWpHMjNMSmR6Tm5TWmtYVjBTM0J3RDF2ZHlmWXd0c3hhTHMyZFByZCA4aHA2Zk5lS1dZRU5xY056cTlYZWRqN3BCRWMrZzcrQTREd0xyVE1kSnJhdDlxb3RQTnVGM0V0U0REWCtjU1g3WXRWTnU2c2tQbmxmIDRoOU1iSlNabjRlL1lOdHFHTE1lYXZmTzVqd2I3cEk1L29VZktKOXh0Mlk0bU1RVFZvNW83eHpFZUJCcVJaWTZMRWRsMzNVc1phbmogYko0TXI5Y3gxSkRRajdsT2ZFWnVwWCszczdXdmlIYUYrMktIMUFWNnhtUnVKNXBEalZQY25hT0pmRTBCTHU1TlpGOTg3cVdwVzkxOCBic2J2QlBWUTZNVGFGY1lMQjhKZHVmVzc5KzJBQmowbjRaeTNDakpuR2FxTVZ1WVBUSk1zUFpBRkg0ZVV0cGhpL0Q0MjRUSENZSEh6IEoxbHI2aTFCK2M5ME9EUEJ2aEp3Ky9iL0FGRnYvSUFGNnBBZXpOT2RzREx1YlppM3A3cTk4a3RxTzdad2VJdHREUXZTbGVxMkJ3N1YgektyTUQvZ3o5U0dBTlFXVVpvYUJuKzlqaUNBZmo1OStmdGc2U2JKbVVXcEw5Vm9jVlZqVzFxZ21YR0pzaTJzNlJjWWVwYTUxQ2FYMyB3UGFFeFBob1pkOFlBN3gzUVBZTGF5TVY5ekdITmpka2QrQWZvQWZ0Z3QwTkpKQk1qYWpUU3pUUXZnb2VHVFAxSXpqTWpERVZ0eUJvIHd3Snp4TFV0WTlUVXJQRzBNTXNDWnJ1aGcwUHJzWGwzMVk5L3J1MGNxTkk5eDFrdmFiNkZiRUYwbTIycFQ2bFE5ZWtodGxua0NzcEEgMnZVK1ZnVWFCSlFwVmFlK3NqaFNhSEQ1NThCQWJaMWtFeGl0dWF5YzdvMWRnZjRDdm4vWS92NnJrWmNORFF4dVUwVEgvSEt5VUJlcSBjYTFFSGNPME9TblV2SkU5eGlVbVltTXBDWXFnYS9SUEprNnY0TWpBN1JTVGJ4L1g0RHo5UkFIWVUyT3F1ek5acHJ0dnp1SGRxbnNEIFdBdG1FZ3hYTm9VZzBIcXJIaDdJcDR4Y0hJSWRqY2VBem53bU1GMWVzakRqdHpZSGkvZUFxTUJzSFViSStQYlMrQnBLQk1DWEF1TlMgbE10QWJEcjlIbWFmWlJZWFY2ZTRMYklHbXNrSWd5SEFOZ05vTVBXYlBjbFg4bUJwTlhCUHZ3QUFmNThmNjFibnB3UnUyODhXZUV6QyBwQm50NVo4blAycmo3Y2FQbStFcU9kVGh3SGRGTVgvTTI3bzUyTWF6UEdKOCtiNTZuaGRxUGpIVWRlMUtuVlhwTDA2Nm9BNXUrYllQIFh3cjNHbm5yR21hUUZka2NERGhXN0pNaGtJZUxicUFyT2Q5NTNRWXpjMkNKTlY0bjBFQnNCOC83S1cwTFlzUytYQU9VelZzYloyYkQgVzRpdVNzN1R2VTh5TEtYa0lYL0p6R1F3bjlyNmVha01oQU9Zck52dERTekkxVnBQYTQ0QUFIMzcvd0ErY0VldTVGTFd4WjBXVWVKYyBqeUpOZTJEZVZQdEFsa3U2S3BsS0h0UWV5ZGgyUU44QXhCMitCQjROK1pPVGZkcVRPZnYvQUdpQVArSFJIVDkwVS8zczFRd0ZjYS9xIHVwc2t0MWxUNGZ0L1lUSktWMnpTcTBHUjBPMHc0ZUc0SjYzT2JWOThlREhpeWpNaXBCdWt3Zm4zNjNkL0FmZmtTWWFZVFNOdk9nZUYgSTFqL0FKRnp5TEJwZWJqV2hzeDREYkpmdWJMZzR5K3BJamlpVU9FbGxtY2pOQkhGR1pDMGNYYnQxZ1F3ellNR1UyTUtlQzFBVkhlaiBScDdBVXZiOE1rNGJNTkVXQkRkNnZFNC9GWVVPcnpEaVltVU9ZRGg3QVpLNXJTd0lDcmFpenhlMEZvWThkN2VEb1BQcmQ4QWYzOTF3IEczVTNnZHZpb0gzUFdyVEthSXd1bkF2YWQyV0RYeTFwOFBKS3hiUzBuc3dlV1hwK2FvTi9iVWh0NzI5Vm8rUG1IZFEzYUtRYnQ3SGcgT08vZWZwUlY5RDFQWTBOa3JtS2g2a0tycTg4U1NLLzNJZllWY1JRTm03Q3RweGlGNGRQcjliQmN3UDJOTS9GNVhhM2czL1FQbjhENSA4QS9nTE9CNmp1T0JSZGNha1F1Y1NaZm1LZGhCaHg3dWFZcEhVWmNWTmdYQmVxeVpNTU1reHd0Ukh1aGdudEprWU13RjJZekFqWVc3IE1WOS9BQU5nUWZmcGJSS1pRcGVGSm90VkpLalNMcXBZeEhyc0ZHRWs3Q0pwQkZES2tzY0R2dDdpTkl3R0N0bzNua2pMUjd4U2FIVGEgZVpJdnBWQWZSeExHSFAwbU1ZZ1NRcHFETnRSNFF4ek5nK0I2cDhaYUErb1lxUmZWWC9oL04xOEJjaWROWFlialh4WE9xUkxEUnhrdiBPa1FxN1cxQTJwM1FReXhGY0RaOEpPZ2tmUStUUTAyTUp5dUxEZzZubEF4MlJuVGN5Q2VxdDNGZzh5dUt5cW5OVGxVUEVSd2NaTVZkIFUzRTRNQlp4ellrTDByazlaYlFLNldERklYcmpNUTZXRUJCUmtPS2F5d2NRWEN5eEdHVDZjNjZCZlZNYldMSlNiVTVBV0RqUnJFMWYgSEg3UDVIWEVsWUxMSXNnMG00c2pxK1drRE5tcll0YmI0czNkbWhmY2FIRmJiWVpBYmtMTVdOUFE2bGNMR3pxQnFlK0tUQW83dTRLOCBWc1o0cjQ0V25aQmhsY0liaE1hdTZGbDFYOVp3ZkNiTURTZFVUdFZlQ0NlQUg3ZHhRZXR4Q24xNDhIbUFSZHBrcVoxQlExdXdzRW1zIERIdnFNUE1NcG5XeDVnd3h3M0RtR0FRODRJaHR3V1ZsV3REQW04QkxSLzdBZllLaUFQM1ZuRlpza1Nxbk1aVmZES3V1RHVkcHZlQ0ggK0NZTE9GY3VUQlNOYzNZbnd3L0pObnE4UEJBRUxhYXJVV1hrb1V2SVpnYjJUNzhmZmdCOC93QWd3UStNeXF6eklCVjFkRGpaTGM3UCArSTlQNE9XRGxIeTJOMDRmTVd3NjJ0N2dIK0JwdnZqRXp0alFVUnVjYzIvUUJ6Ny9BSEIxaDBrMjdHanAyN1hva0Zvbnl3QUlhNHBYIHh1L0I4ZkJibkhzYXJUN1RNRlZ6REk3UEVWTXNRRjRaRDFZVnpxMTVIam14eU9xOTJBdnVpa0wweHRvWWFFeWJrcVdOZksvYXR3VnUgSmZFTm9kN0dUb2ZlekY4N3FReDVnSDNBUTJvUHlZb0xHRStiZjUvWHdBQStBUG55UzNMSVpKUkFPTGZOUFp2VDIrWHh4NjBKbGtXQiBMWkpTdVdwdHlXeUhBN3RoaDA5eGNPOUsvQW5XUXNNdW96dVpadHFYWi9YeDgrZjhBZjZ4a01US3FPTlZhZ1NiSXQ3Q1MrT1ltSjloIE1oUjhFT1ZjNHNGYnJhR1ltTWpBSCtBUWdRY08yWlRkQ1J3M3ZZTS96NCtmQWJCc0ZxRi9McVNmRDJHVnFjSldkRkpTV0crQ1FHOEUgakFEWXk4NVNnL0d6Q2ZNTU1oQ1orTDhIaGs4b1U1TWNxNDI3WWdOZzM4LzdiQnJZeXg2cUE5d1NPR1NBcys3TGhINmUyQWlReVJrciAzMkpVTjJNTWU2OHltTklaSGpqaDczM0h1TEZCSTlaTTc1SEhLaGlNVDRQU1pRbm1PMFE2OVhCZE0xS25wb0VJSlI3SXlyWXZubVNIIExsQVpnK0duMlFodmxrTUNHY1VoNmtxM1l6ZHI3a1psbzRFODRnb0o5K3QzWUFHd0dwUXhsdTl1UGk1UEdraytWTVcyd3dxdXhoSWYgQ2xTc0lzOHlNQmhEcmVrMlNueDRlYWg4U1I0WlBnYjV4azU0VGZ3R3diQjUvcVQ0dXRIay9KYldNd2dXRTduNDFlMSs0V0YyOTJ2ayBJRk5XMkNHWTA5dUgxOFBCUE1FOEhocDZadUJyUDczaTg3Ky9mZjhBcFNyY3hDWEVNd3VUOXlBU29hUUpUMlE4SFhsdzhoOTBEejR2IHpPUnpJZkg0YlZBc0E4RDJ4Wi9HWk9xLy9JUHYzSC9QNHl5UnlNSWhnbmFCSEJFRmpRZzgxR3NnalM3SHNSTXZ1dWdWMXJJOUJaQmsgN0k2R1ZqY2o1R00yN3NESStOY0NTUnFKT09OdGtlSWVaWURIVzU0ZytyZURWVjh4a1U2ZkpYQXZ5NGRJZ2FjUEFaaWZEWkxnaDF1biByNGRIeDAzb2M0d3NzelJhQ3o1c0o3WWJCNEIrNmtteXNuZzg4RS8rSGhROXdVNVp6UUhiUklkSmh0TVF3VW9ld2hZRFRmWUZ3VExJIE1Na3RnaG84QmYwMDdQd1pvVi83SmFQNWRRVUhmOGVBZ0FtTzBFSEp3ZG54OGZIZFZ0QWt5V0VIU1h6dGx6MnBWTlhpaHdDM3ZBZGsgRC9NcmtDd050Y3JReFo0R1RyTUhWM0NhckFJT1BIejRBQnNBR0hydTJGZXY3YXBaRGRuOVZTTE9xV0luMFBNMUVGbHR5T3IwVVdZSCAxdUhzaWsyUVBhQWZnWkNmT0Q5aldpME5zQmhNTWNOZ1BnQUMvdjhBaDFxbmkySTRYRWFaMUcwZW1kYzl1U1NncE10ajFJTVM4MGVBIHhpRHlaSGJ4Yk5FNnM3QmplVUlsRTNKTW4rWEQ0eHYzWk5lVlVLcnEwUWlPWW4yUWVYTmhkakQ1cGR0R3ZVNDhOajJFbjIxZHp4ZkUgcFBJYk9aWkxVaHVFeWNlVHoxcUo2eVRhS3ZxRGZEWVJLT0FENS84QW9FL2owbVZkc1Q0ekpZUlJjeVdUQ3REd1N2WEJxaHlKY0tVTCBpU21nT29UTElEcDVpWXZyVUg2RzhibU1LTkZaazk4TjFkOStQNytBNThmQUdEQlZZUFRTbDFVdVh4TU5ubVJKZjRsWGtyK3Erd2tJIENyTHpSVjYzYUhlQVBXNmUrT0NjY0EyaDg1YlppZkYzblkrYlhaejdZUGRDNENmNmtjdXlPMHR1Wkl0Y1VIYjVXY05iSTRjT3JzTlAgdVVvc21pN2dYekJod1cyVkRIekZYY0h3NG4wYjR1b0daNTgyRHgvb0grL3FqaFk1OXp5S21GTHAydXF2WUxtdU5uMU1lRG5tZmJqeiBSYmNwSFZIeTdVTHJrZHcxaWk4aXR5alo1ckhnRTlRV2E2QTR0WjUxSXBDMnBHTEJ6NHp1SEFwRmdGb2I0bXU1NVh0Und0U3QyU2szIHd4WC9BSUJnbjF6Z3pMS0hxTVdSaHp6YU9nZ04vQWIvQUwvMEVwYlJTZGMwR1lzRW8rVVM0WnBoYmxrTk9xVGFDUlpHL0NISkRjSEcgSEQrSGZBZXIrSzJXd1V0OHduZVpSRDhIdlp2dEhzRnUrQVA3KzFEREFMcHZNcG1Menkyck9zYW1iYTdQb2RWOGhUOGE1SzF6YUhjRCB1cERaUHgrSHNiRk9nY2IzTVdMSjdIc2h3SHlBQi9YM2dGTEh0MnYwalQrU3FWM0RyY3Q4Vll6RElzNDg4TUljb0JZU2o0NFdBNElmIDRyWlBodkZhV0FwVldoMW1zaTN6Yk5rZHNNVDZEdjUvbndEclJHejJkd3VpRFV4dVhSOGFEaHFCWEh1UGJ4eU9pZm5FRGw5bllpWDggeHFWeEdYK1RuNDVMRTlvSFFITWo2a0txcXY1V2JEUU04eXlhaDBqdk1TOE1CcVgrSFNVbnA5UHJmZFFPNEw3SWpvWi91b3lFM25uaCBObWVYYlpIam40QkI0RGgxYUtZNk1pNU5aRDNKRkprWTNBYllTUHFFTU5GZXNnQk4rWFl3Y2l5SWRxVldoN2dIbkFTRUNEVzZNODFmIGNuR1Fic2IzMzMzOUJBZTUvcGV2aTJ3THJoTURNZDVxVm5DNmZyY3NyNXo3SGR5OW9DbUVERjI4d3RvYkluelI0Zm5sZjhWbUU4RU0gWFpudGFQQ2ZvTy83QWhZbityV2toRkVLSk5PMDFUN3EwNG9yYVlwMTFmOEFKelg2cHkxeVBwVm5mUkk0TmpwWlplMXZxOUx4eDFlZyBUVnF6cWRmR1phMzFKQitsZ3dPb0RGNmdCNzA0NTVHaWxhTU95UUpLZ2RocFhweVRWTHVWMlkyU0RpMTJlQlhMSVluSGZDdnJJKzJaIGI1ZDFpMDZScUUrTndSdWZjY2ZIZDU2ODhwRmJ2Rmd5QnNVOE5ObDdCRGtwWkJrczVYeERsQ2pERkZ6UGhwOHg4UTVnOWN0UlNZSjQgT0V6ZmZmM3YzOEIrZ0RZTmdmQytqUXoxYjV6SXI1UEcxZDJDS1pBOGVYN1laTHVwR1g4V3lPMnllNFdRWU1ENWtCU2NZQVA2eVVHRSB5Zk5naVQ1ODk0RGZ6L1NsSHZrZTFRZVVVcm1aWkJoSVcxdElhQ1JqajMzS2hueVZNc0NIYWRWbUdUaC93WHhmL25GaEdWME5aSjlyIHNYYzV2LzRqMkRZRUY4VjJ2ekxIUzdnYlhLWkdaQTFldHRleU5YVHZTNVlPQXRCVWkyMFlYekZEdmllaHA0LzV6NFFmT0JzeXkwVTMgKzk3MjhQejgvQUg3d0hUWkZ4czM3eVBTbmd0NXNjV1c1ZDBmeFNiYit3M1ZkdDJNOE16REVxTXR6enRUMWppUWU0N1p1NzQ4VlI4LyBBNDRMNDhOTUFsR2l3cERJaHBEczJLN3RuTC96SzVQRmdOYzh2RHpNWmkzRFg3Z0IxS09mRG5CMWxEZkt6S2NKU1FoeEIyQS85K2Z1IG94Z3Jld1ZMTUoxZW1yWXd4azNNTlNKRnRBVmRJbWkwTzQwT0x1SEEzeGtjTFVYK1ZjZWZPWURMTTRHTVdhclNRZ1Nxd0RBQVFmb0kgRHB5NnBaQXRqcXV0d05jekJ4N0JicHdTUG1aM2Ixd2pIV3hEc1p3K1l5R0h1MUlhK1llQUJDZkJaT2MxZUxaaGh4SnE3WXdHd2Y4QSBXb2o2bTAvNVppZVV0cTFDbFZ5VlZ0MDZxSW1RQkpHR3dNaG5vZ3UwQTdnSG9adzNpdHlFeHFQV2hkTTdrMTVLKzJJeHhKTnV3TStBIEFBRUZBZnZmclBOT3pRSzRSNXNza1FJWlZ3ckhaaE8zTEhlVnYzdGZ0Tko4RjBLcHVNbVNSKzFXTHR5OGJWbWdGZk5BazJhSXVqZGQgRFp5czBOTnpNNWNBb2NiTm5nZk1XMDRPRENZdTRwTXVSRFpDRzhQbjF2RXcxQVY4RDh6YytVRXZOL2VQUGY1UDNJREE0Y0Q0TmhLSyBabUtMNHVEUnJDcmpVT3lDeGdXc01LSEtEcDZIRFpLVE1Rc0E0T3kvZ0t2Qmhnc29UMlBlNnVCbndCLytuMzdwaFI0OXF0dEQwQ0dxIEJrb3FIWmEzR2JOUDRHalk0bFBhTGFzSURZd2R3bVdweVFQeURZN0xYL2RQNU5WNzR6REVmWk44K2c3L0FPZndQcVFmbXB5a2h5N28gV0xnSEFNcW1raWtyWnpwcGgyVUtsdTFkZTNLR25ZVnhNcUNKKzl0a0NCQnF3bldZc21OZXRsOVNRY1lFSEFCanZ3RS8xb2Q0MlVDUSB2VW05RUlsZkRQRXhXeGNxd0dOaWhpZko1NkZXT2VDc25ac1RXa1FqdXc5S1JrMSszaHI0L0g1ZjZ1cHlKOWdUTlBySFhvMkdydmhxIHZVY2tZdmlKTUEwa0o0YkRJK3kzTXROYnNCd1ZZQ2UyZ3c3Tnhkb1dhek9jSk5vNEQyOEErbjlncXZkR1pYZHlPRnRadGFUR1NodzEgdEtVT09UcjJ2MjB3TEZ5eWliTUgyUXQxdStHSmpCOEd5L2dOVXpreUVMWmtidWliQ0cveEYxWW9XaDZJSXRSekR6dmFsZjUrclFsZiArbnlobEFiUzhYK0l2Uy9odWdaUFpPOXJleVN5RGgvRXQ4Q0REWldhNUdoWlo4T0UyaHdJQWZxSUFmd1h6eDlQMkJVOGZOeXlSNVdNIDJRU256S0s3Z01tUzBDUTlYdVZaRktsUkhBd245MUZzT1E0cStWZXBWWHhtMy9zeXk4YWgvd0RxQVBuL0FPLzFFNkZ5MEpmSE9Ob1cgZE1NY0xERkJrMmFQa01KTFgya1kvZ1pJMTRWMVF2ZzZOTkZKY2h6Q2NxMkhwZ1k4anV6SjVyRVc1ZzdSYml2UjlZb1o2d3JSems2cCBHMklRUXhwQVNuMk1lcklERjI4eER0UmJaT1B1RnFQbGZiNDRNMjFxN05abHFjSmR2Y0J3SHRDQTM4QlYxeFQ3RU1zbVNtNXRrTWp0IGxEWXk5VjliMlE0TU5rTkRsMnZLUG5jaERtR09lRHBtQ0l2b1p3T1Qvd0I4NzN2aHpmOEFZRUVCc0MvMHdpakFVb2NXWlhaNEJiaHIgYnNFcjJ2M3l0NUVzdytBV0ZvK0d3TWFIY0V4a1F5Q0dEZlUrZk9jQ2RtSWF1VEdiSWJTQWFDQmZxRXdQZ09lZ0xGVlhZR1pRVmJoOSBVc293U1BabzFTczJ2NGJzSGxoLzV2VURiU2VQbVErSDhiSU9BTTlYemFqaUZsWlZ5ak16ZUVOdkhQZ0hBUUNDZnc2UVpqUU1rVGQ3IG9rbVl4M1MzdFljR3NPN2ptOGhSRkRwMnl3WXFzNVd1MW1qZWtTUWU4TzM5T1dPeHN5VTNMU2R2SFZNM0Jnc2h0dEF3K05FTWFlYUIgcmEyRUxPVmJRbHNrdE5ZSEpvNCt0MXU5dUVPcTluTnFYd0RZY1l6YldNV1FhVCttL245Zy9ZT28xNHJwTGNqQTM1NnJYRmJtVDBudSB4bkdDTXZuaDZ6WEtLWVQvQUtlaDZrTVdDdDBhQTRBZDRXV1pYN21Fd1p2WkFYUHZiZjM3M1B1RFZvNkExS3hFOHpWV2RxOVBCckNVIGtnenB2MU92Qzh0cHA3bVNHNHA4TzFGdVlZV3lFTkluMS9QcmpCR3dRMzNIOG8rYzJCKzU5Z0FRWDVCV0lNZ1YwOE9CK1VVR2pWcmggTWxoanpLZk1OaGVMVnlSYURRdDJoRFEzeFBXNFpBeHp5QlVzRncyenRlekU5a3RGSmVPZkFNRUh3R3dha0FFQ0pBbTNDYklTR0NYZiBra0pVVE8wTXF4WndUUkZvMVZaRG5rekVyZ0E2bVNaWmk4dzNuaW1FSmIyRnlhS05YZmpqSWtjbU5tOEt5RjVCMlYzWGROMVZZbHdYIFRGZkdQSnZNODNUSG0xR1Y0RXVGOFZLSkZvWWNmd05rbVREREFZeGJjTGEzZDVHSzl5TFRNY3dTQW0vMEdmQWMrZmtKKzZUTXl6SHogTnBka01nY2xBcmUydE9wc1RJc0lDNEpDSFVwNndueG9tVi9NVDJUR3lKdDRQbS9Zb2JYeVpGeEtWbXNvNFFKVjJLRHY3OEFQdjNWaiB3V25EVkhSRlo0NmxxOUJLS3RWV3FaVHZsV1hNNnBxbnJldWJRdUtpR2xhd2ZXUXZhcUdYc0J3N1oxQWVWS3NXR2dvenJMTThIRWtGIGo2ZjB3NURnQVlLdlNPY1VPNFdGWDFnOGJUMXc4L3FZQzA0ZGtXRWh5aWt0TmNqQy93QmgrNURIVzdCYWlPOTA4cEk3S3prN2t1UkcgR0E5N1NRZkg3OEFIL1lCMGxGRFJuSENlR0tvR1dNeFJ4blNSY1NCVWloWGJ4a0xweTBtV0lZWVdWSXNabUtLMmNNM05aSU9aM3h1aCBZdmR4NUgyRkI3cjRzVXBvZXBBV0RHdTc1YlZYTlF0cFVyTnRBYndkSVcyaXhwWXVyOFY4UDNVMmREcjlrOThKN3d5V2JXYjRVSmt6IGdURTMvd0R1RGY4QXFTZ1VlUXRxNUUrdnE1dUN5QnVhZW9xWGZCTDdEd01BN3E3a0g1Z3lKd2VaTUlCMVdlNHdBYko3MWVyaytEaFAgNy9idS9nQUQ4QUFRTXlzNGVWYkd6UUJxQUhiWWRXcVkvVEhiUWFJeUs4V3dwUXNQeHN4Q3JlR0hzQmJCM1NuM3djbWRqV2k1RmxaUiB3bG83SDNkWU9Bb051bnovQUU3R1NQWGJiWUZrSG9xU3RqYStjQnJ2ZkFZTlVDbTRGRVBUZ2VGd3g4UGVKaGdPUFQ2NTdnSWxqVE56IFYzekZtUndpU0UyQS9nQVA3QWZ4NmtaYU5JQ1Z5eVVGMWdoeGpNZHBzeGhNemh0Mi9kYmJtWHRUSGxya0k3SzYwaHBsREhKMmNrYnMganZTNVowbExpTUFHNU44VkxIcDhJcW4xditXbzFuVnBuVmM3MkJXNGVqMU5iS1BrUUNCY0dCUGNKbHFja3I5YngwOGI2OExid3pGQyBneDVPSktTa2c5L3FJL2gyaVFqL0FGdVYxTm5xOVhKU3Erc2hiVzJpWVN1NlFxNmtLM2R6QlJXbGkyZ1BYOHlaNGN3UWwrUEE2aklhIHp1alFqTXh6emFPL0gzN0FCei83QWJSOHUyS3FrRXFiSC9HczRXU05pVEdjN09GZXVCUThwbER6aTRWdVkrWmRnZFA1VjJ2MlBBWncgUGN5UU5KZHduUGo0REQ3OGZRZW9HWmZLL21uRlVXeGt1MktHaHY2bEhBMVdqeXc3NHI2WlNpSGFoOXdNTWxidmkyNE9HcWl0R0U4MSBHQm1vVW9MV1NlOTcyREFJQUFCYnVJRHFta3BXYlpTUzNNcWgrYmpjSmhnYS9ra3diRlB1eHZJVjBVVUtzNm5mbVIxOWpaM3lBQ09LIEhpUkk1UFBPR1BGNUNxMnJSdnRkdGFLd2NrZTZhUXBZYTdVd3FQRTZHcTZueWxKK2w5SnVaMXNaOGJDWTRSOTBNVExIYzV3d3FNV0cgdTNzTTJMNm5vd3FTWkpDSmdhaGxKTW5PdlJ4WnFLckxyUkVCMk8yUFVzcUJtcnMyQW16bVZlem9iU1lTTWh0WjVRQm5aaEdGWGdEZyBrdzUrbWJJY3N6QjBqUzNnN0ZQeEc1b0tFQ1RGbVNQVm5YT1QrMlk0bFdQWnZBQkwrcDBvdWdCZGJ4cS9OV2Y5Zk5hSlA3TWlhUjJRIDByTVdVYk9xTkFrRURuVC9BS0hTd21LZGthZmJZTVZmU3p0SnJLd1FNa3NReVdTbUx1RE9RRXNteWxzZTRkdDJSd1cyQmIzN0NmQi8gMnVUR0E2VC9BTThRQ0Rqc0FFQjFWRWhYNGR5VTZ4c3M4TnE2NE0zT3BTSmFGaFZpd05nZXViUW1XMEJ1Q3Y4QVQzeVJqd0RyMHl1WSBEaEFuUWxrWXJxN016Vlg5Sk9lMi9uK21Rd0hWOE9MeVF5NVQrbmd3TDA2dTdZcnNsaEs5aFdSY2licUVBbm1RZ1hoelE0ZjZmQlE2IHVBbk1XWW1yN1o0UEVMc0hQbjdmd0cvOVhZMDc2VTN3cnAvdFcvZjRxR1RTN2VhcWdjNHRSYnNCZW1KcXUyYVZTaUdQbUxiZ0g5dmggODhvODhEOFloN21UT1ZkVi9Cd0NDZlgrZkFQQWRDV1g2WVBPZ2hobGFZUWJzOFczRzhuOU1GczJ4dnUrRFg3NlhHQXpJamw1RktJOCBZMDcyWThqM0J6anplSzRuanczSHgxVkdzdzZlMFIyUjNxcXBkblhJZGdjd1d6RlRzSmY2UmJWU0IrZUIzeUd0MVdRbWNUcjk4ZzhHIGVVTjhabGtHa21rbndIUHVBL3IxUEo3QTBhbTE4YlE0R3E3SXNKb1czK3pRN0pxUUh1NWl4NjViSXQ4R0xRdUg3Z0htYlBCZ1lkMUwgSEdQTzEwYlptOXUzMEhmK1FmcjBnYVhtUjVVZk9GcTRHNDF0M2h5YTllR3JpOVpJY3JkbWhOWEI1aTRHWGg2Mnd2Z09mdjFWb1pNWSBocXl3TStrN0h2NThCdjREcGtTR0JneWhjT1VtM0F5YWRjcm1wWXhuV0V2aVE5Y3hteE5LVEsrV3c3Z3R3NGZ3MnB0WHp6VUhHY1hWIDJaR09iSnZ1L2dUNEQrd1ZxRitwWlpML0FMekM2blNxWnRoR2pVOHd5eTRTZG50eUdIZng3Y2VVNmVWRUtCM2NhZGdkOHh4YnNneHggQ1l4WnBuZHRmZXRmdStyT1dSYmtqVG1wdUJuVkFIR2tvcjRTbHlEMXFXUmdZcVd4cXl0Q045UERyYkpEaDhEQkhwL0IyUjVabGNYMiB6T08yeU80QSsvQVAwQWROUUpWQzJlSDl0QXkxUlMyZXNKYnMyOEE1NndMNW0wT2h5OVBvRmNYNGEyaHA4dmJwaU9CWWEwbldvak0xIFlOS3lzOEp0R3JuZ0F3WThCWHo3K0JBVjFhRnF5TmRhSFlTYnFXeVZ0a1EwTzdFaG91QjJNQ2VHdEVTMExHcmV2NjNRazdoOWJyNzUgWXo0d1FBWWY5UmRRZlNNTFIzL24zdUFBYi8wbVZQbEF2V1d0Mk03alFsa0hoc2xUcCtwU1dwQklNVktlbHBxYUhuMVducDVpbjYzbyA4UDIwK3FoL0tJZm5EZXg3L3dDZlB2eDhCc0J3TEdpUEpHNkNXRk1wNDJqRXhqOEJBSXMwM3M2ZXpsSGdSNGZQdGZJaUV4S2lTcnBKIFhDUkJqc3lON2NpNlUrT05qRVpFbkk4aXVTb2d5WllzT0JhRWgyQ1E4b3d0MWswRGJJSGlaWUZvVS9sTWxnQnpGSjN5SDVoOVNIcVEgT1p5YjdNVE9XanZmQVY5QmZuN3dCOStoNFpETWxVUFlTMnJnWDhhNUhqZnlMSXFXanBhMnIxZXZJWlNIVjhPSDhOUHVCZ21JOXQveCBEenJJWnJnNHZVQ052YVNieFBnRDZDQTREMVpXZXRQaDFKczFvVTBSY3I3dUVSMU5UNzVYWkluQ0pvdVh5Z0I4SWFoRU1Rb1dvdERwIGNGU1VDRk9yYk5XaFhrcElGZGFUYVh2N0lBQUF3SUhWUlJPc0o4cE8vd0NKcUFwTFNLT3pjeVJjU1NPcXNhcXQxcTJkTW9VV25NWkcgV1pUNVVWNkplbXZMWVliNFZUQlJHdzlUSVVSamdNNGo4Z1FNVjkvWHoyUFRsUGN4Mk44ckt0eTRCczlyL0xmWmVmOEFpYjhlT3VaViBNa2J1TlBTTElZekxqaEdTTnlRTmg2c1lwY0d4VEt6d0s1Z3Jvc1JURFVlcW9abXNWdXNUeWVNc0t0bVNIWkZtcll1MnJZVFhKOHIvIEFJZUdjRTlrSGg2NXJTMGFsUnVNOFhLUEF3SDNSQ1ZYKy84QS9nTnVxVGgySlpkaDAvbTF6THRFQytWV0VFMCt0bUdDV3lBVmVYdzIgRllBZFBjSHhidFRraU9wVi93QXFReVpOWHBzYVQvMFRCMjZnZ0Q3OTlCMkRNclVacURzVkNzN1VocUxkbEpWQTZrRzI3bGRPQVJpeSBHVVBXYUsxQlRLL2g5aGk5YnA3aGpha0RnZGNvUXhacThtOGs5ai9mOS9Yei9nRC9BRnVlSzdhS2d0Q0drTm55YXhjbFVscDdxZHFmIExnWVhCeXB1SWVGdzJBeERRN1VjT1k5bklGUHFTcTRWQlp1bk5XWmxnNWFLUzduRDREdTZBNCtmQVAyUjIzSUpJcFNqVEJERzZJNGwgaGFOc2ZxbzVEU2IwYUJZZzYwbVdRNVd1ZGtJZUtWZFJHSFZGYU5vcHl1Mjhlb1c5cmFOc1VrSkxVL09ORHRhKzJwWkI4ZUs1dkM1ayBneU5yK3lBeVRHWVYrd2p6QUpNYWpJckRLS01oQlAxSWZzM3pQZ0VQbkI3TVJrTW84MW1EQ0d6YVB2OEF3RHdIVnRMUTVSRnk0ZGpWIGZXTW5PdG9tZ0NZOVBwS2UyQjVVVmhBM0l0ajdVNDJZTVRCNWhWMjQ4RG1leXdMUmhtUGV6OU9mQUFIQWRnNjgvcUlhUSttQjB0UlkgVHIvcmRLbjZxR3hyMC9XcFc0Q1pORnByQ1RUSHRnZThMSW1CNFpBeTFBVi9EQU5naXE3NE1XZnVxUThiOTdIOS93Q3J4eU5YaW5TSiBoVksyZ1lrcDg5a0NLYS9NaWFaNm5NU2xlcDRzV0dQaG1BK0VNd3dZTlEvbHZ3K01WZHRuN0liNTkrSXQvd0FiZFBnRGtseE1TTG5FIDhUaVJvNDN4amFNMXRNcVluRE1oNzVid09vSkZramthUmtrUmt3alNhUEtlSXQ3dDFpNHl5cGNiQTlwNTZYdGZzRWNNbm1BRGxuRGMgazlDVW14SGZCcnhFRG5vdFRucFMzVjlWN3hhaWV5RDBOcTdYd0ViYkZtbTFkWjRPN0pMc2JQOEF0djhBaWd2M1JoWDlOYWlLcXZpdCAzekpobTRieHNsT0I2ZmZHaGVoNmdpa1FXVW1NQmhiVzN4Nzd3UTRKNGZBTnpCbkYzei9lM2dVRStBQUFQMzhKaDNRNFhMVTdKRnNhIFlFRzFvQjNaSE1EV0FzWXJsenZubWN4ZjVoRHVCOG1EL3dBbGowTzFGdFl3UXlpeVQzdm14dy92NERBQisvMlZxZDBVNnZjSzNpa00gaU5TZW01OEczR3ZYa3E3U0hGaTJIYTdJL25HUU80ZnJPbjEvM0hUK01pL0tkMFVrSnY4QTkrZnQvQUFBQkkrR21sS3diNkxuUFNwdSBJa1lLaVFSUzJOeHoya0pnbVpIbGE2WVk0dFRxWWlId3JiUU95K3BMSWh0RWVMSWJXVnRSems4SGpqcU9JUjdnaTF2RGQyTTh0Sjh1IHptUzQxOXFzNlJFV25LdWRVdDhETGcvaWRUazliMDN6TVZ0NGJlZXdXUW5VRFJRNnlqY0o0VGhpZnh0MStBSDM0K0E4L1dSZzFBTnQgZ0V0VUFaSlNZWUd5SFo0b2NrZVQxTlBUYWxyMDgwUTdRTUlhR3RyY3doeFU5WUFFRmc4OW0yaG1HblRsWEcvUGdELzdEdjc0dUJmVCArNmxxTWRCYyt1YXRHUTIyUjYzcjEzTFN6MHI1VjhURitadkMybnZnK1lEeFlMTG5JWXphMmhaZVhpMGppU2o4QnQxQndBUDJ3QUkxIDRxclZwUVV1eWFXVFhDcm9ZdXdvMWUyZzdhZTVEWXRORlhyelJZeUlQRDkxSVlkOEhHRldBNFFQaDhaZkNoTm0rN096eHNHL3Z4L28gNUZqYnVOenZLN3lTQnUyUjR3VXlhU1R1TGJOakVZQzl3OGpuckZKdUtwU0puS1JRaUVLelpWbUY5UW1oaEdvWHZhamoyK2VyTEw5YiB4MjNUdlVybStHRFo2MWJDSnl6QTJ0NjNpTWtwWFhnTXFIaXlHTElaSWJoOHlDaC9QM2dueWhvMnozTmhEZlBqL3dDL24wRUJwVmc4IHlqYndhVmNXN0lOZUp1TWxUVHgyck9tSXFFMFJjRmNDbnNFUjhiMUJrRER6TjRUMSsydmgxbXpiWGhqalNWWE8zUHZBL3dCQXZ3RkogMW5aSFpIVEpaMUpDME1tTmloalZlMkJ6WWVwelZkeUxSYXY5cmdRNkhtV1JNWDRjQ0FSbm84eGxKSWU2RFBkMk4rK0cvbi9mZ1BXbiBVb1VCMTg4T3hrV25xVlNyaXEycEMrSDBaaDdqdFNuTGtYZ0xsRElNakozVW1KN0I4N2g3YThHQ1pNcHlabVIvTnZBRGdHLzdCNTlPIG9WeEd5eFNDUjgyVVpMaEgyWUFsNUxiRExMZ1ltNkp2NDZlRlYxakt4K3RnaGVYTGhrbEM1UjQ0OFhpTzdJK0NhNmgwOTgwNkpCUmIgYUo3STdIb3NOMkV1RFVZRGlaaUhZNlJVc1dhdjF1SE1WdVloc0NHMVQ3QXdWVnNYeGNYem5aT0UrQTJCKzRDZUFIbGpxSUlKL3dBeSB2YlFUYTNDTGRWRFcxdHNoUHpwR3p5cmxFMDJVMUNNRzhjdzNnZ3R2RGJhQ2x5UVgrTDZnR2JJazFkeC9ZTi8zOCtmQU1oRHErd0plIFc3YWZBd2ZuWVpEWklnL0pyZmhFemRKYXVyc2hHSERyZjdKOUhRMDhGeVI1WnlqNDgyOGo5MGF0MzhCditCOCtBQUlKc3B4OU9jdnYgd3hrRld5RERrZW9xSWowL1ZaaDNtTkNKWHI1WXkyUCtHNGg1Z2RnN3FnVi9lL0pxL09jTFVTVW1yY0QvQUwvbDM4UW55Wnl3UnBnNiB1ZGlFeG9tNEV5a2pqeUxaSjUzY2d1UDJFWHpZRXdzeWdLeVlJN2FnTzV4engyN1FDbXJ4eTFtcjl0OGRWSy94Tk1Ha0hWbm5ZNmFnIElUVlBXRHMyc0xnaGdYZ3QvTXRneUtoajVpR0gxSDBtK1YrblFvREFldUpiWnhndkhhd1dPUDhBN0FNZjBQM1lzbGd0U3RKR28rQmEgdFkxZFlXVXRZMDR2bUh1dDJGT2k2ZmRLTlNsSVFBdkRRcUhNT0tkTlIyMVB3aE1pTnA3dVRIQW84SFBkM2ZmY0F3WWUrREFsQ09uTiBiZ1pSSzFjcFZRRTV6UFlDV0FsNzhrYUFKYVYrUHhFeloxdkg1bGpjZmdQR0ZtTS9qQ1lJMzk0QUh6NERmd0NEN0d4aVJIRFZQVmQzIEhyYVcwT3IrMHVOWGh6QVozY09CeS9pT0ZnVEZzeGRpZlc2OURncVE5RG5KN05XYXVyRS91eHRKd0FiQjUvZnovVm1SWGtqS24yWkIgMkZwSXNoQ2hrUWdDT1BHd1NZNGx6c1pEdEZhSUVXT0JoYmw0OTZKNHBERkxHVEpHWWxabGtpYXdNeVFvSzNpVkpOMkdjY21aaDR4aSBoNXVjU0pORmhwTFpaRU5EYUloaTBMYWx0S3VIK0hEaHpONFlKalUrVmUyMERER000dDhzell3bFhoRG4vd0JBQWJCVytIWGN3TldhIFRZd0V4OFBPbVNWTXdCbVdnSlE0aWJ1a1ZrK0lIOTArR3Z3MVZ0WHlFN2sxWml5aFJaODM3Y0Jmai91QTRBZjdBWlJiQXE2b1pESGogWkl5U3JkVE1kMmpIRDBQNVlFOHQyQVlzbFBUM0JQQVRQd2VlYW1SblpzUlpObTgyRWVBQURZTi93UDdCaTM3TkZaMzhVc3QyTjV3WSBrTlhsZkl6a2VXeVBrb1MrTkVNZ1krR3lHSmpndGc4UGdWekNKMitocS9uVW53ZS9vSUQzQWVmT0RjRmVuL0p5dHQvVCt4eng5OW5qIDR4OG0rczdjc3h6eTdHZXNhckhBVjVQblAvYkVpamQ5V1dxQk10alV6bnJkZldZOWhjNG8xVk5xWlJzMnBkUTdBb0xDZHA3eG1UY0cgNWt0U3E4RmxPRVkxTGI0RUhUNHQ1eHh4ck8xTURLUnlEMWVyRkE5TDdpZndxNFJZYnN0Mnk2VjA5YVlMNHRQS2t0ejlGdG1wVlhQSyBSSzhXVlBWNmRUcS9jVEpjTDZXSmV4c2dHZ3FWcHJXRm1JU3JlQXJIMVloUVo2M0Y5ZnhRdmJCK0swdXY2ZkZVZi9pd0xJWkxPdEFQIEdVekZoTlRoWHRrT1VwZGpTcGpCVmRrTWhpWXR1Q0Z5MGg5UDVNVVYxbG1CbXd1bmkxRCtHd1c2ZjgrQVQ5aUljZTM2WHM5OHRDMmwgc01HVDdzcWRmR29hOUs1bGR6WTBJWmp0dStXUkQ0ZHM1dzhRcVhtSDdVTUdlYk9mL3dDdnYzVjFwaTRDcW4wejhhV09STGVOelZxNCBzWTd2SE5uMkhnampxc1dDS1dZRm8zV1dTU0NXMGtqUVV6QnNlN0N4UW9lNnVPbExSOWdTSGR3R3hOYVdxN2JjNnBSdDh5TTViSHFjIHl4anhab3ZteVdDSGNGYnpLSGNMQVd3ZjVwZUE0d1lVN1BvK3lHd2h3QjREcjBhVzNubTQ4T3hvUmpoT294OHV3U1FTZFBid3d2bmQgQmVybEVaRjl3RG1BOTJMWkdZOFFHQnRhc0JtbnEwS3ZxQW5pN2NKdFh6K3dZVkY3OVZGUzBld0tRekt4MWM5NWdsaFdDSHNpSVBTWCBaZllWdXhwUW1WRk1FSWkzeU5ibUVIRUp0OEE0aDl6TjBHTEx3RSs4YitBMy9wOEM3UXkyTW00SDAxVlVwZ2J1UkV2REphakV1WktzIGFYWTEzT0E4T3lKOHkxR1FnWSt2ODRjZHNmT0RQUGhEYVA4QVlENEJnQWMrd1JJWXBKR2VKMFdGcVRoczQxQXJlaGVTaGhkeDR2aWIgcHUwWTh0aldWVUlkWHoyWld4ZmRqOU5qSHR1REhLbVdkTnd3N2FBQjd5ZXRHWXZnODFEVzAyMVZadEE1dVRYN0NPTHBKZ3Q0RlRLTiBENXM2ZkRwOWJUeUg4aFY4OEh1WXdYeWRaQm0vOXY0SUg3LzF5QzdvTVVpanRYSXc4azhwSHEzcWQ0RHJUUkUvRjl4cGtXeUdBekRXIDdJVzl3RG5MTVQrS21PY0N5Z3haNFNiL0FIL3dHSDBFQXppRmJ5SUMrSE0yWERHNmIwamhKYXR6RHRlR0hBK0psTm5JcmRidmt0RG0gcjh5MUI2K2VhZzR6dGUwREVaNENHemJ4NSszVC9VUFRlbjliY25qT2dSWEJKdFM3bXRrc0loYlZZMS9MNVFlcklDcjRqNjNEc2lHaCBzcEJ3c1p0dENCWXhqdVlMUS82SjJUM2YvUHIrd0FBQzl0QW1jeHd2aU1WZVRtaUVQSXJMODg4ZkJ2b1J1S3pGVlNaRlFpVXlKakpCIEcyRnlOSGJWN2VGeTc2SnlXdWlsVE9hWjJpNkNWeU8rUy8xV0xoMUxMSFpMVUhMQjlRVVZlQTFMTUFjOG1NamhDVHFyYWp5ZUIrWVUgR2NYOEdrK0RQWW4xOC9zQ0Qwb0ZjZkRNbEE2YTUyUktaS2x6cklkOFh5RzRXRkRybG9sb2FZWTdxWEJXNGRrMUlmREJ0dVBia3h5WiBvVnhnemhPeWJBZkFlZjhBUDlEWTlMY001d2FtMVNHMlJYcjVuTWx4MU90bmw5ZFR5Z3NTQktHUGgvRER6RkNyMDg1L0lOUmtZekZFIE1tekhFa0liT0g5Z1BnRC9BSURCVjF1WU9XTTRUQXp2bmFieG9HdlZ0M2tOV2xmVVJ2RDVTS1EwTkNkYUtHSERCMXVZNFEvbnIvQncgL2ZKWXVSR1puanpad0NBOEFmMy9BR0J5Uk5EdWw1TTBTRkk4cXgyNVBzbHJJM1Z0MjJQUHVIbnFBeGtSc3NYWXpxNnRtTGJieHNVRiBGZThHN1BQTmZIVmpIQk9UYUNjbXFyajZVbE1jZ0NXeTVNS1FuWEJTZGlDWUFrMktHbWhvbjF0VFlRSFl6WnNPUFB3OVdmSFdBYTBrIGovUm5aVUZUV3dnbVBrd2NyT3VkYXVXaDY3aUVxeVpORXVtbS9NeXQyWnNWQmx3QXRZOTRpRmQ4SCtobEtHczQ0bURBT1NyaFI2Um4gR1RKZkxUb1VHS1R6WWEzbERZeGhoT01HVVduNXVkQThnRHNHMCtSRGtGdnA2c2dxTHJjTlhmaXovd0NiMUpFektyQ2FGUVFDQm1UUSBPUEY4WFdYNEhqcXNkNnRFTXBROE9leGdiUkF3TEhTVk1oYWp0VitvK0hHUE83NUsyK3lBK0xKVmI1L1BUN0FBbkU5R2VTZ3YreWVmIGZrQUFBQUh3RDkxYWpVYllGNlpvZnVYRWFrbTRJR20vU3JwN3ArcTA4eEVUd0I3Q01VVzdSVDRiSUhzaGJJT0VJOFA1Vk1XU2ZGeG0geHU5MmNIUWYwK2c3L2pEdkQ1RHBEVC9meTVmQ1M3TldveXZodE9HS1pQQjFPSEZUWmFiekFnbm1JZGtHR1R6bGFFRkt1ZUN2SXQ4WiBsaEgvQUJjRDRDQTU5VVNDL0gzNS9haUtQYkYyeEU5Y2l2bEpub0dkVGdrT2s1MEIzN3RWellTYTBjZm1JYWZWWmRsSDRUajFnUHVKIGhaUmxmRW1UOWtrSURQc0FESHRGc0FCQkJtMG03QkFXUVRUSThpUlR4UkpJOGNVdWtqbW1oRVFqM0lJeHFFWjVTZkpRS29zbnBDQ1Ygb3BaVEl5VmdIVkdvbzdXWWt1dTRTVTRCb1k0K0d5NFNhQVFGNmthN3NJOG5Rd2xQenh0WEZ1M3Vuc09KY0x1Rnk4QU53NFcrbnJmeiBEQkJiMzZ2NTRQNnp6d21UL3dBN1VBQU8wV3dBUFB3N2pEajVyck1mTEdRNHlmU013YnhkRG8xWHJMaTVTc3BVb09QK2gxdStCeUtHIGpnVi80TGd6WW9hdnpsRzNzM2dmNUFmL0FHRFlZZExYNjNTSkFGRGQzYU5TZVYyY3RlT0J1ME83M1lCS01Ob1BqNVg3SUhodyt5ZkogQWRMRUlGVjg1Um1ncXpMSnlyZ2pzOFliK0JQNy93QmFWczVhRjB3ODVjeWhwSnF5cHFCWnR3RGNpUTJHQ2lHdzF6R1c2djVMd09HbiAvVlQxZjFvOFRHYmxGb0U5ak5oUFA3QUFxTC9mMnFKb2xXWlErcWsyM1FLMGptTjVJeEhESEhJV3BzczlwbXhyMHpZeWU3NkpsbGFPIEFzNkRMT2xpT1VhMFkvYWxMZ1RmUEp5RkRpdXBqVDJ2c2xja1ErcjdUZGNGU1BsdjFqM0NyZVpXNWhUWkh2VkJYdERnSHpaNGJJK0wgY3doWkJ4U1lHMnVZZkdmb3J6dmFSVnp3L2NCUC9Yei9BTEwxZ2ZMUU1zQ2UrTkRJL2diYXVCMnMxZlBFc2VZVzBMVXp6NHlqM0NxMiBTcTNDMUhBdzFkbjU2b3RqQ2ZQSGtadmV5UEd3ZjJEa0hXUkd0azBlMm9sYW9LMHhDNUxiV05rYWZIYzdwdnNDd2JUVHBUWStOR205IHdEV1ErSW1JZ2UrTlRZUHNxMHpEMDh2Z3dZU3g0VFY1dmo3OWh4OSt4eHdtRk13YnZPT0hzRm5UNnV5VEZoU2JZTVdyK1RURDVWN1kgNU5ESllEMzh4OHAvajlxTldualQvUDU0TUdJYXVNOEo0TSsvTDUvMzU5MElra2oxVXF2cHBCRGhEV3NWczg2enVKNHNSVWtGaktiYyA5ZmN2YmkyKzlEUm9VSzd5TE1qc0ZqZnQzSSswSklHczFsUnRjVFhIY2I2a3U3NURqNTVYbEdMUnRxaDY5Wkd1eUs5aWZXNVNKWDFvIEhsc2VJN3FLQmhQMmQ0QU1DSEJYQnZBMmZhd2RYQk1jWDdnTDhBUDQ3K2Y0aFliVmZVQ28zMFNCb2JCd3JXNnlOTzZodzlLTk1PRTAgUG9pNHl5aFA0aFpDMHlKNThQWS96OFd0WlpTWlZDR2Y2WDRtOFBmQUJqaGd3SDJyVytsZTdESURPbFVFZUpCNjBwKzQ2bnFkMnM2diA1YWVlS0x5RzVNZzlEUTdVcXR3Y0NFTUhQWDYwdFJQSnJMUUxXU1lQWTBrSHY3OGc3K2ZQNEFDUTVhbGIzYzZQbXdzanRmOEFxQ3lYIGF3azkyUFhBdkdGaDhVcWxxV0d3TWkzWkNleUo1Q2FxdHZMWUszM2ZWMWNaai9Zei93RC9BQkMvQURrMjQyYVNHMWhrZG1FZzU5YzQgZlRpdnlQVTV2bmpqcXNYa2dHY3JuQkVqS2cxSEloL2tXUk9jc3UwcWNoaFRjTmwyMVhXNDZXaDFIY0NRNVpKdHcxQXA4WlR6NnJ0byBnd3ZsalBpOVY5Y3VKQ3lMSXJkUFFzWENaQmdPTnRVN01adVVib1QrN1ZjRC9ZTmc4LzFhaXY4QWc1NWNWVU5YQTM2cWxIWnRZWTlWIHF0c1Y2WGNoY3VVZURzRGc0cC96WERBT3E3ZWVObUdZbWhxOVo3R2JTZjA5dC80Qy9uK2x1cGtDQUczRWtYS1ZBdS9OUzJwby9iR3YgNWJJVVYxNDlMaHI0ZXExdUVZWk40YXJhWDN4SFpCZ3hEVmhqTi9XeHpmOEFqLzZmcWVDbHZMWEE0ZXFuSmtsV0VCVmY1Z1BUSmhoTSBLNHVXNVZ6WkpCRDJkOGNGdGdUMnFBUVVuaGtabVpEYUZsNWQ3UnBOMk4vditBREFCdndzenlxellQMk8wcWgxeHdrZkFwZ2JQcHhVIGNJL2dzVGx6MDJNcTBjWVNOQzRSUVYwNHp0SS9mSTU3Y2NjbHhXamxiZHdybEpuS25RN3VVMDlqUEtvNFBsTFp1emFuYXU1RFloaTMgTmhsVkxNSU9ESXlJY044c0NIdnpnM0kvT1NpdU1KK0VTSFpIUVVIZiswV3diQTVzdXY1REhWOW5hWHoxYnhwaUduM1pZVjh3N1VqMSBsRGNqMVQxMGVyYjhEclRJdDhnUTdHQko1QTVXL0ppaFJaM3p6Wno5UDJBK2Z3cm9ZQjAycmtYdzhHQXU3dGxBVGxPTzhPNWtkVERKIGtxWFhLdkRYNWx3Y0RRL3JhcWVZRVBrbTJQbkJtYlpBbnNBQUFBSDdBL0g1bTFMSVlOUHJZazIvVldTTkR1OWVyZXo1T2NqcWJIRmkgM2VyeFh6ZURDSE0rR1A0TytMNEUzTUo3cGlTSmczWUpWMy9mL3dCZ0FTUjVKR2pkNUhaSXJraFpHd3VOQ2lHSmdRMzlLU1JBOThibCBsZUNwR09QWTNJeWR0L1VnbEZaWkkySVlYWXJMajROQWZQVEM4SWVLc2dHZFpCc2EyNmlpVXpFT1NNeTVrWFRuRWUzS0VRK1hzNjJ5IEo2M3hKZnJRSGdUclBIdEF6STV2ZSswUjlCQUgvd0JnUWZrT3hNd002QVRNcXp1RXhRN0pFa0hnOWZsclVmRTNFQ2U3UHA4TjgrR2ggcjh5ZFdtQ2txek1Ia28rSTNCL04wZWY4QSt2eC9vclgwOW5paCtHMStOZHJ5SU5UL01ESWFTWTVHTFYxNnhsY1BhRXhPVzRiNTdyZCA0QWJCbmcxdjZHaDIrTUJtemFTam4vUC9BTEIxSldRNFUzRnFkYlBaVHNNUFhTWXRHSVFQVWF2cjB4TlE2OXE5RGgvTU1HSVppR256IFhpbG5BODFKL0dlVUxMTWMyTkpPSDBHM1FIMzVndzZXWmR6VUxLOGpTd3kzQ0ZTTzczTWJaam54alhhSzdyUElybGdDQkhqUk1jYzcgZFRsSElZekY3R3BidlB1NDdlUE9YQ3JhYWpUTHBSNzRUTXJPZHUvR1RhUHNrdmlRcHNpZFVyRlY0dGtUdG4xVVRFTXdudzUwOGVCMiBkR0dJbkdVYnVpRE43L3Y1L2orTy92eGhNRE5GYUIyclNYY2poSnFVb2tzakNZdWJPSXFiSVV0R1hiUXVuMC9nWWNPK0dHRHR6UHE5IDhWYkplV1pZVi9ZSGovNTk3QUg1QjZKTElSN0FBcGllWm5oNzFEL1cyeGdjQTdCTGhub3FtMEsvODRZV3c2ZkQ4SFA0SFl6SXpZb2UgTE1UZURRVC9BTmo2K3diL0FOT3dwUlorZVF0cnZkTU4xS2VwOUFYdFVDMkhJWEc0TThWc1RRTU1mRGNBOVZtV1J3d2FvRndkeG9aUiBadENyeWF6c21IZ0FDLzhBOWc2dmRRU1J0T2lTWXpHZU9WMXkrbmt0UUFpOGVtT01Fc1kwZVRmRjdEQ3RyQk94STVNWXdCSWdQZG4zIGN1OTJ6LzVibzExNStsTFFNWUxiMmVLYmF0Mk95SUFuNW1kWDlaR0xRcTh0WTNkUmVEcDRlRk1tSjdJQzA4VmUyenBoTVlybFAzekUgSjlDL1lOZ1A5ZWpUUWgxRUZzQ21RekhjQkxWUlY0MnJyTjVJTnNpc29kaldndkhuSzRCN0luMVZEY0Z0dlpBUUZnZ1RuRCtsN01KZyA2dTJTcS9ZQUE1NmZQOUl4a0wzRmxhTmIrU2tpekVnUHAvTHNjV3g3QnNwWHJIQ3IybTE3dFR3OVBPTVJpd3hmR0FPMUtVK3BwK0ZGIDhwS0l3d0hoai95NFkxRnYvUGNNY0srQjA5WDR1U3lqd0dORGlqWXltNFF3d2RlaHRFVmVzYVhTYWVZV2pCZUh1REpPUHA1NXFXN00gZWV6ZFprd2Ztd2VGdWdOZ1FmMkFaV2FiYmxFbTNnOHFSU2dlb2Eyc2lraWxaSXZ0eUNPTXZrbkZhQUpVbEl2OGlJNU4rTHVoNDVyNCA2UE1jdXF4Y2dibFhkREcyUW1yWnV3bDhPN0Q3Q01GQUx2U0pSUElmTm1CbVN5RjhPMVBsWHZtSCtqaFFuOUpON0h2L0FPLzhCNmZCIGkzRnM4aDE3Sy8wMnlpVEl3MkJjR29wZ2lRejEzMmFodEUxZmNOUGRWc2t4RHNEMjNHeStOb3pOendtVDk2dWRrZjYvNEErL0FBQ2wgeEI2YjdWVjNaM1YycEEwdTJwQ0pjZ21WN1g2bytSV2hldEQ0Znc2clQ2clQvc2h3RVFiYkczUHVoOW1PSklUbkFEN0J2LzdCQXAraiBjd0dJV0VrWnBoMnAreTYzQ05qd0hRMmhUM1JEczJVckIxOHhNUTN3d251REp2emdwVWR5WjVhT01zM205amZrSDJRZGcyQUFMRGNuIDNUS2lvYXlFaHdlTDIxYWMrN243aFdKUFRIV1JJeVFhUjBqYUYrZS9UbmlNVllySHU1czNmQUZXUU80TElzeHVNTldhMDUybTlrMUQgdTF0UkE3VmN4QmV1QkVsS2I1cDlETUtmY0hKT0grQ3FXMEcwR1lSbVo3cS85ZnlpRDd1K2YzLzZESTEvcERiS1JGOFNVbmFwYmF0ViB3WkxORHcwTlBFb1pRb1dBaTZmSThrK3lUTjVWSjVBOWpNK2g4Wlp2dXhzNS9UNEIrQUFEL1VkTTFFT0NSWUV5dm1qSk4zK0crU2tWIHZaOHhmWVVORGl1NnZYS0dQRHJrT1luL0FBSEE0ZXNFQzFUTnpWeWpOdm52L3dDZkg4RC9BRTdCZG9JQlJIU2E1S0xkWEFkUzFQa3AgYkFOY1RBa3hYUDhBRXpUZG9NakF5V1JXNWdSeURZd09vRDRPQlN6RmZVWTg0SEFpU2srMi93RDcvd0NmQkoyak1TckE4TVQ3VnlNOCBTd0puZGV0SzhXNVdKdWxGRHlCWTZqUnh5c1poTWpvanNpaVM0bjdjYnlTNU1mSW9XZkhucGIxQnAwc1FVNFh4bWxBSnNheG1LbUxXIHVObUYwZGtwdXVXR3VhbFVPZVEzQmtRakE5Ym5xUjg4amlCZ3pFcU1HV3BhSE5RZXc0c0h0Z3dNSFRDSHNBZktYM0RnVkdzbFZjUGIgYW51QmJ1YU9KZkZmUkcyUlpWUHA5Vm1JbHFLRDRvVERsTDNoWmNIM3JNbytjR09CRWsyRFFQZm53QTgvdno4cTBkb2RFMlFlUGFhYiBhc2hQdmgyYlJKakp1YU92UGRYb2N0RWFFOWd1QncweFEwTjhJTWxpd1A0ZUdwYjJ4Q2FPVFdwamRxU0QrZ2dEL1VrNlphM1lJZlRyIFVDNGsyMDRacEpzaUIzRGxBa09tMXlrSWR5bUt2bUxkMlVuVDh6dXBzSSsycUJNZHN4ZE5qS2d0VGhQQi93QmdQL3NEOCtXT1Y5U3cgZWswMHJtVlpkTEpORklYTU1FVXYxQmwwOGUvSEp0UnNFWEhIdUJia0VoRTZRd1NDRW9KbzRVaFpwMzNJMTN0VVFKTk8rS1hJdStTVyBydHhBNTNPdzFRMDlNbmh4MmJwemhMZGhaUmVyeTFvUG1UVy84UWJPMFVPTFBvWStxNW1qUmptQmtDeU95emVRQjRqRmhvVjdnWlVhIHI5bHdZTi9QK3dEREVCV1NzektXMjI1bkMyaW1XVE90c1BnV2FLZlBWL0xXMml4blo4S1F5QWNPbm1BNWkwSmlxQklIdVNERmw4Zk8gTW5FbEoyUFlEMy8wQzdGZnZFT3RDQUVYcHV6blpiVFlhUzd0RnFhYjNpSTRkcFJPcUJERGowT3lGdERodmxvVlhYTDVzUDBabDA1KyBNT2NKTmd6K0huOWcrZzA1cWV2by9Zc1BtOXNhQkR6MGxiNVJNY0hDelE4dFhiSlI2WVFmREZ3SVZrVE40T2R3TEwyY21qQzFkbUorIEVkdm9KL0RIdEY1K1F5SzY3aXM2aDY3cEk4SGVpUGRIazJGWHgzTllKOXRWMVV4VlRTTFNSVmlBY2tiUEQyeVVNc2FBUGJ4eDF1TUkgOGZLU3pCVE52aEpyY0NCamFoRWNPMUdKYjUrUXJ1cHV0MStZSHJkOGhtZUgvQXNBOHFzblkxb0YyWU1CNG16WndBQTkrZkg5L1BtMiBaVzZIZHkrVGNzVStuTW16QTYzeGU3TzhIZXdYWTFUdVFzT3dUS2ZvZGJjSWEvYWxjNmg4THBCcDd5em9mSmhpTzdHL2RmQVl2eUMvIEFOL1B1WUh3UEtqMjFBcmxsU1UvRFZGVzZtaldwOGVuSWN0OFUzS3VUQ2ZjRlZQZ2VxMlFnR2VEeEQ1ME1ueWhvZVVZSFNZVDZDQVAgMjYvZUFQOEFVQzJWUEpiVnV0eDdRQnNpcFhMalphNkZVUDhBTDJKb2Q2bEYyUVFob2I0WS9NRDVPc3RQUTUyNXZQS0dXMytFOXJ0LyA3UkFGOCsvYkFmTXpKbEcwQVJIamRTcmhmVWVRMWhISXdidXo3Z3JVTUNDTVd5TlFLeXEwTXd0MHJqL0NTTDgwYnY4QTI4Zk5qcFByIGF2SGxMNnFrWlUxa1Q3TE1LUzhyMkVCdGhUY0w1S0NiSGxMZkpFUFRHbnpPWHc3RzQrMnFwaXMyYW1yNHdzd0dFOW5qWUFIN0FBMysgNEVjNXA2UEw1SlhuMTdiU3E3dURiTFlKalUwSkZxSWJScGxReWo0d1ZXNE9ESnZBOVBlTWJRcWF4dU0yWStGR1ptODN2bXdiK0EvciA3cW9zTjhkSGRUSldEZE9FYTFFT3pXU3NtaXlDVzcxWEZQWElVUFRFOE8rUGt4OFhIQzRFZ0RnZUJwNVAyS0RCaU9FQ1dqYWlDQTJBIEEvQUFIVmhNdTJGT3hpbWRaZFFUVzFQRGJsWnQ4QjJTMkdIK0phTFlSU3hueitHOXdEekUrMUNINWFZSittVHRBc3ZtRHk4bk9FM1ogcHpmZ0I4QUFQbndEOGZVc2R1akJxU0s4SW1TSjQyeXh2Y1IwTVpyQVk3VWNQazVaOXVOUnNQVnM0Ym1DbGw0a0VZc09pUDhBYm5hbCBqUjlvNE5kQjVCZm1wREFlYlQyYzdPRTZxOXBSaHJ0SUU0UGtVU3JpNGJnSGZERndVbk0rSFhKK2UrSTh6Y2tQak9HT3lCRWZFK2c4ICtmZ0FCKzYzR0RBdXZvOE9saWkzR2FqTkQxdTd5R3JPWU5tbEhoTjhDOExQNDIrV1M0SWJnK0hMTFg1NE44R2NEdEVZem5BbmcrQW4gMTlCNEMvUDNTSFR5RWgzdUJQMHQ5emxKa3N4d0M4SFBHS3ZiTzZJRjNHQUtmSWR5REZEWHhESVZ2UUo0ZUJWUkg1UVY3TWVLcjdYTyAyd2UzUCtmVzcwL3E3dXhMNHZuNmZyQkQzOGVQQjYzWGxlcGJPdGplSlVYVGcrSHNiUVpOUWxic2t5azdnd09IaysrT05yTlpxOXlQIEx6dllRSWN3ZnJkMkFBZytmY3NqUjhDVjh6V2Nha1J5UjFXTzR0UDd1Y2VmSVkvNlVJbURGQ3lNaXV5Sk5HMmNjbU9BSlUwdml4WTUgcS9QU3lITWhZcXVKekJCMDFFYlNPdENldXN6MjREN3l6TW1hUWREZy9MbnpzeG5CTTZTNEdsaHVsQzgwT1NZaE9ibkJCY3doUHpHViBYQitsVFBnekJqT290dnMrMEtLSXhhOXM2cVhHeDJvWUxoNFlNQ3RZOWFVLzZzdGNqWTVvbExISGdkb3RTMDVseWtaUEZnODBZWG5LIGE3QUdwMGxWU1FQcFp3U2dPZkczT2xoWUtIbzYxdkhNZWcwcm9mWnlqNHJrcG9VMUN3YnJvTnlZOG1sSm9rY21qd2F1aGRmQnI0SFIgNllCbFcwb0JsTVlGSnJkb3M1dDB5bzh5eU9FT0I1OTA0WXRIdk1XekZrQjc0SUxkalBsUDBQWXpJc3JLdTBkekhpcmdnUkhQdndBLyBzQ0NnMEgxdlI2cnFOU0h2ZVZhdHdWZE1WM1kzRXJlMUxDYUVpMUs1dHBJY25Od1lERlZ6S2ZxdERxK1pCdW56bko3ZnB0bzA5TElJIElFU1FaOUJmajREZ05SZXkyRjM1bVpUQU5GdVdtOVN0UURYc2RUcmZPUTdRYkxnckE5c0thSGNJZGtXUStQa3h3aDc4d0FXb3dqTTEgb0ZHYmZEZFhKS09BcUxZVUZDQUh3SFhZTHpMOG53ekN2UHpnZzFEbUJHRzZCclV3TmhpMExrU0JZcWFucC9HNjN0UXduOHFiVjl0YSBXUVdzM0pwelJpYndiNXNqOTNmb1BQaitKK2trbVZBa1VVMm43STVZaExIaEhESWUxTmhDVDJSUnFrZUdROW9iTHVvUGtsamRpenVtIG9MdXp5QkhyemppRHdhcW1BUHp5YTQ1Mnp5QXVMaGtMaklkSFBkT0VpSmFTdDJhSVUyL0NtNVVwTm1mRGZMcnBTWTNwK09CNnIwTlYgVHlaTjlLTTJMeTZwTHNEUCt5RUEvcjdxZnZCYnVROVlpZkthS05DVURtNXlrcDF1MUVpRVJhQXRDUUx0cWsxK0gyM2NBNkd2YjRwTyBFOUhYR1o1YUt2RnJKMDI3VW1jUG56NEFCdjRFQUFUTnl4TlFGU3RrSmNkejJxdVphQTJTcG8vR3c2UE1BeFpZRnltRUdVd3Q4UEQ3IHk4S1E4Q0RobEdaREtjWi8vd0FCOSs4K2JXcFhhdkZzMjVyUUFucE5ibVVrYTc1R2RSby9UZ3R4U2dpcGRuWUhBeDRlR25yZURhM2cgVGpoMnpWMmdaYjV6aElUWUgyM2VQb1BnT2p2VVR4NHpRcEdza0l0VjV2Y3g4aGdZMndDZzk4YmVTUmp6a0NZcUM4VHYyWWlTT1EyNiB5Y0JrWmE3TWFGR3puZmhjZTdzaDJCSTFOM29NMDUzVGtvRmVsQTZrcHRFMENueElhc1VzS0xWOHdleVEzQU90bVBtVnloMkJQVm9ZIHpsRFJ5WklkdGtCbi93RDRBK1lMN0lwdEZmZ1o1U3dsSVEwT0Zvc01kRHZnZ1cydG9LcGxYcmZBcGxQdnRKaHlId1FEZ2VzYmMrTHQgQ004bkRmYTdnUjgvVVd3SDlnNmNGaVUreXZrZDgxYVJlNURocU1zaXRsTWhuT0dnK1krT1ZjcENIYUVNZXR3MC9VSmNJZGdNSTZHbiBnS3JoY1pGMDVVQ01jdEdya2w0QUg4SDQrQVA3L2doNm5vdlRmbGFUMlNlNU5WWEpKNkcyM0hVOE1QMm5jWEtWYkd3cmErNEdETlZXIHBNSFF1MHZhUkhEOFphQlpNbmFudUV4eEFQMndlNEFCMGxIaWlTTWFPWkl0TzdyREdyUTd0VG5neGdtU1B4eGJlRFk3UlJ0cnhUdEwgSzJwaDNwblE2eGh1elJiZW5iR3N0cDF1UVVSSkdidzRwaUdKNmhoWTlieXJZaHhRMmNwYWhJQWQvd0REb1ZnTzc0TWlzS3ZVcmdQaCB3MXV5RnRQY0lZUDlKeTN0bkY3TVJuanVqU2UvL1FlZmJDZkFSRHBKZkZ6VkllWE5SbGUrWlpMUXM1d0pEYTNMWXlrMnZBTVdHd1REIFBhdUg1bHE3Zklmd3lZd29zZWNOOEpPZjVJT3dkTlNaWCtuOVNJTGVWWmE0MnpESUZTK1FTczZQYkJnOEwxQ1lKc05oZkU5OE1mTXMgQ1dxb2FlZW5CMFlZVTNNWThKSVREZjhBWVA4QU1CMVhzZlZkUHJGOGNjc3ZKTjJRaHpMc2lTVnV3aDh0a1ZuS1hYTDVOWDVqZ3lWcyB0M1pWNjJqZ1hDQkIzTkdLREdaR0I3NXNmZ05nMzhCN01FU2xwMkVudmhaeWdqbUtRN2VQcklrU1MrelBsV0taazhNTVQwdTJkSUkwIFhzaG1qeEc1RUt5SXYrUjQ3dkFlMitmTldMWVFOZ3ErMWEvYXUxVFVjRzE4eXRyREgwNjV5K3AyUnVqdnhka1Q0ZUNlaDJxSFh3NnIgaFlGRGd6RlpNelJ6alpOazRSejRBZkFiQmlCNnNoVjV5T2tQcjVXbVVlU1J0d1h4cUhvZlVoU1Y1TDVhcTFmYVR3c080QnpFempkMiBPQmlkOXRWY0ZuaTR1ek5qeE44NDM5KzluN0ZCN3ZDcU8yTEY4V3hwMVRhdjB4MUx5UlBrMnhVNUlrd05sYi9GMWpPV0Q0UW1WdkRNIEJ3NUFQWENsY0NHRDVNc2xMUVJtYm11OW5UNEJCZmdDRHNCL3BQNjFGTzFGZG9mTTB6eExPRjFpYktzQmluNDZRbmxFMVRxK0taY04gNFQvNXdnWS9uNEZqVEJuMWZrM2hBaHgrQUh6NERZUFA1ZFFrV3NuaDBMNmZjVFQ3T3NlbUdta0U2U3hTNmFEYStwaUU0bDJwbzlVbSBaMjRuTUQ0VFNTUnc2dE0zMGtFMm9qbWhEeTVhUm9TWW1Md05XOU1yeXd5K210SmdRaTdoWnJLNGpxeUVOUHZDNlNvSVdCem45VlY3IHNkMnh3UTFzaDJIVGE1c0o4S0xkWDJvOWg0YTI0TDZmL3dDbjg5T1QyWVlVUXhheURDWW0vdjN0NTkreDZxS3YxZlltMWpjb1hYdkogZEkyY0VVM0Myb2J4RXNnVzVSQlo1OEh6QTVoYk1HR0I4MkdyMjFIK3pib2pNMitlN3dmQWMvOEEyRHFCcnUvWmI0WVBIb3R3TGRrUyBxeENMMUg1eDU0U0Z1eG5MczEyM1lYQmJXNjNtYmd0N0N2Z1hoa0pqQmZ1VDgzK3dmdjIvODlKTEExVUE1TXlIVlZlb2JzNFdVcWt1IDRDZUJhUFlYVjloQVNoZ2V0NDJSdzlESDF1OFlFRzJEdWJNcmk3TXJMNlRzWDlnUWZBZE9pYnVjMWplS3FTZFU4YW90NENWLzd6VW4gSnlreFRkb1VuWjBrbUVLb3Q5bExabGJiZVJaSHhMbUdPS0dDNDJ4QUVaWTdWRUJtek5admltR1pFTmorWnFpbUdSc25UaFpHY1hlQyB4alMrVnU2a1NnY2Vuc2hpazN6Y0Z1MWZBdFFjbXNpN1BXQmZaT2s2dUI3L0FMOWlmZnQvNnNoVjhneFlKV3lBekc0TGVja0FrQjNlIEE5NUQ1ZGJ1WEhqMnpyL0E2ZmZMSVQyRGZPWU51enZMUHloWjJQdWpxSFIzN3RGc0cvc0hJTjBmUE9IblJQcHUzNytKSWNXeVFqQXcgSksyUWljb3hxaDhzYVpYeGVIVDhSd2wxOEhybXRkSjl0TlQzZ3pOQXRhSm5PRWhFYjZDQUFIejYvd0JCTU5rcGQzc1F3TFNLM3JlWiBhcDlraU5GaFRLL2w4OHBHc2dLdWhwN0lHZkE3NEhUNGRxUUsvYlp3YXpHWjhWM25mQWxYSlJ6OFJBVDRBQWc5UnR0V0RCbzFsampSIEp0MkdJVlI3REx0TEhzMzNZaGhObVFSMjRuSVVWcUxDRk5sNUlHZ0NVaDNCRWtvak4zZWU4QUc0eEtaVWM2V0JPT2p3cEk1N0ZjY0wgam1XV2VTZUwyb24yUVczV0s3aTdrWkI4Tng0Zk0yL0NDQkh2aU90ckJQaTZ5TTVzN1lnejREdTZmMzgrQXdtSmkyS2JkaEZwRmthayBKakd0a2l3OVBUMWRJbVZmZHp2YUI3NjNnNE1uSkNIem0wZTJnMlREYXhhelpteG16YndBMy96NkQ1OXkycERXNEVkRXNVb1lxWFRlIGh1dDF1OVhwS3EwM3hqWXozUTJBS2FSV3BpZmZGY09KRDRDbldFQnFyZG5XVmk0MlltY0M0YjRBUVdBQWdBR0JBZmtLb0FleENCNVQgRC80UWRieFVzNWJVeUV5dDlxWkdnWFU1NVhUeUh6TFUwOS9jT1ZOcENwWUsyTXQvYTl6Qjc0N2MrUWtFL3NEQWZRY2RjVEdKSlRFZCBPWE16N3Vxa2NZUmdZNHE2MTdKTGJKTDd5bzdseDZVK2JPR2xqZDBIMDg2YlhmSVl6TWtVcEVkaTlyZFJpY3VTUU9QUFRzeks3dXk3IG15azNLQmN5M3hLZ1VrdElzazhZMmNEWTFoU21oOUgxdWh1Qmh3aFdETVZaK29DZThzbkJrTzBDZXhwS1RhSVBZSDQrQUFiQnlESmcgK3M0RDVhaXVCUTNaVnRCRE4xT1FoMC9JdGlrLzVzNkxEVi9EY0hDWk1jTEE1eHlBQ0R0VGM2YTRNaW5EYnNFNTkvMUFIK3BpMEhDRyBVdlFQWUt1blhaYzFWVS9HaU1BRU84TmxWdEZjRnF2RjJRUVQzREd4M0NaeSs0cUhxKzZVZFBadjlUTVVjMzk0NTl3SDMyRHBBNXR5IExhNXFZeWJRVnhvM080UkpkMkJWQTAvWjB3OGVYb3QzV1F3Sjh5cTJTeUloR1pha0JQZ1RtVGszZVVaM1VxNjBhdU9jQlA3Qno3ZisgbHFxeEtnUkV3UkE2aU5iZDkrV1NVaFpMRy90MkZKd2p4c0dqblMwN2JoTmp2a3JKL040a1Z4eCtUODlSc2RiUzdmbVEzeXZhZnNpWSBlQXlXd3d5TWtpd2x0TkFsWXF1K0VJYjVnSGh6RStINzc4OFRIbG1GcTdOc2Z0L3NFQUFQL1FlckVyVXo4YnJsSTV0QklMSVljVkpUIFI2eHY2djhBVUpnbW5sSW9obUcrNEJESXhyYmUvd0NFRURaOXRLcTFpamxFUEgzU1FnVklZRUhrRDhlNTZnTDZVZU9ZSkZmMHl1QVggZS9RRlgyMWFJbXdKdVNQRTh5UTNkRFYxc2ZNVDRhMnR2aEFQY1VDdjU5alBpeU01UnVieFZ4dXJYaEIrK256OVJQM1I0VXJOMHRVZyBlaXNlY3lhZTdHc2hTYkY4a1NNTDB5dVFJalVaRnRRZStNZ2ZrbGJyN0kxQVNBSEFPTVp5Z3RHV2Q3U1hiRGYzN0RBQit3Z2pxRklTIEowVE5pcnRMbnY4QUMyN3J0cnQ1OGIybXQvRWZxbnJRZHdWM0lQdGJDUEhHUmF5QTdqM3gyTnVUN2NqMm0rallXTHZUTnpFTzJzckogZnhwUU9nU3VlVEI2UW5sRmRUZk1CQkNZbm1BN2lISUI2NTdmMU5Zemh3WjhWM2taK3B2WUtpZi9BS0RzSFhHMEZLVGQ5aEZsTERzaSBtYTByZW5MQ3Noa1BORHZDdHJhVHpRWTdxSWJocExaZEpZLyt3enBqTXlxOVgyK3pBd1pzMkR4N3VvUGdEKy9wa3dRYTYwTWFhWUd0IHluMzh4UzJUSnMxZ0pPRFJadHdXTjhUZEh3ZW45MUUvamJCVy9MV0huQWRaV1VQRGpHR3lkOE1lL20vOCtBY0JZVlpwZm8rWk1zR2cgb2VvZW42NXpyc3hrTGFxOEtiNUthRjQ4NVF5SHc2MzdxSWRYbUtkQXNIOG1qWGsrQzNuWTNZMmsyb2VBSCtmSHdHd0h5WjVPOGtZNSBZK2pqRSs1VmYxSGhsaUdQeHRNOTVkOVV0clJZN0o4N1RzKzcvd0F2Wng0eCtkM1B6a01BbDkyWGJnT0hxa3VtdDcrMVNid2syUWsxIGlTckloZVQ0WCtIWEt0WnIyNHNwOHhpeU9DZWhrWms3Y0FMeHRaTjhhT1RJNFJKOEEvSVA0aVA0c0hTM2gyUUhNcjhOSUY3STdiYUUgcktRWUpFTE5SQU1WSW9keVEvaHpMVU1haEdSZzRyQUhnYkdEakVZb3IzbFdXeWJJOGJBL0g4SDdZRDUvcXMyNGJPMHJvS2xDMHhlbiBVTUNGNmpKZFVMV3JaS3VHdTA0dFRyUlpLY3d1Ynl5UHl3WXhUOWpIZXJFRDY2M0lMQTMwak1QVTdJdnI5ZnBQSDhhL1FnT0dMV0lKIGVwRCtBOGtMVFZSMlEvOEFoOWtpVnNSNlpjRmZoNzQrVmxGZkxJWDRlcERlRU90MkZ3YXJwbytCZUVQa3dzWHRtSENRbS8yNzkrd1ggMEJCNml6VENXVU5BZ1JwazJHUjVSbEJKZTJYV1Y1cmtVS2NuVXJ1V0FRTVIwbVJJeXlKRTJUeGJUVExWZDZuMzNacmROOGM0QlBMWCB3NXN0TEtXV3RqVzFqVDkveldSdFlSNUt3bzhSRGNxdmxxNnVocjliaDlTQ0daUStIOXkwOTh2N2MyWjhyQ29FYkFIc213SVA5QWdQIFkvUzBQSUZyWmhxYlZld20ybnp3RzJuY2VuOGZFbUJmSG5JOCtqekMyWW1URU84R1NEUEhuamhnbXpGQmJNc2c3UndDSFA3K0ErL0EgRzB2bVhpdVZNRGFHbk53N25XV05OMGovQUlLU1BpQ0VNb3ZGSHluK056REFkeHJkeEROVGJlRSs0a05HSjRxN01UL0tKdjhBRVd3YiA5ejVCZmQzZVNvN0dxY09MdW1zZm1PV1NOWHQ0NVFXZkdoRFhud1doOERtY3dtQjEvR3hnTGVlMUZ1SGQ5b1YrYzhKZGpTT2ZvTStmIDJEWUQ0QmFNUXNnWXU2Rjl1SjBqczRSRVVyTGx3Um54enpkZkhUcFJISkxFVmsyblZBanB0UlVLcWlURWtOM2JlNE5WY0VXYkNXakwgUnp5dlQ5clY4eXBJSmNoa2xPdDRaaFBYcGprNUx6a0xmT051RXpVSWh3OW40a3YxcE9NTS9QTGtabGw0M3ZZdmFvdGgyQkJQbjJvYyB1QmdUZTdWU2dhWlNYYUtrMG13LzR5VFlEQ1lGeW9oU2tXUmcweHpIRkQxQ0orS2VxdHFnQjJmRVh0YnlNQjBtYjdWZ0FHSUQ4dW9KIC9xSEJwN1lHbVZMYlZYb2RTdzF5OGlUdkhzaWpOTjdDK3hSZFpXaFY4MGhXNGN3WW1MZGYyb2pnYS9RNElmY3hkRGpHYzRiM3pnUC8gQU1BZlZVUzNLQVI1YVVtMlVuS0x0WVdja1JFZXdRRmI0bUpMM3BRc2ZtQy9WWmQ4cml1Slk2SlhObEo5bDFZaGpHVlgwNldXeW5hVCBTSGJZQUZ1WUFRQjgvVVFBbzRxTVlrZEpLdFV3a2llM2JFcWpDT1I2eUlORTFXSm9OelZ6U1J0YU9CQmxNQ1RVc3R4dlJrZW80bS9pIEtyUUpHZTV3UmliQkZjeG1Ia3M5UFhLVGpKNVJWNURYNlRuT0RETWZHaGhLeFVNZ0dmSVloYk1MNGRWYldDZURtY1pLN25nRHE3ZTAgZmdJQSsvSHdIVDRITUdudTBHaERxV0JjeHVqUmNPN09QMXZZTnNGazk4VGFSMGxsRnNndDhraDJwQzNpZlV0NEFkVy9jeDVROXMyTyBya2syYzRDL1c3c0RBQTJCL1dveVF6Tlh6TDRLSWRGYW5MQnVhTk12aFZ0T2oyRVA4WFNJVTRId05EcDk4cE9HNEdLNXJPd0o5allEIEhrbzBDN01PQSs2T0w5aWhlL2dOL3JIZEF0Z1YyeXF5YUdIVzBtd2JnTnFhZlJ1UzNyeWVVdEIzY2ozNHJjT1NNaTJ3TGFxMjEvZEwgVXlvck9MK2pCQWdSSkJnSDZvdUF2d0R3Q2xtaW1rdERxQzhlN01zeng3MTVHTWxOM0pOd2RvNXhYR3h3YjRaaExwbFdVN01rSTJZWiBVYnVrSEJDczQvcFgzVU83T2lBUlhkUEVabElXVytIbWg4bVlVRGQxTXFUWVFBNnJxL3RqdHlldGROVjRaQmJEc2pnbnJaRG5IOFVGIHRISnZZMURxOVpHZjZXdkI4QWdyNEFBQTMvbzhiREZtVjZQckd4b3BoQWNIeFAwdXFaakpEaDhWdG9UWlordW5CZzA5aDZydml0dzkgZ1ZzMUFiZ0ExelpIdTBQak16SE82SnZZQUFBQjUvZ09DcXRSWHNSeVpHcXdXT3E0cVJsQndoYU5uSHpGbTk3cFNtTHJsODdQekE3SSBIZkxnVzdVc3V2MjIxSm1MTUwyd21jKzd2SElPUVlvTDhmNkNuV1JNVW80ZXZtaW1hMzdxdytRMkFIUFYrV2ZNVHpDcnVSaXY5TitOIGJ3NjNNTDljVUQvOXZEczVQNnl5dkdMc2NlRUZCQWZmdkFkR1kyRWtZMUtwcUVqaE9ucVZNSkgwN1kzRzAwRFF5dWFVY3pOTmpkeGkgUEo4MWJ6TGtZaHQ1UEhKaUQyTEpGbGd5SlF4ck5yRm0rT1JYTXZaZFc1TnFIaHpXL291aDJFd3lGRk93emhHcHNWWWtDeGxqS21yWSA0NWlpdzUxM0xaUjVaVXl1WlJpVlhxcXllaDFmMUloQlYvVmxJaDhLblJRdGZKT2RLZC90UzltRW1LREplUStJUWl0MTBWV1dmQUhwIEZzRTJVd1hWTU03TExzRmxNY2dPM0ZqOWd6SjB2T2lGTW80VWlrVWdRUEJWYmxnRmtZaERsOGJuVnhwcUNpRkIvYU1LRlZ3aGlnS3ggeExTWXhvdVpwRUZLT2ZIKy9Wdkp1T3puWFFBdXhZODN5U0NmREQ5L0g1L1BWamRQdXErME5PdGxxdDVMazFCczFvbURkUjBkcXJoMyBiYklPaklhdUtpWUdXVEc0SWtLbi93Q2ZIYWh3akl5MlpXSHBSeG1QcHh3QjQra0Zoamh5QmZ0NmZCdkdreXMxaEtybTM5S1VjK3JOIFpxK0xIVG5SWXNLVlE5c2lEMkFmSGdsV0Yxc3VRRGVxeTBDbURrU3k4TWFhV3ZVOE91OWVtb1FDOVVCM0gvbUFzTVJwdm1aYzl4MDAgcm1wYmNqMVNnWXhhdjJVUGl2UTY1ZktuaXJINTRyZHdRdzVqalp2K0YrdE40R0RPVUV5WVA4Sm83OS9RTkIxRjREam91UlpGeWo5USBaNmV0MjNhalIzSUxZMjFNSXIzS0pXNmFmVnUwSEN5TEl0UjgvSkZjMW9uNzR5TTFaL2lBbnpZMmtuRjgrQUFjL1A4QVRXTVVjaGpFIHN3ZU45S3pnTHRYdTd1SmJ1ZmNrT0p6azdjdTN0SFFBTXlRbHNCbjlSV0Q1MXNiQU45cTFsdUFqOFY4M3dWUjh3NGgwZnBMWTRxZlcgNTR6WVh4QjZUZVZYM3l0UGxqRm1nQ3lkeU40WkVJeDlxQTNoUzJJY25XYjRVZWJNQmhPRXZIYUkrZllINSs2RDdvSU9ESEhXN0cxZiBEU1EyMzN5MmtpMElkOEQ2OWxuZ05aQzN4d1gxdGxmSEJQWkhDWmFoNm4zeWovOEFTOFhVQXdIYUlNM1ZZQkNmOEQ0REh6K2pUWUpzIHVkWmhMTzB5NmNGRlp6U1NEWURPblVFa01TRUtzYitIVmdSSCtxYmVwNzRkMjd4M01JMVBEdTBYWmVGeHZPK2UrSVJmcjlBWDM5Q3ggUGJDMjh2THBkM1ExVmlua3EzYWdPVFYxc2FYNjlWWkZUOWthNmJFMEF0dUV5dDN3T240TDZHMUlkb1VzOFRCbG1QbG9lYzN0MjREeSBEc0dmMkRZQUN5Uk5FczdPSENHTllnc1Z4b2tzc3F4eGFkSjU0bmtUZXhtV1VIQ295cE9iQU0yNHBFbUtCM1FUSEdWbHpqZW9vSXo5IFUyUXV0b0dQampKeDl0blNZUjdjclNodytuMm9IV1RlV2dCd2Y0aEVDNFZ1cHpLYitXTGl2aEJ3c2h3VHpDZVFXOEtsdkQvY3l2M3kgWm5qZTBnR2c4QlFVSHBENmZ3Wmp1WXlMbERnYmFlMml2UWdtNkppNUdyM2hzb1RFUE1aQ3lPNmtOazdnR01XMGVQNUlUd2ZMUVdlRCBoTHNTZGdBQVA3QnY2d1Y3WU9hZUtuc21wWldUVzk0NmVEbzBTOFdFSC9LZ0cyaEpTdVVQZ2RiaDdzK1pzelVCY0ZKcTJ4NTR2V2UrIEJON0JnQUIrM2RnMy9uMWhiVWZOVUdhREd2bk5xdVd6T0h5eDd0WkFld2c2YlhJbWtkbkh3M0RTdUhNVSt3ZWZIbm9NTVlURnE1TjUgQmRyM1k0L2JCK3I5MU5OOVRJbXFMNldOTk1ydmxNaDlDZmJ4OVY1Y2ZTa2V6bERqSnRFRDFKTSswSmhFdXk2elhNbUFkY1A0WkpmYyBsNWQrT0E1N1MxK0I4ckcrUWEzYjhkUG5vZFBxV2t0REpWSXAyUWVmR0FzNE5FVnNsRktyWUxJcXV5QTdLbmtNTFVnT0Y4VG1RWHdOIFdaLzcyOGYvQUp1bjM3WUhCM1BjTDRYOG5Oc2F0MEFEUE1TWWdkSmhoMnd4RWZCTXA4VzYvY09Id3c0Y2N5VGorbStlcXA0MFpWNnUgVEp2SENlRCtmZmdIZ09rYlg5c1c0THB1amFNMCsxV2JUMGZVVTJ1NURXTU5xY3NudEZjN1dCcC90dUhZNlRaQzdCM1VVa0QrSEo4MyBPNVBjbjRRSnY3OGc4ZjJBL3dCTTNOSXcxeFBJd0FOL2FYYzhEWEZiMGxQeU53bENNVDFlNzh5TUgwS3JPUjRSTEZ0a2RQc2F4MmRtIHM5WXhLWUdqYVVEUUgxOVBnTWNWL0RvSUdkWW9ZNEUxTVNSN2tNTTBzMHJ1K3pNMFRTU1BPMHNranZnck16UzhXQlgzRzVRcnlTU2ggb1M3SkU3N0F4VHV5QUFTemhWSG16bCtCWFFJK0hOUDlxa2FTN1FVTzdNZ2JKQ2FlM2k3TW1Ra1F3SjVzS0FaaERra01PK1BqQXQ3QyB3Z2Y2WlZ4aXlUMlQyMkNva0ErZzhCNnZJMEs2L21zQjYvUXN6K0Y0RG5jaDIzSjFJZHFpbklXaG9tVitobVE5YnJlL3VFNENubm5oIGszTjhLTE9QQ1Foejh2SGo3QnNEOGdkVVZWMlZmc0taRFhEME5BenJCRzNaTHRCcXF1Unp3OXlGWGl6RzlQNDNEbVErTjhENEdqd3ggZ3hYRnN6TURDRy85L0w1OSs5MzUrN0I3WVl6WEJWZHpLM0dkczJHdHhGY2F0c0ZzR0tsT2liR2lzakFZbVF3OWtUTjRnbnZvOHhtNCBIVjdNVDRVa20vMzhBZlArQXdMVFF5eW1IUFVPVWpoYktUKzBodVIzSGpSa09TWlozNU5ZNG56bHd5YWFObWxJZ1NOOVJ1WXg2VS9UIHhqSXJacXBPVjRyeFpKOGRURHhROVVWOHZyYTVTNlRldGtYbUFxMnpWZlZRTnI4U3RnWlNSY2d1SFg1aW40YUhNaHA1ZzQyMStlZUggMFlUZkZjWThuT2JKUGFJL3NCOSs0RXY5UExVNU1xdnZRMUxvRzVrRmtWekF5N2xlK05TRlByeGNES0t5eWt3ZTRyZmVCOFR5REk4VyBYOXFwNFlNRnE2d3MrYXE3Zno1OStBSDM3cERyRkxnOGI3VldpcFJxM1gxcVZXMnFaL0F4a05qSUIxUUZqcjV5Q0l1UG5KSm04SS9iIDZBRUVNeXlWYUJnejZTazdBQXhRVCtJRGdQUjdYOVIxL3A5ck93alZmT0ExOHNGMjd4dkdmWHVvR0pha3I0bG9XTk1JSjVpbjZyMmUgcjBQODRUNTBLc3lkb0MvYTFBanRqd0UrZ2ZpSitmajRBak51NnFTUlprWkZRNU5lYzZ6ejAwa0Uvam1HTmRQS2tuOVRmY1lKdFhJcyB0L2RvNG5WMXpjU05HRngwN0loQVJvRFo4eUdlTnhYYVlrYm5MRmVLR3dTSUJpWkFVcXhRR3AzeVlzT3R6R2RnMlE3UVRLOXFYVVpWIGEvRHBORERzckl3T0RXMjhEYWpCTkdRMmdZVDN2SFl1QTcvai9rQU5jdTJMWXNaZ1pNTXFvS0JyMXlzSmtsMSt5VGEvckl3TGxXYlkgMFdrMTliY05ONjI0UGkvc1lGUG5xcUdzMllMS0RCbTkxY2JlQUI5QkFIei9BSUJnRURCU1BQUXE5dW1wYXJyY3VCNXQyUHpockF2WCBZaG4rL0FHYTRRN0lNT0JoOFlKbGpiZTJvOHhadkpvcStzM25oQ1NiK2duL0FHUG9MOGY2M1dCSWNHTzJHck4xRG1JeVN4bUZzVGdxIGh3OVRoNHRZV0ZLc2FZd0IxdnVReXA3ZzRZa0NGbGhBNnlUVjdRc3daM1IyVGY4QTc5d0ZCQVAzUzNDTGdrbVozMFY0RVNXVWJ2OEEgekMrbWdkSlpvNHNrRFNLSDJzeGFqY0ZpaG9OaTlPc3l4U0pYdHMyclhmTjBlS0h6enoxcFF5Q1cwVm5jRlhpOUs5T0hxNU1XanA3TSAzQ2Vqc1JocHU1ZVRaVGduc2t5WlQ3SmNGZjFaWEpDMER5cWhFMWxYS1BMenNudWNBQVB2MkcvNy9NWEp5elRjbFowQnRxc2JZUXVFIE5zMnA2T2gyZVd1Q2tiYVUvaTJRbnZpM2NIQXc0K3QzaDhYejFPM0Fzck8xczJ4N0hhWDZvUG4vQU4vVzIrV1FCQjhSbnVGeHBLUlcgNDBRdm1ENUQ1aFE4SkF4V1J3aFZXWWhRekhKSGlld0FaM0owYmkvZ3plTytlZjhBQWIrZjZNVEMyeWEzTFFNVkpLRHY5Mlg3YzNjSyAwYkNzSWVXVzAwb3c3Q3RmTVEzQndjSzNZSmxPbmg5TGVNN1g4R1p0bDRUaHdIZjBFK2ZQZ09qY3Z1QkhWNDRWOEY1ZDNETEd5QmdnIDU0dmtXUVAyZWdacldSNDN5MUxZMWtMamY4NXBZeUl1bDdoNUk1ODlMeW9OYmVxZEpyQzVOSEZJMG1PbzBQY21OSlYrMHV4aUxpVHcgczFvQjdoTWZiSW0yUGRiaXR6YTJIYWxxNGg0RENhRVU1elZ3TUx6MWdxSThBeFA0WW5ycHVtV3kyQzBHRWl3V1NTZW42VVVtK2RRRiAvTGRQdTYxRkthYjAyMEM1QXhhZ2RQZlU5ZzdWbmsrQUVNRENhdWhyS3p2WnRKMzlCL3I0L3Y4QTFVdS9KR295MUNDclpiNEdHZ1dpIHZnbFR4ODdVVWovTVF4ZGhBazViK0pXNkcrVEVOeFcxV0I4Q3ErZGNuRjRETjdCN0h2OEFzQUQyNjB6NUZGNVhENTZra3V0ZXEvYlogSVYxVURXN1k0bnBTOXFNUTJUNWt6VWhkbHdmemh6QWhaWnd4V1pObzR5amZka2pZQUFEZnYzOCt0RlNOWTVFTzN1V3pzL2RuSjJGbiBtbTRxOGhndUJxbU5ucHNUYjdPc3ZLTE1zRzJhU1FJRGNRZFFPM2JrVkhGazVoU3ZiV1hUZ3FPMkk5Y3JjT0tCSktLZVVyeFNweU9OIHJHeVlqaHpLdmJhbExlenpFL1RmTXRSaGNIZ0RvLzhBbmR6U1pQYzNuc2wvWDNnRUh3Q0QxTVdRSGpsQmVTcnU3VXQzOUFmQnJ1WXIgMTJIeStlV2dqZ1Zka1gxdmphZk1Na01MR243RE9jU2ZpM2xtUjdSeHcyRHRFQXQxQkFlQVNWMFdCRG5xWWV1VTJudjhGb1czNHNRaCAyY1lTRU04VWQ3R3B0OTRmRG1hZTdUaDhFTndLUG56cGJOeWZGNVpmdXdSSEFiK0FYK1FZNytieDlUYm81TDdna0JxeDAzNXdhbjlTIEZteUZ1Z1VlaGx1V1VpV00wSjdoRGNGdUhUOE93SHl1WHpUZnNjUHhiUVU5MHFycnNlRUUvai9zRUFnMWh0eUlTdWFjNU5lSVNpdGMgYzVaV2ZrVmo4M3hIY1NxVmQ4YUtrbWl4RWUzRExJOUNyd3pVVll5SnV4ZEFrcCtIZGpHajJFQnYzVUl5ZjRRR1NXcTVVSks1WlB1VCBzaUx1U2syQytQRDBudHkzT2JSL21DYk0rSWZnOWtOOW92c0FEZ0lEWUVQUmJSY2p2VjlmYVpGZlZjMnAxUUpNWnNjQUw1SFhxM3VTIHBXd1hZNGRnVzRiaHFjZXpDK1lncVhFb0tlODdYemttRENWY2tvK3dBRDREd0Q5MGFwY3l3TEFYN2FqWlZENmtBTnlhZXdsRE9EZzQgTDkzVU9yZ1VqUnZYS2ZYNWhreFpBN2dRWFA4QTFJYWQ1c3haWnU2Q3lzSExSTi83K1A4QTkvWUdUVmJBUFl6bXJUc2pxdWRxbHFwViAxSUtiQW5tS1h0aVlteWwzbVZiMmkrTWxxVS9UNGZqWU95cS9uMGV0dkt5K2YzczMrL2dEL2dNY2VyZjZlVzFhQ0grNzZtSFZhZUZWIHFPTFZpVkl1d1dhMk4wTTNuY3NEc3F5eEZlTkZwNVpOMkl4VE1aTy9VUUhIRm5jcWZkYkVERTRpK1dCNnBtRHYxSEREOVJXYVp0UjIgZkVldkt1WVhpMm1wWFhsdXIzSjNpMk0rTCtuc3gyckQ3ZXR3WHhQYlp6Z3pQUEYwWlpCL2k3ejc5YnZQa0VCMWJsQmRhNURJdEtQRyBSTHRtUlJWTU1hbWoyOXFQZ3pYejB1RVYrY29UakRlNzN4VVlUOC9LMXo0UVFreXNyTXZuMUMvU0ZPQXpTUnNPQjNIRkJBTDU5TkFqIEFPQlVZZXRHT3BaTm5TczZVV1QzYjVERGlCVGRRZ0g0akFaVzVpMnRoeDYxTzVnaGJ3c3JQYTk1M3lyblpKQmdMZFFUL1B1bStqTEYgcUJoZEJGTlFSS1BWYWFkUVVpZlh0NUdSRGkwSG5mVDZCYjhGRFRlNFM2VXF3YzRZVXZQVXE0aU14TkRXTUZsSUJtemlQaXZ2L0g4WCAwRGhnZW9Wc1hNYXVlelVNWnR1SnRzc0lRRHA0blNhV2VRWW01SWxUWnNaaHR4Y1Y2ZnRjUG1VcHRHbGt5UnA2TW9rOVNWWllvbGpmIENtamxZQnZLdDJNRFh5Nkw4eko0ZlU3S2dFaVZrSG5aa1lhL3RTdmJBVXpFdVU3bmdOOE1HRVBXQWhvY05ncDg1QWNJSEcrREs2dVQgV3Q3U2F1ZVArL24zNWdQejFCclVOamhwK29kTlNhY0pJWWhrcjFIMUZKN08yT0FGOExSUU5ianJVWkdSa3Jka3I2WTFWTFY5OGJPVSBKdmxYVm96SFBOblBvUGdOL1BuMzhqdmxOMk1MUG9aUzREYnRxMEQzSkxEdUdUY0VzektWOVFwNW90UzhMSVQ1Z2ZlRjl3bmYrb2VrIEppendPcnhuYXVydTZKellGOUI4Ky9kQWJRcncxTFVvWVRXMVBKQVpVTnRyS3YxVWEwUzYzUFNwY285V3hDSk5odUVQajYzZ2h1RUIgVm1EQ2dzV3MyWUQ4SUQ4Ly9rQWZzSXJLclRUT2U4NXpNZjhBRlJYdC9WV2ViUG54eDFBN1NPcUVJVU96QkVycG50UnJsUUJ0Y3ZQUCBDL0g0NkZTRnFYWlByUE9TTTBDYmZLMURrb2dkSlNhL3B5WlY0SFQzS3NhWUF0U3lPMWEyNEQwTlZQRDN3NCtjWnB4WEoyWnpid2YvIEFJRnNIVTh0NWJSQVlJWjYwQU5wVEZ5bVVtK2EzbXBOUHFZZnZjdlNya3JjZWhoME5rdUN5Q0hhdXRLUFBISERqTk5sUHZEc0Q0UHkgQUJVU0QzZFArL1psdGxQcVJ6SFVaWHcyVC9PYnNybUZyVVJXVzExTTdxNnVaSUlka0I0WWVZd2JHMjJCc2RWck5tYldUS0EzYnptSCBuOWd4eDJEc2RaQ25mQ0crQ3MwQzdFaDQyTFV4aDJWUjh1V2VUU3dBWGFoQXcrSjdqRER1QzNCZ0w4REdZczltMWZqSnczZ2JCL2ZqIDZEejRCMEtoUXlNb21pbCtkUUR0Nmh2YVF6U2QyY25KRHZpTXVPMGRYN00ybGxTUnhqbEc1RTJCdXhUV2xaMXlhTjBQRmMvQjYzYUYgaktkZW1aNlRvVnFXcFZyQVRwSHFVUFY0a1A4QUt0aTBLNTIreU85bGtWc251RXo0R3dmTXJTOG1uYzJiWkFteGdFSC9BQ1lOL3dBWSA0ZUhyTlhNYWU2Q3YwYWJHcHI0L3Fkb01kNVd3cHZtSXluQVBNT1NRdzZHSDI5a2Q1NDU4cDFQSm94UVdMSm8vQ1RkNFZDZkFmUVFIIFViRGJjVndZQnpWSkRTZDBBeHBaQThZY0Mxa1N1V2FmVHhoUExoMXVHSGhwL0ZZQ2VCK1k4N1dMSmsvdTIrSU93ZjM4L3dCTnF6Rk4gNGNvZGV6ODEySldjeHUwYVhYOE9aSWxoMDIycTlxOURXMDk4cXVHWW1WdXZtR284bmdXcmMzbFhLY1o1c2JDYkEvOEFkMzNRWDhBZiBqTlBESkVyRkYweVJTTVpTOWF1SjRvakZFVk9KK29qYjZoak5IY1g4YUFzY3JVd3NjMll2Ym1YQldZK3llTndNMGQrTm1zUlJ4bHlzIDhESG5mWDBPMkwzdW01enpITVVybWlvWVJoZU5RbG5LOFF4VXJRNzAybXVIYmNQcW9NVU9ua0VPeHUrRjAwN3htekh3V3NQSVQvU3Ygd0FEQS9zSFFRSHpLenNzWGNFcXRNazJCclJ3SldFSHpyT0RxYklybFBsVkt5cis4VVBka3g4VDVqVlVpZTJ3YUcvaUZLTkJOWk9KSiB1N0xVN1JIN2RQbjZEMy9vUHFlajN5TGJCNVNsNXhLMmp5UzIzR1FaSHl0MTVrNTVYb3NwREg3UC9KdzJDR2M4OUFXeGpOdWdzWWNDIGIwRFA3QmhzRDk1OWtENGJiWE15WTVWVmVWdEorYWVweGhNV0ZrMlJERHVZQ1pjajVaQSsrUGhzaTJ5T0RHOFcybjNUMlRXY2JRMUcgSTNCemYrNEg1ZjhBOHFpNmpsbzFqWm5jWklFQWRzLzR5T2ZDMWVmSTU0K2VoamE4L1R6dERHM2RqaElTdWErRGVISFBGM2ZGVVFTdCBWYkp0Y0JPYW5QV2ZwNXBnNTZtaHJpNTZYYlQ4NVo3dG40Wmg2Y1Y5YnBOenBtbXBrZ1pvK3hwSlNRK2hQV3VaZ3RmMmRpaFlReHViIEp3bUdTK2RhYXpUYlRzR3Vrb2VjdWVxSy9sMXNDeWtPS3VYb3g1OUJ6NEFiT2x5MzhDTnJKWHpsck9OSHFVV3dyM0JUNjBhRDNwaFogbXpMbnJWbGtPQlFGWlBCanM2M2pTeFVMS0UwTE1uOW43a2hQSHZmNnBjMjVGdGlMUE5Eckg5UklPTUllT1A4QWlRUEZEeHRmdi94KyA2STJTbTRjQ203VXVTalBqZHFuRFZwWnFQVzRGZ1labG9WTEVUVmRQSU9GYnNqSmNFTndmQVo3aVU0TThySGpGbm0vKy9qNERZRC9kIDNyanAvVm84QVY5d2xWVTRFcmFiYTlVbXl0M0I4VjFOUEZMSDhGdG9CNmY0SE1XMlJQcS9HY0JzQUNiV2lkWnE1Um1HUEd5R3puUGogK3dBTi9RVC9BR0lhbFY4VnN0UlNxRE9OaHlpU0RMTUZlc2xrTDB5cjN5V3J0SGIvQUo0WWZEQ2V2bUZWUzRIVmFlekRCVFFzb3p3RSBkVGFPQXFLM1YvQitmZ0ZSTCs1TFlFTlh5d3d1ektyU2FCSzNOVzh0SHlqelIzSUtORXM5cDlmRStxM3d3aHJYMlE0QjFJUUdwa3dlIFh5aHlheThVbUVxMzMrL2ZpTHJuYXZTeDZ2UnJGS0pwMGltaWsxS3g4UjZxTmJLd3pwejJiZ1NaZTQxUERHOUhDanJqMUR4U3ZKRjYgYzBrTWtLVERtU0Rjd0JraU5DcEJpQ3JmSC9mcGUyQmJEUStOQ0crVDZsR3BPVlRMYjJubUVxbmljRFYyRk5sYmVZY0szMUNPREhjRSBPZGJWUDIxaXlmOEFxZ0ZFMmI3c2J3WVBBSVBzZmZqKzZ2TEVJWGNMdG1BeHUyL0hzbC9MVndrdzZQaUdNZTdENE1ocDh4YnF2Wi9EIHprUGdjRXdzckNHMExKTUdrL1J3QURuMkIvei9BRTRLckYzZ2tWWkRNM21ZQ1oxQmFuRFphNkVNeFY4dUhVb0d6U2pRNEQ0ZU16bmsgeitlVXVCd0xVdDlHS0svc2poTms4QS9JTDhnL1lPb3hnSUExZVBYdGpJZXlFM3lhN2N3SlRFOVNEZ1VPd2hiNG40TWpKTTQ0SEltQSBhamI0RnFNRXhlMWsxa0hWK3lBd0IvRUIva2Y2SUxjU2lNSStvRUpxU0o4NDVOa2p0ak9LNU8yZllsYzBlZU9hQXhkcFp3N2FiZVhlIEJUQ1FiM0tiYVpOdVZ0dG4zSlZyK2V2dHFhYWxOSWFJY0JDUE50elpvSDRtbjhhN1NLblpFTVhiQjRXdHNCZ3hWYkl5YmhOVlI5d0EgWG1ZekxMNHJrOThkallSSDMvWUQ0RGYrcXU1akloSnNPWlBpaHlTVEYrTkVNYzJIcENIRmZJalFBbUVGdVozVXF2Y09EbjYvNXdoOCBGNVF6TElNSTdwTy8vd0JBOEI4K2FxOWdPdG9WZmNBZStIeC9ob1R0WkhLTk5NeVJkM3lxSGlYSTVQaWVZUTdVZkdRUEFEZ3dEaFBhIHY2b0tFeG05cEJ2Zi93Qmd3UDhBbisyUldZZXVWdUhsV3F5RXE5N1lxVjNNQUV4akVmSDBYZk8xbUdCYlpFK0hEN2Z3ems0ZWVWYkkgWmlmUENiTmorTHU3cjhnNGdQYy9zRGpLTVZTVXAyV3lRWjVZeHZpRmFlUEVmeVk5Z3k0Q1B5YjZEYVZIa01JZEVPM1RPbGYzaUtXTyBaYUZuTGJpRVpQSXY2ajR3NzJGWWxxTkZTMkRMU0NqNVVxR2V6bEl2SDFPQVZlelprV3hoUGNhWW5zbHFWWE1RekErMUFZRndxVTVMIC9GL2FCblJ3Z1RnNzhBUXZvSjgrQXhEN291U0d1YXVPYmhybVpENlF5RzdDTU1qVllIUEticSsrZFBveUczcDdJeU9GVnJqQXRuRzMgZ2VFeG1HWElyMW1UNzJ1d1I0UEgrQW4vQUQ0QUFXMWRxeTBtVlBWVnMxbllDTksxTVhtR294cUVhYXE0ellURW0xTlNWbmtuTTlPZiBRbFZ3NTUwMlBQZWpNSHdraXlHdTBLejlKejFoRENUaUJOQTF2TXc5UHJ3L2JwVzlQdVN2WHJIRVR5VU1DK1dndzRtR3JVQlp0ajJnIG0yRlNJdGxUMC9lTDREekhBTk9nT0NHZHJkNXQ5cGZGbXMvQ2hOZzgrd2JCNEJVVExKYlJ4dW1YMDhNY3hYMDJvdUdhUHh1VllMQ3ggVnJ5YjRPVlhXd1dTWkNkMTBScUIzS3BTYU5ZNEdtbzNmaGFzN3RQN0FDcHVtM3lBVUEwNE5NNmhIWmVSMGt3MFliWGJTK20zY1lZRCBGcTJSdzlrWURGY3oyQ0FxcDR3WDlHWnRrU2JSeEFlQTgrQXc2amJZT0F4ZDJOVlMwM25YWStNYlUvd3g0M0prVmtZcVVEcUVwR3hxIDNZSWJnbnZpZEM0MkRxVnc3akYyWlo5dTJlK2YzOEFlWC9QZ0VHU1QwK09aMFoxalh3WkRmM3lVa2pvandlemc2blc5WHhWNlUwT00gOVBNUTdzaHJiQSs3OWFHSEQreHFHK2NtU0RZUkpxdEJmajZDQVBnRUkrZmFreGJ2eTMxT3lISzBKbGZ1MWcwYlNkSTNSRGFyQWlCNiBRbGFjRTJwVEJDMUpnZUdIVDEvZzhCZnVudXFUV1doWDVNRHRJSmp3SEhZSDdZRCt3RkdaSTQzbGtmZmRwcExETGpHMUZBTXdwM0RWIDhiY3NmemxseGl1VENVd0lJbjlJcUdLRGNBMGtaNzBZZHRWa0tQTjM0NDVyR2pzQXROek02QmFCZ0kxSnNPTkxxOFBuWFI4TW1yMGkgZWNqRlh3N2dtTWlJSFg3SnZCOHdiUWNQYkVNV3MyWWoyaWt1NE0rQVArZnQzWU9yS2c5T2VzRFR6WGtPcjJLbERWWktXc1pickl4TSBUNm1VK1VXTllVV3VMSUhtRTlrbXNsa1dBWm4wUFlBQTdjQXpiQmJ5VEJtemZzQVFUNStvdVA3QWZxd1JNNnczWjh6cTYweTJTTnRSIGowcjA1YTdoU2N3enA4cCtMeUtuSmZQNExlOTNBdDJxbnNtRDVBSVU4NHZLeGhnOFlnM2JFTHgvMlh6OXZId0hSSlJkcVEyMVg3MDYgdnRWRzhadFkwNVExWGphM2pzTDVja3E3bGV1V1FkZHRWb2EzOE8wQTdVQnNDQTFHTUhrVjNNNXlFQ093UDlQQUFNRUhvakxQMnZnaiBiVHFWV3N0UUkxNVNPQThZNDJjMm8yY2UwWThncXdxbUFkMXlvRmxFWGZId3NxSGNpbHIxQXlBcVJRakxFSElLZ3JXWXRnd21MZEkyIHFrMStHbjJSYVJaSEp6SERnZFh5cGVwWlhodUV3d25tTzVLOHRuS0g0SEJUMWxtVnFiV1daNHE0M3FIT2IvVVIvRSt3Y0I2ZkdXMFggQktCMzlXbGFBVklQbEhuOWVZQUsybnhMSktDN3VBL01UMCtxNmZoMVhxRTNpRUJUNEh3eWR2MWZoOTQvRjJDQ0EyQUFBUVBicVNqayBGY29wclptTG5WdFpOZzJkSHMweGFsWW1XeXQ0dGlpUUpSYmNLM1d0UGR3UGt3YytBejNkcWQrWDFjV2pJeHp6ZFZ2d0Q2RHY0QitRIFpoVGVOUUJtMkt4S2FlRDJwQncxU3JhMkpSd09kSFU1a3BvbE9WYy9jSHhEY0E5cWZNQmNmclQ2eXM4WGViTTlqYVQ1OEI0QStnOCsgQm94cWptcFIwRHhTYmFhakVKSWtzY3J5TzIwYlNUYlZXZkViTldSSmxTdmFReHFWZGtSbzZ5Vkk4UjNWVjl4L0gvYy9ucU5rTUZmcCBGUjAvWEw1Vzl0Sk50VkxoY1ZQdFVKWCtZNUhsNjBIeFBYK0JtRnVZNEQrOFNIL0l6Qmd4b0Z2T3g3MzcvUVVIWVBQZ0lETk9hbElGIHFaMmJUYjNhSWVBeUxjdGZkcklSNGtPcFFNUk5QUXlEZ3Rybkd3N0F0L0FYcDg2R3piVzBMS01jdEUzc2V3ZXg4L3NHSUJ6MjNhZG0gUFl2a1ZsV3BaRDNyQ3p2aXROaHVBWVRXd3F1V0ZPcnJGd0V3eENleVVrbjRiRFFCREZsRzFvMDJqK3V5bk1jZC9mZ09JREZnQUxkVCBvTmtzRmx5UU0rWUVvZHR5UWRoUjY5UFBCWXh6SmhQU2pBOWtXNGVHek1HeG5sOXRCbVJpTUwzTm1lTVRiczhiL3dDQVArZjZrT2wwIDJtakc3TnFaTng1WERhK1lOSU1wbWxLSStJdU9MZEVjYTBOdUZJVXRpdWZWNms2bVdiS0tLQ0RGSWxaSVk5dVBtT0tRRUprY2FNbU4gV2JBdSthQ3JoNDFldUQ1bXpadzB3TFQ2dUVwNjIxQjdZV3hZdUloSzdJd2NsY0dSRERqL0FKMkpBOUJzZ21UNVJ0bTlwSnQ0L0xyOCBBdzU4ZjZaQ1ZXYnhVRmlKN0c1SWFsblZMa203WUlUYm1zQ0crQWFtTEN6d2RnVDk0cmU3RnNlSHJtdEI2RjcyWU1WMmdZTTVzN0d6IGlDQVh3REJ2NEJmUHhyWVBNQVVjYkZyUkRXOVBabGt0R1dHUFRLdkUwL2pjaTlja1ZQY0VKd01jd1pHQVA4OWZucXNNbitHK1M4SjUgczhId0NDZmZzQUdQVWsyTWx1ZGtsVjhmQ1VreFZTckpwd09xalNDOXpLS0pWdVNNQWRrWmFmbXJZOHdxZ2VlQTNEazc0cnJPeHBKdSBrLzdCK25nRzY2REZKWVVrdlBHRXNrMHVtMUM3bmhvVmlmdm9qdVZtL3dBTkVXZWxhVFVNOGdrTU1jVHh4dTZFL3dBSEFUSVRpaFk0IEdKK084VWI2WHFPNkE0Q25reFdOUEczWVpTVGZLSzNBTkNuZkI0REU1UStEekQ1WkZibUU4ZW5nOVBDZjdNbTV0RlhQS3ljU2JzM3ggQnhBYi9zQURvcUtWUFg1UTVEWEFObkpOL0k3VUQ3Yi9BT0NuMGpWWXQ4TEN5dW9WZm16REZrUTNER240S2t3UGxIclpONW9lK0ZsNSBCbTlrT2JBKytBKy9kSitzNGFuOGNEbTAya3V3ZlZkTXNpVkhEWlZnVTZIUFVPOEZVTXc0dm1KaW4zRHVnWXduNEhxNERyQk96ME5tIFI4VW5IdFhpdm9KNWYyRDllcXc5UVdYclJYZExXbkJJMGo1QW10ZEpHSHB0aXdsK0F4SjRzVHFDVlliZXY0WFpZOWpXbmI1K0ZnaEwgOEVKRGFGckViY0gvQURKZnFPSGZaZ1lzVjcwK2hlWGhhVEdRRkJXTlpiVU9Hblc4UU11OXRva2pqMzVVZkdQTEdCTkNWcXJ1eUs1UyBHTUJkeDNZVmxoYTBLSExIbnFVdEN0MGVWVTlWdmtDWXlYQnBwU1l0SWg3bURxNlJNcTg5TFEyaHdYN1V2aWhsdFBzZ2V0NHZnL2c5IFYyK1RWM3hac3c1M1NOOCszL0g5RUhuMGt3QzZQdjIzTWtYUmxoRXE5clRteW4yeFc1Q1F0cHJSdzIrSWRmMVVZY0tUVDdVN3FkbFYgOERhaUdqSTJOeUU3eVJ3Z1Q2Q2ZQOTNRRDkwWDZqeWkrR3FMVWhFaTZlNkwwMUpPcTViaHZBZFdrbHBsaTJPazF5cnNZOVBoNmZFVCAvbG5yVmNVUGlpY1FlUml1aDArTE5tYnNTbmpIZ0MrL0FjQUFEcjdtWFlQbFdaTXN2V1JrMlJZYnZEZHE5VjdPMDB2RllwNmErYWhBIEl0YmNHU0dHdUFPSFQxdFZVZ0FLZERxRDhEazk4Tm13bS9nQUFBQWc3QS9Id2FTWHNlT1hVMlVXUGs3Mm4xTWc0aldmVDluaTNLSGQgT0lMOEc2RWZhRWpyZ2dUTWtBeTdja1RzVkVrY2NtTDNYWmsySXZnWWl1cDNMc2pMYUljMnBjMnlMalQ1K2tVYmNhQlQ5aFBERlNmRCBSSUdtcjRjR09xNGJKWkZWOHdndHEraDF5K2NaZmNCYXk3aEFudWdzQ0RVWEFkZ2Z1cTFBclVPV1dqMCtMUElZMjRNcERiYWNxL1VqIFoxc1E4RDJuMklteGUrQzNWV0w0WTVCTXRSRHNHZjhBTTNOODBsNmVpZkNhdTdWYytRZC90MC85Qlk3VHEwRjBQV0diUWRjVndickcgcWhsMTFScTNKV2JXOVQ5K0dpa2J1VHJJWG5HSFJDZSt1QjliVm55c0I3VUd4ZVVMMkduTU8xMk9LQ3dZWTQ3OTdSekE4SWJiWmxlNiBRYUhocUxKZWVudnNNNFdSZWRMTzh0b1Z0UjdsdkRoRDVnaG9lNEo2T0JYL0FNcUxLMFVhR1lZYy9oNFNjRDZFQUFjQlBuOS9nQ1JTIG9zbW5jVEZKSkltUHNNY1cySjJpZXZVQ2g0eTNDMFdVODN3U0YzaU1vZTRnOGNjaWxhdVNXOXBTYjR5d2ZtdlB4elJmRnlKYWZiVlAgcmRmU3ErTmg0Z2NrN2gxUndhQk13V3IwaXJubkFlWVF6RkQzWXlKNjNPNGZxMEJ2aE96QmJSZVN5RDJRM2hzQy93QUJxTGYrcW96SyAwc2hJaDJReHR0ZW03Q2JWUmJiSEJxQTF2TFF3TGt2VnlMK240OTFFOE9QWks1QXI0SEJrZVNmMGI4b213aHdBZi9zRy9nTGRabGlGIE1wWE15bU1EYU5KNVJoVHNKZXM2WHg3dWhGVXdDYmRqaGZGRDArbnpId2Y4NkJSNEdjeUl2UFA5N1ZkNS93QUFCQUh3SFNaUTdjYUkgRmdNb2F4cnlDVnZGaGc2eWNBTGlQdzdjbE5SOXRGSHh3WkUrWXlXUUhUNWtHZXZvZGpTeWZGK1RjSFNRaVRnQXFJQUFYd0hnTVpBTiBSTElzUVI1RWJMUEtYMUV5bGVVTEMrQjJvd0pTdUdMY3FUbHlBRlR5UVJaeURNdW1LeGdKdVJpTWVJM2p6WExEbkZzaGRuampwekdEIEZxVWpIQWhtTlBvRWxLMUxhZUpka1Z1U3RCc0RGTEdMSnBSd3Arck40VHpBY2ZNT0FkUURhY2NFYmk2dXNqUDZKUnNYM1lNSDVBNEMgZlJvTlB2alQ3YUdTcjVSNWtWYmFhaGtTeUxnem5DbkE0RXBYcDZwYlVzRU90dUZWN1I4SnF1a2hTMWNHSGxtYU56WnVFNzN2NEIrNSA4L0lMOXNDWlF4OW9KRjV3OTBoMUxjeXZNSk1OZ0hrbnRrNFZ5aDFrZUtHQi9iZUhXK3BCY1gzQnFRMCtsbmlHTXN4WEtMRHpnYnc4IC9qK3ZuL2Q1VkdsM1JGcGV3cmsxNmtyajczTmFUWWNnUFlWYkNURG01TzhWeWIrU0xhMjRQdTNoemxMTDdiajNmR0M2dS9aSGIvVjcgd0NENTlnaGoyNU5hcVJ4aEpQcDU1YjFKZU9aNUloR1FwYWFlVkpFRUFhVkhpaXJjam95VVNyamxMRHB5OHR1ZHdDSmw5U0NNR1BiUiB5clBHMTVOUlNSdmFjZ3ZGbTNjUU9rYjhabFZpRWRzdHFyZXdnNnFZcjhTSEFwcTlZd3ZoNmZEZk5uWkNIOGd2dmtFd3pFMWNvTUZnIHpmOEFZQUMvdi83OTF4N1F5NVJpd3Q1R2tzbXIrQU5pdmt3Mml3b1pROHY3b3RqM0J3VDdVaDF0WDYyanRvK0FjaHM1TVh0aFBId2cgUStnOEJ4dzMvb0UxRU5yQWgyWUJsTkZoTXRrWlJoa1hySUx6R2lobjFYaTJ4YlJWUHNDWnZGVm9iNHZvbGpOdndIaUd6RENuak5rNyBvMVhpZi9FUjhBQlA5QkpDeUdoTnJmNVd6eVNTdmFiczEyUWVUMmdUREZpL3VRY2hEcmR3WkZ0Yjg0MmtOOTVNVEtGQ2J6NXRKMy8yIFBnRCt3ZENJMlJrbmQ1aThxSzdFU1VEK0I3ZnQ1NStiNnRtYlpNWkNBUjFTaEtrR1JXOXlTL1V2SHQ3VXg3dk9WOVJxdlpqNVh6d2sgVDZIYW5ZUEFUNHpGVzlxTGFldzR5M0xpOWpKOWZ6RTlEcCtIL3FOWmFlZUJvUzBNM1RjOWtTWFlHZ2dFSStBcVB3QitZWUpnT3Z0VyBselhKUHF1TWg1dWNObHI3Sk04eEZQTU1UeUhNS2dNSWkydjRIRU8wTGFndzFtelVOWFdWa0hWd1EyY1BnSDgrQUFlNS9xM1Y0YWIwIGRqWkhaSDVzdDJwbFUrRVhoNkhaMmw5c21SU2paS1BWWFg3SndOd3ArdHg4d0gzQVBja0dlMytXSnY4QTgrUHZ6OXdEcFYxV2gxL3EgQ3NnQ1ppMXZHcmRJRzF1dmN3MVVTQ3hoWGNxOXVTdVVPd0poZ3h2RU53UTlocDk4ZUZzWFJyNXVlK0JLU09QSGFJL3dGKzgvMHd2QSAyY3drUTcrTzg2UllZWUVZV00yeXZKcTVYR3ZtK0ZxclIra1JTSldBL0FJQVB3UHdPckthVjlBdEo2aVJWMTJLdWwzRmZyWE0xRTJhIEZwNklvSzl1YW1RL3FySVo2UVdJUDArbTBhcHNRK0JKU0JwQ1NZQTUyQlRJQXNaVEFSbHRoRWFUeUdXQzNzK2RVTXpMYXAyZ1R6WWkgSlF6L0FCRmIxSC9TYkJsTGZXYmJRN0VMalp3UUxHaCt0bEVVc1dVcThsU3dNYURsSjNvS0M4a2tVbFpDemxaTFQ2MXRxakdVQk96cSAxRktvTTFrQUFuQ3JQSE5aR3ZQUEo4SDhkVVpiSk9QbjkvOEE4Nk8yVXdodTR1eUtsWjhtcGM1a1BhaDNlbjdoY2JZTG1JdXFEVDJWIGl3NnZXcnNUekVNT1FjQWZIM3k4SHl6R1lwYUZaak82Vm9wS1A3bis3djc5MHd0TmEvUWQ4U0dSdHVTeWJhczdXdmFrWmhwZWtocXUgcG9jcTBKWjZtMDhmTXJma2pKRElHSzVzcy8yZGhrMFlvMFBTeUROSkFRR2Z3ZmorL3dDd0grcTYwK3JvOWxsYmFmQUtlTkpac01sZCAwaDJ5YS9kNFpTeHJZYUl0a1dCTWZFUVBhZ2NoRGd2bG9LU1B5Wm1WMWQ1dDlId3RJSThBSDRCdjU4L2dBUHoyWldkb09TL1JwUkR5IFgvVXNCYXFCWWJnc095VmFKTDdqVU5iVlh3OW9ocmVCaERYMCt4Z0hhVlZNYllydEJNWjV2ZkFCL3dBK0ErZ2dBV0dVcEhEQnE1a0MgUEhnMjN1K0pZcFRwMlg2YlVlbnFkb0xJUVk2TVlKV1NxQk5OSWt0VGFTQTFXY0RjeG13S1lncnpJbEhiZXV6SnUxc3VKaXQwOWtmQSBkZTZibkd3dG5xQURhTnNOQklDckZsc29VckpEaW1DRU44bUo1aUVQMk9CWUFHQ0haaGF2eVluMnUyUTV3SFlQMzhBQUtia3VqVEk3IGd6OTBaZDFyamdHaDZvWlNSWVNocDMwelBZR1RWQ0hGeGdWV24zdWhYd3Q0d3daNkJaUUpPcCt6TWFiR3ZHRHJqZzg0SDhHREZnd2YgMEY5Q3N3ZmFsalNLOVF4YktNR3U3aGFJbXdGWmtIMkZXNkdlYkhJb2hqMDRPWVE5NHNDdHppSHhLY3RreGo1VitCTTRFMUR1Mi83QiB3RS92L3VINmQ0OTBKRmR1eWFLSkRVbGNNZHZTRjVKNUNzMXZnZHhnWlZxODhaRTlidFJhWDN5eHVQdHB4YjJ4b2FFWkdlVFlNM3Y0IEFDQVBnT0E5RkJwb29jbGlXR0RjdWVlR0NsZUhWenlTUzZnZ0QrTFBKRis3UGJzWTQxMER6TTFST3J6dU9OeDVCMm9vVVJScXUyY1kgNG93cUt1UjhFOFhRWHNqTHVqTkZqWEtWTWJRTFJaQ1NXWDhUQkJlRGdRT29VQ0xEMmd0bVBoaDNBZVlCcVRBZVJnNjFXWXRvNHlkOSA3UndBUHo5K3dBTmdmME9rMys4eXJoYitsYWgxSXdoNmV3bk1EeGNld3ZtTXFrZTByaGh4Qmx1QlBXeDlXVWZaZHdIbFd0eVpOb1Y5IFBJdzVoc2h4OUFmUVQvSCtqRFZvd1dmcHptVzBCeWlTUlhyYUhrdTZQTTA5dkNRbjZnNHREVmZmSGIrN0szTWNrK3lJOWFXQUFPT0QgTlVDSHVZdzRidEZKQnZ4OCtnL3Yrd1ZRT01tdmhTbHRXanhvY0kxTTFwY0ZYYWUwOERrcjh0UHBzODJVMmVjR0JrcCsxSHhQcmNmaiB6eGdiZU43WTBQZTJJOTJHMG5Eajc4Zi9BTnZuN2xsbW5RQ0ZZWGhibFpMM1lGMGpZN2txeUtCSXNqVXVCU0NUYnhheFpYb1RGQ3JFIE1aZzZiRUt0VzN1VCtwc3ZhbVdNNGpjNFNTVEVzTWlNaGMvZm1XMFQ3TVQ3a1hLVEpRMjE5Tnk3QWhqV0NrVEZYSWRzT1N2WkJCa2YgV1N0OEpnOE40L2c5a0RDYlRWN04yck5wR0gvL0FIejlxRWNwYWpKY0ZiMldIMVVMYnJhRjhhUzJFeFlWd1hCL05LNGtDcnd5TU44byBkUFQ1akE0Yjh2bmtma3lNVmFCbjVST1dpY2ZuNEFmd0FIOGZZYk9ORmJ1N2dTVGNxMmttNXNxdHlUdlpEaFpEaHlRRFNOODZnbWh3IElPRU9xME13K01HRnhkd0xMNUpXYU0wYm16YklrblBBYkJzQUEvdjY5ckpMSVFKbE1odXpMdGZ6YkR3Yk1GdXZWLzhBbzJ6WHhEUSsgTnVGcUxiZ3RrSm41UWdWV3lMTmx0QXRHV1RtTzkrNTgvd0ErNUI1NFpBczBibDBSbndLTXpybmxtVkFOV3RZNG5pemRqa1Z5eU5kaSBTTjFkenVPcXhTSTIzVm1tTEpUWmVWb1pENStUd1NUTGtEbEsvWkE5Tnd3aWV1RXBLbThHRU5QYkhCWHNhMkZkTlpCNWpqY1BUMm4xIGVHMzZ3QjRPWVVaaGJRVFp2MlRrSC9ZT0E5YWdhZXYyMGNBNXFHN0d5VEpDK1c0QnpGa05rd1hGNTRVY0NESW5va08xQTQrWjVEMlcgNnpadnlZTXdTUWpzRC83Qy9BSDdvamZLM2JOMHVXeTIxa2YzWU5waWtzT2xiT3IyOEY3dEs1THlhNWNmaG9hNHR2aUduaDBjQ3dLVSBGa1plTDhHV1FuTmpld1B4OUJRY0QvZ0o0R25sRHltZWl6NGRYV2RYeUhHaVdBQlpDQmFZVXNZVFhOalEyQXpEbUtFTXc0TWlPaHAvIGNVUFdiTmFIYUJHM3U3S1RCLzJEWUFCOCtwVlZJMjFEK25HemwyOE5zenJoUSszUGF5UE5MbVdIQzBBWXkrb3Z4dE9qNUFWSndMcEggK3k3N2pUWFE0RmRMMDVSOTRDMXVtZFYvTUFtbDIwYmF0cXdrK3Q4bFhMVEFMa3c4OFErWWZjR1NxeC8zeXY3YU9JZjFkREp2SndJYSAzdysvWWJBdjgreFg0R2p6RFpROTZMZC9UeVFRbGFyaEdpRURKNk1wclo3NWZLRnZaNWhoT1pKZytHcW9kZ0tWSDJweG5sRE53ZjhBIHY0RHdCOWYyRS9aQTRuMHZRVGd5SkR1NFdqYlNsVXFsTEgyRmZDT2tHQmFha1BseUxhOHlKOE44UW9hK1lWWjdBcEhBL0p0Um4yYmUgM2FyamlEYnUvd0RIMEUrQTZvcnFNMUdHSW9ORHlVMndsczlhQmdLSnNnQ2sxZWtXUEY3ZXlnTmtPRXh3RG1Wc3dQMk95MDhmaFZheSB6Qy9jbjVzSmFnRHdIQWZZK2ZOV2tsRDRpbmVNeHM0NUx5UFcwSzRxOFgrVC93Qk9pMllvWDNnSDJrcnRkOHNDY1J3Y1I3cS93am5wIDJVbURYd0xKVDZtR3BrYlpFcFZzaVhwM1E1aU93NzlLMVlKc3BrSHdrL2toZ3dQaHRZRlA0ckRKazFmOHZnZ2dRM2ovQVAwRkF3YlYgbUE1aGwwU1QxZlhCYUVNODdOc1MwR3JKSHNNejVVUXB3OWhZN0hwK0h4dGc0ci9QMXluckt6cU1LYm1kN284NEFZYkFnbjBIWUQ2VCBaR1I4MUJTT1d1OXAzWlF6Unh0VHNCcVdxbnB6ZEs1TEpzVmt0QjhEOGtyY3l3R05oNGs4TWd6aTZ2ajJPQ2YxQnY4QXdGK0FlL1N4IFpJZHFHa1BUSHFIVGVTSkxIYVpKaGFFL0pqdTdnTFRSTFJWNWh3RDh3RG1BdzhNOEFSNkhjY3htdDhweGpmY1VsSmVOZ2ZqOXVuOS8gUGRIaExxSlpKdy85R1JWMGJwRWQ1MkNCRW16UnBJcnBzV2lkYkpiTU5TMGwyUkkyU3M5eXU4ZGtrZVBQWXhEVmxsVGNmYjFkY2ZhRCBRK0E3M3lseDJ0RndZNWdSZXFlN082R0ZrVkwyOTBseFJEQjlQbUxka0Q3SXJtZW4yWDNJNHlyL0FKTUIyaUVka2JueDkrUDgrZnV2IHFXUG9QS3F1OHJ6MVlYTkdoSGtPaW9rZXQ2bGdTMlI4UE80dDhjT0hwOE44aHA5Z0dQZ01DbHZDTXNsRU9zOEtyZGdsWFBCOSsvOEEgYy8wZ1d3NHRORHd0dHNwd2Y3bVBPRGF3bUxnVlhCSVE0dmNKTkF2bjVnVzVsd0J5Q0dDZ0w3YThJYnlUUTlzUnFyQ2hPY0w3OHdQdyBEOS9ZQnN3RDB2MUxxQXpyYUtEWkpLcjVqYkVNV2NOVjNlRytIbCtLK1BqZ25zZGIyUjQvNTI0S2ZKRmtZTGZiTThJN0pQOEFUK0lBIC9zQi9ySzBNZXBURUx0dVp0NWR2c2RPRnRkTXlqYjAzeHVGSVR1OW1RQVFkUEU3d3M0ZDd6UXFnWXhQRzhiNFl5T2tjc3QzUklWaWggSEpCTjlyeWRLTHl6eGdEbXE5blA3VXgyb1NkNmZhZ05UcnpKWE5qUzFlTGFZK1l0bUszbVBsb2NxdHFuN0xlSVR5TVY4ZFFvdzU5SiBCNytBL1FCNEFEbUthM2hwem9kM251d1RubWNFd2FHU0dIczJaWXd0c2xGSVh6QTdJaHpFOVBoMXlBUUlDcis2QzNuODJCSGE4TGRRIFQrd0lJRGZ3RjBqQlJnWTdBaHJrYWlCcEt1YkMwOFlXQlE5RVUrd2hoWXZUZ2h2aGdneWQ3SmpoRHdNZTJvQkUrWVR2TGdaTWw3Z3cgbkFmUC93Q1dPQUhJZUE5WDFlWUFvY00yU1NNR1NuQnpVK1dEV1JoeUExUFVvdDhubUZ1R3QzWmp3K3VRTlA4QXoyVGpQQTFuWS84QSBwNEFCdi9BZWozRkVpaVFQSnR1anEwYTVJMUdpRmV4ZDhXY2VEOGM4VzBlMVcyMVBKblVPM0xGanR5eVI4eFNvdTJUaFpJYVRJR2ppIEVETlhzNExiRHhUR3l4NnJHR2hrcGNFN0Nuci9BTXg4aWxsY3B5QmJNOHdzZ1BBaC9QWUlBUHRud1BqSXdIaWIyTS93RS84QTViL0cgNWxrVEhLMUtaYUNpVEdQSWFTeUtiVE5KYW1DeWNyNmMzY1hLbUVROTJUR1I4M0J3VmEwcjk4UjBQYTFlcjJhczNnMWh2bmdQb08vZyBPbmtQQjJlMEdIQmN6WFlKbmQxRUQ4d0FVLzVnc1d3MUtyekI4TU90bHc1ajd4VXYxV2sxa1lVNE43RysxeHp6L2dNZVFkVjFGdzZiIFY2dnM0emxYbGYyU2VzbGtyTGhOaEIySmtWOUw5aExCUmtZQTc2dGw1aWVQaC9BUDZlY0RMTVRGb1pOWk80NE94emdIOVA3L0FMQTUgZ3NpeXFqb2p5cGdxcFBWMkFTU2R2a2drVUtGMzVIU28zK25sMDAwZzNFZ2ZNbThLNVhnbW05MWY3VjROOVNSMmkvNHBiWXpxMTBSMSA3MjlxcThuNWVxOGxRSWF6ZmxJWWxvVEVOZ3Nkd1Q2clk3SXdtQTFOZzdjTGRtUE9IR1diR3JzRWtIVVFBQUEvVmZQZ0lkd1Qyd0MrIEorL1dRU2hsRTRsTGFLQnNnZzdoMDArSlRXaUd3TGNNUGpaRU1neWNTK0FxNDdZVUtNM3VrODMzOEJ2NEEvdi9BRVNWTmZsUVY3UzkgMkdiTGZCcmhmdWRWMVpWUHAxcDlmU1dRQ0JpQVhLSHc5OFpBOHd3UHNocVEzRFRTOEIxbXpVTjhac1Fac0did3c0Q3ZnUUYrOEI2NiA5VEdaYWo1UjllMk1yMWpvblR3MXdWZFoxUDN4UnREOGtQSHBjV3IwOWZ0UmsxT1RGdUV3WVRwN2dBNDJ6OG51VDlmQ0hOZ3Q3bndBIEFBUDlMMGNpaVlxNmYzbU12RVo1VWlKYmNpMDhvWlpKWm9kM0hNcVFvN2Uwa2pNVTNVUnVnRXFTN1Y3TXhXSmNMOGtSM2sxUnBaMjEgcnN0dk9YQWh1RWV3U0NxdUZIQnRzNmZrc2dtdDlua080ZXI3UWlYeVVtY1Bxc3c0SWEyd0o2cnFISHozZ09UR1BuMlpITk8zZ1A4QSBZTDl2NTkrMVBtTGJrNFBsU3E5TWttVXlIakZuZ2srUEVOOXBGellVT202VC9uSzNobUdQM1ZWSmdVWnk0TXMwWVVHV1k4SkZvcFBBIFFMOEFQbmtBQXdIMDBmVDNCRGlIdFJpYllVYVp4Vi83UExkOGNzcXROY3Bkb1hJaHNER3lWV1lFV3F3UTUyM25rYTFFWW4vVE95VmMgRVIwRStnN0FmQVB6OEFiTGhSbW1zRFhhMmRNNmhGdGIxU3RWKzJ3a0dOSzVoc3V5K0VLaG90Tm9aR0UzbUM1bnVBKzJLM09PQ09uTCBQQTN2a3gxS2RYWjRYd0NGdjYrQlg5Z05wWW1kY2RRN3phaDBTVEN0UnU1RDFTYktiV2RLQUxlOGYxeXRVa2pCVVJvRWhvUnFpbGFqIE5ZcVQzWGpqd2FGMmVCMGpxck1FTFFCdFZYbnM1MmRwK1FOM0NqY2xmc0prbEZHR1ZiVGc0VExzRHVDZlpGZ01pcUJISHZoczZ4encgWU04M2RpT0F4UDdBZlBuK3VNNkxtVnBsa29zREprd3lBMDNadGZrczVnTFE5K3IyeGtNT1FmR1R1cFZhM3ZFRjhUK0t3L3E2dXNqTiA3OS82QmZqL0FPbVBXbVpSK1dHSVowb1c3eVQwRE8ybXlEekp4T1loeWw1eWNsdGZEdUFkOFR3OWdUQWFHd3dIakRnelEwYllETjc1ICsvZ1BmMzJDSGtUQlo2M0s5UExnQkpyMHlxcmdsSEpMYlJFaHhSZTF5azc0ZmRTRytjd1QrV3I3NU8yd1o5Ry96TmcvZi81ODJMQlMgb1VIUnNBcW16N3pXMmg0UHY3cUk4WThna25vVmlqRHhHUmNOUWppUjJzc1ZqUUROcUFGMWtPTDV2cG5WUXdGREpSdkhpODhrbkhnKyAwdENUVlk5SS9pTWxXRmQyOE1DR0h0U245TVFldnpFN2IwT3VVOTVXYmthS3oyTTJrdXlPQStncisvOEFVWWx2QWhvMDhPQzVtUTM2IDJtZjhVQmx6T2s0R0U3VDdNcVlVbnY3SkMweHZrUzRIRnduVHg0RTM3ck5OcXd3bGlGeHh4QUFRR09BREFBQXhWakkyMDNYeS9ES0EgVlcvaVZYRFZLV0hNQng4U3Q0dnk5UVRRbnVFeGtRdzdJWVlERUVDblZvMUJpZktFUG5LT2JkZ20vdnlEL3E3NzRYdncxUjVldXUwdyA5eHdORkZCQXFIcHF2Nm5ENHpUTlpUSk5ZVjhCcmtNLzJQZGlIYWt4alg4QWFDdjNTMHA2eWpxNVIzck0zZ0VxOEhqanNCN0ZneHg2IEF5d2lRRk5OYVIrcXVvRUd6L0hYdVRVU1FaeVNGdStSSGFzVnlSZUN4TWxMQzMxVzRhamk1TzRJNEUrNjdYMlpWUUhma1JhMXo1NVUgdVlCbisxZEdLVGhpQmNrbHRMMkF0aldDdlU4bzVDWXRvR0Y0UFZhY1lUN1VYNGJ3ZXZDZk9tRFBkWEp2T3lKSnNHZzlvbjUrQVg1MSBaelZKY2tkOG1XMWJRb2E2dmpIVXB2QmZyR0dyeEhDdWE1WHFscS9iekFjT3lVK1hIdzJvQ3dQaXJEZVhsREtlYzgyY1BnSDQvc0gwIERyU2p4dzlHV2pUTGxtNXphaHhja0hxRU0xSkRYNWEyaEFaYWEwSWErbmgxc09ZN1h6SjF0Sjc1T1c3eXJOWFY5enF2c203QTBFK0EgdDFBMy9mOEFwd1BGTjJRbXZGNUJXaGJHMUttSGtBcXJ2bGUxL1lSZzkvWG5IdmhwK0VNejh3NDJzRUJWWkhsbUY4bUorRU5uTGRZRCArRy83QjFGUlduelp0eUhaQ3hpYVd2VG5JM2tVNEh6dHgyZjBCUTZoWm80MlRCNG5FMHJGV0ZZeUx0N2JqemVGdFk0dklXUlhTQkYzIEFEbjNSVXBxZ2c4YXZTYkl0MWtZcGs5R1hxM2ZEMFRVdlhNejRmYmQ4TVVtUE1jdUgyWGFnY1p3TlhKNEE5NzV3L2NmZnZ2d0RvYjAgOTJRMFBsNExlYUJvRzlYRFVqTWRyQzAvNU5NMHV2VE5Qb0YzUE9jTWhNdUJQWkxVbU9Fd0hTMVgxcHMvZkxGWDFNNmVuakIyOC92LyBBSUFDQTJCa05oUmtybFB0clpyZ1c0UjZaL0RMcVFxVjJxOUlyZFhQZDd1WHVENDRWdW4zeENJT0VGU1lKNk9ZUmJNYUZmOEFLZjhBIGZ3R0w5anNIQVQ4Q2x0RDRVdHlacWxxVnd2VXd4aDBpd3JRdFFPSGJERmpQaFo3aXJiQk1tR0dSd21YQWgyTVFyL1k4ZU10SEdkOHggcFFKNEFBdjcrL2JCMW5NRzVGR0dMbDVFTUtUWllmVTR5dW0xTklBMkc3R0lwVWFudzNIU205ek5CVlp5dDI3UExLWTFBV09GMWhlVyBOa1cyL3dDVzZzTEYycHNZMGJjVUZuVVMwNTEzUTdXdHJUZ3J2Q1RmTGdpdFNscWh2alVKVUYwS3I2Q0FxT1pjSVpwRTBYZUt3a04yIFZoZDg2ekNBZXg4MGZNWW5ZVFBobER6RTF5OGNHY3RuWGxWNjExQ3N5ZXpOUUhSMHA2ZzVrcXdyWHlXOXpGQmF5dXllTmMvUmFycm0gbTF0bWZEQTV1SUZqZVIvanhqa2NwSUxmNGpZdG4xNSs5Y2ZETWJ2WElrWjBZMDZnQURWVEFDZ0J4d0JoL3dEcm4vZjhjd3RxUWFiUiB3Z2c4ajhIc3NYWDY4MStmeDA3RmUxS1R0QkxNRUt2UGFoNlp5dE45dE8rb0JrRHVHbkJiMUdWelRqMitUS2ZUOFhDcTBLcSsyKy9FIEVPcTFzb1RGdm1xc21jcTRKd2hnQUgwRS93QSszOUJzVzJXeElwK3pMQ0YxVmJVbWswaGtVa2dmTVpLL3NPN2JRaTNHQmloNnZwOTggdml0Z3hnaERWUU5mMldxekZrbTBWZjJ6ZUxSQ0JLcmZuNm9YNzZEc0dDeEh5TXlxaGpVMFR5U1RWYXZXQVJlWDJScVY2OWg2Z3F2UyBMR3RCYnRCd3JkYmgxWE1JTWlPK2FmOEFVdHh0bXhGMmdzczNhNUpOblAzL0FHQkJBWXI3SXFkTDFNVDRhZm84dTUyUUxJZDNDN0N5IE80ekI1WU9kdENuTlJnSEN2OTRXMzJiaXdmQmdWKytLcklzMW1ydEducXpQN0Z6L0FHQkJmdWZZOU5FV0RmM2lSR1FhbU40M1FSRFogODdSWVJ4Umd4dzkyVWpFbW1GS0tOcVY1Q2p0RStEcnBsVUlZUkx1K3BCRlNzZFBQaklOM0pJNlhjSUl5N2JDbGZKQ3U3aStaV0RXTSBhMUxMSkVpMWdYWW41RFlZVFFPSlJvbUR2bVkxdlZaZ2hEQnFSSGxTMzR1MEdaRzl6ZUdKOCtBMy9mOEFwd0E4eWw0cWZxb296VmVTIGJUeG5tMXNMK250SkRpUTljbmw0bzVUSENHWVc5bkRzQzNCVXZPVldMNVJ1WXp0ZHNtd2Z2Ky84QndycWNPUTdHcGV2V2hjZHFsQW4gZ1FSaHE5a3A5NGxzaXVlcHg4UEtEaFNjU3Q0Y3poNjJjcVhsc0ZPWmZ4ZXpNeHdKK3dQd0RZSDdrRDkxUGJoSERWM2NFQU5aei9ueSBtcXJpMWtWWFhzaFR1Q3hsZDNpeFE0NkgyZlczQU9QTVFZRTl0VlhDekJuNXlSdGtxNTI0L3dDNTgvaDU4QW1IVHFZNjNKcy9xWkdWIDl6MlNReXRGSkV5bGUrTnFSbkZwbHdQdHN2ZlVzb1lsRVhjaFZuaFFZM0hLZlNjdnpkMDlESGpubnFCcitqbmpVT3dwK24wWGtJRGcgR1pCcnhaQmkxTG9iUGxSVjVYdEJQSHA1aHdNdzdUVCs2a0RuaHpqSXlyeGZiUDhBcmJZTmdmajZEMG1XQlR2UzBFdXNSbGwycDNnUyBFbGJVMkNzV1F3V2gyTmFDODBLOE1oTURoL3ZnL25EYW4wdGhXOW1icGdqRXpnUHpuQWZmei9UclpOS2kzZDB4RHRYVFFuMlFIRnA5IEoyRTRXb2trQ3hnQ2VkNVFHR3dUTHNRMDhQaVE5cXpUNjBuQjBZWXI4NVovTnUyQi9nSUR3SG4ySElmSmprNEFiQm51d1JrbERXUkkgcmJoUkN2SmxjZ1dIU3FMVDE4UE00MnRtWEJrYWxLME9Lekhrbnp6a3lPRVNjQWUvbnovQVQvVDBlV1RiMUNNam9FbGRYZDlxZVBIYSBzRFQwK2VmSDlWY2NSN3N1TWJMR2QzTTRUSEN1QkpCcWFCQi93WmJYL2JjL2RkQitZMEhiQktVL1BnYWRQbUJWdlM3RXA5YnIxZlNOIHFWMGhFVFlUQStVL2RreERXeC96ckxUL0FKejRNc3hvYUJuM2JtMkIvd0RZUDFBZGJiSWVLcnErME5Mcy9TKzcyUWVmRENrV2oycGUgVmtSTEl4MCtxZDhTZzZlWWhtSzNUekh6RlgrUlZVTm1SaW1DeXMrRThCdi9BRDQrZTJEcGhvOWtHTEJob2ROMXlueVZ1VlV0a1hIWiBCSnczWXhTTXFJbXl1UHNnZ3doc25JRnQ0bjh0T01oTkg5dVRBOTdkZ2V3SU9HQUFBd0g4YTZzbUZYdERBU3FxVllTU05hUGpPN3dIIGlPSHc1UUZJYUpSZ2d5T0MzRGh6Rjh4WXo0NE5yWHRoUVp0bXgvZCtlbitmZnY0RHFFWWtpWkxoMHFSckp6Nzh2YWZIYUJnYjkzbjkgZE5rWE1xc0p5bW5lUjR6NDI2MjhoWE9STmlqYTFWMStMSXI3UlpqdURBMlc1WE4yZnFDOGx1d2w5d3NKd3IyOTJqYWJHdEJQcS92eCBXNWhEcmRnaHprTlBmSnpKV1ZHdEZvTEt6UjNOdDhYMzVCZmdIOS9VaHlPeUdXZ0RWUlJFR3VGcXpHMVRhU1ZTcDY5RHNZQ0psQVEvIEpPSDJRbnA0OTdzYXlsL0duWHlzaGd2dG1UM3QyZDBmMlA4QW53QUJCUHp5M1ZjaHlIcC9QTE9sUGpia29BbEd6aVRSTDM3RVNCUXogSEd6UGRTR2hrQTg0OHZxV3pvM0E4Um14L3dDbGZQdGdRZWZkS3B3cDRIVGJwbkdmOFp0RzBQV05PV3c4Sk5QaCtlSzlqS2RqY2tYKyBTT0ZWMlFZSUIrNVk4OStyTUxReGpOVlp2K2dlZklMQisvbjFMRXhqWnJoRWhkcFkwaDhHVHNWR1pyL294ckdnNDd6WnRmSFJTU3FXIDdPOUI3WDhaZUw3ZWFyL1Uvd0RucXdESVFiS2d6TWtYY2lyWkZlaXlmNHYrV3J4REFFVzJXZ1ZEa09ZV3BEbXJpK1lSMUs4S0g1aDUgUm9zejhYWTlxN2RRWDc5LzM4K05SN29qMUFRTUdjb3c3S3JkWkZiaWU3UTB3dzFYYUF0ZVRiR1cxK3QxdStKbFBzakJNT1ZMWDArYyBZR2VLODRrcExzY0FQK0Q4Z2dEL0FFU0tkbU5sUVRJWXVWY0JKMjAwbmlRbEhBMkUwWEU0T2RYaWRSamtoajF1K0hDazJSOFgwTTVVIHBEdW9ZWnlmM21qVHFUNE0rQXh4QWMrMzgrc2N5dDZqWE9ZWVpWUDFka3NhU3R4R2pPczRPa0J4Y1g3UUhzQjhVRENlWVF4OE9DZVggMzFIcmY3NTJ5M3dJN2ZmZ0FEZ0o4QXdJSjkwa2tRaURNWGoyazA5U1o3dThKL3BybmdrVUNSTXQvdlJJSnEyMHlkY2w2b2FhZWFlTCBSUVJKTHFaTlNZMWhHMURHenhRdklpeWIwcVJ2bmd3VXRMSHQ5eEc1ZEJuTGJRSE0yQnF1c3QzMUxwTmtXcm5QNG13RW1IWkFoOEEyIGdrQWFiWkI5Sm9TRlQ0Y3dQV3diYmFGMHduQ3pOMHE5WmVYaXJqaVQvWDMvQU9tbGtNQTlYdytrNlJ0L0pxNnVMZWhza3V0OTQ1RFQgOVhwdHh2a1Y4c0Q1bGtUV1d0OFdNNDJrT0s3WU1GODVKZ3pic2I5bjVCUCtmNkd3SDhQZWF5dzdRbzBiVytKU3NkUEM5cXdBMjFZQyBRSEFGRlA0b2RmOEEyZlo2ZlQrNWRnWHhZMHdwV1NHcml5WnozMk0vdjRBQjFpUFQ0Y05wL3dCSmVvSXpYcWtxYVJ0U3RrY2dEMG5iIERZWTFMZDJMdUYxdllINUl1elRlaHI4TTRCNTVYS2Z6bXIxZXMzbzRFQ0cvUHNHd2IrZzFGaGtXV0RZVFZ4eTdhVGxwb0FkUHR5VFkgNllad3Zvekx1UzM5TXRSeUdIYzNEaTNwbTN2cHRTc3I2UXhvWm9zWXBkdWVLWkZ3ckJsbGhhU044KzZ3cmRtUGszMDJtUm9zVFE5RCAxSWFMYVdBMUxZYmJka2FuRWRxczRld3A5b2NzS1Jabkc3VUQ3eEQ0SEJVaHo0cWh5YXlyVVBaZ3paS1RObXo3OGdXNkE4QUE2YWpSIFg4eG9lRnV1V2xWWEUreTZIU2J1c2kxRStwMGlxKzQybnVyM3h3WUdSa1QyUlBXeURnRGJVOURnekVZWWhpK2N2RHQydTM4LzlmUDkgVS9NUjJSdHpEdHRKQzNKQXdLOWtwRWN3N0o1YmhzVmlWMWVHUHJlbjBOa2hoMkF4VmZNSUNOTUpqR2w4L1pEWnNHL2U1OCtBdyt2bSAwUHNtcnVDcUJTR1MwcTNTRDFTcnhBRVNYMnd5ZnRDN3RWVk5HTjRmRERnNFRmQjh3c281RHJNWVVxOW1XZUU3SWNBYkIraC96K3ZiIFVOSVlsU0h5MGdSUDVKSVl0Tkd6bmtWblZnYzRDMXRydnBDU01TU3h1cUMrQlVhOTBhY0RuYmtWSHMrY2NhRjJDUmJ6QmFsTXJHSzcgM0FicjFjRzF4TXI0bERqOGxLUG4zejhiZGszRlBtZk1PVDZQN3hHQ1dQS1AxK2tuTmdBYytBZnY2OUtJK1pGa0dHamg5YnBOSXJhUyAyMGRrbUtmTFRMa3FXWll3R0d2aHc5a0dFTndJR0p4N2xxcmlNWm53cHdibTFYWTQ0Z0Q2RHo0QnY0Q3hUd1FLYUxkUkZBeFNsaFZkIHFoc0daVGRoV0FIcXRYWGtNbzVSQ2xqUTA5Y3NoRXVDeURJNThPTnhBOGpwNHg1KzhqQVpzMmJCK0F4OEJzQitIanZqNWQwTzVrT3QgS1RHbmhWNURiRDFFTlRLbnhFTldpeEpUNEhIMnAzSW1NbmNDbm9ObHVHbmlxK0RNMVhvYnk4MVVraE9jSDBHM1FIUGdBREhwWi9raiBrWHVTVGF4T1VxRTdsZy94eVIzalFQZGQzd0ZvNU1qWm5XVlpEY3pQbkp4V0lORlJYejdXNTQvTmZtQnIrUUhyU1lIbEhsdXlFTXBYIHJzV1h5UjVYRWgrR2x2NU53bUo4eVlZaDg4ZUh4d1BmTUoxQlY1VGM2UENKSnM0ZkFQMkMvaS9BRC9YSGJDZGNqa3QwL1E3a1NwUE8gRElnMWhhQTQwalhwbUswQ1h4b21MNGN3SGNIeUc0Qi9uOHRWVnNtalZlVlJoaHdJYi9ZRC93Qit3WHo0QVB5NzBTMXhmaDgzWkRTRyBtMkgyOStHQk1NTXc5S1lVMVgzQU90aHc4d3dubUViY0ZJNHVJenkwYm04bkhaSjV6L1g3OC9IOS9QeVJnVWpsQTluU21oMlNUeTVuIFJuZ2crS3BCaGNKTGxRM01sdHcvbkU5a2hzQWV4cDYrQlI1aXlzYm9NR2ZzWnozWUFEOXlEOVZKRkZOcUJxSmY2RXJHTlBQcWJMUUYgOHY4QTZVOGk0NC9jVGZGR05OSXVqbTBrY2FDR1ZFamRVR0Z4aVdLYkUrYkc1REd3UEdJVWpuS3dIbytuL1NmYlRaRW9jb0hHNXo0dCBrbUVPU3poN3ZXNVJwMzZ1ZjZ3NUpNWlhEbkFHOEt6cXRiSmpCZFg3WjdPeHZ3Q0NmK2duei9UT1J4K2srZ3JnU1lyazdmNElZYS90IGkvYW1vclRQU08xaSswdG9KL01GdEQ0ZUhUNFlOOFQzd0hNSnJOb0lqeWpXb2svK1AxRmpnZndQcjlGWHlSUWRCWFlCUEJpVC9xY1QgSWVuaXZTR1NIVjRqSUJpbHBSNE80US91QmdPdncycm1GYVRUQ0tURjkzeGlPYmRxdUJuL0FPL253SHRkNnFHQVhZTlpxb3VwYXhqTyAxYU5Wa2JobldvdjJiY0Z5SGl6bVVaSENZSHArNEh3T3dJYlZwYVh3UGsza3FMV1hudlphSVRqNS9ZTmdQOW91dFVramxtUnAwa1NSIEkzWVJkdTNlVkxFYmJhdm5JMDJkTHd1UE9kSTJEQTdTWnBobkZJTnhPK1NHSmNoMlpWbVcrUEIveFdLdTJZRHE4OCthZFRMNHFqYWwgcHNrdDBpanZselNJa094anluWE5qSWM5YnJlMUxUTUJ4OE9kWmRnYkhNSjRGRmNZamcrRW05L1FRSFBqNkRicjhBZ2FucU9xOU9lcCBRYlN5YWtrdFlDdVNKV0VPMDlwOGUyQS9BN05pdVZxRDF1bnpFVGpkZ1Z2MmxjSHl1WHpreFFYdG15WWZxZjhBUDdCMC9TT1pvNVRRIG1wUldaNW1vYXlOVFdjMzFsVyttdXZYRmVtZ1UxVDlQSXdEaGd5UFRJdDRUSnNERjhJYzNSbWpCNlJ0NkNPcU93WXZ3RG41L0REcXUgRnVCNmZxcExkdU9nZU5tUTd2OEF6aWU0TUV4b0Y3V2VNTUNmOHhQaGh0NGVNVTlTcmtNVFdkMDkzalpEZXdZZTMzN2dBQzFaWHlvTSBNWFpDeFhDUVkxeWoyMk4vY0tQZ2M5VUk4R2dkZXpUeXlacVlwckNid1d3UmdNcXhCQnNYYmNDdWJ4NWN5YVVPV0ZWVit1R25oT3QvIG45c2R6cmdjTVdROVY2NmUyZmpjUFRHSG1WdlBtTlRhdm4rU2M1cHUwTnp3Tjcyam4vb0ovZ1BuNmRBN01GdHNQT0RKcGcyeUMzWUsgSmptTTRna1E3UXRDcDNLS3lYQnZGSkdFOHdRcXVxenllZWF6Q3lUS0ZNU1p6WkRaejNBSC9md1BSVURiQ0VTeUZXd2MyeVA4QThZciBkVGtLc05vaVRHZ0MyV01CTU1JZjRiSW9KN0JNNGlRc3RINDBURjdwdm05bXpuQVQvQVVFL2gwK0dTUmREbFVkdE82NDRFa2x5bHFWIDhoNzRzSWV3aHhWWDJFTGNqQkMxSWRWcDlQaHlFejUvTFFlMlZBVW9jWXMvZHZBdndCK1A5Ulcya0dJc3lPaVJvZTFGdThpOHROajUgRkREbWp5RDVPUlVkb2JXa2hoZklnNU8yR0dPRWRMbGZOOTR4b1dUZkJlWTByNnJLQzNqVEk3aDFKcXpiVVVxOWtNaUhVN3ZVRlMxSyBrUGpraDJCVzlielM3ZzRZTGM0RnFRK0N0bENZdmMxbmhKc0lqbnovQUlEZitmZFU2b2VPSGNpaDVEdWxxYmVCdmkwN21LOXIxZmxoIHdNb3RkK3pwOHlHdDN3SHdIdUgrK0UvRjVWMFBrMnlXaTdnd0FEWUFBQStmOXV5czNTdThveGMxMG5qekphbW9LWVNZVmRQcCtweE0gekZOK0xUZFZrSzM1ZzRXUXlNQmk0dFBBL1R4VmI0TSswTFBCd2lTa281OEI0RHdHSFRPamhsOTNaSzlGcGpJT2ZDa3dKTFQ3T1R6SSBuaHNxSlkxMzhQWkpnY08rTWkvREJuazVTbkI5UFROVjc0ODc1c2h2bitBRC92d0M0ektGQ1M0RjVDR1pvMDJrYVFWbXlvekdPUE94IFlrblhrY0ZxTkFGakplVkdkc2NWQ00yYjdmRzJrYTB0NGQyUjRza2NDdVdvbjJRMFFLdnJIS1YzMXR1d3BNcTVnWWJDQTRWazRPVlMgNldoZFN6Q0MyNFZ2TVQxdGdEMk5BcitmL1V6NHJyT0FNSWsvZnRnL2Z6L0lGNnJsQmJROGZLQXBMSmNHYTRSdTVGUHNsYmlUQ0kwRiBuS1Voa0UrR2hodzhOeGZEZ0llaHZHMkV4YlE4NzV6Yll3R3dZZ1VIejZDd2x1dDdBc2ZUM1dMSGxVK1M3Y05WeDE3VjZUazBmYkFhIExjYkRGc1o5Y082aWZkbGI4Z1d3ZDAvYXZKaThHZEZCbTBud0Q4QWZ1QStBNkNYU3M0OWZITzMyU3lEVEdWVzZBa0dLZnM1b3JIbmcgdTJFUGVDRVA0Ymg4d2VZcm0rRjQ4OE9ETXNxNVJZMk01dlp3K0FBSC9vTDhmNlZEQ3BkOFFpYmFaOWlFWlVWRkVxenhIOGd4eVNWWiBCQTdiY2U5Y3o3NTBqZGo1cXZBeWJLVnZubVNSL05xRnRzckZhZHpFTXpjbW51VlVyNVVySkZieVVTUTFMWml2VnNvQ0xIbGYrY0RoIDArSENJVEFkdE1EYURtNERLdktjbFI3UjJUei9BT3ZhSS9qMVNmTUlhZjZic3c5VlF1WmpNdWxEUUw1a1dGVllkc0RnWlVTeGdNT3cgQThPSGFqSk1YMlMxSjVEVFRCV3hqTXJxNk1NdFRBMmN4QWZsMStRUUgyQzEwTmtwZGpzQ3d3MWwzbEpKVy9ENDhZcVV3cnNPMTQyYSArUGpnUW1MWWV5T044RDRsd0lHSFJrWXB3WVlqaEVrSWo5M2RnL3I3RHJ5U3R5aDgxY2VEemxaZWRHVzN5dlg5dGtOVU5vLzJtNUFiIEk0Mkhodmhod0lUSzVudU05cVpFWlpmUHMzQ2NQMy8vQUtIOE9yZ0xUdE9JODAvaVh2aWxqemtZTnRoTnhZOGtreFlwSXQrRGFEaXcgbnJUeHdzVVNSSk04R1dXeWNOc3RrTU9QY0FPVHhZNjlhZEpuL0ZjMDhhZEUrd1U5RGZkY05HK2svYmpRN05OY3FOZTZOejZZRFppNCBkWkhmRlVERHFyakcwaUNIcllWY0RaY3RnajdsbnpoVTdOenZWNmNQWDZNbkt6cW0xaEhRdGZGUmlmT1k2WFFwNGdEQnpaeXQ2TFRiIGxCT2l5VE9kTVA4QXFMMWJLVlhXU3BPVmJOL29LK2h6WDJwUUxIRkwwU1dFbXFySlQxQkZlRENoWjFuazBtdUxzVTE4S0lXT0tiT2wgYkZiRkxsc2k2Qm9HaGZIQXZoc2VxeFJGd3ZGRkY1ZWFBRiszcHE2ZURGaTZvTlc5dFZocXVXNmtvanVGcDVsVjhCemRPRmFRNU5jcSBaTS9ESVBjU3E0WWhEUHVJU3ByUnVnM0N4WjN4Q3Q4WHZlT0tQdndFRGhoaWZBOWNkUmxMRXpVdlQzVXU4WEhRTlM5L3F5MUFaMVlNIEVwYm9jWFhya21oMTlQY0xoUTdVcmNlWHVMYjhZTEp1ZTZJMitKSVEzaHY3OXNHL253SFRzaDZnNnp0cExzNnRHM09XNnJRMnEybFAgVVF5Wk8wdURSVGVuc1dodzhHVDRkYnA4d2dIc2F0R0RnNGprMkJRbVR3TnUzK2RSY0JBYi9qMGt5aEJ3VjNCVmR3T250YkdoczVidyBzaDJWRTkzTVJEMU9DbnZ1ZzRRMCt5RU53dUF4QmdML0FCVXdNc3krTVZsNUIwbTdWZDJEQUh3RlJBRC9BT1hUZVBUSklpaU9ZMGpQIEZwdFFjOVErMURwbzJFaXNETEw3Vkl6bE9HWkMrU1NLN3J4dElYUjVjb2tsMWNja3UyYzg4U3FReVFSbXNXc0txK1JaNmdVdWt6NVMgczc0VXQrZnpDYStTYkRUMlJiSHNNT3ozS3duS20rWVhBaHZsMkliNHdUSndFZUJWYklaaWRvUGhNbWNOaE44OC9VSUEvVVQ4L2RXRCBzdERFTGxkQjgxWmlZV1NNVDVWZlUvQ0F1K282SEUxQXFUT3JxRUI4aFdQaW5USUdOUE50WVBic0l3WmFjdEZHS1dvRUMwcWJZQVFEIEJldHpIL2xRRlhxdklXSmZ0bWFqM0hOZG8xYnZjeGpZTFhKSjJOc2gwNlcyT1N0VmEvaHFFcmRiaVZ1UlpVaUN3SWNHWXNyTllGUnQgbUEwclZFa25ENEErZnhmajl1OUt4bzFFM0l1VnRUSXVVTm9xSGJWUHJkZTZSeHRlbzZuTXJtN3E5UTFkYlR3OE9IcUVEekxBL285OCBuV3ArNkkzQi9OZ3ord0gwRFlNZGdaTnhIcDVSUENpYWpVbkVNL2UyUVFHRmtvYk1qRURibXlmQ205TnI0cVAwNVhTU0o4OU5DcmtuIHRqOUlWdUxKenV4cmxjc1dLWkFwNmdycHRGSGdQWDBlYmplZFkxS0h6YkkrV1BNT0RBNzc5YUFuR0t0cjVnT0hwUGgvdytJandKeHcgV2JNYU56WnY4N1UvZjlnL2Z6eW43Y3pLSGFLWXYyQWVTYkNsT3lTMksrb1NZT2JMVXRvQ3ZWekVXL3lvSDFJZk1YOThVckFnVHZzMyBLRmtZYzdvaE5nd2ZrSEUvano3cnNPSEVPcFJaS2gyMVBvSEpsVEpLUVIwb3JjZTdvZGpGV0ZEc2F0OTRUNlRzaXQzQlBoVnkyang3IFVaWmtab0tFeGxWdXdTN1B2d0FBZjU5ajBxNFlkTHNad0dzYkhwN2RnSzVUOWIxbFYrZFlkZ1M3Z0FpNm4zNll2Sis4YWtLM2hwK0EgU0FQYmJVTU14UGk0c21ETmhPY1AzQVFHSUFCajBvSjlSWVZaaWl1eVdrWDgxMDJtZUNmTTFISkloZkxiYTlvTFhOZ21PMlVWWGhNayBpSzZzelNpT08rSFNXS1dDUGNjeHM2TXF1TnJNTVMyUUJHN1F6SFN0Q2cwRGNsMlNaalFrbXl5c05BdERZdHExU2lYeVZEMmRQcXR3IHBQdzl4ZTZrRGNDZTE4R0puQWdUZk1kL1BnTi9BYitOdWdjUll4QXhRVmd0U2s3TGpnRUxFS2ZtUnhKaFhhRjVvbEIyQmJEb2RxUTQgYkFIc1o4Y08zTmJqQmxZRkJndEhTZDhPSDhiZC9mejc5MGJLQ1d3VnBoTVkyT2gwaElzWjhHMmE4TlVPdjc1bXVSUVNydnNQdFd0TCBkMkliSXZ6RWREK2VjVCs1blBHWW4vRU83Y0gvQUgvWU4vMkJnbkdETmQ5UGI1THBhbVZ0M3pibXVOSXI5MnlVK0pEdVMwRk9yd0FmIG1CZ3hUOXFKemdIbmNmc3RVVHlhTmFEUXNvd05KN0pnd0I4L3dFLzU5K2VId2xXSkJqaE9ZUzEzbmVOTVJRcXFQRm56NTZHT05Xa2EgeWpaSmtNR3l4d3c0UEE5MlhCL1I0NTRFSStaVjZSUzlZWlI2eUpKbHRBaEMybmVHSDAvbG1Sb1Y0ajVGVHlFT3EwT3QzQXhZQzNPNyBIMlp4c25aaXZhRkcyL3duZXpoOEF3YkErL2ZnRFVUNDh5Z3J3Vzd1S0lkdFcwME9CdGVqekE5WHRZZTJuSVRGVFE3QlpFUCtUZkdDIEpCUTdnQWd3NnlNZk1MTEdXb0V0RTI4QUFHQUFCajduejRwRHpOSzhXcTArQUFwaS9xWlRYYXJsNE95T0ZmeElkamdWUFgwbXA3QlogQmlxNWtNd1FEMDdBcjhDRGNPNWpRME16TmdiMlREWUVFQWduOS9ZRDYrWHhkb0xpZlpDUTRrbHRWUFdjcFRLZWZCcWVKTUhrT0pGbCB6RSt5SzNmRU9ZWVlBNXc5ODg1TUdGTjBXU1p3NEVxNUhRUUdMOHZyNS9mOGM3WnpMSzVURjJUQm5XTFprT1FERW8rVDFoR3Nqa1VjIHNBT0xzVnRSb1lVRG9xS2dqalZIaWx0eGlWVW1OemptYm90NHhOQnVhZG1veTY2RGQ3NHV6S1VnOW8yUnBvMVhOdE9JRDRCZUpmOEEgRDRocEdvSzJsc2dIUTlabHdlOWZRL3IvQVBPREx5eGZFYmZQTm83OGZQZ0VId0dCOUd5RGpZMGF2TEl2aDhvMGJwWFYwTlNYcmdNMSA2cmxvaUdyNEhrMmlLL0RRN0hwOWtYRTliQjhmUFBBZDVLZmVmTnBQT1Y5K0FnVCtQZ01PT0cwWmxTMTNEdCsxUTZpQmlvYitKSHpGIHNQRVpMR0tjb0tQZzlrdUJDcCs3RU5nTUhGSmZiVGFmdGl1TEpqRGxYQk82Z0RqK3diKy9QM1QrYzVpZkYwdjE1Vi9iRzBZWm1zYWMgYkxZVzYzSVhIVzlvSWY4QURrZXRSUFkwTzdGc3VuOGtyaWxpQUVFWXJObWZCYk1NcXMyazRmMENnbjkvQUFPaWoyNDJpaXdtazNwSSB3elpibFNDU0tSNUtvVm1ZbEdOL3ZJMVJZeXRLTGFSQmh3bVpxa05CVUI1dkNqWjQ4amdmS2xCaTQ5bGc2M3FyS01iYmI0RWF2TDRGIFZSM2V0K0dpWXRqUThONGZJYWV5TDdLRHJUdG8xSWRaMW1VR2R6QWV5Sk8vNEFENEEvaUFBSCt4WGtMNlpJWkRPbmhEcTZ3bDFWVzMgY2dTcjIyZlBBWWhTMEpsZ0I2M3VEUm5RNGNldGc2bEhVdEJyWlpHV2hjb3orOXZHL3dEcy9IMEVCMFlPQ080T3dNYlBxNXdaRSt5bCBzYTczZzFYWXZ1NmVMUTdaZlNqNVg5YjJSMmZEM0FQK0RQOEFudkJoWktOQ3VUSm83dmFJUUhzQitvY0g0LzFJMVBEWFA0U0liUmFDIEUyVlcyTFpKckh2YzFPVkVTdW1pcUl3RlBnR0dXK0tIZTRaOWFzWnNuempuR0dhNDZjZVNuNisrT0dLL2dBd2ZtRDFNWU1pUFBMTzAgMmNqR09LT0hIVnE3MDJ6R054cWttazNIVWZkeU9NTFlRcDNZb29EdDV3eDd6enlneGlBV1pMWXAyK1YrRGY2cmxmTGR1VkdHampTbSBWYWlsa3RHSVJzSDJFcWgzZUdlVjZSeFY0ZnpBNGR3TU1nL1k3TEgyVzhCMlptVnlpTXpiMmJDWUgzL1lENEIreHg2Y0V5MUNqdWgvIDRTdlQ2a3lXZ0haUGozbGRpK2o0V05WK3dpK1BoNWkyNFF6QkRFR2hzRGJCRG93eERGc3l5RDJSMi9ZTmdQOEFnT2h0VHJ0YmFMRWEgalRjeVdRcWxMcjAzeExRU2RuWVZzV1VweUxhQ0dRbVZXK0dIQnc0ZWpUNlBQSTVoR1Jya1YyWlplTFJDZjcrL1lFRmc2NHhaVmthRiBmSmQwTmtOMHkwV3BHbHI0ZXBhSFlZYjRoTmhTa2JnSUIyUVBERG1MQlpNSURoODViV2RyN21lYk5WY2NRVCtQMzdwWnc3NHdxTTQrIG56UlpMa2lNMllYY1hEdC9qWXIzVTlONHJsaWJzYXBPVWRJbWVSQklSY2I0WUV2QzFpNUV5b05YcDVlR3pvSTJIVVpBeXI1T1ZtZ1MgV2RZS1R5eVFOeVEvK28zeFdoYklUZm1XUXl3MC9BSDRGSFpHYXMyajdPQ0NiSituMEh6L0FMbmsxYnNSb3FOYmdQbWRVcUpXaWVGRSB5S3JXeDhSYmxKdmU0cE1UM0F4TTA5c2plUVpIaERZSjd4VmF5elBtTzVnd24zZytBOEI5ZzYwbUNoQjN0QVBYTVd0NU9tOThQVmRFIGFJZWRZQmFZZUtGbWlWTUlNajQrelRLMHZoemtCUGJaeklUSmkwTjZXZkNCUForNThnNGJBQTZuckV1Z1dac0d2TXFvTlBkWGFleksgM1VyQzBXclh6eFlYS1FKYTVLYmNHRVBEY0Z0a1pDRGhCN1hXMGM0eVRhQmIwVFJ6YnRzZkFYNyt2dC9mb3dZTVNSbWtGQ0pObmN4aiBJQldKV3pGeWRwd1d2VTU1WERrWUZCR0FaVStwZG9KM2tiRk50TWZXbWFqVUVlUjNZNjc4azcxeDVVclFRVzN5WmJVdGp1d2Flbm9hIFRFdGh3dmlRMk9Ea1VhOStRMTlibUxiSlZjTWN5UVo5Z0tYMGJsQ0d6REtydXdJRUJuL0FZWUlKL3dCeVNIU2VuTmNzVjJzRUZxV0ogSWRsNmV5VERkSGJHK0Y0T1VBdGtxdWEzWDRaaGttYk9uaC9uODhnc2hNWWg3blVEdzdKUG4vdjNnUDBjMWx1bmYyM0xDMVNuZ0xhKyB6NzQzV3I5UlEybjFPeUZjQzdnWXEyUXF1R0hNTGN4Z0RxdkgxRlZXeG02Q3hqTnZlOTgrQVB6OEE0Q2Z3UG9jZlUrWXJoMVZwbjZlIHlUSkF0cEE3VDBQWVZQeThhNVBDWlVWOFR6RVBDR1ptY3c0R1E3VlRMTVdTaFNvRms1K1VRZFJIK0Fuei9JTU9tamNqWGNDdkhJRVkgeG82RVRySEdVeGpFRjkyT1JCYmNYNEdQUW95eVBTMk50RURzMDI2alNjNVNPK0NiT2RERmNYdWozZHZOdXRSRXlHTHN4MmNyNHRwUyB6dTFjbnRQTVE5TjdadWlha0liUkRyOHhXL1oreUlkZnZuUEdDZjNJWmhuRjJhczNoMjdYV29md3QwQUFRUHZ3Q3Qrbk5rc0RTcmJrIE9BeDNOSkc1VkFqUk9wQndsb0V1SFEvZU9JTEREMXNQYWdka3VBZXlVRFpkd0FVZDhHRENpSHhuL1JNRy9iRDlndzMvQUs0NnZUNmIgU0FWL0hxVnVDaXFUaVhBN01OZldFaDFlSm1LN1JVOFZYbVU4K0lRZXlGdTdGOWt0VGo4ODUvUWF1amV3UUliUi93QXU4KzM5K1FVRyBYZE8zOWw1Q3FwejlLNlNaZ1Z2YUZybUxzdWFuN2pMMmcwTUlHSXQ0bUVObFdnNWdjeUJEOUlQczViV1hqbmlNdGZka2xIUGNCUHI1IDkreEFBS2xpU1ZGU1IwS0R5RU9kMkVEV2UzRzQya1FWWjd5MzJVMXdob3lKSVVRdUtKTHlGTnVNWTV1QmcyZFdMSGIvQUttNjZqcmcgWkI2bFlCNEMrVzAydzN4d05pVS8rSlpIdGkxSEpYc0lwYlZxTUw1VDc0dHpEQTVrcXZ0ZEFWV1Y1WnF2UTBaWnczdEpCN0FmUG4zNyBuM1RPVjNoUERKeExVRWhxdWt0cUtETlBDUlg3c05SMkhhN2FwRUNMUWlIOFFtOE1qSlI0ZXVIeFBzeXVRNnl6UGlHc2pMVWR0UEZvIHZINkFQOS9IdzhvWXJPcWw4TytSYzZuQnVVMUlFUWhlV2NqMU95TkFHbkxhS0dIQ1pEVG55RytFRzlIUXg5YVBDRzhyUDhSbFpyT0Qgc2ttM2pZSDdnSi8rb0FrZkRiS3B6SFpTWEh5UUJybmNuY2ZOSlVmTG1XTktZWlQ0SFQ3c0Q2dGVOMm9BaG5BSSt5NExJTXJNcFZ5eSBqSTlYTzFvbzRBQUFQNy8rL3dBSmNxaW9QWWlxVCtheEFQNjhIam5pK2VsSUZDdTdpMFhISTM3YlBISHpkVi8yK2Vud3ZodzlRVldOIC9oeStQWVdWbk5seHEyVG5EMnh3VndSYXBRS2VubWFmY0VOd3NoZ01BNTVCdFIvdk5YcTlaak5rU2NEbmdGOUJQL1FhanJlMEM3UWIgZmhXWEtBRXNaNGVOM0FRNjlZQzB3b0FYaWprSFQvc1llSHlCa2d6Ni9mQVFjWjlvUnNOOE4vOEFUREVBZjJBQThkT2FuWGFZVU1WOCBwRTdJU2RTTHRaRERUNEZ3c2o1dHRTbE1ERjQvczZmUStudGJJTWs0Q3dQbGN2aU5qcUxGdkpNNWRuTmpoOC9VUjgrQXdQbitrRXVPIGlmRkh0UUVDN1NsdXkxdHQ0TzdWSzRkNEtSQTFQY2l1K0w2Zjh5MUliSU9zZ0dmVHdLb0gzTVdMc3pZemZlMUh2dytnZ0FIQVFDQy8gUnhXVEFTQjJ4YU5IVERPUHdyaHNtcStiRkd1Qlp2aTFYMkVTYmVtYThXeHp4ckMrTFc3c2ZJNEh6ZDlFaVdVc0JJS095dFhPZDhPQiBxS3E2WXIzblhnZDM4OXRiUnQ2R3lCOW5jUGh0UjZ3Sit6TEx5K0s0ejI1c2s3QUFBWXNHUGdEN0NxY29sTGl1cXl0VXVtL3Z3Qm1WIEsyVmZROVNvSEQ0dFgyRll3c3d3T0hMM3hrY0NIZ2JCVWdlNS9RM24raWRqNUIrdXdkUUxwYkRneDZoRU5qeWlSc01aWkFuZUJrR0IgNWxQN0RXVmNpMXRmVytOcDlrQnVTSExhcjdzNnR2Tm1ZN21NQnUyeW5INEF2b1BQdC9BOVpJVDFkajNnVVVQRE9XL0pZWGxQc0tyMCBmaS9jMG9odUxBSGh6QTVnd1FoMk1wRCtLQjFsNTVRekRQQ2I1c0h0c0cvOURHR2VPRXpMc3U2YWZVbFBmamxsMlpVbDEvaXhIejI4IGRObTIxbW1XRjk2cDNoak9PRzRZZ2dMZTVzYnpISGRYNXF5RS9wdktXSllLbXQxS2VhdGdYQTRTV3Zub2NqamNYVG5wN2FVMXdyOUQgUTdnc2plQ0JpQ1ByODhxbUNiTVVLWW94dzJFZHVBbjkvQUFOL0FBSFpIRmp1TmpTbVZaMWdjdEFxVVFmWkMzWUFtbnhjcHNpeW9ZKyBIVytHbnVaVmZKR285UjZrcTJSM2Z0R3IvQmhFbDJ3OEFnZ04vUGdENlp0bVJYYlFZRHo0dGhTVnRqU1ZLSW51Q1RJTEdGY1hYdTY3IGZDaHc1c1BtQmc0MnArK2NaKytQT3hoQWxvOEIyREJCeC9mN1VPUHlFUFIyZVZ6T0NCUUprT3BDZFRHa1ZWY0Y2SWV0Q1dMS1EyQU0gdHc2MytHdnZoeXl4N2JQaHMzS0ZjbXNnd2dUNkNBUC9BTC9oaDB5YUNkdHA0ZExDc004elFrcXRTZlp2TWt2MmJ0eDJNVFdDOGtIcCBVY3NjU01qTzVtaVF2S1ViREtpaFVFZDllR28yZVNlRGZSNW9ycis5TDRZTEN6VEljYldLYTFFa2hvckZVejJGUFBSYkNWOVFNTWdaIDh3WXNnaERlRzJ3SHVjdHJETlE3UzhveVBWM2d3QURIWUQ3NkFBZEo5d1U0N09RTVpwNmpRaUhjR1R3amJsdStONGNwVVNMU0szOE8gSnlSa01KN0pYUE1VT0FubzFaNGkzblkwazNTWndBZ24wSGYvQUw4ZzFYVDZ6RjFubUt2Y0dHYlQ0dGhqVjZ2MlRPcGN0LzhBZWEwKyBsRnRmWlRDZkRXMlVnWXFzOFErZE1zd1lodmp5TWVQdXdOQkFZZ0FIZ2VuOUl1ZzJrTWZjdE5Hb0JqS3pnamJYK05WMkJiREk1Sm9sIHlWN0lJSjhOYm1VbkRIcmM1U3ErZk9oMUF6Q2lqT3pIQW1OMkkvQWVmYkJ2NERvWWpxWW1sZFZ0Sm5WOU84QnprU0F4eFJPQTFMZ1ogeEVoQm8wVnFqVmszd2RWaEt2QS9PUWRmRmxDT2JGK0QrS3NmbnJ6QTFoM3JxM2Fya3pwajJLVnFmTnhWa0RrWVY3cEZVNk9pMWVDaiBUdlRLUGVyMUZWS1hZTW9yWGxoRTU1bWNWYzBvM2pGTHdaMDNKS1RCdzNFeDZJRWZPdmFGVjE2aGt1VTVab2dqYXRlWkRtNHpubk1yIGFocjZyeXA2d3IvMG14UWFPTldsNUl2SktaN0JIZWpZaHdrem5TcGsrS0hLWmhmY2wwUUlDeVljREp6clVvMHlLaURUZjJsU0lpak8gYVhPbFZSM1pGamthTjJ4Tm55YTZYdmFueTJyMHp0d1dkWFFLeDRKSUN4S29CcmdBQVVUeDBqMkZmWHF0cnVucmZVZ1F5Sll6WmthbyBNK0ExZXZKelBTWlRDRk0rdW4zWmZLQWlVUE5oa0dHYVptT0JwYlllNThxd29ucHJuT3lxdldvcTNYdVg2bHIxM3MwdzZlcTExUmY4IFV6VUpwL3R3R0lrSTZndzZqVUtSSlJFMnVhak9PbVFzVmRVQjRPd3V1YlZLVW1oeVozRWk0VHNUOFllRkVxcnRGZ0M0TDJzTTBQTG0gNU0vT3M2NWVzZHhISTRkZzZwQ0ZjTVF3RnZ3R3V3UDBEWFF4QUNSYUFGNnF6WEZuOG45L3Zyenl2aG5LYVg2dDB2MlRTUHBHS1ZpWCBGL3d2Z0Y4MkU1emdvaHlMbjIzVkN6dUt4Y0lMTnlYbUV5Q01oQ01BRlJYRmhFN0lGNVl4U2pnQi9yV2NCY2o1V2RKdC9kMmsra2o5IDY0V3ZncVJnN0EwTkxVY1BDaFVVVm1LY3BnOVQzbEI1aDRldUdSaGVDc2xDWitQQ3NNam5LZUFMTGtPbytIajZjbkxWTXYxS3VablcgZGFvaWYvVXlsbkI5THFRNjMydUxnNFpmRERrOEVFY25yWTZJMzlqU3N5cXpSemFYYllxQzBlV2VXQkl0Y3FHV05YUXZ3T3FmWnlvaCB0V2t0MmE4YTlUVjBrbmc0ck9uWXFZelBCNWllWmJ4Z1VrWDlhbVZ5WnVZeExZZjFsQW9ncDZGSU1haEoyWk9Hdzh5WXZ5L1JrZW5MIHdHcTBndDl2L3dERUF0V2dzeTRMbHJHcy9UcDVxNXJuQWFXc0FwV2NVeTkraHlXM2Rhc0FxUEIrakFMbk45Zk81ejF0VmRrSTRtTEcgVUo0b0FPRndjdGRDd1FtWG5XZEdwTzJPVHhIS3c1OE11R0xEL010bkUrUlpvOVlTQVBBQTRYd0srQjFmZ09qWm1RbS84V0RMZVhGdSB1eGgwWHk3OHRlaG5TOE0xZHNnOHV2c1FzNUl6VWRtakM2NTZVaWRqWlE5ZUFsblVmbHFNUVpsTW9VUWJUSVNmSkdRTUk5WWRNRi90IGhtbzZqZXM4TXRRenVvRm1MS2J6aUk1UUlpUVVrU3hYT2xabGZwdVFQYUkvcVVhN0w1SHJ6akpaQUVadVNuNXhIUHpCa1FMQ1RzZlEgcmVqT3M2Vzd1MCtweVptcWQ2eVltcnE2c212QS93Q25XdU5WV05NVkMzZDRnQytVODE1OG4vcWV2eEJRaE9iUUZtNS9wbkhJb3NDZSBRSmtKWmhFdlZDWHZRODFwWk5lMVNCdHVQR2paV1hORDJ5UlZmVm41VFk2cnhBTk9ic1p4RWN3WmM1Y0lUQVdjd1VpdEZsdXQyMU1vIG42alh3bVRUclpSWDF3TVR4VWxrQ0NCQlVGcW83TUZTRDhrd1I5Y05XZ2wycVl0QkRFNHNBaUZXcVhObkNpT0sxWDJXbTUxblRmRVUgamozTGhpMzNMWTVvK1JkQzZQUHoxVS84aC8yLy9EcmowOFYyR3ViVC9kVG95eWlBajBxNFRUMUFISnlsNkJJSkN6bzF5S0x1OW52USBSV1BRS2tSNXZxQSttY1RVRlBNek03RDFqVldmaDY1L3FMTlloZGFReVRzUXpsMXBwZlRyY0VBbHNvWmQxY0EzeUZ3NkZpNTZZRExHIENWVEpoVDBnd283YTg3NEJBVllYcjljK0FjSUc0OC9PVUZDUE85TWtUa0h4akRuV2RVNVAwK3E1UDh4LzhnZitPbHA3bC8yLzhKMTYgZHJTN0F4YkxLRkJjMGlwK2lDbmErbXlObXJKT2JDamVnNVdpdFdUZ2lmOEFNdXlzNmNuK3RkV0hlNFhaNUZvWHFYTWE5eUhIUEVzRyBDcGpQQkNzMk5UZlBpNDFUL3dBQi9TanJOWDU1d2hhTHc0MndXejFwaFkyQW5WS3Y2MmpJdExKT1JFV3YvUVRpamxESm41ZGNydVRuIFNnK2ZrRjhZR1liRDduc2pBWEd5ODZ6cEVBQmtqc1g2cUhuOGk2UCtvL1BWdDdKUDNHd1A3QnF3ZjBma2RWY3FsNk1PL3F4UmhucDkgRmFBSUZOYVZMQlhjSzFJTUFjb3F0RnlVYlcxT1hKNnd4czBhWVM4aGN0Q3ZIWW12c1NFZm1HNi9GUm9JYkJLVmxUMGo4UFRtMmNwVSBQTTFGQktKc0M1bkd5SE0xbjEvWDFsenZUalpEc3Ura215V1JETU9MajZ5UlZTT0FHZVpsem1sWmlIUTh6TlA0bTBzaktsWnlLWFdmIDhBVmdNenJPdE9wQVNLQjFBVnRwVXlYaHNIWVpKWW80dFF5VzZhaFlORHBPbUpNbXBzayt0OG0vT04rZno4OVV5dEhMSnJyN2JHbnkgT3lNZWZXa2JJUjVjZUQ2U09BUTVreXk5UXVWN1pFbkxhVlBJWFdIRDFoSHBSQVlqZlJpUXh5SklVZEZGc0dVYzlNYUpuUjdvNm05WSBseDNqU3crenBmcVVhMmY3WFhybHJWN2M2clZZSUJ4TXFhbnBTd3NUQ0Q2WFExNjJWd2djaUs2YmtjU3ora2VlaXhpS3laZHdjZVBCIGpzWHA5VURPczZWSUI5WEVhNUYwZmtmeGVEOGRQajUwT3F2bXRweCtuVVBpdy9ETFp4YnlMTkVkSmovaHhNYnJxMTBvM0VSZWJFc1ogSVl0T3RiVzRJclpycUI2WlVKaWp4U3hDaGNzamtHWmtjalBqbGhSWWZZckNOYWxQTmlaU1JZSHB5d3hpeGxsdVp3ZzA5SGJHZFg4cSBpaHV0WW5Yejg3eGkya2ExckF5cS9JRytITW5wYWNtWTFhWnNqL21zY01hVDVpMmZLd08vVGxtZzJvUUZYWEZlekJxZmdCWWgyU3RRIDhyMTUxblN0UDM2UFU1OS9yL2YzZWJ2emZtaGY1cnB1b0pqblV4a3hrM2VIYjQyNjl0Zms5YjgyZGJiRFlvL09aOVFsdU5FeHFxU3EgdlF3emoyWFY4NlNlUFJSK3FsNUh1VE5oMjB5NDdrendTeHRyaCtyTWRZN0VHTGhXc2lNWXdwcktFcUhxV3JHYVNhYVZ0UkdxaXc2NSBzTFBseGhLeVcwMWVnVVhSeEtaWHpQRkZhbVZSanpHWldnR2s5VUVab0ZJcjljVG9OZlZDanJHVURVMGl2aXJLczdPVWpzQkxOenM2IHpxUkFCWWdBQU83eHg4cDBwdjhBaW5QeWNiUHllZWtKT3FaVU9pbUNuU3ZwbXkxT3ZJTHE5amYxZ1pHY1htdmdFcnFBbkFqd3VLUHkgRlRQVW9OaExlTXIxTHcxYkZRM0NLYUpabG5jOE13bGt3dlFGWlVLdmpOSkdsMlpOYW5ObUwzRG9oMTMyOHdIMm5QVnk1d01WMGFrNyBJU3FkWDFjajZsWEp6QndPT0dPWlhxSWxwbUJPd1I4MExCa3BEd25ibTE1YkpuV2RhR0p5WGs4U3lrZm9zWXNpUHdUUXMvTkMrbHgrIDUwK3hrZ0RKOWpCZHpFTXZnaGJPSUlJRm12SjZNMTJ2am1tM1VQWFVTbXJtdWxKdzFGam9IcHRpU0lieDhHZWFuMGVBU1RLMGVEem8gUUNMS1RHTmk5ZnFNamJBT0p1YUJJdVlac2F4aFhQOEFWSE01MkhvL2NLcDE0ZHFIdU5lOUpBOU5PazlKei9adGkyVVVteENWaFc2MSBXMW9kemRVYnNRZnlVc2ZtQThvbk91QmU5UnFDMUlxOGt2QWFBWGxpUlRURWloMDdCWHpyT3NzWUIxSWNnRjNnaUx1UjNNVnl4TE41IFlyazJKSk5XYXF6MDRFL1Q2SGs4R1FEOUJ0bklEOEJxRjE1b1g0NlNPcUswUFNRUzcvUGpLM3FaUzlGSWFYZFBOOFY4SVZraU5CaUQgbjZRZXVwVG00U3k4eVdSY0p5cVhpQXMweXlwbWN6NExEZTVNTEc3dHd3NjJUbzVpRkVVc3NFYSswUTZWOVlDUTdOYTVjMDNVRGJxMyBreW8rVW9rRmdlTmthSXkxelRzcklXRGlvVkhFTWtoTG5tNittRFQrQmtMNjZ3UEVGdkxGNVU3SUVteG1kWjF1c25UNlppU1diUEppIGJacWFLcko1TldhczhXZnoxa2NBem9TQlp1LzM3ZlA1NllGWitnWmNGSFd0Y2pHSzJ0bFkzSUxSelNQVjJGMURoR1duN0kwelZoYkwgYlhaVDA0dEVvM2tycFVrMFQxV2Q2Qkp3Wk9LSThZY0ROVGlraUxpU3pGWll6VzByaVRSOXZqV1pnejJJNUlzMmxvNFZrTWtIbEdXMSA4WlpScExBbUZsTGU1REtCSG1GOExEaWVvWUxrUkpxSDZ5ZVhuRmlhV1JJRVNzaWZuV2RaazkybS9VU2dmb0FwUUg0QS9IVTFqdXVsIDFHTE10eU1UaXhGbTE1TkVXZjJlZW9XNGRaMXpoRSs2YStGK3RVSGd5dEU2Zlh3OUlHQU5uTEhDU0FzTnFlTUR5Q0FhYVA4QVVLVWkgSTJ5eWVjV1YxakxBaVBrQ1J1UUlqaUJSTnpHTmQxYUpVSWwzVWxwamxIekxVdUVyVzB5MU5mdGp6MUptTDVHVzR0NURYa0Nqa3habyBDeFNXUlRrTFJHU2txaE9SRzlDL2xHc3VhRWk1VU03Rkc1a29mSXpyT3NXcEpUVlJSb1NrYXpSNG9wS290aXpTaWxGbmswT2V1Z2lxIHdreVVOVU1sWkFHclZMcTc4L1BWb05Fdi9EZzA4YW5LVTdrdjNwWXh4MzBPVE1COU9VdXdhM3pNck5oeGN5SVU5R2NRS3R0ZHRqV2IgbTRTakV2SWpTRHJHVHhFQThnT3BnZlNKVWwxZUJDODZ6ck91M0hMS0ZVQ1NTdVB2YjhwKyt1UEpIR1hjbEVKTE1TU3FrazM1SnI5RCAvcDEvLzlrPSAiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJpbWFnZTU2NzgiCiAgICAgICBoZWlnaHQ9IjI2MCIKICAgICAgIHdpZHRoPSIyNjAiIC8+PC9wYXR0ZXJuPjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6c3RvY2tpZD0iU2FuZCAoYml0bWFwKSIKICAgICBpZD0icGF0dGVybjU2NTYiCiAgICAgaGVpZ2h0PSIyNTYiCiAgICAgd2lkdGg9IjI1NiIKICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48IS0tIFNlYW1sZXNzIHRleHR1cmUgcHJvdmlkZWQgYnkgRnJlZVNlYW1sZXNzVGV4dHVyZXMuY29tIC0tPjwhLS0gTGljZW5zZTogY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiAtLT48aW1hZ2UKICAgICAgIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRSUFJd0FqQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQiBBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFILzJ3QkRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCIEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFIL3dBQVJDQUVFQVFRREFTSUEgQWhFQkF4RUIvOFFBSFFBQUFnSURBUUVCQUFBQUFBQUFBQUFBQmdjRkNBQURCQWtCQXYvRUFFSVFBQUlDQUFVREJBRUNCQVFGQXdFSSBBd1VHQkFjQkF3Z1ZGZ0FYSlFJUkZDWW5JVFVZSkRaRkV6RTNSZ2tTUVZWV0tGRjFaVFE0UjFkaFptZDJoWWFWLzhRQUdRRUFBZ01CIEFBQUFBQUFBQUFBQUFBQUFBZ01BQVFRRi84UUFPeEVBQWdJQkF3TURCQUVCQmdVREJRRUFBUUlERVJJRUV5RUFJakVqTWtFVVFsRmggTTBNRkpGSmljWUUwVTVHaHNSVmpjbk9Dd3RIaDhQL2FBQXdEQVFBQ0VRTVJBRDhBcjJ5QzZuclJMcmUzNit6djhGamZKTFluMGJaQiBnUXRDMmgzdTRvSHAreUtyVzBOYkQyQk1zYmIzdzY0RTBZVytYa01lQWh1cmpnQUJnQXFLZzhEK3dQaVNycEg4ZERqQXU3VDVhTmowIDJTc0M3YVhhNGRJVlBUOWMyTUpQUmEzd1pCRXkxSVZKUUF5cTJzRUVDbnM5bHMrS045SmRxdjJCZ2ZsOWdBZm93VkZIZzYvZ1dvMVUgalAwM2txZjRUVzdDWVZiT2NQbXVTeExLSy9INjIrSFc2ZkxIaDFSREg3NGgyWjNrRis3eHZsWEkvYUlBQTU4ZjgrSHdyY3A5Y3ZpdiBlNWVWVnRKdTZTU2lNQ1M3STllc244TDZRVUtHR0Q3Z25zajUrT0Qybjl0T0xkUUUxZFhacXpPT3dTcmpsdWdENS9ud0R6NHlSeVlUIEdXWjJkSXpJa2tmcFNOQXRiSVZpWHd1M3MwdzhjZm1STEc3d1BHbUNQTkdTMldXNDVIZS9nWTMyMExOZm5wNUo0OTBnWmVUbTFMREMgVVBZS0dreTlOOTJXUVk0SGJUUTcyMXFnTU9DMXpDR251QkNaOENqOVEvQStDb2FIdG40dTRPQVBlQUFNRy80dmk3Tk05SDVWb0orbyBlMzByc1BsV28yc0pBeGhJaUIyaE41NUZNRUliNUNoclljYzRRVkt3SUZxSjdONHNad2ZtMW9vL2dQQVk4QjZXTlQyWURyNjVESm12IGJhSlp6a0hxN3MrQnNJZXBoeWgvczNhSGRCd2NFT0dIdFJnbUhPSHdKM0JpZE50QXdZajlya2tGNS8zKy9kU05aMFcwWEpJRDFMWDEgVjBtK1NudWdZa2dBaDFPd21ISVVYbFJmNXd6cUV0U3lFTWVocXREM0JXand5TFBadFhaaGp3N0JMUi82SCtmbmovVW5jUjR6eHpPciB5bzZhaEREMkxBY053cEl6dEhOWEdRZlRuSHRxc2oxSWl6ckxwcDRGS1JQQzhXZEhIaDh3Q29TVk1xVWt4eUpkZHdhaFNVanE5Zno2IGZtRDdmckdOVEsyN1JyTmthTTdscmVzbnh5UTdCZkFNTWdZbUNFOWtVQjIrVktQZklLZWpQS3VyOG00VCsvNytBK2c0Yi8ySEVkd3ogYk12Snp4dUMva09sZ05YSkE4bFdWZnRuOE5KUmhzYUtZSDJUVzkxbUE4eGgva0I2bFkwemMxZG9Kb3dNMVZ4c0h4OEFnbitBOEI2WSBUNDRhakh5djYzeldqUHNoOFVnTElKVGxVYklyS2JWMVhzTFNCUXgwTkRXNGI1TXI5d2c4L25uRU5tUmlncDVSdnpZazdCK1hkLzhBIFByL1pVY3pMVjZmYXJRZ1ZMVjN6ekQvWVZIdUFINWFlQktDWW9Gd1hqTjhKL3dBT3R5RGg3a0ZLQ3RveU55aXpCbTloUWxxVkRicUMgZmZqK0Q5aWZZUktxeHN4ZjFKRlRDTk1ranY3MHlZeUxJUHRhU1NXdWNRT2NvNndIMDRVeDJrZG1rWnNwSkt3QVY4UWtReDVveHhKZCBuTExpdU9wN1FVM2RYc0lDMnZoSzdMR3NJM2R6eHBwUFd3d2g3dUtVTmJVV1lRWExJWkhEOGY4QUIyMWZiVlhqVE0wQ3hpTURkbmMwIERBUDFCMUZ3SFlIN0Fxck01cUZUYXpHMkRtMXV0bUZ4eE4zZEh0UzJrL3VSMjU3TjFLSCtHSHJkRHdRK1NISzA3bG5MZ3dXU2xOc3cgeEhwTUk3YkFBNS9pdm56NkNnaXQ0UEJDd2N3emI0SEZiczVvVzVLOWREc0JhRk9xM3lMWHRjMDJ5VmV0MVd0Mm9INCtIYW0xZ0FnMyBCWnJOODNUWTdSZHVEb1BQc1AzL0FLZ2J3SHNsZzJvMVdxR3VaQVc0dHFOcGFwMnFaSGJBK25PVkxWendldnc3SUgxSUI2VEhHRWREIHI4OUJoaTNsb0ZFMmI5N3c1OTdmNTRBQmtrWnBTeFozM2FrSkw1eG83VUhpamVobmh4azJLWGEwb0hVaVhFTW1TSmc1UzBqck9zZVMgTXpWWDRzMENlZW9FZGwxUEtyTXdCeW5CdEdxNUtOcDdJRGNuNG54UVBmZ1d5RUUrRytMYTJ0a0RCemtFQkhyZjJhYjRHazBjMjdjNCAyQitRUUhuMEhyZFlHWERxKzRKa0N4azgySDd3VkxZS3VTaU9EdVlWMWV2SHhvb2RnWkVNUHp4OUhtQWY3SHRneERGc3pOd25tMTRmIHJ2OEF3RkJ3QWRpdTZCM3d4VXNBbzF2ODJ4bnhrZDJnT25qNjlRMWVMTFBTbHRncmRQOEFoMm95RDJTdVFKSHZnWVdWa1h4bmZBanQgU1p6OS93RDdCaFB0Z2U2RndwZGliVldjTlZReVMycnlQRGNWZHNobEpiRFhKNWJzQ3R6RXdOTUQxL2c4NDJmYlVFd3pveXUwTE5RSCBPRXV4emdPd0FQMzlnYWl1VlJ2T2JxbFZocUlyb1g5MkdYNDV5SThpdXB1Skswak9NY2M2RjNlMkk3K0I3c2dQMTQ1dmhnMHZWOWQyIFdMdG9XMFdUR1ZLNXlhZGJIQ3QzWXd2TW1ueXBiQzdTcDYvYWwycDRkRHRTdjF1Q2VZRU5HdUFuNy9admRJU1FaLzhBcjQrQUFQeS8gV2xQZUUvdFdrdHI1RHdvMVhzNXRsaDBteUxZcWRrS1VqWWUxdzE4T3lQbERodzQ5Ym5OcWZQZ3pNVmtvTFppZjliZG9nQi93R0w5NyAyRVQydGtyNmxpV1VHdUFsRXJTd2drdGd0U3EzQmVNTkN1dkZMa1c4QTh5R3lRMXRQWkVjQzQ5dWRzUmlsb2pOakNKTytjQlFmZjM2IFhpbkRxc1dZY0UwWHFFYlpsWGplMDhocXVhU1dNTkVyVGdoMWZNSVEvZVl0L3dBNGp0ckFCQnpOc3c0S1Q5dGtlTUdBK0ErL2UzU3IgZlpsV1I4TjJaMlFLTTVIakdHTHhwYTVYWnlHUXhBWGszd0pLclRScmRlNGs0b3Z0ck42T0YwYTdUWkRmanF4Y04wY0JlWTRiTlZaSiBQTW1HMjJWZFB5UjloVEFLYXdsYkdoanpDRzRCL3I3SkJuMTlXalVZdCszMWRYN1Fka3padllOLzREYm9EZ0lDcUlOc3RCSTA3VjdSIFlhdUNjTzZVcHR0Z3cxTlR4WnI1TFEwamZvWkNHK1RJZW1QaDhQc3NuZ1ozQnNXaG81enZmQ2QvMkRmOS9Qb1BSNVVhdlg0R1BrMlggYUY1T3lIZHdkbEUxK3lEV0JlY0t2NVllb2VHd0dGc3dZbU1temc1OVg3NEg0d0xhQmpOdmRYZUEyQUFmOEJoMUR2a2lXa1BoSk5nViBLYnNLa1ljbmxGZTJFNGNicThXV0YvRFlGdHdmRnVHdGp6RUZ0c0RFR3lvd3g4ZkJoUHVrRTJOQi9md0FEd0JRaU5ac0NIbGRLZGxSIEwyYThUR21PV0ZtazR5czl3NEpHVGNDOXZZa25HZm5OT0RJbVBHTjJ2Tm4vQUVQUTJ0c2xmeFlleW5yVTdNMXlIcHluSGlIblYrSm0gQVh4SWNuS3EwK2gzMll0aDJTMEREVWVyL1VQVmJKOW9WeVpNNGsxY0VPSVAwRkI2WVRRdjJBTXRRYldtcUIyVzN5N3FaR2xtQjJoaiA5WGJLQVYyRm9sSWZlejVrTndUeDRaNFBkNmZoakhtci93Qk44Q2VmN1JIOS9BYkFBRzZQcE5EcVdIWHpHcjJSdjJsV3BaTFpIaHUxIGdwTmIyMG0wTlkxako1QXd0aDNEa2lmRE9IU0xiTzJ5c3lxdjJ6dFJKU1RaekUvditIMEUrQVV1V2hwYVFobUVkb1Q3a0pLU1F0NmggY0VOUFlKYUhZeWJYdDJsRENlWVF3OVZ3MDlnVzJydGY5d3hKdm5HV1o0Q0JEWno4UmZmbDkrOXhaWnZRR1NONktSYmtNZTMvQURWdyBrdWJaeGpEMVlzRnpKUVpLT2lpWk1wVzJuR2I1MDgyNTUrQjZhVlZjbm5LL2l1UU8vSm1YWExCTXFXSzFPMHltM3h0cjFmNDNKK0dMIHRwSTM3ajdKaXlHT3o1QXhPbjhSZURBd250aXk4bk1jZUQ4QVA3LysvZ1BXTFVoWUY2V3FobjU5eUVodW0rNlh3SVdSekZoVlJVOFAgYTdEcEY4cXVzQTlidmtPK0dSZzN6ajdZMUo5RzRXZ0xyTW04R3dpU2J0MEJzSFhudmxvNHNXTEd2bHRLcEpQU0dSa1lhMzM1SVUwLyBkS3lGdmhqamJoTTA5aHpLY0hCbm1BQ0QzUGEzd21zby9tM2pmK0FvSi9nTDhmZVV4SHZUVHdMdXlWUGgvTXJrYXBTN0ErR3dNSzJCIDAreXhiUUg1Z1pXNWdmdkFIcnFmWjc1UjRjbXpmcldlOXUzQitBZ0g3K3dkTllSTk91V2F6S2lPR0tlbW1kQ28zeTlTOE80NHBqeHcgY3VHQ040OU14a0NIVHRNcXVROXlLK25yTldqeDlHUlRLdTFKazlXM2IwalVObHVOSXE4Ylgyb0lsYUlFeXRxVmhJOWUycFI5bW1LdiBQS2NwbzQvTU1CNWtPYVFtYzgzNEordkEvQnBOMkJIZ0FmZlFCOStRT3A0b1VqMFlNc2c5VFppNHpHYWh1OWhNQ0huR096NTVvMkg1IGpCTU1HWHhEbVlNaXErYkJPVDNuaTdSK0tyUjJRNkFQb1A4QXBGc0I4OEY2bUwwMDd0RkoyclgxblVCYXJiWkMya01IQ0NDOEhzWlggbHloY053cXREaHZpY3RyNmZPUTdRQW83NXhscFE2ei9BTjdZNy9zQi93RHo2MHR0bUIzSkgxZ2R5OU1iWXEzUzdKSzlIMCtOU2Z3OCBYS3BHVWgyUXdUSHg4b2VxMDlnaHp1SDhIL0dhSGFLTU1PT3hzSnNJRFlBRlJQcC9wQ2hoY0x3dTJta3FacHovQUhsR01sZHNacUwyIFZiSG5JTU9GeDVFc3gzSFNWSTNWeWlsUFJBeHhzMTM1M1lJSEdOZmRuMm15WDNNc3VZQnRxd2RTMXRaS2s0VmRXVWRrR3VFU3E1VjggV0VlaUdOUU96bUVPcXpGZnJZTFZMY0FGNXNnbVRmRmNZOVBBUkpwTjQzKzNmUDhBQVVFQUV4M0JQQTJ3NFp0akdLVXRVTXQrWXp2NCBkN040dWVpSzhyYnc3NEhyZXlFL1MrSFZXMnIxS3VkczRHTHJNbURxN1R4U2ZQd0w5aDdjKzJDSFR4NVNrWmllMjVxMnBNdW5pdDVLIDZRVzNaZ2lMY1VEd01wVzdBNEI2M1QzeERZSnFxUGNMTG85YldSbktOczNzMzkrN3VyOXVINmk2Z1NDM05ybHd5YTBxQVB2QUZsVWIgQ0h0NUtTa1RJdGpDUmNXeU9ZTGJJNFZ1dDJBbjhEeDV3WVJrYTBHZ21NdFR0ZC9VQUQ4dW9JRHBqSXNiNFJqMjFoSCtiQ2s5MzZvZiBCOC9BNkVsbGZka1hFR3R4aWFkYXh4empvNC9JWHVOMFI1SE1qaVZvZVZVYnFyVzBjT0FsZEVzamkxVEUxNVRZMmlwYnRzYTJySEFPIEw0aVJMZzRlblU5dDlhSFRBdTNpaUg2VmdKaTdKV0w5M2UzODZ2b1RCaDlyT3N3aTVtS3VsQjhaQ1FGM3lhbHNKSEpYWGNEdWh5VU0gdGJhYnpCYnJkYlc3SERwNWdHcEo5RFFiSVJsbTBHamMzaDI1dmgrSW40QUE1QXdQeDJuMTJMTW9sekdEMm9OU1pNMkpGcjJvRCtsNSBmWWI0UFhHdzJQRVEwL2pXcHVuNlR4dEhsYWxpUWd3MXBuRmxCZUIzd1lLM3ZkQ2ZVTFlBQUEzMVVUTk45bDEzUTRZVlRKdlN2QXJGIEpYbWhxWkxBc3lJcm5yWTFCUmEzcDhQRCt1UThiSThlZEJReWF4dWhQZkRsb3V4ejlVSDlUNTgrdmV6a1FFT29lMmpDTHViY2h4M1ggUGN0N3Rwd2NjY1BMWDAxNGR0Q3l0U1RIVDFBNEl2VHZuc2JzZCtGcVREdU41TU9DT1VwUlowNVdsZ1dRN1ZleWFxdE91YTFEbCtPeSBMYmdWRGkzTjRQVTVNVG9RZVphdUtHUFpKK2t4dzlzQ1hlUW1qNFBCbzJFZUdBQWZ3dzVCajA1Y3V0NjdGV2hrbVJiSTJ1MCs0YWxiIEpGMk95L0Zodmx0TUo2MEZ1djVsOEdIQ2JEK1lxdmxvcVRVeURkUW90V3FBWWoyaWJDSE9Bb0w5c0MvejZvcTZ1Q09VNHV0bEhOcVUgb2VVa3hpMjVHSy9FTGRqSnRnaTFlSDd2bjVVRGoxdUNlSHdEbmFCNTdvREJtTHRTWVQ5L1A3Qng4LzA0RWQwSVZCRE1MY1hGSnNJcCBUNVB2UU5yM1VBV2ZHZ1g4cUtZVDludFN0b2FndysvSUVOVjJ5czN3cXpESGplMHI4UllIL3dEUGZ5a1RCdnFJb2MzYUVSdXpTeEs3IFNKanN5dThyeDU0WlNZb3E4WkcyRmkxeEZtUkZkcVRUdXBXVC9seHNmVmpxK2Q3Rk8reGp0KzFpM1FmZUZnUjdMcDkyY2xkSnBPc1cgaFZVa2doWHFld0x5M1VxR2tXTlhLSGFEN01odUZ3UGpCdmtCdnRxdWZ2S3ZwZlp5WVB1aWI3dXZ6OTkrQWUyRWJIcTkwMHRPRmIwMiBtMkVOZk5aRmVzdmRBQythY0d4YnUya1hlcjdRb2NqZzNpRTlibVZoeXFmWUNtY01FeGhSRFprWTRsRzlPNXhnOCtBeEFiK3ZzNXNIIGo2ek1Nc3FvTENOcEdiREdsayt6bFdRcHZrV1hFNVF0dUNlNE1pMnlXb1A3Y3R0ZnZ1enN4TVdoak44d3hDSEFDRHo1QTl6L0FFRXIgZExsS1dzVG05VkxkQWg4MWJweElSN09RMWVXWWl4V3phMlJmaDQybUhaYTJIcmdKdEh3SGhrV1VZb0xSbVo0TnBPeDgrMzgrQVFkLyA2SVBJNlJrTjJjWXM0OWM1U3dSbmVXK01keTA1NUFZY1hZb3BHU3BaYm1XOXdnNVJ0WVhIRjZHVlUyWGFLTmRkamhNVDhxUTdRTXJPIGpXMDdQakovRDgxWVVPd3VFb1cyQVh4YnI5Y01VUEQyWndaQWM5UVBQQmdtTWFHanUrai9BSXUyQUI5L1AvNWtsZ0xZOHBIcE94dE8gVnpXUmRrVXhVcll2OGtZSzljTzE2UVUrWVJ3N1Z3ME80R0JrQmdiZ3JTQnRnempIbkVuL0FIOGZRZlArZkZjeXlIUW9DVzNmTkdqWSBkTEI2S1UwZDJRNHpFdGdVTmhQY2tUMDlrRG1HU1lRaHdVT0JkTk9yYXlNRitUQm16ZkJ6NzgvN0FnZ0g3cU50eUdLRFZnSGJSZkNaIGtveEoyL3Q2OFdFNEpwNnNyR0ZiZk1ETGR3T0RKeHZnYkErS3ZCaGxYbEhqZy9OZ2lPZy8yQUFnNGRDZ1liT1l4ZGNsd3V3a1lNWmogUzZGNDkxbWhkK0JYUmxsWkpva2plZEpNRG5HWlE3U2M1dXNNY3NlV2Zid3puREVBR3llbWRXZGdYWmZxRlp5WUxKRWdLYVpOcWEvYSBqNVM5STkyazFkcVhUNmg3T3Q2a0RENG52NkhPN1Bud2QyTTNkQ2gwWlpCMmpWeHRIMkRnUCtyd0RwYnNsZ1EwMUhoOTBNNlNOUXc1IHVYR0pPMWYyYTR5ckcxSGk2NTFVSjlrVExJTVVQdyt5VWRENWFEVzFsbUtVMnpNMjloT0RuMThCYnA5K1h6OVJkTTd2QVVzR283NGQgd044RXRKWlE5VGpDd1djeVZmNVFvN3ZsWHcxOWJNVVBNVDBQa2dORFlMYUNHT1RxNnZXZmhEZkI3ZFBuOS84QVBIK2cvVDIyUW5kSCB6bVBLckhUd05pbUkxM1V1VER2Njh5QVNsODZjN2s3WDJRaDN3bnZoZ2hNZ3dMQW5JNGU4bGxYdEFuYjd4YVBObmpZT1ArM3VBNldGIGlZeFNPMnlpVFJoNFlKYmowOG5PU0JjVnY0NTRMVVRYVnFyczBxM0RKaEMvdjVMNUJQOEFoeC9Wdy9rbjVYYmlWNWU3SEEyMjAxYUggS1AxQjEzaTloRVZ1c0FQdWtmSUhPWG9iOUxkVDhnam0xaGFldlZPeUFscytoM3RBMkZ4ejNET3lrOXBkVGVUTEpvK1dzeGw1ZlZFZyBlckxBbk92SjZ5YjBxZlMrMnpxdVpORWVzUEgwRDhtSmtoQ0ZLM1JKVFVjdEFXSS9vcmtyTGpMUHJwcHVoQkpjUnhSMmtMNnhJa3Q4IE1SREZRUkVqSnhNUUNrcVZuVGNQN1p2MGRVVEZmcG5iOHBhWW4rVDVGSC8vQUhDQi93Q250VE5wQTdNQXpQdkFaRTBTMWJUVlo1cXogWEg0NnYvSU9YSlkybi9Kc3U3dU56SmRrSkx2QUpCMkMyREZTNmxzYkdQTFk4UE1EN3c0Y2tybitRbkxaTzh2eG1NKzdPNk1meHQzRCB3QUFBZmgwOFhYZW5PNDJwRE1wNUtIVjdHTXVPUnRzaFRtQ3hhUXJ2aWU0QitZWFlIVzE3bFZTRUtsZUhDb0ZsOFZ5YU1kNFQ3b1AzIDVCKy9BT2duVG02NStwREJsR1FhTkNGN2ZhZ2t0SFNheHErdm9jcFd1SnlpbDdBTWZxdHNsZ2YwK3BWWHhuMzNObXZCSjJUZ051NHYgMkdDRHdFQXpyTVgxdGpPRWxKdTA2M0d0NXFxYllhdjFGVExBWG9jb3B5aXVhMzQzRE1QdDJCeUYySThDMExhM2daeGZiQ1hoRW1xeiA1OEJidkFMZFFVRUJVY3V3MkFiSkJTdEo3ZHRGSTIweHRzcXQrN0pRZnhmUFRaQXNyWk9VelB1WnpGSGx5b0ZDS0ZMcm04aTFYUXF6IDBwUTdSbVR4NUt5ek5ZeGh0cTVDUzc3eG5TS25tT1VWaHE4cWhqb2FITWhwL01GcWNoM0JXbityN1J5WW53bkhFSHNBQSt3WW4vQUIgTmdFTlZHa0d4REZRSnJoVXFlbWtsS3dxdmFqMm44c25nZWJxOXk0TDRlMUhBUFpFUEVQZzIvQWFuenhZdDVXZndtN2d3SDM0QitwNyBwMlZuRDB4dVNtU3NiVzVjQnZPRFY3Vnp1MExjeWh5M1BIS3dqdFNwNCtrbVJEZkh6QWd5Y0QrZjJyV1Nlbk9yeWZCa2kwY1RuMEYrIDgrZkFkTEY0cWNPNVV1aGhvdGhNalZGbUc0aVFIUTErcHcxSWdaYUhZMVBWZkRjRE9tOHh1QzIxZ1NBR3gyUVpXWlJYSi9oTTI3QXogL2dNUGJEZjRURnFKSFY4OEZ4YkYweWdlUWNSdURiNmJVYlZQYTFKZ0g4cmwzTElsalFJcFQxRVF1QTl5S2pjTkhJbUl3eTRJYkpyeCBianQ2Y3djV2p6OHRiMHlNZW9wU1pESklhcDU5elhLNDd4RjArMWtCUTZyWDYzcXRhdDh4WkRCTU9jd1VvS0c4ak5yUm1aSENiSjUvIEgzUG4xOC8wYktjTmtYS3p0cnVObk1sRHErVEdzMTRHZ0tmaUJ6MFYzbEZIRG1GVjBteXpLM1gvQU9RWDZXbk1oTkdGRkxmWm5oMk4gOEg4QndFK2hZb09LVHJkb0ZtY3ZTalhKcWh3bG5aVmIzSGJLZERxWmYrR0JsWHlMdEI4SUxiNXlTYUhYdysvT0VBNGg4WnVSWFpzVCBuaEFRRGdHUC90QWtDSEtHUldxOG9TUUxnUFhCSnMxSE1LeU9YdUFES3B3b3I4Z21MWWVaVmZNQTlWMlhhQ2lxN1l6SzR2Y3puQ1A3IC93RFFmc0hVS3lveGtVdWVXTHE4ZUFaeExKRTdqdWYzYlNuR3V6Z1czbnBqZDRSV1pHZGFCZEd5dEdpZ2tqUXJRcmIzV1VOa2MvTkwgNDZNSS9yMDJMaFNZR2FLeHRHN0FTMGcyRWprZ0tmRG1vbG9NVmlsRnQvMmdQTS9vNmRBckNmZ3lJd3Nwajk0ODVqdi9BQi8yUElPdyBMRWZNcmhJdnRWaTZsV1dLQTB0TzBXTFgxMXVPbStIdjhxSUI0R1BNSnpJbm9VdkZqdFRHcnA4SlB3M1I4ZVJyd2IzczV6NzN3ZnZaIEJRR2NqbkhoalJ3THUrRFkxekpxR1NMY3dBc0VRT214WmUvQjBDV1ljRERnNE9BYjhnSG9FTVlzcTZIVURNYmRxdWR2djREWUFLQ2YgMytTWDh1bDR0Tm5seERyRmtmTFdNYWtJalFZYWJmOEFtVzBCVTBORE1NRU53cmVZWVQrSE5XM3p3a1BiT0x2SXdHN1dpYjMvQUg4KyBBcUxZTmdaSUd5WE1ZdVhSR1M3TU00b0E1VU10dXlhcGNzaHl0Y3JXTzQwSU1Lb3R5cTFiVzV0WUVyVnQvaUhjQ2FzR2pZcEE2ZHc4IE5OdFRPMDhWVWs2UzdDeW5ZYXZLNEc0THcyYzlwelhtajVoQU80V1JNRDJSWDh5Y3BPQ0dEN1p2TzFyTHo5Mk5nd1A3L3Y4QWlBNjcgSTRleENpblh3SE5yZkhPbnpMUnRoSC9pUTVFWXJtNWJ1dVFDeUw2MkhEbUpnY2VodFhEL0FKeUdzdk5YdEFzWURDSkpzR0EzOC95RCBmK2lTeUVldjZyUjg1akY4YlZRSUVZV0lIb2NkZWhOQjRTQjJjZ1k1SkRaUDloc0dNR1lzakZjb1RKN0lFZGdlUGdOZytnOWJ0UkdZIGxVRVlmR2l5N3lTVW52a2JFbU00OVY3Q3lQbFNsc1BoMDh0dUMyaG1GdFB3Uis0RmxnMlRGbUtGR1pHQmhFazMrckIvUVAzNkNXSmcgS0NOalVzU3hMVWsyMEZ5VllsTHlON2w1Ulh3c1dPUlpSb1ZqQXQyY282T3I3VDRaNFVRWlluODBiQUMyQnlUUXBuTWp3cjFlMlp5bCBjamgybHJTdCszb2V3bkN0OVBjT1ZiUzlYTVd0K0JzaGVaTmg3eEJuMmdCZUlheXN2Z3NtTmVEWnNJOGMrZmdISDZpKy9Ob2dsMS9sIFBoNVhTTHNKVmxXbzBhdzJoWVRKWjlPV200aTlQYlJGWk9OMUF0Mm9ZaGoxdFY3d1hTN3cxbmxPMk02T2twSnZmK1BudnZ3REIrUmwgNmFoVU9lUVNReHJKYlh4U3liUmlrRlhPTUtZWjhzYTR3SjY0Q0ZqclpneHhCUDJOdXZBOVhNeEdXVmY2TWM0VFYzZDBBQVA3K2VBZCBSeEJzUjg1OHVDdm1pNWtDeUtNbURZa2ZPdFNwNmNNVktlWVhJQXR1TEoySGhtRS9oN1UycDdicy9KbnhYc3o5N3V5ajkvZndIc0F3IFB2eXc4akdLYVVwcG5MckpzeUdLV09TTVVFTGJrTFpaYzBBRng4SFBJWXRZeEkwbUozWW84VmFjRGJrU1Eza2lHM3hBc1dlYyszaGEgNUQxT3IxOXlzeXNvQ2toeHJ6c0YyQnkyQjhvSFVCWVUwWEtySUFtclo4UGNGYnVESW5qdzZQdUd4b1l4NTVSeGc0YkNlZjhBQUFOLyAyRHBuVm04cjZibDJvaG5tcTJuWm9HeHJDSEIybTZGNllMRnJ3R0ovcVF0aDZUK3lBd053ZlQrTTJnVTROd20wZmZmOEY4QnlBL2owIEJ0Q0crTnRmMzltdVNxTnJFZXEyMVlZOFpNRVMxb29lTFhLTERqNjNNR0U5OFcwOWsvaUhUNjB0U0h3WkR3R0xQTnZaNDREL0FOTmcgNllWVHZtWWhzQTVJVjdJU1NWbDZiMXRoWUs5cE5mRW9Zc3AvRkE1Y2ZwTU95TW9leUtmVDFWOHI5U2FnN056eFhHVy8rRTlQRHh5QiBBZnQvb1RyS3lUU05NaGwzVUVpeHlmVU5GQnEwa2htaGtaUzBFS1JwN1F0aUlXV3V1MERxNHBZMGsweWc3R29PNDBlUXlqMnpoVHZKIHhobjhEQnZCczhYMVh0czRYOGd3dUhzbXlFOXltUlphL3dEa0NJeXhWZGhpb1lmOFZPSHpDN2hEQnZuOVNreWZGeWZPSGJ6aitBQUEgQUIvRkJQNFJwZ0hZZ1pURDFvdVg4YlBaUjY0eFA0WUQxNnR4VDZSYUJTR3Y0NHVDZkRtRUZ1MUZLOFBuQnhneER3V2Q4U1RaczRBQSBmb2ZmdC94YWpBbnVHVXRzb3NETWsxam1nU1ZaT0RoYWxrTzh6R202blBSUTYreVUvRHVEWjhQZzFMNXg4SjFuVGJRVTJQWlRaeCtRIGY5djcvd0JZdm1LdmNtRE9nVDZUTmg5aENlMVluekRETXNZOFdBbEEvQTI5RGg2a0lZK1o4L1lZVmIvdFl5b09iZjJEWU1jUDMvb0EgTUluSmQzdkNzemVORWVQOWI1LzBINDZ6Z0JKUVlFZVR4aG11MXVVVnV1WHFxRitlVzZXNnVEc2pOS0o1NjdyK3NpMUJsbmZFVDN3QyByc00xWGZCSXQ4TUw4eGJtT0RJWUh6SU1EZm1vUHdhNUdqbkp3MkVkam43Qno0QXY5RzE4RHlsUVprMnVkU1ZTdjFZNmgxVUpiRm9NIG1UcVFkdzdrZXRnQzVRdUhybmF1NEZ0Zk1JNTRnQk9lMzVRUmtZNDdPd1I0NENmQWZRZWZkSjliZUZlNlkveGJCdFIydUNMVzYySlggakszVzlPT0RSVXJZcnRESlgrSzNUOWNNaWZUemhjVkQ0dHFQaHVkb3RDTXo3MmI0T2ZRV0EvNEJCUDhBVnRLL1c4M1dSWWlTdVdyRCBrMmR6QmtyMXc3VnA5c1BwUm9FMWZFTXNHOExiSmFqNVlNejhnTnFQN0xPa3Q4ZWlZUGV6ZXdvUElFRitQZ0g0L25sYloxTUl0STZoIFQzdmlJT2ZBcFR1Wi9yYnhLQTJ4WVUrTmR6VEJra3pta2w3Z3E1YmVuTmY4UWNoczdYTzM3OTRNOWJXM1RxUkR0SE1ESzZmeEt3aHAgaVZNazBqSE1PRGhXWHhYelQwVWxtRTlrTWZSRnRndFE0QXIvQUFPTGF6L1F4TTVhSnovcndIZnovUldQc1JMZ0MwT2VrR0ZMTitHUyBFeDBuSlgxU1pLVitlY2tzQmJNR0puSkI4enRLUXhuWS93Qkw0K3dSSkNjK1g5Ly9BSDgvaTJ0UkZUeklwUlB1UU1reVFLYnFRUUxZIHRDalQxb082SEtpNmo2dlZ3L01BNWhiTUo3QWh0U0hjRStqNWlNTTltWm1CbS9CNytnZ0g0Qno3Z05TOHN3d1dNeWg5aER4bXFBNEUgaEsrdHNrZ3NZbHRGVGkzMkhYNGN3SGNOblgyUTVaWTlTN2tZVkEwV2dNV2NQT0hBR3djQlBnT2ZIOWFqQ0lYS2pJZVdkenRsTWFvViAzWmxyUHl0VVBObWtNdVVoN051M2pUemxlWkl5OEw0cng4L2tkZGhpUmxocVBtRkExa0JFbDNwL1ZGcDdxOFBlVmdyME8rSXFuUTVUIGNIQkRaRnZTWE5UMlRZV0FDODdZaXZsb2pCbXg5a3pnR29nSGQxQmZ2MXVBdmo1aWtoM05hQ3VoMG1uZ2RhUzNFMGozOVdOci9NbFIgUzEzSzdnd1dSRFpOR2FlaC9NVmUwQ2xCc2dtVFYwT3pNRWMzc2xIbndGdTdBL0FNTVg2dExZcGxIeDBXN01mVU5TYXM2bjVLbXJ3MSB0SHB4RHEreG5lbTR1NFdRSDVndHdxdjJPQlY0RUhnTVdTajR6TFBOdjM4L3NBQStBdzM4OHJQTG1HV0RPTWdwa2t4WmVUR3NLMkFPIGxaR1lXU3h0UVM5VXJrSHNCd01KK29TMUZ0aDdxVDNDaDFYL0FGa0tMWDVzd2RqaUNBUDBHL1B4NCtmNnpQemdVOFFzdUVYL0FMaWsgR1dQUC9MMlUyUE9RN1FmTEFoWHR6emZoaXVPT01iVUkzSnMzdVU1SzBNY0NiT1ZDdWswb3dhZmo5TTIvVlRJMm5uRW1iaVNLT2ZHQyBXSHFZbzI3Rk1ZUG1VOG4ycGpYNGV4cTB3VW1wYko0WElyc3d3SFZ4dmZENEIvZmdBRFlPbm1sbkE1NTR0ODhCWkt1ZkxMc2xsaUw5IGtWNlErWUtjcGNXVlpGSDhETUdGdGJUMlNuU0RBQmVPNys2UG1ub253bjd3QVBuejZDZ2dQWStrempZbHRySU5BdWRlamJneGNKTHUgOFdwVzdSRWNIeUxMYUt2RHNCaVlZaHNqSml5UEY4V0JkTUZrcC9nZG9WblpqeHZmOWZmUWFpQWNCQU02SEhkYlcxR1VuZWR5TzFrVyBSS21WdWtCMlRKcjlocmUwTlgxWlNxdlEyQVBNY0xncXVZQXBQWVdEZkZzbVVRbnhtL2U2dWVQMDd1bmtBQWZ3a200clpzcVNJSWNjIDVGRFNia1pCalJtc1pidHZSb0ZNRHcrWGJJL2JnTzUwbURyR3ZNa3NFOVhLaS9PM3RjcGZPWTdsK1cxRHBjNEdwK1lCZ1ExSmIyRi8gWVRCaDJWK1NBU2tzOFZEajVqSk1wK0dISUJ6aUg4RHR0Wml6ZkRRVHN6Q3JyUk9lM3UvVkVmUGdOL1dJdGZNTnBYQmNpZ1haOHVRQyBjaU1GYnBJZkgrSUpwTEljWFRlbjNCUTYySFQzeGZobkovTFVmYzlyYUxNZVhoSjJNSFVYZDNueC9ZQVBYeVk4VWZaWkJKRnJtbU5zIHlXMWtyZGdyZTRLSDAzNjBiSWxYSnFFS1dNbjE5RDJpWk1zaFBUb0w1WVB6cGpNczJnaDBiN25BZFhlQWZqL2FMZ0w5MXZBTW1aUFkgS3JQRk9mcmNDOG0zWjRmSDJ5SFY5amN4Zkh4eE1jd21YQ0hJSWM1Q3NDQnpEYkNndTMxbXEwamZBWjkrUHZ6OEEyQkI2Rkp1MHNYVCBCbloyTHR0NFdGWWdERnNxaldSNzdlSXd0ZDFpYkg3Yy93RHdqeXErMWI3eFdValJ4ai81ay9iUmdjeThIeGNzVE96YzFQV3dNQkRyIGQzanc3NEg4d2ZQaVdocTA0ZmNOVjg4ZkE2K3lJOEJ3bjF5NE15TXIvalA2VGFQNGk5c0g3M3QzbzhJU0ZOU3NDdDU2a3lWdlp6UWUgQ1dGcC9XekZvVWpjRVVwMmJjdHdwL1RHWVE1bmVDSEE0ZjhBQWNGbXpPTDhtUjBsSkNmcjkrdjFCUVFDQ3NjdDBlSytwYkJjRFhZYiBwOUl5YXVkNi9jTTdoRUlvQnhpeGJVd21YQnlUWng1aHFVYmd0cTFROVFMTFErTFBPRWtJNytmUC9RZUE5V1BSNjNiYXZUMldVaVpOIGp5MWFHZ2lLUC80bGRaRjIwUW5PZGZSSXJlT1Q1dFZpTHNmY0xUVmJLUUh4ck1XY0xWeFZab3dWMjJNRmdCZnFqNSsvODh3WUFJdHggbzltTnBab2xDVnRDZkdLT1BlVnU2NUp0dTBncmp1WGRQQklyTHVQcDB4bW4yNDJqVWs1NFJpVnBVVWloNDNXVzdObGJvZUFpTGRmTSB5cE10OGFEMlNOTVR3NlR5Z2xXOGdUTUZ1VmhIdmg0R0llb1JrY0lkWGh3YytqMzI0dHI3eUs2Tlpoem16czhiQWVQMUcvZGRsTjVnICt3YWZzNW96WHkwU1NpQjdJc0ZrSWRmaWNDbFM2Y0s1YVp2ektmRHpFOWt4NE8rTjU1SGhMSlBuaXk4dkd5SklQZnovQVBZQUhSVmUgQy9ETXZsQXk4ck9xVU8wSVkwVFI4TVBiRXU3R2hEc0lXQlpIQVBka09HdHNpL0R0VFMwUGdUa096TGZ2aEQyelpLdTRPZkFQejhmUCAvUWNWdUxTN1FWekRzcnErY2s1TkkyRWFMSTh3YkhzMURLSWJGRnJreXY4QWJkRFpFSVBZQWVqenc4OU9yZmE2SEY0ZlNnbUx5ZndRIGQvMy9BT2dsSVFWWEVaUEc2YmdhZmZraUo5czd5WUpsdDBjVXdYTXZlYTQ5eFJiYVNWTUhFTWlOam11UDFHSlc0UEp3enlXMzd3dEQgdGE3RThZeUV1dm55dkE2UXQ2YjdQcUFiU2FRWXIwYllCYmdZRnNLV3pnNDh3bUIzQ24wK1pCZ0QxSkhtTEl4OEYyWXpiSUU0UHNCLyB3SFFkY09vU3IxZXA4NXlNdFZ0R01uSlVsNnR5V205b3B6ZEJiWkZLc2cvWjA5a1R3Ni8yNG9jZ3BLcTJUc3dXMFZtc25FZzJFNThBIFFmdng5KzZOeWxtU09jTFpubmdRTzcxNFM0L1RMVXZ4UGlnVjlYRmgwK1krUXc4d1BQTVFWSndRemtORzRHTEdJMkNUYUpzNkFYMzUgQlA3Qno3cVhzd1dyL1NXTmNUMUtHNVoxUzFrajJjcTRSS3JUYWxZWEtMM1FtQi9ocC96dzRPZlI3NERUMW5EZEhrWUR3ZHQ4L1ZDUCBQd0h3QXhLem1LT3BsYVN5QkR6bEpjZTQ3RGpITHRvYy9QUDRTejl1YXRDRVNzMm1GMWtRVnhIK3h5NThnZjZHNHRDSGRWdGxWbUJzIFkvTjB5NE1qdmxaWnRuZ2FwYlIxeW9OckMyVExpUkJCMlBQRjZlU1Vxc3lXUk9KQzVCMmVlZ2VyS0tFV2t1eTRHY2pLblIvWDZlczYgOGtKMXJOdHVSeGpPTTA4Ujg0bEZ5Q2dWbG0xSERCcTZsUEp3MlkvSkRaK1FHYm5ITm41V0dTanpsR0FKbHdYdTJoQlJXaEx4U0JZUCBxd21acWFuWjBtcFU3WTlXRlJUU3J0QTRxQ3RDOTNtZ0t2NTVOZUFkWm1ZOGtnaytTWXRMeWZ6L0FNTjFaTWVMVzRGQnVFOURjSXlTIEdmTElFdEdkcFhwZXdueHlwR0lCcEl4YUNlNFRMVmZBNDhQcWFRNi9yUUhaRlpFeGY1TUJoSGFrM2hCZmtEZndQZ0VISTliM1FVUzIgcUs3bUxBV3lpZVJSM2diVzZmYkJqczNjY3FVdGtBOHhrdFN0dzlvVEFkWnVFR0NIUmtXcnlkR3N3UDhBZlFIbndIQVFIUmZNeTBNeSB2dUI2TGszWWs1VzlsdFBGblRCOHVIRnNaSWxLejR3aHc2ZmNFTmtjSzNWWjQrQkJNREdiK0hObVpnZW5qWkVmZnorUElEL3NmaU83IEZzSzZPU2VMQm1YOXFFWStmMkY5cVR4S0VCQTZtckdsR09Zektyc2lHWVQ0ZmVtdjlQRUhBbmIvQUxWbi9tay9pSS9RYUNBUWU3dlIgWEUyWkdCZUVxWlhkOE00NDd2U2dZc08yL3dDV3o1SHA5QVF5QlRsdEkzY0VyTDFPM2NjbXg3K3p0cmdBOG0ra200UTYzYlk1aTJxKyB6amRxU2lTa0p6N0lUaDdETUZ2bFpPUUY4WHpESUlaSmdlcnc2clphL1BwMXhXUmhSb0o3RnpaMjMvWU9mSDkvQWRXVnpHQjh5V0NrIHpTNVNlbThsWHpzazJ3WW8zUnpWK3ppNnZiQ2liK05vZGtha0pnZGV3Z2diQXVuNWd4bVF4ZkpnZmhQMy9GZlA3QUE2WDJaVDdvNU8gaEsyaGFlRW1Vamtrb2hnQzFWdkVNRkpURFhKNHdRWlllTmtRNFpEWkFLZXBJNmVUclBUbStERVpIU2NVazRBeFB2eDgvaUF4NkdvNiBYQURENjlQY3FmNjN6VUt5Q285cXprOVRtRkxhU0dpVW4vTU1jYlEwUGVJUGI4OTh5cy9vYk1UQjRmUjJEL0x6K3dhR0VUcVZZM2RjIDNLdERpLzRwWTd1eDdycWpWYzJ0SkhWZzJMaXZoV2k1dXZPN0JMNHZpZ1BEWGZGRlllR0QzQlBROHBxdlZKclIyc2hoRG1MRERyME0gcUI3Y2NiY0lkd3VDM3FFWkdBT3F3TFFVcDNCbmtvcnJPSENmTm45LzU4L0grclVPZ2VrekxyZjBCdHUxYnM0S3lEYXlYNnJ1Q3dWTyBIOG9UTFY2Myt5V1F5WFduOHdPTnEvQWFqQ05VQ3NMV1ZsNDFEK2NxTHovYUlCNENvbXBSc3V3eURvZWh5bWN0Z1UzVEc3ZklyM1RxIG9KQWVyeGJaWE1xR1BpVEhBeE1jQ0UxNHhYN01WWmpOV1lzV3piNEU1dGg5K3h3eDJEcmtyOWdxOERYOWV2Z3NiVzl3VzBITnRrZEogR09GZXpHaW14TVVYM1FNTWxEM0Foc2poVmJVKzQ4NE1WbWpkME9jdkFUR2srQW9QOWdBQUQ2NUE5eHltVENaM1JJVnh5UEVzTWpFbSB4OFJxcEZlR3Y3YUpRTGJ5Z2hNSTB6WjNrd3FxSUFYRnJ5c2dteFFIZzVjSFljNHBxLzhBZ3VWaEliSUh1N09RS3lEd3lhKzc3RGZDIDlxQ2xPQytIcCtaTWhtQ0syMVFMUVF6aGhHSnZtTHp3WjE5clVmdGdQOW9zTUQ3ODgyQjBmVHpSWHVYUVV5TnBqYlVtdHhLL1FJR2ogNnloT1JSM3ZpcGNQaFdvK1BrTkRJZkEzQ3BVZGJacWdGcTdNdFBCdTdLdU9Qd0IvWVA4QXYxSjVoeGJNeDFWU3JrQzcxNm0yUXliTyBZcXRYWG9jcXhuY0M1QjJDeUxJaGg2ckRweUhWZGwwZnlwUHJQYTZ2OEc3QkVrR2U4K2ZRZC93NnNJRHFxdDc0d21WenBWdjUyUTdRIEpSbE9PbnJsc1ZPeUlRQ1hVb3RrNUpNMU9Wdk0zRHR5aHNDamNSZ21qSzVSWlp2eGM3MVhqc0FBKy9jKzZHTUNhUmpKZ0lRaDNGa2Uga01DMEJDVXJ2OG1ueVhFbjJObFFGbmFNNEErMnJQNTRVK1BqeFhuNTZyU1ByTXhkT1pXTkxBV3JUTlZZQStFWVhqT3Y4Z2tQaWFLcyBKRHRwd1gzeUhEVzdnWkNIRlh4ZlVwMVZrMWxuYUxNR0ErRWhMVTRDZkFMNS93QUJnVlVlREgxVXdaTlFWZmJTM2JjcEQwOFZsYkY1IFRFK25FK1VMWGdMVE1Ic2lmTXhEc2hFT2NQRDFMNnk4dmd0WkoycDRYSEUrZ2dENkNBeFh3SEcyRU5TZVdHemxkSXlYOWtWeHZjRncgWTdySDZoSzNmRTNsRzhXREREdUMyaHcxOVBCdHRZUG04YlpjbTJFa2U3RGZPY2ZBQU5nQUFNVEJRZkxSem50MU14ZE5WQTJDQnM2UCA5cU01N3VoTERRcHlzRkJmcXhQdE95TUVUQVJnMjFmcDVlR041ZU1WY1dzb3h4Mk5ZNG56ekJnd0g4TWNHVExLcXVIaGZCYXlkR2lPIE5teGF5U1JYZEVERW53YnJpNjNNcDhRd2R6UVZmYjhpK1NXNDVITmMzMUczTFRYYXJSK3Q1clMxTGRuU2oyb2k0eUEzT3Bkc1QyZ1cgV1JCaGdlWTRldDFYTVlJYzZ0Q05hV3F5UFBGME5aeHF1cnZ5cHY0RHo1L0hmNUdsSGlQYldXbjErOTB5TnM3U05SdHgwNWJCNUlSNiA5TWFnZFQ2UnA5VFUrd09Cb2I1TUQvRWVKK24rbG5qRGczdlVCTEVJRHc5MEcrejREa0RCZy9qYXV5V0lwVEQxZktTZXlXUUJNWHFwIHA5UzBiYURZK0s2YnFhS05GcUw2RzRHZFBiNGhMNmVqMW9RbjNndVdZVHRCOGVyTVJ3bm5PMFd3WUFOZzJDMFdvTjRSN1V0MmRGcXYgUjJ6YVdGZGNIUkE5aEJsaTQyOXlpZWkyYXVManBjekMwaytuVTNDZXB2NmtyWVBLMjBpMGg2T25Mc0Nua0wyeFByMy9BQytrOUhUUCBHR1k3YnJ1dnAyaEd6WUluMHlUR1lGaWxVWEVVaVN3eVdWbFJ5cU1LU1V4SzdRTmpjS3dTaXZmSDVBL3krb0kzK2Y0OGZuSVVvc2dXIHJnVk80QU5HVnZKMHUxeVNiVk93REZTcDVhWll0WHFaNjBKYWUrTGN3T1oyOHhPb2R3Z1Z3dC9hT1RjNDJSMlI4RDZDQUE4QjJCQmQga3gwc1FXREczZGxXb2s1V295alJ0STFmVXVuVXhEUXdObmxoZG9NdGZwNjNNVzVpZ256RWQ4SVdYVHJJTVptaStDWXlxMGtKYVBnUCBQOW90L3dDbU8yUGtCODBlRGF2ZktmVXFOdDUyTlJMUXliVVgyeHZsSzF4aTR2c24wbGpNTVdUYUFZSFE5b3Zid25zNHRXcHA1eDN0IEoyUUN2NG5rSEg5VDhhVDBBVzVwQ2lLempiS1N5dUN4WmRjY25wcXlLZ2ExeG50cUkwMWc5RHJ0VzVqSGNNMmU0YmdmQXdKcE5sWnggcnVzdk5JMmlsQXNjQUdLRFlIcDlSNDhsWThsV01oNDlTQ0pacEhFUnpLMXViYXh6U1hIUGE0dXpMVzJRRWEyeDBLMzhvWkVtU1JBaiBLc244VTZBQUVuQTN0Wkd1QmxiZTNIbFFFTlRFOWNyeHZxL05yYWs0UUdZN2N2U2JDamw0aDRvdlcxUTRkZVpHVHRZMzBtdnNseGNQIDFEOGIzTW9VSmpBUnNKcUh0VFlQUGdPUWJETzFlUElFN0hTUmdlalF1ZFB2ZTdGUEd6dE1iUmNiaWhwcGJmakErWndNT1lERDRnU3QgU0JDQ1kraGxNQlp3MkU0Ty9BRDRBQndIbndCdC93QXZQT0orVnFXYXJzcE4zRHJZbXdFK1pVKzBWZTVhajZIS1BvOHhNaHdvYWZ6eiBZU0NpYzV5VFYyampQQ1RidDRBQWZBSHovc0FEMXMrNzV6bVpjYXJXMUdKWjlOR2xQQkVNQUdDWll6alliUFNUNFF3NDFaTUl6WDZlIHFJZG4xcWpHR1lXMDNJdEREbUZwRzBjKy9Zb0o4K3djKzZwTkUwY1dwYlRxZzFFdjFHb2lrMU0wc2lRVHZ0WlNscFhmWmdXbDlPUEMgR1A3STF5TnFYVmthclNqVlRUYlVUeHh2dExRT2xBN2xhajl0cUFlU1FUd0s2N0hDSHFFVXFUdko3VW9kSjFMV2pzMjJGb25kdE9vZCBnUXowUzJNQmJoM2dtV3BoWk13Z0hlTVdFQ0RoNG96NFRyUEVHRmRqWDVlcU1BQTVCaGlBcmFFdWZWSFRGZjIvalUxTXFTSEYxQXFiIGFnTnhJY3FSRTF5aHhoYjBTdDR4TXF3UE1ZRnRxZ3VGYU5BaG4zUzBNZWM0Y0pPSU9JRERrQ0FnWW43Yk9DZXAyVytHTUxMbzFTTDYgbG9kbzNKSXM1Ymo2Y0E5UzJNd3ByN003d09DM1pFT1ovcVdQZ1FYd296Sy9HUmxWNmgreVp4QmZ2QW44ZC82U2RUNnNNekt2aXQwTiBTUTdJbVZmYWhHSkd5YXJWMkZ3VjdsYkFJR0dQRDJRdHNpRXRwNWp0TGFBSC9hN1JVQlBoTHNrK0E5ei9BRDQrZnhhc0VqNmFXUFdGIE5aTExNOGdqU002ZkNOc2NZU3dlYklyelRrTGQ4cVBtRjR2cWM5STRpVDZaSUZZeWZVZ3lLZSthc1lzTXUyazd1UmVYWEhYMVYwblogZFZwOU52bW51U2tpNGQ2aVhDd3RWQTlzN3h0RlRxNHRQY0hDWnZGSnA2K1llRHcrZWNjQm5LT1RiNEVwTDJQNytmQWNCMy9va09EeiBJWkxXNVR2V01rYTVOU0FrVi9VcnNyc0tFTHEvZmtOOElWQmRtRmtJZkgyVGx2d0dwUFdlTFBnd1ppa3UzbjhmK3dZZFdFTU5GOHRHIFdldW11VU1KU2NDcTdqcWRvbUI1RkRiV0JzTFZBQk1MK0VReERUMlQrUmZIQzJnZkJoZ3RYUmxuZS84QWZ3QUFncitHQi9HcU5zUGsgaHRPTWpSWU13MmV1NFBKZDdZdURPWUZNeHNKWnhWN1VJVEhDWlpDMjRENWp4V2xQN0d5Y0c3TjdtajhJTjQvWC93Q3Z6NzcwVk5JQyBVelRUOE53K0VpeU5XYnlSNG10d0JjUmtheGF5ZmlqSUI2bWZmSmlDY2ZDUlJ3eHhvUlo5dUxHNzVERVYyMlpqdUFQelE1NVNTSzlxIFVQbXA1S3ZTRmJyWm1XWWFISzQ0b0dHUURzajV2Q0dQVDBmVkxZQ0hPbWNsRnRKVFkzWjJTUWdCQndRZC93RFBnT05Zc0JzZ1d3aG4ga093dGhVZ01tcHpMdG5CbURzaktweDhhTVNDZkRSTGd1eVp3OVdBNDc0eU0zZVFWd1hoS1NrMnAyaTU5NERZRUV3WkRoeXhsOCs3cSA0RUlodmhodGlXUTREWkRFSGlnZmxGR1JmVDNDWk1vZDhZTjhiYXZnUWEzR0RPTDl6QVp0SmRqcURnZlA3QjREcGJ1REFyNU13UGFFIHJPN01Makl5TzRkUE1WZkxEdml2UTJvdXBYejVnZGIrRmU5b1BudVFmRGllTS9vWkdxdDJkamVMOEIvWG4yd1B5V0N2RTBZTjVvVVEgMXlKMncyU0JmNmY1SFBGOU1VU0JrbWtnZkE2bFkzS0hPa1VVeXRRWGlXMUlQMjRlRzZtRWNoVDZTWVc2V01xcTNuUmNrYmNZZUhZUyArN3A0dVZNbGNEWUlhMkdsekdSZ1pLNVVrOUR0VEFZTUtGS3pxQUgrTGpnREhmdkFBRi9va3J1UStJY3hxYmFNU1NWQlpvMXRZYVh5IEZ1T2tKNHRvckk5WExKOTgvaDdaREMrbjNFZXRGRGVHU3pLemFiazR5Y3E0SUVPSHdGdWdjYWk3UTFGMFZaWS9VUVp4ZGdPNVZLcXQgRmJ1L2NHWm5yNlI4VzBXd0NMTU1DM1pDM1pFTzRDRXpmdEg5U3pqRm1FMWZUbThveU9iU1RmQWU3dFJmZmdIUGxqdmkyQlZ4dVZBWiBMSXNLeHFyQ0wya2UxRU92MGx3S0ZOUW0xaDJDNE5QZW9TazY0VzNCa09IcS9wYWRXNnozNDROWm5OallQei9BVUh3SFA0MlpWa2FQIGNjdXlJTEE1VEd6ZUxlY2h4WDdzM3dzTEhHd2w5bG9qOXZFZ0xxZTFKTDdLK1RnMlhIaXVUQ3BEbFhobkFDbTV0UDNaRHVsSjVEY0EgZUd3THkyZXRGM3JrV3lMOE90NmdwTzFFK3dZY0cyN1FiVlY4WmlmUEZtb0FmTnVjSDhFRUJicCtva0pDNkZic3l1elpDWi9pbnBJRSBEYWtuNURYVFBIbHNDK01MUXI5cjBPR2gxdStCeUZrbzgvVmhVdjFtM3haU3Mza0dFU2VjVzcvdjVCMkUrbjYvc1RhcXlUNVR2dVRzIEJtSkJaZnF4YmtXd3lDNVMrNVNndy9DbjN4OERHQ0V4VnRvaFE5amJuNzFmdWFQVndUOS9RYmRBSC9BSDU2b2lpR0ZIc2g2cGEzUUwgYXE5Vmt4SEJQRHNGbTg4ZkliNFVXeDh5eUlhMnlVTzRjNEF1RGJPM041cS9uVHozUnE1SVI5Z2ZnSHZpL2RPajNHS3MzOVJFU1FqdiBpbDJpUW9pazdmVFROcVRFNForNXN1QjdFcFl5aXB4akhJMkVpZTBkeTRuemYvWTlkbG1OR29BV24yMWVhUmhXNERUU1MwOFdFSGRxIGxzbDNaR2dDMks3NWFqQXljRFczeDhwK1ljZkxCK0RUNk16Y0NKa2dic2s4SFlEOVJIL1B2K3dHdHpyZFhuM0RPeEF5NkMxUTZiclUgSk1RN2NyQW1NalRiU25GUElhZ1lNR2JVdUZPcjhScVpBNEtiVVlXWHBuNXl0ZHIvQUd4UDhDUFlQNkRpZWZwODdsMXZuWElCVzRzTyB5Rld0TENTWGZua3doOE5vdG9zQkZ6RjlEWkpsSm1IQmZXd2U0QVdwazd2MWYzZlJrYzNhS1NiKy9JUFB0LzMrdE5rNmpLN3phVE1WIHkrVlhlckpxSGRtMkpJZHIrWDNmZEUxc29lVXR1RnBwNGRieG1WK0grZVFRM2Y2Ti9vYWN0R3JxdTd1b0lBL3NDRDU4cEFqeUtDSHcgVDNDTk4xSk1zS1hjdE1Yam81cGkxRjFOODlSSkhVT00wRnlZWVROaDdNZVpZYWF5YzdVWjlwREd6bHhaQ0VudHA2MGFIcjRYVTFieCBKOWNTb2dlc2F4c2xodFFtcjZnK2VZZHRrTXV4dzhHQmJCZ1Q1NXJtREdkOEtWQ2pZcFdvZkZJQXZ6OWkvWUFEMkI3am1EMGRYZkdvIFhQSlZLSGJVS3JwWStzTElqaVhCTlEyRlg0ZXdKNWloNGZEL0FMejNRMk5rdDhZVUsyWnNaczNzYkJ6NCtmUDcvd0JiYkdTRzNUb2MgeWhsQnRGS2FrNjBQVk1BZndJeEJVN0hsSjB5OTdzMCs0eXFHdnZDcklKTDFZVDdlaDFVdFlldW1TbnVDOVZXbWZVK253WHA5SHI1QiA2Y08wcklzaktpVzFMb0sxQWxrYWIzYTlWNWdxVE9lQlZFZXpEYlF1azJDa21TeU5tbUovd0lCR0Fxd25tek1IM0ZZQmhMczRQaWZmIGtIZjhUNzhmU1M4RFlScEpuTWlCQkpJRmdYUzZlOEdSVlFSeFNOdkhDTkkxM2FOdW9qQTZtQ1RLNW1EbmFjbGpMRkVrZ2tueE1jYlAgRWlicGZhZW1aUmhYQzk1Nk5zeUhNZDlONTRBMndxM3BuVU9xMlRMWHlWa0VFZVpZeFNKS2N0dkRoekJpV1kyZEhQVi9aZThzeXpUWSB2MjNzSUVPY2YyRS96NUJQOVZ2c1N1NUhORldlR3JGa2hxNTRiRXZBQzdENmN2bG9URjREcHptVmVZY0xodXhQUXlBY0h1SHdabmJOIG91VHpuQ2F1T1ZFZkFMNkR2NS9vcVN4YVcrRDNYaVdxaHRyRW9IUUxaVjZmNCtrSjUrMExOaW42M1Q0YjVTWmlxdzlnT0NydUQ1VmIgSVR4RjJnOHMyeUF6ZXdmcUE4QnNFdzJabGZybHNLdGNyZzBsV0ZxdzZUTEo5Ym9XbmRlZklyUnFFVnp5R3c0b2ZlQ1phakI4NUQ0bCBhbUdLenRlNWcrYkcwZEIyQUFmMkJCMkFrVm9HZkNYSkZmVXVxYm01ajYyNFJkTFY3d0FOSDJYWE5BNUcrb2RwWklramR0dXhIMnhuIENLS01ZcHpqL0haN2o3aVBpejBwR2xRNWNZREI1cFZsZzFXcXpEVFFNbVZqUTEzVXd3SjZDV0JNNWNSa0x1Ym42bVo0bTA0L295MXUgSXV6MHIxeVpCcGFQVkpQcmR3VWlNUUF5UWwwRm5SUG4wWFRlb0xPbW41bzdaemlJY2JLbVlWKzFhZFdiWXNaYktJamVmaVpJQnQ5VCBtRW1aZGVFUmdhVUp5TWl0MUQwUWxBUU4rQWNoUmZXV1pEVTZablN6cWtRbERydHNxY1RIc2hzS3hHT1c0dGhhcTZGaStCWm94cDRHIHBtMGhaalJZN25rOFdhMnpWMFRWbXJJdm14TVdTbjJnN3VCSkRyN1VVRXM5a0FxU1FQc2hKWDZ5RDF6WE9zVm5xVlBJUTlRdHdXb3kgT0ZnR0xHQTNBMjRiWXN0QlNzOGRrMWU5cXdHTy93Q0o4QUFmK2trdHJkbU5Bdk9zcW9IWmJEMWZ3Qmh0aVllSFhIWkN1cmlSYXVoayBFTmttWXNpRzRNbnRxQWJhUGNPTWl4YU1qZDBmdkI5QlArM1BUL1Z6WmhBNWQzWWNmWEpna3RuczUyckVPeGtuaXdUQXRvTFJIS0d2IHc2SGZGdHdxcHdRemxTa0xhd1R5YnpWL0pubmhLU2JCL1g4YmR4K2cxRlNka3JjbUJlSFlEVjVJbGt3S2ZXM2RQbWFhWkM4SHRCeWkgTkF1WTRHTlFoaXQyUmtYM3dHMmorVkorNTdXTEtBM2J3YjhnL3FBKy9IN2o1VmxTSkZoaGVKb2k0M01yc01VOW0zSXRER1R2cXoybiBvWkVhQXNKTjRUT2pwSWNaWVBJWEUrckdNOGVlRjhYUkk0SFQ0bzZvMU04bDE3Y2xOMlF0cmNwVnNoVHErd2pGYmlkK3RDbXlsdFE2IC9NVEh2amI0UGgzRmdQUTNqM3JQYS95cHNtSnkzZVFBT0ErM1VDdDBIWkZnMWZiV1ZBaGpjNVNtL0wxVVcxV3hCaERxOGxlcmxYY0wgQVc0ZThXUnVBZEh0c2hTMEdZOGt4ZHk3bitvUkhBQUQ0RDkvWUFDbGZGdXA4MTREdWRTMlJXK29Td2M0YXZNTXlrNm5zSmxGeWtkRCBQVU44eFB2aW55N2dub2Z6eUNHOFlsQmxvVmVqUE5xZmRuZy80QUFmNTkxMk9sczM1VUZnT0dVVXlYWnEwcW5qYlpVN1ZwcXlMWWZKIFVWZVYybGtUM0FQOHhrd3E2SDhCUDc0USs3NVFvVDkzWjNxNTRBVkVmMkRuejkxWlNmSEgwOVJlcVI2a1RzamdCUFlFeU82NmZZdVUgZWRubGNlVnM4TE1xbDVZYzRXaURpWEtSNTJydVI4VkVlNVhjdE43UjNHdXUycjRlcFNvTEVoNmpMTDQzcXUwOExjWlRqMkVOc0N3bCBzcEZ0aERjcWZIdUVNeERFYmh2a0JnK0R0ak1MYUNhemlrbStEZ1BQbjkvMkFBVWcwcGdYRS9PdFZNTVZjazc5SDdYbmxzZXdoeWd0IHNLV01uanpGcUIxdmpaQXhPNGZpcTdtVHE4b1RSam1POW5BRlFud0gwSDlleFBaTXREcjhQbHlZZGJ0U2JUNmtKWUpoSmZzS3Q1VmogMDVjbkpHQ0hNRDJyRFcxOFB2NEEvTzR5czJnTFJ2TjFjYjk4T0ErZjgvQTBtUHBPeGgveXF2YXJhZko1NVNkM0F3bkk3WTRWeks0dSBMdFEraC9raGtocDhPQytFVHlyNzJaK1RLZzNwSjdxSU93QUQ1OCt3WUgyRlZhT1FDUGFRUGcwYXRjYllsY1NpME51c2lTTGE3QnNWIDFjYlpPck5JOHJwL0d6bitPeXBhaDg1VUFlUldOYzljWnhYVHhaU3RzcE5tY0RmTTVTZDE4QzRmTCtMRWlBRDYyd1E3SVc0YzB4aHogbUFub2NFeHlidGV6WW5IZEpTZjZCUVg3d0FEcWVmRWNnTElFbHlmWUtUWVZnMVhVdGV4NlRPaDRqNGVWOVFpdUw1QTQ5N0U5UFpDRCBoT1VyQVBQRmtFeVJRb3NzMVY3SWJlQUFBQWZBQVBBSHlRT1F5N0dIMTZrSm9kYnVDZnFRSk83QlVwaTBIZXQ2NWxib21zaEJqVzZyIE1YeE1YMlJJUEQ1OWNvYXdUeGFQYXE3UjcyUEg3QnNCL1lPZy9NVTJRQ3lXZGxLUmlTdHFUVWdMeXZNSmMzVDB4eUxTZ013ZXRyY08geVEvZUJ3NWE0UGlQTVdlVUMwVXB3bndZQUFBUDcrQTZFc1pGVkVkSGNXeUIyTWVjYlZpNE9MZWFOaXUyaHp6MGNZVkt4ekZQR1h3ZiBIMUl3YzR6Mm04Y2dRM0h1Sng1NlpDL2dEYU9lUG04QkU4WFc5Rkx0OE8yOE82R2VpeXlqbVlId3pGa1F6RVA0YzdqOWwxeXQ4WjJ2IGpPOWhQUG9PL253RDlqMEhnN2NLZHI2OWkyME5TYkNGMHlFWWgrU0hJTDF3VnkwTUlHTUh4TVZ2M1U1aTRCL3hlQjVJTVp5Z3ZqTHcgYngyTkJBZWY2RzdZcjlMZ0toSnQwMHNqSXlIZ0tTa0s3STFXQUpXM3c5V1JTVlpEQUhyY09ZRHZsZ1dvcW54ODhHbnZJdFhLRE9jYiBKc1ovMlA4QW45ZzZ0RVF0eXM3VlV5VUJvVDdzckhXbE1mNWNlSGZ6QmNZZTBOMnErVVlJSjhORGh2amdQTVZ5K2U2ckQyejdOV1lKIEtTVGZQbjVCZnY3QjFtZU9JN1UwdDZuWm1qUVNROTMwdDZVNllwSVBtTk1RN1RXUE9PQTkzV2pjMU1NZXdnamlXZjEwaDFFVVM3aVAgV0xMS2thU0dnRGx1dExXUzRZZ3RralZkSHpXT240YUdtZ1dUVkZxREQyakU0cllWNFdGaUtvaUpROFdZUFpKdEptSzNmUGgwZUJIdCAxVm9hTXpGS3ZaaG5kRUphT0gzNCsvZUFBZFE5Wm5GOWplSHhvdERsb0Yzd3JZczRhYjdDVDE0T0x4N29LOE5mRG9iaHM4elo1OEQ0IEVDSDlERjFtekcrMXdSSDQvd0FCZlQvbitnT3Y3Y3Z5dm5EVVZtMThxVmMrVmZaeVRFVDdPcXp0NllhSXBhdVNreGZyZmtsVi9EY0cgU2QzaHJUWnhuQTBOWkp2QVFJa1BHUDEvd0NEc0V3cE1Eb3BabVRMdEFrRWRxNXF0a1hoOVAzWXdObGtLOHBJRm9hMzhPcTZmY0RFeCBmbVFUeStQVmZkNVF4ZkdUcHUwVGZnUG9QV3BvbkQ2aFpWQ3NYU01TWGVibUtLV09OVm9DT01icFZGeWJDaWJPVkRMdjIwTFl3dHNvIEUvaW9uMm15Y2pYaXE1cWoxeDNCUWRtMk5YOTJHYWdUd2pJQkcxdUo3NVdGSUUxdTBKclpWNTVRNUpFc2ladkMvd0J4Z05vVHp1NUwgTm9YSlVDejRRSWMzN2Z6L0FQbDBwVlBpK1ZaQkpqU0VNNURub2NZVEhTU1E5M2NIS1ZXU3VVaVdBWURyZmNpeUY4dWNzdW4xTFo4UiBsTkZDZkJ6WnRKQjdCNS9mL0FYTHFPekI3a3ZoODFqaGpVT3ZzNnlCTmZuM0FlMmQrQU5tdVVYa0RnWW1iT3lEdzdWUCtlY0Q3WnVnIHg1N1hISFo0NTk5ZlBuOE9oQzlLeWZJb092WithSGpLdGpIaVVyL0dkaDhNUEtLTVAwOGhEWlBtR1ByY0Z0SHoxVndHYm9yckRNY0MgSlA3QXYvMkRmN2tqWmlFYnR3OEh6bGtCOGNWV1A1UG5wUWtSVkRaWGw4SGlxci9XN3Y4QVhRSFY3SmJqdmtmamwySlpOM2FWaHRzRyBLeG1XeExodEZ0ZkZUZUg5eUtUcXVFWWNET3c4N2dzak04azZ2Mnc1d2xKQjRQeUR2NS9wa01Gd1dZa0E4bTBLcWNJdzFqTG9DUVBmIEljZXNySXNaWDNXMms4Z24vRGNHT1l3VEp3RndBMk55WVo5RzhKK3Y3L3dJKy9jQkZRNm1qNVMva3dNbXNlU1hkRFczY1BuNXhDd28gYmxYTmdxN1N5RDRZZXlPSDdoM1U1aHNiZ1Q0dUxXU2V5ZWMvMzk3bjlnamF5MDk1bHRXeG5WSktKU1ZVcWhic0hkbHRYaVRGWVdXNCB1eVhCeVF4aHZGZ0dBYmF3VktxaDlzYVZkR0ovU1FnUGZ3R0cvd0Q2NFRCUlJkOFVIYm5WNFJpaEdsV0x4dHViRmppdU9TY1hrR0NTIFBKUlZXUzdrNDNIQnk3Yyt6aWpXSTUrUkRqdFVDdkt6TWtYbTFXazVPYVlDVjdZS3ExUjVjd0NVTGxITGg0ZVp6RXc0SjBQNmVCYTEgc1p1dk9lRC9BRWtIaS9mdit3UDNUYTFjSTk4QzNDbVZkb2RxdXBtMnE5cTRzSGZCdEhyekllS0pFWGtuZUFPK0dJY1A0YzVTWUFJTSBPTWVoVFFNZVhnMmI4LzRGQjJBQUE2Q0RoRE1xVlBtQlUzNDFoUmJDSWlxSGFrbEhwR0dVQTJGWE1WUGNMSVpKbUQ1Wkh6WUtIWDZrIGNNSTZ5K1UzVUF5cXd1eWJCdjRBL3dEb2Y2blZaU3BWU1FGR1dwMUF4TGhQUFM0ZGdOMXRXZTFPTm40MkRad3NMUE1WV3gxYmpqQmkgMktEVVZJS0hIV2MwRFNXQUIyd3MvSDAra0I2ZmV2OEFGaDlhNHBGQ0s3YjJ6eFIwNXhsZmhieGs1MnFzZmErVi9ianl6NmZ1ZUEraSA1Y21RUzl1RW5hV2pVV2M4S0Z0Mis0ZHY1RjZ2OWZLRU5QTXU3dGdOMjJUc0FHMUI4dHdmRmQzVjk0WDF1NEpoaXQzRGtnS2gyQ3BWIFZEM044dEJaUm5nMmJDSEg0QUEyRFlBQ0QwNE1zdTRBUmQyY2NtSk15dmhyc3AwTzcvaklQS2l4Q2liRFlGc3V0MXU0QitZTlI1ZmIgVlg3TUx0QkdHSEFudnNCOSs5LzdCQXVEb3JxVndRNVZmR0VxeUVnUEo0dWh1RzA5cjVVU3h4ZGJqK052aTJZaHVFUGNQMFpDYXlVdCBESGZQdTFxL2w0OGZRY2QvNk8yQkhyZFhyc09aRnZrYXZiOWZGdFN0aFZXekVNTzBBVjVOcm42Zmlub2N4aytaOCt3Sjd3dUV5WlFYIGNEeWpWY2toQWI4QS9vRS9nZjZpbFpJb1JIbWZxRVdTRXVtR2FXdE1Ca3g1L0h4eCtSMGJMaVNoYU12RlVUS2paMXRnQU1UUXJPelEgbzFSNVBTSW1DeDhDSFRMSFh5MHR6SldkR2x1RElOWUs5Wkh5UzJJWUZQSUllb1NiRG0ycGl5QS8wT0J5YnlydEhKdnhkd2o2Q2dudyBHLzRkT0QxNVlkZEQzTWhpNjlxVzdKV29SUzB0UERKTUkzSFc4V3hvbUJRd3dNa3lZdGh3Nis0TlVCd2JVY09Nck5wS015eThHNnUyIE5CZnJkQVB3QStBMzlHOHNLWnNocVRySHpwTllxUmlMTEhtTENlRk13MFBpOFU0ZTRtTVA1eUdRWkp3RndQWDhISm8zS0NiTnNteVAgQURmei90di9BQjl3UEN2c3paVzlqSzdzay80cEpTU0xZYXBoaVd5SWNVVGR6UkQvQUtiY0szVzhYQ3ViTVlBT0xJVHJOb2ZHWlpPTyB3VHdDQ2ZQN0FmMzhCSDlNcjgzZmN2Ykl0VjdINXh2NTdUZEQ4ZExkWTNMU2UrOFV3QXVSODZHeWkvTzVqM05mWmg3V3ZoVnBkYnI4IFV3N0ZLbGFyUlpMQnZMOEg1bzJQWVZidEVxd2hmSkt2dmk3RU8xQTRmM2d6eUdJTndSbWZFclVDeWo3SmlEQUlQbjJEZndCOXpXQmMgQkduNnJWWUVxd25hc1VqT0NmeEFWdStCMkV4RlRlTDNJdGtHUlAxSUdERmIvRHRUdUEyL0RXVm5kQmd3NTRRNXdId0Q4ZlBvSFNCSSBMNzRrQS9nSGxCYk1RRnVNa2JtU1Y3WWh5b2dseVBXb1FYRU9IZGxrV1FuaDUybW5mcHpJVDhwNXdJRVNlUGdOL3dEYnovUTJqc2xGIHdKRmhDek13SVJ5b1kxZURoMnFyaXpKY29HSkZGMlJYNjNhZ2VoK1lEMlNxM3hmd09Nbk9XajdOc25DZlBuei9BQ0ErQVBnQ21WbmsgTHFybmNyZVZGeXp4SXd2bFF1TnZYQnUvaXVpN1FnVm5RN1NKSHA0bmJiRzJwOW9rYjB4anhaZGtzTndEelRtc3lZdnE0ZXlMQk0xSyBraHdObkpOWkVGVURTQWlZTHFVUytSRU1peWN3RHpGdGdEMk1Cbyt5NFA1ZkZxNVA4bzRXano3Zi93Qi80RDB6aU9ZNktWa1dkYUdWIHh1WUJaUGxtQTlTdEZPTGF2VW9vWGJTMzhOUFE0ZGJobUR1TUJUM3hIUStNL1dXYzRFQ0pJTmdQbndHL0gyQkI2cCtEdXdPZXFmRU4genhKbU9TM1YwU3Q4bXdpQmRiUTFkM2xpNGJnSG1NaGlhK0VNSU0rcnVLcmFOd01vejdHa2hQNkFBSDBIcGtWSWo1UVlXZWxKcVRVdCBoVkJwMlFaZmNHeDYzTE9GSXRBbkcyZzdqTlE4TEg3cURvYlYyL1BQRGdzbzFYN1pzWnZoQ01BUG9Pd1B4LzhBUVpFY2JjUk82NDJvIHRRa2czWkh2K05vMHRhQXA4aFpzRk9SWFVqa2k1ZU5uU3ErbG5EWUpGZGJtNFFHOTNaanlLeEo4OUcxZnBicGxaUzJwSnFxN094NzUgTlpWK1lNU0N3ZG9xK0pYTk53K1lUWWR3VExJSVRRYmFuZ1FWcUUwWkRRMlpHQnV4dmZOZ0FiK2Zmd0FCQlpDdW42ZjUrb2c4QnRXcCBLM21WODFNa3ZzT25wNG1HZTdlM0phS2VRcmVIVzVqZ2RnVElNL0J1TnNpeTh0SGs5bENIRG5hTGZ3QUNvdGdQMHpUMTlzWTZEem1nIERacTNWZXFVUHFyWGtlem5ENGpJbTIwN3BxdW5yN2hXN0l0c2tOd1cvd0QwdnRrQU51YjRyOXN3ZUlUVVB3Ri8zOEFBUWZBT2FPbm8gVzEwbk9kMnFTSGJkUlJKaElIcGl1MlZXTGFDeWFCZkNBZGJzaXQ1azF3UTJxQVFiUWJJekRQeS8vcWliQi84QWZ6K0d3VGNuY3lIZCAyeDZtbUVqR1dDU1hVZGd4YUtXQmFqSG1PUlhmTUY3Vk1Sa1FnVXhFdEE4dHBwNW1kNGZRaDArcjJGMHJtYk0rcE5KT1VraXdBajIxIE9jaGNCVW1Rc2pNcEZ3bUxrOENTVzNlRXlXRlc4UDVDOHRnU2lSYU9NTmZXNWkzOHlHUWhneURCV253OXNWM3g1V1hnSlZ6c2MzL0ggZjkvQWRPMXBaRjkzRjFpN3ZnRUpNUDE2a3hLUHpvYStrYnBLdGlVaG1IQXdIc2Q4VDl3RDF6NTc1YU1zK1RKLzF0NThBQWZ0Z0FBTyBocGdtQ3lqNG4vQW1JTXhkYTBtWFpDcWtYUXZROTBzSVdtOGcyZTRQbVh4dkNxMnNGdEhIQm1LZStub21jQ0czWUhqd0gzN0I5Tm9PICtXcFV1cHdQZnBtbndabXVZZXBCM2tPQUVlMmZGMCtyd0d1cXJYK2Vjd21jZ3RScXRwZlVnYjVXZkYxZit0dTZOVjgvUVFIZ0Q2RUEgaktqS0hrVjNkVWVOMldhV0hjamwyd3luYVphOWdvc1hya0N1YkVQSEdrY1VaU0JDNnNnY3hOVWNWRll4dXd5WGptYlpjRDRCVThVTiBsQ0Q0THRCcDdQNE85TXU5ZTA1d2NhNFV2VHI1VXA1M3B3b3RFSHhQVDdVaDF1NFBrRUNRZkFlMlcrK1h3OC8vQUFBRFlQb1BRSFhiIFJaR3FXbzBNN0FhamJzeDVOa0x5L0QxUk1GaE1nR3h0UFlxTE0rWUdyZnZZeVYrNFRoOWZ6L21XK3pDeXFNekk1enZadi81ZFAwSHYgK3djZVhYZHFXaFE1ZTZWZUc3YVY2REhOckRUQUM2OGJDV290RU5zVW9vWUo3aXRza1BiNW1vMURyODgxZHkxaG9LZHMvd0JreHd3MyAvd0FBZkFkTWh6ckJIQzNJeU9RdWdXU3Zhdlc0Mm1VUGtWTGFHOEFCVlpIc0VNY1lEekljeVlQbTRxVEFlbk9KUDhEazhVZXJVbDJPIFAyd1B4OEEvWXZ4K0tOSzNwTktoMUp6VVM2YWZjckNiVHh6NmFkZHQ5U3VvWDZpTnBFeTFHMVFGK3BmVWI2a0NTVlZjUkxqTUE0Q0cgT1NYbU5rQTlONHhpMkx4eFE3bk5yYWpxUHZrSmRNOTZ5SU5iL3dERUtkcXl6MVZTVDB1ekhDZ1dqMWFkUmVvdTMxTUJEQzJCcUJzZCBSY2JObFMydTNHUXBGOUNVNFdtSnpjNEZZMGV2d3pGQ25tOCtSTFlDMmRYbFVOVEdtTWN0Zy9WYmRueEszWmlBTmVuUUl0cE1WR0cyIEJ5Vk1GNFZCVnJOSDVMaHFDcGtpdHJ0aEI0VWRsRHFrS0M3aFFXWE56WXdsNDlVWEgwcHFiblNQUlhoSUxVVUZPNEJZRmZHUDZQOEEgMS9YVGZvOVRmZUp5MzNmM2JWZWVQL2EvZmovUWZQSGxZUFI3OFYwT3dwUXZLSkhzMHdFbFBCNmdVZDNtQVZlc2lsSUdDQmdQRG1HUCB2aU9CSDFwYWpoK0xpaU9NNXY4QTJBQWZBWWJBL0FMcExhdmNtYldiZ1ZNMWpHRzJEU2FqVTd3QnNpbjZjdFNWcGZVNVNIMi9tTFJpICtGdTFQT1FPVzZjK012TnlGVmw2L1Q5Lzlqd0EvdjhBMHNWc2ZNc0dZaHhRMUdvRnpHZTI3RFQ5WW9jaGhjWFBoQ2Fyc2ZiZGJXNGMgeERIMVdqMld3S1FQL1M5RFpxelJ6WnNJY3Qzd0I4Ky9BSDUraDZyWDZ6WExRTU1hUTRScUg3TUVsUGxUU0hkNGZaSGErU2RrM3g4cyBpdDJPZWg5eTA1RDRlVEdkcjlzT0pQQ1RuQWJkUGdBQ0NmUDlObEVicEp0NEdzRjFMTEZLa2N5TmRSVFBFaytFYjBiREE1a0dpTVQwIHBKcEVraExTeU83WllFdkNYWEVSbHNJNVpJdHkrQzJMREVoYjhpOHNmUnVDdURWcG4yL0tkcXYwaTJDZHNpWFpHcHV5S2ZzSlAyRmUgcWE0Nmc3anpOUWxicDVrZE1nZ2NJQnZrNHpESEJteGRrbzN2eDg4ZjhDZnhQcXUxV0RWZ1pReVZhYndwSHF2bVZ0VHJBbjV6Qkw0YSArQ2JRcmx3LzFVbU9BZGY0clBJYkd5TTJCUlhKc3lPYndTZGc1OEEvWUQvVmlxRDFBUTFKSHJldEswc2xicmR5MHVyZW9TUUJKSTlzIExZRXJmTlgzTFpDZStRNnJEMXVIcjhQQWJTSHdURm1FK0xqRm5teHYrdmtIOUQvMkIyVmNudUNibG5RMWpHSk9UbVVQR3IwZ1lyMjIgTDU1a0xySlhLTjk0Si9HM0JEMjliYXY0Z0o5Y3d5WXlyeWp3ODkwUW5PVDREZ0w4QUFJUFZhTTZ1UlFtbzB5UmFsSG1nZ2ppZUp0VyBJOVB2a1RyZzgwZytwamppa0tTeVBzNWlQTXl4elJyY3doMDhqU2FacG4wK0FMVEJKV2dqazFjY01Na2U3TEhGWWdrbmRjbFU3dXpaIFdMSVZXT1JmbGlRQ0ZldVRhTnBQT3I2Mmh0aEdHTlBYeXlIRktPOW9WSkRIcDYzRDJldHQ0Vmp3L1R4dTZNc0s0dDVXUWFTN0pOVm8gTy9uOS93Q2ZIei93WVNUdFA3KzdXQnBNdFRUT1lPdXRjSHdJRmJDbUYyOWlsT09jaTRsMFRhYmZjTVJpQUY2ZWJqNSt1cFpNbldMTiBpVU8yZjY3UE9BVjZ3Vi8xVjhDWVR1TWRtUXc5alZmYllzb0JHNTBwd1c0aStuNUxqRW1BY1ZPNUR4aGdEbUsyK1l0MWZOZU1XQ2VEIFpHZmRCZkprZEpTZFBEd2ZmdmQrUDFGd0hyY3lDcXJ5a2VqZFBIWi9zeXBLcWt3M3hxb3ZoUHMxYnREYWRoaDJocDdvZFBaSzNaSEMgR2p3R0J0NDBUUnJrNXhXZm0zYkNvajUvd0hWVE9SSnA5T3JPZnF2N3JxRVFSSFlqU0Y1UnFIVnA0NUpJMXdJWVJ4UGpsYnN2YUh1TSA0d1NTR0pQU2pPcGhrVVk1N3BHYUZlNnNjRnByTjJUaU9oV3lHaW81OWtPMWpUeHRKdzY1dFNMWnRIbVhDcDE1RFRVTmhBMmdoc0c4IFBsSnpHUWVZbk52QTk0SnN5Rzlzd3ptd00yRUFJTy9nT1A3QmhhRlRveFB0cTZHT29WM2dOdjJoVzl4dGNoYkdJQlpPUTVkMnB0VFYgV25UTUxycXg4VzRHSUp0ckNmaUhac0h3WGdOMk5LdTFIcUpCd0FBUDBQNFZrRnVqNEdEaDBoU2h5bXBYTUpOT09Hb1RUMjhKQzJLcSAvbmg2azJCa1Q3VEQybWgwL0RlS2xIejdVM041cS9jOThxNjBRaHdCejdIdEQ3SCtoc0c4QTZ6cis3R09zNmx0R0hQc2hKbDluenl1IEpoNGxLbkZ4ZHdobUppRlpHNExmQkxRNE9HV0t6VjJqaktQK3RWVzdib0JmMkIrZmtERFFZM1psY25OMjJvbWFxdXNnR3F6K1R4Zm4gNTU2RVNvRlhjTzRqY2hDTWNaRnh3Y251dkhJbXE1c214MWE1MFQ3TkZvOW5WQ0d6cE5wcmlIcVpySm9yQ3lHQ1dudVRra2ZMcmRmeCBzaFBEdUFmNGJ4MlBmSzVNRThWZkVaNXRKU2RnQUFENkN3SUo4QUFUSzJybU1vZ3FtYnVXN2FQQzg0MldrTlEwaEVNV051MWN5akE5IEREc2lIWkRJdm1Qbjc5OFBGbjU0c2pON0JtOS81QWYvQUxCMURyWXVSQVYyUThCYXRTQWVtOHBTcEZwY0R3OHREcThXajJOSy9HOXEgWHdubUU4ZzRJL2IvQUxqUzd5V2VUck94aERlQ08vZWZQb09IdjA1UTVCWXZpMWRRZW1EVGxwd3RCOGEwbXBGOVAwc01mZTBPQnFhdiBXQUNuK215R01SQ1JKakMrSTEwVTliTFNHVzdlR1ZjOGtjVW5FS2NmY1YvMUw1LzBnVDNxWENsS2tjK2J1TWZVUkx5emxoajVYSVkxIHVBKzQ1VXc0ODlMYkU1T3NtMTU0bWt5Qnhpa2s3VGl0ZnhZdHdiekIrS01RcHRoUUNwOGM1VU5jSlI0SUpJVW1ISUpDZXJsTENsQVUgNGZEbU1pZmFnZWYyNWJXQ0E4T0NLc2kybG0yUFl3bXdjKy96L1VQalhCVjRhbTA4TmZHVEpEenlRMklQYWxVd0pocHA1dHNZQzRFSSBrTmI0ZTRMNmVxOXI2MCtZTXFEaXlNOG5MUkNlejhmUVQ0QStBOThGdXQwKzhYd0RKUGd1bnhzT0JaRmtMMGdQcHZUMkdZK1doRVBOIEZWTC9BTXlZaHpBNC9GcXhIOEhXM2xtMnRaL1pEWnpmMzUrZmdDQy9IejlxOU9Xbm04dFR6ZlcybjRWWXN6VCtNcmZKT2hRTm1IVWcgSlhGT01FUkZVanphKzVtS2U1cU1sb3N6VmMwK200c1g2MUNheFpxT0h4OUhvWW40M1g0UE1ZUFNiQlAxWVY4V2FlVFIvVE9Lbmc5TiBFSzE2RXBzazdmRzNKOTJUMmdybVFDWU1GMllKdHhJNUZNcXk4UnNUakpIdFN4NVJ5VTJMTmVXQm9BQTVDVU5rc1RUNlk3cVdXTmR5IFRHMUpNVEVDQmNHRU9lQXU0dTBJWTZIUTYxak1aRi84bFZlZVZWc1lzb2JRTUo0WUJEWVJCLzdBZjZZVnNjc2dDdzdiVlRLTjdTbm4gYVdua1VraExNSWpsVGg2VkRUNGJJdDFYVDFxT0VNR2U0RzFWdTgxQStET01vNFEya25LaVA0YytQOUkyWlZidzVKKy9BWmlCZnd1dCB3bFRmRHlTRng0WGNWYktiZlRGZ0xkYm1PSGw2L21WejJ2UGRueGp5cjFlekUwYzRrN0dnN0FmMkR3QUF3MC81Y09lNGJ3cnJhUytXIEVlZjJ6aDc0UHJLWUxsUkxHY2s4ZUdNTWhqa2hBTTFQakFCYXNTZkZ4YU1qWXUzTnVmSU9HTDhBZmtFLzFIZEZLOTBJbWp2ZWlNdDcgZVdHREsrQTcrR3dmSHRvbkU1Y0N5TzF5Tkc3Sks3T2hkZHNjbE1nQmJYWGJac2NFOGRLc1B6RC9BQk1tQnlxVERBbm0xc1lQaHVDUSBZYUFLbnpMaitDMzh4UFpIQ1o4QWdlYXc2eXM3V3RiR0U1djcrQWZ2MFBnRS9xa2tOa0NqZzVsb1pKSUU4a2hWTlhyNXdWOVBhZUxyIGxzYUNtMzAvTXArYmFoajRad0RlSGF2bkZ2bEdpM3ZObStEbjdkcUx6LzZMOXhnQnhUbnBZSGx1Y3BRN0dEdTBSb2FnKzB6THVyQzIgQmNxWTRKOXFHRU5iaC9Ec2FlUW4yTXQvbERjMmJlNnV3T2IvQUxBQTltRERGU3NsaU5DbHBqTWFaSUZlcEppdmh3TlRJVEFOZ0NURiBqT1RDNVJTOWZ3dUJ6REV4Z0R0UUJmZkhoakovZkZsRytrbS8yQUIwckhGMTIvVTJwekUvR05SOWhhWDdyeG9kbnpsN2hYSkovRys0IHlSWm9TbWJWazZGY1l4USsvSTkzMjE0Sk5EUmxrTElnTkRJQmdibHFEUFE5U0RZd1hOWjFQL0RhSW9sWCtaMlRtTWlIRFcrQjc4UGIgVWVZVEdGQll4WkJoS3UvRVIvWUFIMEUrQW1aZ04wSU1oN05UVHFTMVdOVmFTcDJncTkyV3g4UEFZbFhvWVpnWkxVRHNoaUhZREppZSBxN0ZxdUJtMnZ4aHp6WncrQXc1OTBqYVRlRjlqc0FaWDBBd3lPMWc1eEpkamg4Qi9EeFpRc1UyZGZyaVc0UStOL3dENGZ0eXFIV2ZxIDR5cytiYkpqc0gzN3ovVHlaQjE4MGkwSGhjVTg3UGs5RGpWbEhWVCswdzdrNFFlMDVzaS8yVE1WV3R3MkRpcDd0TEJoN250WXdac2ogc2MvN0J2OEFpQkFGdXEwcktHUVRTYVl5RFRPK00rRFlGR0NVYnl4YXhmYlE1TjlRQmpHc2pERkk3V1EzbGpKYWhrK0x4b2Qzemw0RiBja2c4Z3IyK1BWYTVzdGtqRGFnUE1qdllHZGdqcVlkb2NyQ1BDNFk5YnF0d1d3N2dQWkFlM3oycHd0OFlMNHlNQm0veXA5K1FmUDQ3IEJwYkdGRGlxZFlnYUh3azUyY05yZDM3cUxjZVc0TkFHSmR3dFEyZTFBNjJIc25lRG5EN2F4bU15eUwvWTlrTi81ZjhBWU9tb2h0QlEgeUwxT050bHJZMnpxcVZVbnVoZkJJZzJHRU1wWVJRcGl3dmkyWXJjT25rSVhiUmdRemt4NXQvZ2VQdUVkZ2dNLzc3QS9Iei9TTXZ2SSBoMHc3elZkaWNOT0RVMmdWeWtuL0FMZUxGMnpiaXErMThaTGtBV2pNeERzZUxQREhRTnZxVThNVWVudXNVWEFHNnBXSHN3cjUrM3EvIFlNR0NvMkpRbVFoMEdMeUJOTTdYdlNWR1paQWxEY3NZV3RydC93Q0pzKzJTZ2hZNUZHVUxiZnFlSzNjdnQ1c0RIOGk3K0s1K3ZBZEggWTB1R0xyckpiVlZYcjJwVWpsVFVQTEIrTHFiUktjQ0Jnd3lPRXd4d00yQnE3NTc0akkza3htOW5LdS9FUi84QVlBSHN3clFtT0VETSBTV2pLVGdsblp0dE1qQ09mRWxvL21pakRLVFdYZUxJaG9lTGpZRXlEQXEvaXI0akl6NHJqR1k1ZGdRMkRRVDZEOUJ3MzgraDYvYlA4IEowQWxMR01zakt1Sjhac2tBYklIaUdRWHFDTGZFRFdCTVE5UGJoTVQyQ0hBUSs3VTViV1dmbEROOUpTWFpIMkIrNENmZm4vcVlCc0UgbERKM00wV0RXN2E3Qlh3SGJOVDUxaFhROFZXTEFpWElYdDhOUGZLcnVDa2lFeURkVndLUU1POUxQRjFsNU9jMkNIZjcvaUF3QUgxeSBRT0JudTcxTzcxdXluSGNDY1hISkZSNEZGZzJWR2d2TmlyeGlrY3ZGazZNQzZWbGdMS0VaZDhaekc0dGl3QnowUzJLMk1rcm0wb01TIE5oNmJhdVBOR1RWWWRzK1U1U3hZdGJIMk9IcmRrcXVZUWNhZDFTcDg5SFpGa1p6eTMvT0d6Z00rZzRvUGQwQnY1OHZSeUxRVWh6YmEgaWgxdk9kenhKaFBzajVVN1luMWZGbDF5ZTVBWXV3eGZGV0xZOWJWZFBDOGgvTXJQSG5nd1o5SkNWVy92ejhmUVg0L3YvUzNwcTZKQyA0NlpNL0ZKVzdQRE9Ga2ZISmNHRXdwVlh5d05jekY0T3lUQTh6K2xVT3dMYStzN1hhQk1ZajJqVjNuLzMvQzNjZXBjZVVJV3IzQ2xKIHRHaENUUm5HMkZQckd2WGhUWlByMW8zSmRpL2RnZEREd3FySWgxWFVzUGdBekhhQXB6bG1SbmNJa3ZKLzZDZ2dBQi9rQ0o1OE10S2sgYnIyUnVaaU94ODhpQkdmdXh4T1I0OXc0NmNzR1pNcnlJK0ptcFVOMXRiVjJlT0d6QkFyakUrYjQ3WkRSV2M5c3J3TmJYRzJyS3JkdCBYdzRGMmtVTkRLZHZuTFVZdHNIekhDMUE5Smp3OWpYei9JdzFsR0tjR1dlRW03UmVQb0ovWUVIendGSVZNdHRzQ243R3locTJIVFpqIHRMMHpwTnpOR3BwUFRUb2s5TFF5TnFMYUg4UVA4ekNmUjZsVmNNWXNvZTJET0VtL0FlKy92Mk9IVHNrV1JRK1U4cWdGc3lkUjlBdHEgNVV6dVlaUTk0ekllRlNsZFNvdDdBVExJcE11dFZ1dXpNTlBPbUJTQ1RHVjRGazl0UmdmQ01RSUhZZm9ISC9VQ1dEU2RYeGJBWkJkMCAzOHBKOWpLdGJpZTVIQjE1YmFMYXIwRHBmY0I5a01xMitHSEJmMk5TcitCWElmazFYOW9HWTRidXhKT0FFRiszL0UrQVBuN0R4bFhWIEJ0UGdaSlZsMDh4TzRNYlpYY1J4dG5kTUlua3d4VU1Sa3BKR0psa0VyRDZvTi9GSkZxSW84Y01WVElSblVraEk1WmtHUlRMZFlqMkYgVHBtVStsMldZem1qVDQrYzJ0V3dtMFRYK2N5V1JFbWkyaGVsQzhTRU5PZklhMm4rRG5XaEFWV1FtOHZnc1o0VCtnUUcvd0Rud0FBKyBOb2NpWWh0bTEyaE1rMUsyM05VcFpmUXBnL1o1WDJpMm4yMEdURXhjRDVXL0QycFNRRzFWTWNHN3lySk40U2RQSDcvd0RZRC9BRmRuIFVvajZHOHJpcG5UNlNvRXhta3BRa2VZVDBlV3Q4RFUwTnlxdGdtQjNCdzVJUFpKeUdRUFlRMGJFV2lleU83V2o3OCtQcjRBLzdudWsgallsZVNJR1hEYUNhZlk5VnE1aW5LY2VLWlQ3ZitHZnU2elUwVlhDL1d4bHZUekxJd0dOaFh4NnJ6ckRFV3pQSno2UzhBVjhDQVFUNiBDQVA0TWFTT1NvYmROejduU2dLcndNdTczYzhpaFI1dmhXTFFzV0VlZUZjU25Pd2FGcWNWdzhjKzYrM3hWbWlGcUJvYmsrT3prZXY2IFN0aG54SnhEbUtydUN3dGhpcVo1RGNCNFpEcE5QWkRGZ1dvOFQwL1l3d3duVGRvTFBCd2dUZzRBQi92N2YrcmFFSzNoME9wb2RhVDEgdHVBNXFlUzRPMzJSSDQwQml0a3A4aGtKaGlZWVpKaEJrc1lEcVE0UC9WQ3V6STFWbTk3cXQrNENmMzlCUVQzVTlXNm1Zc0JzSkxpYSBOcmM5ZExqR2wxK2h3N0FYcGtYRmVQT1JpNEE3NVNjeTFQWmt4UXlIYmtQV2UxbENZdm14dEoxR0lJRG53RGdJQkI2YWp4dkRIY2o1IGJVREoyRzFURWEySkNURHNCc2NITk5Yb3RjeldBUHlXdHJnZk1VODVBWHg1d1Ayejd5ZHpFY0pzaVBVWGdENkNmdzZZZFJsTWtBWEYgSXhrekFRcklaQ1UyblI0b1k4TnUzeVZsa3p5RkZLT1ZHR1JFYVptRHZMTXJMQVY3SGVUK1IzR1JKOEpRcnpmUFBTeHl5bG1YSnB2YSBkTng0Ykd6cU5WSCtZSFE3Z1R5M1p0TmQzeG9NV2hkbHFMZnd6TndjSGJYRFk3SUYyWXJ2aE5HQnUzdWM0Q2hJSUR6Ky9oTEs4Vi9vIG9RcWduenM2eHpOVFpOQlh4WCtUY3htblE0cVZxYU9vYUlRVzJXaDlTRkp5MzlsMkQ0RnByZUtPaFh1VGVUZ1E1aURmajFSTUdIQVQgN0FmMDUrbitwN0hkS3hiWWxrS1JLQTRFdVVBVDFibG1TTWhwSjVOd2NJY095TEkzaFBZMVVDd0FLNVc5enZnV3M3NWRnUUpzSHZpQSBBSU9BRHJzSUs2WExJRWpNWE9DY2tRMGxzVjY5K09XaDJoVGJaM0djQjZIRFpLSGNFNnY2cm5jUGZPTit3dDhzd204V2pzZ1B0Ri8vIEFINUlnaUlaY05NVUxpUUl1bnd4a2FXQ1dSaWR3NVo3S0tCUXdvbm54MFkxVThVOFV1bmsxSWRZekVXZlVaNE9JcElaUVBTSDlPZDEgdS91QitPcTVaT2o5L3NYSTlEQXdXZWlWeFA4QVRtemgrWld2cWVidUZ3cTVreGlVM01NbzRUSnFGeXpVN01YVjFpa0dZSUQxeDh6TiB6OGdWNklzREx6NVEyR09sNStkV1M5UVFaWVFCTUlGRWpUR2VITFN6NmE5VGhsbXFUMWRwaEdSYStPSEZKVVJSRGxXS21pQWNGd0dMIEZaZWFPZ3o2MXJzL255SjA0K1RDc0dCeVBZYnRuUjVhZSs1NFNiNU93Qlp0Yk5abjkvSitmMzFZZWNnSDZtZndENy85UDErai93QlQgMUJXSm1BK0J6RmQ4R3BPYzJrcklFa1liSWp5M0FVbXFVV1V5ZDRMZ2gxdXRobC80TDRQQTF6Tlpua3A3akVlN0FnUkhQZ0FHS0RoZiB1d29PaXowRExQbEM5TEIwbCsxQ0pKOEd3RUlscVo5WjRqQ2JYWFJSd1h6RktQZ1lRWkhRcmlndjkwSTRmSDJmY1hmREZKcTQ0Znh4IHdQQVdEai9UUFQ4eEh6YmdKSnE1a2trK214dGtPN2h3T3lGNHhWNllKcm14ZzdEYWtLcTBPMVliQlpCejhsbkRCUGdZdFpXVGxvN0kgamdlQWdELzdBQTQxOUxMdEZ3RXNwOHlXM1VMWUlja3A2WnBnR3YyeHdWNHRzSnN2aDhPeUU5UGhKN0JUN3doMmhQcDFPclBUMFVLTCBLendtMGFUQlc2ZjdSSU8vOC9maVZsU0tWZ3NKY2hRN1RIMytheEZjVnpmSnV4K09nRE5JeXhOdU5EL3kwWEt2SGxzbDgxeHgrYThEIHJTNlExc3BscEs0NzJvdG5seTFIK3N0UC93QU9ueEtmY2xvTzc0K2NmaGg0YWRxRGNOblI2V3VENEMzV1l4b0Y2aFJtK1lKSU4rdDIgb2o5dXI0RFlENnJ2QkgxVVVqRDR1K0pKc0RZdzJTd2pyNDFGV0JFNWxGdGpWK2VUL21MZFZ6SEFPUW1WekFudHZNQ2FNVGFCbG1BMyBaMkNmbDNnSUQ4UklLQ1ZPbW1DYWowbmtxVDRoeVh5a1dva3ZXdlFLR1FzMkdlcm12YkZBbUNFeUh3OFB1QzNCZkdDcFVjejJ6dEJvIGVkaU5oTjhBSUQ4ZjRDQUFkV1drRUt6elVzRFVEUlErb2NEQVc3MVUyQlAxSUs3RDhWeWRpZ3VIOE83SERVSlQ4eXdKaXJCdkE5UU8gSk5aS2ZvOGIyRU9WRitpQ0EvVHBCa01WU3NuMUtKTnR5Q0JzNUlZK0EwcnBRNWpvYnlaRGJMTDNObHdjYWJ0eEIwMHp0Q0hVeXQyUyBUaXIwdWZGUHlNRGlkeTJPSzQwYTltQjFUdHJSYW1VdWMvVzIwT3BVMll6N1VzaUpNbFBsWlhkS1pLL1Q5U0V3d3RtR0Zic2EyaDQrIGQ0eFhReWJON2RyZ2I4ZkFIL0FZNy9PMkpTZGlIclZyZTVLMDA2c2t5NlJzYTJkT3gramNpdlRIOFB1QXRYRHI5UGgwT3F6R0tleVAgRjBqK0Q4bVJud3BaaXlFZGdsMmRvajc5L1FPL242K3pIeVpsV1hOcnBjcmUyNXNvQ0VVMmk2eVJDSVl4YUN3cjRaQ0dobUZ2Z2ErNCBOUSt2NTlWbUhsbVowSjRaa2NJbEd3bU93Yjk3YkFmc3pWRFZmVk1INk1Kb0ZtWFhVTlhWdWd5VFNla0djQThzcFRqQnFVRWtEWlorIHFwRG1wLzIxQXNuMXJUeDZoUHFGNzVqNlV0M3dZRi9GQVlNRDIvbUEyblVGUzgrUHpJWWxjaXg3bmpoVEx3ZVdVMThWWnRscko2UkUgY2J2V0FRU25LaW9hOXlhU3NSVlkxNU4zeFc4aFdDbndpbjN0NEkwN1NkR1lObGVhTDNhZFg5aEJXaTJkT01aOUR3Ry9GdmUxc3hBaCAwaWVBVmtiTGt1ZXRCVDArbDFTVWxKZmVlNHNJQS82bDllVE9vdGd2RFQ3cUxmSzZ1NXZDRnltblYyckhUL1dXUWtNTXNYR0VKcFdxIHlDRzRXbVpoNEFQVWI5N0xCc25jdkZvWlNudDNTZUR5Q2Zmc2V2c2dldmhrT3NaUzV5VGxCSUd3MWZxalNiQS9IS2F2T1hHK2VWdXkgR0liNVlFeWRaZG9XWWpyWXkzOEZjWXNuTVFsMkhQQUg5K1AxRlVYVWtIVTY3S1p1Y0xzdGt0R3Q4MGRKdGhmVHlWc0pNeUtocEZJMSB6U1pBeERRMXZqUTh4UFEyRG5LMnpGT0I0ck9BUko0T2ZQdjM5ZmIvQU5HTnlVOCt4SFpHZi9EUWpvMTg1V2VMRlVUWnZqT0V4OW1BIC9PY2U1NHFxdGhYZzM1c245VVcvcXN0RE1pbkptVTc1eHRWNVV0MWxIVDhoUFNFL1laYWJGTU9FTkRtVlhEVzJCYitldnovaGpDZG8gYWRFWlo3WE8xbzcrQVA4QWdNZnNDQ1c2TFR4YlFTbjVWaFNTV25oa1pCTWZKdFNPV3ZpcFdoZUEyMG5qNWkzRFQwSXc0TGJVUVQ1OCA0Tmo0cmpKdzRFeEJmcitJdkFZdVlYWkNtYXpGWEtBMWl5YWIyZ2xKaUR6eGdQTG1QcWJYcWE1T0xoTVQrSU1qZ1FodFNHdjkxSWF6IHRlQXdtY0NiMjhBRDZEc0cvd0N3ZGJVb3hNQXVCZ29VeVVteUJkbTFLa1YvcWlwOVBzSmJxOURkeWlHNEVKaGlxMlNITVh6SFpXd0YgSnFEc3l6amlqSTI5RzNiejZEc0Q4L2MrNkhUeXVJWlZDUEdrY20ycU1MZDY4dkNvb1NJZU1YR1BIeDBVa2NVcnhLOGtiUE50N1lnOSBLT1BNZHl6eURNSkl1S2RtSm9rOC9pZXRSRFlBTkh0VnZnU1QvTU02ZXh1bVZmcE8xUGlROU9aV0loMTB1RUp0YjNBK0IwOWdEMk5XIG4vcFlpY1pxOG5XYXo3V2dFL3I0QWZ3My9mNk9JOUJxYVJZRldUMjIxRFovVG1lYlpiZmtxdFROaTIwU25kRGxJWkFPeWZNaDJRUUQgMXpBMUFUem45VU5DTnNidDJ1QnYyREIyaTJEWU9ueGwzckNWNDdVR1BJZGIweXgxNjdOaS9Va01nV1c3SEZxY29wYWxvV29oVERFdyB5dnA5eGRqejN3MlpHZkZkbUoycHphNjZyUWQvQUFLaVA3QjFQR0V5R2VydFBpbEtycTZ5RXhqQ1M2bnFXWW5scGl1ZXVNOUtNY3dzIGhrRGgwLzZQQWNPVk9DeXN0R0l4RzN2OVVId0Q5d0hBK0FreERLSXc3d3pQekF6ckV0T29VNWdTenhaWVppd0Q4Z2tqaXlRS2toblggQ2VzUThhdVRHMGJBWnBJTVRlZEFxZnRvbWpmRzRXRFI2NXA5a1UwaHFVMlRLQXY3RXdVYUJJZXprMFM2NVY4Q0tHK0IyUXpNSGhvTSA5UG5vMVBreWJRcjFtc3ZIc0U4L3YvQVQ2K2ZQN3lnZDhLSlladEN2aEsxRmRQZjE3R3dnNUQ1aFE4cHZsdHd4N0srV1FZK3ZzbGRIIGlCNnhvYU43UGRaczNDYnNONysvY0JBQUFCLzNGR1FoWURSaG5NYVFlQ0ttYWhza3NmTmZFL3VSOFZJZlAyZUZaRzhUQ0Q1c0krZWogdUR5ekMxY1lUT2JKc2VMOSsvZ0FHd01GUEtGRTJHQlhDZ2RURDFwWVRhcEw4eHdYMnhiVGFiZC9paCtZVW5qTWh3eUMzVlo0aEF0UiBrM1BCb2VXWTVnazcyZjhBb0ovZjlnQUNVZEdFam04blJBS3Fzdkp1ejRyeFErZWVPZytvUit4R2VMTHl5UDVxcXZ0SDdyL1UvbnFOIG1Ba3RJb1B2ZEx1QWs3dVZZc2k4UWxvYXZ6Q1UrVmtycTZmeHREeGZJZklPS3ozQ3l6aGhaR2ZXVmg0T0JOOEFBTzdwOEI3SHNSWnMgSGxMR3kwOEFlbU5vRVdZTnFoQnd3NGtIQW5raG80MlFtT0ZKNHA2MlI0cXBMNTdFd1RabWdvTTN3Myt3TUNDZjM4QnNIVU9VUWpIYSBNOEJNMTZTY0pVeFNpR1BoaDVZZUxGbG5xNVhQaDJvSFpIQndIdUZqWXNENGRwOFlURnRHNW8vNVJCbjBIZ1BuMzRBQW5sZVF0dEVOIFBGaTVqYjNWRDhlTVZ1NFhSenc5aExqU3BnOHhpdHpGdGJYKzFkOFdCUEJ1SEdTbTV2S09FTisyUDM3ZnorSFRTelJ2Yk82dkc3TFAgSkUxSTlZNEZXcTMrOFVRTWIrYkFBbnV3MDdJQTdJanhvelpTREk4aVNXaHVBVXRlbWxHelhkd0JUS3lXNTYvazJyQVd4b2VWTXRHdiBkTzhOcUlzTElMdEJlc2F1VThlNE1pZWhoME1mRGc0cDdiWExnamsxY29NMk8wZitxQml2L3dCZ1lSVE1xdVVZeWFIc1lZdDF2ZHpVIE5ZWkJna244d1EwMFR3MVBJTWxibUljTG1CaFZnV2kyZzJRWXpGQlpORzN1cnJzQm5rRStBQWZ2M1VtNlptWUxzQjhRM2V2VW10M0sgWjRlWVNEcjFWdVFIZmdMSVBoaG1Tbjk0WDhhNW5zS0dqMlFqREdqL0FGeGQ3Ujl3QjkrZmtMbndBQjA1cllyL0FHYXFyVTJHdDFLNyBLZjIwVFE2ck1zaVdub1o0U0JsR0Y5RERtSmhpR3ZtSzVvZHdyUTRIV2J4RjFjTVpnYnM3Sk93SDkvOEFQN0IwQmt6cE4zejNLN0xsIElKRnh3ZDNKR2VGdFMwb3NrWDBhbFlBWEMzVldMcStRUE5IL0FGOGVTZXFjNnFBN2hZd3h4bEQwTmxKVmUxUnFjanV3MlBYckloNGIgK0JNRDAvdXBzNWhQY0RtbmkwUEQvYUtIS014d0hpay9mc2QvUFliQWZjMVhnNDlscTlNcmdhZ2F1bDVTVFRsM0Q5Tk5rYWYxTmtjbiBKc3RDVVhyN2dZZXlGdGtUdzlxZGo0RUd0MllaK00wWjROSkp0NEFjKzQrQTUrZjZXSXRYajF5RHM2QUdaTGtHdmpJZ084ZkpEdUJiIGh0U3U3UlhNTWV5VEZ0d1cwUGpZTUR3TnFoakhwWDV5c3ZBUTJiZU1BSGdOL3dDZlkzR3RTWVlBMVhUTiswM3FXSlVucU1jT2JqM0Mgc3EzeFF4ZkV4ZGpMYkFodUhHNGRrTUFjR3BNSDg0emNYeGViTSs3WGFjK2crZnh3UGdIeWFoVlZWRVpTV1pKRWkxQmVrYitQTXYyKyBuamt1SXliTEp1Vks4ckduelAxQWtSblI0NUcweW5LZU4wQkViRkxGM2JnRGo1L1YxWDFHV0l5YzB6bHlmUTlidmI0MU8zZWh3emgxIGhYQUxjckNxOXBXNi90UlAweHVGVjFXUUQ5dExRK0NZSm9yT1VXZDhONGM0QUgvYnU1Z0EzODhyUFdKck4xaHA5SjZjd05lcVZQMUIgVXFsZkUvSnIweDJmUStQSnRqY2hXMDlrVzdJdFJnbVFYeHdvZEg1eXNvYjV3WUk3RzNiZno3OEFQbi9QOUtSUVhybkR1YXRxRzByViBpU3JGbjBwUDFVTHdGaklMMzRiU0dpeDRiQUhtb2NPdDdJK0ZCeEh2alVZR1BPNmY3Si9yNC81Lzc5MHR4RWdQR3RjUmFGNTFYS1RxIGdaRGVNaXd0TlFaM2ZFUlh0Y0RGY09lYnlIaGlHOWxnSG9GbDJNSHMxWmFPRHJCM0EybGIvaUI5L1BuK3Eya1pnQXM1ZEVqZFgvbDIgWjJORVVjYk1WZmtCN0hDNDgyalRHUVJnUmhKWGVTeW15a3FOaGcwYjIrNVZObHdvUWtjbktoY2R4WkZlN21TenJWc1lsYlZ6VmZjeiBzdlY4aHVHbWVXeWJwWVZ5VmZ0OHdPSG1yY053bXZHSkFEVlljbXpLNVFZei93QmJBLzMvQU56NERxdXpSZUdxVEptSks0bTJjRWFxICttYW11K0RUczRsUEZ2bE9YSWhtRjhQOFA4a01DZnYxd1FEazBZOGk4Qmd3NXNoczUraC8rd2RNRmJYcXYzREpzWXludXo0dUI3K2wgL3dDRERWMkdaWE5PQ2ROQjZiM1VXdzlidUFmZU9XamtOVmgxbjJ2K3piMkU5KzBYK1ovcmpFU1FhUmZEVmF1a0hVaGhreitXM0l2aCB6MWZxYWVDc2FKWEthSFg1aTNNdUFRSFQxbzRwTDU2dVhBbU1GMmhpaTdJN2NIK3dBTi9BYys2U0k1b3MvVCtvMkJITnBvWm14MDhPIHhGSEdpcTFOcytDekhGODdBcGNMWTNmK0p4TVl0eUZvOVJQSEp1eVNTZG5xeW5GTHNrbFUrM3U3amZXQTFkZkZuR3JVRmZCaXBiYTcgWW03Q0gyUFJ1b0M3bkJEN3NKcjVaQTU4TWZNbU1wQjdnejJBRFkxd016eVVLbzNCL3dBWEk1OEFmUVdBL3dDZlFZR3dFUExTTlBkUCB3SmRrRWc0RmtKV0UwSkxJSFgxcTVQdml1NEVQd21ZWkREQVl0VHM5V2s2WThvMW9XZ1Q5Z21LU2RRZnZ4OEIwZVVYVjk2TWEzRFNhIDBvRi9aR05KTjA3SHJIT2tXRk1WenludjB4eFQ1Z2VHWVk3UkRnOXVBejNBWXpVMjBjbUI3MjdIT0E3K0FQbitRUHlmcXRES1ZWSDEgT0pyZGsyMVdDUXF2OHRYMUlKOGQzaDhOTFcwcjJRd0xZZHdlNGN4eFpMR0ExL3NaaG5aU2d0YUtISFlKemgvZnZQN0FBUDhBUkdGMyBFckk5WXpUV0s4N2tMUmpuSWNqY0pIQnVxNHV4UW1qVlJHeWxra2hXS09aaEZHZzJwWVpXWnpGRXVONEtvQno4a2hoaVZMKzc4SWJ2IFlGa2FwVTNUSFYxa0pFMFpkeEJWVnBGM1RGZFhoNEhuQmd0U3Q0YTJ5Y2Z3NGszN0doa3lhR2hzeFA4QVpEajgvQUFIQVY4QWdnQlcgbjdRdVMxY3hWemJWczV0Y0FOYmpYZFBxdGtZRzFiaWdkaGlyYSs0VlhNVDdVWkxCZk9lZHBUbTJQTFFoakZrNDZwS1NjQUgvQUdBYiBBZng2M01nOVBxQ2w3T011OWhTYWY1VXBRNjNyRTlJWGxzV21sdmloNmZtQjRZZWFuL0RnMHM0QVFkOERXYitLQm1XWGtKZGlTOGIrIHZ2My9BRTYyeG15U0xyOE9yM1NuM0hXN1FBdVNzZ3dHL2lDOXNLR2tjeXF0Z21RM0N5QStJOWJlUDJNUHprWGFIMGMyN1ZjY1Bud0EgRGZ6L0FKKzJlTEZtVUpMZzVRaGxIRkZPUWJOWldiRmZBNXZ3TVpsVlhpQ3c2WWpHNUdOU1RBa2RwYWh1U0EzdHB4ZVRpeDFKVkFLaiA2bHFRUEpFVzV0Smg2QkRmNmRwQ0hXTGdrcmNyVSs3SWx5WEFQdUJrTDF4VDVpQWhLb0s4UVR4aXo0b1ZvRThBbnBkcVRBKzdBQVFNIFYvQS9pc3N3UFFkeTBua3dFaXZiSUcwL0MxYUpEeG5EUjhzT2h5bXg4UTAvaDh5RzRNbkhqSndDd1h4WEpqZ3FIcHlXZFF1eUJIYXEgMzQvdjRCQVBvT3dNMlRtSytMQUgrZWg2ZUxhUTBNNWJBK3Q1bGJ5cnNUYlFzMDlLRDJBWXArMUZ1R0gvQUo1dCtlQ2NCaU5WOU5yTCBOOTI0T0FQNytnL2Z3SFgweFY5YnJGNEFZcVJrcVVQTkpEVWl3Q1VOcGxtSlFGaGxDN3M1Z3Q4a2lkbjNDbllGd1QvbUV4aFJYOEdiIDhIOUJQbnovQUxvT09SZzhjcFpETkRqTUpveW94ajVySlVmK3I0QVk0cUVzY0hMalNKS0FPV09VTzE3SWg0eDdyaWlpdXI4Tmw0c0UgYzJqYmNoV3pQWjdtQTFVbm9ESnB1ZkxhVStCMUxhTlpNaUVUTEM5UHRxZkQzZ3dHRGZNT0laRGZVOG1zM0lMR0l5T0VDZHE5Z2ZzTyBmQUVIcXkwZStmbFhCWVVxd0t4R29kWDJReVMzREowOW85c0dLNUYxa2h5MXRnRG1LclczeUhWNjJjZkt2UFdOVzZNOCt5d2lvNXZtIDNQdGdBUDUvMzZaRFpYK1pZeTNmR3V2S3oyUmNYQTdJcDEvYzEvY2VtUmJHckt4bWd4eVJrdUN0NjNRMkJ3T1QxL0JIdUNvQm5GM3AgWk9HL0I0UCtIUGorL2dBQ2xDTWlHMFdKTWdGR3AvdkpTckYvZHlIQXpBbERsZDdxYkFvZThZR0ljd09QTVRvQysrSEdRWjdvZTJmMSBzRTRDZmZzUUQ5di9BRmRCaktzTGJUdW1BU01iVG0vbVZMYXFydDVOMjNJQTZHUGRqK256WGNTR2FNdE5LZHlCY3Y4QURNdzNEZUp5IHphUTJCamp6ZTVmNUprWkJLRk9oaFNCT09jTVRpMkZaVVJaZGpWK1BLTlUzTWQ1b3hTTUl4bE95SVFpSm5NL3F3OUExa0JEV3ZPa2UgdVFkS0JWS09iZ0pLem5RSVF0R3NxN2FIdFhYckd2V2xFckY1WldwRHJrRnB0Sk40TUNxMkxPeHNhUGtBVFhwdnNUSXpGejBrMndwbCBLK1JOOUV2UHlGbkpFWVpXZkdnK3FHSkc1MDJsUGtXZms4Y244K09rN2pEZ2NBY0FXVFEvMXNmK09xMEhIeVpmRDZrdTZHdHhhVFErIDZJbGZKWGx5RndwR3BkMGlUQ0FlcTYzaGgxdXdPNHdGZnBacWNGa1lydEF5ekRpVHpZR2cvd0JBb093ZFcwOWZkUlhNUTJpS1kwdVAgbHRhWTQxWlYrTnRxdjJHR21sR0Z5aXJhK3lJYTJHRHA5Z1RBZm5zSzNabGxwZktnL3ZnSStCZnZQZ0Q1L29QaDVqaGFDR1NETnVUVSB0ZW9ZMWJFMXVoekYrc25CeXE4VEVGNGtGckF4REQyUnZDcWVIZVlXQ2F1MEl5TURDSlBPUFA3QUFBZGNaaE9lQmJRbjVya3ExdmFpIDROVWw2bisxYWZFY0VPSzdzNzR0OWszQU9IWk9QaHprOGcrVGVNOStGY1pzZFhPcnR2OEF3SHdIVEp5c200WkFrdm95N2tCM2R4NEogTU1kdmFtaXN5bERua0RoZ3RYa2FLS1F3WHc2NmhKcEpCSWcwelFMSUJxZE5JRHBkVHBOVC9lRjdKQnFVbWp1eXJSR2xaVnZIajVWZyA1aTNwcGxWNC9oNTl6TGRzWFJXN3M3MkVuMDJVWWJ1bFRCOWI2a05QWWNPR3EvMlVyQWJkbnJNWVVGc3hQd2xvbysvL0FPVDhmNlBKIDlxTCtUSW1ORnREYlJaTGZ5WlB5T1lQQmFZS1RVaDhBekhCRFE2M3ZnUE14RHdWSmdnSThQeW0yTXh3M2liUjBIc0dBUVVFQWVQbjMgeFlHWlM5M1hvNjBobXVOUzF1N3pOVE5tbzllMXZYNjZIZkxhMDlucTVtSi9KQS93NFpDWjM0Y0xhK1l6VWFybEJoTkgrNzhCUGdENSA4K0FRUUFEamtXUTZRS3p1QWUrVmphTmhTaVNUWVJpWlc0L2daUVdXZkZmaDZHeUlUaGpaQkF3MVZMalduRzlyN05ySk40TjFjYkNXIDZBdzJCK1BuMzdwWUN0R29DUHZacWxzdUcxblFxcmJkUjhlOVBUc3F2ZDBUbzJSTE9pSXlNN1JSdk5MSDJZVVkxbGxiWWtHZmE2NWUgZVZQRkc2UFdlb0MxWGhKVWhhckdXKzNvTjRxK3ZYeG9zMkdydmtzOUtxdjVqZ3lJYjVXN0I3Z2JRUkVlbjNtekticTk1R1ZXN0JBbSAvb0w5di9zZmZ1cXJVV255RWdnR1hMYVcrNmxhR0pMWnR3Y2ZMY0NsM0NVMThoMWVITUxmdERIcDg3a0NIYW5Ca1lXVUp2UENUYnY5IEJmZ0I4LzhBcml5Rk9oNjdQajIrSzBIcWNob2I0dGxtRFRxMUVLY01IZ0lseUFoeDVpWlQ4TVBNVDF1eGxLcm0ycTRaUHVnMFBQT0UgbXJzQVlCK1Bud0dDRHNIVU9MWkx3UTJUT242YVE1TEpZNnJmOTRoMjBydThLeGsxVGlsSmkvTVc0ZUFkYnRCYkI0cjg4NU1vMFcwViBmWm0rQkFleDgvQUFIN1lUNERxMFhQY0VPeSs0VTIyaGFVT2NidW5rbG53Rk12Z2M4NWVCVlBhdEcyTWl3eDVLeXlORkpFam5ETldXIEtDRFBHaFJZaTc3UUNUWXJJYUFlVTBaTXF5dzl0V2RiK1NOMjhsdkR1NHlvc3VMS3A4aGFpMnlNakp3K1pCKytLcTNjQ04yYlppWU4gM05wSnpIZ0Ivd0RFZm56WmJINWRmQjA5a2xWakdBaHNrYVhER0xDWUJMSWVRNnlQUlErOGN3aHpNR0J3Z3owL0JWbWpiTXhmQmpONSB0SkIvMTkvdDgrSDZuMTlmdWtPN083R3F5YTlQRXRwY0VPNXBDT1lQVzB2T1RSRFllU0o4eGtReDh3SDl0YW1RbXpGRU5sck1Ha3UxIFhjQlBnTmdQbjJEWURWR2hXZktjS2xQQVh4MkwyRGxHMVFBSHlaL0FpY3BoamFYMDl3eHJpckZ1MUdSZ01mQVlJT0ljb1VyQlh0OG0gRE51Mk9MQlVXL3NBQmdBYkFhdXJReGlDTjQ4c3NCS01IaHJDODA1dk83SGNLeHZtK0FLNHlNN25jd3hyR0RkUTVWZUQ3aStQbnQvSCBYSmFEUVVGdWpoUmtxcTJTMUUydlVDbkxZVDJxTUpXM0xVWWticHVENTh3d3lRMTh3am50TjU2RGp0aXVoNGt6bjBuQUJpL0FPZmVBIFF0TmQ0TDZreVZpNVcwa3lTVVV4SmlWZTdFZzloUTBJOXdPTE12RDZleU9BZXYyU2NCSVlBMXNadW1GbURBbitsWi9nUDcvaWVBRlQgV3Z0R2JEUFZVa09ydm5EeVJKMy9BTWFHNFdGTWZGZEljdmhqNWlFSFQ2ck1EM0FIQTRrcTJUWm5zcitjM3Vrem13ZnYrd1l2eXJyZSAxSHdBRHlRd3NhRXM1SW1MY3ZlTFVSM2RrY29yWStORU1mRE0zQWg0TGJnSE9UeUFKVk1jRzR1VEpmU2ZQb09JRSsvYitmNmtaS2hVIEJ4ZEVUZFh6NEphZWYvNzVHWnlsY1o0NUgzRVdWY2l3VjlsdjRnNjRWVlovTFdmYUQ0b1VPYjRPeDlicTlxMVBWZW5PNmNsQUdpazkgdFhtQWxiYXV2YjgwTUthK1E5NHJkODVnSFRwazVUUUswQmNaWnRyR0xJTUphTHR2K3dId1B1d0lLQ0xUR1JQbnE1NkFaSkRIYktKSyBUQ3IweTFJOTNHSlFBU0xGMm80R082bEpoK1FCd2RMT0Q0RDR5VEZxMjU0L2RnZS8vd0JRSHo0RUJ4MmcyZGd1U1hUUm1ycEp5YTBWIFFsZXE4T3poNlJNR1NoSUZvbUw1aHdaYWZRNWcvd0E4d0lUdnVlNkMvWTU0UUh2NEFCdjRBLzA3TE1oMFBYdy80RFJxbzA4VExhZlUgQ0phTElCeUpZZE5zWlRGMmhnUW1CdzlrYnhhRU5IYldCU2dwNnd6Ym9zb3FPN0JjTi83dWdPUHZ3SHBLNm1OR2hSNVV6MXI2aVhUcSA4V1JsazNSTFBncGRKSVkwM29naVNSOGNrTXdMQlhmVEE3c3JCMFRUSkRIS1VhdHFNWmJLbmc1Y0NRZzl2ajk5RDd3czFjVjBlMW5mIDZsa1pENXFOWDd6a1pMalhCbDBqSzFpUk1Lb3hKdCtFSk5ycUd1aHh4SDFIdGpHclEwajZSMlBxczQwZDlHSU05Nk1NMDJ3ZW9YY0IgZ09rWWRNMldaY0ZFOEx1eGJyMVhwbXZhZjFDR2F2aWxxNTFCVENES2h6THNzZ1BSNWpsdHdWSzFCOEVZb3IvbzdoTmlBUHdBL3dEWCB6K3dLZlVvd25iQnQ0RnJmTzZoQmt3OW5qb2ZxRVk4Y2xBUzI2Mkt4Z1VJTXlRb2lHT3RTRzlyd0wvbVIvd0RtWmlTMWg2ZlVGTnIyIEtIZ3dZcngwL2hiMXcwMzFJdVNFbE5ycHFmNnJmSVkyWmRGL1pPc2l2WVlHcFlsbnRBZGZtWHU0cDdJdGpvU3JXZG9LYnV0ckF6RjggR2M1Q0d1Y2dBQi9FK0FRZmNBeUJaSTI5U2VhWkpacDVBREh1U0JKSmQxSW5relhMYk1oVU5pTXJKeFhwYnRITkpOS1VoaVdMYWlrQyBraDVIampqaWFWRXJ2ekVZTExrTnU2eWZLd2VxL0Q3TFV5V3cyY3lOVEdxMWN2VnY4eHdyMWJhSXJEWS9KUG1MZThka3g5cVFmNHNQIDRqSHpCWkZ0RHc4bk9iT3p5ZzhmOTM3MjJDc1pTcTc0Unc2R2sxelZhMmViYzZOTC93QUZrUjBoRCtWRXNhdVE0OVBXekRJWURqNnIgZzhnQXRUSVRHTkgxbEg1c2I1OEFRUUQ5YnZuOFkyOEVjZGNsZDE3YUdhQk4xaVRXN0FzMnB5U2ZVNjhJQXlxOUtGSEJmdmhQVDNCYiBtRDYzQlR5QjZjeWJtcnRDejV1cmdtd1AySGdINEFBQVdLU3grb1M4eW1kWE9ibmI5RnNoYkxEenlUZkNuWkVxbTE0Q3J1RGhmRGgzIDRNT0JEbFNHUUEycERadkY4bVIzWjNTZnYyUDdBZjZHTEVJcUs2ZXBrcmlSdHVTS1NHVjQzUm82YS9hQ0RrUGNSWGJaa3VXOXVQRk0gcnlKSEp4SFViUnVleGtqeXFPNmF4YlhTL2psVmg1QXQzT0pObHFTM3hzenhKM0lPeVR5RXhLdHVYWXhUOEoxdStJZDhUTUZ1ZWhwNiBIZUMyc3MxWDAzdWYzYnovQVAxZnZjQUJyZEYyUmNFZytMeXM0MkJ6Ykl1T3ZRNkhjd2VYRHFXdVdFOGVUMkJQTVZYWkRJWUljVjdnIGNxVHlhejJ2K2oyaWIrZ3YzNytBNEQwMU16VG5EWEtiWTVWMG51SzIxWVJ0aHErMnFOcmVMTUZ4U3o0cncyQ1pXOWtPRXlIWUVOSFAgZkFoTGF6alYrMkxMd0VDSkx4di9BTitQb093ZEo5dGFOVURHOFdwbFJjNnJTUUcxQmxPWitUVEtPMll1U2JxYUY2akZzZnB2VDJSUCBEM3dQTUE2MHVGOFZVL2JMa2ZXWlpCM1lraERtd0FENkN3SHdBQStjU29qR1BjaGxtR21aSklTWXBFVFpDN3JPWGxqaWx3RG9SdFNQIDdqbGhhNWdyWk5EdXBLcUk0akIwN2RrY2JZN2FpUEhqSEZySmJ2dnd0Y3lRcXJOUUZkSTRlZUZ6aUlkSXMwTFpzZGN2TFBpQjRxdlogaC9GT2YxeDhEVFVPeUdGd09mbHRweEpMVDRyZWM5N3JxeEFZQUZ1Z0FEOXNHTWxsZzErVVVvY003MkZSVmVsTEl0cDNyWXhiVkx1OSBieWp5bmJWWDhnWThHUmtUMXZHYWNuMS95cHdKc3l4M2ZSbmZENk9nN0FmOCtnZFBmVStPOUN0YlpjVkJySjNwV05UREdwY3IwK0xEIHVHdmhFMCtBVUlPT3RRUGlpR0c4L0xWSitMQll6NHo0cTlYckN4aGhnN3BIQU1NRHkrZjQrQVRVaFRXM0cyQVB0a25FbWdyQ1FIZG8gWkxPWUY0T1VpeEhMamZ6RnN1eUdHUmZtSEZMaWJWeG5kQmxtRTNqL0FGVUFJUDhBUVAyQmd1TnAzamNOSDlPOHFTSkhKbHU0NXh2RSB4MjJWWTNyY0RWSWplS0dOazlOazJBNmlKOTFCanVLVnh2R1dHVmVjbXIrSmg0UHVKK0tJb2h3N0ZxVjRhb0RtZUpYTnBMaDIwN21LIHJxdTJDM0E2NHRnOEJodURKTVQzeUd5ZHlJRmFFSHc0aExMMVY2R3piRnZlOWdBQURZT2ZkYjdJbUhhNXpNN050RE8rWkFtY1R2Z2wgWjFidGtPTHREUjh3ZkQ0ZVk1aHhzSEI0SE9mQ2J5THRBWjdiMmJPbjBFLzUvSEUvMHdvN0k2WndzOVh4bTRIL0FPZWsya3UyQStEciBKaUxiNG1yelJLVHlJZGtjSWNPWW51RTVTdUFET2g4WkY0bzIrY0txNzlnMy93QS8wcFpHT1VHdHlHK01jeU51aTJiVTJCYnppQ1IzIEdUZTQyOEVXUkRRN0lEUXgvbnFQSVFlYy9hRm5FNEVTTFJSNmlmZ0cvd0Rud0hRa3FKWnBNYWNReDU0dkx0dHRBMWhDOGp4UTN1RzkgcFZ5b1o1WXJpVUhxR09JZHFQTWNSN3NOM0FIOFpWaVB4WnZ4MDJvY3g1RnJkMkliYlhvUWxYeVRhS1E4T3llUGgzQnhlSnoxRFQrQiBzbnpKWTh3cXdHRTlCTUUwYWg3ay9yYnVsaHNCOEFmOXVQOEFTOTVCQ2NqaklwVWlCazVPVWt1eTlWNTdKcUJoTGkyaElUWXZNRTh3IFloT0NKdzhHMmozeWRNL2EyWm0rN2JKc0dLQ2ZQdjNnSkpIT2FqRzIzTEpkek5uU1prWFYwUzNCd0QxdmR5Zll3dHN4YUxzMmRQcmQgOGhwNmZOZUtXWUVOcWNOenE5WGVkajdwQkVjK2c3K0E0RHdMclRNZEpyYXQ5cW90UE51RjNFdFNERFgrY1NYN1l0Vk51NnNrUG5sZiA0aDlNYkpTWm40ZS9ZTnRxR0xNZWF2Zk81andiN3BJNS9vVWZLSjl4dDJZNG1NUVRWbzVvN3h6RWVCQnFSWlk2TEVkbDMzVXNaYW5qIGJKNE1yOWN4MUpEUWo3bE9mRVp1cFgrM3M3V3ZpSGFGKzJLSDFBVjZ4bVJ1SjVwRGpWUGNuYU9KZkUwQkx1NU5aRjk4N3FXcFc5MTggYnNidkJQVlE2TVRhRmNZTEI4SmR1Zlc3OSsyQUJqMG40WnkzQ2pKbkdhcU1WdVlQVEpNc1BaQUZINGVVdHBoaS9ENDI0VEhDWUhIeiBKMWxyNmkxQitjOTBPRFBCdmhKdysvYi9BRkZ2L0lBRjZwQWV6Tk9kc0RMdWJaaTNwN3E5OGt0cU83WndlSXR0RFF2U2xlcTJCdzdWIHpLck1EL2d6OVNHQU5RV1Vab2FCbis5amlDQWZqNTkrZnRnNlNiSm1VV3BMOVZvY1ZWalcxcWdtWEdKc2kyczZSY1llcGE1MUNhWDMgd1BhRXhQaG9aZDhZQTd4M1FQWUxheU1WOXpHSE5qZGtkK0Fmb0FmdGd0ME5KSkJNamFqVFN6VFF2Z29lR1RQMUl6ak1qREVWdHlCbyB3d0p6eExVdFk5VFVyUEcwTU1zQ1pydWhnMFByc1hsMzFZOS9ydTBjcU5JOXgxa3ZhYjZGYkVGMG0yMnBUNmxROWVraHRsbmtDc3BBIDJ2VStWZ1VhQkpRcFZhZStzamhTYUhENTU4QkFiWjFrRXhpdHVheWM3bzFkZ2Y0Q3ZuL1kvdjZya1pjTkRReHVVMFRIL0hLeVVCZXEgY2ExRUhjTzBPU25VdkpFOXhpVW1ZbU1wQ1lxZ2EvUlBKazZ2NE1qQTdSU1RieC9YNER6OVJBSFlVMk9xdXpOWnBydHZ6dUhkcW5zRCBXQXRtRWd4WE5vVWcwSHFySGg3SXA0eGNISUlkamNlQXpud21NRjFlc2pEanR6WUhpL2VBcU1Cc0hVYkkrUGJTK0JwS0JNQ1hBdU5TIGxNdEFiRHI5SG1hZlpSWVhWNmU0TGJJR21za0lneUhBTmdOb01QV2JQY2xYOG1CcE5YQlB2d0FBZjU4ZjYxYm5wd1J1Mjg4V2VFekMgcEJudDVaOG5QMnJqN2NhUG0rRXFPZFRod0hkRk1YL00yN281Mk1helBHSjgrYjU2bmhkcVBqSFVkZTFLblZYcEwwNjZvQTV1K2JZUCBYd3IzR25uckdtYVFGZGtjRERoVzdKTWhrSWVMYnFBck9kOTUzUVl6YzJDSk5WNG4wRUJzQjgvN0tXMExZc1MrWEFPVXpWc2JaMmJEIFc0aXVTczdUdlU4eUxLWGtJWC9KekdRd245cjZlYWtNaEFPWXJOdnREU3pJMVZwUGE0NEFBSDM3L3dBK2NFZXU1RkxXeFowV1VlSmMganlKTmUyRGVWUHRBbGt1NktwbEtIdFFleWRoMlFOOEF4QjIrQkI0TitaT1RmZHFUT2Z2L0FHaUFQK0hSSFQ5MFUvM3MxUXdGY2EvcSB1cHNrdDFsVDRmdC9ZVEpLVjJ6U3EwR1IwTzB3NGVHNEo2M09iVjk4ZURIaXlqTWlwQnVrd2ZuMzYzZC9BZmZrU1lhWVRTTnZPZ2VGIEkxai9BSkZ6eUxCcGVialdoc3g0RGJKZnViTGc0eStwSWppaVVPRWxsbWNqTkJIRkdaQzBjWGJ0MWdRd3pZTUdVMk1LZUMxQVZIZWogUnA3QVV2YjhNazRiTU5FV0JEZDZ2RTQvRllVT3J6RGlZbVVPWURoN0FaSzVyU3dJQ3JhaXp4ZTBGb1k4ZDdlRG9QUHJkOEFmMzkxdyBHM1UzZ2R2aW9IM1BXclRLYUl3dW5BdmFkMldEWHkxcDhQSkt4YlMwbnN3ZVdYcCthb04vYlVodDcyOVZvK1BtSGRRM2FLUWJ0N0hnIE9PL2VmcFJWOUQxUFkwTmtybUtoNmtLcnE4OFNTSy8zSWZZVmNSUU5tN0N0cHhpRjRkUHI5YkJjd1AyTk0vRjVYYTNnMy9RUG44RDUgOEEvZ0xPQjZqdU9CUmRjYWtRdWNTWmZtS2RoQmh4N3VhWXBIVVpjVk5nWEJlcXlaTU1Na3h3dFJIdWhnbnRKa1lNd0YyWXpBallXNyBNVjkvQUFOZ1FmZnBiUktaUXBlRkpvdFZKS2pTTHFwWXhIcnNGR0VrN0NKcEJGREtrc2NEdnQ3aU5Jd0dDdG8zbmtqTFI3eFNhSFRhIGVaSXZwVkFmUnhMR0hQMG1NWWdTUXBxRE50UjRReHpOZytCNnA4WmFBK29ZcVJmVlgvaC9OMThCY2lkTlhZYmpYeFhPcVJMRFJ4a3YgT2tRcTdXMUEycDNRUXl4RmNEWjhKT2drZlErVFEwMk1KeXVMRGc2bmxBeDJSblRjeUNlcXQzRmc4eXVLeXFuTlRsVVBFUndjWk1WZCBVM0U0TUJaeHpZa0wwcms5WmJRSzZXREZJWHJqTVE2V0VCQlJrT0theXdjUVhDeXhHR1Q2YzY2QmZWTWJXTEpTYlU1QVdEalJyRTFmIEhIN1A1SFhFbFlMTElzZzBtNHNqcStXa0RObXJZdGJiNHMzZG1oZmNhSEZiYllaQWJrTE1XTlBRNmxjTEd6cUJxZStLVEFvN3U0SzggVnNaNHI0NFduWkJobGNJYmhNYXU2RmwxWDlad2ZDYk1EU2RVVHRWZUNDZUFIN2R4UWV0eENuMTQ4SG1BUmRwa3FaMUJRMXV3c0VtcyBESHZxTVBNTXBuV3g1Z3d4dzNEbUdBUTg0SWh0d1dWbFd0REFtOEJMUi83QWZZS2lBUDNWbkZac2tTcW5NWlZmREt1dUR1ZHB2ZUNIICtDWUxPRmN1VEJTTmMzWW53dy9KTm5xOFBCQUVMYWFyVVdYa29VdklaZ2IyVDc4ZmZnQjgvd0Fnd1ErTXlxenpJQlYxZERqWkxjN1AgK0k5UDRPV0RsSHkyTjA0Zk1XdzYydDdnSCtCcHZ2akV6dGpRVVJ1Y2MyL1FCejcvQUhCMWgwazI3R2pwMjdYb2tGb255d0FJYTRwWCB4dS9COGZCYm5Ic2FyVDdUTUZWekRJN1BFVk1zUUY0WkQxWVZ6cTE1SGpteHlPcTkyQXZ1aWtMMHh0b1lhRXlia3FXTmZLL2F0d1Z1IEpmRU5vZDdHVG9mZXpGODdxUXg1Z0gzQVEyb1B5WW9MR0UrYmY1L1h3QUErQVBueVMzTElaSlJBT0xmTlBadlQyK1h4eDYwSmxrV0IgTFpKU3VXcHR5V3lIQTd0aGgwOXhjTzlLL0FuV1FzTXVvenVaWnRxWFovWHg4K2Y4QWY2eGtNVEtxT05WYWdTYkl0N0NTK09ZbUo5aCBNaFI4RU9WYzRzRmJyYUdZbU1qQUgrQVFnUWNPMlpUZENSdzN2WU0vejQrZkFiQnNGcUYvTHFTZkQyR1ZxY0pXZEZKU1dHK0NRRzhFIGpBRFl5ODVTZy9HekNmTU1NaENaK0w4SGhrOG9VNU1jcTQyN1lnTmczOC83YkJyWXl4NnFBOXdTT0dTQXMrN0xoSDZlMkFpUXlSa3IgMzJKVU4yTU1lNjh5bU5JWkhqamg3MzNIdUxGQkk5Wk03NUhIS2hpTVQ0UFNaUW5tTzBRNjlYQmRNMUtucG9FSUpSN0l5cll2bm1TSCBMbEFaZytHbjJRaHZsa01DR2NVaDZrcTNZemRyN2tabG80RTg0Z29KOSt0M1lBR3dHcFF4bHU5dVBpNVBHa2srVk1XMnd3cXV4aElmIENsU3NJczh5TUJoRHJlazJTbng0ZWFoOFNSNFpQZ2I1eGs1NFRmd0d3YkI1L3FUNHV0SGsvSmJXTXdnV0U3bjQxZTErNFdGMjkydmsgSUZOVzJDR1kwOXVIMThQQlBNRThIaHA2WnVCclA3M2k4NysvZmY4QXBTcmN4Q1hFTXd1VDl5QVNvYVFKVDJROEhYbHc4aDkwRHo0diB6T1J6SWZINGJWQXNBOEQyeFovR1pPcS8vSVB2M0gvUDR5eVJ5TUloZ25hQkhCRUZqUWc4MUdzZ2pTN0hzUk12dXVnVjFySTlCWkJrIDdJNkdWamNqNUdNMjdzREkrTmNDU1JxSk9PTnRrZUllWllESFc1NGcrcmVEVlY4eGtVNmZKWEF2eTRkSWdhY1BBWmlmRFpMZ2gxdW4gcjRkSHgwM29jNHdzc3pSYUN6NXNKN1liQjRCKzZrbXlzbmc4OEUvK0hoUTl3VTVaelFIYlJJZEpodE1Rd1VvZXdoWURUZllGd1RMSSBNTWt0Z2hvOEJmMDA3UHdab1YvN0phUDVkUVVIZjhlQWdBbU8wRUhKd2RueDhmSGRWdEFreVdFSFNYenRsejJwVk5YaWh3QzN2QWRrIEQvTXJrQ3dOdGNyUXhaNEdUck1IVjNDYXJBSU9QSHo0QUJzQUdIcnUyRmV2N2FwWkRkbjlWU0xPcVdJbjBQTTFFRmx0eU9yMFVXWUggMXVIc2lrMlFQYUFmZ1pDZk9EOWpXaTBOc0JoTU1jTmdQZ0FDL3Y4QWgxcW5pMkk0WEVhWjFHMGVtZGM5dVNTZ3BNdGoxSU1TODBlQSB4aUR5WkhieGJORTZzN0JqZVVJbEUzSk1uK1hENHh2M1pOZVZVS3JxMFFpT1luMlFlWE5oZGpENXBkdEd2VTQ4TmoyRW4yMWR6eGZFIHBQSWJPWlpMVWh1RXljZVR6MXFKNnlUYUt2cURmRFlSS09BRDUvOEFvRS9qMG1WZHNUNHpKWVJSY3lXVEN0RHdTdlhCcWh5SmNLVUwgaVNtZ09vVExJRHA1aVl2clVINkc4Ym1NS05GWms5OE4xZDkrUDcrQTU4ZkFHREJWWVBUU2wxVXVYeE1Obm1SSmY0bFhrcitxK3drSSBDckx6UlY2M2FIZUFQVzZlK09DY2NBMmg4NWJaaWZGM25ZK2JYWno3WVBkQzRDZjZrY3V5TzB0dVpJdGNVSGI1V2NOYkk0Y09yc05QIHVVb3NtaTdnWHpCaHdXMlZESHpGWGNIdzRuMGI0dW9HWjU4MkR4L29IKy9xamhZNTl6eUttRkxwMnVxdllMbXVObjFNZURubWZianogUmJjcEhWSHk3VUxya2R3MWlpOGl0eWpaNXJIZ0U5UVdhNkE0dFo1MUlwQzJwR0xCejR6dUhBcEZnRm9iNG11NTVYdFJ3dFN0MlNrMyB3eFgvQUlCZ24xemd6TEtIcU1XUmh6emFPZ2dOL0FiL0FMLzBFcGJSU2RjMEdZc0VvK1VTNFpwaGJsa05PcVRhQ1JaRy9DSEpEY0hHIEhEK0hmQWVyK0syV3dVdDh3bmVaUkQ4SHZadnRIc0Z1K0FQNysxRERBTHB2TXBtTHp5MnJPc2FtYmE3UG9kVjhoVDhhNUsxemFIY0QgdXBEWlB4K0hzYkZPZ2NiM01XTEo3SHNod0h5QUIvWDNnRkxIdDJ2MGpUK1NxVjNEcmN0OFZZekRJczQ4OE1JY29CWVNqNDRXQTRJZiA0clpQaHZGYVdBcFZXaDFtc2kzemJOa2RzTVQ2RHY1L253RHJSR3oyZHd1aURVeHVYUjhhRGhxQlhIdVBieHlPaWZuRURsOW5ZaVg4IHhxVnhHWCtUbjQ1TEU5b0hRSE1qNmtLcXF2NVdiRFFNOHl5YWgwanZNUzhNQnFYK0hTVW5wOVByZmRRTzRMN0lqb1ovdW95RTNubmggTm1lWGJaSGpuNEJCNERoMWFLWTZNaTVOWkQzSkZKa1kzQWJZU1BxRU1ORmVzZ0JOK1hZd2NpeUlkcVZXaDdnSG5BU0VDRFc2TTgxZiBjbkdRYnNiMzMzMzlCQWU1L3Bldmkyd0xyaE1ETWQ1cVZuQzZmcmNzcjV6N0hkeTlvQ21FREYyOHd0b2JJbnpSNGZubGY4Vm1FOEVNIFhabnRhUENmb08vN0FoWW4rcldraEZFS0pOTzAxVDdxMDRvcmFZcDExZjhBSnpYNnB5MXlQcFZuZlJJNE5qcFpaZTF2cTlMeHgxZWcgVFZxenFkZkdaYTMxSkIrbGd3T29ERjZnQjcwNDU1R2lsYU1PeVFKS2dkaHBYcHlUVkx1VjJZMlNEaTEyZUJYTElZbkhmQ3ZySSsyWiBiNWQxaTA2UnFFK053UnVmY2NmSGQ1Njg4cEZidkZneUJzVThOTmw3QkRrcFpCa3M1WHhEbENqREZGelBocDh4OFE1ZzljdFJTWUo0IE9FemZmZjN2MzhCK2dEWU5nZkMralF6MWI1eklyNVBHMWQyQ0taQThlWDdZWkx1cEdYOFd5TzJ5ZTRXUVlNRDVrQlNjWUFQNnlVR0UgeWZOZ2lUNTg5NERmei9TbEh2a2UxUWVVVXJtWlpCaElXMXRJYUNSamozM0tobnlWTXNDSGFkVm1HVGgvd1h4Zi9uRmhHVjBOWko5ciBzWGM1di80ajJEWUVGOFYydnpMSFM3Z2JYS1pHWkExZXR0ZXlOWFR2UzVZT0F0QlVpMjBZWHpGRHZpZWhwNC81ejRRZk9Cc3l5MFUzICs5NzI4UHo4L0FIN3dIVFpGeHMzN3lQU25ndDVzY1dXNWQwZnhTYmIrdzNWZHQyTThNekRFcU10enp0VDFqaVFlNDdadTc0OFZSOC8gQTQ0TDQ4Tk1BbEdpd3BESWhwRHMySzd0bkwveks1UEZnTmM4dkR6TVppM0RYN2dCMUtPZkRuQjFsRGZLektjSlNRaHhCMkEvOStmdSBveGdyZXdWTE1KMWVtcll3eGszTU5TSkZ0QVZkSW1pME80ME9MdUhBM3hrY0xVWCtWY2VmT1lETE00R01XYXJTUWdTcXdEQUFRZm9JIERweTZwWkF0anF1dHdOY3pCeDdCYnB3U1BtWjNiMXdqSFd4RHNadytZeUdIdTFJYStZZUFCQ2ZCWk9jMWVMWmhoeEpxN1l3R3dmOEEgV29qNm0wLzVaaWVVdHExQ2xWeVZWdDA2cUltUUJKR0d3TWhub2d1MEE3Z0hvWnczaXR5RXhxUFdoZE03azE1SysySXh4Sk51d00rQSBBQUVGQWZ2ZnJQTk96UUs0UjVzc2tRSVpWd3JIWmhPM0xIZVZ2M3RmdE5KOEYwS3B1TW1TUisxV0x0eThiVm1nRmZOQWsyYUl1amRkIERaeXMwTk56TTVjQW9jYk5uZ2ZNVzA0T0RDWXU0cE11UkRaQ0c4UG4xdkV3MUFWOEQ4emMrVUV2Ti9lUFBmNVAzSURBNGNENE5oS0sgWm1LTDR1RFJyQ3JqVU95Q3hnV3NNS0hLRHA2SERaS1RNUXNBNE95L2dLdkJoZ3NvVDJQZTZ1Qm53Qi8rbjM3cGhSNDlxdHREMENHcSBCa29xSFphM0diTlA0R2pZNGxQYUxhc0lEWXdkd21XcHlRUHlEWTdMWC9kUDVOVjc0ekRFZlpOOCtnNy9BT2Z3UHFRZm1weWtoeTdvIFdMZ0hBTXFta2lrclp6cHBoMlVLbHUxZGUzS0duWVZ4TXFDSis5dGtDQkJxd25XWXNtTmV0bDlTUWNZRUhBQmp2d0UvMW9kNDJVQ1EgdlVtOUVJbGZEUEV4V3hjcXdHTmloaWZKNTZGV09lQ3NuWnNUV2tRanV3OUtSazErM2hyNC9INWY2dXB5SjlnVE5QckhYbzJHcnZocSB2VWNrWXZpSk1BMGtKNGJESSt5M010TmJzQndWWUNlMmd3N054ZG9XYXpPY0pObzREMjhBK245Z3F2ZEdaWGR5T0Z0WnRhVEdTaHcxIHRLVU9PVHIydjIwd0xGeXlpYk1IMlF0MXUrR0pqQjhHeS9nTlV6a3lFTFprYnVpYkNHL3hGMVlvV2g2SUl0UnpEenZhbGY1K3JRbGYgK255aGxBYlM4WCtJdlMvaHVnWlBaTzlyZXlTeURoL0V0OENERFpXYTVHaFpaOE9FMmh3SUFmcUlBZndYeng5UDJCVThmTnl5UjVXTSAyUVNuektLN2dNbVMwQ1E5WHVWWkZLbFJIQXduOTFGc09RNHErVmVwVlh4bTMvc3l5OGFoL3dEcUFQbi9BTy8xRTZGeTBKZkhPTm9XIGRNTWNMREZCazJhUGtNSkxYMmtZL2daSTE0VjFRdmc2Tk5GSmNoekNjcTJIcGdZOGp1eko1ckVXNWc3UmJpdlI5WW9aNndyUnprNnAgRzJJUVF4cEFTbjJNZXJJREYyOHhEdFJiWk9QdUZxUGxmYjQ0TTIxcTdOWmxxY0pkdmNCd0h0Q0EzOEJWMXhUN0VNc21TbTV0a01qdCBsRFl5OVY5YjJRNE1Oa05EbDJ2S1BuY2hEbUdPZURwbUNJdm9ad09UL3dCODczdmh6ZjhBWUVFQnNDLzB3aWpBVW9jV1pYWjRCYmhyIGJzRXIydjN5dDVFc3crQVdGbytHd01hSGNFeGtReUNHRGZVK2ZPY0NkbUlhdVRHYkliU0FhQ0JmcUV3UGdPZWdMRlZYWUdaUVZiaDkgVXNvd1NQWm8xU3MydjRic0hsaC81dlVEYlNlUG1RK0g4YklPQU05WHphamlGbFpWeWpNemVFTnZIUGdIQVFDQ2Z3NlFaalFNa1RkNyBva21ZeDNTM3RZY0dzTzdqbThoUkZEcDJ5d1lxczVXdTFtamVrU1FlOE8zOU9XT3hzeVUzTFNkdkhWTTNCZ3NodHRBdytORU1hZWFCIHJhMkVMT1ZiUWxza3ROWUhKbzQrdDF1OXVFT3E5bk5xWHdEWWNZemJXTVdRYVQrbS9uOWcvWU9vMTRycExjakEzNTZyWEZibVQwbnUgeG5HQ012bmg2elhLS1lUL0FLZWg2a01XQ3QwYUE0QWQ0V1daWDdtRXdadlpBWFB2YmYzNzNQdURWbzZBMUt4RTh6VldkcTlQQnJDVSBrZ3pwdjFPdkM4dHBwN21TRzRwOE8xRnVZWVd5RU5JbjEvUHJqQkd3UTMzSDhvK2MyQis1OWdBUVg1QldJTWdWMDhPQitVVUdqVnJoIE1saGp6S2ZNTmhlTFZ5UmFEUXQyaERRM3hQVzRaQXh6eUJVc0Z3Mnp0ZXpFOWt0RkplT2ZBTUVId0d3YWtBRUNKQW0zQ2JJU0dDWGYga2tKVVRPME1xeFp3VFJGbzFWWkRua3pFcmdBNm1TWlppOHczbmltRUpiMkZ5YUtOWGZqaklrY21ObThLeUY1QjJWM1hkTjFWWWx3WCBURmZHUEp2TTgzVEhtMUdWNEV1RjhWS0pGb1ljZndOa21URERBWXhiY0xhM2Q1R0s5eUxUTWN3U0FtLzBHZkFjK2ZrSis2VE15ekh6IE5wZGtNZ2NsQXJlMnRPcHNUSXNJQzRKQ0hVcDZ3bnhvbVYvTVQyVEd5SnQ0UG0vWW9iWHlaRnhLVm1zbzRRSlYyS0R2NzhBUHYzVmogd1duRFZIUkZaNDZscTlCS0t0VldxWlR2bFdYTTZwcW5yZXViUXVLaUdsYXdmV1F2YXFHWHNCdzdaMUFlVktzV0dnb3pyTE04SEVrRiBqNmYwdzVEZ0FZS3ZTT2NVTzRXRlgxZzhiVDF3OC9xWUMwNGRrV0VoeWlrdE5jakMvd0JoKzVESFc3QmFpTzkwOHBJN0t6azdrdVJHIEdBOTdTUWZINzhBSC9ZQjBsRkRSbkhDZUdLb0dXTXhSeG5TUmNTQlVpaFhieGtMcHkwbVdJWVlXVklzWm1LSzJjTTNOWklPWjN4dWggWXZkeDVIMkZCN3I0c1Vwb2VwQVdER3U3NWJWWE5RdHBVck50QWJ3ZElXMml4cFl1cjhWOFAzVTJkRHI5azk4Sjd3eVdiV2I0VUpreiBnVEUzL3dEdURmOEFxU2dVZVF0cTVFK3ZxNXVDeUJ1YWVvcVhmQkw3RHdNQTdxN2tINWd5SndlWk1JQjFXZTR3QWJKNzFlcmsrRGhQIDcvYnUvZ0FEOEFBUU15czRlVmJHelFCcUFIYllkV3FZL1RIYlFhSXlLOFd3cFFzUHhzeENyZUdIc0JiQjNTbjN3Y21kaldpNUZsWlIgd2xvN0gzZFlPQW9OdW56L0FFN0dTUFhiYllGa0hvcVN0amErY0JydmZBWU5VQ200RkVQVGdlRnd4OFBlSmhnT1BUNjU3Z0lsalROeiBWM3pGbVJ3aVNFMkEvZ0FQN0FmeDZrWmFOSUNWeXlVRjFnaHhqTWRwc3hoTXpodDIvZGJibVh0VEhscmtJN0s2MGhwbERISjJja2JzIGp2UzVaMGxMaU1BRzVOOFZMSHA4SXFuMXYrV28xblZwblZjNzJCVzRlajFOYktQa1FDQmNHQlBjSmxxY2tyOWJ4MDhiNjhMYnd6RkMgZ3g1T0pLU2tnOS9xSS9oMmlRai9BRnVWMU5ucTlYSlNxK3NoYlcyaVlTdTZRcTZrSzNkekJSV2xpMmdQWDh5WjRjd1FsK1BBNmpJYSB6dWpRak14enphTy9IMzdBQnovN0FiUjh1Mktxa0VxYkgvR3M0V1NOaVRHYzdPRmV1QlE4cGxEemk0VnVZK1pkZ2RQNVYydjJQQVp3IFBjeVFOSmR3blBqNERENzhmUWVvR1pmSy9tbkZVV3hrdTJLR2h2NmxIQTFXanl3NzRyNlpTaUhhaDl3TU1sYnZpMjRPR3FpdEdFODEgR0Jtb1VvTFdTZTk3MkRBSUFBQmJ1SURxbWtwV2JaU1MzTXFoK2JqY0poZ2Eva2t3YkZQdXh2SVYwVVVLczZuZm1SMTlqWjN5QUNPSyBIaVJJNVBQT0dQRjVDcTJyUnZ0ZHRhS3dja2U2YVFwWWE3VXdxUEU2R3E2bnlsSitsOUp1WjFzWjhiQ1k0UjkwTVRMSGM1d3dxTVdHIHUzc00yTDZub3dxU1pKQ0pnYWhsSk1uT3ZSeFpxS3JMclJFQjJPMlBVc3FCbXJzMkFtem1WZXpvYlNZU01odFo1UUJuWmhHRlhnRGcga3c1K21iSWNzekIwalMzZzdGUHhHNW9LRUNURm1TUFZuWE9UKzJZNGxXUFp2QUJMK3Awb3VnQmRieHEvTldmOWZOYUpQN01pYVIyUSAwck1XVWJPcU5Ba0VEblQvQUtIU3dtS2RrYWZiWU1WZlN6dEpyS3dRTWtzUXlXU21MdURPUUVzbXlsc2U0ZHQyUndXMkJiMzdDZkIvIDJ1VEdBNlQvQU04UUNEanNBRUIxVkVoWDRkeVU2eHNzOE5xNjRNM09wU0phRmhWaXdOZ2V1YlFtVzBCdUN2OEFUM3lSandEcjB5dVkgRGhBblFsa1lycTdNelZYOUpPZTIvbittUXdIVjhPTHlReTVUK25nd0wwNnU3WXJzbGhLOWhXUmNpYnFFQW5tUWdYaHpRNGY2ZkJRNiB1QW5NV1ltcjdaNFBFTHNIUG43ZndHLzlYWTA3NlUzd3JwL3RXL2Y0cUdUUzdlYXFnYzR0UmJzQmVtSnF1MmFWU2lHUG1MYmdIOXZoIDg4bzg4RDhZaDdtVE9WZFYvQndDQ2ZYK2ZBUEFkQ1dYNllQT2doaGxhWVFiczhXM0c4bjlNRnMyeHZ1K0RYNzZYR0F6SWpsNUZLSTggWTA3Mlk4ajNCemp6ZUs0bmp3M0h4MVZHc3c2ZTBSMlIzcXFwZG5YSWRnY3dXekZUc0pmNlJiVlNCK2VCM3lHdDFXUW1jVHI5OGc4RyBlVU44WmxrR2tta253SFB1QS9yMVBKN0EwYW0xOGJRNEdxN0lzSm9XMyt6UTdKcVFIdTVpeDY1Ykl0OEdMUXVIN2dIbWJQQmdZZDFMIEhHUE8xMGJabTl1MzBIZitRZnIwZ2FYbVI1VWZPRnE0RzQxdDNoeWE5ZUdyaTlaSWNyZG1oTlhCNWk0R1hoNjJ3dmdPZnYxVm9aTVkgaHF5d00razdIdjU4QnY0RHBrU0dCZ3loY09VbTNBeWFkY3JtcFl4bldFdmlROWN4bXhOS1RLK1d3N2d0dzRmdzJwdFh6elVIR2NYViAyWkdPYkp2dS9nVDREK3dWcUYrcFpaTC9BTHpDNm5TcVp0aEdqVTh3eXk0U2RudHlHSGZ4N2NlVTZlVkVLQjNjYWRnZDh4eGJzZ3h4IENZeFpwbmR0ZmV0ZnUrck9XUmJralRtcHVCblZBSEdrb3I0U2x5RDFxV1JnWXFXeHF5dENOOVBEcmJKRGg4REJIcC9CMlI1WmxjWDIgek9PMnlPNEErL0FQMEFkTlFKVkMyZUg5dEF5MVJTMmVzSmJzMjhBNTZ3TDVtME9oeTlQb0ZjWDRhMmhwOHZicGlPQllhMG5Xb2pNMSBZTkt5czhKdEdybmdBd1k4Qlh6NytCQVYxYUZxeU5kYUhZU2JxV3lWdGtRME83RWhvdUIyTUNlR3RFUzBMR3JldjYzUWs3aDlicjc1IFl6NHdRQVlmOVJkUWZTTUxSMy9uM3VBQWIvMG1WUGxBdldXdDJNN2pRbGtIaHNsVHArcFNXcEJJTVZLZWxwcWFIbjFXbnA1aW42M28gOFAyMCtxaC9LSWZuRGV4Ny93Q2ZQdng4QnNCd0xHaVBKRzZDV0ZNcDQyakV4ajhCQUlzMDNzNmV6bEhnUjRmUHRmSWlFeEtpU3JwSiBYQ1JCanN5TjdjaTZVK09OakVaRW5JOGl1U29neVpZc09CYUVoMkNROG93dDFrMERiSUhpWllGb1UvbE1sZ0J6RkozeUg1aDlTSHFRIE9aeWI3TVRPV2p2ZkFWOUJmbjd3QjkraDRaRE1sVVBZUzJyZ1g4YTVIamZ5TElxV2pwYTJyMWV2SVpTSFY4T0g4TlB1QmdtSTl0L3ggRHpySVpyZzR2VUNOdmFTYnhQZ0Q2Q0E0RDFaV2V0UGgxSnMxb1UwUmNyN3VFUjFOVDc1WFpJbkNKb3VYeWdCOElhaEVNUW9Xb3REcCBjRlNVQ0ZPcmJOV2hYa3BJRmRhVGFYdjdJQUFBd0lIVlJST3NKOHBPL3dDSnFBcExTS096Y3lSY1NTT3FzYXF0MXEyZE1vVVduTVpHIFdaVDVVVjZKZW12TFlZYjRWVEJSR3c5VElVUmpnTTRqOGdRTVY5L1h6MlBUbFBjeDJOOHJLdHk0QnM5ci9MZlplZjhBaWI4ZU91WlYgTWtidU5QU0xJWXpMamhHU055UU5oNnNZcGNHeFRLendLNWdyb3NSVERVZXFvWm1zVnVzVHllTXNLdG1TSFpGbXJZdTJyWVRYSjhyLyBBSWVHY0U5a0hoNjVyUzBhbFJ1TThYS1BBd0gzUkNWWCsvOEEvZ051cVRoMkpaZGgwL20xekx0RUMrVldFRTArdG1HQ1d5QVZlWHcyIEZZQWRQY0h4YnRUa2lPcFYvd0FxUXlaTlhwc2FULzBUQjI2Z2dENzk5QjJETXJVWnFEc1ZDczdVaHFMZGxKVkE2a0cyN2xkT0FSaXkgR1VQV2FLMUJUSy9oOWhpOWJwN2hqYWtEZ2Rjb1F4WnE4bThrOWovZjkvWHovZ0QvQUZ1ZUs3YUtndENHa05ueWF4Y2xVbHA3cWRxZiBMZ1lYQnlwdUllRncyQXhEUTdVY09ZOW5JRlBxU3E0VkJadW5OV1psZzVhS1M3bkQ0RHU2QTQrZkFQMlIyM0lKSXBTalRCREc2STRsIGhhTnNmcW81RFNiMGFCWWc2MG1XUTVXdWRrSWVLVmRSR0hWRmFOb3B5dTI4ZW9XOXJhTnNVa0pMVS9PTkR0YSsycFpCOGVLNXZDNWsgZ3lOcit5QXlUR1lWK3dqekFKTWFqSXJES0tNaEJQMUlmczN6UGdFUG5CN01Sa01vODFtRENHemFQdjhBd0R3SFZ0TFE1UkZ5NGRqViBmV01uT3RvbWdDWTlQcEtlMkI1VVZoQTNJdGo3VTQyWU1UQjVoVjI0OERtZXl3TFJobVBlejlPZkFBSEFkZzY4L3FJYVErbUIwdFJZIFRyL3JkS242cUd4cjAvV3BXNENaTkZwckNUVEh0Z2U4TEltQjRaQXkxQVYvREFOZ2lxNzRNV2Z1cVE4Yjk3SDkvd0NyeHlOWGluU0ogaFZLMmdZa3A4OWtDS2EvTWlhWjZuTVNsZXA0c1dHUGhtQStFTXd3WU5RL2x2dytNVmR0bjdJYjU5K0l0L3dBYmRQZ0RrbHhNU0xuRSA4VGlSbzQzeGphTTF0TXFZbkRNaDc1YndPb0pGa2prYVJra1Jrd2pTYVBLZUl0N3QxaTR5eXBjYkE5cDU2WHRmc0VjTW5tQURsbkRjIGs5Q1VteEhmQnJ4RURub3RUbnBTM1Y5Vjd4YWlleUQwTnE3WHdFYmJGbW0xZFo0TzdKTHNiUDhBdHY4QWlndjNSaFg5TmFpS3F2aXQgM3pKaG00YnhzbE9CNmZmR2hlaDZnaWtRV1VtTUJoYlczeDc3d1E0SjRmQU56Qm5GM3ovZTNnVUUrQUFBUDM4SmgzUTRYTFU3SkZzYSBZRUcxb0IzWkhNRFdBc1lybHp2bm1jeGY1aER1QjhtRC93QWxqME8xRnRZd1F5aXlUM3ZteHcvdjREQUIrLzJWcWQwVTZ2Y0szaWtNIGlOU2VtNThHM0d2WGtxN1NIRmkySGE3SS9uR1FPNGZyT24xLzNIVCtNaS9LZDBVa0p2OEE5K2Z0L0FBQUJJK0dtbEt3YjZMblBTcHUgSWtZS2lRUlMyTnh6MmtKZ21aSGxhNllZNHRUcVlpSHdyYlFPeStwTElodEVlTEliV1Z0UnprOEhqanFPSVI3Z2kxdkRkMk04dEo4dSB6bVM0MTlxczZSRVduS3VkVXQ4RExnL2lkVGs5YjAzek1WdDRiZWV3V1FuVURSUTZ5amNKNFRoaWZ4dDErQUgzNCtBOC9XUmcxQU50IGdFdFVBWkpTWVlHeUhaNG9ja2VUMU5QVGFscjA4MFE3UU1JYUd0cmN3aHhVOVlBRUZnODltMmhtR25UbFhHL1BnRC83RHY3NHVCZlQgKzZscU1kQmMrdWF0R1EyMlI2M3IxM0xTejByNVY4VEYrWnZDMm52ZytZRHhZTExuSVl6YTJoWmVYaTBqaVNqOEJ0MUJ3QVAyd0FJMSA0cXJWcFFVdXlhV1RYQ3JvWXV3bzFlMmc3YWU1RFl0TkZYcnpSWXlJUEQ5MUlZZDhIR0ZXQTRRUGg4WmZDaE5tKzdPenhzRy92eC9vIDVGamJ1Tnp2Szd5U0J1MlI0d1V5YVNUdUxiTmpFWUM5dzhqbnJGSnVLcFNKbktSUWlFS3paVm1GOVFtaGhHb1h2YWpqMitlckxMOWIgeDIzVHZVcm0rR0RaNjFiQ0p5ekEydDYzaU1rcFhYZ01xSGl5R0xJWkliaDh5Q2gvUDNnbnlobzJ6M05oRGZQai93Qy9uMEVCcFZnOCB5amJ3YVZjVzdJTmVKdU1sVFR4MnJPbUlxRTBSY0ZjQ25zRVI4YjFCa0REek40VDErMnZoMW16YlhoampTVlhPM1B2QS93QkF2d0ZKIDFuWkhaSFRKWjFKQzBNbU5paGpWZTJCelllcHpWZHlMUmF2OXJnUTZIbVdSTVg0Y0NBUm5vOHhsSkllNkRQZDJOKytHL24vZmdQV24gVW9VQjE4OE94a1ducVZTcmlxMnBDK0gwWmg3anRTbkxrWGdMbERJTWpKM1VtSjdCODdoN2E4R0NaTXB5Wm1SL052QURnRy83QjU5TyBvVnhHeXhTQ1I4MlVaTGhIMllBbDVMYkRMTGdZbTZKdjQ2ZUZWMWpLeCt0Z2hlWExoa2xDNVI0NDhYaU83SStDYTZoMDk4MDZKQlJiIGFKN0k3SG9zTjJFdURVWURpWmlIWTZSVXNXYXYxdUhNVnVZaHNDRzFUN0F3VlZzWHhjWHpuWk9FK0EyQis0Q2VBSGxqcUlJSi93QXkgdmJRVGEzQ0xkVkRXMXRzaFB6cEd6eXJsRTAyVTFDTUc4Y3czZ2d0dkRiYUNseVFYK0w2Z0diSWsxZHgvWU4vMzgrZkFNaERxK3dKZSBXN2FmQXdmbllaRFpJZy9KcmZoRXpkSmF1cnNoR0hEcmY3SjlIUTA4RnlSNVp5ajQ4MjhqOTBhdDM4QnYrQjgrQUFJSnNweDlPY3Z2IHd4a0ZXeUREa2VvcUlqMC9WWmgzbU5DSlhyNVl5MlArRzRoNWdkZzdxZ1YvZS9KcS9PY0xVU1VtcmNEL0FML2wzOFFueVp5d1JwZzYgdWRpRXhvbTRFeWtqanlMWko1M2NndVAyRVh6WUV3c3lnS3lZSTdhZ081eHp4MjdRQ21yeHkxbXI5dDhkVksveE5NR2tIVm5uWTZhZyBJVFZQV0RzMnNMZ2hnWGd0L010Z3lLaGo1aUdIMUgwbStWK25Rb0RBZXVKYlp4Z3ZIYXdXT1A4QTdBTWYwUDNZc2xndFN0SkdvK0JhIHRZMWRZV1V0WTA0dm1IdXQyRk9pNmZkS05TbElRQXZEUXFITU9LZE5SMjFQd2hNaU5wN3VUSEFvOEhQZDNmZmNBd1llK0RBbENPbk4gYmdaUksxY3BWUUU1elBZQ1dBbDc4a2FBSmFWK1B4RXpaMXZINWxqY2ZnUEdGbU0vakNZSTM5NEFIejREZndDRDdHeGlSSERWUFZkMyBIcmFXME9yKzB1TlhoekFaM2NPQnkvaU9GZ1RGc3hkaWZXNjlEZ3FROURuSjdOV2F1ckUvdXh0SndBYkI1L2Z6L1ZtUlhraktuMlpCIDJGcElzaENoa1FnQ09QR3dTWTRsenNaRHRGYUlFV09CaGJsNDk2SjRwREZMR1RKR1lsWmxraWF3TXlRb0szaVZKTjJHY2NtWmg0eGkgaDV1Y1NKTkZocExaWkVORGFJaGkwTGFsdEt1SCtIRGh6TjRZSmpVK1ZlMjBEREdNNHQ4c3pZd2xYaERuL3dCQUFiQlcrSFhjd05XYSBUWXdFeDhQT21TVk13Qm1XZ0pRNGlidWtWaytJSDkwK0d2dzFWdFh5RTdrMVppeWhSWjgzN2NCZmovdUE0QWY3QVpSYkFxNm9aREhqIFpJeVNyZFRNZDJqSEQwUDVZRTh0MkFZc2xQVDNCUEFUUHdlZWFtUm5ac1JaTm04MkVlQUFEWU4vd1A3QmkzN05GWjM4VXN0Mk41d1kga05YbGZJemtlV3lQa29TK05FTWdZK0d5R0pqZ3RnOFBnVnpDSjIraHEvblVud2Uvb0lEM0FlZk9EY0Zlbi9KeXR0L1QreHp4OTluaiA0eDhtK3M3Y3N4enk3R2VzYXJIQVY1UG5QL2JFaWpkOVdXcUJNdGpVem5yZGZXWTloYzRvMVZOcVpSczJwZFE3QW9MQ2RwN3htVGNHIDVrdFNxOEZsT0VZMUxiNEVIVDR0NXh4eHJPMU1ES1J5RDFlckZBOUw3aWZ3cTRSWWJzdDJ5NlYwOWFZTDR0UEtrdHo5RnRtcFZYUEsgUks4V1ZQVjZkVHEvY1RKY0w2V0pleHNnR2dxVnByV0ZtSVNyZUFySDFZaFFaNjNGOWZ4UXZiQitLMHV2NmZGVWYvaXdMSVpMT3RBUCBHVXpGaE5UaFh0a09VcGRqU3BqQlZka01oaVl0dUNGeTBoOVA1TVVWMWxtQm13dW5pMUQrR3dXNmY4K0FUOWlJY2UzNlhzOTh0QzJsIHNNR1Q3c3FkZkdvYTlLNWxkelkwSVpqdHUrV1JENGRzNXc4UXFYbUg3VU1HZWJPZi93Q3Z2M1YxcGk0Q3FuMHo4YVdPUkxlTnpWcTQgc1k3dkhObjJIZ2pqcXNXQ0tXWUZvM1dXU1NDVzBralFVekJzZTdDeFFvZTZ1T2xMUjlnU0hkd0d4TmFXcTdiYzZwUnQ4eU01YkhxYyB5eGp4Wm92bXlXQ0hjRmJ6S0hjTEFXd2Y1cGVBNHdZVTdQbyt5R3dod0I0RHIwYVczbm00OE94b1JqaE9veDh1d1NRU2RQYnd3dm5kIEJlcmxFWkY5d0RtQTkyTFpHWThRR0J0YXNCbW5xMEt2cUFuaTdjSnRYeit3WVZGNzlWRlMwZXdLUXpLeDFjOTVnbGhXQ0hzaUlQU1ggWmZZVnV4cFFtVkZNRUlpM3lOYm1FSEVKdDhBNGg5ek4wR0xMd0UrOGIrQTMvcDhDN1F5Mk1tNEgwMVZVcGdidVJFdkRKYWpFdVpLcyBhWFkxM09BOE95Sjh5MUdRZ1krdjg0Y2RzZk9EUFBoRGFQOEFZRDRCZ0FjK3dSSVlwSkdlSjBXRnFUaHM0MUFyZWhlU2hoZHg0dmliIHB1MFk4dGpXVlVJZFh6MlpXeGZkajlOakh0dURIS21XZE53dzdhQUI3eWV0R1l2ZzgxRFcwMjFWWnRBNXVUWDdDT0xwSmd0NEZUS04gRDVzNmZEcDliVHlIOGhWODhIdVl3WHlkWkJtLzl2NElINy8xeUM3b01VaWp0WEl3OGs4cEhxM3FkNERyVFJFL0Y5eHBrV3lHQXpEVyA3SVc5d0RuTE1UK0ttT2NDeWd4WjRTYi9BSC93R0gwRUF6aUZieUlDK0hNMlhERzZiMGpoSmF0ekR0ZUdIQStKbE5uSXJkYnZrdERtIHI4eTFCNitlYWc0enRlMERFWjRDR3pieDUrM1QvVVBUZW45YmNuak9nUlhCSnRTN210a3NJaGJWWTEvTDVRZXJJQ3I0ajYzRHNpR2ggc3BCd3NadHRDQll4anVZTFEvNkoyVDNmL1ByK3dBQUM5dEFtY3h3dmlNVmVUbWlFUElyTDg4OGZCdm9SdUt6RlZTWkZRaVV5SmpKQiBHMkZ5TkhiVjdlRnk3Nkp5V3VpbFRPYVoyaTZDVnlPK1MvMVdMaDFMTEhaTFVITEI5UVVWZUExTE1BYzhtTWpoQ1RxcmFqeWVCK1lVIEdjWDhHaytEUFluMTgvc0NEMG9GY2ZETWxBNmE1MlJLWktsenJJZDhYeUc0V0ZEcmxvbG9hWVk3cVhCVzRkazFJZkRCdHVQYmt4eVogb1Z4Z3poT3liQWZBZWY4QVA5RFk5TGNNNXdhbTFTRzJSWHI1bk1seDFPdG5sOWRUeWdzU0JLR1BoL0REekZDcjA4NS9JTlJrWXpGRSBNbXpIRWtJYk9IOWdQZ0QvQUlEQlYxdVlPV000VEF6dm5hYnhvR3ZWdDNrTldsZlVSdkQ1U0tRME5DZGFLR0hEQjF1WTRRL25yL0J3IC9mSll1Ukdabmp6WndDQThBZjMvQUdCeVJORHVsNU0wU0ZJOHF4MjVQc2xySTNWdDIyUFB1SG5xQXhrUnNzWFl6cTZ0bUxiYnhzVUYgRmU4RzdQUE5mSFZqSEJPVGFDY21xcmo2VWxNY2dDV3k1TUtRblhCU2RpQ1lBazJLR21ob24xdFRZUUhZelpzT1BQdzlXZkhXQWEwayBqL1JuWlVGVFd3Z21Qa3djck91ZGF1V2g2N2lFcXlaTkV1bW0vTXl0MlpzVkJsd0F0WTk0aUZkOEgraGxLR3M0NG1EQU9TcmhSNlJuIEdUSmZMVG9VR0tUellhM2xEWXhoaE9NR1VXbjV1ZEE4Z0RzRzArUkRrRnZwNnNncUxyY05YZml6L3dDYjFKRXpLckNhRlFRQ0JtVFEgT1BGOFhXWDRIanFzZDZ0RU1wUThPZXhnYlJBd0xIU1ZNaGFqdFYrbytIR1BPNzVLMit5QStMSlZiNS9QVDdBQW5FOUdlU2d2K3llZiBma0FBQUFId0Q5MWFqVWJZRjZab2Z1WEVha200SUdtL1NycDdwK3EwOHhFVHdCN0NNVVc3UlQ0YklIc2hiSU9FSThQNVZNV1NmRnhtIHh1OTJjSFFmMCtnNy9qRHZENURwRFQvZnk1ZkNTN05Xb3l2aHRPR0taUEIxT0hGVFphYnpBZ25tSWRrR0dUemxhRUZLdWVDdkl0OFogbGhIL0FCY0Q0Q0E1OVVTQy9IMzUvYWlLUGJGMnhFOWNpdmxKbm9HZFRna09rNTBCMzd0VnpZU2EwY2ZtSWFmVlpkbEg0VGoxZ1B1SiBoWlJsZkVtVDlra0lEUHNBREh0RnNBQkJCbTBtN0JBV1FUVEk4aVJUeFJKSThjVXVram1taEVRajNJSXhxRVo1U2ZKUUtvc25wQ0NWIG9wWlRJeVZnSFZHb283V1lrdXU0U1U0Qm9ZNCtHeTRTYUFRRjZrYTdzSThuUXdsUHp4dFhGdTN1bnNPSmNMdUZ5OEFOdzRXK25yZnogREJCYjM2djU0UDZ6endtVC93QTdVQUFPMFd3QVBQdzdqRGo1cnJNZkxHUTR5ZlNNd2J4ZERvMVhyTGk1U3NwVW9PUCtoMXUrQnlLRyBqZ1YvNExnellvYXZ6bEczczNnZjVBZi9BR0RZWWRMWDYzU0pBRkRkM2FOU2VWMmN0ZU9CdTBPNzNZQktNTm9QajVYN0lIaHcreWZKIEFkTEVJRlY4NVJtZ3F6TEp5cmdqczhZYitCUDcvd0JhVnM1YUYwdzg1Y3locEpxeXBxQlp0d0RjaVEyR0NpR3cxekdXNnY1THdPR24gL1ZUMWYxbzhUR2JsRm9FOWpOaFBQN0FBcUwvZjJxSm9sV1pRK3FrMjNRSzBqbU41SXhIREhISVdwc3M5cG14cjB6WXllNzZKbGxhTyBBczZETE9saU9VYTBZL2FsTGdUZlBKeUZEaXVwalQydnNsY2tRK3I3VGRjRlNQbHYxajNDcmVaVzVoVFpIdlZCWHREZ0h6WjRiSStMIGN3aFpCeFNZRzJ1WWZHZm9yenZhUlZ6dy9jQlAvWHovQUxMMWdmTFFNc0NlK05ESS9nYmF1QjJzMWZQRXNlWVcwTFV6ejR5ajNDcTIgU3EzQzFIQXcxZG41Nm90akNmUEhrWnZleVBHd2YyRGtIV1JHdGswZTJvbGFvSzB4QzVMYldOa2FmSGM3cHZzQ3diVFRwVFkrTkdtOSB3RFdRK0ltSWdlK05UWVBzcTB6RDA4dmd3WVN4NFRWNXZqNzloeDkreHh3bUZNd2J2T09Ic0ZuVDZ1eVRGaFNiWU1XcitUVEQ1VjdZIDVOREpZRDM4eDhwL2o5cU5XbmpUL1A1NE1HSWF1TThKNE0rL0w1LzM1OTBJa2tqMVVxdnBwQkRoRFdzVnM4Nnp1SjRzUlVrRmpLYmMgOWZjdmJpMis5RFJvVUs3eUxNanNGamZ0M0krMEpJR3MxbFJ0Y1RYSGNiNmt1NzVEajU1WGxHTFJ0cWg2OVpHdXlLOWlmVzVTSlgxbyBIbHNlSTdxS0JoUDJkNEFNQ0hCWEJ2QTJmYXdkWEJNY1g3Z0w4QVA0NytmNGhZYlZmVUNvMzBTQm9iQndyVzZ5Tk82aHc5S05NT0UwIFBvaTR5eWhQNGhaQzB5SjU4UFkvejhXdFpaU1pWQ0dmNlg0bThQZkFCamhnd0gyclcrbGU3RElET2xVRWVKQjYwcCs0Nm5xZDJzNnYgNWFlZUtMeUc1TWc5RFE3VXF0d2NDRU1IUFg2MHRSUEpyTFFMV1NZUFkwa0h2NzhnNytmUDRBQ1E1YWxiM2M2UG13c2p0ZjhBcUN5WCBhd2s5MlBYQXZHRmg4VXFscVdHd01pM1pDZXlKNUNhcXR2TFlLMzNmVjFjWmovWXovd0QvQUJDL0FEazI0MmFTRzFoa2RtRWc1OWM0IGZUaXZ5UFU1dm5qanFzWGtnR2NybkJFaktnMUhJaC9rV1JPY3N1MHFjaGhUY05sMjFYVzQ2V2gxSGNDUTVaSnR3MUFwOFpUejZydG8gZ3d2bGpQaTlWOWN1SkN5TElyZFBRc1hDWkJnT050VTdNWnVVYm9UKzdWY0QvWU5nOC8xYWl2OEFnNTVjVlVOWEEzNnFsSFp0WVk5ViBxdHNWNlhjaGN1VWVEc0RnNHAvelhEQU9xN2VlTm1HWW1ocTlaN0diU2YwOXQvNEMvbitsdXBrQ0FHM0VrWEtWQXUvTlMycG8vYkd2IDViSVVWMTQ5TGhyNGVxMXVFWVpONGFyYVgzeEhaQmd4RFZoak4vV3h6ZjhBai82ZnFlQ2x2TFhBNGVxbkprbFdFQlZmNWdQVEpoaE0gSzR1VzVWelpKQkQyZDhjRnRnVDJxQVFVbmhrWm1aRGFGbDVkN1JwTjJOL3YrQURBQnZ3c3p5cXpZUDJPMHFoMXh3a2ZBcGdiUHB4VSBjSS9nc1RsejAyTXEwY1lTTkM0UlFWMDR6dEkvZkk1N2NjY2x4V2psYmR3cmxKbktuUTd1VTA5alBLbzRQbExadXphbmF1NURZaGkzIE5obFZMTUlPREl5SWNOOHNDSHZ6ZzNJL09TaXVNSitFU0haSFFVSGYrMFd3YkE1c3V2NURIVjluYVh6MWJ4cGlHbjNaWVY4dzdVajEgbERjajFUMTBlcmI4RHJUSXQ4Z1E3R0JKNUE1Vy9KaWhSWjN6elp6OVAyQStmd3JvWUIwMnJrWHc4R0F1N3RsQVRsT084TzVrZFRESiBrcVhYS3ZEWDVsd2NEUS9yYXFlWUVQa20yUG5CbWJaQW5zQUFBQUg3QS9INW0xTElZTlByWWsyL1ZXU05EdTllcmV6NU9janFiSEZpIDNlcnhYemVEQ0hNK0dQNE8rTDRFM01KN3BpU0pnM1lKVjMvZi93QmdBU1I1SkdqZDVIWklya2haR3d1TkNpR0pnUTM5S1NSQTk4YmwgbGVDcEdPUFkzSXlkdC9VZ2xGWlpJMklZWFlyTGo0TkFmUFRDOEllS3NnR2RaQnNhMjZpaVV6RU9TTXk1a1hUbkVlM0tFUStYczYyeSBKNjN4SmZyUUhnVHJQSHRBekk1dmUrMFI5QkFIL3dCZ1Fma094TXdNNkFUTXF6dUV4UTdKRWtIZzlmbHJVZkUzRUNlN1BwOE44K0doIHI4eWRXbUNrcXpNSGtvK0kzQi9OMGVmOEErdngvb3JYMDluaWgrRzErTmRyeUlOVC9NRElhU1k1R0xWMTZ4bGNQYUV4T1c0YjU3cmQgNEFiQm5nMXY2R2gyK01CbXphU2puL1AvQUxCMUpXUTRVM0ZxZGJQWlRzTVBYU1l0R0lRUFVhdnIweE5RNjlxOURoL01NR0laaUdueiBYaWxuQTgxSi9HZVVMTE1jMk5KT0gwRzNRSDM1Z3c2V1pkelVMSzhqU3d5M0NGU083M01iWmpueGpYYUs3clBJcmxnQ0JIalJNY2M3IGRUbEhJWXpGN0dwYnZQdTQ3ZVBPWENyYWFqVExwUjc0VE1yT2R1L0dUYVBza3ZpUXBzaWRVckZWNHRrVHRuMVVURU13bnc1MDhlQjIgZEdHSW5HVWJ1aURONy92NS9qK08vdnhoTURORmFCMnJTWGNqaEpxVW9rc2pDWXViT0lxYklVdEdYYlF1bjAvZ1ljTytHR0R0elBxOSA4VmJKZVdaWVYvWUhqLzU5N0FINUI2SkxJUjdBQXBpZVpuaDcxRC9XMnhnY0E3Qkxobm9xbTBLLzg0WVd3NmZEOEhQNEhZekl6WW9lIExNVGVEUVQvQU5qNit3Yi9BTk93cFJaK2VRdHJ2ZE1OMUtlcDlBWHRVQzJISVhHNE04VnNUUU1NZkRjQTlWbVdSd3dhb0Z3ZHhvWlIgWnRDcnlhenNtSGdBQy84QTlnNnZkUVNSdE9pU1l6R2VPVjF5K25rdFFBaThlbU9NRXNZMGVUZkY3REN0ckJPeEk1TVl3QklnUGRuMyBjdTkyei81Ym8xMTUrbExRTVlMYjJlS2JhdDJPeUlBbjVtZFg5WkdMUXE4dFkzZFJlRHA0ZUZNbUo3SUMwOFZlMnpwaE1ZcmxQM3pFIEo5Qy9ZTmdQOWVqVFFoMUVGc0NtUXpIY0JMVlJWNDJyck41SU5zaXNvZGpXZ3ZIbks0QjdJbjFWRGNGdHZaQVFGZ2dUbkQrbDdNSmcgNnUyU3EvWUFBNTZmUDlJeGtMM0ZsYU5iK1NraXpFZ1BwL0xzY1d4N0JzcFhySENyMm0xN3RUdzlQT01SaXd4ZkdBTzFLVStwcCtGRiA4cEtJd3dIaGoveTRZMUZ2L1BjTWNLK0IwOVg0dVN5andHTkRpall5bTRRd3dkZWh0RVZlc2FYU2FlWVdqQmVIdURKT1BwNTVxVzdNIGVlemRaa3dmbXdlRnVnTmdRZjJBWldhYmJsRW0zZzhxUlNnZW9hMnNpa2lsWkl2dHlDT012a25GYUFKVWxJdjhpSTVOK0x1aDQ1cjQgNlBNY3VxeGNnYmxYZERHMlFtclp1d2w4TzdEN0NNRkFMdlNKUlBJZk5tQm1TeUY4TzFQbFh2bUgramhRbjlKTjdIdi9BTy84QjZmQiBpM0ZzOGgxN0svMDJ5aVRJdzJCY0dvcGdpUXoxMzJhaHRFMWZjTlBkVnNreERzRDIzR3krTm96Tnp3bVQ5NnVka2Y2LzRBKy9BQUNsIHhCNmI3VlYzWjNWMnBBMHUycENKY2dtVjdYNm8rUldoZXRENGZ3NnJUNnJUL3Nod0VRYmJHM1B1aDltT0pJVG5BRDdCdi83QkFwK2ogY3dHSVdFa1pwaDJwK3k2M0NOandIUTJoVDNSRHMyVXJCMTh4TVEzd3dudURKdnpncFVkeVo1YU9NczNtOWpma0gyUWRnMkFBTERjbiAzVEtpb2F5RWh3ZUwyMWFjKzduN2hXSlBUSFdSSXlRYVIwamFGK2UvVG5pTVZZckh1NXMzZkFGV1FPNExJc3h1TU5XYTA1Mm05azFEIHUxdFJBN1ZjeEJldUJFbEtiNXA5RE1LZmNISk9IK0NxVzBHMEdZUm1aN3EvOWZ5aUQ3dStmMy82REkxL3BEYktSRjhTVW5hcGJhdFYgd1pMTkR3ME5QRW9aUW9XQWk2Zkk4ayt5VE41Vko1QTlqTStoOFpadnV4czUvVDRCK0FBRC9VZE0xRU9DUllFeXZtakpOMytHK1NrViB2Wjh4ZllVTkRpdTZ2WEtHUERya09Zbi9BQUhBNGVzRUMxVE56VnlqTnZudi93Q2ZIOEQvQUU3QmRvSUJSSFNhNUtMZFhBZFMxUGtwIGJBTmNUQWt4WFA4QUV6VGRvTWpBeVdSVzVnUnlEWXdPb0Q0T0JTekZmVVk4NEhBaVNrKzIvd0Q3L3dDZkJKMmpNU3JBOE1UN1Z5TTggU3dKbmRldEs4VzVXSnVsRkR5Qlk2alJ4eXNaaE1qb2pzaWlTNG43Y2J5UzVNZklvV2ZIbnBiMUJwMHNRVTRYeG1sQUpzYXhtS21MVyB1Tm1GMGRrcHV1V0d1YWxVT2VRM0JrUWpBOWJucVI4OGppQmd6RXFNR1dwYUhOUWV3NHNIdGd3TUhUQ0hzQWZLWDNEZ1ZHc2xWY1BiIGFudUJidWFPSmZGZlJHMlJaVlBwOVZtSWxxS0Q0b1REbEwzaFpjSDNyTW8rY0dPQkVrMkRRUGZud0E4L3Z6OHEwZG9kRTJRZVBhYWIgYXNoUHZoMmJSSmpKdWFPdlBkWG9jdEVhRTlndUJ3MHhRME44SU1saXdQNGVHcGIyeENhT1RXcGpkcVNEK2dnRC9VazZaYTNZSWZUciBVQzRrMjA0WnBKc2lCM0RsQWtPbTF5a0lkeW1Ldm1MZDJVblQ4enVwc0krMnFCTWRzeGROaktndFRoUEIvd0JnUC9zRDgrV09WOVN3IGVrMDBybVZaZExKTkZJWE1NRVV2MUJsMDhlL0hKdFJzRVhISHVCYmtFaEU2UXdTQ0VvSm80VWhacDMzSTEzdFVRSk5PK0tYSXUrU1cgcnR4QTUzT3cxUTA5TW5oeDJicHpoTGRoWlJlcnkxb1BtVFcvOFFiTzBVT0xQb1krcTVtalJqbUJrQ3lPeXplUUI0akZob1Y3Z1pVYSByOWx3WU4vUCt3RERFQldTc3pLVzIyNW5DMmltV1RPdHNQZ1dhS2ZQVi9MVzJpeG5aOEtReUFjT25tQTVpMEppcUJJSHVTREZsOGZPIE1uRWxKMlBZRDMvMEM3RmZ2RU90Q0FFWHB1em5aYlRZYVM3dEZxYWIzaUk0ZHBST3FCRERqME95RnREaHZsb1ZYWEw1c1AwWmwwNSsgTU9jSk5neitIbjlnK2cwNXFldm8vWXNQbTlzYUJEejBsYjVSTWNIQ3pROHRYYkpSNllRZkRGd0lWa1RONE9kd0xMMmNtakMxZG1KKyBFZHZvSi9ESHRGNStReUs2N2lzNmg2N3BJOEhlaVBkSGsyRlh4M05ZSjl0VjFVeFZUU0xTUlZpQWNrYlBEMnlVTXNhQVBieHgxdU1JIDhmS1N6QlROdmhKcmNDQmphaEVjTzFHSmI1K1FydXB1dDErWUhyZDhobWVIL0FzQThxc25ZMW9GMllNQjRtelp3QUE5K2ZIOS9QbTIgWlc2SGR5K1Rjc1Urbk1tekE2M3hlN084SGV3WFkxVHVRc093VEtmb2RiY0lhL2FsYzZoOExwQnA3eXpvZkpoaU83Ry9kZkFZdnlDLyBBTi9QdVlId1BLajIxQXJsbFNVL0RWRlc2bWpXcDhlbkljdDhVM0t1VENmY0ZWUGdlcTJRZ0dlRHhENTBNbnlob2VVWUhTWVQ2Q0FQIDI2L2VBUDhBVUMyVlBKYlZ1dHg3UUJzaXBYTGpaYTZGVVA4QUwySm9kNmxGMlFRaG9iNFkvTUQ1T3N0UFE1MjV2UEtHVzMrRTlydC8gN1JBRjgrL2JBZk16SmxHMEFSSGpkU3JoZlVlUTFoSEl3YnV6N2dyVU1DQ01XeU5RS3lxME13dDByai9DU0w4MGJ2OEEyOGZOanBQciBhdkhsTDZxa1pVMWtUN0xNS1M4cjJFQnRoVGNMNUtDYkhsTGZKRVBUR256T1h3N0c0KzJxcGlzMmFtcjR3c3dHRTluallBSDdBQTMrIDRFYzVwNlBMNUpYbjE3YlNxN3VEYkxZSmpVMEpGcUliUnBsUXlqNHdWVzRPREp2QTlQZU1iUXFheHVNMlkrRkdabTgzdm13YitBL3IgN3Fvc044ZEhkVEpXRGRPRWExRU96V1NzbWl5Q1c3MVhGUFhJVVBURThPK1BreDhYSEM0RWdEZ2VCcDVQMktEQmlPRUNXamFpQ0EyQSBBL0FBSFZoTXUyRk94aW1kWmRRVFcxUERibFp0OEIyUzJHSCtKYUxZUlN4bnorRzl3RHpFKzFDSDVhWUorbVR0QXN2bUR5OG5PRTNaIHB6ZmdCOEFBUG53RDhmVXNkdWpCcVNLOEltU0o0Mnl4dmNSME1ackFZN1VjUGs1Wjl1TlJzUFZzNGJtQ2xsNGtFWXNPaVA4QWJuYWwgalI5bzROZEI1QmZtcERBZWJUMmM3T0U2cTlwUmhydElFNFBrVVNyaTRiZ0hmREZ3VW5NK0hYSitlK0k4emNrUGpPR095QkVmRStnOCArZmdBQis2M0dEQXV2bzhPbGlpM0dhak5EMXU3eUdyT1lObWxIaE44QzhMUDQyK1dTNEliZytITExYNTROOEdjRHRFWXpuQW5nK0FuIDE5QjRDL1AzU0hUeUVoM3VCUDB0OXpsSmtzeHdDOEhQR0t2Yk82SUYzR0FLZklkeURGRFh4RElWdlFKNGVCVlJINVFWN01lS3I3WE8gMndlM1ArZlc3MC9xN3V4TDR2bjZmckJEMzhlUEI2M1hsZXBiT3RqZUpVWFRnK0hzYlFaTlFsYnNreWs3Z3dPSGsrK09Ock5acTl5UCBMenZZUUljd2ZyZDJBQWcrZmNzalI4Q1Y4eldjYWtSeVIxV080dFA3dWNlZklZLzZVSW1ERkN5TWl1eUpORzJjY21PQUpVMHZpeFk1IHEvUFN5SE1oWXF1SnpCQjAxRWJTT3RDZXVzejI0RDd5ek1tYVFkRGcvTG56c3huQk02UzRHbGh1bEM4ME9TWWhPYm5CQmN3aFB6R1YgWEIrbFRQZ3pCak9vdHZzKzBLS0l4YTlzNnFYR3gyb1lMaDRZTUN0WTlhVS82c3Rjalk1b2xMSEhnZG90UzA1bHlrWlBGZzgwWVhuSyBhN0FHcDBsVlNRUHBad1NnT2ZHM09saFlLSG82MXZITWVnMHJvZlp5ajRya3BvVTFDd2Jyb055WThtbEpva2NtandhdWhkZkJyNEhSIDZZQmxXMG9CbE1ZRkpyZG9zNXQweW84eXlPRU9CNTkwNFl0SHZNV3pGa0I3NElMZGpQbFAwUFl6SXNyS3UwZHpIaXJnZ1JIUHZ3QS8gc0NDZzBIMXZSNnJxTlNIdmVWYXR3VmRNVjNZM0VyZTFMQ2FFaTFLNXRwSWNuTndZREZWektmcXREcStaQnVuem5KN2ZwdG8wOUxJSSBJRVNRWjlCZmo0RGdOUmV5MkYzNW1aVEFORnVXbTlTdFFEWHNkVHJmT1E3UWJMZ3JBOXNLYUhjSWRrV1ErUGt4d2g3OHdBV293ak0xIG9GR2JmRGRYSktPQXFMWVVGQ0FId0hYWUx6TDhud3pDdlB6Z2cxRG1CR0c2QnJVd05oaTBMa1NCWXFhbnAvRzYzdFF3bjhxYlY5dGEgV1FXczNKcHpSaWJ3YjVzajkzZm9QUGorSitra21WQWtVVTJuN0k1WWhMSGhIREllMU5oQ1QyUlJxa2VHUTlvYkx1b1BrbGpkaXp1bSBvTHV6eUJIcnpqaUR3YXFtQVB6eWE0NTJ6eUF1TGhrTGpJZEhQZE9FaUphU3QyYUlVMi9DbTVVcE5tZkRmTHJwU1kzcCtPQjZyME5WIFR5Wk45S00yTHk2cExzRFAreUVBL3I3cWZ2QmJ1UTlZaWZLYUtOQ1VEbTV5a3AxdTFFaUVSYUF0Q1FMdHFrMStIMjNjQTZHdmI0cE8gRTlIWEdaNWFLdkZySjAyN1VtY1BuejRBQnY0RUFBVE55eE5RRlN0a0pjZHoycXVaYUEyU3BvL0d3NlBNQXhaWUZ5bUVHVXd0OFBENyB5OEtROENEaGxHWkRLY1ovL3dBQjkrOCtiV3BYYXZGczI1clFBbnBOYm1Va2E3NUdkUm8vVGd0eFNnaXBkbllIQXg0ZUducmVEYTNnIFRqaDJ6VjJnWmI1emhJVFlIMjNlUG9QZ09qdlVUeDR6UXBHc2tJdFY1dmN4OGhnWTJ3Q2c5OGJlU1JqemtDWXFDOFR2MllpU09RMjYgeWNCa1phN01hRkd6bmZoY2U3c2gyQkkxTjNvTTA1M1Rrb0ZlbEE2a3B0RTBDbnhJYXNVc0tMVjh3ZXlRM0FPdG1QbVZ5aDJCUFZvWSB6bERSeVpJZHRrQm4vd0Q0QStZTDdJcHRGZmdaNVN3bElRME9Gb3NNZER2Z2dXMnRvS3BsWHJmQXBsUHZ0Smh5SHdRRGdlc2JjK0x0IENNOG5EZmE3Z1I4L1VXd0g5ZzZjRmlVK3l2a2Q4MWFSZTVEaHFNc2l0bE1obk9HZytZK09WY3BDSGFFTWV0dzAvVUpjSWRnTUk2R24gZ0tyaGNaRjA1VUNNY3RHcmtsNEFIOEg0K0FQNy9naDZub3ZUZmxhVDJTZTVOVlhKSjZHMjNIVThNUDJuY1hLVmJHd3JhKzRHRE5WVyBwTUhRdTB2YVJIRDhaYUJaTW5hbnVFeHhBUDJ3ZTRBQjBsSGlpU01hT1pJdE83ckRHclE3dFRuZ3hnbVNQeHhiZURZN1JSdHJ4VHRMIEsycGgzcG5RNnhodXpSYmVuYkdzdHAxdVFVUkpHYnc0cGlHSjZoaFk5YnlyWWh4UTJjcGFoSUFkL3dERG9WZ083NE1pc0t2VXJnUGggdzF1eUZ0UGNJWVA5SnkzdG5GN01Sbmp1alNlLy9RZWZiQ2ZBUkRwSmZGelZJZVhOUmxlK1paTFFzNXdKRGEzTFl5azJ2QU1XR3dURCBQYXVINWxxN2ZJZnd5WXdvc2VjTjhKT2Y1SU93ZE5TWlgrbjlTSUxlVlphNDJ6RElGUytRU3M2UGJCZzhMMUNZSnNOaGZFOThNZk1zIENXcW9hZWVuQjBZWVUzTVk4SklURGY4QVlQOEFNQjFYc2ZWZFByRjhjY3N2Sk4yUWh6THNpU1Z1d2g4dGtWbktYWEw1Tlg1amd5VnMgdDNaVjYyamdYQ0JCM05HS0RHWkdCNzVzZmdOZzM4QjdNRVNscDJFbnZoWnlnam1LUTdlUHJJa1NTK3pQbFdLWms4TU1UMHUyZElJMCBYc2htanhHNUVLeUl2K1I0N3ZBZTIrZk5XTFlRTmdxKzFhL2F1MVRVY0cxOHl0ckRIMDY1eStwMlJ1anZ4ZGtUNGVDZWgycUhYdzZyIGhZRkRnekZaTXpSempaTms0Uno0QWZBYkJpQjZzaFY1eU9rUHI1V21VZVNSdHdYeHFIb2ZVaFNWNUw1YXExZmFUd3NPNEJ6RXpqZDIgT0JpZDl0VmNGbmk0dXpOanhOODQzOSs5bjdGQjd2Q3FPMkxGOFd4cDFUYXYweDFMeVJQazJ4VTVJa3dObGIvRjFqT1dENFFtVnZETSBCdzVBUFhDbGNDR0Q1TXNsTFFSbWJtdTluVDRCQmZnQ0RzQi9wUDYxRk8xRmRvZk0wenhMT0YxaWJLc0JpbjQ2UW5sRTFUcStLWmNOIDRULzV3Z1kvbjRGalRCbjFmazNoQWh4K0FIejREWVBQNWRRa1dzbmgwTDZmY1RUN09zZW1HbWtFNlN4UzZhRGErcGlFNGwycG85VW0gWjI0bk1ENFRTU1J3NnRNMzBrRTJvam1oRHk1YVJvU1ltTHdOVzlNcnl3eSttdEpnUWk3aFpySzRqcXlFTlB2QzZTb0lXQnpuOVZWNyBzZDJ4d1Exc2gySFRhNXNKOEtMZFgybzloNGEyNEw2Zi93Q244OU9UMllZVVF4YXlEQ1ltL3YzdDU5K3g2cUt2MWZZbTFqY29YWHZKIGRJMmNFVTNDMm9ieEVzZ1c1UkJaNThIekE1aGJNR0dCODJHcjIxSCt6Ym9qTTIrZTd3ZkFjLzhBMkRxQnJ1L1piNFlQSG90d0xka1MgcXhDTDFINXg1NFNGdXhuTHMxMjNZWEJiVzYzbWJndDdDdmdYaGtKakJmdVQ4Myt3ZnYyLzg5SkxBMVVBNU15SFZWZW9iczRXVXFrdSA0Q2VCYVBZWFY5aEFTaGdldDQyUnc5REgxdThZRUcyRHViTXJpN01yTDZUc1g5Z1FmQWRPaWJ1YzFqZUtxU2RVOGFvdDRDVi83elVuIEp5a3hUZG9Vblowa21FS290OWxMWmxiYmVSWkh4TG1HT0tHQzQyeEFFWlk3VkVCbXpOWnZpbUdaRU5qK1pxaW1HUnNuVGhaR2NYZUMgeGpTK1Z1NmtTZ2NlbnNoaWszemNGdTFmQXRRY21zaTdQV0JmWk9rNnVCNy9BTDlpZmZ0LzZzaFY4Z3hZSld5QXpHNExlY2tBa0IzZSBBOTVENWRidVhIajJ6ci9BNmZmTElUMkRmT1lOdXp2TFB5aFoyUHVqcUhSMzd0RnNHL3NISU4wZlBPSG5SUHB1MzcrSkljV3lRakF3IEpLMlFpY294cWg4c2FaWHhlSFQ4UndsMThIcm10ZEo5dE5UM2d6TkF0YUpuT0VoRWI2Q0FBSHo2L3dCQk1Oa3BkM3NRd0xTSzNyZVogYXA5a2lORmhUSy9sODhwR3NnS3VocDdJR2ZBNzRIVDRkcVFLL2Jad2F6R1o4VjNuZkFsWEpSejhSQVQ0QUFnOVJ0dFdEQm8xbGpqUiBKdDJHSVZSN0RMdExIczMzWWhoTm1RUjI0bklVVnFMQ0ZObDVJR2dDVWgzQkVrb2pOM2VlOEFHNHhLWlVjNldCT09qd3BJNTdGY2NMIGptV1dlU2VMMm9uMlFXM1dLN2k3a1pCOE54NGZNMi9DQ0JIdmlPdHJCUGk2eU01czdZZ3o0RHU2ZjM4K0F3bUppMktiZGhGcEZrYWsgSmpHdGtpdzlQVDFkSW1WZmR6dmFCNzYzZzRNbkpDSHptMGUyZzJURGF4YXpabXhtemJ3QTMvejZENTl5MnBEVzRFZEVzVW9ZcVhUZSBodXQxdTlYcEtxMDN4all6M1EyQUthUldwaWZmRmNPSkQ0Q25XRUJxcmRuV1ZpNDJZbWNDNGI0QVFXQUFnQUdCQWZrS29BZXhDQjVUIEQvNFFkYnhVczViVXlFeXQ5cVpHZ1hVNTVYVHlIekxVMDkvY09WTnBDcFlLMk10L2E5ekI3NDdjK1FrRS9zREFmUWNkY1RHSkpURWQgT1hNejd1cWtjWVJnWTRxNjE3SkxiSkw3eW83bHg2VStiT0dsamQwSDA4NmJYZklZek1rVXBFZGk5cmRSaWN1U1FPUFBUc3pLN3V5NyBteWszS0JjeTN4S2dVa3RJc2s4WTJjRFkxaFNtaDlIMXVodUJod2hXRE1WWitvQ2U4c25Ca08wQ2V4cEtUYUlQWUg0K0FBYkJ5REpnICtzNEQ1YWl1QlEzWlZ0QkROMU9RaDAvSXRpay81czZMRFYvRGNIQ1pNY0xBNXh5QUNEdFRjNmE0TWluRGJzRTU5LzFBSCtwaTBIQ0cgVXZRUFlLdW5YWmMxVlUvR2lNQUVPOE5sVnRGY0ZxdkYyUVFUM0RHeDNDWnkrNHFIcSs2VWRQWnY5VE1VYzM5NDU5d0gzMkRwQTV0eSBMYTVxWXliUVZ4bzNPNFJKZDJCVkEwL1owdzhlWG90M1dRd0o4eXEyU3lJaEdaYWtCUGdUbVRrM2VVWjNVcTYwYXVPY0JQN0J6N2YrIGxxcXhLZ1JFd1JBNmlOYmQ5K1dTVWhaTEcvdDJGSndqeHNHam5TMDdiaE5qdmtySi9ONGtWeHgrVDg5UnNkYlM3Zm1RM3l2YWZzaVkgZUF5V3d3eU1raXdsdE5BbFlxdStFSWI1Z0hoekUrSDc3ODhUSGxtRnE3TnNmdC9zRUFBUC9RZXJFclV6OGJybEk1dEJJTElZY1ZKVCBSNnh2NnY4QVVKZ21ubElvaG1HKzRCREl4cmJlL3dDRUVEWjl0S3ExaWpsRVBIM1NRZ1ZJWUVIa0Q4ZTU2Z0w2VWVPWUpGZjB5dUFYIGUvUUZYMjFhSW13SnVTUEU4eVEzZERWMXNmTVQ0YTJ0dmhBUGNVQ3Y1OWpQaXlNNVJ1YnhWeHVyWGhCKytuejlSUDNSNFVyTjB0VWcgZWlzZWN5YWU3R3NoU2JGOGtTTUwweXVRSWpVWkZ0UWUrTWdma2xicjdJMUFTQUhBT01aeWd0R1dkN1NYYkRmMzdEQUIrd2dqcUZJUyBKMFROaXJ0TG52OEFDMjdydHJ0NThiMm10L0VmcW5yUWR3VjNJUHRiQ1BIR1JheUE3ajN4Mk51VDdjajJtK2pZV0x2VE56RU8yc3JKIGZ4cFFPZ1N1ZVRCNlFubEZkVGZNQkJDWW5tQTdpSElCNjU3ZjFOWXpod1o4VjNrWitwdllLaWYvQUtEc0hYRzBGS1RkOWhGbExEc2kgbWEwcmVuTENzaGtQTkR2Q3RyYVR6UVk3cUliaHBMWmRKWS8rd3pwak15cTlYMit6QXdaczJEeDd1b1BnRCsvcGt3UWE2ME1hYVlHdCB5bjM4eFMyVEpzMWdKT0RSWnR3V044VGRId2VuOTFFL2piQlcvTFdIbkFkWldVUERqR0d5ZDhNZS9tLzgrQWNCWVZacGZvK1pNc0dnIG9lb2VuNjV6cnN4a0xhcThLYjVLYUY0ODVReUh3NjM3cUlkWG1LZEFzSDhtalhrK0MzblkzWTJrMm9lQUgrZkh3R3dIeVo1TzhrWTUgWStqakUrNVZmMUhobGlHUHh0TTk1ZDlVdHJSWTdKODdUcys3L3dBdlp4NHgrZDNQemtNQWw5MlhiZ09IcWt1bXQ3KzFTYndrMlFrMSBpU3JJaGVUNFgrSFhLdFpyMjRzcDh4aXlPQ2Voa1prN2NBTHh0Wk44YU9USTRSSjhBL0lQNGlQNHNIUzNoMlFITXI4TklGN0k3YmFFIHJLUVlKRUxOUkFNVklvZHlRL2h6TFVNYWhHUmc0ckFIZ2JHRGpFWW9yM2xXV3liSThiQS9IOEg3WUQ1L3FzMjRiTzByb0tsQzB4ZW4gVU1DRjZqSmRVTFdyWkt1R3UwNHRUclJaS2N3dWJ5eVB5d1l4VDlqSGVyRUQ2NjNJTEEzMGpNUFU3SXZyOWZwUEg4YS9RZ09HTFdJSiBlcEQrQThrTFRWUjJRLzhBaDlraVZzUjZaY0ZmaDc0K1ZsRmZMSVg0ZXBEZUVPdDJGd2FycG8rQmVFUGt3c1h0bUhDUW0vMjc5K3dYIDBCQjZpelRDV1VOQWdScGsyR1I1UmxCSmUyWFdWNXJrVUtjblVydVdBUU1SMG1SSXl5SkUyVHhiVFRMVmQ2bjMzWnJkTjhjNEJQTFggdzVzdExLV1d0alcxalQ5L3pXUnRZUjVLd284UkRjcXZscTZ1aHI5Ymg5U0NHWlErSDl5MDk4djdjMlo4ckNvRWJBSHNtd0lQOUFnUCBZL1MwUElGclpocWJWZXdtMm56d0cybmNlbjhmRW1CZkhuSTgranpDMlltVEVPOEdTRFBIbmpoZ216RkJiTXNnN1J3Q0hQNytBKy9BIEcwdm1YaXVWTURhR25OdzduV1dOTjBqL0FJS1NQaUNFTW92Rkh5bitOekRBZHhyZHhETlRiZUUrNGtOR0o0cTdNVC9LSnY4QUVXd2IgOXo1QmZkM2VTbzdHcWNPTHVtc2ZtT1dTTlh0NDVRV2ZHaERYbndXaDhEbWN3bUIxL0d4Z0xlZTFGdUhkOW9WK2M4SmRqU09mb00rZiAyRFlENEJhTVFzZ1l1NkY5dUowanM0UkVVckxsd1JueHp6ZGZIVHBSSEpMRVZrMm5WQWpwdFJVS3FpVEVrTjNiZTROVmNFV2JDV2pMIFJ6eXZUOXJWOHlwSUpjaGtsT3Q0WmhQWHBqazVMemtMZk9OdUV6VUlodzluNGt2MXBPTU0vUExrWmxsNDN2WXZhb3RoMkJCUG4yb2MgdUJnVGU3VlNnYVpTWGFLazBtdy80eVRZRENZRnlvaFNrV1JnMHh6SEZEMUNKK0tlcXRxZ0IyZkVYdGJ5TUIwbWI3VmdBR0lEOHVvSiAvcUhCcDdZR21WTGJWWG9kU3cxeThpVHZIc2lqTk43Qyt4UmRaV2hWODBoVzRjd1ltTGRmMm9qZ2EvUTRJZmN4ZERqR2M0YjN6Z1AvIEFNQWZWVVMzS0FSNWFVbTJVbktMdFlXY2tSRWV3UUZiNG1KTDNwUXNmbUMvVlpkOHJpdUpZNkpYTmxKOWwxWWhqR1ZYMDZXV3luYVQgU0hiWUFGdVlBUUI4L1VRQW80cU1Za2RKS3RVd2tpZTNiRXFqQ09SNnlJTkUxV0pvTnpWelNSdGFPQkJsTUNUVXN0eHZSa2VvNG0vaSBLclFKR2U1d1JpYkJGY3htSGtzOVBYS1RqSjVSVjVEWDZUbk9ERE1mR2hoS3hVTWdHZklZaGJNTDRkVmJXQ2VEbWNaSzduZ0RxN2UwIGZnSUErL0h3SFQ0SE1HbnUwR2hEcVdCY3h1alJjTzdPUDF2WU5zRms5OFRhUjBsbEZzZ3Q4a2gycEMzaWZVdDRBZFcvY3g1UTlzMk8gcmtrMmM0Qy9XN3NEQUEyQi9Xb3lRek5Yekw0S0lkRmFuTEJ1YU5NdmhWdE9qMkVQOFhTSVU0SHdORHA5OHBPRzRHSzVyT3dKOWpZRCBIa28wQzdNT0ErNk9MOWloZS9nTi9ySGRBdGdWMnlxeWFHSFcwbXdiZ05xYWZSdVMzcnllVXRCM2NqMzRyY09TTWkyd0xhcTIxL2RMIFV5b3JPTCtqQkFnUkpCZ0g2b3VBdndEd0NsbWlta3REcUM4ZTdNc3p4NzE1R01sTjNKTndkbzV4WEd4d2I0WmhMcGxXVTdNa0kyWVogVWJ1a0hCQ3M0L3BYM1VPN09pQVJYZFBFWmxJV1crSG1oOG1ZVURkMU1xVFlRQTZycS90anR5ZXRkTlY0WkJiRHNqZ25yWkRuSDhVRiB0SEp2WTFEcTlaR2Y2V3ZCOEFncjRBQUEzL284YkRGbVY2UHJHeG9waEFjSHhQMHVxWmpKRGg4VnRvVFpaK3VuQmcwOWg2cnZpdHc5IGdWczFBYmdBMXpaSHUwUGpNekhPNkp2WUFBQUI1L2dPQ3F0UlhzUnlaR3F3V09xNHFSbEJ3aGFObkh6Rm05N3BTbUxybDg3UHpBN0kgSGZMZ1c3VXN1djIyMUptTE1MMndtYys3dkhJT1FZb0w4ZjZDbldSTVVvNGV2bWltYTM3cXcrUTJBSFBWK1dmTVR6Q3J1Uml2OU4rTiBidzYzTUw5Y1VELzl2RHM1UDZ5eXZHTHNjZUVGQkFmZnZBZEdZMkVrWTFLcHFFamhPbnFWTUpIMDdZM0cwMERReXVhVWN6Tk5qZHhpIFBKODFiekxrWWh0NVBISmlEMkxKRmxneUpReHJOckZtK09SWE12WmRXNU5xSGh6Vy9vdWgyRXd5RkZPd3poR3BzVllrQ3hsakttclkgNDVpaXc1MTNMWlI1WlV5dVpSaVZYcXF5ZWgxZjFJaEJWL1ZsSWg4S25SUXRmSk9kS2QvdFM5bUVtS0RKZVErSVFpdDEwVldXZkFIcCBGc0UyVXdYVk1NN0xMc0ZsTWNnTzNGajlnekowdk9pRk1vNFVpa1VnUVBCVmJsZ0ZrWWhEbDhiblZ4cHFDaUZCL2FNS0ZWd2hpZ0t4IHhMU1l4b3VacEVGS09mSCsvVnZKdU96blhRQXV4WTgzeVNDZkREOS9INS9QVmpkUHVxKzBOT3RscXQ1TGsxQnMxb21EZFIwZHFyaDMgYmJJT2pJYXVLaVlHV1RHNElrS24vd0NmSGFod2pJeTJaV0hwUnhtUHB4d0I0K2tGaGpoeUJmdDZmQnZHa3lzMWhLcm0zOUtVYytyTiBacStMSFRuUllzS1ZROXNpRDJBZkhnbFdGMXN1UURlcXkwQ21Ea1N5OE1hYVd2VThPdTllbW9RQzlVQjNIL21Bc01ScHZtWmM5eDAwIHJtcGJjajFTZ1l4YXYyVVBpdlE2NWZLbmlySDU0cmR3UXc1ampaditGK3RONEdET1VFeVlQOEpvNzkvUU5CMUY0RGpvdVJaRnlqOVEgWjZldDIzYWpSM0lMWTIxTUlyM0tKVzZhZlZ1MEhDeUxJdFI4L0pGYzFvbjc0eU0xWi9pQW56WTJrbkY4K0FBYy9QOEFUV01VY2hqRSBzd2VOOUt6Z0x0WHU3dUpidWZja09Kems3Y3UzdEhRQU15UWxzQm45UldENTFzYkFOOXExbHVBajhWODN3VlI4dzRoMGZwTFk0cWZXIDU0ellYeEI2VGVWWDN5dFBsakZtZ0N5ZHlONFpFSXg5cUEzaFMySWNuV2I0VWViTUJoT0V2SGFJK2ZZSDUrNkQ3b0lPREhIVzdHMWYgRFNRMjMzeTJraTBJZDhENjlsbmdOWkMzeHdYMXRsZkhCUFpIQ1phaDZuM3lqLzhBUzhYVUF3SGFJTTNWWUJDZjhENERIeitqVFlKcyB1ZFpoTE8weTZjRkZaelNTRFlET25VRWtNU0VLc2IrSFZnUkgrcWJlcDc0ZDI3eDNNSTFQRHUwWFplRnh2TytlK0lSZnI5QVgzOUN4IFBiQzI4dkxwZDNRMVZpbmtxM2FnT1RWMXNhWDY5VlpGVDlrYTZiRTBBdHVFeXQzd09uNEw2RzFJZG9VczhUQmxtUGxvZWMzdDI0RHkgRHNHZjJEWUFDeVJORXM3T0hDR05ZZ3NWeG9rc3NxeHhhZEo1NG5rVGV4bVdVSENveXBPYkFNMjRwRW1LQjNRVEhHVmx6amVvb0l6OSBVMlF1dG9HUGpqSng5dG5TWVI3Y3JTaHcrbjJvSFdUZVdnQndmNGhFQzRWdXB6S2IrV0xpdmhCd3Nod1R6Q2VRVzhLbHZEL2N5djN5IFpuamUwZ0dnOEJRVUhwRDZmd1pqdVl5TGxEZ2JhZTJpdlFnbTZKaTVHcjNoc29URVBNWkN5TzZrTms3Z0dNVzBlUDVJVHdmTFFXZUQgaExzU2RnQUFQN0J2NndWN1lPYWVLbnNtcFpXVFc5NDZlRG8wUzhXRUgvS2dHMmhKU3VVUGdkYmg3cytac3pVQmNGSnEyeDU0dldlKyBCTjdCZ0FCKzNkZzMvbjFoYlVmTlVHYURHdm5OcXVXek9IeXg3dFpBZXdnNmJYSW1rZG5IdzNEU3VITVUrd2VmSG5vTU1ZVEZxNU41IEJkcjNZNC9iQityOTFOTjlUSW1xTDZXTk5NcnZsTWg5Q2ZieDlWNWNmU2tlemxEakp0RUQxSk0rMEpoRXV5NnpYTW1BZGNQNFpKZmMgbDVkK09BNTdTMStCOHJHK1FhM2I4ZFBub2RQcVdrdERKVklwMlFlZkdBczRORVZzbEZLcllMSXF1eUE3S25rTUxVZ09GOFRtUVh3TiBXWi83MjhmL0FKdW4zN1lIQjNQY0w0WDhuTnNhdDBBRFBNU1lnZEpoaDJ3eEVmQk1wOFc2L2NPSHd3NGNjeVRqK20rZXFwNDBaVjZ1IFRKdkhDZUQrZmZnSGdPa2JYOXNXNExwdWphTTArMVdiVDBmVVUydTVEV01OcWNzbnRGYzdXQnAvdHVIWTZUWkM3QjNVVWtEK0hKODMgTzVQY240UUp2NzhnOGYyQS93Qk0zTkl3MXhQSXdBTi9hWGM4RFhGYjBsUHlOd2xDTVQxZTc4eU1IMEtyT1I0UkxGdGtkUHNheDJkbSBzOVl4S1lHamFVRFFIMTlQZ01jVi9Eb0lHZFlvWTRFMU1TUjdrTU0wczBydSt6TTBUU1NQTzBza2p2Z3JNelM4V0JYM0c1UXJ5U1NoIG9TN0pFNzdBeFR1eUFBU3poVkhtemwrQlhRSStITlA5cWthUzdRVU83TWdiSkNhZTNpN01tUWtRd0o1c0tBWmhEa2tNTytQakF0N0Mgd2dmNlpWeGl5VDJUMjJDb2tBK2c4QjZ2STBLNi9tc0I2L1FzeitGNERuY2gyM0oxSWRxaW5JV2hvbVYraG1ROWJyZS91RTRDbm5uaCBrM044S0xPUENRaHo4dkhqN0JzRDhnZFVWVjJWZnNLWkRYRDBOQXpyQkczWkx0QnFxdVJ6dzl5Rlhpekc5UDQzRG1RK044RDRHand4IGd4WEZzek1EQ0cvOS9MNTkrOTM1KzdCN1lZelhCVmR6SzNHZHMyR3R4RmNhdHNGc0dLbE9pYkdpc2pBWW1RdzlrVE40Z252bzh4bTQgSFY3TVQ0VWttLzM4QWZQK0F3TFRReXltSFBVT1VqaGJLVCswaHVSM0hqUmtPU1paMzVOWTRuemx3eWFhTm1sSWdTTjlSdVl4NlUvVCB4aklyWnFwT1Y0cnhaSjhkVER4UTlVVjh2cmE1UzZUZXRrWG1BcTJ6VmZWUU5yOFN0Z1pTUmNndUhYNWluNGFITWhwNWc0MjErZWVIIDBZVGZGY1k4bk9iSlBhSS9zQjkrNEV2OVBMVTVNcXZ2UTFMb0c1a0ZrVnpBeTdsZStOU0ZQcnhjREtLeXlrd2U0cmZlQjhUeURJOFcgWDlxcDRZTUZxNndzK2FxN2Z6NTkrQUgzN3BEckZMZzhiN1ZXaXBScTNYMXFWVzJxWi9BeGtOaklCMVFGanI1eUNJdVBuSkptOEkvYiA2QUVFTXl5VmFCZ3o2U2s3QUF4UVQrSURnUFI3WDlSMS9wOXJPd2pWZk9BMThzRjI3eHZHZlh1b0dKYWtyNGxvV05NSUo1aW42cjJlIHIwUDg0VDUwS3N5ZG9DL2ExQWp0andFK2dmaUorZmo0QWpOdTZxU1Jaa1pGUTVOZWM2enowMGtFL2ptR05kUEtrbjlUZmNZSnRYSXMgdC9kbzRuVjF6Y1NOR0Z4MDdJaEFSb0RaOHlHZU54WGFZa2JuTEZlS0d3U0lCaVpBVXF4UUdwM3lZc090ekdkZzJRN1FUSzlxWFVaViBhL0RwTkREc3JJd09EVzI4RGFqQk5HUTJnWVQzdkhZdUE3L2ova0FOY3UyTFlzWmdaTU1xb0tCcjF5c0prbDEreVRhL3JJd0xsV2JZIDBXazE5YmNOTjYyNFBpL3NZRlBucXFHczJZTEtEQm05MWNiZUFCOUJBSHovQUlCZ0VEQlNQUFFxOXVtcGFycmN1QjV0MlB6aHJBdlggWWhuKy9BR2E0UTdJTU9CaDhZSmxqYmUybzh4WnZKb3ErczNuaENTYitnbi9BR1BvTDhmNjNXQkljR08yR3JOMURtSXlTeG1Gc1RncSBodzlUaDR0WVdGS3NhWXdCMXZ1UXlwN2c0WWtDRmxoQTZ5VFY3UXN3WjNSMlRmOEE3OXdGQkFQM1MzQ0xna21aMzBWNEVTV1VidjhBIHpDK21nZEpabzRza0RTS0gyc3hhamNGaWhvTmk5T3N5eFNKWHRzMnJYZk4wZUtIenp6MXBReUNXMFZuY0ZYaTlLOU9IcTVNV2pwN00gM0NlanNSaHB1NWVUWlRnbnNreVpUN0pjRmYxWlhKQzBEeXFoRTFsWEtQTHpzbnVjQUFQdjJHLzcvTVhKeXpUY2xaMEJ0cXNiWVF1RSBOczJwNk9oMmVXdUNrYmFVL2kyUW52aTNjSEF3NCt0M2g4WHoxTzNBc3JPMXMyeDdIYVg2b1BuL0FOL1cyK1dRQkI4Um51RnhwS1JXIDQwUXZtRDVENWhROEpBeFdSd2hWV1loUXpISkhpZXdBWjNKMGJpL2d6ZU8rZWY4QUFiK2Y2TVRDMnlhM0xRTVZKS0R2OTJYN2MzY0sgMGJDc0llV1cwMG93N0N0Zk1RM0J3Y0szWUpsT25oOUxlTTdYOEdadGw0VGh3SGYwRStmUGdPamN2dUJIVjQ0VjhGNWQzRExHeUJnZyA1NHZrV1FQMmVnWnJXUjQzeTFMWTFrTGpmODVwWXlJdWw3aDVJNTg5THlvTmJlcWRKckM1TkhGSTBtT28wUGNtTkpWKzB1eGlMaVR3IHMxb0I3aE1mYkltMlBkYml0emEySGFscTRoNERDYUVVNXpWd01MejFncUk4QXhQNFlucnB1bVd5MkMwR0Vpd1dTU2VuNlVVbStkUUYgL0xkUHU2MUZLYWIwMjBDNUF4YWdkUGZVOWc3Vm5rK0FFTURDYXVockt6dlp0SjM5Qi9yNC92OEExVXUvSkdveTFDQ3JaYjRHR2dXaSB2Z2xUeDg3VVVqL01ReGRoQWs1YitKVzZHK1RFTnhXMVdCOENxK2RjbkY0RE43QjdIdjhBc0FEMjYwejVGRjVYRDU2a2t1dGVxL2JaIElWMVVEVzdZNG5wUzlxTVEyVDVrelVoZGx3ZnpoekFoWlp3eFdaTm80eWpmZGtqWUFBRGZ2MzgrdEZTTlk1RU8zdVd6cy9kbkoyRm4gbW00cThoZ3VCcW1ObnBzVGI3T3N2S0xNc0cyYVNRSURjUWRRTzNia1ZIRms1aFN2YldYVGdxTzJJOWNyY09LQkpLS2VVcnhTcHlPTiByR3lZamh6S3ZiYWxMZXp6RS9UZk10UmhjSGdEby84QW5kelNaUGMzbnNsL1gzZ0VId0NEMU1XUUhqbEJlU3J1N1V0MzlBZkJydVlyIDEySHkrZVdnamdWZGtYMXZqYWZNTWtNTEduN0RPY1NmaTNsbVI3Unh3MkR0RUF0MUJBZUFTVjBXQkRucVlldVUybnY4Rm9XMzRzUWggMmNZU0VNOFVkN0dwdDk0ZkRtYWU3VGg4RU53S1BuenBiTnlmRjVaZnV3UkhBYitBWCtRWTcrYng5VGJvNUw3Z2tCcXgwMzV3YW45UyBGbXlGdWdVZWhsdVdVaVdNMEo3aERjRnVIVDhPd0h5dVh6VGZzY1B4YlFVOTBxcnJzZUVFL2ovc0VBZzFodHlJU3VhYzVOZUlTaXRjIGM1Wldma1ZqODN4SGNTcVZkOGFLa21peEVlM0RMSTlDcnd6VVZZeUp1eGRBa3ArSGRqR2oyRUJ2M1VJeWY0UUdTV3E1VUpLNVpQdVQgc2lMdVNrMkMrUEQwbnR5M09iUi9tQ2JNK0lmZzlrTjlvdnNBRGdJRFlFUFJiUmNqdlY5ZmFaRmZWYzJwMVFKTVpzY0FMNUhYcTN1UyBwV3dYWTRkZ1c0YmhxY2V6QytZZ3FYRW9LZTg3WHprbURDVmNrbyt3QUQ0RHdEOTBhcGN5d0xBWDdhalpWRDZrQU55YWV3bERPRGc0IEw5M1VPcmdValJ2WEtmWDVoa3haQTdnUVhQOEExSWFkNXN4Wlp1NkN5c0hMUk4vNytQOEE5L1lHVFZiQVBZem1yVHNqcXVkcWxxcFYgMUlLYkFubUtYdGlZbXlsM21WYjJpK01scVUvVDRmallPeXEvbjBldHZLeStmM3MzKy9nRC9nTWNlcmY2ZVcxYUNIKzc2bUhWYWVGViBxT0xWaVZJdXdXYTJOME0zbmNzRHNxeXhGZU5GcDVaTjJJeFRNWk8vVVFISEZuY3FmZGJFREU0aStXQjZwbUR2MUhERDlSV2FadFIyIGZFZXZLdVlYaTJtcFhYbHVyM0ozaTJNK0wrbnN4MnJEN2V0d1h4UGJaemd6UFBGMFpaQi9pN3o3OWJ2UGtFQjFibEJkYTVESXRLUEcgUkx0bVJSVk1NYW1qMjlxUGd6WHowdUVWK2NvVGpEZTczeFVZVDgvSzF6NFFRa3lzck12bjFDL1NGT0F6U1JzT0IzSEZCQUw1OU5BaiBBT0JVWWV0R09wWk5uU3M2VVdUM2I1RERpQlRkUWdINGpBWlc1aTJ0aHg2MU81Z2hid3NyUGE5NTN5cm5aSkJnTGRRVC9QdW0rakxGIHFCaGRCRk5RUktQVmFhZFFVaWZYdDVHUkRpMEhuZlQ2QmI4RkRUZTRTNlVxd2M0WVV2UFVxNGlNeE5EV01GbElCbXppUGl2di9IOFggMERoZ2VvVnNYTWF1ZXpVTVp0dUp0c3NJUURwNG5TYVdlUVltNUlsVFpzWmh0eGNWNmZ0Y1BtVXB0R2xreVJwNk1vazlTVlpZb2xqZiBDbWpsWUJ2S3QyTURYeTZMOHpKNGZVN0tnRWlWa0huWmtZYS90U3ZiQVV6RXVVN25nTjhNR0VQV0Fob2NOZ3A4NUFjSUhHK0RLNnVUIFd0N1NhdWVQKy9uMzVnUHoxQnJVTmpocCtvZE5TYWNKSVloa3IxSDFGSjdPMk9BRjhMUlFOYmpyVVpHUmtyZGtyNlkxVkxWOThiT1UgSnZsWFZvekhQTm5Qb1BnTi9QbjM4anZsTjJNTFBvWlM0RGJ0cTBEM0pMRHVHVGNFc3pLVjlRcDVvdFM4TElUNWdmZUY5d25mK29layBKaXp3T3J4bmF1cnU2SnpZRjlCOCsvZEFiUXJ3MUxVb1lUVzFQSkFaVU50ckt2MVVhMFM2M1BTcGNvOVd4Q0pOaHVFUGo2M2dodUVCIFZtRENnc1dzMllEOElEOC8va0Fmc0lyS3JUVE9lODV6TWY4QUZSWHQvVldlYlBueHgxQTdTT3FFSVVPekJFcnBudFJybFFCdGN2UFAgQy9INDZGU0ZxWFpQclBPU00wQ2JmSzFEa29nZEpTYS9weVpWNEhUM0tzYVlBdFN5TzFhMjREME5WUEQzdzQrY1pweFhKMlp6YndmLyBBSUZzSFU4dDViUkFZSVo2MEFOcFRGeW1VbSthM21wTlBxWWZ2Y3ZTcmtyY2VoaDBOa3VDeUNIYXV0S1BQSEhEak5ObFB2RHNENFB5IEFCVVNEM2RQKy9abHRsUHFSekhVWlh3MlQvT2Jzcm1GclVSV1cxMU03cTZ1WklJZGtCNFllWXdiRzIyQnNkVnJObWJXVEtBM2J6bUggbjlneHgyRHNkWkNuZkNHK0NzMEM3RWg0MkxVeGgyVlI4dVdlVFN3QVhhaEF3K0o3akREdUMzQmdMOERHWXM5bTFmakp3M2diQi9maiA2RHo0QjBLaFF5TW9taWwrZFFEdDZodmFRelNkMmNuSkR2aU11TzBkWDdNMmxsU1J4amxHNUUyQnV4VFdsWjF5YU4wUEZjL0I2M2FGIGpLZGVtWjZUb1ZxV3BWckFUcEhxVVBWNGtQOEFLdGkwSzUyK3lPOWxrVnNudUV6NEd3Zk1yUzhtbmMyYlpBbXhnRUgvQUNZTi93QVkgNGVIck5YTWFlNkN2MGFiR3ByNC9xZG9NZDVXd3B2bUl5bkFQTU9TUXc2R0gyOWtkNTQ1OHAxUEpveFFXTEpvL0NUZDRWQ2ZBZlFRSCBVYkRiY1Z3WUJ6VkpEU2QwQXhwWkE4WWNDMWtTdVdhZlR4aFBMaDF1R0hocC9GWUNlQitZODdXTEprL3UyK0lPd2YzOC93Qk5xekZOIDRjb2RlejgxMkpXY3h1MGFYWDhPWklsaDAyMnE5cTlEVzA5OHF1R1ltVnV2bUdvOG5nV3JjM2xYS2NaNXNiQ2JBLzhBZDMzUVg4QWYgak5QREpFckZGMHlSU01aUzlhdUo0b2pGRVZPSitvamI2aGpOSGNYOGFBc2NyVXdzYzJZdmJtWEJXWSt5ZU53TTBkK05tc1JSeGx5cyA4REhuZlgwTzJMM3VtNXp6SE1Vcm1pb1lSaGVOUWxuSzhReFVyUTcwMm11SGJjUHFvTVVPbmtFT3h1K0YwMDd4bXpId1dzUElUL1N2IHdBREEvc0hRUUh6S3pzc1hjRXF0TWsyQnJSd0pXRUh6ck9EcWJJcmxQbFZLeXIrOFVQZGt4OFQ1alZVaWUyd2FHL2lGS05CTlpPSkogdTdMVTdSSDdkUG42RDMvb1BxZWozeUxiQjVTbDV4SzJqeVMyM0dRWkh5dDE1azU1WG9zcERIN1AvSncyQ0djODlBV3hqTnVnc1ljQyBiMERQN0Joc0Q5NTlrRDRiYlhNeVk1VlZlVnRKK2FlcHhoTVdGazJSRER1WUNaY2o1WkErK1Boc2kyeU9ERzhXMm4zVDJUV2NiUTFHIEkzQnpmKzRINWY4QThxaTZqbG8xalpuY1pJRUFkcy80eU9mQzFlZkk1NCtlaGphOC9UenRERzNkamhJU3VhK0RlSEhQRjNmRlVRU3QgVmJKdGNCT2FuUFdmcDVwZzU2bWhyaTU2WGJUODVaN3RuNFpoNmNWOWJwTnpwbW1wa2dabyt4cEpTUStoUFd1Wmd0ZjJkaWhZUXh1YiBKd21HUytkYWF6VGJUc0d1a29lY3VlcUsvbDFzQ3lrT0t1WG94NTlCejRBYk9seTM4Q05ySlh6bHJPTkhxVVd3cjNCVDYwYUQzcGhaIG16TG5yVmxrT0JRRlpQQmpzNjNqU3hVTEtFMExNbjluN2toUEh2ZjZwYzI1RnRpTFBORHJIOVJJT01JZU9QOEFpUVBGRHh0ZnYveCsgNkkyU200Y0NtN1V1U2pQamRxbkRWcFpxUFc0RmdZWmxvVkxFVFZkUElPRmJzakpjRU53ZkFaN2lVNE04ckhqRm5tLysvajREWUQvZCAzcmpwL1ZvOEFWOXdsVlU0RXJhYmE5VW15dDNCOFYxTlBGTEg4RnRvQjZmNEhNVzJSUHEvR2NCc0FDYldpZFpxNVJtR1BHeUd6blBqICt3QU4vUVQvQUdJYWxWOFZzdFJTcURPTmh5aVNETE1GZXNsa0wweXIzeVdydEhiL0FKNFlmRENldm1GVlM0SFZhZXpEQlRRc296d0UgZFRhT0FxSzNWL0IrZmdGUkwrNUxZRU5YeXd3dXpLclNhQkszTlc4dEh5anpSM0lLTkVzOXA5ZkUrcTN3d2hyWDJRNEIxSVFHcGt3ZSBYeWh5YXk4VW1FcTMzKy9maUxybmF2U3g2dlJyRktKcDBpbWlrMUt4OFI2cU5iS3d6cHoyYmdTWmU0MVBERzlIQ2pyajFEeFN2SkY2IGMwa01rS1REbVNEY3dCa2lOQ3BCaUNyZkgvZnBlMkJiRFErTkNHK1Q2bEdwT1ZUTGIybm1FcW5pY0RWMkZObGJlWWNLMzFDT0RIY0UgT2RiVlAyMWl5ZjhBcWdGRTJiN3Nid1lQQUlQc2Zmais2dkxFSVhjTHRtQXh1Mi9Ic2wvTFZ3a3c2UGlHTWU3RDRNaHA4eGJxdlovRCB6a1BnY0V3c3JDRzBMSk1Hay9Sd0FEbjJCL3ovQUU0S3JGM2drVlpETTNtWUNaMUJhbkRaYTZFTXhWOHVIVW9HelNqUTRENGVNem5rIHorZVV1QndMVXQ5R0tLL3NqaE5rOEEvSUw4Zy9ZT294Z0lBMWVQWHRqSWV5RTN5YTdjd0pURTlTRGdVT3doYjRuNE1qSk00NEhJbUEgYWpiNEZxTUV4ZTFrMWtIVit5QXdCL0VCL2tmNklMY1NpTUkrb0VKcVNKODQ1TmtqdGpPSzVPMmZZbGMwZWVPYUF4ZHBadzdhYmVYZSBCVENRYjNLYmFaTnVWdHRuM0pWcitldnRxYWFsTklhSWNCQ1BOdHpab0g0bW44YTdTS25aRU1YYkI0V3RzQmd4VmJJeWJoTlZSOXdBIFhtWXpMTDRyazk4ZGpZUkgzL1lENERmK3F1NWpJaEpzT1pQaWh5U1RGK05FTWMySHBDSEZmSWpRQW1FRnVaM1VxdmNPRG42LzV3aDggRjVRekxJTUk3cE8vL3dCQThCOCthcTlnT3RvVmZjQWUrSHgvaG9UdFpIS05OTXlSZDN5cUhpWEk1UGllWVE3VWZHUVBBRGd3RGhQYSB2Nm9LRXhtOXBCdmYvd0Jnd1A4QW4rMlJXWWV1VnVIbFdxeUVxOTdZcVYzTUFFeGpFZkgwWGZPMW1HQmJaRStIRDdmd3prNGVlVmJJIFppZlBDYk5qK0x1N3I4ZzRnUGMvc0RqS01WU1VwMld5UVo1WXh2aUZhZVBFZnlZOWd5NENQeWI2RGFWSGtNSWRFTzNUT2xmM2lLV08gWmFGbkxiaUVaUEl2Nmo0dzcyRllscU5GUzJETFNDajVVcUdlemxJdkgxT0FWZXpaa1d4aFBjYVluc2xxVlhNUXpBKzFBWUZ3cVU1TCAvRi9hQm5Sd2dUZzc4QVF2b0o4K0F4RDdvdVNHdWF1T2Jocm1aRDZReUc3Q01NalZZSFBLYnErK2RQb3lHM3A3SXlPRlZyakF0bkczIGdlRXhtR1hJcjFtVDcydXdSNFBIK0FuL0FENEFBVzFkcXkwbVZQVlZzMW5ZQ05LMU1YbUdveHFFYWFxNHpZVEVtMU5TVm5rbk05T2YgUWxWdzU1MDJQUGVqTUh3a2l5R3UwS3o5SnoxaERDVGlCTkExdk13OVBydy9icFc5UHVTdlhySEVUeVVNQytXZ3c0bUdyVUJadGoyZyBtMkZTSXRsVDAvZUw0RHpIQU5PZ09DR2RyZDV0OXBmRm1zL0NoTmc4K3diQjRCVVRMSmJSeHVtWDA4TWN4WDAyb3VHYVB4dVZZTEN4IFZyeWI0T1ZYV3dXU1pDZDEwUnFCM0twU2FOWTRHbW8zZmhhczd0UDdBQ3B1bTN5QVVBMDROTTZoSFplUjBrdzBZYlhiUyttM2NZWUQgRnEyUnc5a1lERmN6MkNBcXA0d1g5R1p0a1NiUnhBZUE4K0F3NmpiWU9BeGQyTlZTMDNuWFkrTWJVL3d4NDNKa1ZrWXFVRHFFcEd4cSAzWUliZ252aWRDNDJEcVZ3N2pGMlpaOXUyZStmMzhBZVgvUGdFR1NUMCtPWjBaMWpYd1pEZjN5VWtqb2p3ZXpnNm5XOVh4VjZVME9NIDlQTVE3c2hyYkErNzlhR0hEK3hxRytjbVNEWVJKcXRCZmo2Q0FQZ0VJK2Zha3hidnkzMU95SEswSmxmdTFnMGJTZEkzUkRhckFpQjYgUWxhY0UycFRCQzFKZ2VHSFQxL2c4QmZ1bnVxVFdXaFg1TUR0SUpqd0hIWUg3WUQrd0ZHWkk0M2xrZmZkcHBMRExqRzFGQU13cDNEViA4YmNzZnpsbHhpdVRDVXdJSW45SXFHS0RjQTBrWjcwWWR0VmtLUE4zNDQ1ckdqc0F0TnpNNkJhQmdJMUpzT05McThQblhSOE1tcjBpIGVjakZYdzdnbU1pSUhYN0p2Qjh3YlFjUGJFTVdzMllqMmlrdTRNK0FQK2Z0M1lPcktnOU9lc0RUelhrT3IyS2xEVlpLV3NaYnJJeE0gVDZtVStVV05ZVVd1TElIbUU5a21zbGtXQVpuMFBZQUE3Y0F6YkJieVRCbXpmc0FRVDUrb3VQN0FmcXdSTTZ3M1o4enE2MHkyU050UiBqMHIwNWE3aFNjd3pwOHArTHlLbkpmUDRMZTkzQXQycW5zbUQ1QUlVODR2S3hoZzhZZzNiRUx4LzJYejl2SHdIUkpSZHFRMjFYNzA2IHZ0Vkc4WnRZMDVRMVhqYTNqc0w1Y2txN2xldVdRZGR0Vm9hMzhPMEE3VUJzQ0ExR01Ia1YzTTV5RUNPd1A5UEFBTUVIb2pMUDJ2Z2ogYlRxVldzdFFJMTVTT0E4WTQyYzJvMmNlMFk4Z3F3cW1BZDF5b0ZsRVhmSHdzcUhjaWxyMUF5QXFSUWpMRUhJS2dyV1l0Z3dtTGRJMiBxazErR24yUmFSWkhKekhEZ2RYeXBlcFpYaHVFd3dubU81Szh0bktINEhCVDFsbVZxYldXWjRxNDNxSE9iL1VSL0Urd2NCNmZHVzBYIEJLQjM5V2xhQVZJUGxIbjllWUFLMm54TEpLQzd1QS9NVDArcTZmaDFYcUUzaUVCVDRId3lkdjFmaDk0L0YyQ0NBMkFBQVFQYnFTamsgRmNvcHJabUxuVnRaTmcyZEhzMHhhbFltV3l0NHRpaVFKUmJjSzNXdFBkd1Brd2MrQXozZHFkK1gxY1dqSXh6emRWdndENkR2NEIrUSBaaFRlTlFCbTJLeEthZUQycEJ3MVNyYTJKUndPZEhVNWtwb2xPVmMvY0h4RGNBOXFmTUJjZnJUNnlzOFhlYk05amFUNThCNEErZzgrIEJveHFqbXBSMER4U2JhYWpFSklrc2NyeU8yMGJTVGJWV2ZFYk5XUkpsU3ZhUXhxVmRrUm82eVZJOFIzVlY5eC9IL2MvbnFOa01GZnAgRlIwL1hMNVc5dEpOdFZMaGNWUHRVSlgrWTVIbDYwSHhQWCtCbUZ1WTREKzhTSC9JekJneG9Gdk94NzM3L1FVSFlQUGdJRE5PYWxJRiBxWjJiVGIzYUllQXlMY3RmZHJJUjRrT3BRTVJOUFF5RGd0cm5HdzdBdC9BWHA4Nkd6YlcwTEtNY3RFM3Nld2V4OC9zR0lCejIzYWRtIFBZdmtWbFdwWkQzckN6dml0Tmh1QVlUV3dxdVdGT3JyRndFd3hDZXlVa240YkRRQkRGbEcxbzAyait1eW5NY2QvZmdPSURGZ0FMZFQgb05rc0ZseVFNK1lFb2R0eVFkaFI2OVBQQll4ekpoUFNqQTlrVzRlR3pNR3hubDl0Qm1SaU1MM05tZU1UYnM4Yi93Q0FQK2Y2a09sMCAybWpHN05xWk54NVhEYStZTklNcG1sS0krSXVPTGRFY2EwTnVGSVV0aXVmVjZrNm1XYktLS0NERklsWklZOXVQbU9LUUVKa2NhTW1OIFdiQXUrYUNyaDQxZXVENW16Wncwd0xUNnVFcDYyMUI3WVd4WXVJaEs3SXdjbGNHUkREai9BSjJKQTlCc2dtVDVSdG05cEp0NC9McjggQXc1OGY2WkNWV2J4VUZpSjdHNUlhbG5WTGttN1lJVGJtc0NHK0FhbUxDendkZ1Q5NHJlN0ZzZUhybXRCNkY3MllNVjJnWU01czdHeiBpQ0FYd0RCdjRCZlB4cllQTUFVY2JGclJEVzlQWmxrdEdXR1BUS3ZFMC9qY2k5Y2tWUGNFSndNY3daR0FQODlmbnFzTW4rRytTOEo1IHM4SHdDQ2Zmc0FHUFVrMk1sdWRrbFY4ZkNVa3hWU3JKcHdPcWpTQzl6S0tKVnVTTUFka1phZm1yWTh3cWdlZUEzRGs3NHJyT3hwSnUgay83QituZ0c2NkRGSllVa3ZQR0VzazB1bTFDN25ob1ZpZnZvanVWbS93QU5FV2VsYVRVTThna01NY1R4eHU2RS93QUhBVElUaWhZNCBHSitPOFViNlhxTzZBNENua3hXTlBHM1laU1RmS0szQU5DbmZCNERFNVErRHpENVpGYm1FOGVuZzlQQ2Y3TW01dEZYUEt5Y1NiczN4IEJ4QWIvc0FEb3FLVlBYNVE1RFhBTm5KTi9JN1VEN2IvQU9DbjBqVll0OExDeXVvVmZtekRGa1EzREduNEtrd1BsSHJaTjVvZStGbDUgQm05a09iQSsrQSsvZEorczRhbjhjRG0wMmt1d2ZWZE1zaVZIRFpWZ1U2SFBVTzhGVU13NHZtSmluM0R1Z1l3bjRIcTREckJPejBObSBSOFVuSHRYaXZvSjVmMkQ5ZXF3OVFXWHJSWGRMV25CSTBqNUFtdGRKR0hwdGl3bCtBeEo0c1RxQ1ZZYmV2NFhaWTlqV25iNStGZ2hMIDhFSkRhRnJFYmNIL0FESmZxT0hmWmdZc1Y3MCtoZVhoYVRHUUZCV05aYlVPR25XOFFNdTl0b2tqajM1VWZHUExHQk5DVnFydXlLNVMgR01CZHgzWVZsaGEwS0hMSG5xVXRDdDBlVlU5VnZrQ1l5WEJwcFNZdEloN21EcTZSTXE4OUxRMmh3WDdVdmlobHRQc2dldDR2Zy9nOSBWMitUVjN4WnN3NTNTTjgrMy9IOUVIbjBrd0M2UHYyM01rWFJsaEVxOXJUbXluMnhXNUNRdHByUncyK0lkZjFVWWNLVFQ3VTdxZGxWIDhEYWlHakkyTnlFN3lSd2dUNkNmUDkzUUQ5MFg2anlpK0dxTFVoRWk2ZTZMMDFKT3E1Ymh2QWRXa2xwbGkyT2sxeXJzWTlQaDZmRVQgL2xuclZjVVBpaWNRZVJpdWgwK0xObWJzU25qSGdDKy9BY0FBRHI3bVhZUGxXWk1zdldSazJSWWJ2RGRxOVY3TzAwdkZZcDZhK2FoQSBJdGJjR1NHR3VBT0hUMXRWVWdBS2REcUQ4RGs5OE5td20vZ0FBQUFnN0EvSHdhU1hzZU9YVTJVV1BrNzJuMU1nNGpXZlQ5bmkzS0hkIE9JTDhHNkVmYUVqcmdnVE1rQXk3Y2tUc1ZFa2NjbUwzWFprMkl2Z1lpdXAzTHNqTGFJYzJwYzJ5TGpUNStrVWJjYUJUOWhQREZTZkQgUklHbXI0Y0dPcTRiSlpGVjh3Z3RxK2gxeStjWmZjQmF5N2hBbnVnc0NEVVhBZGdmdXExQXJVT1dXajArTFBJWTI0TXBEYmFjcS9VaiBaMXNROEQybjJJbXhlK0MzVldMNFk1Qk10UkRzR2Y4QU0zTjgwbDZlaWZDYXU3VmMrUWQvdDAvOUJZN1RxMEYwUFdHYlFkY1Z3YnJHIHFobDExUnEzSldiVzlUOStHaWtidVRySVhuR0hSQ2UrdUI5YlZueXNCN1VHeGVVTDJHbk1PMTJPS0N3WVk0Nzk3UnpBOEliYlpsZTYgUWFIaHFMSmVlbnZzTTRXUmVkTE84dG9WdFI3bHZEaEQ1Z2hvZTRKNk9CWC9BTXFMSzBVYUdZWWMvaDRTY0Q2RUFBY0JQbjkvZ0NSUyBvc21uY1RGSkpJbVBzTWNXMkoyaWV2VUNoNHkzQzBXVTgzd1NGM2lNb2U0ZzhjY2lsYXVTVzlwU2I0eXdmbXZQeHpSZkZ5SmFmYlZQIHJkZlNxK05oNGdjazdoMVJ3YUJNd1dyMGlybm5BZVlRekZEM1l5SjYzTzRmcTBCdmhPekJiUmVTeUQyUTNoc0Mvd0FCcUxmK3FveksgMHNoSWgyUXh0dGVtN0NiVlJiYkhCcUExdkxRd0xrdlZ5TCtuNDkxRThPUFpLNUFyNEhCa2VTZjBiOG9td2h3QWYvc0cvZ0xkWmxpRiBNcFhNeW1NRGFOSjVSaFRzSmVzNlh4N3VoRlV3Q2JkamhmRkQwK256SHdmODZCUjRHY3lJdlBQOTdWZDUvd0FBQkFId0hTWlE3Y2FJIEZnTW9heHJ5Q1Z2RmhnNnljQUxpUHc3Y2xOUjl0Rkh4d1pFK1l5V1FIVDVrR2V2b2RqU3lmRitUY0hTUWlUZ0FxSUFBWHdIZ01aQU4gUkxJc1FSNUViTFBLWDFFeWxlVUxDK0Iyb3dKU3VHTGNxVGx5QUZUeVFSWnlETXVtS3hnSnVSaU1lSTNqelhMRG5Gc2hkbmpqcHpHRCBGcVVqSEFobU5Qb0VsSzFMYWVKZGtWdVN0QnNERkxHTEpwUndwK3JONFR6QWNmTU9BZFFEYWNjRWJpNnVzalA2SlJzWDNZTUg1QTRDIGZSb05QdmpUN2FHU3I1UjVrVmJhYWhrU3lMZ3puQ25BNEVwWHA2cGJVc0VPdHVGVjdSOEpxdWtoUzFjR0hsbWFOelp1RTczdjRCKzUgOC9JTDlzQ1pReDlvSkY1dzkwaDFMY3l2TUpNTmdIa250azRWeWgxa2VLR0IvYmVIVytwQmNYM0JxUTArbG5pR01zeFhLTER6Z2J3OCAvait2bi9kNVZHbDNSRnBld3JrMTZrcmo3M05hVFljZ1BZVmJDVERtNU84VnliK1NMYTI0UHUzaHpsTEw3YmozZkdDNnUvWkhiL1Y3IHdDRDU5Z2hqMjVOYXFSeGhKUHA1NWIxSmVPWjVJaEdRcGFhZVZKRUVBYVZIaWlyY2pveVVTcmpsTERweTh0dWR3Q0psOVNDTUdQYlIgeXJQRzE1TlJTUnZhY2d2Rm0zY1FPa2I4WmxWaUVkc3RxcmV3ZzZxWXI4U0hBcHE5WXd2aDZmRGZOblpDSDhndnZrRXd6RTFjb01GZyB6ZjhBWUFDL3YvNzkxeDdReTVSaXd0NUdrc21yK0FOaXZrdzJpd29aUTh2N290ajNCd1Q3VWgxdFg2Mmp0bytBY2hzNU1YdGhQSHdnIFErZzhCeHczL29FMUVOckFoMllCbE5GaE10a1pSaGtYcklMekdpaG4xWGkyeGJSVlBzQ1p2RlZvYjR2b2xqTnZ3SGlHekRDbmpOazcgbzFYaWYvRVI4QUJQOUJKQ3lHaE5yZjVXenlTU3ZhYnMxMlFlVDJnVERGaS91UWNoRHJkd1pGdGI4NDJrTjk1TVRLRkNiejV0SjMvMiBQZ0Qrd2RDSTJSa25kNWk4cUs3RVNVRCtCN2Z0NTUrYjZ0bWJaTVpDQVIxU2hLa0dSVzl5Uy9Vdkh0N1V4N3ZPVjlScXZaajVYendrIFQ2SGFuWVBBVDR6Rlc5cUxhZXc0eTNMaTlqSjlmekU5RHArSC9xTlphZWVCb1MwTTNUYzlrU1hZR2dnRUkrQXFQd0IrWVlKZ092dFcgbHpYSlBxdU1oNXVjTmxyN0pNOHhGUE1NVHlITUtnTUlpMnY0SEVPMExhZ3cxbXpVTlhXVmtIVndRMmNQZ0g4K0FBZTUvcTNWNGFiMCBkalpIWkg1c3QycGxVK0VYaDZIWjJsOXNtUlNqWktQVlhYN0p3TndwK3R4OHdIM0FQY2tHZTMrV0p2OEE4K1B2ejl3RHBWMVdoMS9xIENzZ0NaaTF2R3JkSUcxdXZjdzFVU0N4aFhjcTl1U3VVT3dKaGd4dkVOd1E5aHA5OGVGc1hScjV1ZStCS1NPUEhhSS93Ris4LzB3dkEgMmN3a1E3K084NlJZWVlFWVdNMnl2SnE1WEd2bStGcXJSK2tSU0pXQS9BSUFQd1B3T3JLYVY5QXRKNmlSVjEyS3VsM0ZmclhNMUUyYSBGcDZJb0s5dWFtUS9xcklaNlFXSVAwK20wYXBzUStCSlNCcENTWUE1MkJUSUFzWlRBUmx0aEVhVHlHV0MzcytkVU16TGFwMmdUellpIEpRei9BQkZiMUgvU2JCbExmV2JiUTdFTGpad1FMR2grdGxFVXNXVXE4bFN3TWFEbEozb0tDOGtrVWxaQ3psWkxUNjF0cWpHVUJPenEgMUZLb00xa0FBbkNyUEhOWkd2UFBKOEg4ZFVaYkpPUG45LzhBODZPMlV3aHU0dXlLbFo4bXBjNWtQYWgzZW43aGNiWUxtSXVxRFQyViBpdzZ2V3JzVHpFTU9RY0FmSDN5OEh5ekdZcGFGWmpPNlZvcEtQN24rN3Y3OTB3dE5hL1FkOFNHUnR1U3liYXM3V3Zha1pocGVraHF1IHBvY3EwSlo2bTA4Zk1yZmtqSkRJR0s1c3MvMmRoazBZbzBQU3lETkpBUUdmd2ZqKy93Q3dIK3E2MCtybzlsbGJhZkFLZU5KWnNNbGQgMGgyeWEvZDRaU3hyWWFJdGtXQk1mRVFQYWdjaERndmxvS1NQeVptVjFkNXQ5SHd0SUk4QUg0QnY1OC9nQVB6MlpXZG9PUy9ScFJEeSBYL1VzQmFxQlliZ3NPeVZhSkw3alVOYlZYdzlvaHJlQmhEWDAreGdIYVZWTWJZcnRCTVo1dmZBQi93QStBK2dnQVdHVXBIREJxNWtDIFBIZzIzdStKWXBUcDJYNmJVZW5xZG9MSVFZNk1ZSldTcUJOTklrdFRhU0ExV2NEY3htd0tZZ3J6SWxIYmV1ekp1MXN1Sml0MDlrZkEgZGU2Ym5Hd3RucUFEYU5zTkJJQ3JGbHNvVXJKRGltQ0VOOG1KNWlFUDJPQllBR0NIWmhhdnlZbjJ1MlE1d0hZUDM4QUFLYmt1alRJNyBnejkwWmQxcmpnR2g2b1pTUllTaHAzMHpQWUdUVkNIRnhnVlduM3VoWHd0NHd3WjZCWlFKT3Arek1hYkd2R0Ryamc4NEg4R0RGZ3dmIDBGOUNzd2ZhbGpTSzlReGJLTUd1N2hhSW13RlprSDJGVzZHZWJISW9oajA0T1lROTRzQ3R6aUh4S2N0a3hqNVYrQk00RTFEdTIvN0Igd0Uvdi91SDZkNDkwSkZkdXlhS0pEVWxjTWR2U0Y1SjVDczF2Z2R4Z1pWcTg4WkU5YnRSYVgzeXh1UHRweGIyeG9hRVpHZVRZTTN2NCBBQ0FQZ09BOUZCcG9vY2xpV0dEY3VlZUdDbGVIVnp5U1M2Z2dEK0xQSkYrN1Bic1k0MTBEek0xUk9yenVPTng1QjJvb1VSUnF1MmNZIDRvd3FLdVI4RThYUVhzakx1ak5GalhLVk1iUUxSWkNTV1g4VEJCZURnUU9vVUNMRDJndG1QaGgzQWVZQnFUQWVSZzYxV1l0bzR5ZDkgN1J3QVB6OSt3QU5nZjBPazMrOHlyaGIrbGFoMUl3aDZld25NRHhjZXd2bU1xa2UwcmhoeEJsdUJQV3g5V1VmWmR3SGxXdHlaTm9WOSBQSXc1aHNoeDlBZlFUL0grakRWb3dXZnB6bVcwQnlpU1JYcmFIa3U2UE0wOXZDUW42ZzR0RFZmZkhiKzdLM01jayt5STlhV0FBT09EIE5VQ0h1WXc0YnRGSkJ2eDgrZy92K3dWUU9NbXZoU2x0V2p4b2NJMU0xcGNGWGFlMDhEa3I4dFBwczgyVTJlY0dCa3ArMUh4UHJjZmogenhnYmVON1kwUGUySTkyRzBuRGo3OGYvQU52bjdsbG1uUUNGWVhoYmxaTDNZRjBqWTdrcXlLQklzalV1QlNDVGJ4YXhaWG9URkNyRSBNWmc2YkVLdFczdVQrcHN2YW1XTTRqYzRTU1RFc01pTWhjL2ZtVzBUN01UN2tYS1RKUTIxOU55N0FoaldDa1RGWElkc09TdlpCQmtmIFdTdDhKZzhONC9nOWtEQ2JUVjdOMnJOcEdILy9BSHo5cUVjcGFqSmNGYjJXSDFVTGJyYUY4YVMyRXhZVndYQi9OSzRrQ3J3eU1OOG8gZFBUNWpBNGI4dm5rZmt5TVZhQm41Uk9XaWNmbjRBZndBSDhmWWJPTkZidTdnU1RjcTJrbTVzcXR5VHZaRGhaRGh5UURTTjg2Z21odyBJT0VPcTBNdytNR0Z4ZHdMTDVKV2FNMGJtemJJa25QQWJCc0FBL3Y2OXJKTElRSmxNaHV6THRmemJEd2JNRnV2Vi84QW8yelh4RFErIE51RnFMYmd0a0puNVFnVld5TE5sdEF0R1dUbU85KzU4L3dBKzVCNTRaQXMwYmwwUm53S016cm5sbVZBTld0WTRuaXpkamtWeXlOZGkgU04xZHp1T3F4U0kyM1ZtbUxKVFplVm9aRDUrVHdTVExrRGxLL1pBOU53d2lldUVwS204R0VOUGJIQlhzYTJGZE5aQjVqamNQVDJuMSBlRzM2d0I0T1lVWmhiUVRadjJUa0gvWU9BOWFnYWV2MjBjQTVxRzdHeVRKQytXNEJ6RmtOa3dYRjU0VWNDRElub2tPMUE0K1o1RDJXIDZ6WnZ5WU13U1Fqc0QvN0MvQUg3b2pmSzNiTjB1V3kyMWtmM1lOcGlrc09sYk9yMjhGN3RLNUx5YTVjZmhvYTR0dmlHbmgwY0N3S1UgRmtaZUw4R1dRbk5qZXdQeDlCUWNEL2dKNEdubER5bWVpejRkWFdkWHlIR2lXQUJaQ0JhWVVzWVRYTmpRMkF6RG1LRU13NE1pT2hwLyBjVVBXYk5hSGFCRzN1N0tUQi8yRFlBQjgrcFZWSTIxRCtuR3psMjhOc3pyaFErM1BheVBOTG1XSEMwQVl5K292eHRPajVBVkp3THBIICt5NzdqVFhRNEZkTDA1Ujk0QzF1bWRWL01BbWwyMGJhdHF3ayt0OGxYTFRBTGt3ODhRK1lmY0dTcXgvM3l2N2FPSWYxZERKdkp3SWEgM3crL1liQXY4K3hYNEdqekRaUTk2TGQvVHlRUWxhcmhHaUVESjZNcHJaNzVmS0Z2WjVoaE9aSmcrR3FvZGdLVkgycHhubEROd2Y4QSB2NER3QjlmMkUvWkE0bjB2UVRneUpEdTRXamJTbFVxbExIMkZmQ09rR0JhYWtQbHlMYTh5SjhOOFFvYStZVlo3QXBIQS9KdFJuMmJlIDNhcmppRGJ1L3dESDBFK0E2b3JxTTFHR0lvTkR5VTJ3bHM5YUJnS0pzZ0NrMWVrV1BGN2V5Z05rT0V4d0RtVnN3UDJPeTA4ZmhWYXkgekMvY241c0phZ0R3SEFmWStmTldrbEQ0aW5lTXhzNDVMeVBXMEs0cThYK1Qvd0JPaTJZb1gzZ0gya3J0ZDhzQ2NSd2NSN3Evd2pucCAyVW1EWHdMSlQ2bUdwa2JaRXBWc2lYcDNRNWlPdzc5SzFZSnNwa0h3ay9raGd3UGh0WUZQNHJESmsxZjh2Z2dnUTNqL0FQMEZBd2JWIG1BNWhsMFNUMWZYQmFFTTg3TnNTMEdySkhzTXo1VVFwdzloWTdIcCtIeHRnNHIvUDF5bnJLenFNS2JtZDdvODRBWWJBZ24wSFlENlQgWkdSODFCU09XdTlwM1pRelJ4dFRzQnFXcW5wemRLNUxKc1ZrdEI4RDhrcmN5d0dOaDRrOE1nemk2dmoyT0NmMUJ2OEF3RitBZS9TeCBaSWRxR2tQVEhxSFRlU0pMSGFaSmhhRS9KanU3Z0xUUkxSVjVod0Q4d0RtQXc4TThBUjZIY2N4bXQ4cHhqZmNVbEplTmdmajl1bjkvIFBkSGhMcUpaSncvOUdSVjBicEVkNTJDQkVtelJwSXJwc1dpZGJKYk1OUzBsMlJJMlNzOXl1OGRra2VQUFl4RFZsbFRjZmIxZGNmYUQgUStBNzN5bHgydEZ3WTVnUmVxZTdPNkdGa1ZMMjkwbHhSREI5UG1MZGtEN0lybWVuMlgzSTR5ci9BSk1CMmlFZGtibng5K1A4K2Z1diBxV1BvUEtxdThyejFZWE5HaEhrT2lva2V0NmxnUzJSOFBPNHQ4Y09IcDhOOGhwOWdHUGdNQ2x2Q01zbEVPczhLcmRnbFhQQjkrLzhBIGMvMGdXdzR0TkR3dHRzcHdmN21QT0Rhd21MZ1ZYQklRNHZjSk5Bdm41Z1c1bHdCeUNHQ2dMN2E4SWJ5VFE5c1JxckNoT2NMNzh3UHcgRDkvWUJzd0QwdjFMcUF6cmFLRFpKS3I1amJFTVdjTlYzZUcrSGwrSytQamduc2RiMlI0LzUyNEtmSkZrWUxmYk04STdKUDhBVCtJQSAvc0IvckswTWVwVEVMdHVadDVkdnNkT0Z0ZE15amIwM3h1RklUdTltUUFRZFBFN3dzNGQ3elFxZ1l4UEc4YjRZeU9rY3N0M1JJVmloIEhKQk45cnlkS0x5enhnRG1xOW5QN1V4Mm9TZDZmYWdOVHJ6SlhOalMxZUxhWStZdG1LM21QbG9jcXRxbjdMZUlUeU1WOGRRb3c1OUogQjcrQS9RQjRBRG1LYTNocHpvZDNudXdUbm1jRXdhR1NHSHMyWll3dHNsRklYekE3SWh6RTlQaDF5QVFJQ3IrNkMzbjgyQkhhOExkUSBUK3dJSURmd0YwakJSZ1k3QWhya2FpQnBLdWJDMDhZV0JROUVVK3doaFl2VGdodmhnZ3lkN0pqaER3TWUyb0JFK1lUdkxnWk1sN2d3IG5BZlAvd0NXT0FISWVBOVgxZVlBb2NNMlNTTUdTbkJ6VStXRFdSaHlBMVBVb3Q4bm1GdUd0M1pqdyt1UU5QOEF6MlRqUEExblkvOEEgcDRBQnYvQWVqM0ZFaWlRUEp0dWpxMGE1STFHaUZleGQ4V2NlRDhjOFcwZTFXMjFQSm5VTzNMRmp0eXlSOHhTb3UyVGhaSWFUSUdqaSBFRE5YczRMYkR4VEd5eDZyR0doa3BjRTdDbnIvQU14OGlsbGNweUJiTTh3c2dQQWgvUFlJQVB0bndQakl3SGliMk0vd0UvOEE1Yi9HIDVsa1RISzFLWmFDaVRHUElhU3lLYlROSmFtQ3ljcjZjM2NYS21FUTkyVEdSODNCd1ZhMHI5OFIwUGExZXIyYXMzZzFodm5nUG9PL2cgT25rUEIyZTBHSEJjelhZSm5kMUVEOHdBVS81Z3NXdzFLcnpCOE1PdGx3NWo3eFV2MVdrMWtZVTRON0crMXh6ei9nTWVRZFYxRnc2YiBWNnZzNHpsWGxmMlNlc2xrckxoTmhCMkprVjlMOWhMQlJrWUE3NnRsNWllUGgvQVA2ZWNETE1URm9aTlpPNDRPeHpnSDlQNy9BTEE1IGdzaXlxam9qeXBncXBQVjJBU1Nkdmtna1VLRjM1SFNvMytubDAwMGczRWdmTW04SzVYZ21tOTFmN1Y0TjlTUjJpLzRwYll6cTEwUjEgNzI5cXE4bjVlcThsUUlhemZsSVlsb1RFTmdzZHdUNnJZN0l3bUExTmc3Y0xkbVBPSEdXYkdyc0VrSFVRQUFBL1ZmUGdJZHdUMndDKyBKKy9XUVNobEU0bExhS0JzZ2c3aDAwK0pUV2lHd0xjTVBqWkVNZ3ljUytBcTQ3WVVLTTN1azgzMzhCdjRBL3YvQUVTVk5mbFFWN1M5IDJHYkxmQnJoZnVkVjFaVlBwMXA5ZlNXUUNCaUFYS0h3OThaQTh3d1BzaHFRM0RUUzhCMW16VU44WnNRWnNHYnd3NEN2Z1FGKzhCNjYgOVRHWmFqNVI5ZTJNcjFqb25UdzF3VmRaMVAzeFJ0RDhrUEhwY1dyMDlmdFJrMU9URnVFd1lUcDdnQTQyejhudVQ5ZkNITmd0N253QSBBQVA5TDBjaWlZcTZmM21NdkVaNVVpSmJjaTA4b1paSlpvZDNITXFRbzdlMGtqTVUzVVJ1Z0VxUzdWN014V0pjTDhrUjNrMVJwWjIxIHJzdHZPWEFodUVld1NDcXVGSEJ0czZma3NnbXQ5bmtPNGVyN1FpWHlVbWNQcXN3NElhMndKNnJxSEh6M2dPVEdQbjJaSE5PM2dQOEEgWUw5djU5KzFQbUxiazRQbFNxOU1rbVV5SGpGbmdrK1BFTjlwRnpZVU9tNlQvbkszaG1HUDNWVkpnVVp5NE1zMFlVR1dZOEpGb3BQQSBRTDhBUG5rQUF3SDAwZlQzQkRpSHRSaWJZVWFaeFYvN1BMZDhjc3F0TmNwZG9YSWhzREd5VldZRVdxd1E1MjNua2ExRVluL1RPeVZjIEVSMEUrZzdBZkFQejhBYkxoUm1tc0RYYTJkTTZoRnRiMVN0Visyd2tHTks1aHN1eStFS2hvdE5vWkdFM21DNW51QSsySzNPT0NPbkwgUEEzdmt4MUtkWFo0WHdDRnY2K0JYOWdOcFltZGNkUTd6YWgwU1RDdFJ1NUQxU2JLYldkS0FMZThmMXl0VWtqQlVSb0Vob1JxaWxhaiBOWXFUM1hqandhRjJlQjBqcXJNRUxRQnRWWG5zNTJkcCtRTjNDamNsZnNKa2xGR0dWYlRnNFRMc0R1Q2ZaRmdNaXFCSEh2aHM2eHp3IFlNODNkaU9BeFA3QWZQbit1TTZMbVZwbGtvc0RKa3d5QTAzWnRma3M1Z0xROStyMnhrTU9RZkdUdXBWYTN2RUY4VCtLdy9xNnVzak4gNzkvNkJmai9BT21QV21aUitXR0laMG9XN3lUMERPMm15RHpKeE9ZaHlsNXljbHRmRHVBZDhUdzlnVEFhR3d3SGpEZ3pRMGJZRE43NSArL2dQZjMyQ0hrVEJaNjNLOVBMZ0JKcjB5cXJnbEhKTGJSRWh4UmUxeWs3NGZkU0crY3dUK1dyNzVPMndaOUcvek5nL2YvNTgyTEJTIG9VSFJzQXFtejd6VzJoNFB2N3FJOFk4Z2tub1ZpakR4R1JjTlFqaVIyc3NWalFETnFBRjFrT0w1dnBuVlF3RkRKUnZIaTg4a25IZysgMHRDVFZZOUkvaU1sV0ZkMjhNQ0dIdFNuOU1RZXZ6RTdiME91VTk1V2JrYUt6Mk0ya3V5T0ErZ3IrLzhBVVlsdkFobzA4T0M1bVEzNiAybWY4VUJsek9rNEdFN1Q3TXFZVW52N0pDMHh2a1M0SEZ3blR4NEUzN3JOTnF3d2xpRnh4eEFBUUdPQURBQUF4VmpJMjAzWHkvREtBIFZXL2lWWERWS1dITUJ4OFN0NHZ5OVFUUW51RXhrUXc3SVlZREVFQ25WbzFCaWZLRVBuS09iZGdtL3Z5RC9xNzc0WHZ3MVI1ZXV1MHcgOXh3TkZGQkFxSHBxdjZuRDR6VE5aVEpOWVY4QnJrTS8yUGRpSGFreGpYOEFhQ3YzUzBwNnlqcTVSM3JNM2dFcThIampzQjdGZ3h4NiBBeXdpUUZOTmFSK3F1b0VHei9IWHVUVVNRWnlTRnUrUkhhc1Z5UmVDeE1sTEMzMVc0YWppNU80STRFKzY3WDJaVlFIZmtSYTF6NTVVIHVZQm4rMWRHS1RoaUJja2x0TDJBdGpXQ3ZVOG81Q1l0b0dGNFBWYWNZVDdVWDRid2V2Q2ZPbURQZFhKdk95SkpzR2c5b241K0FYNTEgWnpWSmNrZDhtVzFiUW9hNnZqSFVwdkJmckdHcnhIQ3VhNVhxbHEvYnpBY095VStYSHcyb0N3UGlyRGVYbERLZWM4MmNQZ0g0L3NIMCBEclNqeHc5R1dqVExsbTV6YWh4Y2tIcUVNMUpEWDVhMmhBWmFhMElhK25oMXNPWTdYekoxdEo3NU9XN3lyTlhWOXpxdnNtN0EwRStBIHQxQTMvZjhBcHdQRk4yUW12RjVCV2hiRzFLbUhrQXFydmxlMS9ZUmc5L1huSHZocCtFTXo4dzQyc0VCVlpIbG1GOG1KK0VObkxkWUQgK0cvN0IxRlJXbnpadHlIWkN4aWFXdlRuSTNrVTRIenR4MmYwQlE2aFpvNDJUQjRuRTByRldGWXlMdDdianplRnRZNHZJV1JYU0JGMyBBRG4zUlVwcWdnOGF2U2JJdDFrWXBrOUdYcTNmRDBUVXZYTXo0ZmJkOE1VbVBNY3VIMlhhZ2Nad05YSjRBOTc1dy9jZmZ2dndEb2IwIDkyUTBQbDRMZWFCb0c5WERVak1kckMwLzVOTTB1dlROUG9GM1BPY01oTXVCUFpMVW1PRXdIUzFYMXBzL2ZMRlgxTTZlbmpCMjgvdi8gQUlBQ0EyQmtOaFJrcmxQdHJacmdXNFI2Wi9ETHFRcVYycTlJcmRYUGQ3dVh1RDQ0VnVuM3hDSU9FRlNZSjZPWVJiTWFGZjhBS2Y4QSBmd0dMOWpzSEFUOENsdEQ0VXR5WnFscVZ3dlV3eGgwaXdyUXRRT0hiREZqUGhaN2lyYkJNbUdHUndtWEFoMk1Rci9ZOGVNdEhHZDh4IHBRSjRBQXY3Ky9iQjFuTUc1RkdHTGw1RU1LVFpZZlU0eXVtMU5JQTJHN0dJcFVhbnczSFNtOXpOQlZaeXQyN1BMS1kxQVdPRjFoZVcgTmtXMi93Q1c2c0xGMnBzWTBiY1VGblVTMDUxM1E3V3RyVGdydkNUZkxnaXRTbHFodmpVSlVGMEtyNkNBcU9aY0lacEUwWGVLd2tOMiBWaGQ4NnpDQWV4ODBmTVluWVRQaGxEekUxeThjR2N0blhsVjYxMUNzeWV6TlFIUjBwNmc1a3F3clh5Vzl6RkJheXV5ZU5jL1JhcnJtIG0xdG1mREE1dUlGamVSL2p4amtjcElMZjRqWXRuMTUrOWNmRE1idlhJa1owWTA2Z0FEVlRBQ2dCeHdCaC93RHJuL2Y4Y3d0cVFhYlIgd2dnOGo4SHNzWFg2ODErZngwN0ZlMUtUdEJMTUVLdlBhaDZaeXROOXRPK29Ca0R1R25CYjFHVnpUajIrVEtmVDhYQ3EwS3ErMisvRSBFT3Exc29URnZtcXNtY3E0SndoZ0FIMEUvd0ErMzlCc1cyV3hJcCt6TENGMVZiVW1rMGhrVWtnZk1aSy9zTzdiUWkzR0JpaDZ2cDk4IHZpdGd4Z2hEVlFOZjJXcXpGa20wVmYyemVMUkNCS3JmbjZvWDc2RHNHQ3hIeU15cWhqVTBUeVNUVmF2V0FSZVgyUnFWNjloNmdxdlMgTEd0QmJ0QndyZGJoMVhNSU1pTythZjhBVXR4dG14RjJnc3MzYTVKTm5QMy9BR0JCQVlyN0lxZEwxTVQ0YWZvOHU1MlFMSWQzQzdDeSBPNHpCNVlPZHRDbk5SZ0hDdjk0VzMyYml3ZkJnVisrS3JJczFtcnRHbnF6UDdGei9BR0JCZnVmWTlORVdEZjNpUkdRYW1ONDNRUkRaIDg3UllSeFJneHc5MlVqRW1tRktLTnFWNUNqdEUrRHJwbFVJWVJMdStwQkZTc2RQUGpJTjNKSTZYY0lJeTdiQ2xmSkN1N2krWldEV00gYTFMTEpFaTFnWFluNURZWVRRT0pSb21Edm1ZMXZWWmdoREJxUkhsUzM0dTBHWkc5emVHSjgrQTMvZjhBcHdBOHlsNHFmcW9velZlUyBiVHhubTFzTCtudEpEaVE5Y25sNG81VEhDR1lXOW5Ec0MzQlV2T1ZXTDVSdVl6dGRzbXdmdisvOEJ3cnFjT1E3R3BldldoY2RxbEFuIGdRUmhxOWtwOTRsc2l1ZXB4OFBLRGhTY1N0NGN6aDYyY3FYbHNGT1pmeGV6TXh3Sit3UHdEWUg3a0Q5MVBiaEhEVjNjRUFOWnovbnkgbXFyaTFrVlhYc2hUdUN4bGQzaXhRNDZIMmZXM0FPUE1RWUU5dFZYQ3pCbjV5UnRrcTUyNC93QzU4L2g1OEFtSFRxWTYzSnMvcVpHViA5ejJTUXl0RkpFeWxlK05xUm5GcGx3UHRzdmZVc29ZbEVYY2hWbmhRWTNIS2ZTY3Z6ZDA5REhqbm5xQnIram5qVU93cCtuMFhrSURnIEdaQnJ4WkJpMUxvYlBsUlY1WHRCUEhwNWh3TXc3VFQrNmtEbmh6akl5cnhmYlA4QXJiWU5nZmo2RDBtV0JUdlMwRXVzUmxsMnAzZ1MgRWxiVTJDc1dRd1doMk5hQzgwSzhNaE1EaC92Zy9uRGFuMHRoVzltYnBnakV6Z1B6bkFmZnovVHJaTktpM2QweER0WFRRbjJRSEZwOSBKMkU0V29ra0N4Z0NlZDVRR0d3VExzUTA4UGlROXF6VDYwbkIwWVlyODVaL051MkIvZ0lEd0huMkhJZkpqazRBYkJudXdSa2xEV1JJIHJiaFJDdkpsY2dXSFNxTFQxOFBNNDJ0bVhCa2FsSzBPS3pIa256emt5T0VTY0FlL256L0FUL1QwZVdUYjFDTWpvRWxkWGQ5cWVQSGEgc0RUMCtlZkg5VmNjUjdzdU1iTEdkM000VEhDdUJKQnFhQkIvd1piWC9iYy9kZEIrWTBIYkJLVS9QZ2FkUG1CVnZTN0VwOWJyMWZTTiBxVjBoRVRZVEErVS9ka3hEV3gvenJMVC9BSno0TXN4b2FCbjNibTJCL3dEWVAxQWRiYkllS3JxKzBOTHMvUys3MlFlZkRDa1dqMnBlIFZrUkxJeDArcWQ4U2c2ZVlobUszVHpIekZYK1JWVU5tUmltQ3lzK0U4QnYvQUQ0K2UyRHBobzlrR0xCaG9kTjF5bnlWdVZVdGtYSFogQkp3M1l4U01xSW15dVBzZ2d3aHNuSUZ0NG44dE9NaE5IOXVUQTk3ZGdld0lPR0FBQXdIOGE2c21GWHREQVNxcVZZU1NOYVBqTzd3SCBpT0h3NVFGSWFKUmdneU9DM0RoekY4eFl6NDROclh0aFFadG14L2QrZW4rZmZ2NERxRVlraVpMaDBxUnJKejc4dmFmSGFCZ2I5M245IGROa1hNcXNKeW1uZVI0ejQyNjI4aFhPUk5pamExVjErTElyN1JaanVEQTJXNVhOMmZxQzhsdXdsOXdzSndyMjkyamFiR3RCUHEvdnggVzVoRHJkZ2h6a05QZkp6SldWR3RGb0xLelIzTnQ4WDM1QmZnSDkvVWh5T3lHV2dEVlJSRUd1RnF6RzFUYVNWU3A2OURzWUNKbEFRLyBKT0gyUW5wNDk3c2F5bC9Hblh5c2hndnRtVDN0MmQwZjJQOEFud0FCQlB6eTNWY2h5SHAvUExPbFBqYmtvQWxHemlUUkwzN0VTQlF6IEhHelBkU0doa0E4NDh2cVd6bzNBOFJteC93Q2xmUHRnUWVmZEtwd3A0SFRicG5HZjhadEcwUFdOT1d3OEpOUGgrZUs5aktkamNrWCsgU09GVjJRWUlCKzVZODkrck1MUXhqTlZaditnZWZJTEIrL24xTEV4alpyaEVoZHBZMGg4R1RzVkdaci9veHJHZzQ3elp0ZkhSU1NxVyA3TzlCN1g4WmVMN2Vhci9VL3dEbnF3RElRYktnek1rWGNpclpGZWl5ZjR2K1dyeERBRVcyV2dWRGtPWVdwRG1yaStZUjFLOEtINWg1IFJvc3o4WFk5cTdkUVg3OS8zOCtOUjdvajFBUU1HY293N0tyZFpGYmllN1Ewd3cxWGFBdGVUYkdXMSt0MXUrSmxQc2pCTU9WTFgwK2MgWUdlSzg0a3BMc2NBUCtEOGdnRC9BRVNLZG1ObFFUSVl1VmNCSjIwMG5pUWxIQTJFMFhFNE9kWGlkUmpraGoxdStIQ2syUjhYME01VSBwRHVvWVp5ZjNtalRxVDRNK0F4eEFjKzM4K3NjeXQ2alhPWVlaVlAxZGtzYVN0eEdqT3M0T2tCeGNYN1FIc0I4VURDZVlReDhPQ2VYIDMxSHJmNzUyeTN3STdmZmdBRGdKOEF3SUo5MGtrUWlETVhqMmswOVNaN3U4Si9wcm5na1VDUk10L3ZSSUpxMjB5ZGNsNm9hYWVhZUwgUlFSSkxxWk5TWTFoRzFER3p4UXZJaXliMHFSdm5nd1V0TEh0OXhHNWRCbkxiUUhNMkJxdXN0MzFMcE5rV3JuUDRtd0VtSFpBaDhBMiBna0FhYlpCOUpvU0ZUNGN3UFd3YmJhRjB3bkN6TjBxOVplWGlyamlUL1gzL0FPbWxrTUE5WHcrazZSdC9KcTZ1TGVoc2t1dDk0NURUIDlYcHR4dmtWOHNENWxrVFdXdDhXTTQya09LN1lNRjg1Smd6YnNiOW41QlArZjZHd0g4UGVheXc3UW8wYlcrSlNzZFBDOXF3QTIxWUMgUUhBRkZQNG9kZjhBMmZaNmZUKzVkZ1h4WTB3cFdTR3JpeVp6MzJNL3Y0QUIxaVBUNGNOcC93Qkplb0l6WHFrcWFSdFN0a2NnRDBuYiBEWVkxTGQyTHVGMXZZSDVJdXpUZWhyOE00QjU1WEtmem1yMWVzM280RUNHL1BzR3diK2cxRmhrV1dEWVRWeHk3YVRscG9BZFB0eVRZIDZZWnd2b3pMdVMzOU10UnlHSGMzRGkzcG0zdnB0U3NyNlF4b1pvc1lwZHVlS1pGd3JCbGxoYVNOOCs2d3JkbVBrMzAybVJvc1RROUQgMUlhTGFXQTFMWWJiZGthbkVkcXM0ZXdwOW9jc0tSWm5HN1VEN3hENEhCVWh6NHFoeWF5clVQWmd6WktUTm16NzhnVzZBOEFBNmFqUiBYOHhvZUZ1dVdsVlhFK3k2SFNidXNpMUUrcDBpcSs0Mm51cjN4d1lHUmtUMlJQV3lEZ0RiVTlEZ3pFWVloaStjdkR0MnUzOC85ZlA5IFUvTVIyUnR6RHR0SkMzSkF3SzlrcEVjdzdKNWJoc1ZpVjFlR1ByZW4wTmtoaDJBeFZmTUlDTk1KakdsOC9aRFpzRy9lNTgrQXcrdm0gMFBzbXJ1Q3FCU0dTMHEzU0QxU3J4QUVTWDJ3eWZ0Qzd0VlZOR040ZkREZzRUZkI4d3NvNURyTVlVcTltV2VFN0ljQWJCK2gveit2YiBVTklZbFNIeTBnUlA1SklZdE5Hem5rVm5WZ2M0QzF0cnZwQ1NNU1N4dXFDK0JVYTkwYWNEbmJrVkhzK2NjYUYyQ1JiekJhbE1yR0s3IDNBYnIxY0cxeE1yNGxEajhsS1BuM3o4YmRrM0ZQbWZNT1Q2UDd4R0NXUEtQMStrbk5nQWMrQWZ2NjlLSStaRmtHR2poOWJwTklyYVMgMjBka21LZkxUTGtxV1pZd0dHdmh3OWtHRU53SUdKeDdscXJpTVpud3B3Ym0xWFk0NGdENkR6NEJ2NEN4VHdRS2FMZFJGQXhTbGhWZCBxaHNHWlRkaFdBSHF0WFhrTW81UkNsalEwOWNzaEV1Q3lESTU4T054QThqcDR4NSs4akFaczJiQitBeDhCc0IrSGp2ajVkME81a090IEtUR25oVjVEYkQxRU5US254RU5XaXhKVDRISDJwM0ltTW5jQ25vTmx1R25pcStETTFYb2J5ODFVa2hPY0gwRzNRSFBnQURIcFova2oga1h1U1RheE9VcUU3bGcveHlSM2pRUGRkM3dGbzVNalpuV1ZaRGN6UG5KeFdJTkZSWHo3VzU0L05mbUJyK1FIclNZSGxIbHV5RU1wWCByc1dYeVI1WEVoK0dsdjVOd21KOHlZWWg4OGVIeHdQZk1KMUJWNVRjNlBDSkpzNGZBUDJDL2kvQUQvWEhiQ2Rjamt0MC9RN2tTcFBPIERJZzFoYUE0MGpYcG1LMENYeG9tTDRjd0hjSHlHNEIvbjh0VlZzbWpWZVZSaGh3SWIvWUQvd0Ird1h6NEFQeTcwUzF4Zmg4M1pEU0cgbTJIMjkrR0JNTU13OUtZVTFYM0FPdGh3OHd3bm1FYmNGSTR1SXp5MGJtOG5IWko1ei9YNzgvSDkvUHlSZ1VqbEE5blNtaDJTVHk1biBSbmdnK0twQmhjSkxsUTNNbHR3L25FOWtoc0FleHA2K0JSNWl5c2JvTUdmc1p6M1lBRDl5RDlWSkZGTnFCcUpmNkVyR05QUHFiTFFGIDh2OEE2VThpNDQvY1RmRkdOTkl1am0wa2NhQ0dWRWpkVUdGeGlXS2JFK2JHNURHd1BHSVVqbkt3SG8rbi9TZmJUWkVvY29IRzV6NHQga21FT1N6aDd2VzVScDM2dWY2dzVKTVpYRG5BRzhLenF0YkpqQmRYN1o3T3h2d0NDZitnbnovVE9SeCtrK2dyZ1NZcms3ZjRJWWEvdCBpL2Ftb3JUUFNPMWkrMHRvSi9NRnRENGVIVDRZTjhUM3dITUpyTm9JanlqV29rLytQMUZqZ2Z3UHI5Rlh5UlFkQlhZQlBCaVQvcWNUIEllbml2U0dTSFY0aklCaWxwUjRPNFEvdUJnT3Z3MnJtRmFUVENLVEY5M3hpT2JkcXVCbi9BTy9ud0h0ZDZxR0FYWU5acW91cGF4ak8gMWFOVmtiaG5Xb3YyYmNGeUhpem1VWkhDWUhwKzRId093SWJWcGFYd1BrM2txTFdYbnZaYUlUajUvWU5nUDlvdXRVa2psbVJwMGtTUiBJM1lSZHUzZVZMRWJiYXZuSTAyZEx3dVBPZEkyREE3U1pwaG5GSU54TytTR0pjaDJaVm1XK1BCL3hXS3UyWURxODgrYWRUTDRxamFsIHBza3QwaWp2bHpTSWtPeGp5blhOakljOWJyZTFMVE1CeDhPZFpkZ2JITUo0RkZjWWpnK0VtOS9RUUhQajZEYnI4QWdhbnFPcTlPZXAgUWJTeWFra3RZQ3VTSldFTzA5cDhlMkEvQTdOaXVWcUQxdW56RVRqZGdWdjJsY0h5dVh6a3hRWHRteVlmcWY4QVA3QjAvU09abzVUUSBtcFJXWjVtb2F5TlRXYzMxbFcrbXV2WEZlbWdVMVQ5UEl3RGhneVBUSXQ0VEpzREY4SWMzUm1qQjZSdDZDT3FPd1l2d0RuNS9ERHF1IEZ1QjZmcXBMZHVPZ2VObVE3djhBemllNE1FeG9GN1dlTU1DZjh4UGhodDRlTVU5U3JrTVRXZDA5M2paRGV3WWUzMzdnQUMxWlh5b00gTVhaQ3hYQ1FZMXlqMjJOL2NLUGdjOVVJOEdnZGV6VHl5WnFZcHJDYndXd1JnTXF4QkJzWGJjQ3VieDVjeWFVT1dGVlYrdUduaE90LyBuOXNkenJnY01XUTlWNjZlMmZqY1BUR0htVnZQbU5UYXZuK1NjNXB1ME56d043MmpuL29KL2dQbjZkQTdNRnRzUE9ESnBnMnlDM1lLIEpqbU00Z2tRN1F0Q3AzS0t5WEJ2RkpHRTh3UXF1cXp5ZWVhekN5VEtGTVNaelpEWnozQUgvZndQUlVEYkNFU3lGV3djMnlQOEE4WXIgZFRrS3NOb2lUR2dDMldNQk1NSWY0YklvSjdCTTRpUXN0SDQwVEY3cHZtOW16bkFUL0FVRS9oMCtHU1JkRGxVZHRPNjQ0RWtseWxxViA4aDc0c0lld2h4VlgyRUxjakJDMUlkVnA5UGh5RXo1L0xRZTJWQVVvY1lzL2R2QXZ3QitQOVJXMmtHSXN5T2lSb2UxRnU4aTh0Tmo1IEZERG1qeUQ1T1JVZG9iV2toaGZJZzVPMkdHT0VkTGxmTjk0eG9XVGZCZVkwcjZyS0MzalRJN2gxSnF6YlVVcTlrTWlIVTd2VUZTMUsga1Bqa2gyQlc5YnpTN2c0WUxjNEZxUStDdGxDWXZjMW5oSnNJam56L0FJRGYrZmRVNm9lT0hjaWg1RHVscWJlQnZpMDdtSzlyMWZsaCB3TW90ZCt6cDh5R3Qzd0h3SHVIKytFL0Y1VjBQazJ5V2k3Z3dBRFlBQUErZjl1eXMzU3U4b3hjMTBuanpKYW1vS1lTWVZkUHArcHhNIHpGTitMVGRWa0szNWc0V1F5TUJpNHRQQS9UeFZiNE0rMExQQndpU2tvNThCNER3R0hUT2pobDkzWks5RnBqSU9mQ2t3SkxUN09UekkgbmhzcUpZMTM4UFpKZ2NPK01pL0RCbms1U25COVBUTlY3NDg3NXNodm4rQUQvdndDNHpLRkNTNEY1Q0dabzAya2FRVm15b3pHT1BPeCBZa25Ya2NGcU5BRmpKZVZHZHNjVkNNMmI3Zkcya2EwdDRkMlI0c2tjQ3VXb24yUTBRS3ZySEtWMzF0dXdwTXE1Z1liQ0E0Vms0T1ZTIDZXaGRTekNDMjRWdk1UMXRnRDJOQXIrZi9VejRyck9BTUlrL2Z0Zy9mei9JRjZybEJiUThmS0FwTEpjR2E0UnU1RlBzbGJpVENJMEYgbktVaGtFK0doaHc4TnhmRGdJZWh2RzJFeGJRODc1emJZd0d3WWdVSHo2Q3dsdXQ3QXNmVDNXTEhsVStTN2NOVngxN1Y2VGswZmJBYSBMY2JERnNaOWNPNmlmZGxiOGdXd2QwL2F2Smk4R2RGQm0wbndEOEFmdUErQTZDWFNzNDlmSE8zMlN5RFRHVlc2QWtHS2ZzNW9ySG5nIHUyRVBlQ0VQNGJoOHdlWXJtK0Y0ODhPRE1zcTVSWTJNNXZadytBQUgvb0w4ZjZWRENwZDhRaWJhWjlpRVpVVkZFcXp4SDhneHlTVlogQkE3YmNlOWN6NzUwamRqNXF2QXliS1Z2bm1TUi9OcUZ0c3JGYWR6RU16Y21udVZVcjVVckpGYnlVU1ExTFppdlZzb0NMSGxmK2NEaCAwK0hDSVRBZHRNRGFEbTRES3ZLY2xSN1IyVHovQU92YUkvajFTZk1JYWY2YnN3OVZRdVpqTXVsRFFMNWtXRlZZZHNEZ1pVU3hnTU93IEE4T0hhakpNWDJTMUo1RFRUQld4ak1ycTZNTXRUQTJjeEFmbDErUVFIMkMxME5rcGRqc0N3dzFsM2xKSlcvRDQ4WXFVd3JzTzE0MmEgK1BqZ1FtTFlleU9OOEQ0bHdJR0hSa1lwd1lZamhFa0lqOTNkZy9yN0RyeVN0eWg4MWNlRHpsWmVkR1czeXZYOXRrTlVOby8ybTVBYiBJNDJIaHZoaHdJVEs1bnVNOXFaRVpaZlBzM0NjUDMvL0FLSDhPcmdMVHRPSTgwL2lYdmlsanprWU50aE54WThra3hZcEl0K0RhRGl3IG5yVHh3c1VTUkpNOEdXV3ljTnN0a01PUGNBT1R4WTY5YWRKbi9GYzA4YWRFK3dVOURmZGNORytrL2JqUTdOTmNxTmU2Tno2WURaaTQgZFpIZkZVRERxcmpHMGlDSHJZVmNEWmN0Z2o3bG56aFU3Tnp2VjZjUFg2TW5LenFtMWhIUXRmRlJpZk9ZNlhRcDRnREJ6Wnl0NkxUYiBsQk9peVRPZE1QOEFxTDFiS1ZYV1NwT1ZiTi9vSytoelgycFFMSEZMMFNXRW1xckpUMUJGZURDaFoxbmswbXVMc1UxOEtJV09LYk9sIGJGYkZMbHNpNkJvR2hmSEF2aHNlcXhSRnd2RkZGNWVhQUYrM3BxNmVERmk2b05XOXRWaHF1VzZrb2p1RnA1bFY4QnpkT0ZhUTVOY3EgWk0vRElQY1NxNFloRFB1SVNwclJ1ZzNDeFozeEN0OFh2ZU9LUHZ3RURoaGlmQTljZFJsTEV6VXZUM1V1OFhIUU5TOS9xeTFBWjFZTSBFcGJvY1hYcmttaDE5UGNMaFE3VXJjZVh1TGI4WUxKdWU2STIrSklRM2h2NzlzRy9ud0hUc2g2ZzZ6dHBMczZ0RzNPVzZyUTJxMmxQIFVReVpPMHVEUlRlbnNXaHc4R1Q0ZGJwOHdnSHNhdEdEZzRqazJCUW1Ud051MytkUmNCQWIvajBreWhCd1YzQlZkd09udGJHaHM1Yncgc2gyVkU5M01SRDFPQ252dWc0UTAreUVOd3VBeEJnTC9BQlV3TXN5K01WbDVCMG03VmQyREFId0ZSQUQvQU9YVGVQVEpJaWlPWTBqUCBGcHRRYzlRKzFEcG8yRWlzRExMN1ZJemxPR1pDK1NTSzdyeHRJWFI1Y29rbDFjY2t1MmM4OFNxUXlRUm1zV3NLcStSWjZnVXVrejVTIHM3NFV0K2Z6Q2ErU2JEVDJSYkhzTU96M0t3bkttK1lYQWh2bDJJYjR3VEp3RWVCVmJJWmlkb1BoTW1jTmhOODgvVUlBL1VUOC9kV0Qgc3RERUxsZEI4MVppWVdTTVQ1VmZVL0NBdStvNkhFMUFxVE9ycUVCOGhXUGluVElHTlBOdFlQYnNJd1phY3RGR0tXb0VDMHFiWUFRRCBCZXR6SC9sUUZYcXZJV0pmdG1hajNITmRvMWJ2Y3hqWUxYSkoyTnNoMDZXMk9TdFZhL2hxRXJkYmlWdVJaVWlDd0ljR1lzck5ZRlJ0IG1BMHJWRWtuRDRBK2Z4Zmo5dTlLeG8xRTNJdVZ0VEl1VU5vcUhiVlByZGU2Unh0ZW82bk1ybTdxOVExZGJUdzhPSHFFRHpMQS9vOTggbldwKzZJM0IvTmd6K3dIMERZTWRnWk54SHA1UlBDaWFqVW5FTS9lMlFRR0Zrb2JNakVEYm15ZkNtOU5yNHFQMDVYU1NKODlOQ3JrbiB0ajlJVnVMSnp1eHJsY3NXS1pBcDZncnB0RkhnUFgwZWJqZWRZMUtIemJJK1dQTU9EQTc3OWFBbkdLdHI1Z09IcFBoL3crSWp3Snh3IFdiTWFOelp2ODdVL2Y5Zy9menluN2N6S0hhS1l2MkFlU2JDbE95UzJLK29TWU9iTFV0b0N2VnpFVy95b0gxSWZNWDk4VXJBZ1R2czMgS0ZrWWM3b2hOZ3dma0hFL2p6N3JzT0hFT3BSWktoMjFQb0hKbFRKS1FSMG9yY2U3b2RqRldGRHNhdDk0VDZUc2l0M0JQaFZ5Mmp4NyBVWlprWm9LRXhsVnV3UzdQdndBQWY1OWowcTRZZExzWndHc2JIcDdkZ0s1VDliMWxWK2RZZGdTN2dBaTZuMzZZdkorOGFrSzNocCtBIFNBUGJiVU1NeFBpNHNtRE5oT2NQM0FRR0lBQmowb0o5UllWWmlpdXlXa1g4MTAybWVDZk0xSEpJaGZMYmE5b0xYTmdtTzJVVlhoTWsgaUs2c3pTaU9PK0hTV0tXQ1BjY3hzNk1xdU5yTU1TMlFCRzdRekhTdENnMERjbDJTWmpRa215eXNOQXREWXRxMVNpWHlWRDJkUHF0dyBwUHc5eGU2a0RjQ2UxOEdKbkFnVGZNZC9QZ04vQWIrTnVnY1JZeEF4UVZndFNrN0xqZ0VMRUtmbVJ4SmhYYUY1b2xCMkJiRG9kcVE0IGJBSHNaOGNPM05iakJsWUZCZ3RIU2Q4T0g4YmQvZno3OTBiS0NXd1ZwaE1ZMk9oMGhJc1o4RzJhOE5VT3Y3NW11UlFTcnZzUHRXdEwgZDJJYkl2ekVkRCtlY1QrNW5QR1luL0VPN2NIL0FIL1lOLzJCZ25HRE5kOVBiNUxwYW1WdDN6Ym11TklyOTJ5VStKRHVTMEZPcndBZiBtQmd4VDlxSnpnSG5jZnN0VVR5YU5hRFFzb3dOSjdKZ3dCOC93RS81OStlSHdsV0pCamhPWVMxM25lTk1SUXFxUEZuejU2R09OV2thIHlqWkprTUd5eHd3NFBBOTJYQi9SNDU0RUkrWlY2UlM5WVpSNnlKSmx0QWhDMm5lR0gwL2xtUm9WNGo1RlR5RU9xME90M0F4WUMzTzcgSDJaeHNuWml2YUZHMi93bmV6aDhBd2JBKy9mZ0RVVDQ4eWdyd1c3dUtJZHRXMDBPQnRlanpBOVh0WWUybklURlRRN0JaRVArVGZHQyBKQlE3Z0FndzZ5TWZNTExHV29FdEUyOEFBR0FBQmo3bno0cER6Tks4V3EwK0FBcGkvcVpUWGFybDRPeU9GZnhJZGpnVlBYMG1wN0JaIEJpcTVrTXdRRDA3QXI4Q0RjTzVqUTBNek5nYjJURFlFRUFnbjkvWUQ2K1h4ZG9MaWZaQ1E0a2x0VlBXY3BUS2VmQnFlSk1Ia09KRmwgekUreUszZkVPWVlZQTV3OTg4NU1HRk4wV1NadzRFcTVIUVFHTDh2cjUvZjhjN1p6TEs1VEYyVEJuV0xaa09RREVvK1QxaEdzamtVYyBzQU9Mc1Z0Um9ZVURvcUtnampWSGlsdHhpVlVtTnpqbWJvdDR4TkJ1YWRtb3k2NkRkNzR1ektVZzlvMlJwbzFYTnRPSUQ0QmVKZjhBIEQ0aHBHb0sybHNnSFE5Wmx3ZTlmUS9yL0FQT0RMeXhmRWJmUE5vNzhmUGdFSHdHQjlHeURqWTBhdkxJdmg4bzBicFhWME5TWHJnTTEgNnJsb2lHcjRIazJpSy9EUTdIcDlrWEU5YkI4ZlBQQWQ1S2ZlZk5wUE9WOStBZ1QrUGdNT09HMFpsUzEzRHQrMVE2aUJpb2IrSkh6RiBzUEVaTEdLY29LUGc5a3VCQ3ArN0VOZ01IRkpmYlRhZnRpdUxKakRsWEJPNmdEait3YisvUDNUK2M1aWZGMHYxNVYvYkcwWVptc2FjIGJMWVc2M0lYSFc5b0lmOEFEa2V0UlBZME83RnN1bjhrcmlsaUFFRVlyTm1mQmJNTXFzMms0ZjBDZ245L0FBT2lqMjQyaWl3bWszcEkgd3paYmxTQ1NLUjVLb1ZtWWxHTi92STFSWXl0S0xhUkJod21acWtOQlVCNXZDalo0OGpnZktsQmk0OWxnNjNxcktNYmJiNEVhdkw0RiBWUjNldCtHaVl0alE4TjRmSWFleUw3S0RyVHRvMUlkWjFtVUdkekFleUpPLzRBRDRBL2lBQUgreFhrTDZaSVpET25oRHE2d2wxVlczIGNnU3IyMmZQQVloUzBKbGdCNjN1RFJuUTRjZXRnNmxIVXRCclpaR1doY296Kzl2Ry93RHMvSDBFQjBZT0NPNE93TWJQcTV3WkUreWwgc2E3M2cxWFl2dTZlTFE3WmZTajVYOWIyUjJmRDNBUCtEUDhBbnZCaFpLTkN1VEpvN3ZhSVFIc0Irb2NINC8xSTFQRFhQNFNJYlJhQyBFMlZXMkxaSnJIdmMxT1ZFU3VtaXFJd0ZQZ0dHVytLSGU0Wjlhc1pzbnpqbkdHYTQ2Y2VTbjYrK09HSy9nQXdmbUQxTVlNaVBQTE8wIDJjakdPS09ISFZxNzAyekdOeHFrbWszSFVmZHlPTUxZUXAzWW9vRHQ1d3g3enp5Z3hpQVdaTFlwMitWK0RmNnJsZkxkdVZHR2pqU20gVmFpbGt0R0lSc0gyRXFoM2VHZVY2UnhWNGZ6QTRkd01NZy9ZN0xIMlc4QjJabVZ5aU16YjJiQ1lIMy9ZRDRCK3h4NmNFeTFDanVoLyA0U3ZUNmt5V2dIWlBqM2xkaStqNFdOVit3aStQaDVpMjRRekJERUdoc0RiQkRvd3hERnN5eUQyUjIvWU5nUDhBZ09odFRydGJhTEVhIGpUY3lXUXFsTHIwM3hMUVNkbllWc1dVcHlMYUNHUW1WVytHSEJ3NGVqVDZQUEk1aEdScmtWMlpaZUxSQ2Y3Ky9ZRUZnNjR4WlZrYUYgZkpkME5rTjB5MFdwR2xyNGVwYUhZWWI0aE5oU2tiZ0lCMlFQRERtTEJaTUlEaDg1YldkcjdtZWJOVmNjUVQrUDM3cFp3NzR3cU00KyBuelJaTGtpTTJZWGNYRHQvallyM1U5TjRybGlic2FwT1VkSW1lUkJJUmNiNFlFdkMxaTVFeW9OWHA1ZUd6b0kySFVaQXlyNU9WbWdTIFdkWUtUeXlRTnlRLytvM3hXaGJJVGZtV1F5dzAvQUg0RkhaR2FzMmo3T0NDYkorbjBIei9BTG5rMWJzUm9xTmJnUG1kVXFKV2llRkUgeUtyV3g4UmJsSnZlNHBNVDNBeE0wOXNqZVFaSGhEWUo3eFZheXpQbU81Z3duM2crQThCOWc2MG1DaEIzdEFQWE1XdDVPbTk4UFZkRSBhSWVkWUJhWWVLRm1pVk1JTWo0K3pUSzB2aHprQlBiWnpJVEppME42V2ZDQlBaKzU4ZzRiQUE2bnJFdWdXWnNHdk1xb05QZFhhZXpLIDNVckMwV3JYenhZWEtRSmE1S2JjR0VQRGNGdGtaQ0RoQjdYVzBjNHlUYUJiMFRSemJ0c2ZBWDcrdnQvZm93WU1TUm1rRkNKTm5jeGogSUJXSld6RnlkcHdXdlU1NVhEa1lGQkdBWlUrcGRvSjNrYkZOdE1mV21halVFZVIzWTY3OGs3MXg1VXJRUVczeVpiVXRqdXdhZW5vYSBURXRod3ZpUTJPRGtVYTkrUTE5Ym1MYkpWY01jeVFaOWdLWDBibENHekRLcnV3SUVCbi9BWVlJSi93QnlTSFNlbk5jc1Yyc0VGcVdKIElkbDZleVREZEhiRytGNE9VQXRrcXVhM1g0WmhrbWJPbmgvbjg4Z3NoTVloN25VRHc3SlBuL3YzZ1AwYzFsdW5mMjNMQzFTbmdMYSsgejc0M1dyOVJRMm4xT3lGY0M3Z1lxMlFxdUdITUxjeGdEcXZIMUZWV3htNkN4ak52ZTk4K0FQejhBNENmd1BvY2ZVK1lyaDFWcG42ZSB5VEpBdHBBN1QwUFlWUHk4YTVQQ1pVVjhUekVQQ0dabWN3NEdRN1ZUTE1XU2hTb0ZrNStVUWRSSCtBbnovSU1PbWpjalhjQ3ZISUVZIHhvNkVUckhHVXhqRUY5Mk9SQmJjWDRHUFFveXlQUzJOdEVEczAyNmpTYzVTTytDYk9kREZjWHVqM2R2TnV0UkV5R0xzeDJjcjR0cFMgenUxY250UE1ROU43WnVpYWtJYlJEcjh4Vy9aK3lJZGZ2blBHQ2YzSVpobkYyYXMzaDI3WFdvZnd0MEFBUVB2d0N0K25Oa3NEU3JiayBPQXgzTkpHNVZBalJPcEJ3bG9FdUhRL2VPSUxERDFzUGFnZGt1QWV5VURaZHdBVWQ4R0RDaUh4bi9STUcvYkQ5Z3czL0FLNDZ2VDZiIFNBVi9IcVZ1Q2lxVGlYQTdNTmZXRWgxZUptSzdSVThWWG1VOCtJUWV5RnU3RjlrdFRqODg1L1FhdWpld1FJYlIvd0F1OCszOStRVUcgWGRPMzlsNUNxcHo5SzZTWmdWdmFGcm1Mc3VhbjdqTDJnME1JR0l0NG1FTmxXZzVnY3lCRDlJUHM1YldYam5pTXRmZGtsSFBjQlByNSA5K3hBQUtsaVNWRlNSMEtEeUVPZDJFRFdlM0c0MmtRVlo3eTMyVTF3aG95SklVUXVLSkx5Rk51TVk1dUJnMmRXTEhiL0FLbTY2anJnIFpCNmxZQjRDK1cwMnczeHdOaVUvK0paSHRpMUhKWHNJcGJWcU1MNVQ3NHR6REE1a3F2dGRBVldWNVpxdlEwWlp3M3RKQjdBZlBuMzcgbjNUT1YzaFBESnhMVUVocXVrdHFLRE5QQ1JYN3NOUjJIYTdhcEVDTFFpSDhRbThNakpSNGV1SHhQc3l1UTZ5elBpR3NqTFVkdFBGbyB2SDZBUDkvSHc4b1lyT3FsOE8rUmM2bkJ1VTFJRVFoZVdjajFPeU5BR25MYUtHSENaRFRueUcrRUc5SFF4OWFQQ0c4clA4Umxack9EIHNrbTNqWUg3Z0ovK29Ba2ZEYktwekhaU1hIeVFCcm5jbmNmTkpVZkxtV05LWVpUNEhUN3NENnRlTjJvQWhuQUkreTRMSU1yTXBWeXkgakk5WE8xb280QUFBUDcvKy93QUpjcWlvUFlpcVQrYXhBUDY4SGpuaStlbElGQ3U3aTBYSEkzN2JQSEh6ZFYvMitlbnd2aHc5UVZXTiAvaHkrUFlXVm5ObHhxMlRuRDJ4d1Z3UmFwUUtlbm1hZmNFTndzaGdNQTU1QnRSL3ZOWHE5WmpOa1NjRG5nRjlCUC9RYWpyZTBDN1FiIGZoV1hLQUVzWjRlTjNBUTY5WUMwd29BWGlqa0hUL3NZZUh5QmtnejYvZkFRY1o5b1JzTjhOLzhBVERFQWYyQUE4ZE9hblhhWVVNVjggcEU3SVNkU0x0WkREVDRGd3NqNXR0U2xNREY0L3M2ZlErbnRiSU1rNEN3UGxjdmlOanFMRnZKTTVkbk5qaDgvVVI4K0F3UG4ra0V1TyBpZkZIdFFFQzdTbHV5MXR0NE83Vks0ZDRLUkExUGNpdStMNmY4eTFJYklPc2dHZlR3S29IM01XTHN6WXpmZTFIdncrZ2dBSEFRQ0MvIFJ4V1RBU0IyeGFOSFRET1B3cmhzbXErYkZHdUJadmkxWDJFU2JlbWE4V3h6eHJDK0xXN3NmSTRIemQ5RWlXVXNCSUtPeXRYT2Q4T0IgcUtxNllyM25YZ2QzODl0YlJ0Nkd5QjluY1BodFI2d0orekxMeStLNHoyNXNrN0FBQVlzR1BnRDdDcWNvbExpdXF5dFV1bS92d0JtViBLMlZmUTlTb0hENHRYMkZZd3N3d09ITDN4a2NDSGdiQlVnZTUvUTNuK2lkajVCK3V3ZFFMcGJEZ3g2aEVOanlpUnNNWlpBbmVCa0dCIDVsUDdEV1ZjaTF0ZlcrTnA5a0J1U0hMYXI3czZ0dk5tWTdtTUJ1MnluSDRBdm9QUHQvQTlaSVQxZGozZ1VVUERPVy9KWVhsUHNLcjAgZmkvYzBvaHVMQUhoekE1Z3dRaDJNcEQrS0IxbDU1UXpEUENiNXNIdHNHLzlER0dlT0V6THN1NmFmVWxQZmpsbDJaVWwxL2l4SHoyOCBkTm0yMW1tV0Y5NnAzaGpPT0c0WWdnTGU1c2J6SEhkWDVxeUUvcHZLV0pZS210MUtlYXRnWEE0U1d2bm9jampjWFRucDdhVTF3cjlEIFE3Z3NqZUNCaUNQcjg4cW1DYk1VS1lveHcyRWR1QW45L0FBTi9BQUhaSEZqdU5qU21WWjFnY3RBcVVRZlpDM1lBbW54Y3BzaXlvWSsgSFcrR251WlZmSkdvOVI2a3EyUjNmdEdyL0JoRWwydzhBZ2dOL1BnRDZadG1SWGJRWUR6NHRoU1Z0alNWS0ludUNUSUxHRmNYWHU2NyBmQ2h3NXNQbUJnNDJwKytjWisrUE94aEFsbzhCMkRCQngvZjdVT1B5RVBSMmVWek9DQlFKa09wQ2RUR2tWVmNGNklldENXTEtRMkFNIHR3NjMrR3Z2aHl5eDdiUGhzM0tGY21zZ3dnVDZDQVAvQUwvaGgweWFDZHRwNGRMQ3NNOHpRa3F0U2Zadk1rdjJidHgyTVRXQzhrSHAgVWNzY1NNak81bWlRdktVYkRLaWhVRWQ5ZUdvMmVTZURmUjVvcnIrOUw0WUxDelRJY2JXS2ExRWtob3JGVXoyRlBQUmJDVjlRTU1nWiA4d1lzZ2hEZUcyd0h1Y3RyRE5RN1M4b3lQVjNnd0FESFlENzZBQWRKOXdVNDdPUU1acDZqUWlIY0dUd2pibHUrTjRjcFVTTFNLMzhPIEp5UmtNSjdKWFBNVU9Bbm8xWjRpM25ZMGszU1p3QWduMEhmL0FMOGcxWFQ2ekYxbm1LdmNHR2JUNHRoalY2djJUT3BjdC84QWVhMCsgbEZ0ZlpUQ2ZEVzJVZ1lxczhRK2RNc3dZaHZqeU1lUHV3TkJBWWdBSGdlbjlJdWcya01mY3ROR29Cakt6Z2piWCtOVjJCYkRJNUpvbCB5VjdJSUo4TmJtVW5ESHJjNVNxK2ZPaDFBekNpak96SEFtTjJJL0FlZmJCdjREb1lqcVltbGRWdEpuVjlPOEJ6a1NBeHhST0ExTGdaIHhFaEJvMFZxalZrM3dkVmhLdkEvT1FkZkZsQ09iRitEK0tzZm5yekExaDNycTNhcmt6cGoyS1ZxZk54VmtEa1lWN3BGVTZPaTFlQ2ogVHZUS1BlcjFGVktYWU1vclhsaEU1NW1jVmMwbzNqRkx3WjAzSktUQnczRXg2SUVmT3ZhRlYxNmhrdVU1Wm9namF0ZVpEbTR6bm5NciBhaHI2cnlwNndyLzBteFFhT05XbDVJdkpLWjdCSGVqWWh3a3puU3BrK0tIS1poZmNsMFFJQ3lZY0RKenJVbzB5S2lEVGYybFNJaWpPIGFYT2xWUjNaRmprYU4yeE5ueWE2WHZhbnkycjB6dHdXZFhRS3g0SklDeEtvQnJnQUFVVHgwajJGZlhxdHJ1bnJmVWdReUpZelprYW8gTStBMWV2SnpQU1pUQ0ZNK3VuM1pmS0FpVVBOaGtHR2FabU9CcGJZZTU4cXdvbnBybk95cXZXb3EzWHVYNmxyMTNzMHc2ZXExMVJmOCBVelVKcC90d0dJa0k2Z3c2alVLUkpSRTJ1YWpPT21Rc1ZkVUI0T3d1dWJWS1VtaHlaM0VpNFRzVDhZZUZFcXJ0RmdDNEwyc00wUExtIDVNL09zNjVlc2R4SEk0ZGc2cENGY01Rd0Z2d0d1d1AwRFhReEFDUmFBRjZxelhGbjhuOS92cnp5dmhuS2FYNnQwdjJUU1BwR0tWaVggRi93dmdGODJFNXpnb2h5TG4yM1ZDenVLeGNJTE55WG1FeUNNaENNQUZSWEZoRTdJRjVZeFNqZ0IvcldjQmNqNVdkSnQvZDJrK2tqOSA2NFd2Z3FSZzdBME5MVWNQQ2hVVVZtS2NwZzlUM2xCNWg0ZXVHUmhlQ3NsQ1orUENzTWpuS2VBTExrT28rSGo2Y25MVk12MUt1Wm5XIGRhb2lmL1V5bG5COUxxUTYzMnVMZzRaZkREazhFRWNuclk2STM5alNzeXF6UnphWGJZcUMwZVdlV0JJdGNxR1dOWFF2d09xZlp5b2ggdFdrdDJhOGE5VFYwa25nNHJPbllxWXpQQjVpZVpieGdVa1g5YW1WeVp1WXhMWWYxbEFvZ3A2RklNYWhKMlpPR3c4eVl2eS9Sa2VuTCB3R3EwZ3Q5di93REVBdFdnc3k0TGxyR3MvVHA1cTVybkFhV3NBcFdjVXk5K2h5VzNkYXNBcVBCK2pBTG5OOWZPNXoxdFZka0k0bUxHIFVKNG9BT0Z3Y3RkQ3dRbVhuV2RHcE8yT1R4SEt3NThNdUdMRC9NdG5FK1JabzlZU0FQQUE0WHdLK0IxZmdPalptUW0vOFdETGVYRnUgdXhoMFh5Nzh0ZWhuUzhNMWRzZzh1dnNRczVJelVkbWpDNjU2VWlkalpROWVBbG5VZmxxTVFabE1vVVFiVElTZkpHUU1JOVlkTUYvdCBobW82amVzOE10UXp1b0ZtTEtiemlJNVFJaVFVa1N4WE9sWmxmcHVRUGFJL3FVYTdMNUhyempKWkFFWnVTbjV4SFB6QmtRTENUc2ZRIHJlak9zNlc3dTArcHlabXFkNnlZbXJxNnNtdkEvd0NuV3VOVldOTVZDM2Q0Z0MrVTgxNThuL3FldnhCUWhPYlFGbTUvcG5ISW9zQ2UgUUprSlpoRXZWQ1h2UTgxcFpOZTFTQnR1UEdqWldYTkQyeVJWZlZuNVRZNnJ4QU5PYnNaeEVjd1pjNWNJVEFXY3dVaXRGbHV0MjFNbyBuNmpYd21UVHJaUlgxd01UeFVsa0NDQkJVRnFvN01GU0Q4a3dSOWNOV2dsMnFZdEJERTRzQWlGV3FYTm5DaU9LMVgyV201MW5UZkVVIGpqM0xoaTMzTFk1bytSZEM2UFB6MVUvOGgvMi8vRHJqMDhWMkd1YlQvZFRveXlpQWowcTRUVDFBSEp5bDZCSUpDem8xeUtMdTludlEgUldQUUtrUjV2cUErbWNUVUZQTXpNN0QxalZXZmg2NS9xTE5ZaGRhUXlUc1F6bDFwcGZUcmNFQWxzb1pkMWNBM3lGdzZGaTU2WURMRyBDVlRKaFQwZ3dvN2E4NzRCQVZZWHI5YytBY0lHNDgvT1VGQ1BPOU1rVGtIeGpEbldkVTVQMCtxNVA4eC84Z2YrT2xwN2wvMi84SjE2IGRyUzdBeGJMS0ZCYzBpcCtpQ25hK215Tm1ySk9iQ2plZzVXaXRXVGdpZjhBTXV5czZjbit0ZFdIZTRYWjVGb1hxWE1hOXlISFBFc0cgQ3BqUEJDczJOVGZQaTQxVC93QUIvU2pyTlg1NXdoYUx3NDJ3V3oxcGhZMkFuVkt2NjJqSXRMSk9SRVd2L1FUaWpsREpuNWRjcnVUbiBTZytma0Y4WUdZYkQ3bnNqQVhHeTg2enBFQUJranNYNnFIbjhpNlArby9QVnQ3SlAzR3dQN0Jxd2YwZmtkVmNxbDZNTy9xeFJobnA5IEZhQUlGTmFWTEJYY0sxSU1BY29xdEZ5VWJXMU9YSjZ3eHMwYVlTOGhjdEN2SFltdnNTRWZtRzYvRlJvSWJCS1ZsVDBqOFBUbTJjcFUgUE0xRkJLSnNDNW5HeUhNMW4xL1gxbHp2VGpaRHN1K2tteVdSRE1PTGo2eVJWU09BR2VabHptbFppSFE4ek5QNG0wc2pLbFp5S1hXZiA4QVZnTXpyT3RPcEFTS0IxQVZ0cFV5WGhzSFlaSllvNHRReVc2YWhZTkRwT21KTW1wc2srdDhtL09OK2Z6ODlVeXRITEpycjdiR255IE95TWVmV2tiSVI1Y2VENlNPQVE1a3l5OVF1VjdaRW5MYVZQSVhXSEQxaEhwUkFZamZSaVF4eUpJVWRGRnNHVWM5TWFKblI3bzZtOVkgbHgzalN3K3pwZnFVYTJmN1hYcmxyVjdjNnJWWUlCeE1xYW5wU3dzVENENlhRMTYyVndnY2lLNmJrY1N6K2tlZWl4aUt5WmR3Y2VQQiBqc1hwOVVET3M2VklCOVhFYTVGMGZrZnhlRDhkUGo1ME9xdm10cHgrblVQaXcvRExaeGJ5TE5FZEpqL2h4TWJycTEwbzNFUmViRXNaIElZdE90Ylc0SXJacnFCNlpVSmlqeFN4Q2hjc2prR1prY2pQamxoUllmWXJDTmFsUE5pWlNSWUhweXd4aXhsbHVad2cwOUhiR2RYOHEgaWh1dFluWHo4N3hpMmthMXJBeXEvSUcrSE1ucGFjbVkxYVpzai9tc2NNYVQ1aTJmS3dPL1RsbWcyb1FGWFhGZXpCcWZnQlloMlN0USA4cjE1MW5TdFAzNlBVNTkvci9mM2VidnpmbWhmNXJwdW9Kam5VeGt4azNlSGI0MjY5dGZrOWI4MmRiYkRZby9PWjlRbHVORXhxcVNxIHZRd3pqMlhWODZTZVBSUitxbDVIdVROaDIweTQ3a3p3U3h0cmgrck1kWTdFR0xoV3NpTVl3cHJLRXFIcVdyR2FTYWFWdFJHcWl3NjUgc0xQbHhoS3lXMDFlZ1VYUnhLWlh6UEZGYW1WUmp6R1pXZ0drOVVFWm9GSXI5Y1RvTmZWQ2pyR1VEVTBpdmlyS3M3T1Vqc0JMTnpzNiB6cVJBQllnQUFPN3h4OHAwcHY4QWluUHljYlB5ZWVrSk9xWlVPaW1DblN2cG15MU92SUxxOWpmMWdaR2NYbXZnRXJxQW5Band1S1B5IEZUUFVvTmhMZU1yMUx3MWJGUTNDS2FKWmxuYzhNd2xrd3ZRRlpVS3ZqTkpHbDJaTmFuTm1MM0RvaDEzMjh3SDJuUFZ5NXdNVjBhazcgSVNxZFgxY2o2bFhKekJ3T09HT1pYcUlscG1CT3dSODBMQmtwRHduYm0xNWJKbldkYUdKeVhrOFN5a2Zvc1lzaVB3VFFzL05DK2x4KyA1MCt4a2dESjlqQmR6RU12Z2hiT0lJSUZtdko2TTEydmptbTNVUFhVU21ybXVsSncxRmpvSHB0aVNJYng4R2VhbjBlQVNUSzBlRHpvIFFDTEtUR05pOWZxTWpiQU9KdWFCSXVZWnNheGhYUDhBVkhNNTJIby9jS3AxNGRxSHVOZTlKQTlOT2s5SnovWnRpMlVVbXhDVmhXNjEgVzFvZHpkVWJzUWZ5VXNmbUE4b25PdUJlOVJxQzFJcThrdkFhQVhsaVJUVEVpaDA3Qlh6ck9zc1lCMUljZ0YzZ2lMdVIzTVZ5eExONSBZcmsySkpOV2FxejA0RS9UNkhrOEdRRDlCdG5JRDhCcUYxNW9YNDZTT3FLMFBTUVM3L1BqSzNxWlM5RklhWGRQTjhWOElWa2lOQmlEIG42UWV1cFRtNFN5OHlXUmNKeXFYaUFzMHl5cG1jejRMRGU1TUxHN3R3dzYyVG81aUZFVXNzRWErMFE2VjlZQ1E3TmE1YzAzVURicTMga3lvK1Vva0ZnZU5rYUl5MXpUc3JJV0Rpb1ZIRU1raExubTYrbURUK0JrTDY2d1BFRnZMRjVVN0lFbXhtZFoxdXNuVDZaaVNXYlBKaSBiWnFhS3JKNU5XYXM4V2Z6MWtjQXpvU0JadS8zN2ZQNTZZRlorZ1pjRkhXdGNqR0sydGxZM0lMUnpTUFYyRjFEaEdXbjdJMHpWaGJMIGJYWlQwNHRFbzNrcnBVazBUMVdkNkJKd1pPS0k4WWNETlRpa2lMaVN6RlpZelcwcmlUUjl2aldaZ3oySTVJczJsbzRWa01rSGxHVzEgOFpaUnBMQW1GbExlNURLQkhtRjhMRGllb1lMa1JKcUg2eWVYbkZpYVdSSUVTc2lmbldkWms5Mm0vVVNnZm9BcFFINEEvSFUxanV1bCAxR0xNdHlNVGl4Rm0xNU5FV2YyZWVvVzRkWjF6aEUrNmErRit0VUhneXRFNmZYdzlJR0FObkxIQ1NBc05xZU1EeUNBYWFQOEFVS1VpIEkyeXllY1dWMWpMQWlQa0NSdVFJamlCUk56R05kMWFKVUlsM1VscGpsSHpMVXVFclcweTFOZnRqejFKbUw1R1c0dDVEWGtDamt4Wm8gQ3hTV1JUa0xSR1NrcWhPUkc5Qy9sR3N1YUVpNVVNN0ZHNWtvZkl6ck9zV3BKVFZSUm9Ta2F6UjRvcEtvdGl6U2lsRm5rME9ldWdpcSB3a3lVTlVNbFpBR3JWTHE3OC9QVm9ORXYvRGcwOGFuS1U3a3YzcFl4eDMwT1RNQjlPVXV3YTN6TXJOaHhjeUlVOUdjUUt0dGR0aldiIG00U2pFdklqU0RyR1R4RUE4Z09wZ2ZTSlVsMWVCQzg2enJPdTNITEtGVUNTU3VQdmI4cCsrdVBKSEdYY2xFSkxNU1Nxa2szNUpyOUQgL3AxLy85az0gIgogICAgICAgeT0iMCIKICAgICAgIHg9IjAiCiAgICAgICBpZD0iaW1hZ2U1NjU4IgogICAgICAgaGVpZ2h0PSIyNjAiCiAgICAgICB3aWR0aD0iMjYwIiAvPjwvcGF0dGVybj48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQzODIxIj48c3RvcAogICAgICAgaWQ9InN0b3AzODIzIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY1NjU2NTtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4YjhiOGI7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjAzMDU2NzQzIgogICAgICAgaWQ9InN0b3AzODI1IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MjciCiAgICAgICBvZmZzZXQ9IjAuMDYwMzc1MDMiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWU5ZTllO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YzdjNztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMDk4MjUxNDQiCiAgICAgICBpZD0ic3RvcDM4MjkiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlYWVhZWE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICBvZmZzZXQ9IjAuMjIzMzk4OTIiCiAgICAgICBpZD0ic3RvcDM4MzEiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzgzOSIKICAgICAgIG9mZnNldD0iMC4zODI1NDUwNSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MzMiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTJlMmUyO3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzk5Ij48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM4MDEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzODAzIiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM3ODMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjlmOWY5O3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3AzNzg1IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTU5NTk1O3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzg3IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3MyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2NTY1NjU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3AzNzc1IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3OTMiCiAgICAgICBvZmZzZXQ9IjAuMDMwNTY3NDMiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOGI4YjhiO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzllOWU5ZTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMDYwMzc1MDMiCiAgICAgICBpZD0ic3RvcDM3OTUiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzc5MSIKICAgICAgIG9mZnNldD0iMC4wOTgyNTE0NCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjN2M3Yzc7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3NzciCiAgICAgICBvZmZzZXQ9IjAuMjU5OTc3NTgiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2U5ZTllOTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDM3NzkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzQwIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM3NDIiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzQ1IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3BhdHRlcm42NDkzIgogICAgIGlkPSJwYXR0ZXJuMjk2NCIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTg3OTI0NiwtNDcuMzY5MjM4LC0zNi41MDQ5MTIpIiAvPjxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDY0IDogMSIKICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgaW5rc2NhcGU6dnBfej0iMTI4IDogNjQgOiAxIgogICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI2NCA6IDQyLjY2NjY2NyA6IDEiCiAgICAgaWQ9InBlcnNwZWN0aXZlMTgwIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzQyIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2I4ZjRmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM3NDQiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiOGY0ZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzQ2IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3BhdHRlcm42NDkzIgogICAgIGlkPSJwYXR0ZXJuNDQ4OSIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTg3OTI0NiwxMTQuNzU3MDksLTM2LjUwNDkxMikiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwNzUiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNzA3NyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDcwNzkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAwNyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A3MDA5IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNzAxMSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5MTMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWFkOWUyO3N0b3Atb3BhY2l0eTowLjMxOTk5OTk5OyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNjkxNSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzlhZDllMjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDY5MTciIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjgyOSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYjU4NjA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2ODMxIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMWI1ODYwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjgzMyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3NjIiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjk2NDZiO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNjc2NCIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzI5NjQ2YjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDY3NjYiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc0NSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2NzQ3IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjc0OSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NzMxIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDY3MzMiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A2NzM1IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjUxMSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDMyMzk7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2NTEzIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjUxNSIgLz48L2xpbmVhckdyYWRpZW50PjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNzYW5kX2JpdG1hcCIKICAgICBpZD0icGF0dGVybjY0OTMiCiAgICAgcGF0dGVyblRyYW5zZm9ybT0ibWF0cml4KDAuMTE5NzMwMTEsMCwwLDAuMTE4NzkyNDYsMTE0Ljc1NzA5LC0zNi41MDQ5MTIpIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NDYzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDY0NjUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A2NDY3IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3NhbmRfYml0bWFwIgogICAgIGlkPSJwYXR0ZXJuNjQwNiIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJzY2FsZSgwLjEzOTIyMTMxLDAuMTM5MjIxMzEpIiAvPjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6c3RvY2tpZD0iU2FuZCAoYml0bWFwKSIKICAgICBpZD0ic2FuZF9iaXRtYXAiCiAgICAgaGVpZ2h0PSIyNTYiCiAgICAgd2lkdGg9IjI1NiIKICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIHBhdHRlcm5UcmFuc2Zvcm09Im1hdHJpeCgwLjExOTczMDExLDAsMCwwLjExOTczMDExLDExNC45MzgzNSwtMzUuMTgxOTU2KSI+PCEtLSBTZWFtbGVzcyB0ZXh0dXJlIHByb3ZpZGVkIGJ5IEZyZWVTZWFtbGVzc1RleHR1cmVzLmNvbSAtLT48IS0tIExpY2Vuc2U6IGNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gLS0+PGltYWdlCiAgICAgICB4bGluazpocmVmPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUlBSXdBakFBRC8yd0JEQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIgQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC8yd0JEQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQiBBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC93QUFSQ0FFRUFRUURBU0lBIEFoRUJBeEVCLzhRQUhRQUFBZ0lEQVFFQkFBQUFBQUFBQUFBQUJnY0ZDQUFEQkFrQkF2L0VBRUlRQUFJQ0FBVURCQUVDQkFRRkF3RUkgQXdVR0JBY0JBd2dWRmdBWEpRSVJGQ1luSVRVWUpEWkZFekUzUmdrU1FWVldLRkYxWlRRNFIxZGhabWQyaFlhVi84UUFHUUVBQWdNQiBBQUFBQUFBQUFBQUFBQUFBQWdNQUFRUUYvOFFBT3hFQUFnSUJBd01EQkFFQkJnVURCUUVBQVFJREVSSUVFeUVBSWpFak1rRVVRbEZoIE0wTUZKRkppY1lFMFU1R2hzUlZqY25PQ3d0SGg4UC9hQUF3REFRQUNFUU1SQUQ4QXIyeUM2bnJSTHJlMzYrenY4RmpmSkxZbjBiWkIgZ1F0QzJoM3U0b0hwK3lLclcwTmJEMkJNc2JiM3c2NEUwWVcrWGtNZUFodXJqZ0FCZ0FxS2c4RCt3UGlTcnBIOGREakF1N1Q1YU5qMCAyU3NDN2FYYTRkSVZQVDljMk1KUFJhM3daQkV5MUlWSlFBeXEyc0VFQ25zOWxzK0tOOUpkcXYyQmdmbDlnQWZvd1ZGSGc2L2dXbzFVIGpQMDNrcWY0VFc3Q1lWYk9jUG11U3hMS0svSDYyK0hXNmZMSGgxUkRINzRoMloza0YrN3h2bFhJL2FJQUE1OGY4K0h3cmNwOWN2aXYgZTVlVlZ0SnU2U1NpTUNTN0k5ZXNuOEw2UVVLR0dEN2duc2o1K09EMm45dE9MZFFFMWRYWnF6T093U3JqbHVnRDUvbndEejR5UnlZVCBHV1oyZEl6SWtrZnBTTkF0YklWaVh3dTNzMHc4Y2ZtUkxHN3dQR21DUE5HUzJXVzQ1SGUvZ1kzMjBMTmZucDVKNDkwZ1plVG0xTERDIFVQWUtHa3k5TjkyV1FZNEhiVFE3MjFxZ01PQzF6Q0dudUJDWjhDajlRL0ErQ29hSHRuNHU0T0FQZUFBTUcvNHZpN05NOUg1Vm9KK28gZTMwcnNQbFdvMnNKQXhoSWlCMmhONTVGTUVJYjVDaHJZY2M0UVZLd0lGcUo3TjRzWndmbTFvby9nUEFZOEI2V05UMllEcjY1REptdiBiYUpaemtIcTdzK0JzSWVwaHloL3MzYUhkQndjRU9HSHRSZ21IT0h3SjNCaWROdEF3WWo5cmtrRjUvMysvZFNOWjBXMFhKSUQxTFgxIFYwbStTbnVnWWtnQWgxT3dtSElVWGxSZjV3enFFdFN5RU1laHF0RDNCV2p3eUxQWnRYWmhqdzdCTFIvNkgrZm5qL1VuY1I0enh6T3IgeW82YWhERDJMQWNOd3BJenRITlhHUWZUbkh0cXNqMUlpenJMcHA0RktSUEM4V2RISGg4d0NvU1ZNcVVreHlKZGR3YWhTVWpxOWZ6NiBmbUQ3ZnJHTlRLMjdSck5rYU03bHJlc254eVE3QmZBTU1nWW1DRTlrVUIyK1ZLUGZJS2VqUEt1cjhtNFQrLzcrQStnNGIvMkhFZHd6IGJNdkp6eHVDL2tPbGdOWEpBOGxXVmZ0bjhOSlJoc2FLWUgyVFc5MW1BOHhoL2tCNmxZMHpjMWRvSm93TTFWeHNIeDhBZ24rQThCNlkgVDQ0YWpIeXY2M3pXalBzaDhVZ0xJSlRsVWJJcktiVjFYc0xTQlF4ME5EVzRiNU1yOXdnOC9ubkVObVJpZ3A1UnZ6WWs3QitYZC84QSBQci9aVWN6TFY2ZmFyUWdWTFYzenpEL1lWSHVBSDVhZUJLQ1lvRndYak44Si93QU90eURoN2tGS0N0b3lOeWl6Qm05aFFscVZEYnFDIGZmaitEOWlmWVJLcXhzeGYxSkZUQ05Na2p2NzB5WXlMSVB0YVNTV3VjUU9jbzZ3SDA0VXgya2Rta1pzcEpLd0FWOFFrUXg1b3h4SmQgbkxMaXVPcDdRVTNkWHNJQzJ2aEs3TEdzSTNkenhwcFBXd3doN3VLVU5iVVdZUVhMSVpIRDhmOEFCMjFmYlZYalRNMEN4aU1EZG5jMCBEQVAxQjFGd0hZSDdBcXJNNXFGVGF6RzJEbTF1dG1GeHhOM2RIdFMyay91UjI1N04xS0grR0hyZER3UStTSEswN2xuTGd3V1NsTnN3IHhIcE1JN2JBQTUvaXZuejZDZ2l0NFBCQ3djd3piNEhGYnM1b1c1SzlkRHNCYUZPcTN5TFh0YzAyeVZldDFXdDJvSDQrSGFtMWdBZzMgQlpyTjgzVFk3UmR1RG9QUHNQMy9BS2did0hzbGcybzFXcUd1WkFXNHRxTnBhcDJxWkhiQStuT1ZMVnp3ZXZ3N0lIMUlCNlRIR0VkRCByODlCaGkzbG9GRTJiOTd3NTk3ZjU0QUJra1pwU3haMzNha0pMNXhvN1VIaWplaG5oeGsyS1hhMG9IVWlYRU1tU0pnNVMwanJPc2VTIE16Vlg0czBDZWVvRWRsMVBLck13QnluQnRHcTVLTnA3SURjbjRueFFQZmdXeUVFK0crTGEydGtEQnprRUJIcmYyYWI0R2swYzI3YzQgMkIrUVFIbjBIcmRZR1hEcSs0SmtDeGs4Mkg3d1ZMWUt1U2lPRHVZVjFldkh4b29kZ1pFTVB6eDlIbUFmN0h0Z3hERnN6TndubTE0ZiBydjhBd0ZCd0FkaXU2QjN3eFVzQW8xdjgyeG54a2QyZ09uajY5UTFlTExQU2x0Z3JkUDhBaDJveUQyU3VRSkh2Z1lXVmtYeG5mQWp0IFNaejkvd0Q3QmhQdGdlNkZ3cGRpYlZXY05WUXlTMnJ5UERjVmRzaGxKYkRYSjVic0N0ekV3Tk1EMS9nODQyZmJVRXd6b3l1MExOUUggT0V1eHpnT3dBUDM5Z2FpdVZSdk9icWxWaHFJcm9YOTJHWDQ1eUk4aXVwdUpLMGpPTWNjNkYzZTJJNytCN3NnUDE0NXZoZzB2VjlkMiBXTHRvVzBXVEdWSzV5YWRiSEN0M1l3dk1tbnlwYkM3U3A2L2FsMnA0ZER0U3YxdUNlWUVOR3VBbjcvWnZkSVNRWi84QXI0K0FBUHkvIFdsUGVFL3RXa3RyNUR3bzFYczV0bGgwbXlMWXFka0tValllMXcxOE95UGxEaHc0OWJuTnFmUGd6TVZrb0xaaWY5YmRvZ0Ivd0dMOTcgMkVUMnRrcjZsaVdVR3VBbEVyU3dna3RndFNxM0JlTU5DdXZGTGtXOEE4eUd5UTF0UFpFY0M0OXVkc1JpbG9qTmpDSk8rY0JRZmYzNiBYaW5EcXNXWWNFMFhxRWJabFhqZTA4aHF1YVNXTU5FclRnaDFmTUlRL2VZdC93QTRqdHJBQkJ6TnN3NEtUOXRrZU1HQStBKy9lM1NyIGZabFdSOE4yWjJRS001SGpHR0x4cGE1WFp5R1F4QVhrM3dKS3JUUnJkZTRrNG92dHJONk9GMGE3VFpEZmpxeGNOMGNCZVk0Yk5WWkogUE1tRzIyVmRQeVI5aFRBS2F3bGJHaGp6Q0c0Qi9yN0pCbjE5V2pVWXQrMzFkWDdRZGt6WnZZTi80RGJvRGdJQ3FJTnN0QkkwN1Y3UiBZYXVDY082VXB0dGd3MU5UeFpyNUxRMGpmb1pDRytUSWVtUGg4UHNzbmdaM0JzV2hvNXp2ZkNkLzJEZjkvUG9QUjVVYXZYNEdQazJYIGFGNU95SGR3ZGxFMSt5RFdCZWNLdjVZZW9lR3dHRnN3WW1NbXpnNTlYNzRINHdMYUJqTnZkWGVBMkFBZjhCaDFEdmtpV2tQaEpOZ1YgS2JzS2tZY25sRmUyRTRjYnE4V1dGL0RZRnR3ZkZ1R3RqekVGdHNERUd5b3d4OGZCaFB1a0UyTkIvZndBRHdCUWlOWnNDSGxkS2RsUiBMMmE4VEdtT1dGbWs0eXM5dzRKR1RjQzl2WWtuR2ZuTk9ESW1QR04ydk5uL0FFUFEydHNsZnhZZXluclU3TTF5SHB5bkhpSG5WK0ptIEFYeEljbktxMCtoMzJZdGgyUzBERFVlci9VUFZiSjlvVnlaTTRrMWNFT0lQMEZCNllUUXYyQU10UWJXbXFCMlczeTdxWkdsbUIyaGogOVhiS0FWMkZvbElmZXo1a053VHg0WjRQZDZmaGpIbXIvd0JOOENlZjdSSDkvQWJBQUc2UHBORHFXSFh6R3IyUnYybFdwWkxaSGh1MSBncE5iMjBtME5ZMWpKNUF3dGgzRGtpZkRPSFNMYk8yeXN5cXYyenRSSlNUWnpFL3YrSDBFK0FVdVdocGFRaG1FZG9UN2tKS1NRdDZoIGNFTlBZSmFIWXliWHQybERDZVlRdzlWdzA5Z1cycnRmOXd4SnZuR1daNENCRFp6OFJmZmw5Kzl4Wlp2UUdTTjZLUmJrTWUzL0FEVncga3ViWnhqRDFZc0Z6SlFaS09paVpNcFcybkdiNTA4MjU1K0I2YVZWY25uSy9pdVFPL0ptWFhMQk1xV0sxTzB5bTN4dHIxZjQzSitHTCB0cEkzN2o3Sml5R096NUF4T244UmVEQXdudGl5OG5NY2VEOEFQNy8rL2dQV0xVaFlGNldxaG41OXlFaHVtKzZYd0lXUnpGaFZSVThQIGE3RHBGOHF1c0E5YnZrTytHUmczemo3WTFKOUc0V2dMck1tOEd3aVNidDBCc0hYbnZsbzRzV0xHdmx0S3BKUFNHUmtZYTMzNUlVMC8gZEt5RnZoampiaE0wOWh6S2NIQm5tQUNEM1BhM3dtc28vbTNqZitBb0ovZ0w4ZmVVeEh2VFR3THV5VlBoL01ya2FwUzdBK0d3TUsyQiAwK3l4YlFINWdaVzVnZnZBSHJxZlo3NVI0Y216ZnJXZTl1M0IrQWdINyt3ZE5ZUk5PdVdhektpT0dLZW1tZENvM3k5UzhPNDRwanh3IGN1R0NONDlNeGtDSFR0TXF1UTl5Sytuck5Xang5R1JUS3UxSms5VzNiMGpVTmx1TklxOGJYMm9JbGFJRXl0cVZoSTllMnBSOW1tS3YgUEtjcG80L01NQjVrT2FRbWM4MzRKK3ZBL0JwTjJCSGdBZmZRQjkrUU9wNG9VajBZTXNnOVRaaTR6R2FodTloTUNIbkdPejU1bzJINSBqQk1NR1h4RG1ZTWlxK2JCT1Qzbmk3UitLclIyUTZBUG9QOEFwRnNCODhGNm1MMDA3dEZKMnJYMW5VQmFyYlpDMmtNSENDQzhIc1pYIGx5aGNOd3F0RGh2aWN0cjZmT1E3UUFvNzV4bHBRNnovQU43WTcvc0Ivd0R6NjB0dG1CM0pIMWdkeTlNYllxM1M3Sks5SDArTlNmdzggWEtwR1VoMlF3VEh4OG9lcTA5Z2h6dUg4SC9HYUhhS01NT094c0pzSURZQUZSUHAvcENoaGNMd3UybWtxWnB6L0FIbEdNbGRzWnFMMiBWYkhuSU1PRng1RXN4M0hTVkkzVnlpbFBSQXh4czEzNTNZSUhHTmZkbjJteVgzTXN1WUJ0cXdkUzF0WktrNFZkV1Vka0d1RVNxNVY4IFdFZWlHTlFPem1FT3F6RmZyWUxWTGNBRjVzZ21UZkZjWTlQQVJKcE40MyszZlA4QUFVRUFFeDNCUEEydzRadGpHS1V0VU10K1l6djQgZDdONHVlaUs4cmJ3NzRIcmV5RS9TK0hWVzJyMUt1ZHM0R0xyTW1EcTdUeFNmUHdMOWg3YysyQ0hUeDVTa1ppZTI1cTJwTXVuaXQ1SyA2UVczWmdpTGNVRHdNcFc3QTRCNjNUM3hEWUpxcVBjTExvOWJXUm5LTnMzczM5Kzd1cjl1SDZpNmdTQzNOcmx3eWEwcUFQdkFGbFViIENIdDVLU2tUSXRqQ1JjV3lPWUxiSTRWdXQyQW44RHg1d1lSa2EwR2dtTXRUdGQvVUFEOHVvSURwaklzYjRSajIxaEgrYkNrOTM2b2YgQjgvQTZFbGxmZGtYRUd0eGlhZGF4eHpqbzQvSVh1TjBSNUhNamlWb2VWVWJxclcwY09BbGRFc2ppMVRFMTVUWTJpcGJ0c2EyckhBTyBMNGlSTGc0ZW5VOXQ5YUhUQXUzaWlINlZnSmk3SldMOTNlMzg2dm9UQmg5ck9zd2k1bUt1bEI4WkNRRjN5YWxzSkhKWFhjRHVoeVVNIHRiYWJ6QmJyZGJXN0hEcDVnR3BKOURRYklSbG0wR2pjM2gyNXZoK0luNEFBNUF3UHgybjEyTE1vbHpHRDJvTlNaTTJKRnIyb0QrbDUgZlliNFBYR3cyUEVRMC9qV3B1bjZUeHRIbGFsaVFndzFwbkZsQmVCM3dZSzN2ZENmVUxZQUFBMzFVVE5OOWwxM1E0WVZUSnZTdkFyRiBKWG1ocVpMQXN5SXJuclkxQlJhM3A4UEQrdVE4Ykk4ZWRCUXlheHVoUGZEbG91eHo5VUg5VDU4K3ZlemtRRU9vZTJqQ0x1YmNoeDNYIFBjdDd0cHdjY2NQTFgwMTRkdEN5dFNUSFQxQTRJdlR2bnNic2QrRnFURHVONU1PQ09VcFJaMDVXbGdXUTdWZXlhcXRPdWExRGwrT3kgTGJnVkRpM040UFU1TVRvUWVaYXVLR1BaSitreHc5c0NYZVFtajRQQm8yRWVHQUFmd3c1QmowNWN1dDY3Rldoa21SYkkydTArNGFsYiBKRjJPeS9GaHZsdE1KNjBGdXY1bDhHSENiRCtZcXZsb3FUVXlEZFFvdFdxQVlqMmliQ0hPQW9MOXNDL3o2b3E2dUNPVTR1dGxITnFVIG9lVWt4aTI1R0svRUxkakp0Z2kxZUg3dm41VURqMXVDZUh3RG5hQjU3b0RCbUx0U1lUOS9QN0J4OC8wNEVkMElWQkRNTGNYRkpzSXAgVDVQdlFOcjNVQVdmR2dYOHFLWVQ5bnRTdG9hZ3crL0lFTlYyeXMzd3F6REhqZTByOFJZSC93RFBmeWtUQnZxSW9jM2FFUnV6U3hLNyBTSmpzeXU4cng1NFpTWW9xOFpHMkZpMXhGbVJGZHFUVHVwV1QvbHhzZlZqcStkN0ZPK3hqdCsxaTNRZmVGZ1I3THA5MmNsZEpwT3NXIGhWVWtnaFhxZXdMeTNVcUdrV05YS0hhRDdNaHVGd1BqQnZrQnZ0cXVmdkt2cGZaeVlQdWliN3V2ejk5K0FlMkViSHE5MDB0T0ZiMDIgbTJFTmZOWkZlc3ZkQUMrYWNHeGJ1MmtYZXI3UW9jamczaUU5Ym1WaHlxZllDbWNNRXhoUkRaa1k0bEc5TzV4ZzgrQXhBYit2czVzSCBqNnpNTXNxb0xDTnBHYkRHbGsremxXUXB2a1dYRTVRdHVDZTRNaTJ5V29QN2N0dGZ2dXpzeE1XaGpOOHd4Q0hBQ0R6NUE5ei9BRUVyIGRMbEtXc1RtOVZMZEFoODFicHhJUjdPUTFlV1lpeFd6YTJSZmg0Mm1IWmEySHJnSnRId0hoa1dVWW9MUm1aNE5wT3g4KzM4K0FRZC8gNklQSTZSa04yY1lzNDljNVN3Um5lVytNZHkwNTVBWWNYWW9wR1NwWmJtVzl3ZzVSdFlYSEY2R1ZVMlhhS05kZGpoTVQ4cVE3UU1yTyBqVzA3UGpKL0Q4MVlVT3d1RW9XMkFYeGJyOWNNVVBEMlp3WkFjOVFQUEJnbU1hR2p1K2ovQUl1MkFCOS9QLzVrbGdMWThwSHBPeHRPIFZ6V1Jka1V4VXJZdjhrWUs5Y08xNlFVK1lSdzdWdzBPNEdCa0JnYmdyU0J0Z3pqSG5Fbi9BSDhmUWZQK2ZGY3l5SFFvQ1czZk5HalkgZExCNktVMGQyUTR6RXRnVU5oUGNrVDA5a0RtR1NZUWh3VU9CZE5PcmF5TUYrVEJtemZCejc4LzdBZ2dIN3FOdHlHS0RWZ0hiUmZDWiBrb3hKMi90NjhXRTRKcDZzckdGYmZNRExkd09ESnh2Z2JBK0t2QmhsWGxIamcvTmdpT2cvMkFBZzRkQ2dZYk9ZeGRjbHd1d2tZTVpqIFM2RjQ5MW1oZCtCWFJsbFpKb2tqZWRKTURuR1pRN1NjNXVzTWNzZVdmYnd6bkRFQUd5ZW1kV2RnWFpmcUZaeVlMSkVnS2FaTnFhL2EgajVTOUk5MmsxZHFYVDZoN090NmtERDRudjZITzdQbndkMk0zZENoMFpaQjJqVnh0SDJEZ1ArcndEcGJzbGdRMDFIaDkwTTZTTlF3NSB1WEdKTzFmMmE0eXJHMUhpNjUxVUo5a1RMSU1VUHcreVVkRDVhRFcxbG1LVTJ6TTI5aE9EbjE4QmJwOStYejlSZE03dkFVc0dvNzRkIHdOOEV0SlpROVRqQ3dXY3lWZjVRbzd2bFh3MTliTVVQTVQwUGtnTkRZTGFDR09UcTZ2V2ZoRGZCN2RQbjkvOEFQSCtnL1QyMlFuZEggem1QS3JIVHdOaW1JMTNVdVREdjY4eUFTbDg2YzdrN1gyUWgzd252aGdoTWd3TEFuSTRlOGxsWHRBbmI3eGFQTm5qWU9QKzN1QTZXRiBpWXhTTzJ5aVRSaDRZSmJqMDhuT1NCY1Z2NDU0TFVUWFZxcnMwcTNESmhDL3Y1TDVCUDhBaHgvVncva241WGJpVjVlN0hBMjIwMWFIIEtQMUIxM2k5aEVWdXNBUHVrZklIT1hvYjlMZFQ4Z2ptMWhhZXZWT3lBbHMraDN0QTJGeHozRE95azlwZFRlVExKbytXc3hsNWZWRWcgZXJMQW5Pdko2eWIwcWZTKzJ6cXVaTkVlc1BIMEQ4bUpraENGSzNSSlRVY3RBV0kvb3JrckxqTFBycHB1aEJKY1J4UjJrTDZ4SWt0OCBNUkRGUVJFakp4TVFDa3FWblRjUDdadjBkVVRGZnBuYjhwYVluK1Q1RkgvL0FIQ0Ivd0NudFROcEE3TUF6UHZBWkUwUzFiVFZaNXF6IFhINDZ2L0lPWEpZMm4vSnN1N3VOekpka0pMdkFKQjJDMkRGUzZsc2JHUExZOFBNRDd3NGNrcm4rUW5MWk84dnhtTSs3TzZNZnh0M0Qgd0FBQWZoMDhYWGVuTzQycERNcDVLSFY3R011T1J0c2hUbUN4YVFydmllNEIrWVhZSFcxN2xWU0VLbGVIQ29GbDhWeWFNZDRUN29QMyA1QisvQU9nblRtNjUrcERCbEdRYU5DRjdmYWdrdEhTYXhxK3ZvY3BXdUp5aWw3QU1mcXRzbGdmMCtwVlh4bjMzTm12QkoyVGdOdTR2IDJHQ0R3RUF6ck1YMXRqT0VsSnUwNjNHdDVxcWJZYXYxRlRMQVhvY29weWl1YTM0M0RNUHQyQnlGMkk4QzBMYTNnWnhmYkNYaEVtcXogNThCYnZBTGRRVUVCVWN1dzJBYkpCU3RKN2R0RkkyMHh0c3F0KzdKUWZ4ZlBUWkFzclpPVXpQdVp6RkhseW9GQ0tGTHJtOGkxWFFxeiAwcFE3Um1UeDVLeXpOWXhodHE1Q1M3N3huU0tubU9VVmhxOHFoam9hSE1ocC9NRnFjaDNCV24rcjdSeVlud25IRUhzQUErd1luL0FCIE5nRU5WR2tHeERGUUpyaFVxZW1rbEt3cXZhajJuOHNuZ2VicTl5NEw0ZTFIQVBaRVBFUGcyL0Fhbnp4WXQ1V2Z3bTdnd0gzNEIrcDcgcDJWbkQweHVTbVNzYlc1Y0J2T0RWN1Z6dTBMY3loeTNQSEt3anRTcDQra21SRGZIekFneWNEK2YycldTZW5PcnlmQmtpMGNUbjBGKyA4K2ZBZExGNHFjTzVVdWhob3RoTWpWRm1HNGlRSFExK3B3MUlnWmFIWTFQVmZEY0RPbTh4dUMyMWdTQUd4MlFaV1pSWEovaE0yN0F6IC9nTVBiRGY0VEZxSkhWODhGeGJGMHlnZVFjUnVEYjZiVWJWUGExSmdIOHJsM0xJbGpRSXBUMUVRdUE5eUtqY05ISW1Jd3k0SWJKcnggYmp0NmN3Y1dqejh0YjB5TWVvcFNaREpJYXA1OXpYSzQ3eEYwKzFrQlE2clg2M3F0YXQ4eFpEQk1PY3dVb0tHOGpOclJtWkhDYko1LyBIM1BuMTgvMGJLY05rWEt6dHJ1Tm5NbERxK1RHczE0R2dLZmlCejBWM2xGSERtRlYwbXl6SzNYL0FPUVg2V25NaE5HRkZMZlpuaDJOIDhIOEJ3RStoWW9PS1RyZG9GbWN2U2pYSnFod2xuWlZiM0hiS2REcVpmK0dCbFh5THRCOElMYjV5U2FIWHcrL09FQTRoOFp1Ulhac1QgbmhBUURnR1AvdEFrQ0hLR1JXcThvU1FMZ1BYQkpzMUhNS3lPWHVBREtwd29yOGdtTFllWlZmTUE5VjJYYUNpcTdZeks0dmN6bkNQNyAvd0RRZnNIVUt5b3hrVXVlV0xxOGVBWnhMSkU3anVmM2JTbkd1emdXM25wamQ0UldaR2RhQmRHeXRHaWdralFyUXJiM1dVTmtjL05MIDQ2TUkvcjAyTGhTWUdhS3h0RzdBUzBnMkVqa2dLZkRtb2xvTVZpbEZ0LzJnUE0vbzZkQXJDZmd5SXdzcGo5NDg1anYvQUIvMlBJT3cgTEVmTXJoSXZ0Vmk2bFdXS0EwdE8wV0xYMTF1T20rSHY4cUlCNEdQTUp6SW5vVXZGanRUR3JwOEpQdzNSOGVScndiM3M1ejczd2Z2WiBCUUdjam5IaGpSd0x1K0RZMXpKcUdTTGN3QXNFUU9teFplL0IwQ1dZY0REZzRPQWI4Z0hvRU1Zc3E2SFVETWJkcXVkdnY0RFlBS0NmIDMrU1g4dWw0dE5ubHhEckZrZkxXTWFrSWpRWWFiZjhBbVcwQlUwTkRNTUVOd3JlWVlUK0hOVzN6d2tQYk9Mdkl3RzdXaWIzL0FIOCsgQXFMWU5nWklHeVhNWXVYUkdTN01NNG9BNVVNdHV5YXBjc2h5dGNyV080MElNS290eXExYlc1dFlFclZ0L2lIY0Nhc0dqWXBBNmR3OCBOTnRUTzA4VlVrNlM3Q3luWWF2SzRHNEx3MmM5cHpYbWo1aEFPNFdSTUQyUlg4eWNwT0NHRDdadk8xckx6OTJOZ3dQNy92OEFpQTY3IEk0ZXhDaW5Yd0hOcmZIT256TFJ0aEgvaVE1RVlybTVidXVRQ3lMNjJIRG1KZ2NlaHRYRC9BSnlHc3ZOWHRBc1lEQ0pKc0dBMzgveUQgZitpU3lFZXY2clI4NWpGOGJWUUlFWVdJSG9jZGVoTkI0U0IyY2dZNUpEWlA5aHNHTUdZc2pGY29USjdJRWRnZVBnTmcrZzlidFJHWSBsVUVZZkdpeTd5U1VudmtiRW1NNDlWN0N5UGxTbHNQaDA4dHVDMmhtRnRQd1IrNEZsZzJURm1LRkdaR0JoRWszK3JCL1FQMzZDV0pnIEtDTmpVc1N4TFVrMjBGeVZZbEx5TjdsNVJYd3NXT1JaUm9WakF0MmNvNk9yN1Q0WjRVUVpZbjgwYkFDMkJ5VFFwbk1qd3IxZTJaeWwgY2poMmxyU3QrM29ld25DdDlQY09WYlM5WE1XdCtCc2hlWk5oN3hCbjJnQmVJYXlzdmdzbU5lRFpzSThjK2ZnSEg2aSsvTm9nbDEvbCBQaDVYU0xzSlZsV28wYXcyaFlUSlo5T1dtNGk5UGJSRlpPTjFBdDJvWWhqMXRWN3dYUzd3MW5sTzJNNk9rcEp2ZitQbnZ2d0RCK1JsIDZhaFVPZVFTUXhySmJYeFN5YlJpa0ZYT01LWVo4c2E0d0o2NENGanJaZ3h4QlAyTnV2QTlYTXhHV1ZmNk1jNFRWM2QwQUFQNytlQWQgUnhCc1I4NTh1Q3ZtaTVrQ3lLTW1EWWtmT3RTcDZjTVZLZVlYSUF0dUxKMkhobUUvaDdVMnA3YnMvSm54WHN6OTd1eWo5L2Z3SHNBdyBQdnl3OGpHS2FVcHBuTHJKc3lHS1dPU01VRUxia0xaWmMwQUZ4OEhQSVl0WXhJMG1KM1lvOFZhY0Ria1NRM2tpRzN4QXNXZWMrM2hhIDVEMU9yMTl5c3lzb0NraHhyenNGMkJ5MkI4b0hVQllVMFhLcklBbXJaOFBjRmJ1REluanc2UHVHeG9ZeDU1UnhnNGJDZWY4QUFBTi8gMkRwblZtOHI2Ymwyb2hubXEyblpvR3hyQ0hCMm02RjZZTEZyd0dKL3FRdGg2VCt5QXdOd2ZUK00yZ1U0TndtMGZmZjhGOEJ5QS9qMCBCdENHK050ZjM5bXVTcU5yRWVxMjFZWThaTUVTMW9vZUxYS0xEajYzTUdFOThXMDlrL2lIVDYwdFNId1pEd0dMUE52WjQ0RC9BTk5nIDZZVlR2bVloc0E1SVY3SVNTVmw2YjF0aFlLOXBOZkVvWXNwL0ZBNWNmcE1PeU1vZXlLZlQxVjhyOVNhZzdOenhYR1cvK0U5UER4eUIgQWZ0L29Uckt5VFNOTWhsM1VFaXh5ZlVORkJxMGtobWhrWlMwRUtScDdRdGlJV1d1dTBEcTRwWTBrMHlnN0dvTzQwZVF5ajJ6aFR2SiB4aG44REJ2QnM4WDFYdHM0WDhnd3VIc215RTl5bVJaYS93RGtDSXl4VmRoaW9ZZjhWT0h6QzdoREJ2bjlTa3lmRnlmT0hiemorQUFBIEFCL0ZCUDRScGdIWWdaVEQxb3VYOGJQWlI2NHhQNFlEMTZ0eFQ2UmFCU0d2NDR1Q2ZEbUVGdTFGSzhQbkJ4Z3hEd1dkOFNUWnM0QUEgZm9mZnQveGFqQW51R1V0c29zRE1rMWptZ1NWWk9EaGFsa084ekdtNm5QUlE2K3lVL0R1RFo4UGcxTDV4OEoxblRiUVUyUFpUWngrUSBmOXY3L3dCWXZtS3ZjbURPZ1Q2VE5oOWhDZTFZbnpERE1zWThXQWxBL0EyOURoNmtJWStaOC9ZWVZiL3RZeW9PYmYyRFlNY1AzL29BIE1JbkpkM3ZDc3plTkVlUDliNS8wSDQ2emdCSlFZRWVUeGhtdTF1VVZ1dVhxcUYrZVc2VzZ1RHNqTktKNTY3citzaTFCbG5mRVQzd0MgcnNNMVhmQkl0OE1MOHhibU9ESVlIeklNRGZtb1B3YTVHam5KdzJFZGpuN0J6NEF2OUcxOER5bFFaazJ1ZFNWU3YxWTZoMVVKYkZvTSBtVHFRZHc3a2V0Z0M1UXVIcm5hdTRGdGZNSTU0Z0JPZTM1UVJrWTQ3T3dSNDRDZkFmUWVmZEo5YmVGZTZZL3hiQnRSMnVDTFc2MkpYIGpLM1c5T09EUlVyWXJ0REpYK0szVDljTWlmVHpoY1ZENHRxUGh1ZG90Q016NzJiNE9mUVdBLzRCQlA4QVZ0Sy9XODNXUllpU3VXckQgazJkekJrcjF3N1ZwOXNQcFJvRTFmRU1zRzhMYkphajVZTXo4Z05xUDdMT2t0OGVpWVBlemV3b1BJRUYrUGdINC9ubGJaMU1JdEk2aCBUM3ZpSU9mQXBUdVovcmJ4S0EyeFlVK05kelRCa2t6bWtsN2dxNWJlbk5mOFFjaHM3WE8zNzk0TTliVzNUcVJEdEhNREs2ZnhLd2hwIGlWTWswakhNT0RoV1h4WHpUMFVsbUU5a01mUkZ0Z3RRNEFyL0FBT0xhei9ReE01YUp6L3J3SGZ6L1JXUHNSTGdDME9la0dGTE4rR1MgRXgwbkpYMVNaS1YrZWNrc0JiTUdKbkpCOHp0S1F4blkvd0JMNCt3UkpDYytYOS8vQUg4L2kydFJGVHpJcFJQdVFNa3lRS2JxUVFMWSB0Q2pUMW9PNkhLaTZqNnZWdy9NQTVoYk1KN0FodFNIY0UrajVpTU05bVptQm0vQjcrZ2dINEJ6N2dOUzhzd3dXTXloOWhEeG1xQTRFIGhLK3Rza2dzWWx0RlRpMzJIWDRjd0hjTm5YMlE1Wlk5UzdrWVZBMFdnTVdjUE9IQUd3Y0JQZ09mSDlhakNJWEtqSWVXZHp0bE1hb1YgM1psclB5dFVQTm1rTXVVaDdOdTNqVHpsZVpJeThMNHJ4OC9rZGRoaVJsaHFQbUZBMWtCRWwzcC9WRnA3cThQZVZncjBPK0lxblE1VCBjSEJEWkZ2U1hOVDJUWVdBQzg3WWl2bG9qQm14OWt6Z0dvZ0hkMUJmdjF1QXZqNWlraDNOYUN1aDBtbmdkYVMzRTBqMzlXTnIvTWxSIFMxM0s3Z3dXUkRaTkdhZWgvTVZlMENsQnNnbVRWME96TUVjM3NsSG53RnU3QS9BTU1YNnRMWXBsSHgwVzdNZlVOU2FzNm41S21ydzEgdEhweERxK3huZW00dTRXUUg1Z3R3cXYyT0JWNEVIZ01XU2o0ekxQTnYzOC9zQUErQXczODhyUExtR1dET01ncGtreFplVEdzSzJBTyBsWkdZV1N4dFFTOVVya0hzQndNSitvUzFGdGg3cVQzQ2gxWC9BRmtLTFg1c3dkamlDQVAwRy9QeDQrZjZ6UHpnVThRc3VFWC9BTGlrIEdXUFAvTDJVMlBPUTdRZkxBaFh0enpmaGl1T09NYlVJM0pzM3VVNUswTWNDYk9WQ3VrMG93YWZqOU0yL1ZUSTJubkVtYmlTS09mR0MgV0hxWW8yN0ZNWVBtVThuMnBqWDRleHEwd1VtcGJKNFhJcnN3d0hWeHZmRDRCL2ZnQURZT25tbG5BNTU0dDg4QlpLdWZMTHNsbGlMOSBrVjZRK1lLY3BjV1ZaRkg4RE1HRnRiVDJTblNEQUJlTzcrNlBtbm9ud243d0FQbno2Q2dnUFkra3pqWWx0cklOQXVkZWpiZ3hjSkx1IDhXcFc3UkVjSHlMTGFLdkRzQmlZWWhzakppeVBGOFdCZE1Ga3AvZ2RvVm5aanh2ZjlmZlFhaUFjQkFNNkhIZGJXMUdVbmVkeU8xa1cgUkttVnVrQjJUSnI5aHJlME5YMVpTcXZRMkFQTWNMZ3F1WUFwUFlXRGZGc21VUW54bS9lNnVlUDA3dW5rQUFmd2ttNHJac3FTSUljYyA1RkRTYmtaQmpSbXNaYnR2Um9GTUR3K1hiSS9iZ081MG1Eckd2TWtzRTlYS2kvTzN0Y3BmT1k3bCtXMURwYzRHcCtZQmdRMUpiMkYvIFlUQmgyVitTQVNrczhWRGo1akpNcCtHSElCemlIOER0dFppemZEUVRzekNyclJPZTN1L1ZFZlBnTi9XSXRmTU5wWEJjaWdYWjh1UUMgY2lNRmJwSWZIK0lKcExJY1hUZW4zQlE2MkhUM3hmaG5KL0xVZmM5cmFMTWVYaEoyTUhVWGQzbngvWUFQWHlZOFVmWlpCSkZybW1OcyB5VzFrcmRncmU0S0gwMzYwYklsWEpxRUtXTW4xOUQyaVpNc2hQVG9MNVlQenBqTXMyZ2gwYjduQWRYZUFmai9hTGdMOTF2QU1tWlBZIEtyUEZPZnJjQzhtM1o0ZkgyeUhWOWpjeGZIeHhNY3dtWENISUljNUNzQ0J6RGJDZ3UzMW1xMGpmQVo5K1B2ejhBMkJCNkZKdTBzWFQgQm5aMkx0dDRXRllnREZzcWpXUjc3ZUl3dGQxaWJIN2Mvd0R3anlxKzFiN3hXVWpSeGovNWsvYlJnY3k4SHhjc1RPemMxUFd3TUJEciBkM2p3NzRIOHdmUGlXaHEwNGZjTlY4OGZBNit5SThCd24xeTRNeU1yL2pQNlRhUDRpOXNINzN0M284SVNGTlNzQ3Q1Nmt5VnZaelFlIENXRnAvV3pGb1VqY0VVcDJiY3R3cC9UR1lRNW5lQ0hBNGY4QUFjRm16T0w4bVIwbEpDZnI5K3YxQlFRQ0NzY3QwZUsrcGJCY0RYWWIgcDlJeWF1ZDYvY003aEVJb0J4aXhiVXdtWEJ5VFp4NWhxVWJndHExUTlRTExRK0xQT0VrSTcrZlAvUWVBOVdQUjYzYmF2VDJXVWlaTiBqeTFhR2dpS1AvNGxkWkYyMFFuT2RmUklyZU9UNXRWaUxzZmNMVFZiS1FIeHJNV2NMVnhWWm93VjIyTUZnQmZxajUrLzg4d1lBSXR4IG85bU5wWm9sQ1Z0Q2ZHS09QZVZ1NjVKdHUwZ3JqdVhkUEJJckx1UHAweG1uMjQyalVrNTRSaVZwVVVpaDQzV1c3Tmxib2VBaUxkZk0geXBNdDhhRDJTTk1UdzZUeWdsVzhnVE1GdVZoSHZoNEdJZW9Sa2NJZFhod2MrajMyNHRyN3lLNk5aaHptenM4YkFlUDFHL2RkbE41ZyArd2FmczVvelh5MFNTaUI3SXNGa0lkZmljQ2xTNmNLNWFadnpLZkR6RTlreDRPK041NUhoTEpQbml5OHZHeUpJUGZ6L0FQWUFIUlZlIEMvRE12bEF5OHJPcVVPMElZMFRSOE1QYkV1N0doRHNJV0JaSEFQZGtPR3RzaS9EdFRTMFBnVGtPekxmdmhEMnpaS3U0T2ZBUHo4ZlAgL1FjVnVMUzdRVnpEc3JxK2NrNU5JMkVhTEk4d2JIczFES0liRkZya3l2OEFiZERaRUlQWUFlanp3ODlPcmZhNkhGNGZTZ21MeWZ3USBkLzMvQU9nbElRVlhFWlBHNmJnYWZma2lKOXM3eVlKbHQwY1V3WE12ZWE0OXhSYmFTVk1IRU1pTmptdVAxR0pXNFBKd3p5VzM3d3REIHRhN0U4WXlFdXZueXZBNlF0NmI3UHFBYlNhUVlyMGJZQmJnWUZzS1d6ZzQ4d21CM0NuMCtaQmdEMUpIbUxJeDhGMll6YklFNFBzQi8gd0hRZGNPb1NyMWVwODV5TXRWdEdNbkpVbDZ0eVdtOW9wemRCYlpGS3NnL1owOWtUdzYvMjRvY2dwS3EyVHN3VzBWbXNuRWcyRTU4QSBRZnZ4OSs2TnlsbVNPY0xabm5nUU83MTRTNC9UTFV2eFBpZ1Y5WEZoMCtZK1F3OHdQUE1RVkp3UXprTkc0R0xHSTJDVGFKczZBWDM1IEJQN0J6N3FYc3dXci9TV05jVDFLRzVaMVMxa2oyY3E0UktyVGFsWVhLTDNRbUIvaHAvenc0T2ZSNzREVDFuRGRIa1lEd2R0OC9WQ1AgUHdId0F4S3ptS09wbGFTeUJEemxKY2U0N0RqSEx0b2MvUFA0U3o5dWF0Q0VTczJtRjFrUVZ4SCt4eTU4Z2Y2RzR0Q0hkVnRsVm1CcyBZL04weTRNanZsWlp0bmdhcGJSMXlvTnJDMlRMaVJCQjJQUEY2ZVNVcXN5V1JPSkM1QjJlZWdlcktLRVdrdXk0R2NqS25SL1g2ZXM2IDhrSjFyTnR1UnhqT00wOFI4NGxGeUNnVmxtMUhEQnE2bFBKdzJZL0pEWitRR2JuSE5uNVdHU2p6bEdBSmx3WHUyaEJSV2hMeFNCWVAgcXdtWnFhblowbXBVN1k5V0ZSVFNydEE0cUN0QzkzbWdLdjU1TmVBZFptWThrZ2srU1l0THlmei9BTU4xWk1lTFc0RkJ1RTlEY0l5UyBHZkxJRXRHZHBYcGV3bnh5cEdJQnBJeGFDZTRUTFZmQTQ4UHFhUTYvclFIWkZaRXhmNU1CaEhhazNoQmZrRGZ3UGdFSEk5YjNRVVMyIHFLN21MQVd5aWVSUjNnYlc2ZmJCanMzY2NxVXRrQTh4a3RTdHc5b1RBZFp1RUdDSFJrV3J5ZEdzd1A4QWZRSG53SEFRSFJmTXkwTXkgdnVCNkxrM1lrNVc5bHRQRm5UQjh1SEZzWklsS3o0d2h3NmZjRU5rY0szVlo0K0JCTURHYitITm1aZ2VualpFZmZ6K1BJRC9zZmlPNyBGc0s2T1NlTEJtWDlxRVkrZjJGOXFUeEtFQkE2bXJHbEdPWXpLcnNpR1lUNGZlbXY5UEVIQW5iL0FMVm4vbWsvaUkvUWFDQVFlN3ZSIFhFMlpHQmVFcVpYZDhNNDQ3dlNnWXNPMi93Q1d6NUhwOUFReUJUbHRJM2NFckwxTzNjY214Nyt6dHJnQThtK2ttNFE2M2JZNWkycSsgempkcVNpU2tKejdJVGg3RE1GdmxaT1FGOFh6RElJWkpnZXJ3NnJaYS9QcDF4V1JoUm9KN0Z6WjIzL1lPZkg5L0FkV1Z6R0I4eVdDayB6UzVTZW04bFh6c2syd1lvM1J6Vit6aTZ2YkNpYitOb2RrYWtKZ2Rld2dnYkF1bjVneG1ReGZKZ2ZoUDMvRmZQN0FBNlgyWlQ3bzVPIGhLMmhhZUVtVWpra29oZ0MxVnZFTUZKVERYSjR3UVpZZU5rUTRaRFpBS2VwSTZlVHJQVG0rREVaSFNjVWs0QXhQdng4L2lBeDZHbzYgWEFERDY5UGNxZjYzelVLeUNvOXF6azlUbUZMYVNHaVVuL01NY2JRMFBlSVBiODk4eXMvb2JNVEI0ZlIyRC9Meit3YUdFVHFWWTNkYyAzS3REaS80cFk3dXg3cnFqVmMydEpIVmcyTGl2aFdpNXV2TzdCTDR2aWdQRFhmRkZZZUdEM0JQUThwcXZWSnJSMnNoaERtTEREcjBNIHFCN2NjYmNJZHd1QzNxRVpHQU9xd0xRVXAzQm5rb3JyT0hDZk5uOS81OC9IK3JVT2dla3pMcmYwQnR1MWJzNEt5RGF5WDZydUN3Vk8gSDhvVExWNjMreVdReVhXbjh3T05xL0FhakNOVUNzTFdWbDQxRCtjcUx6L2FJQjRDb21wUnN1d3lEb2VoeW1jdGdVM1RHN2ZJcjNUcSBvSkFlcnhiWlhNcUdQaVRIQXhNY0NFMTR4WDdNVlpqTldZc1d6YjRFNXRoOSt4d3gyRHJrcjlncThEWDlldmdzYlc5d1cwSE50a2RKIEdPRmV6R2lteE1VWDNRTU1sRDNBaHNqaFZiVSs0ODRNVm1qZDBPY3ZBVEdrK0FvUDlnQUFENjVBOXh5bVRDWjNSSVZ4eVBFc01qRW0geDhScXBGZUd2N2FKUUxieWdoTUkweloza3dxcUlBWEZyeXNnbXhRSGc1Y0hZYzRwcS84QWd1VmhJYklIdTdPUUt5RHd5YSs3N0RmQyA5cUNsT0MrSHArWk1obUNLMjFRTFFRemhoR0p2bUx6d1oxOXJVZnRnUDlvc01ENzg4MkIwZlR6Ulh1WFFVeU5wamJVbXR4Sy9RSUdqIDZ5aE9SUjN2aXBjUGhXbytQa05ESWZBM0NwVWRiWnFnRnE3TXRQQnU3S3VPUHdCL1lQOEF2MUo1aHhiTXgxVlNya0M3MTZtMlF5Yk8gWXF0WFhvY3F4bmNDNUIyQ3lMSWhoNnJEcHlIVmRsMGZ5cFByUGE2djhHN0JFa0dlOCtmUWQvdzZzSURxcXQ3NHdtVnpwVnY1MlE3USBKUmxPT25ybHNWT3lJUUNYVW90azVKTTFPVnZNM0R0eWhzQ2pjUmdtaks1UlpadnhjNzFYanNBQSsvYys2R01DYVJqSmdJUWgzRmtlIGtNQzBCQ1VydjhtbnlYRW4yTmxRRm5hTTRBKzJyUDU0VStQanhYbjU2clNQck14ZE9aV05MQVdyVE5WWUErRVlYak92OGdrUGlhS3MgSkR0cHdYM3lIRFc3Z1pDSEZYeGZVcDFWazFsbmFMTUdBK0VoTFU0Q2ZBTDUvd0FCZ1ZVZURIMVV3Wk5RVmZiUzNiY3BEMDhWbGJGNSBURStuRStVTFhnTFRNSHNpZk14RHNoRU9jUEQxTDZ5OHZndFpKMnA0WEhFK2dnRDZDQXhYd0hHMkVOU2VXR3psZEl5WDlrVnh2Y0Z3IFk3ckg2aEszZkUzbEc4V0RERHVDMmh3MTlQQnR0WVBtOGJaY20yRWtlN0RmT2NmQUFOZ0FBTVRCUWZMUnpudDFNeGROVkEyQ0JzNlAgOXFNNTd1aExEUXB5c0ZCZnF4UHRPeU1FVEFSZzIxZnA1ZUdONWVNVmNXc294eDJOWTRuenpCZ3dIOE1jR1RMS3F1SGhmQmF5ZEdpTyBObXhheVNSWGRFREVud2JyaTYzTXA4UXdkelFWZmI4aStTVzQ1SE5jMzFHM0xUWGFyUit0NXJTMUxkblNqMm9pNHlBM09wZHNUMmdXIFdSQmhnZVk0ZXQxWE1ZSWM2dENOYVdxeVBQRjBOWnhxdXJ2eXB2NER6NS9IZjVHbEhpUGJXV24xKzkweU5zN1NOUnR4MDViQjVJUjYgOU1hZ2RUNlJwOVRVK3dPQm9iNU1EL0VlSituK2xuakRnM3ZVQkxFSUR3OTBHK3o0RGtEQmcvamF1eVdJcFREMWZLU2V5V1FCTVhxcCBwOVMwYmFEWStLNmJxYUtORnFMNkc0R2RQYjRoTDZlajFvUW4zZ3VXWVR0Qjhlck1Sd25uTzBXd1lBTmcyQzBXb040UjdVdDJkRnF2IFIyemFXRmRjSFJBOWhCbGk0Mjl5aWVpMmF1TGpwY3pDMGsrblUzQ2VwdjZrcllQSzIwaTBoNk9uTHNDbmtMMnhQcjMvQUMrazlIVFAgR0dZN2JydXZwMmhHellJbjB5VEdZRmlsVVhFVWlTd3lXVmxSeXFNS1NVeEs3UU5qY0t3U2l2Zkg1QS95K29JMytmNDhmbklVb3NnVyByZ1ZPNEFOR1Z2SjB1MXlTYlZPd0RGU3A1YVpZdFhxWjYwSmFlK0xjd09aMjh4T29kd2dWd3QvYU9UYzQyUjJSOEQ2Q0FBOEIyQkJkIGt4MHNRV0RHM2RsV29rNVdveWpSdEkxZlV1blV4RFF3Tm5saGRvTXRmcDYzTVc1aWduekVkOElXWFRySU1abWkrQ1l5cTBrSmFQZ1AgUDlvdC93Q21PMlBrQjgwZURhdmZLZlVxTnQ1Mk5STFF5YlVYMnh2bEsxeGk0dnNuMGxqTU1XVGFBWUhROW92YnduczR0V3BwNXgzdCBKMlFDdjRua0hIOVQ4YVQwQVc1cENpS3pqYktTeXVDeFpkY2NucHF5S2dhMXhudHFJMDFnOURydFc1akhjTTJlNGJnZkF3SnBObFp4IHJ1c3ZOSTJpbEFzY0FHS0RZSHA5UjQ4bFk4bFdNaDQ5U0NKWnBIRVJ6SzF1YmF4elNYSFBhNHV6TFcyUUVhMngwSzM4b1pFbVNSQWogS3NuOFU2QUFFbkEzdFpHdUJsYmUzSGxRRU5URTljcnh2cS9OcmFrNFFHWTdjdlNiQ2psNGg0b3ZXMVE0ZGVaR1R0WTMwbXZzbHhjUCAxRDhiM01vVUpqQVJzSnFIdFRZUFBnT1FiRE8xZVBJRTdIU1JnZWpRdWRQdmU3RlBHenRNYlJjYmlocHBiZmpBK1p3TU9ZREQ0Z1N0IFNCQ0NZK2hsTUJadzJFNE8vQUQ0QUJ3SG53QnQvd0F2UE9KK1ZxV2Fyc3BOM0RyWW13RStaVSswVmU1YWo2SEtQbzh4TWh3b2FmenogWVNDaWM1eVRWMmpqUENUYnQ0QUFmQUh6L3NBRDFzKzc1em1aY2FyVzFHSlo5TkdsUEJFTUFHQ1pZempZYlBTVDRRdzQxWk1Jelg2ZSBxSWRuMXFqR0dZVzAzSXRERG1GcEcwYysvWW9KOCt3Yys2cE5FMGNXcGJUcWcxRXYxR29pazFNMHNpUVR2dFpTbHBYZlpnV2w5T1BDIEdQN0kxeU5xWFZrYXJTalZUVGJVVHh4dnRMUU9sQTdsYWo5dHFBZVNRVHdLNjdIQ0hxRVVxVHZKN1VvZEoxTFdqczIyRm9uZHRPb2QgZ1F6MFMyTUJiaDNnbVdwaFpNd2dIZU1XRUNEaDRvejRUclBFR0Zkalg1ZXFNQUE1QmhpQXJhRXVmVkhURmYyL2pVMU1xU0hGMUFxYiBhZ054SWNxUkUxeWh4aGIwU3Q0eE1xd1BNWUZ0cWd1RmFOQWhuM1MwTWVjNGNKT0lPSUREa0NBZ1luN2JPQ2VwMlcrR01MTG8xU0w2IGxvZG8zSklzNWJqNmNBOVMyTXdwcjdNN3dPQzNaRU9aL3FXUGdRWHdveksvR1JsVjZoK3laeEJmdkFuOGQvNlNkVDZzTXpLdml0ME4gU1E3SW1WZmFoR0pHeWFyVjJGd1Y3bGJBSUdHUEQyUXRzaUV0cDVqdExhQUgvYTdSVUJQaExzaytBOXovQUQ0K2Z4YXNFajZhV1BXRiBOWkxMTThnalNNNmZDTnNjWVN3ZWJJcnpUa0xkOHFQbUY0dnFjOUk0aVQ2WklGWXlmVWd5S2UrYXNZc011Mms3dVJlWFhIWDFWMG5aIGRWcDlOdm1udVNraTRkNmlYQ3d0VkE5czd4dEZUcTR0UGNIQ1p2RkpwNitZZUR3K2VjY0JuS09UYjRFcEwyUDcrZkFjQjMvb2tPRHogSVpMVzVUdldNa2E1TlNBa1YvVXJzcnNLRUxxL2ZrTjhJVkJkbUZrSWZIMlRsdndHcFBXZUxQZ3daaWt1M244Zit3WWRXRU1ORjh0RyBXZXVtdVVNSlNjQ3E3anFkb21CNUZEYldCc0xWQUJNTCtFUXhEVDJUK1JmSEMyZ2ZCaGd0WFJsbmUvOEFmd0FBZ3IrR0IvR3FOc1BrIGh0T01qUllNdzJldTRQSmQ3WXVET1lGTXhzSlp4VjdVSVRIQ1paQzI0RDVqeFdsUDdHeWNHN043bWo4SU40L1gvd0N2ejc3MFZOSUMgVXpUVDhOdytFaXlOV2J5UjRtdHdCY1JrYXhheWZpaklCNm1mZkppQ2NmQ1JSd3h4b1JaOXVMRzc1REVWMjJaanVBUHpRNTVTU0s5cSBVUG1wNUt2U0ZiclptV1lhSEs0NG9HR1FEc2o1dkNHUFQwZlZMWUNIT21jbEZ0SlRZM1oyU1FnQkJ3UWQvd0RQZ09OWXNCc2dXd2huIGtPd3RoVWdNbXB6THRuQm1Ec2pLcHg4YU1TQ2ZEUkxndXladzlXQTQ3NHlNM2VRVndYaEtTazJwMmk1OTREWUVFd1pEaHl4bDgrN3EgNEVJaHZoaHRpV1E0RFpERUhpZ2ZsRkdSZlQzQ1pNb2Q4WU44YmF2Z1FhM0dET0w5ekFadEpkanFEZ2ZQN0I0RHBidURBcjVNd1BhRSByTzdNTGpJeU80ZFBNVmZMRHZpdlEyb3VwWHo1Z2RiK0ZlOW9QbnVRZkRpZU0vb1pHcXQyZGplTDhCL1huMndQeVdDdkUwWU41b1VRIDF5SjJ3MlNCZjZmNUhQRjlNVVNCa21rZ2ZBNmxZM0tIT2tVVXl0UVhpVzFJUDI0ZUc2bUVjaFQ2U1lXNldNcXEzblJja2JjWWVIWVMgKzdwNHVWTWxjRFlJYTJHbHpHUmdaSzVVazlEdFRBWU1LRkt6cUFIK0xqZ0RIZnZBQUYvb2tydVErSWN4cWJhTVNTVkJabzF0WWFYeSBGdU9rSjR0b3JJOVhMSjk4L2g3WkRDK24zRWV0RkRlR1N6S3phYms0eWNxNElFT0h3RnVnY2FpN1ExRjBWWlkvVVFaeGRnTzVWS3F0IEZidS9jR1pucjZSOFcwV3dDTE1NQzNaQzNaRU80Q0V6ZnRIOVN6akZtRTFmVG04b3lPYlNUZkFlN3RSZmZnSFBsanZpMkJWeHVWQVogTElzS3hxckNMMmtlMUVPdjBsd0tGTlFtMWgyQzROUGVvU2s2NFczQmtPSHEvcGFkVzZ6MzQ0TlpuTmpZUHovQVVId0hQNDJaVmthUCBjY3V5SUxBNVRHemVMZWNoeFg3czN3c0xIR3dsOWxvajl2RWdMcWUxSkw3SytUZzJYSGl1VENwRGxYaG5BQ201dFAzWkR1bEo1RGNBIGVHd0x5MmV0RjNya1d5TDhPdDZncE8xRSt3WWNHMjdRYlZWOFppZlBGbW9BZk51Y0g4RUVCYnArb2tKQzZGYnN5dXpaQ1ovaW5wSUUgRGFrbjVEWFRQSGxzQytNTFFyOXIwT0doMXUrQnlGa284L1ZoVXYxbTN4WlNzM2tHRVNlY1c3L3Y1QjJFK242L3NUYXF5VDVUdnVUcyBCbUpCWmZxeGJrV3d5QzVTKzVTZ3cvQ24zeDhER0NFeFZ0b2hROWpibjcxZnVhUFZ3VDkvUWJkQUgvQUg1Nm9paUdGSHNoNnBhM1FMIGFxOVZreEhCUERzRm04OGZJYjRVV3g4eXlJYTJ5VU80YzRBdURiTzNONXEvblR6M1JxNUlSOWdmZ0h2aS9kT2ozR0tzMzlSRVNRanYgaWwyaVFvaWs3ZlRUTnFURTRaKzVzdUI3RXBZeWlweGpISTJFaWUwZHk0bnpmL1k5ZGxtTkdvQVduMjFlYVJoVzREVFNTMDhXRUhkcSBsc2wzWkdnQzJLNzVhakF5Y0RXM3g4cCtZY2ZMQitEVDZNemNDSmtnYnNrOEhZRDlSSC9Qdit3R3R6cmRYbjNET3hBeTZDMVE2YnJVIEpNUTdjckFtTWpUYlNuRlBJYWdZTUdiVXVGT3I4UnFaQTRLYlVZV1hwbjV5dGRyL0FHeFA4Q1BZUDZEaWVmcDg3bDF2blhJQlc0c08geUZXdExDU1hmbmt3aDhOb3Rvc0JGekY5RFpKbEptSEJmV3dlNEFXcGs3djFmM2ZSa2MzYUtTYisvSVBQdC8zK3ROazZqSzd6YVRNViB5K1ZYZXJKcUhkbTJKSWRyK1gzZmRFMXNvZVV0dUZwcDRkYnhtVitIK2VRUTNmNk4vb2FjdEdycXU3dW9JQS9zQ0Q1OHBBanlLQ0h3IFQzQ05OMUpNc0tYY3RNWGpvNXBpMUYxTjg5UkpIVU9NMEZ5WVlUTmg3TWVaWWFheWM3VVo5cERHemx4WkNFbnRwNjBhSHI0WFUxYnggSjljU29nZXNheHNsaHRRbXI2ZytlWWR0a011eHc4R0JiQmdUNTVybURHZDhLVkNqWXBXb2ZGSUF2ejlpL1lBRDJCN2ptRDBkWGZHbyBYUEpWS0hiVUtycFkrc0xJamlYQk5RMkZYNGV3SjVpaDRmRC9BTHozUTJOa3Q4WVVLMlpzWnMzc2JCejQrZlA3L3dCYmJHU0czVG9jIHlobEJ0RkthazYwUFZNQWZ3SXhCVTdIbEoweTk3czArNHlxR3Z2Q3JJSkwxWVQ3ZWgxVXRZZXVtU251QzlWV21mVStud1hwOUhyNUIgNmNPMHJJc2pLaVcxTG9LMUFsa2FiM2E5VjVncVRPZUJWRWV6RGJRdWsyQ2ttU3lObW1KL3dJQkdBcXdubXpNSDNGWUJoTHM0UGlmZiBrSGY4VDc4ZlNTOERZUnBKbk1pQkJKSUZnWFM2ZThHUlZRUnhTTnZIQ05JMTNhTnVvakE2bUNUSzVtRG5hY2xqTEZFa2drbnhNY2JQIEVpYnBmYWVtWlJoWEM5NTZOc3lITWQ5TjU0QTJ3cTNwblVPcTJUTFh5VmtFRWVaWXhTSktjdHZEaHpCaVdZMmRIUFYvWmU4c3l6VFkgdjIzc0lFT2NmMkUvejVCUDlWdnNTdTVITkZXZUdyRmtocTU0YkV2QUM3RDZjdmxvVEY0RHB6bVZlWWNMaHV4UFF5QWNIdUh3Wm5iTiBvdVR6bkNhdU9WRWZBTDZEdjUvb3FTeGFXK0QzWGlXcWh0ckVvSFFMWlY2ZjQra0o1KzBMTmluNjNUNGI1U1ppcXc5Z09DcnVENVZiIElUeEYyZzhzMnlBemV3ZnFBOEJzRXcyWmxmcmxzS3RjcmcwbFdGcXc2VExKOWJvV25kZWZJclJxRVZ6eUd3NG9mZUNaYWpCODVENGwgYW1HS3p0ZTVnK2JHMGRCMkFBZjJCQjJBa1ZvR2ZDWEpGZlV1cWJtNWo2MjRSZExWN3dBTkgyWFhOQTVHK29kcFpJa2pkdHV4SDJ4biBDS0tNWXB6ai9IWjdqN2lQaXowcEdsUTVjWURCNXBWbGcxV3F6RFRRTW1WalExM1V3d0o2Q1dCTTVjUmtMdWJuNm1aNG0wNC9veTF1IEl1ejByMXlaQnBhUFZKUHJkd1VpTVFBeVFsMEZuUlBuMFhUZW9MT21uNW83WnppSWNiS21ZVisxYWRXYllzWmJLSWplZmlaSUJ0OVQgbUVtWmRlRVJnYVVKeU1pdDFEMFFsQVFOK0FjaFJmV1daRFU2Wm5TenFrUWxEcnRzcWNUSHNoc0t4R09XNHRoYXE2RmkrQlpveHA0RyBwbTBoWmpSWTduazhXYTJ6VjBUVm1ySXZteE1XU24yZzd1QkpEcjdVVUVzOWtBcVNRUHNoSlg2eUQxelhPc1ZucVZQSVE5UXR3V295IE9GZ0dMR0EzQTI0YllzdEJTczhkazFlOXF3R08vd0NKOEFBZitra3RyZG1OQXZPc3FvSFpiRDFmd0JodGlZZUhYSFpDdXJpUmF1aGsgRU5rbVlzaUc0TW50cUFiYVBjT01peGFNamQwZnZCOUJQKzNQVC9WelpoQTVkM1ljZlhKZ2t0bnM1MnJFT3hrbml3VEF0b0xSSEtHdiB3NkhmRnR3cXB3UXpsU2tMYXdUeWJ6Vi9Kbm5oS1NiQi9YOGJkeCtnMUZTZGtyY21CZUhZRFY1SWxrd0tmVzNkUG1hYVpDOEh0QnlpIE5BdVk0R05RaGl0MlJrWDN3RzJqK1ZKKzU3V0xLQTNid2I4Zy9xQSsvSDdqNVZsU0pGaGhlSm9pNDNNcnNNVTltM0l0REdUdnF6Mm4gb1pFYUFzSk40VE9qcEljWllQSVhFK3JHTThlZUY4WFJJNEhUNG82bzFNOGwxN2NsTjJRdHJjcFZzaFRxK3dqRmJpZCt0Q215bHRRNiAvTVRIdmpiNFBoM0ZnUFEzajNyUGEveXBzbUp5M2VRQU9BKzNVQ3QwSFpGZzFmYldWQWhqYzVTbS9MMVVXMVd4QmhEcThsZXJsWGNMIEFXNGU4V1J1QWRIdHNoUzBHWThreGR5N24rb1JIQUFENEQ5L1lBQ2xmRnVwODE0RHVkUzJSVytvU3djNGF2TU15azZuc0psRnlrZEQgUFVOOHhQdmlueTdnbm9menlDRzhZbEJsb1ZlalBOcWZkbmcvNEFBZjU5MTJPbHMzNVVGZ09HVVV5WFpxMHFuamJaVTdWcHF5TFlmSiBVVmVWMmxrVDNBUDh4a3dxNkg4QlA3NFErNzVRb1Q5M1ozcTU0QVZFZjJEbno5MVpTZkhIMDlSZXFSNmtUc2pnQlBZRXlPNjZmWXVVIGVkbmxjZVZzOExNcWw1WWM0V2lEaVhLUjUycnVSOFZFZTVYY3RON1IzR3V1MnI0ZXBTb0xFaDZqTEw0M3F1MDhMY1pUajJFTnNDd2wgc3BGdGhEY3FmSHVFTXhERWJodmtCZytEdGpNTGFDYXppa20rRGdQUG45LzJBQVVnMHBnWEUvT3RWTU1WY2s3OUg3WG5sc2V3aHlndCBzS1dNbmp6RnFCMXZqWkF4TzRmaXE3bVRxOG9UUmptTzluQUZRbndIMEg5ZXhQWk10RHI4UGx5WWRidFNiVDZrSllKaEpmc0t0NVZqIDA1Y25KR0NITUQyckRXMThQdjRBL080eXMyZ0xSdk4xY2I5OE9BK2Y4L0EwbVBwT3hoL3lxdmFyYWZKNTVTZDNBd25JN1k0VnpLNHUgTHRRK2gva2hraHA4T0MrRVR5cjcyWitUS2czcEo3cUlPd0FENTgrd1lIMkZWYU9RQ1BhUVBnMGF0Y2JZbGNTaTBOdXNpU0xhN0JzViAxY2JaT3JOSThycC9Hem4rT3lwYWg4NVVBZVJXTmM5Y1p4WFR4WlN0c3BObWNEZk01U2QxOEM0ZkwrTEVpQUQ2MndRN0lXNGMweGh6IG1Bbm9jRXh5YnRlelluSGRKU2Y2QlFYN3dBRHFlZkVjZ0xJRWx5ZllLVFlWZzFYVXRleDZUT2g0ajRlVjlRaXVMNUE0OTdFOVBaQ0QgaE9VckFQUEZrRXlSUW9zczFWN0liZUFBQUFmQUFQQUh5UU9ReTdHSDE2a0pvZGJ1Q2ZxUUpPN0JVcGkwSGV0NjVsYm9tc2hCalc2ciBNWHhNWDJSSVBENTljb2F3VHhhUGFxN1I3MlBIN0JzQi9ZT2cvTVUyUUN5V2RsS1JpU3RxVFVnTHl2TUpjM1QweHlMU2dNd2V0cmNPIHlRL2VCdzVhNFBpUE1XZVVDMFVwd253WUFBQVA3K0E2RXNaRlZFZEhjV3lCMk1lY2JWaTRPTGVhTml1Mmh6ejBjWVZLeHpGUEdYd2YgSDFJd2M0ejJtOGNnUTNIdUp4NTZaQy9nRGFPZVBtOEJFOFhXOUZMdDhPMjhPNkdlaXl5am1ZSHd6RmtRekVQNGM3ajlsMXl0OFoydiBqTzloUFBvTy9ud0Q5ajBIZzdjS2RyNjlpMjBOU2JDRjB5RVloK1NISUwxd1Z5ME1JR01IeE1WdjNVNWk0Qi94ZUI1SU1aeWd2akx3IGJ4Mk5CQWVmNkc3WXI5TGdLaEp0MDBzakl5SGdLU2tLN0kxV0FKVzN3OVdSU1ZaREFIcmNPWUR2bGdXb3FueDg4R252SXRYS0RPY2IgSnNaLzJQOEFuOWc2dEVRdHlzN1ZVeVVCb1Q3c3JIV2xNZjVjZUhmekJjWWUwTjJxK1VZSUo4TkRodmpnUE1WeStlNnJEMno3TldZSiBLU1RmUG41QmZ2N0IxbWVPSTdVMHQ2blptalFTUTkzMHQ2VTZZcElQbU5NUTdUV1BPT0E5M1dqYzFNTWV3Z2ppV2YxMGgxRVVTN2lQIFdMTEtrYVNHZ0RsdXRMV1M0WWd0a2pWZEh6V09uNGFHbWdXVFZGcUREMmpFNHJZVjRXRmlLb2lKUThXWVBaSnRKbUszZlBoMGVCSHQgMVZvYU16Rkt2WmhuZEVKYU9IMzQrL2VBQWRROVpuRjlqZUh4b3REbG9GM3dyWXM0YWI3Q1QxNE9MeDdvSzhOZkRvYmhzOHpaNThENCBFQ0g5REYxbXpHKzF3Ukg0L3dBQmZUL24rZ092N2N2eXZuRFVWbTE4cVZjK1ZmWnlURVQ3T3F6dDZZYUlwYXVTa3hmcmZrbFYvRGNHIFNkM2hyVFp4bkEwTlpKdkFRSWtQR1AxL3dDRHNFd3BNRG9wWm1UTHRBa0VkcTVxdGtYaDlQM1l3TmxrSzhwSUZvYTM4T3E2ZmNERXggZm1RVHkrUFZmZDVReGZHVHB1MFRmZ1BvUFdwb25ENmhaVkNzWFNNU1hlYm1LS1dPTlZvQ09NYnBWRnliQ2liT1ZETHYyMExZd3RzbyBFL2lvbjJteWNqWGlxNXFqMXgzQlFkbTJOWDkyR2FnVHdqSUJHMXVKNzVXRklFMXUwSnJaVjU1UTVKRXNpWnZDL3dCeGdOb1R6dTVMIE5vWEpVQ3o0UUljMzdmei9BUGwwcFZQaStWWkJKalNFTTVEbm9jWVRIU1NROTNjSEtWV1N1VWlXQVlEcmZjaXlGOHVjc3VuMUxaOFIgbE5GQ2ZCelp0SkI3QjUvZi9BWExxT3pCN2t2aDgxamhqVU92czZ5Qk5mbjNBZTJkK0FObXVVWGtEZ1ltYk95RHc3VlArZWNEN1p1ZyB4NTdYSEhaNDU5OWZQbjhPaEM5S3lmSW9PdlorYUhqS3RqSGlVci9HZGg4TVBLS01QMDhoRFpQbUdQcmNGdEh6MVZ3R2JvcnJETWNDIEpQN0F2LzJEZjdralppRWJ0dzhIemxrQjhjVldQNVBucFFrUlZEWlhsOEhpcXIvVzd2OEFYUUhWN0pianZrZmpsMkpaTjNhVmh0c0cgS3htV3hMaHRGdGZGVGVIOXlLVHF1RVljRE93ODdnc2pNOGs2djJ3NXdsSkI0UHlEdjUvcGtNRndXWWtBOG0wS3FjSXcxakxvQ1FQZiBJY2VzcklzWlgzVzJrOGduL0RjR09Zd1RKd0Z3QTJOeVlaOUc4Sit2Ny93SSsvY0JGUTZtajVTL2t3TW1zZVNYZERXM2NQbjV4Q3dvIGJsWE5ncTdTeUQ0WWV5T0g3aDNVNWhzYmdUNHVMV1NleWVjLzM5N245Z2pheTA5NWx0V3huVkpLSlNWVXFoYnNIZGx0WGlURllXVzQgdXlYQnlReGh2RmdHQWJhd1ZLcWg5c2FWZEdKL1NRZ1Bmd0dHL3dENjRUQlJSZDhVSGJuVjRSaWhHbFdMeHR1YkZqaXVPU2NYa0dDUyBQSlJWV1M3azQzSEJ5N2MremlqV0k1K1JEanRVQ3ZLek1rWG0xV2s1T2FZQ1Y3WUtxMVI1Y3dDVUxsSExoNGVaekV3NEowUDZlQmExIHNadXZPZUQvQUVrSGkvZnYrd1AzVGExY0k5OEMzQ21WZG9kcXVwbTJxOXE0c0hmQnRIcnpJZUtKRVhrbmVBTytHSWNQNGM1U1lBSU0gT01laFRRTWVYZzJiOC80RkIyQUFBNkNEaERNcVZQbUJVMzQxaFJiQ0lpcUhha2xIcEdHVUEyRlhNVlBjTElaSm1ENVpIellLSFg2ayBjTUk2eStVM1VBeXF3dXliQnY0QS93RG9mNm5WWlNwVlNRRkdXcDFBeExoUFBTNGRnTjF0V2UxT05uNDJEWndzTFBNVld4MWJqakJpIDJLRFVWSUtISFdjMERTV0FCMndzL0gwK2tCNmZldjhBRmg5YTRwRkNLN2IyenhSMDV4bGZoYnhrNTJxc2ZhK1YvYmp5ejZmdWVBK2kgNWNtUVM5dUVuYVdqVVdjOEtGdDIrNGR2NUY2djlmS0VOUE11N3RnTjIyVHNBRzFCOHR3ZkZkM1Y5NFgxdTRKaGl0M0RrZ0toMkNwViBWRDNOOHRCWlJuZzJiQ0hINEFBMkRZQUNEMDRNc3U0QVJkMmNjbUpNeXZocnNwME83L2pJUEtpeENpYkRZRnN1dDF1NEIrWU5SNWZiIFZYN01MdEJHR0hBbnZzQjkrOS83QkF1RG9ycVZ3UTVWZkdFcXlFZ1BKNHVodUcwOXI1VVN4eGRiaitOdmkyWWh1RVBjUDBaQ2F5VXQgREhmUHUxcS9sNDhmUWNkLzZPMkJIcmRYcnNPWkZ2a2F2YjlmRnRTdGhWV3pFTU8wQVY1TnJuNmZpbm9jeGsrWjgrd0o3d3VFeVpRWCBjRHlqVmNraEFiOEEvb0UvZ2Y2aWxaSW9SSG1mcUVXU0V1bUdhV3RNQmt4NS9IeHgrUjBiTGlTaGFNdkZVVEtqWjF0Z0FNVFFyT3pRIG8xUjVQU0ltQ3g4Q0hUTEhYeTB0ekpXZEdsdURJTllLOVpIeVMySVlGUElJZW9TYkRtMnBpeUEvME9CeWJ5cnRISnZ4ZHdqNkNnbncgRy80ZE9EMTVZZGREM01oaTY5cVc3SldvUlMwdFBESk1JM0hXOFd4b21CUXd3TWt5WXRodzYrNE5VQndiVWNPTXJOcEtNeXk4RzZ1MiBOQmZyZEFQd0ErQTM5RzhzS1pzaHFUckh6cE5ZcVJpTExIbUxDZUZNdzBQaThVNGU0bU1QNXlHUVpKd0Z3UFg4SEpvM0tDYk5zbXlQIEFEZnovdHYvQUI5d1BDdnN6Wlc5aks3c2svNHBKU1NMWWFwaGlXeUljVVRkelJEL0FLYmNLM1c4WEN1Yk1ZQU9MSVRyTm9mR1paT08gd1R3Q0NmUDdBZjM4Qkg5TXI4M2ZjdmJJdFY3SDV4djU3VGREOGRMZFkzTFNlKzhVd0F1Ujg2R3lpL081ajNOZlpoN1d2aFZwZGJyOCBVdzdGS2xhclJaTEJ2TDhINW8yUFlWYnRFcXdoZkpLdnZpN0VPMUE0ZjNnenlHSU53Um1mRXJVQ3lqN0ppREFJUG4yRGZ3Qjl6V0JjIEJHbjZyVllFcXduYXNVak9DZnhBVnUrQjJFeEZUZUwzSXRrR1JQMUlHREZiL0R0VHVBMi9EV1ZuZEJndzU0UTV3SHdEOGZQb0hTQkkgTDc0a0EvZ0hsQmJNUUZ1TWtibVNWN1loeW9nbHlQV29RWEVPSGRsa1dRbmg1Mm1uZnB6SVQ4cDV3SUVTZVBnTi93RGJ6L1EyanNsRiB3SkZoQ3pNd0lSeW9ZMWVEaDJxcml6SmNvR0pGRjJSWDYzYWdlaCtZRDJTcTN4ZndPTW5PV2o3TnNuQ2ZQbnovQUNBK0FQZ0NtVm5rIExxcm5jcmVWRnl6eEl3dmxRdU52WEJ1L2l1aTdRZ1ZuUTdTSkhwNG5iYkcycDlva2IweGp4WmRrc053RHpUbXN5WXZxNGV5TEJNMUsga2h3Tm5KTlpFRlVEU0FpWUxxVVMrUkVNaXljd0R6RnRnRDJNQm8reTRQNWZGcTVQOG80V2p6N2Yvd0IvNEQwemlPWTZLVmtXZGFHViB4dVlCWlBsbUE5U3RGT0xhdlVvb1hiUzM4TlBRNGRiaG1EdU1CVDN4SFErTS9XV2M0RUNKSU5nUG53Ry9IMkJCNnArRHV3T2VxZkVOIHp4Sm1PUzNWMFN0OG13aUJkYlExZDNsaTRiZ0htTWhpYStFTUlNK3J1S3JhTndNb3o3R2toUDZBQUgwSHBrVklqNVFZV2VsSnFUVXQgaFZCcDJRWmZjR3g2M0xPRkl0QW5HMmc3ak5ROExIN3FEb2JWMi9QUERnc28xWDdac1p2aENNQVBvT3dQeC84QVFaRWNiY1JPNjQybyB0UWtnM1pIditObzB0YUFwOGhac0ZPUlhVamtpNWVOblNxK2xuRFlKRmRibTRRRzkzWmp5S3hKODlHMWZwYnBsWlMycEpxcTdPeDc1IE5aVitZTVNDd2RvcStKWE5OdytZVFlkd1RMSUlUUWJhbmdRVnFFMFpEUTJaR0J1eHZmTmdBYitmZndBQkJaQ3VuNmY1K29nOEJ0V3AgSzNtVjgxTWt2c09ucDRtR2U3ZTNKYUtlUXJlSFc1amdkZ1RJTS9CdU5zaXk4dEhrOWxDSERuYUxmd0FDb3RnUDB6VDE5c1k2RHptZyBEWnEzVmVxVVBxclhrZXpuRDRqSW0yMDdwcXVucjdoVzdJdHNrTndXL3dEMHZ0a0FOdWI0cjlzd2VJVFVQd0YvMzhBQVFmQU9hT25vIFcxMG5PZDJxU0hiZFJSSmhJSHBpdTJWV0xhQ3lhQmZDQWRic2l0NWsxd1EycUFRYlFiSXpEUHkvL3FpYkIvOEFmeitHd1RjbmN5SGQgMng2bW1FakdXQ1NYVWRneGFLV0JhakhtT1JYZk1GN1ZNUmtRZ1V4RXRBOHRwcDVtZDRmUWgwK3IyRjBybWJNK3BOSk9Va2l3QWoyMSBPY2hjQlVtUXNqTXBGd21MazhDU1czZUV5V0ZXOFA1Qzh0Z1NpUmFPTU5mVzVpMzh5R1FoZ3lEQldudzlzVjN4NVdYZ0pWenNjMy9IIGY5L0FkTzFwWkY5M0YxaTd2Z0VKTVAxNmt4S1B6b2Era2JwS3RpVWhtSEF3SHNkOFQ5d0QxejU3NWFNcytUSi8xdDU4QUFmdGdBQU8gaHBnbUN5ajRuL0FtSU14ZGEwbVhaQ3FrWFF2UTkwc0lXbThnMmU0UG1YeHZDcTJzRnRISEJtS2Urbm9tY0NHM1lIandIMzdCOU5vTyArV3BVdXB3UGZwbW53Wm11WWVwQjNrT0FFZTJmRjArcndHdXFyWCtlY3dtY2d0UnF0cGZVZ2I1V2ZGMWYrdHU2TlY4L1FRSGdENkVBIGpLaktIa1YzZFVlTjJXYVdIY2psMnd5bmFaYTlnb3NYcmtDdWJFUEhHa2NVWlNCQzZzZ2N4TlVjVkZZeHV3eVhqbWJaY0Q0QlU4VU4gbENENEx0QnA3UDRPOU11OWUwNXdjYTRVdlRyNVVwNTNwd290RUh4UFQ3VWgxdTRQa0VDUWZBZTJXKytYdzgvL0FBQURZUG9QUUhYYiBSWkdxV28wTTdBYWpic3g1TmtMeS9EMVJNRmhNZ0d4dFBZcUxNK1lHcmZ2WXlWKzRUaDlmei9tVyt6Q3lxTXpJNXp2WnYvNWRQMEh2ICt3Y2VYWGRxV2hRNWU2VmVHN2FWNkRITnJEVEFDNjhiQ1dvdEVOc1Vvb1lKN2l0c2tQYjVtbzFEcjg4MWR5MWhvS2RzL3dCa3h3dzMgL3dBQWZBZE1oenJCSEMzSXlPUXVnV1N2YXZXNDJtVVBrVkxhRzhBQlZaSHNFTWNZRHpJY3lZUG00cVRBZW5PSlA4RGs4VWVyVWwyTyBQMndQeDhBL1l2eCtLTkszcE5LaDFKelVTNmFmY3JDYlR4ejZhZGR0OVN1b1g2aU5wRXkxRzFRRitwZlViNmtDU1ZWY1JMak1BNENHIE9TWG1Oa0E5TjR4aTJMeHhRN25OcmFqcVB2a0pkTTk2eUlOYi93REVLZHF5ejFWU1QwdXpIQ2dXajFhZFJlb3UzMU1CREMyQnFCc2QgUmNiTmxTMnUzR1FwRjlDVTRXbUp6YzRGWTBldnd6RkNubTgrUkxZQzJkWGxVTlRHbU1jdGcvVmJkbnhLM1ppQU5lblFJdHBNVkdHMiBCeVZNRjRWQlZyTkg1TGhxQ3BraXRydGhCNFVkbERxa0tDN2hRV1hOell3bDQ5VVhIMHBxYm5TUFJYaElMVVVGTzRCWUZmR1A2UDhBIDEvWFRmbzlUZmVKeTMzZjNiVmVlUC9hL2ZqL1FmUEhsWVBSNzhWME93cFF2S0pIczB3RWxQQjZnVWQzbUFWZXNpbElHQ0JnUERtR1AgdmlPQkgxcGFqaCtMaWlPTTV2OEEyQUFmQVliQS9BTHBMYXZjbWJXYmdWTTFqR0cyRFNhalU3d0JzaW42Y3RTVnBmVTVTSDIvbUxSaSArRnUxUE9RT1c2YytNdk55RlZsNi9UOS85andBL3Y4QTBzVnNmTXNHWWh4UTFHb0Z6R2UyN0RUOVlvY2hoY1hQaENhcnNmYmRiVzRjIHhESDFXajJXd0tRUC9TOURacXpSelpzSWN0M3dCOCsvQUg1K2g2clg2elhMUU1NYVE0UnFIN01FbFBsVFNIZDRmWkhhK1NkazN4OHMgaXQyT2VoOXkwNUQ0ZVRHZHI5c09KUENUbkFiZFBnQUNDZlA5TmxFYnBKdDRHc0YxTExGS2tjeU5kUlRQRWsrRWIwYkRBNWtHaU1UMCBwSnBFa2hMU3lPN1pZRXZDWFhFUmxzSTVaSXR5K0MyTERFaGI4aThzZlJ1Q3VEVnBuMi9LZHF2MGkyQ2RzaVhaR3B1eUtmc0pQMkZlIHFhNDZnN2p6TlFsYnA1a2RNZ2djSUJ2azR6REhCbXhka28zdng4OGY4Q2Z4UHF1MVdEVmdaUXlWYWJ3cEhxdm1WdFRyQW41ekJMNGEgK0NiUXJsdy8xVW1PQWRmNHJQSWJHeU0yQlJYSnN5T2J3U2RnNThBL1lEL1ZpcUQxQVExSkhyZXRLMHNsYnJkeTB1cmVvU1FCSkk5cyBMWUVyZk5YM0xaQ2UrUTZyRDF1SHI4UEFiU0h3VEZtRStMakZubXh2K3ZrSDlELzJCMlZjbnVDYmxuUTFqR0pPVG1VUEdyMGdZcjIyIEw1NWtMckpYS045NEovRzNCRDI5YmF2NGdKOWN3eVl5cnlqdzg5MFFuT1Q0RGdMOEFBSVBWYU02dVJRbW8weVJhbEhtZ2dqaWVKdFcgSTlQdmtUcmc4MGcrcGpqaWtLU3lQczVpUE15eHpScmN3aDA4alNhWnBuMCtBTFRCSldnamsxY2NNTWtlN0xIRllna25kY2xVN3V6WiBXTElWV09SZmxpUUNGZXVUYU5wUE9yNjJodGhHR05QWHl5SEZLTzlvVkpESHA2M0QyZXR0NFZqdy9UeHU2TXNLNHQ1V1FhUzdKTlZvIE8vbjkvd0NmSHovd1lTVHRQNys3V0JwTXRUVE9ZT3V0Y0h3SUZiQ21GMjlpbE9PY2k0bDBUYWJmY01SaUFGNmViajUrdXBaTW5XTE4gaVVPMmY2N1BPQVY2d1YvMVY4Q1lUdU1kbVF3OWpWZmJZc29CRzUwcHdXNGkrbjVMakVtQWNWTzVEeGhnRG1LMitZdDFmTmVNV0NlRCBaR2ZkQmZKa2RKU2RQRHdmZnZkK1AxRndIcmN5Q3FyeWtlamRQSFovc3lwS3FrdzN4cW92aFBzMWJ0RGFkaGgyaHA3b2RQWkszWkhDIEdqd0dCdDQwVFJyazV4V2ZtM2JDb2o1L3dIVlRPUkpwOU9yT2ZxdjdycUVRUkhZalNGNVJxSFZwNDVKSTF3SVlSeFBqbGJzdmFIdU0gNHdTU0dKUFNqT3Boa1VZNTdwR2FGZTZzY0Zwck4yVGlPaFd5R2lvNTlrTzFqVHh0Snc2NXRTTFp0SG1YQ3AxNURUVU5oQTJnaHNHOCBQbEp6R1FlWW5OdkE5NEpzeUc5c3d6bXdNMkVBSU8vZ09QN0JoYUZUb3hQdHE2R09vVjNnTnYyaFc5eHRjaGJHSUJaT1E1ZDJwdFRWIFduVE1McnF4OFc0R0lKdHJDZmlIWnNId1hnTjJOS3UxSHFKQndBQVAwUDRWa0Z1ajRHRGgwaFNoeW1wWE1KTk9PR29UVDI4SkMyS3EgL25oNmsyQmtUN1REMm1oMC9EZUtsSHo3VTNONXEvYzk4cTYwUWh3Qno3SHREN0graHNHOEE2enIrN0dPczZsdEdIUHNoSmw5bnp5dSBKaDRsS25GeGR3aG1KaUZaRzRMZkJMUTRPR1dLelYyampLUCt0Vlc3Ym9CZjJCK2ZrRERRWTNabGNuTjIyb21hcXVzZ0dxeitUeGZuIDU1NkVTb0ZYY080amNoQ01jWkZ4d2NudXZISW1xNXNteDFhNTBUN05GbzluVkNHenBOcHJpSHFackpvckN5R0NXbnVUa2tmTHJkZnggc2hQRHVBZjRieDJQZks1TUU4VmZFWjV0SlNkZ0FBRDZDd0lKOEFBVEsycm1Nb2dxbWJ1VzdhUEM4NDJXa05RMGhFTVdOdTFjeWpBOSBERHNpSFpESXZtUG43OThQRm41NHNqTjdCbTkvNUFmL0FMQjFEcll1UkFWMlE4QmF0U0FlbThwU3BGcGNEdzh0RHE4V2oyTksvRzlxIFh3bm1FOGc0SS9iL0FMalM3eVdlVHJPeGhEZUNPL2VmUG9PSHYwNVE1Qll2aTFkUWVtRFRscHd0QjhhMG1wRjlQMHNNZmUwT0JxYXYgV0FDbitteUdNUkNSSmpDK0kxMFU5YkxTR1c3ZUdWYzhrY1VuRUtjZmNWLzFMNS8wZ1QzcVhDbEtrYytidU1mVVJMeXpsaGo1WElZMSB1QSs0NVV3NDg5TGJFNU9zbTE1NG1reUJ4aWtrN1RpdGZ4WXR3YnpCK0tNUXB0aFFDcDhjNVVOY0pSNElKSVVtSElKQ2VybExDbEFVIDRmRG1NaWZhZ2VmMjViV0NBOE9DS3NpMmxtMlBZd213Yysvei9VUGpYQlY0YW0wOE5mR1RKRHp5UTJJUGFsVXdKaHBwNXRzWUM0RUkga05iNGU0TDZlcTlyNjArWU1xRGl5TThuTFJDZXo4ZlFUNEErQTk4RnV0MCs4WHdESlBndW54c09CWkZrTDBnUHB2VDJHWStXaEVQTiBGVkwvQU15WWh6QTQvRnF4SDhIVzNsbTJ0Wi9aRFp6ZjM1K2ZnQ0MvSHo5cTlPV25tOHRUemZXMm40VllzelQrTXJmSk9oUU5tSFVnIEpYRk9NRVJGVWp6YSs1bUtlNXFNbG9zelZjMCttNHNYNjFDYXhacU9IeDlIb1luNDNYNFBNWVBTYkJQMVlWOFdhZVRSL1RPS25nOU4gRUsxNkVwc2s3ZkczSjkyVDJncm1RQ1lNRjJZSnR4STVGTXF5OFJzVGpKSHRTeDVSeVUyTE5lV0JvQUE1Q1VOa3NUVDZZN3FXV05keSBURzFKTVRFQ0JjR0VPZUF1NHUwSVk2SFE2MWpNWkYvOGxWZWVWVnNZc29iUU1KNFlCRFlSQi83QWY2WVZzY3NnQ3c3YlZUS043U25uIGFXbmtVa2hMTUlqbFRoNlZEVDRiSXQxWFQxcU9FTUdlNEcxVnU4MUErRE9NbzRRMmtuS2lQNGMrUDlJMlpWYnc1SisvQVppQmZ3dXQgd2xUZkR5U0Z4NFhjVmJLYmZURmdMZGJtT0hsNi9tVnoydlBkbnhqeXIxZXpFMGM0azdHZzdBZjJEd0FBdzAvNWNPZTRid3JyYVMrVyBFZWYyemg3NFByS1lMbFJMR2NrOGVHTU1oamtoQU0xUGpBQmFzU2ZGeGFNall1M051ZklPR0w4QWZrRS8xSGRGSzkwSW1qdmVpTXQ3IGVXR0RLK0E3K0d3Zkh0b25FNWNDeU8xeU5HN0pLN09oZGRzY2xNZ0JiWFhiWnNjRThkS3NQekQvQUJNbUJ5cVREQW5tMXNZUGh1Q1EgWWFBS256TGorQzM4eFBaSENaOEFnZWF3NnlzN1d0YkdFNXY3K0FmdjBQZ0UvcWtrTmtDamc1bG9aSklFOGtoVk5YcjV3VjlQYWVMciBsc2FDbTMwL01wK2JhaGo0WndEZUhhdm5GdmxHaTN2Tm0rRG43ZHFMei82TDl4Z0J4VG5wWUhsdWNwUTdHRHUwUm9hZyswekx1ckMyIEJjcVk0SjlxR0VOYmgvRHNhZVFuMk10L2xEYzJiZTZ1d09iL0FMQUE5bURERlNzbGlOQ2xwak1hWklGZXBKaXZod05USVRBTmdDVEYgak9UQzVSUzlmd3VCekRFeGdEdFFCZmZIaGpKL2ZGbEcra20vMkFCMHJIRjEyL1UycHpFL0dOUjloYVg3cnhvZG56bDdoWEpKL0crNCB5UlpvU21iVms2RmNZeFErL0k5MzIxNEpORFJsa0xJZ05ESUJnYmxxRFBROVNEWXdYTloxUC9EYUlvbFgrWjJUbU1pSERXK0I3OFBiIFVlWVRHRkJZeFpCaEt1L0VSL1lBSDBFK0FtWmdOMElNaDdOVFRxUzFXTlZhU3AyZ3E5Mld4OFBBWWxYb1laZ1pMVURzaGlIWURKaWUgcTdGcXVCbTJ2eGh6elp3K0F3NTkwamFUZUY5anNBWlgwQXd5TzFnNXhKZGpoOEIvRHhaUXNVMmRmcmlXNFErTi93RDRmdHlxSFdmcSA0eXMrYmJKanNIMzd6L1R5WkIxODBpMEhoY1U4N1BrOURqVmxIVlQrMHc3azRRZTA1c2kvMlRNVld0dzJEaXA3dExCaDdudFl3WnNqIHNjLzdCdjhBaUJBRnVxMHJLR1FUU2FZeURUTytNK0RZRkdDVWJ5eGF4ZmJRNU45UUJqR3NqREZJN1dRM2xqSmFoaytMeG9kM3psNEYgY2tnOGdyMitQVmE1c3RrakRhZ1BNanZZR2RnanFZZG9jckNQQzRZOWJxdHdXdzdnUFpBZTN6MnB3dDhZTDR5TUJtL3lwOStRZlA0NyBCcGJHRkRpcWRZZ2FId2s1MmNOcmQzN3FMY2VXNE5BR0pkd3RRMmUxQTYySHNuZURuRDdheG1NeXlML1k5a04vNWY4QVlPbW9odEJRIHlMMU9OdGxyWTJ6cXFWVW51aGZCSWcyR0VNcFlSUXBpd3ZpMllyY09ua0lYYlJnUXpreDV0L2dlUHVFZGdnTS83N0EvSHovU012dkkgaDB3N3pWZGljTk9EVTJnVnlrbi9BTGVMRjJ6YmlxKzE4WkxrQVdqTXhEc2VMUERIUU52cVU4TVVlbnVzVVhBRzZwV0hzd3I1KzNxLyBZTUdDbzJKUW1RaDBHTHlCTk03WHZTVkdaWkFsRGNzWVd0cnQvd0NKcysyU2doWTVGR1VMYmZxZUszY3Z0NXNESDhpNytLNSt2QWRIIFkwdUdMcnJKYlZWWHIycFVqbFRVUExCK0xxYlJLY0NCZ3d5T0V3eHdNMkJxNzU3NGpJM2t4bTluS3UvRVIvOEFZQUhzd3JRbU9FRE0gU1dqS1RnbG5adHRNakNPZkVsby9taWpES1RXWGVMSWhvZUxqWUV5REFxL2lyNGpJejRyakdZNWRnUTJEUVQ2RDlCdzM4K2g2L2JQOCBKMEFsTEdNc2pLdUo4WnNrQWJJSGlHUVhxQ0xmRURXQk1ROVBiaE1UMkNIQVErN1U1YldXZmxETjlKU1haSDJCKzRDZmZuL3FZQnNFIGxESjNNMFdEVzdhN0JYd0hiTlQ1MWhYUThWV0xBaVhJWHQ4TlBmS3J1Q2tpRXlEZFZ3S1FNTzlMUEYxbDVPYzJDSGY3L2lBd0FIMXkgUU9CbnU3MU83MXV5bkhjQ2NYSEpGUjRGRmcyVkdndk5pcnhpa2N2Rms2TUM2VmxnTEtFWmQ4WnpHNHRpd0J6MFMySzJNa3JtMG9NUyBOaDZiYXVQTkdUVllkcytVNVN4WXRiSDJPSHJka3F1WVFjYWQxU3A4OUhaRmtaenkzL09HemdNK2c0b1BkMEJ2NTh2UnlMUVVoemJhIGloMXZPZHp4SmhQc2o1VTdZbjFmRmwxeWU1QVl1d3hmRldMWTliVmRQQzhoL01yUEhuZ3daOUpDVlcvdno4ZlFYNC92L1MzcHE2SkMgNDZaTS9GSlc3UERPRmtmSEpjR0V3cFZYeXdOY3pGNE95VEE4eitsVU93TGErczdYYUJNWWoyalYzbi8zL0MzY2VwY2VVSVdyM0NsSiB0R2hDVFJuRzJGUHJHdlhoVFpQcjFvM0pkaS9kZ2RERHdxckloMVhVc1BnQXpIYUFwemxtUm5jSWt2Si82Q2dnQUIva0NKNThNdEtrIGJyMlJ1WmlPeDg4aUJHZnV4eE9SNDl3NDZjc0daTXJ5SStKbXBVTjF0YlYyZU9HekJBcmpFK2I0N1pEUldjOXNyd05iWEcycktyZHQgWHc0RjJrVU5ES2R2bkxVWXRzSHpIQzFBOUpqdzlqWHovSXcxbEdLY0dXZUVtN1JlUG9KL1lFSHp3RklWTXR0c0NuN0d5aHEySFRaaiB0TDB6cE56TkdwcFBUVG9rOUxReU5xTGFIOFFQOHpDZlI2bFZjTVlzb2UyRE9FbS9BZSsvdjJPSFRza1dSUStVOHFnRnN5ZFI5QXRxIDVVenVZWlE5NHpJZUZTbGRTb3Q3QVRMSXBNdXRWdXV6TU5QT21CU0NUR1Y0Rms5dFJnZkNNUUlIWWZvSEgvVUNXRFNkWHhiQVpCZDAgMzhwSjlqS3RiaWU1SEIxNWJhTGFyMERwZmNCOWtNcTIrR0hCZjJOU3IrQlhJZmsxWDlvR1k0YnV4Sk9BRUYrMy9FK0FQbjdEeGxYViBCdFBnWkpWbDA4eE80TWJaWGNSeHRuZE1Jbmt3eFVNUmtwSkdKbGtFckQ2b04vRkpGcUlvOGNNVlRJUm5Va2hJNVprR1JUTGRZajJGIFRwbVUrbDJXWXptalQ0K2MydFd3bTBUWCtjeVdSRW1pMmhlbEM4U0VOT2ZJYTJuK0RuV2hBVldRbTh2Z3NaNFQrZ1FHL3dEbndBQSsgTm9jaVlodG0xMmhNazFLMjNOVXBaZlFwZy9aNVgyaTJuMjBHVEV4Y0Q1Vy9EMnBTUUcxVk1jRzd5ckpONFNkUEg3L3dEWUQvQUZkbiBVb2o2RzhyaXBuVDZTb0V4bWtwUWtlWVQwZVd0OERVME55cXRnbUIzQnc1SVBaSnlHUVBZUTBiRVdpZXlPN1dqNzgrUHI0QS83bnVrIGpZbGVTSUdYRGFDYWZZOVZxNWluS2NlS1pUN2YrR2Z1NnpVMFZYQy9XeGx2VHpMSXdHTmhYeDZyenJERVd6UEp6NlM4QVY4Q0FRVDYgQ0FQNE1hU09Tb2JkTno3blNnS3J3TXU3M2M4aWhSNXZoV0xRc1dFZWVGY1NuT3dhRnFjVnc4Yys2KzN4Vm1pRnFCb2JrK096a2V2NiBTdGhueEp4RG1LcnVDd3RoaXFaNURjQjRaRHBOUFpERmdXbzhUMC9Zd3d3blRkb0xQQndnVGc0QUIvdjdmK3JhRUszaDBPcG9kYVQxIHR1QTVxZVM0TzMyUkg0MEJpdGtwOGhrSmhpWVlaSmhCa3NZRHFRNFAvVkN1ekkxVm05N3F0KzRDZjM5QlFUM1U5VzZtWXNCc0pMaWEgTnJjOWRMakdsMStodzdBWHBrWEZlUE9SaTRBNzVTY3kxUFpreFF5SGJrUFdlMWxDWXZteHRKMUdJSURud0RnSUJCNmFqeHZESGNqNSBiVURKMkcxVEVhMkpDVERzQnNjSE5OWG90Y3pXQVB5V3RyZ2ZNVTg1QVh4NXdQMno3eWR6RWNKc2lQVVhnRDZDZnc2WWRSbE1rQVhGIEl4a3pBUXJJWkNVMm5SNG9ZOE51M3lWbGt6eUZGS09WR0dSRWFabUR2TE1yTEFWN0hlVCtSM0dSSjhKUXJ6ZlBQU3h5eWxtWEpwdmEgZE54NGJHenFOVkgrWUhRN2dUeTNadE5kM3hvTVdoZGxxTGZ3ek53Y0hiWERZN0lGMllydmhOR0J1M3VjNENoSUlEeisvaExLOFYvbyBvUXFnbnpzNnh6TlRaTkJYeFgrVGN4bW5RNHFWcWFPb2FJUVcyV2g5U0ZKeTM5bDJENEZwcmVLT2hYdVRlVGdRNWlEZmoxUk1HSEFUIDdBZjA1K24rcDdIZEt4Yllsa0tSS0E0RXVVQVQxYmxtU01ocEo1TndjSWNPeUxJM2hQWTFVQ3dBSzVXOXp2Z1dzNzVkZ1FKc0h2aUEgQUlPQURyc0lLNlhMSUVqTVhPQ2NrUTBsc1Y2OStPV2gyaFRiWjNHY0I2SERaS0hjRTZ2NnJuY1BmT04rd3Q4c3dtOFdqc2dQdEYvLyBBSDVJZ2lJWmNOTVVMaVFJdW53eGthV0NXUmlkdzVaN0tLQlF3b25ueDBZMVU4VThVdW5rMUlkWXpFV2ZVWjRPSXBJWlFQU0g5T2QxIHUvdUIrT3E1Wk9qOS9zWEk5REF3V2VpVnhQOEFUbXpoK1pXdnFlYnVGd3E1a3hpVTNNTW80VEpxRnl6VTdNWFYxaWtHWUlEMXg4ek4gejhnVjZJc0RMejVRMkdPbDUrZFdTOVFRWllRQk1JRkVqVEdlSExTejZhOVRobG1xVDFkcGhHUmErT0hGSlVSUkRsV0ttaUFjRndHTCBGWmVhT2d6NjFycy9ueUowNCtUQ3NHQnlQWWJ0blI1YWUrNTRTYjVPd0JadGJOWm45L0orZjMxWWVjZ0g2bWZ3RDcvOVAxK2ovd0JUIDFCV0ptQStCekZkOEdwT2Mya3JJRWtZYklqeTNBVW1xVVdVeWQ0TGdoMXV0aGwvNEw0UEExek5abmtwN2pFZTdBZ1JIUGdBR0tEaGYgdXdvT2l6MERMUGxDOUxCMGwrMUNKSjhHd0VJbHFaOVo0akNiWFhSUndYekZLUGdZUVpIUXJpZ3Y5MEk0ZkgyZmNYZkRGSnE0NGZ4eCB3UEFXRGovVFBUOHhIemJnSkpxNWtraytteHRrTzdod095RjR4VjZZSnJteGc3RGFrS3EwTzFZYkJaQno4bG5EQlBnWXRaV1RsbzdJIGpnZUFnRC83QUE0MTlMTHRGd0VzcDh5VzNVTFlJY2twNlpwZ0d2Mnh3VjR0c0pzdmg4T3lFOVBoSjdCVDd3aDJoUHAxT3JQVDBVS0wgS3p3bTBhVEJXNmY3UklPLzgvZmlWbFNLVmdzSmNoUTdUSDMrYXhGY1Z6Zkp1eCtPZ0ROSXl4TnVORC95MFhLdkhsc2w4MXh4K2E4RCByUzZRMXNwbHBLNDcyb3RubHkxSCtzdFAvd0FPbnhLZmNsb083NCtjZmhoNGFkcURjTm5SNld1RDRDM1dZeG9GNmhSbStZSklOK3QyIG9qOXVyNERZRDZydkJIMVVVakQ0dStKSnNEWXcyU3dqcjQxRldCRTVsRnRqVitlVC9tTGRWekhBT1FtVnpBbnR2TUNhTVRhQmxtQTMgWjJDZmwzZ0lEOFJJS0NWT21tQ2FqMG5rcVQ0aHlYeWtXb2t2V3ZRS0dRczJHZXJtdmJGQW1DRXlIdzhQdUMzQmZHQ3BVY3oyenRCbyBlZGlOaE44QUlEOGY0Q0FBZFdXa0VLenpVc0RVRFJRK29jREFXNzFVMkJQMUlLN0Q4VnlkaWd1SDhPN0hEVUpUOHl3SmlyQnZBOVFPIEpOWktmbzhiMkVPVkYraUNBL1RwQmtNVlNzbjFLSk50eUNCczVJWStBMHJwUTVqb2J5WkRiTEwzTmx3Y2FidHhCMDB6dENIVXl0MlMgVGlyMHVmRlB5TURpZHkyT0s0MGE5bUIxVHRyUmFtVXVjL1cyME9wVTJZejdVc2lKTWxQbFpYZEtaSy9UOVNFd3d0bUdGYnNhMmg0KyBkNHhYUXliTjdkcmdiOGZBSC9BWTcvTzJKU2RpSHJWcmU1SzAwNnNreTZSc2EyZE94K2pjaXZUSDhQdUF0WERyOVBoME9xekdLZXlQIEYwaitEOG1SbndwWml5RWRnbDJkb2o3OS9RTy9uNit6SHlabFdYTnJwY3JlMjVzb0NFVTJpNnlSQ0lZeGFDd3I0WkNHaG1GdmdhKzQgTlErdjU5Vm1IbG1aMEo0WmtjSWxHd21Pd2I5N2JBZnN6VkRWZlZNSDZNSm9GbVhYVU5YVnVneVRTZWtHY0E4c3BUakJxVUVrRFpaKyBxcERtcC8yMUFzbjFyVHg2aFBxRjc1ajZVdDN3WUYvRkFZTUQyL21BMm5VRlM4K1B6SVlsY2l4N25qaFRMd2VXVTE4Vlp0bHJKNlJFIGNidldBUVNuS2lvYTl5YVNzUlZZMTVOM3hXOGhXQ253aW4zdDRJMDdTZEdZTmxlYUwzYWRYOWhCV2kyZE9NWjlEd0cvRnZlMXN4QWggMGllQVZrYkxrdWV0QlQwK2wxU1VsSmZlZTRzSUEvNmw5ZVRPb3RndkRUN3FMZks2dTV2Q0Z5bW5WMnJIVC9XV1FrTU1zWEdFSnBXcSB5Q0c0V21aaDRBUFViOTdMQnNuY3ZGb1pTbnQzU2VEeUNmZnNldnNnZXZoa09zWlM1eVRsQklHdzFmcWpTYkEvSEthdk9YRytlVnV5IEdJYjVZRXlkWmRvV1lqcll5MzhGY1lzbk1RbDJIUEFIOStQMUZVWFVrSFU2N0tadWNMc3RrdEd0ODBkSnRoZlR5VnNKTXlLaHBGSTEgelNaQXhEUTF2alE4eFBRMkRuSzJ6Rk9CNHJPQVJKNE9mUHYzOWZiL0FOR055VTgreEhaR2YvRFFqbzE4NVdlTEZVVFp2ak9FeDltQSAvT2NlNTRxcXRoWGczNXNuOVVXL3FzdERNaW5KbVU3NXh0VjVVdDFsSFQ4aFBTRS9ZWmFiRk1PRU5EbVZYRFcyQmIrZXZ6L2hqQ2RvIGFkRVpaN1hPMW83K0FQOEFnTWZzQ0NXNkxUeGJRU241VmhTU1duaGtaQk1mSnRTT1d2aXBXaGVBMjBuajVpM0RUMEl3NExiVVFUNTggNE5qNHJqSnc0RXhCZnIrSXZBWXVZWFpDbWF6RlhLQTFpeWFiMmdsSmlEenhnUExtUHFiWHFhNU9MaE1UK0lNamdRaHRTR3Y5MUlheiB0ZUF3bWNDYjI4QUQ2RHNHL3dDd2RiVW94TUF1QmdvVXlVbXlCZG0xS2tWL3FpcDlQc0picTlEZHlpRzRFSmhpcTJTSE1YekhaV3dGIEpxRHN5emppakkyOUczYno2RHNEOC9jKzZIVHl1SVpWQ1BHa2NtMnFNTGQ2OHZDb29TSWVNWEdQSHgwVWtjVXJ4SzhrYlBOdDdZZzkgS09QTWR5enlETUpJdUtkbUpvazgvaWV0UkRZQU5IdFZ2Z1NUL01NNmV4dW1WZnBPMVBpUTlPWldJaDEwdUVKdGIzQStCMDlnRDJOVyBuL3BZaWNacThuV2F6N1dnRS9yNEFmdzMvZjZPSTlCcWFSWUZXVDIyMURaL1RtZWJaYmZrcXRUTmkyMFNuZERsSVpBT3lmTWgyUVFEIDF6QTFBVHpuOVVOQ05zYnQydUJ2MkRCMmkyRFlPbnhsM3JDVjQ3VUdQSWRiMHl4MTY3TmkvVWtNZ1dXN0hGcWNvcGFsb1dvaFRERXcgeXZwOXhkanozdzJaR2ZGZG1KMnB6YTY2clFkL0FBS2lQN0IxUEdFeUdlcnRQaWxLcnE2eUV4akNTNm5xV1lubHBpdWV1TTlLTWN3cyBoa0RoMC82UEFjT1ZPQ3lzdEdJeEczdjlVSHdEOXdIQStBa3hES0l3N3d6UHpBenJFdE9vVTVnU3p4WllaaXdEOGdraml5UUtraG5YIENlc1E4YXVURzBiQVpwSU1UZWRBcWZ0b21qZkc0V0RSNjVwOWtVMGhxVTJUS0F2N0V3VWFCSWV6azBTNjVWOENLRytCMlF6TUhob00gOVBubzFQa3liUXIxbXN2SHNFOC92L0FUNitmUDd5Z2Q4S0pZWnRDdmhLMUZkUGYxN0d3ZzVENWhROHB2bHR3eDdLK1dRWSt2c2xkSCBpQjZ4b2FON1BkWnMzQ2JzTjcrL2NCQUFBQi8zRkdRaFlEUmhuTWFRZUNLbWFoc2tzZk5mRS91UjhWSWZQMmVGWkc4VENENXNJK2VqIHVEeXpDMWNZVE9iSnNlTDkrL2dBR3dNRlBLRkUyR0JYQ2dkVEQxcFlUYXBMOHh3WDJ4YlRhYmQvaWgrWVVuak1od3lDM1ZaNGhBdFIgazNQQm9lV1k1Z2s3MmY4QW9KL2Y5Z0FDVWRHRWptOG5SQUtxc3ZKdXo0cnhRK2VlT2crb1IreEdlTEx5eVA1cXF2dEg3ci9VL25xTiBtQWt0SW9QdmRMdUFrN3VWWXNpOFFsb2F2ekNVK1ZrcnE2Znh0RHhmSWZJT0t6M0N5emhoWkdmV1ZoNE9CTjhBQU83cDhCN0hzUlpzIEhsTEd5MDhBZW1Ob0VXWU5xaEJ3dzRrSEFua2hvNDJRbU9GSjRwNjJSNHFwTDU3RXdUWm1nb00zdzMrd01DQ2YzOEJzSFVPVVFqSGEgTThCTTE2U2NKVXhTaUdQaGg1WWVMRmxucTVYUGgyb0haSEJ3SHVGallzRDRkcDhZVEZ0RzVvLzVSQm4wSGdQbjM0QUFubGVRdHRFTiBQRmk1amIzVkQ4ZU1WdTRYUnp3OWhMalNwZzh4aXR6RnRiWCsxZDhXQlBCdUhHU201dktPRU4rMlAzN2Z6K0hUU3pSdmJPNnZHN0xQIEpFMUk5WTRGV3EzKzhVUU1iK2JBQW51dzA3SUE3SWp4b3paU0RJOGlTV2h1QVV0ZW1sR3pYZHdCVEt5VzU2L2syckFXeG9lVk10R3YgZE84TnFJc0xJTHRCZXNhdVU4ZTRNaWVoaDBNZkRnNHA3YlhMZ2prMWNvTTJPMGYrcUJpdi93QmdZUlRNcXVVWXlhSHNZWXQxdmR6VSBOWVpCZ2tuOHdRMDBUdzFQSU1sYm1JY0xtQmhWZ1dpMmcyUVl6RkJaTkczdXJyc0Jua0UrQUFmdjNVbTZabVlMc0I4UTNldlVtdDNLIFo0ZVlTRHIxVnVRSGZnTElQaGhtU245NFg4YTVuc0tHajJRakRHai9BRnhkN1I5d0I5K2ZrTG53QUIwNXJZci9BR2FxclUyR3QxSzcgS2YyMFRRNnJNc2lXbm9aNFNCbEdGOUREbUpoaUd2bUs1b2R3clE0SFdieEYxY01aZ2JzN0pPd0g5LzhBUDdCMEJrenBOM3ozSzdMbCBJSkZ4d2QzSkdlRnRTMG9za1gwYWxZQVhDM1ZXTHErUVBOSC9BRjhlU2VxYzZxQTdoWXd4eGxEME5sSlZlMVJxY2p1dzJQWHJJaDRiICtCTUQwL3VwczVoUGNEbW5pMFBEL2FLSEtNeHdIaWsvZnNkL1BZYkFmYzFYZzQ5bHE5TXJnYWdhdWw1U1RUbDNEOU5Oa2FmMU5rY24gSnN0Q1VYcjdnWWV5RnRrVHc5cWRqNEVHdDJZWitNMFo0TkpKdDRBYys0K0E1K2Y2V0l0WGoxeURzNkFHWkxrR3ZqSWdPOGZKRHVCYiBodFN1N1JYTU1leVRGdHdXMFBqWU1Ed05xaGpIcFg1eXN2QVEyYmVNQUhnTi93Q2ZZM0d0U1lZQTFYVE4rMDNxV0pVbnFNY09iajNDIHNxM3hReGZFeGRqTGJBaHVIRzRka01BY0dwTUg4NHpjWHhlYk0rN1hhYytnK2Z4d1BnSHlhaFZWVkVaU1daSkVpMUJla2IrUE12MisgbmprdUl5YkxKdVZLOHJHbnpQMUFrUm5SNDVHMHluS2VOMEJFYkZMRjNiZ0RqNS9WMVgxR1dJeWMwemx5ZlE5YnZiNDFPM2Vod3poMSBoWEFMY3JDcTlwVzYvdFJQMHh1RlYxV1FEOXRMUStDWUpvck9VV2Q4TjRjNEFIL2J1NWdBMzg4clBXSnJOMWhwOUo2Y3dOZXFWUDFCIFVxbGZFL0pyMHgyZlErUEp0amNoVzA5a1c3SXRSZ21RWHh3b2RINXlzb2I1d1lJN0czYmZ6NzhBUG4vUDlLUlFYcm5EdWF0cUcwclYgaVNyRm4wcFAxVUx3RmpJTDM0YlNHaXg0YkFIbW9jT3Q3SStGQnhIdmpVWUdQTzZmN0ovcjQvNS83OTB0eEVnUEd0Y1JhRjUxWEtUcSBnWkRlTWl3dE5RWjNmRVJYdGNERmNPZWJ5SGhpRzlsZ0hvRmwyTUhzMVphT0RyQjNBMmxiL2lCOS9QbitxMmtaZ0FzNWRFamRYL2wyIFoyTkVVY2JNVmZrQjdIQzQ4MmpUR1FSZ1JoSlhlU3lteWtxTmhnMGIyKzVWTmx3b1FrY25LaGNkeFpGZTdtU3pyVnNZbGJWelZmY3ogc3ZWOGh1R21lV3licFlWeVZmdDh3T0htcmNOd212R0pBRFZZY216SzVRWXovd0JiQS8zL0FOejREcXV6UmVHcVRKbUpLNG0yY0VhcSArbWFtdStEVHM0bFBGdmxPWElobUY4UDhQOGtNQ2Z2MXdRRGswWThpOEJndzVzaHM1K2gvK3dkTUZiWHF2M0RKc1l5bnV6NHVCNytsIC93Q0REVjJHWlhOT0NkTkI2YjNVV3c5YnVBZmVPV2prTlZoMW4ydit6YjJFOSswWCtaL3JqRVNRYVJmRFZhdWtIVWhoa3orVzNJdmggejFmcWFlQ3NhSlhLYUhYNWkzTXVBUUhUMW80cEw1NnVYQW1NRjJoaWk3STdjSCt3QU4vQWMrNlNJNW9zL1QrbzJCSE5wb1pteDA4TyB4RkhHaXExTnMrQ3pIRjg3QXBjTFkzZitKeE1ZdHlGbzlSUEhKdXlTU2RucXluRkxza2xVKzN1N2pmV0ExZGZGbkdyVUZmQmlwYmE3IFltN0NIMlBSdW9DN25CRDdzSnI1WkE1OE1mTW1NcEI3Z3oyQURZMXdNenlVS28zQi93QVhJNThBZlFXQS93Q2ZRWUd3RVBMU05QZFAgd0pka0VnNEZrSldFMEpMSUhYMXE1UHZpdTRFUHdtWVpEREFZdFRzOVdrNlk4bzFvV2dUOWdtS1NkUWZ2eDhCMGVVWFY5Nk1hM0RTYSAwb0YvWkdOSk4wN0hySE9rV0ZNVnp5bnYweHhUNWdlR1lZN1JEZzl1QXozQVl6VTIwY21CNzI3SE9BNytBUG4rUVB5ZnF0REtWVkgxIE9KcmRrMjFXQ1Fxdjh0WDFJSjhkM2g4TkxXMHIyUXdMWWR3ZTRjeHhaTEdBMS9zWmhuWlNndGFLSEhZSnpoL2Z2UDdBQVA4QVJHRjMgRXJJOVl6VFdLODdrTFJqbkljamNKSEJ1cTR1eFFtalZSR3lsa2toV0tPWmhGR2cycFlaV1p6RkV1TjRLb0J6OGtoaGlWTCs3OElidiBZRmthcFUzVEhWMWtKRTBaZHhCVlZwRjNURmRYaDRIbkJndFN0NGEyeWNmdzRrMzdHaGt5YUdoc3hQOEFaRGo4L0FBSEFWOEFnZ0JXIG43UXVTMWN4VnpiVnM1dGNBTmJqWGRQcXRrWUcxYmlnZGhpcmErNFZYTVQ3VVpMQmZPZWRwVG0yUExRaGpGazQ2cEtTY0FIL0FHQWIgQWZ4NjNNZzlQcUNsN09NdTloU2FmNVVwUTYzckU5SVhsc1dtbHZpaDZmbUI0WWVhbi9EZzBzNEFRZDhEV2IrS0JtV1hrSmRpUzhiKyB2djMvQUU2MnhteVNMcjhPcjNTbjNIVzdRQXVTc2d3Ry9pQzlzS0drY3lxdGdtUTNDeUErSTliZVAyTVB6a1hhSDBjMjdWY2NQbndBIERmei9BSisyZUxGbVVKTGc1UWhsSEZGT1FiTlpXYkZmQTV2d01abFZYaUN3NllqRzVHTlNUQWtkcGFodVNBM3RweGVUaXgxSlZBS2ogNmxxUVBKRVc1dEpoNkJEZjZkcENIV0xna3JjclUrN0lseVhBUHVCa0wxeFQ1aUFoS29LOFFUeGl6NG9Wb0U4QW5wZHFUQSs3QUFRTSBWL0EvaXNzd1BRZHkwbmt3RWl2YklHMC9DMWFKRHhuRFI4c09oeW14OFEwL2g4eUc0TW5Iakp3Q3dYeFhKamdxSHB5V2RRdXlCSGFxIDM0L3Y0QkFQb093TTJUbUsrTEFIK2VoNmVMYVEwTTViQSt0NWxieXJzVGJRczA5S0QyQVlwKzFGdUdIL0FKNXQrZUNjQmlOVjlOckwgTjkyNE9BUDcrZy9md0hYMHhWOWJyRjRBWXFSa3FVUE5KRFVpd0NVTnBsbUpRRmhsQzdzNWd0OGtpZG4zQ25ZRndUL21FeGhSWDhHYiA4SDlCUG56L0FMb09PUmc4Y3BaRE5Eak1Kb3lveGo1ckpVZityNEFZNHFFc2NITGpTSktBT1dPVU8xN0loNHg3cmlpaXVyOE5sNHNFIGMyamJjaFd6UFo3bUExVW5vREpwdWZMYVUrQjFMYU5aTWlFVExDOVB0cWZEM2d3R0RmTU9JWkRmVThtczNJTEdJeU9FQ2RxOWdmc08gZkFFSHF5MGUrZmxYQllVcXdLeEdvZFgyUXlTM0RKMDlvOXNHSzVGMWtoeTF0Z0RtS3JXM3lIVjYyY2ZLdlBXTlc2TTgreXdpbzV2bSAzUHRnQVA1LzM2WkRaWCtaWXkzZkd1dkt6MlJjWEE3SXAxL2MxL2NlbVJiR3JLeG1neHlSa3VDdDYzUTJCd09UMS9CSHVDb0JuRjNwIFpPRy9CNFArSFBqKy9nQUNsQ01pRzBXSk1nRkdwL3ZKU3JGL2R5SEF6QWxEbGQ3cWJBb2U4WUdJY3dPUE1Ub0MrK0hHUVo3b2UyZjEgc0U0Q2Zmc1FEOXYvQUZkQmpLc0xiVHVtQVNNYlRtL21WTGFxcnQ1TjIzSUE2R1BkaituelhjU0dhTXROS2R5QmN2OEFETXczRGVKeSB6YVEyQmpqemU1ZjVKa1pCS0ZPaGhTQk9PY01UaTJGWlVSWmRqVitQS05VM01kNW94U01JeGxPeUlRaUpuTS9xdzlBMWtCRFd2T2tlIHVRZEtCVktPYmdKS3puUUlRdEdzcTdhSHRYWHJHdldsRXJGNVpXcERya0ZwdEpONE1DcTJMT3hzYVBrQVRYcHZzVEl6RnowazJ3cGwgSytSTjlFdlB5Rm5KRVlaV2ZHZytxR0pHNTAybFBrV2ZrOGNuOCtPazdqRGdjQWNBV1RRLzFzZitPcTBISHlaZkQ2a3U2R3R4YVRRKyA2SWxmSlhseUZ3cEdwZDBpVENBZXE2M2hoMXV3TzR3RmZwWnFjRmtZcnRBeXpEaVR6WUdnL3dCQW9Pd2RXMDlmZFJYTVEyaUtZMHVQIGx0YVk0MVpWK050cXYyR0dtbEdGeWlyYSt5SWEyR0RwOWdUQWZuc0szWmxscGZLZy92Z0krQmZ2UGdENS9vUGg1amhhQ0dTRE51VFUgdGVvWTFiRTF1aHpGK3NuQnlxOFRFRjRrRnJBeEREMlJ2Q3FlSGVZV0NhdTBJeU1EQ0pQT1BQN0FBQWRjWmhPZUJiUW41cmtxMXZhaSA0TlVsNm4rMWFmRWNFT0s3czc0dDlrM0FPSFpPUGh6azhnK1RlTTkrRmNac2RYT3J0djhBd0h3SFRKeXNtNFpBa3ZveTdrQjNkeDRKIE1NZHZhbWlzeWxEbmtEaGd0WGthS0tRd1h3NjZoSnBKQklnMHpRTElCcWROSURwZFRwTlQvZUY3SkJxVW1qdXlyUkdsWlZ2SGo1VmcgNWkzcHBsVjQvaDU5ekxkc1hSVzdzNzJFbjAyVVlidWxUQjliNmtOUFljT0dxLzJVckFiZG5yTVlVRnN4UHdsb28rLy9BT1Q4ZjZQSiA5cUwrVEltTkZ0RGJSWkxmeVpQeU9ZUEJhWUtUVWg4QXpIQkRRNjN2Z1BNeER3VkpnZ0k4UHltMk14dzNpYlIwSHNHQVFVRUFlUG4zIHhZR1pTOTNYbzYwaG11TlMxdTd6TlRObW85ZTF2WDY2SGZMYTA5bnE1bUovSkEvdzRaQ1ozNGNMYStZelVhcmxCaE5IKzc4QlBnRDUgOCtBUVFBRGprV1E2UUt6dUFlK1ZqYU5oU2lTVFlSaVpXNC9nWlFXV2ZGZmg2R3lJVGhqWkJBdzFWTGpXbkc5cjdOckpONE4xY2JDVyA2QXcyQitQbjM3cFlDdEdvQ1B2WnFsc3VHMW5RcXJiZFI4ZTlQVHNxdmQwVG8yUkxPaUl5TTdSUnZOTEgyWVVZMWxsYllrR2ZhNjVlIGVWUEZHNlBXZW9DMVhoSlVoYXJHVyszb040cSt2WHhvczJHcnZrczlLcXY1amd5SWI1VzdCN2diUVJFZW4zbXpLYnE5NUdWVzdCQW0gL29MOXYvc2ZmdXFyVVdueUVnZ0dYTGFXKzZsYUdKTFp0d2NmTGNDbDNDVTE4aDFlSE1MZnRESHA4N2tDSGFuQmtZV1VKdlBDVGJ2OSBCZmdCOC84QXJpeUZPaDY3UGoyK0swSHFjaG9iNHRsbURUcTFFS2NNSGdJbHlBaHg1aVpUOE1QTVQxdXhsS3JtMnE0WlB1ZzBQUE9FIG1yc0FZQitQbndHQ0RzSFVPTFpMd1EyVE9uNmFRNUxKWTZyZjk0aDIwcnU4S3hrMVRpbEppL01XNGVBZGJ0QmJCNHI4ODVNbzBXMFYgZlptK0JBZXg4L0FBSDdZVDREcTBYUGNFT3krNFUyMmhhVU9jYnVua2xud0ZNdmdjODVlQlZQYXRHMk1pd3g1S3l5TkZKRWpuRE5XVyBLQ0RQR2hSWWk3N1FDVFlySWFBZVUwWk1xeXc5dFdkYitTTjI4bHZEdTR5b3N1TEtwOGhhaTJ5TWpKdytaQisrS3EzY0NOMmJaaVlOIDNOcEp6SGdCL3dERWZuelpiSDVkZkIwOWtsVmpHQWhza2FYREdMQ1lCTEllUTZ5UFJRKzhjd2h6TUdCd2d6MC9CVm1qYk14ZkJqTjUgdEpCLzE5L3Q4K0g2bjE5ZnVrTzdPN0dxeWE5UEV0cGNFTzVwQ09ZUFcwdk9UUkRZZVNKOHhrUXg4d0g5dGFtUW16RkVObHJNR2t1MSBYY0JQZ05nUG4yRFlEVkdoV2ZLY0tsUEFYeDJMMkRsRzFRQUh5Wi9BaWNwaGphWDA5d3hyaXJGdTFHUmdNZkFZSU9JY29VckJYdDhtIEROdTJPTEJVVy9zQUJnQWJBYXVyUXhpQ040OHNzQktNSGhyQzgwNXZPN0hjS3h2bStBSzR5TTduY3d4ckdEZFE1VmVEN2krUG50L0ggWEphRFFVRnVqaFJrcXEyUzFFMnZVQ25MWVQycU1KVzNMVVlrYnB1RDU4d3d5UTE4d2pudE41NkRqdGl1aDRrem4wbkFCaS9BT2ZlQSBRdE5kNEw2a3lWaTVXMGt5U1VVeEppVmU3RWc5aFEwSTl3T0xNdkQ2ZXlPQWV2MlNjQklZQTFzWnVtRm1EQW4rbFovZ1A3L2llQUZUIFd2dEdiRFBWVWtPcnZuRHlSSjMvQU1hRzRXRk1mRmRJY3ZoajVpRUhUNnJNRDNBSEE0a3EyVFpuc3IrYzN1a3ptd2Z2K3dZdnlycmUgMUh3QUR5UXdzYUVzNUltTGN2ZUxVUjNka2NvclkrTkVNZkRNM0FoNExiZ0hPVHlBSlZNY0c0dVRKZlNmUG9PSUUrL2IrZjZrWktoVSBCeGRFVGRYejRKYWVmLzc1R1p5bGNaNDVIM0VXVmNpd1Y5bHY0ZzY0VlZaL0xXZmFENG9VT2I0T3g5YnE5cTFQVmVuTzZjbEFHaWs5IHRYbUFsYmF1dmI4ME1LYStROTRyZDg1Z0hUcGs1VFFLMEJjWlp0ckdMSU1KYUx0dit3SHdQdXdJS0NMVEdSUG5xNTZBWkpESGJLSksgVENyMHkxSTkzR0pRQVNMRjJvNEdPNmxKaCtRQndkTE9ENEQ0eVRGcTI1NC9kZ2UvL3dCUUh6NEVCeDJnMmRndVNYVFJtcnBKeWEwViBRbGVxOE96aDZSTUdTaElGb21MNWh3WmFmUTVnL3dBOHdJVHZ1ZTZDL1k1NFFIdjRBQnY0QS8wN0xNaDBQWHcvNERScW8wOFRMYWZVIENKYUxJQnlKWWROc1pURjJoZ1FtQnc5a2J4YUVOSGJXQlNncDZ3emJvc29xTzdCY04vN3VnT1B2d0hwSzZtTkdoUjVVejFyNmlYVHEgOFdSbGszUkxQZ3BkSklZMDNvZ2lTUjhja013TEJYZlRBN3NyQjBUVEpESEtVYXRxTVpiS25nNWNDUWc5dmo5OUQ3d3MxY1YwZTFuZiA2bGtaRDVxTlg3emtaTGpYQmwwaksxaVJNS294SnQrRUpOcnFHdWh4eEgxSHRqR3JRMGo2UjJQcXM0MGQ5R0lNOTZNTTAyd2VvWGNCIGdPa1lkTTJXWmNGRThMdXhicjFYcG12YWYxQ0dhdmlscTUxQlRDREtoekxzc2dQUjVqbHR3VksxQjhFWW9yL283aE5pQVB3QS93RFggeit3S2ZVb3duYkJ0NEZyZk82aEJrdzluam9mcUVZOGNsQVMyNjJLeGdVSU15UW9pR090U0c5cndML21SL3dEbVppUzFoNmZVRk5yMiBLSGd3WXJ4MC9oYjF3MDMxSXVTRWxOcnBxZjZyZklZMlpkRi9aT3NpdllZR3BZbG50QWRmbVh1NHA3SXRqb1NyV2RvS2J1dHJBekY4IEdjNUNHdWNnQUIvRStBUWZjQXlCWkkyOVNlYVpKWnA1QURIdVNCSkpkMUlua3pYTGJNaFVOaU1ySnhYcGJ0SE5KTktVaGlXTGFpa0Mga2g1SGpqamlhVkVydnpFWUxMa051NnlmS3dlcS9EN0xVeVd3MmN5TlRHcTFjdlZ2OHh3cjFiYUlyRFkvSlBtTGU4ZGt4OXFRZjRzUCA0akh6QlpGdER3OG5PYk96eWc4ZjkzNzIyQ3NaU3E3NFJ3NkdrMXpWYTJlYmM2Tkwvd0FGa1IwaEQrVkVzYXVRNDlQV3pESVlEajZyIGc4Z0F0VElUR05IMWxINXNiNThBUVFEOWJ2bjhZMjhFY2RjbGQxN2FHYUJOMWlUVzdBczJweVNmVTY4SUF5cTlLRkhCZnZoUFQzQmIgbUQ2M0JUeUI2Y3libXJ0Q3o1dXJnbXdQMkhnSDRBQUFXS1N4K29TOHltZFhPYm5iOUZzaGJMRHp5VGZDblpFcW0xNENydURoZkRoMyA0TU9CRGxTR1FBMnBEWnZGOG1SM1ozU2Z2MlA3QWY2R0xFSXFLNmVwa3JpUnR1U0tTR1Y0M1JvNmEvYUNEa1BjUlhiWmt1Vzl1UEZNIHJ5SkhKeEhVYlJ1ZXhranlxTzZheGJYUy9qbFZoNUF0M09KTmxxUzN4c3p4SjNJT3lUeUV4S3R1WFl4VDhKMXUrSWQ4VE1GdWVocDYgSGVDMnNzMVgwM3VmM2J6L0FQMWZ2Y0FCcmRGMlJjRWcrTHlzNDJCemJJdU92UTZIY3dlWERxV3VXRThlVDJCUE1WWFpESVlJY1Y3ZyBjcVR5YXoyditqMmliK2d2MzcrQTREMDFNelRuRFhLYlk1VjBudUsyMVlSdGhxKzJxTnJlTE1GeFN6NHJ3MkNaVzlrT0V5SFlFTkhQIGZBaExhempWKzJMTHdFQ0pMeHYvQU4rUG9Pd2RKOXRhTlVERzhXcGxSYzZyU1FHMUJsT1orVFRLTzJZdVNicWFGNmpGc2ZwdlQyUlAgRDN3UE1BNjB1RjhWVS9iTGtmV1paQjNZa2hEbXdBRDZDd0h3QUErY1NvakdQY2hsbUdtWkpJU1lwRVRaQzdyT1hsamlsd0RvUnRTUCA3amxoYTVnclpORHVwS3FJNGpCMDdka2NiWTdhaVBIakhGckpidnZ3dGN5UXFyTlFGZEk0ZWVGemlJZElzMExac2RjdkxQaUI0cXZaIGgvRk9mMXg4RFRVT3lHRndPZmx0cHhKTFQ0cmVjOTdycXhBWUFGdWdBRDlzR01sbGcxK1VVb2NNNzJGUlZlbExJdHAzcll4YlZMdTkgYnlqeW5iVlg4Z1k4R1JrVDF2R2FjbjEveXB3SnN5eDNmUm5mRDZPZzdBZjgrZ2RQZlUrTzlDdGJaY1ZCckozcFdOVERHcGNyMCtMRCB1R3ZoRTArQVVJT090UVBpaUdHOC9MVkorTEJZejR6NHE5WHJDeGhoZzdwSEFNTUR5K2Y0K0FUVWhUVzNHMkFQdGtuRW1nckNRSGRvIFpMT1lGNE9VaXhITGpmekZzdXlHR1JmbUhGTGliVnhuZEJsbUUzai9BRlVBSVA4QVFQMkJndU5wM2pjTkg5TzhxU0pISmx1NDV4dkUgeDIyVlkzcmNEVklqZUtHTms5TmsyQTZpSjkxQmp1S1Z4dkdXR1ZlY21yK0poNFB1SitLSW9odzdGcVY0YW9EbWVKWE5wTGgyMDdtSyBycXUyQzNBNjR0ZzhCaHVESk1UM3lHeWR5SUZhRUh3NGhMTDFWNkd6YkZ2ZTlnQUFEWU9mZGI3SW1IYTV6TTdOdERPK1pBbWNUdmdsIFoxYnRrT0x0RFI4d2ZENGVZNWh4c0hCNEhPZkNieUx0QVo3YjJiT24wRS81L0hFLzB3bzdJNlp3czlYeG00SC9BT2VrMmt1MkErRHIgSmlMYjRtcnpSS1R5SWRrY0ljT1ludUU1U3VBRE9oOFpGNG8yK2NLcTc5ZzMvd0EvMHBaR09VR3R5RytNY3lOdWkyYlUyQmJ6aUNSMyBHVGU0MjhFV1JEUTdJRFF4L25xUElRZWMvYUZuRTRFU0xSUjZpZmdHL3dEbndIUWtxSlpwTWFjUXg1NHZMdHR0QTFoQzhqeFEzdUc5IHBWeW9aNVlyaVVIcUdPSWRxUE1jUjdzTjNBSDhaVmlQeFp2eDAyb2N4NUZyZDJJYmJYb1FsWHlUYUtROE95ZVBoM0J4ZUp6MURUK0Igc256Slk4d3F3R0U5Qk1FMGFoN2svcmJ1bGhzQjhBZjl1UDhBUzk1QkNjampJcFVpQms1T1VrdXk5VjU3SnFCaExpMmhJVFl2TUU4dyBZaE9DSnc4RzJqM3lkTS9hMlptKzdiSnNHS0NmUHYzZ0pKSE9hakcyM0xKZHpOblNaa1hWMFMzQndEMXZkeWZZd3RzeGFMczJkUHJkIDhocDZmTmVLV1lFTnFjTnpxOVhlZGo3cEJFYytnNytBNER3THJUTWRKcmF0OXFvdFBOdUYzRXRTRERYK2NTWDdZdFZOdTZza1BubGYgNGg5TWJKU1puNGUvWU50cUdMTWVhdmZPNWp3YjdwSTUvb1VmS0o5eHQyWTRtTVFUVm81bzd4ekVlQkJxUlpZNkxFZGwzM1VzWmFuaiBiSjRNcjljeDFKRFFqN2xPZkVadXBYKzNzN1d2aUhhRisyS0gxQVY2eG1SdUo1cERqVlBjbmFPSmZFMEJMdTVOWkY5ODdxV3BXOTE4IGJzYnZCUFZRNk1UYUZjWUxCOEpkdWZXNzkrMkFCajBuNFp5M0NqSm5HYXFNVnVZUFRKTXNQWkFGSDRlVXRwaGkvRDQyNFRIQ1lISHogSjFscjZpMUIrYzkwT0RQQnZoSncrL2IvQUZGdi9JQUY2cEFlek5PZHNETHViWmkzcDdxOThrdHFPN1p3ZUl0dERRdlNsZXEyQnc3ViB6S3JNRC9nejlTR0FOUVdVWm9hQm4rOWppQ0FmajU5K2Z0ZzZTYkptVVdwTDlWb2NWVmpXMXFnbVhHSnNpMnM2UmNZZXBhNTFDYVgzIHdQYUV4UGhvWmQ4WUE3eDNRUFlMYXlNVjl6R0hOamRrZCtBZm9BZnRndDBOSkpCTWphalRTelRRdmdvZUdUUDFJempNakRFVnR5Qm8gd3dKenhMVXRZOVRVclBHME1Nc0NacnVoZzBQcnNYbDMxWTkvcnUwY3FOSTl4MWt2YWI2RmJFRjBtMjJwVDZsUTlla2h0bG5rQ3NwQSAydlUrVmdVYUJKUXBWYWUrc2poU2FIRDU1OEJBYloxa0V4aXR1YXljN28xZGdmNEN2bi9ZL3Y2cmtaY05EUXh1VTBUSC9IS3lVQmVxIGNhMUVIY08wT1NuVXZKRTl4aVVtWW1NcENZcWdhL1JQSms2djRNakE3UlNUYngvWDREejlSQUhZVTJPcXV6TlpwcnR2enVIZHFuc0QgV0F0bUVneFhOb1VnMEhxckhoN0lwNHhjSElJZGpjZUF6bndtTUYxZXNqRGp0ellIaS9lQXFNQnNIVWJJK1BiUytCcEtCTUNYQXVOUyBsTXRBYkRyOUhtYWZaUllYVjZlNExiSUdtc2tJZ3lIQU5nTm9NUFdiUGNsWDhtQnBOWEJQdndBQWY1OGY2MWJucHdSdTI4OFdlRXpDIHBCbnQ1WjhuUDJyajdjYVBtK0VxT2RUaHdIZEZNWC9NMjdvNTJNYXpQR0o4K2I1Nm5oZHFQakhVZGUxS25WWHBMMDY2b0E1dStiWVAgWHdyM0dubnJHbWFRRmRrY0REaFc3Sk1oa0llTGJxQXJPZDk1M1FZemMyQ0pOVjRuMEVCc0I4LzdLVzBMWXNTK1hBT1V6VnNiWjJiRCBXNGl1U3M3VHZVOHlMS1hrSVgvSnpHUXduOXI2ZWFrTWhBT1lyTnZ0RFN6STFWcFBhNDRBQUgzNy93QStjRWV1NUZMV3haMFdVZUpjIGp5Sk5lMkRlVlB0QWxrdTZLcGxLSHRRZXlkaDJRTjhBeEIyK0JCNE4rWk9UZmRxVE9mdi9BR2lBUCtIUkhUOTBVLzNzMVF3RmNhL3EgdXBza3QxbFQ0ZnQvWVRKS1YyelNxMEdSME8wdzRlRzRKNjNPYlY5OGVESGl5ak1pcEJ1a3dmbjM2M2QvQWZma1NZYVlUU052T2dlRiBJMWovQUpGenlMQnBlYmpXaHN4NERiSmZ1YkxnNHkrcElqaWlVT0VsbG1jak5CSEZHWkMwY1hidDFnUXd6WU1HVTJNS2VDMUFWSGVqIFJwN0FVdmI4TWs0Yk1ORVdCRGQ2dkU0L0ZZVU9yekRpWW1VT1lEaDdBWks1clN3SUNyYWl6eGUwRm9ZOGQ3ZURvUFByZDhBZjM5MXcgRzNVM2dkdmlvSDNQV3JUS2FJd3VuQXZhZDJXRFh5MXA4UEpLeGJTMG5zd2VXWHArYW9OL2JVaHQ3MjlWbytQbUhkUTNhS1FidDdIZyBPTy9lZnBSVjlEMVBZME5rcm1LaDZrS3JxODhTU0svM0lmWVZjUlFObTdDdHB4aUY0ZFByOWJCY3dQMk5NL0Y1WGEzZzMvUVBuOEQ1IDhBL2dMT0I2anVPQlJkY2FrUXVjU1pmbUtkaEJoeDd1YVlwSFVaY1ZOZ1hCZXF5Wk1NTWt4d3RSSHVoZ250SmtZTXdGMll6QWpZVzcgTVY5L0FBTmdRZmZwYlJLWlFwZUZKb3RWSktqU0xxcFl4SHJzRkdFazdDSnBCRkRLa3NjRHZ0N2lOSXdHQ3RvM25rakxSN3hTYUhUYSBlWkl2cFZBZlJ4TEdIUDBtTVlnU1FwcUROdFI0UXh6TmcrQjZwOFphQStvWXFSZlZYL2gvTjE4QmNpZE5YWWJqWHhYT3FSTERSeGt2IE9rUXE3VzFBMnAzUVF5eEZjRFo4Sk9na2ZRK1RRMDJNSnl1TERnNm5sQXgyUm5UY3lDZXF0M0ZnOHl1S3lxbk5UbFVQRVJ3Y1pNVmQgVTNFNE1CWnh6WWtMMHJrOVpiUUs2V0RGSVhyak1RNldFQkJSa09LYXl3Y1FYQ3l4R0dUNmM2NkJmVk1iV0xKU2JVNUFXRGpSckUxZiBISDdQNUhYRWxZTExJc2cwbTRzanErV2tETm1yWXRiYjRzM2RtaGZjYUhGYmJZWkFia0xNV05QUTZsY0xHenFCcWUrS1RBbzd1NEs4IFZzWjRyNDRXblpCaGxjSWJoTWF1NkZsMVg5WndmQ2JNRFNkVVR0VmVDQ2VBSDdkeFFldHhDbjE0OEhtQVJkcGtxWjFCUTF1d3NFbXMgREh2cU1QTU1wbld4NWd3eHczRG1HQVE4NElodHdXVmxXdERBbThCTFIvN0FmWUtpQVAzVm5GWnNrU3FuTVpWZkRLdXVEdWRwdmVDSCArQ1lMT0ZjdVRCU05jM1lud3cvSk5ucThQQkFFTGFhclVXWGtvVXZJWmdiMlQ3OGZmZ0I4L3dBZ3dRK015cXp6SUJWMWREalpMYzdQICtJOVA0T1dEbEh5Mk4wNGZNV3c2MnQ3Z0grQnB2dmpFenRqUVVSdWNjMi9RQno3L0FIQjFoMGsyN0dqcDI3WG9rRm9ueXdBSWE0cFggeHUvQjhmQmJuSHNhclQ3VE1GVnpESTdQRVZNc1FGNFpEMVlWenExNUhqbXh5T3E5MkF2dWlrTDB4dG9ZYUV5YmtxV05mSy9hdHdWdSBKZkVOb2Q3R1RvZmV6Rjg3cVF4NWdIM0FRMm9QeVlvTEdFK2JmNS9Yd0FBK0FQbnlTM0xJWkpSQU9MZk5QWnZUMitYeHg2MEpsa1dCIExaSlN1V3B0eVd5SEE3dGhoMDl4Y085Sy9BbldRc011b3p1Wlp0cVhaL1h4OCtmOEFmNnhrTVRLcU9OVmFnU2JJdDdDUytPWW1KOWggTWhSOEVPVmM0c0ZicmFHWW1NakFIK0FRZ1FjTzJaVGRDUnczdllNL3o0K2ZBYkJzRnFGL0xxU2ZEMkdWcWNKV2RGSlNXRytDUUc4RSBqQURZeTg1U2cvR3pDZk1NTWhDWitMOEhoazhvVTVNY3E0MjdZZ05nMzgvN2JCcll5eDZxQTl3U09HU0FzKzdMaEg2ZTJBaVF5UmtyIDMySlVOMk1NZTY4eW1OSVpIampoNzMzSHVMRkJJOVpNNzVISEtoaU1UNFBTWlFubU8wUTY5WEJkTTFLbnBvRUlKUjdJeXJZdm5tU0ggTGxBWmcrR24yUWh2bGtNQ0djVWg2a3EzWXpkcjdrWmxvNEU4NGdvSjkrdDNZQUd3R3BReGx1OXVQaTVQR2trK1ZNVzJ3d3F1eGhJZiBDbFNzSXM4eU1CaERyZWsyU254NGVhaDhTUjRaUGdiNXhrNTRUZndHd2JCNS9xVDR1dEhrL0piV013Z1dFN240MWUxKzRXRjI5MnZrIElGTlcyQ0dZMDl1SDE4UEJQTUU4SGhwNlp1QnJQNzNpODcrL2ZmOEFwU3JjeENYRU13dVQ5eUFTb2FRSlQyUThIWGx3OGg5MER6NHYgek9SeklmSDRiVkFzQThEMnhaL0daT3EvL0lQdjNIL1A0eXlSeU1JaGduYUJIQkVGalFnODFHc2dqUzdIc1JNdnV1Z1Yxckk5QlpCayA3STZHVmpjajVHTTI3c0RJK05jQ1NScUpPT050a2VJZVpZREhXNTRnK3JlRFZWOHhrVTZmSlhBdnk0ZElnYWNQQVppZkRaTGdoMXVuIHI0ZEh4MDNvYzR3c3N6UmFDejVzSjdZYkI0Qis2a215c25nODhFLytIaFE5d1U1WnpRSGJSSWRKaHRNUXdVb2V3aFlEVGZZRndUTEkgTU1rdGdobzhCZjAwN1B3Wm9WLzdKYVA1ZFFVSGY4ZUFnQW1PMEVISndkbng4ZkhkVnRBa3lXRUhTWHp0bHoycFZOWGlod0MzdkFkayBEL01ya0N3TnRjclF4WjRHVHJNSFYzQ2FyQUlPUEh6NEFCc0FHSHJ1MkZldjdhcFpEZG45VlNMT3FXSW4wUE0xRUZsdHlPcjBVV1lIIDF1SHNpazJRUGFBZmdaQ2ZPRDlqV2kwTnNCaE1NY05nUGdBQy92OEFoMXFuaTJJNFhFYVoxRzBlbWRjOXVTU2dwTXRqMUlNUzgwZUEgeGlEeVpIYnhiTkU2czdCamVVSWxFM0pNbitYRDR4djNaTmVWVUtycTBRaU9ZbjJRZVhOaGRqRDVwZHRHdlU0OE5qMkVuMjFkenhmRSBwUEliT1paTFVodUV5Y2VUejFxSjZ5VGFLdnFEZkRZUktPQUQ1LzhBb0UvajBtVmRzVDR6SllSUmN5V1RDdER3U3ZYQnFoeUpjS1VMIGlTbWdPb1RMSURwNWlZdnJVSDZHOGJtTUtORlprOThOMWQ5K1A3K0E1OGZBR0RCVllQVFNsMVV1WHhNTm5tUkpmNGxYa3IrcSt3a0kgQ3JMelJWNjNhSGVBUFc2ZStPQ2NjQTJoODViWmlmRjNuWStiWFp6N1lQZEM0Q2Y2a2N1eU8wdHVaSXRjVUhiNVdjTmJJNGNPcnNOUCB1VW9zbWk3Z1h6Qmh3VzJWREh6RlhjSHc0bjBiNHVvR1o1ODJEeC9vSCsvcWpoWTU5enlLbUZMcDJ1cXZZTG11Tm4xTWVEbm1mYmp6IFJiY3BIVkh5N1VMcmtkdzFpaThpdHlqWjVySGdFOVFXYTZBNHRaNTFJcEMycEdMQno0enVIQXBGZ0ZvYjRtdTU1WHRSd3RTdDJTazMgd3hYL0FJQmduMXpnekxLSHFNV1JoenphT2dnTi9BYi9BTC8wRXBiUlNkYzBHWXNFbytVUzRacGhibGtOT3FUYUNSWkcvQ0hKRGNIRyBIRCtIZkFlcitLMld3VXQ4d25lWlJEOEh2WnZ0SHNGdStBUDcrMUREQUxwdk1wbUx6eTJyT3NhbWJhN1BvZFY4aFQ4YTVLMXphSGNEIHVwRFpQeCtIc2JGT2djYjNNV0xKN0hzaHdIeUFCL1gzZ0ZMSHQydjBqVCtTcVYzRHJjdDhWWXpESXM0ODhNSWNvQllTajQ0V0E0SWYgNHJaUGh2RmFXQXBWV2gxbXNpM3piTmtkc01UNkR2NS9ud0RyUkd6MmR3dWlEVXh1WFI4YURocUJYSHVQYnh5T2lmbkVEbDluWWlYOCB4cVZ4R1grVG40NUxFOW9IUUhNajZrS3FxdjVXYkRRTTh5eWFoMGp2TVM4TUJxWCtIU1VucDlQcmZkUU80TDdJam9aL3VveUUzbm5oIE5tZVhiWkhqbjRCQjREaDFhS1k2TWk1TlpEM0pGSmtZM0FiWVNQcUVNTkZlc2dCTitYWXdjaXlJZHFWV2g3Z0huQVNFQ0RXNk04MWYgY25HUWJzYjMzMzM5QkFlNS9wZXZpMndMcmhNRE1kNXFWbkM2ZnJjc3I1ejdIZHk5b0NtRURGMjh3dG9iSW56UjRmbmxmOFZtRThFTSBYWm50YVBDZm9PLzdBaFluK3JXa2hGRUtKTk8wMVQ3cTA0b3JhWXAxMWY4QUp6WDZweTF5UHBWbmZSSTROanBaWmUxdnE5THh4MWVnIFRWcXpxZGZHWmEzMUpCK2xnd09vREY2Z0I3MDQ1NUdpbGFNT3lRSktnZGhwWHB5VFZMdVYyWTJTRGkxMmVCWExJWW5IZkN2ckkrMlogYjVkMWkwNlJxRStOd1J1ZmNjZkhkNTY4OHBGYnZGZ3lCc1U4Tk5sN0JEa3BaQmtzNVh4RGxDakRGRnpQaHA4eDhRNWc5Y3RSU1lKNCBPRXpmZmYzdjM4QitnRFlOZ2ZDK2pRejFiNXpJcjVQRzFkMkNLWkE4ZVg3WVpMdXBHWDhXeU8yeWU0V1FZTUQ1a0JTY1lBUDZ5VUdFIHlmTmdpVDU4OTREZnovU2xIdmtlMVFlVVVybVpaQmhJVzF0SWFDUmpqMzNLaG55Vk1zQ0hhZFZtR1RoL3dYeGYvbkZoR1YwTlpKOXIgc1hjNXYvNGoyRFlFRjhWMnZ6TEhTN2diWEtaR1pBMWV0dGV5TlhUdlM1WU9BdEJVaTIwWVh6RkR2aWVocDQvNXo0UWZPQnN5eTBVMyArOTcyOFB6OC9BSDd3SFRaRnhzMzd5UFNuZ3Q1c2NXVzVkMGZ4U2JiK3czVmR0Mk04TXpERXFNdHp6dFQxamlRZTQ3WnU3NDhWUjgvIEE0NEw0OE5NQWxHaXdwRElocERzMks3dG5ML3pLNVBGZ05jOHZEek1aaTNEWDdnQjFLT2ZEbkIxbERmS3pLY0pTUWh4QjJBLzkrZnUgb3hncmV3VkxNSjFlbXJZd3hrM01OU0pGdEFWZEltaTBPNDBPTHVIQTN4a2NMVVgrVmNlZk9ZRExNNEdNV2FyU1FnU3F3REFBUWZvSSBEcHk2cFpBdGpxdXR3TmN6Qng3QmJwd1NQbVozYjF3akhXeERzWncrWXlHSHUxSWErWWVBQkNmQlpPYzFlTFpoaHhKcTdZd0d3ZjhBIFdvajZtMC81WmllVXRxMUNsVnlWVnQwNnFJbVFCSkdHd01obm9ndTBBN2dIb1p3M2l0eUV4cVBXaGRNN2sxNUsrMkl4eEpOdXdNK0EgQUFFRkFmdmZyUE5PelFLNFI1c3NrUUlaVndySFpoTzNMSGVWdjN0ZnROSjhGMEtwdU1tU1IrMVdMdHk4YlZtZ0ZmTkFrMmFJdWpkZCBEWnlzME5Oek01Y0FvY2JObmdmTVcwNE9EQ1l1NHBNdVJEWkNHOFBuMXZFdzFBVjhEOHpjK1VFdk4vZVBQZjVQM0lEQTRjRDROaEtLIFptS0w0dURSckNyalVPeUN4Z1dzTUtIS0RwNkhEWktUTVFzQTRPeS9nS3ZCaGdzb1QyUGU2dUJud0IvK24zN3BoUjQ5cXR0RDBDR3EgQmtvcUhaYTNHYk5QNEdqWTRsUGFMYXNJRFl3ZHdtV3B5UVB5RFk3TFgvZFA1TlY3NHpERWZaTjgrZzcvQU9md1BxUWZtcHlraHk3byBXTGdIQU1xbWtpa3JaenBwaDJVS2x1MWRlM0tHbllWeE1xQ0orOXRrQ0JCcXduV1lzbU5ldGw5U1FjWUVIQUJqdndFLzFvZDQyVUNRIHZVbTlFSWxmRFBFeFd4Y3F3R05paGlmSjU2RldPZUNzblpzVFdrUWp1dzlLUmsxKzNocjQvSDVmNnVweUo5Z1ROUHJIWG8yR3J2aHEgdlVja1l2aUpNQTBrSjRiREkreTNNdE5ic0J3VllDZTJndzdOeGRvV2F6T2NKTm80RDI4QStuOWdxdmRHWlhkeU9GdFp0YVRHU2h3MSB0S1VPT1RyMnYyMHdMRnl5aWJNSDJRdDF1K0dKakI4R3kvZ05Vemt5RUxaa2J1aWJDRy94RjFZb1doNklJdFJ6RHp2YWxmNStyUWxmICtueWhsQWJTOFgrSXZTL2h1Z1pQWk85cmV5U3lEaC9FdDhDRERaV2E1R2haWjhPRTJod0lBZnFJQWZ3WHp4OVAyQlU4Zk55eVI1V00gMlFTbnpLSzdnTW1TMENROVh1VlpGS2xSSEF3bjkxRnNPUTRxK1ZlcFZYeG0zL3N5eThhaC93RHFBUG4vQU8vMUU2RnkwSmZIT05vVyBkTU1jTERGQmsyYVBrTUpMWDJrWS9nWkkxNFYxUXZnNk5ORkpjaHpDY3EySHBnWThqdXpKNXJFVzVnN1JiaXZSOVlvWjZ3clJ6azZwIEcySVFReHBBU24yTWVySURGMjh4RHRSYlpPUHVGcVBsZmI0NE0yMXE3TlpscWNKZHZjQndIdENBMzhCVjF4VDdFTXNtU201dGtNanQgbERZeTlWOWIyUTRNTmtORGwydktQbmNoRG1HT2VEcG1DSXZvWndPVC93Qjg3M3ZoemY4QVlFRUJzQy8wd2lqQVVvY1daWFo0QmJociBic0VyMnYzeXQ1RXN3K0FXRm8rR3dNYUhjRXhrUXlDR0RmVStmT2NDZG1JYXVUR2JJYlNBYUNCZnFFd1BnT2VnTEZWWFlHWlFWYmg5IFVzb3dTUFpvMVNzMnY0YnNIbGgvNXZVRGJTZVBtUStIOGJJT0FNOVh6YWppRmxaVnlqTXplRU52SFBnSEFRQ0NmdzZRWmpRTWtUZDcgb2ttWXgzUzN0WWNHc083am04aFJGRHAyeXdZcXM1V3UxbWpla1NRZThPMzlPV094c3lVM0xTZHZIVk0zQmdzaHR0QXcrTkVNYWVhQiByYTJFTE9WYlFsc2t0TllISm80K3QxdTl1RU9xOW5OcVh3RFljWXpiV01XUWFUK20vbjlnL1lPbzE0cnBMY2pBMzU2clhGYm1UMG51IHhuR0NNdm5oNnpYS0tZVC9BS2VoNmtNV0N0MGFBNEFkNFdXWlg3bUV3WnZaQVhQdmJmMzczUHVEVm82QTFLeEU4elZXZHE5UEJyQ1Uga2d6cHYxT3ZDOHRwcDdtU0c0cDhPMUZ1WVlXeUVOSW4xL1ByakJHd1EzM0g4bytjMkIrNTlnQVFYNUJXSU1nVjA4T0IrVVVHalZyaCBNbGhqektmTU5oZUxWeVJhRFF0MmhEUTN4UFc0WkF4enlCVXNGdzJ6dGV6RTlrdEZKZU9mQU1FSHdHd2FrQUVDSkFtM0NiSVNHQ1hmIGtrSlVUTzBNcXhad1RSRm8xVlpEbmt6RXJnQTZtU1paaTh3M25pbUVKYjJGeWFLTlhmampJa2NtTm04S3lGNUIyVjNYZE4xVllsd1ggVEZmR1BKdk04M1RIbTFHVjRFdUY4VktKRm9ZY2Z3TmttVEREQVl4YmNMYTNkNUdLOXlMVE1jd1NBbS8wR2ZBYytma0orNlRNeXpIeiBOcGRrTWdjbEFyZTJ0T3BzVElzSUM0SkNIVXA2d254b21WL01UMlRHeUp0NFBtL1lvYlh5WkZ4S1Ztc280UUpWMktEdjc4QVB2M1ZqIHdXbkRWSFJGWjQ2bHE5QktLdFZXcVpUdmxXWE02cHFucmV1YlF1S2lHbGF3ZldRdmFxR1hzQnc3WjFBZVZLc1dHZ296ckxNOEhFa0YgajZmMHc1RGdBWUt2U09jVU80V0ZYMWc4YlQxdzgvcVlDMDRka1dFaHlpa3ROY2pDL3dCaCs1REhXN0JhaU85MDhwSTdLems3a3VSRyBHQTk3U1FmSDc4QUgvWUIwbEZEUm5IQ2VHS29HV014UnhuU1JjU0JVaWhYYnhrTHB5MG1XSVlZV1ZJc1ptS0syY00zTlpJT1ozeHVoIFl2ZHg1SDJGQjdyNHNVcG9lcEFXREd1NzViVlhOUXRwVXJOdEFid2RJVzJpeHBZdXI4VjhQM1UyZERyOWs5OEo3d3lXYldiNFVKa3ogZ1RFMy93RHVEZjhBcVNnVWVRdHE1RSt2cTV1Q3lCdWFlb3FYZkJMN0R3TUE3cTdrSDVneUp3ZVpNSUIxV2U0d0FiSjcxZXJrK0RoUCA3L2J1L2dBRDhBQVFNeXM0ZVZiR3pRQnFBSGJZZFdxWS9USGJRYUl5SzhXd3BRc1B4c3hDcmVHSHNCYkIzU24zd2NtZGpXaTVGbFpSIHdsbzdIM2RZT0FvTnVuei9BRTdHU1BYYmJZRmtIb3FTdGphK2NCcnZmQVlOVUNtNEZFUFRnZUZ3eDhQZUpoZ09QVDY1N2dJbGpUTnogVjN6Rm1Sd2lTRTJBL2dBUDdBZng2a1phTklDVnl5VUYxZ2h4ak1kcHN4aE16aHQyL2RiYm1YdFRIbHJrSTdLNjBocGxESEoyY2ticyBqdlM1WjBsTGlNQUc1TjhWTEhwOElxbjF2K1dvMW5WcG5WYzcyQlc0ZWoxTmJLUGtRQ0JjR0JQY0pscWNrcjlieDA4YjY4TGJ3ekZDIGd4NU9KS1NrZzkvcUkvaDJpUWovQUZ1VjFObnE5WEpTcStzaGJXMmlZU3U2UXE2a0szZHpCUldsaTJnUFg4eVo0Y3dRbCtQQTZqSWEgenVqUWpNeHp6YU8vSDM3QUJ6LzdBYlI4dTJLcWtFcWJIL0dzNFdTTmlUR2M3T0ZldUJROHBsRHppNFZ1WStaZGdkUDVWMnYyUEFadyBQY3lRTkpkd25QajRERDc4ZlFlb0daZksvbW5GVVd4a3UyS0dodjZsSEExV2p5dzc0cjZaU2lIYWg5d01NbGJ2aTI0T0dxaXRHRTgxIEdCbW9Vb0xXU2U5NzJEQUlBQUJidUlEcW1rcFdiWlNTM01xaCtiamNKaGdhL2trd2JGUHV4dklWMFVVS3M2bmZtUjE5alozeUFDT0sgSGlSSTVQUE9HUEY1Q3EyclJ2dGR0YUt3Y2tlNmFRcFlhN1V3cVBFNkdxNm55bEorbDlKdVoxc1o4YkNZNFI5ME1UTEhjNXd3cU1XRyB1M3NNMkw2bm93cVNaSkNKZ2FobEpNbk92UnhacUtyTHJSRUIyTzJQVXNxQm1yczJBbXptVmV6b2JTWVNNaHRaNVFCblpoR0ZYZ0RnIGt3NSttYkljc3pCMGpTM2c3RlB4RzVvS0VDVEZtU1BWblhPVCsyWTRsV1BadkFCTCtwMG91Z0JkYnhxL05XZjlmTmFKUDdNaWFSMlEgMHJNV1ViT3FOQWtFRG5UL0FLSFN3bUtka2FmYllNVmZTenRKckt3UU1rc1F5V1NtTHVET1FFc215bHNlNGR0MlJ3VzJCYjM3Q2ZCLyAydVRHQTZUL0FNOFFDRGpzQUVCMVZFaFg0ZHlVNnhzczhOcTY0TTNPcFNKYUZoVml3TmdldWJRbVcwQnVDdjhBVDN5Ump3RHIweXVZIERoQW5RbGtZcnE3TXpWWDlKT2UyL24rbVF3SFY4T0x5UXk1VCtuZ3dMMDZ1N1lyc2xoSzloV1JjaWJxRUFubVFnWGh6UTRmNmZCUTYgdUFuTVdZbXI3WjRQRUxzSFBuN2Z3Ry85WFkwNzZVM3dycC90Vy9mNHFHVFM3ZWFxZ2M0dFJic0JlbUpxdTJhVlNpR1BtTGJnSDl2aCA4OG84OEQ4WWg3bVRPVmRWL0J3Q0NmWCtmQVBBZENXWDZZUE9naGhsYVlRYnM4VzNHOG45TUZzMnh2dStEWDc2WEdBeklqbDVGS0k4IFkwNzJZOGozQnpqemVLNG5qdzNIeDFWR3N3NmUwUjJSM3FxcGRuWElkZ2N3V3pGVHNKZjZSYlZTQitlQjN5R3QxV1FtY1RyOThnOEcgZVVOOFpsa0drbWtud0hQdUEvcjFQSjdBMGFtMThiUTRHcTdJc0pvVzMrelE3SnFRSHU1aXg2NWJJdDhHTFF1SDdnSG1iUEJnWWQxTCBIR1BPMTBiWm05dTMwSGYrUWZyMGdhWG1SNVVmT0ZxNEc0MXQzaHlhOWVHcmk5WkljcmRtaE5YQjVpNEdYaDYyd3ZnT2Z2MVZvWk1ZIGhxeXdNK2s3SHY1OEJ2NERwa1NHQmd5aGNPVW0zQXlhZGNybXBZeG5XRXZpUTljeG14TktUSytXdzdndHc0ZncycHRYenpVSEdjWFYgMlpHT2JKdnUvZ1Q0RCt3VnFGK3BaWkwvQUx6QzZuU3FadGhHalU4d3l5NFNkbnR5R0hmeDdjZVU2ZVZFS0IzY2FkZ2Q4eHhic2d4eCBDWXhacG5kdGZldGZ1K3JPV1Jia2pUbXB1Qm5WQUhHa29yNFNseUQxcVdSZ1lxV3hxeXRDTjlQRHJiSkRoOERCSHAvQjJSNVpsY1gyIHpPTzJ5TzRBKy9BUDBBZE5RSlZDMmVIOXRBeTFSUzJlc0piczI4QTU2d0w1bTBPaHk5UG9GY1g0YTJocDh2YnBpT0JZYTBuV29qTTEgWU5LeXM4SnRHcm5nQXdZOEJYejcrQkFWMWFGcXlOZGFIWVNicVd5VnRrUTBPN0Vob3VCMk1DZUd0RVMwTEdyZXY2M1FrN2g5YnI3NSBZejR3UUFZZjlSZFFmU01MUjMvbjN1QUFiLzBtVlBsQXZXV3QyTTdqUWxrSGhzbFRwK3BTV3BCSU1WS2VscHFhSG4xV25wNWluNjNvIDhQMjArcWgvS0lmbkRleDcvd0NmUHZ4OEJzQndMR2lQSkc2Q1dGTXA0MmpFeGo4QkFJczAzczZlemxIZ1I0ZlB0ZklpRXhLaVNycEogWENSQmpzeU43Y2k2VStPTmpFWkVuSThpdVNvZ3laWXNPQmFFaDJDUThvd3QxazBEYklIaVpZRm9VL2xNbGdCekZKM3lINWg5U0hxUSBPWnliN01UT1dqdmZBVjlCZm43d0I5K2g0WkRNbFVQWVMycmdYOGE1SGpmeUxJcVdqcGEycjFldklaU0hWOE9IOE5QdUJnbUk5dC94IER6cklacmc0dlVDTnZhU2J4UGdENkNBNEQxWldldFBoMUpzMW9VMFJjcjd1RVIxTlQ3NVhaSW5DSm91WHlnQjhJYWhFTVFvV290RHAgY0ZTVUNGT3JiTldoWGtwSUZkYVRhWHY3SUFBQXdJSFZSUk9zSjhwTy93Q0pxQXBMU0tPemN5UmNTU09xc2FxdDFxMmRNb1VXbk1aRyBXWlQ1VVY2SmVtdkxZWWI0VlRCUkd3OVRJVVJqZ000ajhnUU1WOS9YejJQVGxQY3gyTjhyS3R5NEJzOXIvTGZaZWY4QWliOGVPdVpWIE1rYnVOUFNMSVl6TGpoR1NOeVFOaDZzWXBjR3hUS3p3SzVncm9zUlREVWVxb1ptc1Z1c1R5ZU1zS3RtU0haRm1yWXUycllUWEo4ci8gQUllR2NFOWtIaDY1clMwYWxSdU04WEtQQXdIM1JDVlgrLzhBL2dOdXFUaDJKWmRoMC9tMXpMdEVDK1ZXRUUwK3RtR0NXeUFWZVh3MiBGWUFkUGNIeGJ0VGtpT3BWL3dBcVF5Wk5YcHNhVC8wVEIyNmdnRDc5OUIyRE1yVVpxRHNWQ3M3VWhxTGRsSlZBNmtHMjdsZE9BUml5IEdVUFdhSzFCVEsvaDloaTlicDdoamFrRGdkY29ReFpxOG04azlqL2Y5L1h6L2dEL0FGdWVLN2FLZ3RDR2tObnlheGNsVWxwN3FkcWYgTGdZWEJ5cHVJZUZ3MkF4RFE3VWNPWTluSUZQcVNxNFZCWnVuTldabGc1YUtTN25ENER1NkE0K2ZBUDJSMjNJSklwU2pUQkRHNkk0bCBoYU5zZnFvNURTYjBhQllnNjBtV1E1V3Vka0llS1ZkUkdIVkZhTm9weXUyOGVvVzlyYU5zVWtKTFUvT05EdGErMnBaQjhlSzV2QzVrIGd5TnIreUF5VEdZVit3anpBSk1haklyREtLTWhCUDFJZnMzelBnRVBuQjdNUmtNbzgxbURDR3phUHY4QXdEd0hWdExRNVJGeTRkalYgZldNbk90b21nQ1k5UHBLZTJCNVVWaEEzSXRqN1U0MllNVEI1aFYyNDhEbWV5d0xSaG1QZXo5T2ZBQUhBZGc2OC9xSWFRK21CMHRSWSBUci9yZEtuNnFHeHIwL1dwVzRDWk5GcHJDVFRIdGdlOExJbUI0WkF5MUFWL0RBTmdpcTc0TVdmdXFROGI5N0g5L3dDcnh5TlhpblNKIGhWSzJnWWtwODlrQ0thL01pYVo2bk1TbGVwNHNXR1BobUErRU13d1lOUS9sdncrTVZkdG43SWI1OStJdC93QWJkUGdEa2x4TVNMbkUgOFRpUm80M3hqYU0xdE1xWW5ETWg3NWJ3T29KRmtqa2FSa2tSa3dqU2FQS2VJdDd0MWk0eXlwY2JBOXA1Nlh0ZnNFY01ubUFEbG5EYyBrOUNVbXhIZkJyeEVEbm90VG5wUzNWOVY3eGFpZXlEME5xN1h3RWJiRm1tMWRaNE83SkxzYlA4QXR2OEFpZ3YzUmhYOU5haUtxdml0IDN6SmhtNGJ4c2xPQjZmZkdoZWg2Z2lrUVdVbU1CaGJXM3g3N3dRNEo0ZkFOekJuRjN6L2UzZ1VFK0FBQVAzOEpoM1E0WExVN0pGc2EgWUVHMW9CM1pITURXQXNZcmx6dm5tY3hmNWhEdUI4bUQvd0FsajBPMUZ0WXdReWl5VDN2bXh3L3Y0REFCKy8yVnFkMFU2dmNLM2lrTSBpTlNlbTU4RzNHdlhrcTdTSEZpMkhhN0kvbkdRTzRmck9uMS8zSFQrTWkvS2QwVWtKdjhBOStmdC9BQUFCSStHbWxLd2I2TG5QU3B1IElrWUtpUVJTMk54ejJrSmdtWkhsYTZZWTR0VHFZaUh3cmJRT3krcExJaHRFZUxJYldWdFJ6azhIampxT0lSN2dpMXZEZDJNOHRKOHUgem1TNDE5cXM2UkVXbkt1ZFV0OERMZy9pZFRrOWIwM3pNVnQ0YmVld1dRblVEUlE2eWpjSjRUaGlmeHQxK0FIMzQrQTgvV1JnMUFOdCBnRXRVQVpKU1lZR3lIWjRvY2tlVDFOUFRhbHIwODBRN1FNSWFHdHJjd2h4VTlZQUVGZzg5bTJobUduVGxYRy9QZ0QvN0R2NzR1QmZUICs2bHFNZEJjK3VhdEdRMjJSNjNyMTNMU3owcjVWOFRGK1p2QzJudmcrWUR4WUxMbklZemEyaFplWGkwamlTajhCdDFCd0FQMndBSTEgNHFyVnBRVXV5YVdUWENyb1l1d28xZTJnN2FlNURZdE5GWHJ6Ull5SVBEOTFJWWQ4SEdGV0E0UVBoOFpmQ2hObSs3T3p4c0cvdngvbyA1RmpidU56dks3eVNCdTJSNHdVeWFTVHVMYk5qRVlDOXc4am5yRkp1S3BTSm5LUlFpRUt6WlZtRjlRbWhoR29YdmFqajIrZXJMTDliIHgyM1R2VXJtK0dEWjYxYkNKeXpBMnQ2M2lNa3BYWGdNcUhpeUdMSVpJYmg4eUNoL1AzZ255aG8yejNOaERmUGovd0MvbjBFQnBWZzggeWpid2FWY1c3SU5lSnVNbFRUeDJyT21JcUUwUmNGY0Nuc0VSOGIxQmtERHpONFQxKzJ2aDFtemJYaGpqU1ZYTzNQdkEvd0JBdndGSiAxblpIWkhUSloxSkMwTW1OaWhqVmUyQnpZZXB6VmR5TFJhdjlyZ1E2SG1XUk1YNGNDQVJubzh4bEpJZTZEUGQyTisrRy9uL2ZnUFduIFVvVUIxODhPeGtXbnFWU3JpcTJwQytIMFpoN2p0U25Ma1hnTGxESU1qSjNVbUo3Qjg3aDdhOEdDWk1weVptUi9OdkFEZ0cvN0I1OU8gb1Z4R3l4U0NSODJVWkxoSDJZQWw1TGJETExnWW02SnY0NmVGVjFqS3grdGdoZVhMaGtsQzVSNDQ4WGlPN0krQ2E2aDA5ODA2SkJSYiBhSjdJN0hvc04yRXVEVVlEaVppSFk2UlVzV2F2MXVITVZ1WWhzQ0cxVDdBd1ZWc1h4Y1h6blpPRStBMkIrNENlQUhsanFJSUovd0F5IHZiUVRhM0NMZFZEVzF0c2hQenBHenlybEUwMlUxQ01HOGN3M2dndHZEYmFDbHlRWCtMNmdHYklrMWR4L1lOLzM4K2ZBTWhEcSt3SmUgVzdhZkF3Zm5ZWkRaSWcvSnJmaEV6ZEphdXJzaEdIRHJmN0o5SFEwOEZ5UjVaeWo0ODI4ajkwYXQzOEJ2K0I4K0FBSUpzcHg5T2N2diB3eGtGV3lERGtlb3FJajAvVlpoM21OQ0pYcjVZeTJQK0c0aDVnZGc3cWdWL2UvSnEvT2NMVVNVbXJjRC9BTC9sMzhRbnlaeXdScGc2IHVkaUV4b200RXlramp5TFpKNTNjZ3VQMkVYellFd3N5Z0t5WUk3YWdPNXh6eDI3UUNtcnh5MW1yOXQ4ZFZLL3hOTUdrSFZublk2YWcgSVRWUFdEczJzTGdoZ1hndC9NdGd5S2hqNWlHSDFIMG0rVituUW9EQWV1SmJaeGd2SGF3V09QOEE3QU1mMFAzWXNsZ3RTdEpHbytCYSB0WTFkWVdVdFkwNHZtSHV0MkZPaTZmZEtOU2xJUUF2RFFxSE1PS2ROUjIxUHdoTWlOcDd1VEhBbzhIUGQzZmZjQXdZZStEQWxDT25OIGJnWlJLMWNwVlFFNXpQWUNXQWw3OGthQUphVitQeEV6WjF2SDVsamNmZ1BHRm1NL2pDWUkzOTRBSHo0RGZ3Q0Q3R3hpUkhEVlBWZDMgSHJhVzBPciswdU5YaHpBWjNjT0J5L2lPRmdURnN4ZGlmVzY5RGdxUTlEbko3TldhdXJFL3V4dEp3QWJCNS9mei9WbVJYa2pLbjJaQiAyRnBJc2hDaGtRZ0NPUEd3U1k0bHpzWkR0RmFJRVdPQmhibDQ5Nko0cERGTEdUSkdZbFpsa2lhd015UW9LM2lWSk4yR2NjbVpoNHhpIGg1dWNTSk5GaHBMWlpFTkRhSWhpMExhbHRLdUgrSERoek40WUpqVStWZTIwRERHTTR0OHN6WXdsWGhEbi93QkFBYkJXK0hYY3dOV2EgVFl3RXg4UE9tU1ZNd0JtV2dKUTRpYnVrVmsrSUg5MCtHdncxVnRYeUU3azFaaXloUlo4MzdjQmZqL3VBNEFmN0FaUmJBcTZvWkRIaiBaSXlTcmRUTWQyakhEMFA1WUU4dDJBWXNsUFQzQlBBVFB3ZWVhbVJuWnNSWk5tODJFZUFBRFlOL3dQN0JpMzdORlozOFVzdDJONXdZIGtOWGxmSXprZVd5UGtvUytORU1nWStHeUdKamd0ZzhQZ1Z6Q0oyK2hxL25VbndlL29JRDNBZWZPRGNGZW4vSnl0dC9UK3h6eDk5bmogNHg4bStzN2NzeHp5N0dlc2FySEFWNVBuUC9iRWlqZDlXV3FCTXRqVXpucmRmV1k5aGM0bzFWTnFaUnMycGRRN0FvTENkcDd4bVRjRyA1a3RTcThGbE9FWTFMYjRFSFQ0dDV4eHhyTzFNREtSeUQxZXJGQTlMN2lmd3E0Ullic3QyeTZWMDlhWUw0dFBLa3R6OUZ0bXBWWFBLIFJLOFdWUFY2ZFRxL2NUSmNMNldKZXhzZ0dncVZwcldGbUlTcmVBckgxWWhRWjYzRjlmeFF2YkIrSzB1djZmRlVmL2l3TElaTE90QVAgR1V6RmhOVGhYdGtPVXBkalNwakJWZGtNaGlZdHVDRnkwaDlQNU1VVjFsbUJtd3VuaTFEK0d3VzZmOCtBVDlpSWNlMzZYczk4dEMybCBzTUdUN3NxZGZHb2E5SzVsZHpZMElaanR1K1dSRDRkczV3OFFxWG1IN1VNR2ViT2Yvd0N2djNWMXBpNENxbjB6OGFXT1JMZU56VnE0IHNZN3ZITm4ySGdqanFzV0NLV1lGbzNXV1NTQ1cwa2pRVXpCc2U3Q3hRb2U2dU9sTFI5Z1NIZHdHeE5hV3E3YmM2cFJ0OHlNNWJIcWMgeXhqeFpvdm15V0NIY0ZiektIY0xBV3dmNXBlQTR3WVU3UG8reUd3aHdCNERyMGFXM25tNDhPeG9SamhPb3g4dXdTUVNkUGJ3d3ZuZCBCZXJsRVpGOXdEbUE5MkxaR1k4UUdCdGFzQm1ucTBLdnFBbmk3Y0p0WHord1lWRjc5VkZTMGV3S1F6S3gxYzk1Z2xoV0NIc2lJUFNYIFpmWVZ1eHBRbVZGTUVJaTN5TmJtRUhFSnQ4QTRoOXpOMEdMTHdFKzhiK0EzL3A4QzdReTJNbTRIMDFWVXBnYnVSRXZESmFqRXVaS3MgYVhZMTNPQThPeUo4eTFHUWdZK3Y4NGNkc2ZPRFBQaERhUDhBWUQ0QmdBYyt3UklZcEpHZUowV0ZxVGhzNDFBcmVoZVNoaGR4NHZpYiBwdTBZOHRqV1ZVSWRYejJaV3hmZGo5TmpIdHVESEttV2ROd3c3YUFCN3lldEdZdmc4MURXMDIxVlp0QTV1VFg3Q09McEpndDRGVEtOIEQ1czZmRHA5YlR5SDhoVjg4SHVZd1h5ZFpCbS85djRJSDcvMXlDN29NVWlqdFhJdzhrOHBIcTNxZDREclRSRS9GOXhwa1d5R0F6RFcgN0lXOXdEbkxNVCtLbU9jQ3lneFo0U2IvQUgvd0dIMEVBemlGYnlJQytITTJYREc2YjBqaEphdHpEdGVHSEErSmxObklyZGJ2a3REbSByOHkxQjYrZWFnNHp0ZTBERVo0Q0d6Yng1KzNUL1VQVGVuOWJjbmpPZ1JYQkp0UzdtdGtzSWhiVlkxL0w1UWVySUNyNGo2M0RzaUdoIHNwQndzWnR0Q0JZeGp1WUxRLzZKMlQzZi9Qcit3QUFDOXRBbWN4d3ZpTVZlVG1pRVBJckw4ODhmQnZvUnVLekZWU1pGUWlVeUpqSkIgRzJGeU5IYlY3ZUZ5NzZKeVd1aWxUT2FaMmk2Q1Z5TytTLzFXTGgxTExIWkxVSExCOVFVVmVBMUxNQWM4bU1qaENUcXJhanllQitZVSBHY1g4R2srRFBZbjE4L3NDRDBvRmNmRE1sQTZhNTJSS1pLbHpySWQ4WHlHNFdGRHJsb2xvYVlZN3FYQlc0ZGsxSWZEQnR1UGJreHlaIG9WeGd6aE95YkFmQWVmOEFQOURZOUxjTTV3YW0xU0cyUlhyNW5NbHgxT3RubDlkVHlnc1NCS0dQaC9ERHpGQ3IwODUvSU5Sa1l6RkUgTW16SEVrSWJPSDlnUGdEL0FJREJWMXVZT1dNNFRBenZuYWJ4b0d2VnQza05XbGZVUnZENVNLUTBOQ2RhS0dIREIxdVk0US9uci9CdyAvZkpZdVJHWm5qelp3Q0E4QWYzL0FHQnlSTkR1bDVNMFNGSThxeDI1UHNsckkzVnQyMlBQdUhucUF4a1Jzc1hZenE2dG1MYmJ4c1VGIEZlOEc3UFBOZkhWakhCT1RhQ2NtcXJqNlVsTWNnQ1d5NU1LUW5YQlNkaUNZQWsyS0dtaG9uMXRUWVFIWXpac09QUHc5V2ZIV0FhMGsgai9SblpVRlRXd2dtUGt3Y3JPdWRhdVdoNjdpRXF5Wk5FdW1tL015dDJac1ZCbHdBdFk5NGlGZDhIK2hsS0dzNDRtREFPU3JoUjZSbiBHVEpmTFRvVUdLVHpZYTNsRFl4aGhPTUdVV241dWRBOGdEc0cwK1JEa0Z2cDZzZ3FMcmNOWGZpei93Q2IxSkV6S3JDYUZRUUNCbVRRIE9QRjhYV1g0SGpxc2Q2dEVNcFE4T2V4Z2JSQXdMSFNWTWhhanRWK28rSEdQTzc1SzIreUErTEpWYjUvUFQ3QUFuRTlHZVNndit5ZWYgZmtBQUFBSHdEOTFhalViWUY2Wm9mdVhFYWttNElHbS9TcnA3cCtxMDh4RVR3QjdDTVVXN1JUNGJJSHNoYklPRUk4UDVWTVdTZkZ4bSB4dTkyY0hRZjArZzcvakR2RDVEcERUL2Z5NWZDUzdOV295dmh0T0dLWlBCMU9IRlRaYWJ6QWdubUlka0dHVHpsYUVGS3VlQ3ZJdDhaIGxoSC9BQmNENENBNTlVU0MvSDM1L2FpS1BiRjJ4RTljaXZsSm5vR2RUZ2tPazUwQjM3dFZ6WVNhMGNmbUlhZlZaZGxINFRqMWdQdUogaFpSbGZFbVQ5a2tJRFBzQURIdEZzQUJCQm0wbTdCQVdRVFRJOGlSVHhSSkk4Y1V1a2ptbWhFUWozSUl4cUVaNVNmSlFLb3NucENDViBvcFpUSXlWZ0hWR29vN1dZa3V1NFNVNEJvWTQrR3k0U2FBUUY2a2E3c0k4blF3bFB6eHRYRnUzdW5zT0pjTHVGeThBTnc0VytucmZ6IERCQmIzNnY1NFA2enp3bVQvd0E3VUFBTzBXd0FQUHc3akRqNXJyTWZMR1E0eWZTTXdieGREbzFYckxpNVNzcFVvT1AraDF1K0J5S0cgamdWLzRMZ3pZb2F2emxHM3MzZ2Y1QWYvQUdEWVlkTFg2M1NKQUZEZDNhTlNlVjJjdGVPQnUwTzczWUJLTU5vUGo1WDdJSGh3K3lmSiBBZExFSUZWODVSbWdxekxKeXJnanM4WWIrQlA3L3dCYVZzNWFGMHc4NWN5aHBKcXlwcUJadHdEY2lRMkdDaUd3MXpHVzZ2NUx3T0duIC9WVDFmMW84VEdibEZvRTlqTmhQUDdBQXFML2YycUpvbFdaUStxazIzUUswam1ONUl4SERISElXcHNzOXBteHIwell5ZTc2SmxsYU8gQXM2RExPbGlPVWEwWS9hbExnVGZQSnlGRGl1cGpUMnZzbGNrUStyN1RkY0ZTUGx2MWozQ3JlWlc1aFRaSHZWQlh0RGdIelo0YkkrTCBjd2haQnhTWUcydVlmR2Zvcnp2YVJWencvY0JQL1h6L0FMTDFnZkxRTXNDZStOREkvZ2JhdUIyczFmUEVzZVlXMExVeno0eWozQ3EyIFNxM0MxSEF3MWRuNTZvdGpDZlBIa1p2ZXlQR3dmMkRrSFdSR3RrMGUyb2xhb0sweEM1TGJXTmthZkhjN3B2c0N3YlRUcFRZK05HbTkgd0RXUStJbUlnZStOVFlQc3EwekQwOHZnd1lTeDRUVjV2ajc5aHg5K3h4d21GTXdidk9PSHNGblQ2dXlURmhTYllNV3IrVFRENVY3WSA1TkRKWUQzOHg4cC9qOXFOV25qVC9QNTRNR0lhdU04SjRNKy9MNS8zNTkwSWtrajFVcXZwcEJEaERXc1ZzODZ6dUo0c1JVa0ZqS2JjIDlmY3ZiaTIrOURSb1VLN3lMTWpzRmpmdDNJKzBKSUdzMWxSdGNUWEhjYjZrdTc1RGo1NVhsR0xSdHFoNjlaR3V5SzlpZlc1U0pYMW8gSGxzZUk3cUtCaFAyZDRBTUNIQlhCdkEyZmF3ZFhCTWNYN2dMOEFQNDcrZjRoWWJWZlVDbzMwU0JvYkJ3clc2eU5PNmh3OUtOTU9FMCBQb2k0eXloUDRoWkMweUo1OFBZL3o4V3RaWlNaVkNHZjZYNG04UGZBQmpoZ3dIMnJXK2xlN0RJRE9sVUVlSkI2MHArNDZucWQyczZ2IDVhZWVLTHlHNU1nOURRN1VxdHdjQ0VNSFBYNjB0UlBKckxRTFdTWVBZMGtIdjc4ZzcrZlA0QUNRNWFsYjNjNlBtd3NqdGY4QXFDeVggYXdrOTJQWEF2R0ZoOFVxbHFXR3dNaTNaQ2V5SjVDYXF0dkxZSzMzZlYxY1pqL1l6L3dEL0FCQy9BRGsyNDJhU0cxaGtkbUVnNTljNCBmVGl2eVBVNXZuampxc1hrZ0djcm5CRWpLZzFISWgva1dST2NzdTBxY2hoVGNObDIxWFc0NldoMUhjQ1E1Wkp0dzFBcDhaVHo2cnRvIGd3dmxqUGk5VjljdUpDeUxJcmRQUXNYQ1pCZ09OdFU3TVp1VWJvVCs3VmNEL1lOZzgvMWFpdjhBZzU1Y1ZVTlhBMzZxbEhadFlZOVYgcXRzVjZYY2hjdVVlRHNEZzRwL3pYREFPcTdlZU5tR1ltaHE5WjdHYlNmMDl0LzRDL24rbHVwa0NBRzNFa1hLVkF1L05TMnBvL2JHdiA1YklVVjE0OUxocjRlcTF1RVlaTjRhcmFYM3hIWkJneERWaGpOL1d4emY4QWovNmZxZUNsdkxYQTRlcW5Ka2xXRUJWZjVnUFRKaGhNIEs0dVc1VnpaSkJEMmQ4Y0Z0Z1QycUFRVW5oa1ptWkRhRmw1ZDdScE4yTi92K0FEQUJ2d3N6eXF6WVAyTzBxaDF4d2tmQXBnYlBweFUgY0kvZ3NUbHowMk1xMGNZU05DNFJRVjA0enRJL2ZJNTdjY2NseFdqbGJkd3JsSm5LblE3dVUwOWpQS280UGxMWnV6YW5hdTVEWWhpMyBOaGxWTE1JT0RJeUljTjhzQ0h2emczSS9PU2l1TUorRVNIWkhRVUhmKzBXd2JBNXN1djVESFY5bmFYejFieHBpR24zWllWOHc3VWoxIGxEY2oxVDEwZXJiOERyVEl0OGdRN0dCSjVBNVcvSmloUlozenpaejlQMkErZndyb1lCMDJya1h3OEdBdTd0bEFUbE9POE81a2RUREoga3FYWEt2RFg1bHdjRFEvcmFxZVlFUGttMlBuQm1iWkFuc0FBQUFIN0EvSDVtMUxJWU5QcllrMi9WV1NORHU5ZXJlejVPY2pxYkhGaSAzZXJ4WHplRENITStHUDRPK0w0RTNNSjdwaVNKZzNZSlYzL2Yvd0JnQVNSNUpHamQ1SFpJcmtoWkd3dU5DaUdKZ1EzOUtTUkE5OGJsIGxlQ3BHT1BZM0l5ZHQvVWdsRlpaSTJJWVhZckxqNE5BZlBUQzhJZUtzZ0dkWkJzYTI2aWlVekVPU015NWtYVG5FZTNLRVErWHM2MnkgSjYzeEpmclFIZ1RyUEh0QXpJNXZlKzBSOUJBSC93QmdRZmtPeE13TTZBVE1xenVFeFE3SkVrSGc5ZmxyVWZFM0VDZTdQcDhOOCtHaCByOHlkV21Da3F6TUhrbytJM0IvTjBlZjhBK3Z4L29yWDA5bmloK0cxK05kcnlJTlQvTURJYVNZNUdMVjE2eGxjUGFFeE9XNGI1N3JkIDRBYkJuZzF2NkdoMitNQm16YVNqbi9QL0FMQjFKV1E0VTNGcWRiUFpUc01QWFNZdEdJUVBVYXZyMHhOUTY5cTlEaC9NTUdJWmlHbnogWGlsbkE4MUovR2VVTExNYzJOSk9IMEczUUgzNWd3NldaZHpVTEs4alN3eTNDRlNPNzNNYlpqbnhqWGFLN3JQSXJsZ0NCSGpSTWNjNyBkVGxISVl6RjdHcGJ2UHU0N2VQT1hDcmFhalRMcFI3NFRNck9kdS9HVGFQc2t2aVFwc2lkVXJGVjR0a1R0bjFVVEVNd253NTA4ZUIyIGRHR0luR1VidWlETjcvdjUvaitPL3Z4aE1ETkZhQjJyU1hjamhKcVVva3NqQ1l1Yk9JcWJJVXRHWGJRdW4wL2dZY08rR0dEdHpQcTkgOFZiSmVXWllWL1lIai81OTdBSDVCNkpMSVI3QUFwaWVabmg3MUQvVzJ4Z2NBN0JMaG5vcW0wSy84NFlXdzZmRDhIUDRIWXpJellvZSBMTVRlRFFUL0FOajYrd2IvQU5Pd3BSWitlUXRydmRNTjFLZXA5QVh0VUMySElYRzRNOFZzVFFNTWZEY0E5Vm1XUnd3YW9Gd2R4b1pSIFp0Q3J5YXpzbUhnQUMvOEE5ZzZ2ZFFTUnRPaVNZekdlT1YxeStua3RRQWk4ZW1PTUVzWTBlVGZGN0RDdHJCT3hJNU1Zd0JJZ1BkbjMgY3U5MnovNWJvMTE1K2xMUU1ZTGIyZUtiYXQyT3lJQW41bWRYOVpHTFFxOHRZM2RSZURwNGVGTW1KN0lDMDhWZTJ6cGhNWXJsUDN6RSBKOUMvWU5nUDllalRRaDFFRnNDbVF6SGNCTFZSVjQycnJONUlOc2lzb2RqV2d2SG5LNEI3SW4xVkRjRnR2WkFRRmdnVG5EK2w3TUpnIDZ1MlNxL1lBQTU2ZlA5SXhrTDNGbGFOYitTa2l6RWdQcC9Mc2NXeDdCc3BYckhDcjJtMTd0VHc5UE9NUml3eGZHQU8xS1UrcHArRkYgOHBLSXd3SGhqL3k0WTFGdi9QY01jSytCMDlYNHVTeWp3R05EaWpZeW00UXd3ZGVodEVWZXNhWFNhZVlXakJlSHVESk9QcDU1cVc3TSBlZXpkWmt3Zm13ZUZ1Z05nUWYyQVpXYWJibEVtM2c4cVJTZ2VvYTJzaWtpbFpJdnR5Q09NdmtuRmFBSlVsSXY4aUk1TitMdWg0NXI0IDZQTWN1cXhjZ2JsWGRERzJRbXJadXdsOE83RDdDTUZBTHZTSlJQSWZObUJtU3lGOE8xUGxYdm1IK2poUW45Sk43SHYvQU8vOEI2ZkIgaTNGczhoMTdLLzAyeWlUSXcyQmNHb3BnaVF6MTMyYWh0RTFmY05QZFZza3hEc0QyM0d5K05vek56d21UOTZ1ZGtmNi80QSsvQUFDbCB4QjZiN1ZWM1ozVjJwQTB1MnBDSmNnbVY3WDZvK1JXaGV0RDRmdzZyVDZyVC9zaHdFUWJiRzNQdWg5bU9KSVRuQUQ3QnYvN0JBcCtqIGN3R0lXRWtacGgycCt5NjNDTmp3SFEyaFQzUkRzMlVyQjE4eE1RM3d3bnVESnZ6Z3BVZHlaNWFPTXMzbTlqZmtIMlFkZzJBQUxEY24gM1RLaW9heUVod2VMMjFhYys3bjdoV0pQVEhXUkl5UWFSMGphRitlL1RuaU1WWXJIdTVzM2ZBRldRTzRMSXN4dU1OV2EwNTJtOWsxRCB1MXRSQTdWY3hCZXVCRWxLYjVwOURNS2ZjSEpPSCtDcVcwRzBHWVJtWjdxLzlmeWlEN3UrZjMvNkRJMS9wRGJLUkY4U1VuYXBiYXRWIHdaTE5EdzBOUEVvWlFvV0FpNmZJOGsreVRONVZKNUE5ak0raDhaWnZ1eHM1L1Q0QitBQUQvVWRNMUVPQ1JZRXl2bWpKTjMrRytTa1Ygdlo4eGZZVU5EaXU2dlhLR1BEcmtPWW4vQUFIQTRlc0VDMVROelZ5ak52bnYvd0NmSDhEL0FFN0Jkb0lCUkhTYTVLTGRYQWRTMVBrcCBiQU5jVEFreFhQOEFFelRkb01qQXlXUlc1Z1J5RFl3T29ENE9CU3pGZlVZODRIQWlTaysyL3dENy93Q2ZCSjJqTVNyQThNVDdWeU04IFN3Sm5kZXRLOFc1V0p1bEZEeUJZNmpSeHlzWmhNam9qc2lpUzRuN2NieVM1TWZJb1dmSG5wYjFCcDBzUVU0WHhtbEFKc2F4bUttTFcgdU5tRjBka3B1dVdHdWFsVU9lUTNCa1FqQTlibnFSODhqaUJnekVxTUdXcGFITlFldzRzSHRnd01IVENIc0FmS1gzRGdWR3NsVmNQYiBhbnVCYnVhT0pmRmZSRzJSWlZQcDlWbUlscUtENG9URGxMM2haY0gzck1vK2NHT0JFazJEUVBmbndBOC92ejhxMGRvZEUyUWVQYWFiIGFzaFB2aDJiUkpqSnVhT3ZQZFhvY3RFYUU5Z3VCdzB4UTBOOElNbGl3UDRlR3BiMnhDYU9UV3BqZHFTRCtnZ0QvVWs2WmEzWUlmVHIgVUM0azIwNFpwSnNpQjNEbEFrT20xeWtJZHltS3ZtTGQyVW5UOHp1cHNJKzJxQk1kc3hkTmpLZ3RUaFBCL3dCZ1Avc0Q4K1dPVjlTdyBlazAwcm1WWmRMSk5GSVhNTUVVdjFCbDA4ZS9ISnRSc0VYSEh1QmJrRWhFNlF3U0NFb0pvNFVoWnAzM0kxM3RVUUpOTytLWEl1K1NXIHJ0eEE1M093MVEwOU1uaHgyYnB6aExkaFpSZXJ5MW9QbVRXLzhRYk8wVU9MUG9ZK3E1bWpSam1Ca0N5T3l6ZVFCNGpGaG9WN2daVWEgcjlsd1lOL1Ard0RERUJXU3N6S1cyMjVuQzJpbVdUT3RzUGdXYUtmUFYvTFcyaXhuWjhLUXlBY09ubUE1aTBKaXFCSUh1U0RGbDhmTyBNbkVsSjJQWUQzLzBDN0ZmdkVPdENBRVhwdXpuWmJUWWFTN3RGcWFiM2lJNGRwUk9xQkREajBPeUZ0RGh2bG9WWFhMNXNQMFpsMDUrIE1PY0pOZ3orSG45ZytnMDVxZXZvL1lzUG05c2FCRHowbGI1Uk1jSEN6UTh0WGJKUjZZUWZERndJVmtUTjRPZHdMTDJjbWpDMWRtSisgRWR2b0ovREh0RjUrUXlLNjdpczZoNjdwSThIZWlQZEhrMkZYeDNOWUo5dFYxVXhWVFNMU1JWaUFja2JQRDJ5VU1zYUFQYnh4MXVNSSA4ZktTekJUTnZoSnJjQ0JqYWhFY08xR0piNStRcnVwdXQxK1lIcmQ4aG1lSC9Bc0E4cXNuWTFvRjJZTUI0bXpad0FBOStmSDkvUG0yIFpXNkhkeStUY3NVK25NbXpBNjN4ZTdPOEhld1hZMVR1UXNPd1RLZm9kYmNJYS9hbGM2aDhMcEJwN3l6b2ZKaGlPN0cvZGZBWXZ5Qy8gQU4vUHVZSHdQS2oyMUFybGxTVS9EVkZXNm1qV3A4ZW5JY3Q4VTNLdVRDZmNGVlBnZXEyUWdHZUR4RDUwTW55aG9lVVlIU1lUNkNBUCAyNi9lQVA4QVVDMlZQSmJWdXR4N1FCc2lwWExqWmE2RlVQOEFMMkpvZDZsRjJRUWhvYjRZL01ENU9zdFBRNTI1dlBLR1czK0U5cnQvIDdSQUY4Ky9iQWZNekpsRzBBUkhqZFNyaGZVZVExaEhJd2J1ejdnclVNQ0NNV3lOUUt5cTBNd3QwcmovQ1NMODBidjhBMjhmTmpwUHIgYXZIbEw2cWtaVTFrVDdMTUtTOHIyRUJ0aFRjTDVLQ2JIbExmSkVQVEduek9YdzdHNCsycXBpczJhbXI0d3N3R0U5bmpZQUg3QUEzKyA0RWM1cDZQTDVKWG4xN2JTcTd1RGJMWUpqVTBKRnFJYlJwbFF5ajR3Vlc0T0RKdkE5UGVNYlFxYXh1TTJZK0ZHWm04M3Ztd2IrQS9yIDdxb3NOOGRIZFRKV0RkT0VhMUVPeldTc21peUNXNzFYRlBYSVVQVEU4TytQa3g4WEhDNEVnRGdlQnA1UDJLREJpT0VDV2phaUNBMkEgQS9BQUhWaE11MkZPeGltZFpkUVRXMVBEYmxadDhCMlMyR0grSmFMWVJTeG56K0c5d0R6RSsxQ0g1YVlKK21UdEFzdm1EeThuT0UzWiBwemZnQjhBQVBud0Q4ZlVzZHVqQnFTSzhJbVNKNDJ5eHZjUjBNWnJBWTdVY1BrNVo5dU5Sc1BWczRibUNsbDRrRVlzT2lQOEFibmFsIGpSOW80TmRCNUJmbXBEQWViVDJjN09FNnE5cFJocnRJRTRQa1VTcmk0YmdIZkRGd1VuTStIWEorZStJOHpja1BqT0dPeUJFZkUrZzggK2ZnQUIrNjNHREF1dm84T2xpaTNHYWpORDF1N3lHck9ZTm1sSGhOOEM4TFA0MitXUzRJYmcrSExMWDU0TjhHY0R0RVl6bkFuZytBbiAxOUI0Qy9QM1NIVHlFaDN1QlAwdDl6bEprc3h3QzhIUEdLdmJPNklGM0dBS2ZJZHlERkRYeERJVnZRSjRlQlZSSDVRVjdNZUtyN1hPIDJ3ZTNQK2ZXNzAvcTd1eEw0dm42ZnJCRDM4ZVBCNjNYbGVwYk90amVKVVhUZytIc2JRWk5RbGJza3lrN2d3T0hrKytPTnJOWnE5eVAgTHp2WVFJY3dmcmQyQUFnK2Zjc2pSOENWOHpXY2FrUnlSMVdPNHRQN3VjZWZJWS82VUltREZDeU1pdXlKTkcyY2NtT0FKVTB2aXhZNSBxL1BTeUhNaFlxdUp6QkIwMUViU090Q2V1c3oyNEQ3eXpNbWFRZERnL0xuenN4bkJNNlM0R2xodWxDODBPU1loT2JuQkJjd2hQekdWIFhCK2xUUGd6QmpPb3R2cyswS0tJeGE5czZxWEd4Mm9ZTGg0WU1DdFk5YVUvNnN0Y2pZNW9sTEhIZ2RvdFMwNWx5a1pQRmc4MFlYbksgYTdBR3AwbFZTUVBwWndTZ09mRzNPbGhZS0hvNjF2SE1lZzByb2ZaeWo0cmtwb1UxQ3dicm9OeVk4bWxKb2tjbWp3YXVoZGZCcjRIUiA2WUJsVzBvQmxNWUZKcmRvczV0MHlvOHl5T0VPQjU5MDRZdEh2TVd6RmtCNzRJTGRqUGxQMFBZeklzckt1MGR6SGlyZ2dSSFB2d0EvIHNDQ2cwSDF2UjZycU5TSHZlVmF0d1ZkTVYzWTNFcmUxTENhRWkxSzV0cEljbk53WURGVnpLZnF0RHErWkJ1bnpuSjdmcHRvMDlMSUkgSUVTUVo5QmZqNERnTlJleTJGMzVtWlRBTkZ1V205U3RRRFhzZFRyZk9RN1FiTGdyQTlzS2FIY0lka1dRK1BreHdoNzh3QVdvd2pNMSBvRkdiZkRkWEpLT0FxTFlVRkNBSHdIWFlMekw4bnd6Q3ZQemdnMURtQkdHNkJyVXdOaGkwTGtTQllxYW5wL0c2M3RRd244cWJWOXRhIFdRV3MzSnB6Umlid2I1c2o5M2ZvUFBqK0ora2ttVkFrVVUybjdJNVloTEhoSERJZTFOaENUMlJScWtlR1E5b2JMdW9Qa2xqZGl6dW0gb0x1enlCSHJ6amlEd2FxbUFQenlhNDUyenlBdUxoa0xqSWRIUGRPRWlKYVN0MmFJVTIvQ201VXBObWZEZkxycFNZM3ArT0I2cjBOViBUeVpOOUtNMkx5NnBMc0RQK3lFQS9yN3FmdkJidVE5WWlmS2FLTkNVRG01eWtwMXUxRWlFUmFBdENRTHRxazErSDIzY0E2R3ZiNHBPIEU5SFhHWjVhS3ZGckowMjdVbWNQbno0QUJ2NEVBQVROeXhOUUZTdGtKY2R6MnF1WmFBMlNwby9HdzZQTUF4WllGeW1FR1V3dDhQRDcgeThLUThDRGhsR1pES2NaLy93QUI5KzgrYldwWGF2RnMyNXJRQW5wTmJtVWthNzVHZFJvL1RndHhTZ2lwZG5ZSEF4NGVHbnJlRGEzZyBUamgyelYyZ1piNXpoSVRZSDIzZVBvUGdPanZVVHg0elFwR3NrSXRWNXZjeDhoZ1kyd0NnOThiZVNSanprQ1lxQzhUdjJZaVNPUTI2IHljQmtaYTdNYUZHem5maGNlN3NoMkJJMU4zb00wNTNUa29GZWxBNmtwdEUwQ254SWFzVXNLTFY4d2V5UTNBT3RtUG1WeWgyQlBWb1kgemxEUnlaSWR0a0JuL3dENEErWUw3SXB0RmZnWjVTd2xJUTBPRm9zTWREdmdnVzJ0b0twbFhyZkFwbFB2dEpoeUh3UURnZXNiYytMdCBDTThuRGZhN2dSOC9VV3dIOWc2Y0ZpVSt5dmtkODFhUmU1RGhxTXNpdGxNaG5PR2crWStPVmNwQ0hhRU1ldHcwL1VKY0lkZ01JNkduIGdLcmhjWkYwNVVDTWN0R3JrbDRBSDhINCtBUDcvZ2g2bm92VGZsYVQyU2U1TlZYSko2RzIzSFU4TVAybmNYS1ZiR3dyYSs0R0ROVlcgcE1IUXUwdmFSSEQ4WmFCWk1uYW51RXh4QVAyd2U0QUIwbEhpaVNNYU9aSXRPN3JER3JRN3RUbmd4Z21TUHh4YmVEWTdSUnRyeFR0TCBLMnBoM3BuUTZ4aHV6UmJlbmJHc3RwMXVRVVJKR2J3NHBpR0o2aGhZOWJ5clloeFEyY3BhaElBZC93RERvVmdPNzRNaXNLdlVyZ1BoIHcxdXlGdFBjSVlQOUp5M3RuRjdNUm5qdWpTZS8vUWVmYkNmQVJEcEpmRnpWSWVYTlJsZStaWkxRczV3SkRhM0xZeWsydkFNV0d3VEQgUGF1SDVscTdmSWZ3eVl3b3NlY044Sk9mNUlPd2ROU1pYK245U0lMZVZaYTQyekRJRlMrUVNzNlBiQmc4TDFDWUpzTmhmRTk4TWZNcyBDV3FvYWVlbkIwWVlVM01ZOEpJVERmOEFZUDhBTUIxWHNmVmRQckY4Y2NzdkpOMlFoekxzaVNWdXdoOHRrVm5LWFhMNU5YNWpneVZzIHQzWlY2MmpnWENCQjNOR0tER1pHQjc1c2ZnTmczOEI3TUVTbHAyRW52aFp5Z2ptS1E3ZVBySWtTUyt6UGxXS1prOE1NVDB1MmRJSTAgWHNobWp4RzVFS3lJditSNDd2QWUyK2ZOV0xZUU5ncSsxYS9hdTFUVWNHMTh5dHJESDA2NXkrcDJSdWp2eGRrVDRlQ2VoMnFIWHc2ciBoWUZEZ3pGWk16UnpqWk5rNFJ6NEFmQWJCaUI2c2hWNXlPa1ByNVdtVWVTUnR3WHhxSG9mVWhTVjVMNWFxMWZhVHdzTzRCekV6amQyIE9CaWQ5dFZjRm5pNHV6Tmp4Tjg0MzkrOW43RkI3dkNxTzJMRjhXeHAxVGF2MHgxTHlSUGsyeFU1SWt3TmxiL0Yxak9XRDRRbVZ2RE0gQnc1QVBYQ2xjQ0dENU1zbExRUm1ibXU5blQ0QkJmZ0NEc0IvcFA2MUZPMUZkb2ZNMHp4TE9GMWliS3NCaW40NlFubEUxVHErS1pjTiA0VC81d2dZL240RmpUQm4xZmszaEFoeCtBSHo0RFlQUDVkUWtXc25oMEw2ZmNUVDdPc2VtR21rRTZTeFM2YURhK3BpRTRsMnBvOVVtIFoyNG5NRDRUU1NSdzZ0TTMwa0Uyb2ptaER5NWFSb1NZbUx3Tlc5TXJ5d3krbXRKZ1FpN2hacks0anF5RU5QdkM2U29JV0J6bjlWVjcgc2QyeHdRMXNoMkhUYTVzSjhLTGRYMm85aDRhMjRMNmYvd0NuODlPVDJZWVVReGF5RENZbS92M3Q1OSt4NnFLdjFmWW0xamNvWFh2SiBkSTJjRVUzQzJvYnhFc2dXNVJCWjU4SHpBNWhiTUdHQjgyR3IyMUgremJvak0yK2U3d2ZBYy84QTJEcUJydS9aYjRZUEhvdHdMZGtTIHF4Q0wxSDV4NTRTRnV4bkxzMTIzWVhCYlc2M21iZ3Q3Q3ZnWGhrSmpCZnVUODMrd2Z2Mi84OUpMQTFVQTVNeUhWVmVvYnM0V1Vxa3UgNENlQmFQWVhWOWhBU2hnZXQ0MlJ3OURIMXU4WUVHMkR1Yk1yaTdNckw2VHNYOWdRZkFkT2lidWMxamVLcVNkVThhb3Q0Q1YvN3pVbiBKeWt4VGRvVW5aMGttRUtvdDlsTFpsYmJlUlpIeExtR09LR0M0MnhBRVpZN1ZFQm16Tlp2aW1HWkVOaitacWltR1JzblRoWkdjWGVDIHhqUytWdTZrU2djZW5zaGlrM3pjRnUxZkF0UWNtc2k3UFdCZlpPazZ1QjcvQUw5aWZmdC82c2hWOGd4WUpXeUF6RzRMZWNrQWtCM2UgQTk1RDVkYnVYSGoyenIvQTZmZkxJVDJEZk9ZTnV6dkxQeWhaMlB1anFIUjM3dEZzRy9zSElOMGZQT0huUlBwdTM3K0pJY1d5UWpBdyBKSzJRaWNveHFoOHNhWlh4ZUhUOFJ3bDE4SHJtdGRKOXROVDNnek5BdGFKbk9FaEViNkNBQUh6Ni93QkJNTmtwZDNzUXdMU0szcmVaIGFwOWtpTkZoVEsvbDg4cEdzZ0t1aHA3SUdmQTc0SFQ0ZHFRSy9iWndhekdaOFYzbmZBbFhKUno4UkFUNEFBZzlSdHRXREJvMWxqalIgSnQyR0lWUjdETHRMSHMzM1loaE5tUVIyNG5JVVZxTENGTmw1SUdnQ1VoM0JFa29qTjNlZThBRzR4S1pVYzZXQk9PandwSTU3RmNjTCBqbVdXZVNlTDJvbjJRVzNXSzdpN2taQjhOeDRmTTIvQ0NCSHZpT3RyQlBpNnlNNXM3WWd6NER1NmYzOCtBd21KaTJLYmRoRnBGa2FrIEpqR3RraXc5UFQxZEltVmZkenZhQjc2M2c0TW5KQ0h6bTBlMmcyVERheGF6Wm14bXpid0EzL3o2RDU5eTJwRFc0RWRFc1VvWXFYVGUgaHV0MXU5WHBLcTAzeGpZejNRMkFLYVJXcGlmZkZjT0pENENuV0VCcXJkbldWaTQyWW1jQzRiNEFRV0FBZ0FHQkFma0tvQWV4Q0I1VCBELzRRZGJ4VXM1YlV5RXl0OXFaR2dYVTU1WFR5SHpMVTA5L2NPVk5wQ3BZSzJNdC9hOXpCNzQ3YytRa0Uvc0RBZlFjZGNUR0pKVEVkIE9YTXo3dXFrY1lSZ1k0cTYxN0pMYkpMN3lvN2x4NlUrYk9HbGpkMEgwODZiWGZJWXpNa1VwRWRpOXJkUmljdVNRT1BQVHN6Szd1eTcgbXlrM0tCY3kzeEtnVWt0SXNrOFkyY0RZMWhTbWg5SDF1aHVCaHdoV0RNVlorb0NlOHNuQmtPMENleHBLVGFJUFlINCtBQWJCeURKZyArczRENWFpdUJRM1pWdEJETjFPUWgwL0l0aWsvNXM2TERWL0RjSENaTWNMQTV4eUFDRHRUYzZhNE1pbkRic0U1OS8xQUgrcGkwSENHIFV2UVBZS3VuWFpjMVZVL0dpTUFFTzhObFZ0RmNGcXZGMlFRVDNER3gzQ1p5KzRxSHErNlVkUFp2OVRNVWMzOTQ1OXdIMzJEcEE1dHkgTGE1cVl5YlFWeG8zTzRSSmQyQlZBMC9aMHc4ZVhvdDNXUXdKOHlxMlN5SWhHWmFrQlBnVG1UazNlVVozVXE2MGF1T2NCUDdCejdmKyBscXF4S2dSRXdSQTZpTmJkOStXU1VoWkxHL3QyRkp3anhzR2puUzA3YmhOanZrckovTjRrVnh4K1Q4OVJzZGJTN2ZtUTN5dmFmc2lZIGVBeVd3d3lNa2l3bHROQWxZcXUrRUliNWdIaHpFK0g3Nzg4VEhsbUZxN05zZnQvc0VBQVAvUWVyRXJVejhicmxJNXRCSUxJWWNWSlQgUjZ4djZ2OEFVSmdtbmxJb2htRys0QkRJeHJiZS93Q0VFRFo5dEtxMWlqbEVQSDNTUWdWSVlFSGtEOGU1NmdMNlVlT1lKRmYweXVBWCBlL1FGWDIxYUltd0p1U1BFOHlRM2REVjFzZk1UNGEydHZoQVBjVUN2NTlqUGl5TTVSdWJ4Vnh1clhoQisrbno5UlAzUjRVck4wdFVnIGVpc2VjeWFlN0dzaFNiRjhrU01MMHl1UUlqVVpGdFFlK01nZmtsYnI3STFBU0FIQU9NWnlndEdXZDdTWGJEZjM3REFCK3dnanFGSVMgSjBUTmlydExudjhBQzI3cnRydDU4YjJtdC9FZnFuclFkd1YzSVB0YkNQSEdSYXlBN2ozeDJOdVQ3Y2oybStqWVdMdlROekVPMnNySiBmeHBRT2dTdWVUQjZRbmxGZFRmTUJCQ1lubUE3aUhJQjY1N2YxTll6aHdaOFYza1orcHZZS2lmL0FLRHNIWEcwRktUZDloRmxMRHNpIG1hMHJlbkxDc2hrUE5EdkN0cmFUelFZN3FJYmhwTFpkSlkvK3d6cGpNeXE5WDIrekF3WnMyRHg3dW9QZ0QrL3Brd1FhNjBNYWFZR3QgeW4zOHhTMlRKczFnSk9EUlp0d1dOOFRkSHdlbjkxRS9qYkJXL0xXSG5BZFpXVVBEakdHeWQ4TWUvbS84K0FjQllWWnBmbytaTXNHZyBvZW9lbjY1enJzeGtMYXE4S2I1S2FGNDg1UXlIdzYzN3FJZFhtS2RBc0g4bWpYaytDM25ZM1kyazJvZUFIK2ZId0d3SHlaNU84a1k1IFkrampFKzVWZjFIaGxpR1B4dE05NWQ5VXRyUlk3Sjg3VHMrNy93QXZaeDR4K2QzUHprTUFsOTJYYmdPSHFrdW10NysxU2J3azJRazEgaVNySWhlVDRYK0hYS3RacjI0c3A4eGl5T0NlaGtaazdjQUx4dFpOOGFPVEk0Uko4QS9JUDRpUDRzSFMzaDJRSE1yOE5JRjdJN2JhRSByS1FZSkVMTlJBTVZJb2R5US9oekxVTWFoR1JnNHJBSGdiR0RqRVlvcjNsV1d5Ykk4YkEvSDhIN1lENS9xczI0Yk8wcm9LbEMweGVuIFVNQ0Y2akpkVUxXclpLdUd1MDR0VHJSWktjd3VieXlQeXdZeFQ5akhlckVENjYzSUxBMzBqTVBVN0l2cjlmcFBIOGEvUWdPR0xXSUogZXBEK0E4a0xUVlIyUS84QWg5a2lWc1I2WmNGZmg3NCtWbEZmTElYNGVwRGVFT3QyRndhcnBvK0JlRVBrd3NYdG1IQ1FtLzI3OSt3WCAwQkI2aXpUQ1dVTkFnUnBrMkdSNVJsQkplMlhXVjVya1VLY25VcnVXQVFNUjBtUkl5eUpFMlR4YlRUTFZkNm4zM1pyZE44YzRCUExYIHc1c3RMS1dXdGpXMWpUOS96V1J0WVI1S3dvOFJEY3F2bHE2dWhyOWJoOVNDR1pRK0g5eTA5OHY3YzJaOHJDb0ViQUhzbXdJUDlBZ1AgWS9TMFBJRnJaaHFiVmV3bTJuendHMm5jZW44ZkVtQmZIbkk4K2p6QzJZbVRFTzhHU0RQSG5qaGdtekZCYk1zZzdSd0NIUDcrQSsvQSBHMHZtWGl1Vk1EYUduTnc3bldXTk4wai9BSUtTUGlDRU1vdkZIeW4rTnpEQWR4cmR4RE5UYmVFKzRrTkdKNHE3TVQvS0p2OEFFV3diIDl6NUJmZDNlU283R3FjT0x1bXNmbU9XU05YdDQ1UVdmR2hEWG53V2g4RG1jd21CMS9HeGdMZWUxRnVIZDlvVitjOEpkalNPZm9NK2YgMkRZRDRCYU1Rc2dZdTZGOXVKMGpzNFJFVXJMbHdSbnh6emRmSFRwUkhKTEVWazJuVkFqcHRSVUtxaVRFa04zYmU0TlZjRVdiQ1dqTCBSenl2VDlyVjh5cElKY2hrbE90NFpoUFhwams1THprTGZPTnVFelVJaHc5bjRrdjFwT01NL1BMa1psbDQzdll2YW90aDJCQlBuMm9jIHVCZ1RlN1ZTZ2FaU1hhS2swbXcvNHlUWURDWUZ5b2hTa1dSZzB4ekhGRDFDSitLZXF0cWdCMmZFWHRieU1CMG1iN1ZnQUdJRDh1b0ogL3FIQnA3WUdtVkxiVlhvZFN3MXk4aVR2SHNpak5ON0MreFJkWldoVjgwaFc0Y3dZbUxkZjJvamdhL1E0SWZjeGREakdjNGIzemdQLyBBTUFmVlVTM0tBUjVhVW0yVW5LTHRZV2NrUkVld1FGYjRtSkwzcFFzZm1DL1ZaZDhyaXVKWTZKWE5sSjlsMVloakdWWDA2V1d5bmFUIFNIYllBRnVZQVFCOC9VUUFvNHFNWWtkSkt0VXdraWUzYkVxakNPUjZ5SU5FMVdKb056VnpTUnRhT0JCbE1DVFVzdHh2UmtlbzRtL2kgS3JRSkdlNXdSaWJCRmN4bUhrczlQWEtUako1UlY1RFg2VG5PRERNZkdoaEt4VU1nR2ZJWWhiTUw0ZFZiV0NlRG1jWks3bmdEcTdlMCBmZ0lBKy9Id0hUNEhNR251MEdoRHFXQmN4dWpSY083T1AxdllOc0ZrOThUYVIwbGxGc2d0OGtoMnBDM2lmVXQ0QWRXL2N4NVE5czJPIHJrazJjNEMvVzdzREFBMkIvV295UXpOWHpMNEtJZEZhbkxCdWFOTXZoVnRPajJFUDhYU0lVNEh3TkRwOThwT0c0R0s1ck93SjlqWUQgSGtvMEM3TU9BKzZPTDlpaGUvZ04vckhkQXRnVjJ5cXlhR0hXMG13YmdOcWFmUnVTM3J5ZVV0QjNjajM0cmNPU01pMndMYXEyMS9kTCBVeW9yT0wrakJBZ1JKQmdINm91QXZ3RHdDbG1pbWt0RHFDOGU3TXN6eDcxNUdNbE4zSk53ZG81eFhHeHdiNFpoTHBsV1U3TWtJMllaIFVidWtIQkNzNC9wWDNVTzdPaUFSWGRQRVpsSVdXK0htaDhtWVVEZDFNcVRZUUE2cnEvdGp0eWV0ZE5WNFpCYkRzamduclpEbkg4VUYgdEhKdlkxRHE5WkdmNld2QjhBZ3I0QUFBMy9vOGJERm1WNlByR3hvcGhBY0h4UDB1cVpqSkRoOFZ0b1RaWit1bkJnMDloNnJ2aXR3OSBnVnMxQWJnQTF6Wkh1MFBqTXpITzZKdllBQUFCNS9nT0NxdFJYc1J5Wkdxd1dPcTRxUmxCd2hhTm5IekZtOTdwU21Mcmw4N1B6QTdJIEhmTGdXN1VzdXYyMjFKbUxNTDJ3bWMrN3ZISU9RWW9MOGY2Q25XUk1VbzRldm1pbWEzN3F3K1EyQUhQVitXZk1UekNydVJpdjlOK04gYnc2M01MOWNVRC85dkRzNVA2eXl2R0xzY2VFRkJBZmZ2QWRHWTJFa1kxS3BxRWpoT25xVk1KSDA3WTNHMDBEUXl1YVVjek5OamR4aSBQSjgxYnpMa1lodDVQSEppRDJMSkZsZ3lKUXhyTnJGbStPUlhNdlpkVzVOcUhoelcvb3VoMkV3eUZGT3d6aEdwc1ZZa0N4bGpLbXJZIDQ1aWl3NTEzTFpSNVpVeXVaUmlWWHFxeWVoMWYxSWhCVi9WbEloOEtuUlF0ZkpPZEtkL3RTOW1FbUtESmVRK0lRaXQxMFZXV2ZBSHAgRnNFMlV3WFZNTTdMTHNGbE1jZ08zRmo5Z3pKMHZPaUZNbzRVaWtVZ1FQQlZibGdGa1loRGw4Ym5WeHBxQ2lGQi9hTUtGVndoaWdLeCB4TFNZeG91WnBFRktPZkgrL1Z2SnVPem5YUUF1eFk4M3lTQ2ZERDkvSDUvUFZqZFB1cSswTk90bHF0NUxrMUJzMW9tRGRSMGRxcmgzIGJiSU9qSWF1S2lZR1dURzRJa0tuL3dDZkhhaHdqSXkyWldIcFJ4bVBweHdCNCtrRmhqaHlCZnQ2ZkJ2R2t5czFoS3JtMzlLVWMrck4gWnErTEhUblJZc0tWUTlzaUQyQWZIZ2xXRjFzdVFEZXF5MENtRGtTeThNYWFXdlU4T3U5ZW1vUUM5VUIzSC9tQXNNUnB2bVpjOXgwMCBybXBiY2oxU2dZeGF2MlVQaXZRNjVmS25pckg1NHJkd1F3NWpqWnYrRit0TjRHRE9VRXlZUDhKbzc5L1FOQjFGNERqb3VSWkZ5ajlRIFo2ZXQyM2FqUjNJTFkyMU1JcjNLSlc2YWZWdTBIQ3lMSXRSOC9KRmMxb243NHlNMVovaUFuelkya25GOCtBQWMvUDhBVFdNVWNoakUgc3dlTjlLemdMdFh1N3VKYnVmY2tPSnprN2N1M3RIUUFNeVFsc0JuOVJXRDUxc2JBTjlxMWx1QWo4Vjgzd1ZSOHc0aDBmcExZNHFmVyA1NHpZWHhCNlRlVlgzeXRQbGpGbWdDeWR5TjRaRUl4OXFBM2hTMkljbldiNFVlYk1CaE9FdkhhSStmWUg1KzZEN29JT0RISFc3RzFmIERTUTIzM3kya2kwSWQ4RDY5bG5nTlpDM3h3WDF0bGZIQlBaSENaYWg2bjN5ai84QVM4WFVBd0hhSU0zVllCQ2Y4RDRESHoralRZSnMgdWRaaExPMHk2Y0ZGWnpTU0RZRE9uVUVrTVNFS3NiK0hWZ1JIK3FiZXA3NGQyN3gzTUkxUER1MFhaZUZ4dk8rZStJUmZyOUFYMzlDeCBQYkMyOHZMcGQzUTFWaW5rcTNhZ09UVjFzYVg2OVZaRlQ5a2E2YkUwQXR1RXl0M3dPbjRMNkcxSWRvVXM4VEJsbVBsb2VjM3QyNER5IERzR2YyRFlBQ3lSTkVzN09IQ0dOWWdzVnhva3NzcXh4YWRKNTRua1RleG1XVUhDb3lwT2JBTTI0cEVtS0IzUVRIR1Zsemplb29JejkgVTJRdXRvR1Bqakp4OXRuU1lSN2NyU2h3K24yb0hXVGVXZ0J3ZjRoRUM0VnVwektiK1dMaXZoQndzaHdUekNlUVc4S2x2RC9jeXYzeSBabmplMGdHZzhCUVVIcEQ2ZndaanVZeUxsRGdiYWUyaXZRZ202Smk1R3IzaHNvVEVQTVpDeU82a05rN2dHTVcwZVA1SVR3ZkxRV2VEIGhMc1NkZ0FBUDdCdjZ3VjdZT2FlS25zbXBaV1RXOTQ2ZURvMFM4V0VIL0tnRzJoSlN1VVBnZGJoN3MrWnN6VUJjRkpxMng1NHZXZSsgQk43QmdBQiszZGczL24xaGJVZk5VR2FER3ZuTnF1V3pPSHl4N3RaQWV3ZzZiWElta2RuSHczRFN1SE1VK3dlZkhub01NWVRGcTVONSBCZHIzWTQvYkIrcjkxTk45VEltcUw2V05OTXJ2bE1oOUNmYng5VjVjZlNrZXpsRGpKdEVEMUpNKzBKaEV1eTZ6WE1tQWRjUDRaSmZjIGw1ZCtPQTU3UzErQjhyRytRYTNiOGRQbm9kUHFXa3RESlZJcDJRZWZHQXM0TkVWc2xGS3JZTElxdXlBN0tua01MVWdPRjhUbVFYd04gV1ovNzI4Zi9BSnVuMzdZSEIzUGNMNFg4bk5zYXQwQURQTVNZZ2RKaGgyd3hFZkJNcDhXNi9jT0h3dzRjY3lUaittK2VxcDQwWlY2dSBUSnZIQ2VEK2ZmZ0hnT2tiWDlzVzRMcHVqYU0wKzFXYlQwZlVVMnU1RFdNTnFjc250RmM3V0JwL3R1SFk2VFpDN0IzVVVrRCtISjgzIE81UGNuNFFKdjc4ZzhmMkEvd0JNM05JdzF4UEl3QU4vYVhjOERYRmIwbFB5TndsQ01UMWU3OHlNSDBLck9SNFJMRnRrZFBzYXgyZG0gczlZeEtZR2phVURRSDE5UGdNY1YvRG9JR2RZb1k0RTFNU1I3a01NMHMwcnUrek0wVFNTUE8wc2tqdmdyTXpTOFdCWDNHNVFyeVNTaCBvUzdKRTc3QXhUdXlBQVN6aFZIbXpsK0JYUUkrSE5QOXFrYVM3UVVPN01nYkpDYWUzaTdNbVFrUXdKNXNLQVpoRGtrTU8rUGpBdDdDIHdnZjZaVnhpeVQyVDIyQ29rQStnOEI2dkkwSzYvbXNCNi9Rc3orRjREbmNoMjNKMUlkcWluSVdob21WK2htUTlicmUvdUU0Q25ubmggazNOOEtMT1BDUWh6OHZIajdCc0Q4Z2RVVlYyVmZzS1pEWEQwTkF6ckJHM1pMdEJxcXVSenc5eUZYaXpHOVA0M0RtUStOOEQ0R2p3eCBneFhGc3pNRENHLzkvTDU5KzkzNSs3QjdZWXpYQlZkekszR2RzMkd0eEZjYXRzRnNHS2xPaWJHaXNqQVltUXc5a1RONGdudm84eG00IEhWN01UNFVrbS8zOEFmUCtBd0xUUXl5bUhQVU9VamhiS1QrMGh1UjNIalJrT1NaWjM1Tlk0bnpsd3lhYU5tbElnU045UnVZeDZVL1QgeGpJclpxcE9WNHJ4Wko4ZFREeFE5VVY4dnJhNVM2VGV0a1htQXEyelZmVlFOcjhTdGdaU1JjZ3VIWDVpbjRhSE1ocDVnNDIxK2VlSCAwWVRmRmNZOG5PYkpQYUkvc0I5KzRFdjlQTFU1TXF2dlExTG9HNWtGa1Z6QXk3bGUrTlNGUHJ4Y0RLS3l5a3dlNHJmZUI4VHlESThXIFg5cXA0WU1GcTZ3cythcTdmejU5K0FIMzdwRHJGTGc4YjdWV2lwUnEzWDFxVlcycVovQXhrTmpJQjFRRmpyNXlDSXVQbkpKbThJL2IgNkFFRU15eVZhQmd6NlNrN0FBeFFUK0lEZ1BSN1g5UjEvcDlyT3dqVmZPQTE4c0YyN3h2R2ZYdW9HSmFrcjRsb1dOTUlKNWluNnIyZSByMFA4NFQ1MEtzeWRvQy9hMUFqdGp3RStnZmlKK2ZqNEFqTnU2cVNSWmtaRlE1TmVjNnp6MDBrRS9qbUdOZFBLa245VGZjWUp0WElzIHQvZG80blYxemNTTkdGeDA3SWhBUm9EWjh5R2VOeFhhWWtibkxGZUtHd1NJQmlaQVVxeFFHcDN5WXNPdHpHZGcyUTdRVEs5cVhVWlYgYS9EcE5ERHNySXdPRFcyOERhakJOR1EyZ1lUM3ZIWXVBNy9qL2tBTmN1MkxZc1pnWk1NcW9LQnIxeXNKa2wxK3lUYS9ySXdMbFdiWSAwV2sxOWJjTk42MjRQaS9zWUZQbnFxR3MyWUxLREJtOTFjYmVBQjlCQUh6L0FJQmdFREJTUFBRcTl1bXBhcnJjdUI1dDJQemhyQXZYIFlobisvQUdhNFE3SU1PQmg4WUpsamJlMm84eFp2Sm9xK3MzbmhDU2IrZ24vQUdQb0w4ZjYzV0JJY0dPMkdyTjFEbUl5U3htRnNUZ3EgaHc5VGg0dFlXRktzYVl3QjF2dVF5cDdnNFlrQ0ZsaEE2eVRWN1Fzd1ozUjJUZjhBNzl3RkJBUDNTM0NMZ2ttWjMwVjRFU1dVYnY4QSB6QyttZ2RKWm80c2tEU0tIMnN4YWpjRmlob05pOU9zeXhTSlh0czJyWGZOMGVLSHp6ejFwUXlDVzBWbmNGWGk5SzlPSHE1TVdqcDdNIDNDZWpzUmhwdTVlVFpUZ25za3laVDdKY0ZmMVpYSkMwRHlxaEUxbFhLUEx6c251Y0FBUHYyRy83L01YSnl6VGNsWjBCdHFzYllRdUUgTnMycDZPaDJlV3VDa2JhVS9pMlFudmkzY0hBdzQrdDNoOFh6MU8zQXNyTzFzMng3SGFYNm9Qbi9BTi9XMitXUUJCOFJudUZ4cEtSVyA0MFF2bUQ1RDVoUThKQXhXUndoVldZaFF6SEpIaWV3QVozSjBiaS9nemVPK2VmOEFBYitmNk1UQzJ5YTNMUU1WSktEdjkyWDdjM2NLIDBiQ3NJZVdXMDBvdzdDdGZNUTNCd2NLM1lKbE9uaDlMZU03WDhHWnRsNFRod0hmMEUrZlBnT2pjdnVCSFY0NFY4RjVkM0RMR3lCZ2cgNTR2a1dRUDJlZ1pyV1I0M3kxTFkxa0xqZjg1cFl5SXVsN2g1STU4OUx5b05iZXFkSnJDNU5IRkkwbU9vMFBjbU5KViswdXhpTGlUdyBzMW9CN2hNZmJJbTJQZGJpdHphMkhhbHE0aDREQ2FFVTV6VndNTHoxZ3FJOEF4UDRZbnJwdW1XeTJDMEdFaXdXU1NlbjZVVW0rZFFGIC9MZFB1NjFGS2FiMDIwQzVBeGFnZFBmVTlnN1ZuaytBRU1EQ2F1aHJLenZadEozOUIvcjQvdjhBMVV1L0pHb3kxQ0NyWmI0R0dnV2kgdmdsVHg4N1VVai9NUXhkaEFrNWIrSlc2RytURU54VzFXQjhDcStkY25GNERON0I3SHY4QXNBRDI2MHo1RkY1WEQ1NmtrdXRlcS9iWiBJVjFVRFc3WTRucFM5cU1RMlQ1a3pVaGRsd2Z6aHpBaFpad3hXWk5vNHlqZmRrallBQURmdjM4K3RGU05ZNUVPM3VXenMvZG5KMkZuIG1tNHE4aGd1QnFtTm5wc1RiN09zdktMTXNHMmFTUUlEY1FkUU8zYmtWSEZrNWhTdmJXWFRncU8ySTljcmNPS0JKS0tlVXJ4U3B5T04gckd5WWpoekt2YmFsTGV6ekUvVGZNdFJoY0hnRG8vOEFuZHpTWlBjM25zbC9YM2dFSHdDRDFNV1FIamxCZVNydTdVdDM5QWZCcnVZciAxMkh5K2VXZ2pnVmRrWDF2amFmTU1rTUxHbjdET2NTZmkzbG1SN1J4dzJEdEVBdDFCQWVBU1YwV0JEbnFZZXVVMm52OEZvVzM0c1FoIDJjWVNFTThVZDdHcHQ5NGZEbWFlN1RoOEVOd0tQbnpwYk55ZkY1WmZ1d1JIQWIrQVgrUVk3K2J4OVRibzVMN2drQnF4MDM1d2FuOVMgRm15RnVnVWVobHVXVWlXTTBKN2hEY0Z1SFQ4T3dIeXVYelRmc2NQeGJRVTkwcXJyc2VFRS9qL3NFQWcxaHR5SVN1YWM1TmVJU2l0YyBjNVpXZmtWajgzeEhjU3FWZDhhS2ttaXhFZTNETEk5Q3J3elVWWXlKdXhkQWtwK0hkakdqMkVCdjNVSXlmNFFHU1dxNVVKSzVaUHVUIHNpTHVTazJDK1BEMG50eTNPYlIvbUNiTStJZmc5a045b3ZzQURnSURZRVBSYlJjanZWOWZhWkZmVmMycDFRSk1ac2NBTDVIWHEzdVMgcFd3WFk0ZGdXNGJocWNlekMrWWdxWEVvS2U4N1h6a21EQ1Zja28rd0FENER3RDkwYXBjeXdMQVg3YWpaVkQ2a0FOeWFld2xET0RnNCBMOTNVT3JnVWpSdlhLZlg1aGt4WkE3Z1FYUDhBMUlhZDVzeFpadTZDeXNITFJOLzcrUDhBOS9ZR1RWYkFQWXptclRzanF1ZHFscXBWIDFJS2JBbm1LWHRpWW15bDNtVmIyaStNbHFVL1Q0ZmpZT3lxL24wZXR2S3krZjNzMysvZ0QvZ01jZXJmNmVXMWFDSCs3Nm1IVmFlRlYgcU9MVmlWSXV3V2EyTjBNM25jc0RzcXl4RmVORnA1Wk4ySXhUTVpPL1VRSEhGbmNxZmRiRURFNGkrV0I2cG1EdjFIREQ5UldhWnRSMiBmRWV2S3VZWGkybXBYWGx1cjNKM2kyTStMK25zeDJyRDdldHdYeFBiWnpnelBQRjBaWkIvaTd6NzlidlBrRUIxYmxCZGE1REl0S1BHIFJMdG1SUlZNTWFtajI5cVBnelh6MHVFVitjb1RqRGU3M3hVWVQ4L0sxejRRUWt5c3JNdm4xQy9TRk9BelNSc09CM0hGQkFMNTlOQWogQU9CVVlldEdPcFpOblNzNlVXVDNiNUREaUJUZFFnSDRqQVpXNWkydGh4NjFPNWdoYndzclBhOTUzeXJuWkpCZ0xkUVQvUHVtK2pMRiBxQmhkQkZOUVJLUFZhYWRRVWlmWHQ1R1JEaTBIbmZUNkJiOEZEVGU0UzZVcXdjNFlVdlBVcTRpTXhORFdNRmxJQm16aVBpdnYvSDhYIDBEaGdlb1ZzWE1hdWV6VU1adHVKdHNzSVFEcDRuU2FXZVFZbTVJbFRac1podHhjVjZmdGNQbVVwdEdsa3lScDZNb2s5U1ZaWW9samYgQ21qbFlCdkt0Mk1EWHk2TDh6SjRmVTdLZ0VpVmtIblprWWEvdFN2YkFVekV1VTduZ044TUdFUFdBaG9jTmdwODVBY0lIRytESzZ1VCBXdDdTYXVlUCsvbjM1Z1B6MUJyVU5qaHArb2ROU2FjSklZaGtyMUgxRko3TzJPQUY4TFJRTmJqclVaR1JrcmRrcjZZMVZMVjk4Yk9VIEp2bFhWb3pIUE5uUG9QZ04vUG4zOGp2bE4yTUxQb1pTNERidHEwRDNKTER1R1RjRXN6S1Y5UXA1b3RTOExJVDVnZmVGOXduZitvZWsgSml6d09yeG5hdXJ1Nkp6WUY5QjgrL2RBYlFydzFMVW9ZVFcxUEpBWlVOdHJLdjFVYTBTNjNQU3BjbzlXeENKTmh1RVBqNjNnaHVFQiBWbURDZ3NXczJZRDhJRDgvL2tBZnNJcktyVFRPZTg1ek1mOEFGUlh0L1ZXZWJQbnh4MUE3U09xRUlVT3pCRXJwbnRScmxRQnRjdlBQIEMvSDQ2RlNGcVhaUHJQT1NNMENiZksxRGtvZ2RKU2EvcHlaVjRIVDNLc2FZQXRTeU8xYTI0RDBOVlBEM3c0K2NacHhYSjJaemJ3Zi8gQUlGc0hVOHQ1YlJBWUlaNjBBTnBURnltVW0rYTNtcE5QcVlmdmN2U3JrcmNlaGgwTmt1Q3lDSGF1dEtQUEhIRGpOTmxQdkRzRDRQeSBBQlVTRDNkUCsvWmx0bFBxUnpIVVpYdzJUL09ic3JtRnJVUldXMTFNN3E2dVpJSWRrQjRZZVl3YkcyMkJzZFZyTm1iV1RLQTNiem1IIG45Z3h4MkRzZFpDbmZDRytDczBDN0VoNDJMVXhoMlZSOHVXZVRTd0FYYWhBdytKN2pERHVDM0JnTDhER1lzOW0xZmpKdzNnYkIvZmogNkR6NEIwS2hReU1vbWlsK2RRRHQ2aHZhUXpTZDJjbkpEdmlNdU8wZFg3TTJsbFNSeGpsRzVFMkJ1eFRXbFoxeWFOMFBGYy9CNjNhRiBqS2RlbVo2VG9WcVdwVnJBVHBIcVVQVjRrUDhBS3RpMEs1Mit5Tzlsa1ZzbnVFejRHd2ZNclM4bW5jMmJaQW14Z0VIL0FDWU4vd0FZIDRlSHJOWE1hZTZDdjBhYkdwcjQvcWRvTWQ1V3dwdm1JeW5BUE1PU1F3NkdIMjlrZDU0NThwMVBKb3hRV0xKby9DVGQ0VkNmQWZRUUggVWJEYmNWd1lCelZKRFNkMEF4cFpBOFljQzFrU3VXYWZUeGhQTGgxdUdIaHAvRllDZUIrWTg3V0xKay91MitJT3dmMzgvd0JOcXpGTiA0Y29kZXo4MTJKV2N4dTBhWFg4T1pJbGgwMjJxOXE5RFcwOThxdUdZbVZ1dm1HbzhuZ1dyYzNsWEtjWjVzYkNiQS84QWQzM1FYOEFmIGpOUERKRXJGRjB5UlNNWlM5YXVKNG9qRkVWT0orb2piNmhqTkhjWDhhQXNjclV3c2MyWXZibVhCV1kreWVOd00wZCtObXNSUnhseXMgOERIbmZYME8yTDN1bTV6ekhNVXJtaW9ZUmhlTlFsbks4UXhVclE3MDJtdUhiY1Bxb01VT25rRU94dStGMDA3eG16SHdXc1BJVC9TdiB3QURBL3NIUVFIekt6c3NYY0VxdE1rMkJyUndKV0VIenJPRHFiSXJsUGxWS3lyKzhVUGRreDhUNWpWVWllMndhRy9pRktOQk5aT0pKIHU3TFU3Ukg3ZFBuNkQzL29QcWVqM3lMYkI1U2w1eEsyanlTMjNHUVpIeXQxNWs1NVhvc3BESDdQL0p3MkNHYzg5QVd4ak51Z3NZY0MgYjBEUDdCaHNEOTU5a0Q0YmJYTXlZNVZWZVZ0SithZXB4aE1XRmsyUkREdVlDWmNqNVpBKytQaHNpMnlPREc4VzJuM1QyVFdjYlExRyBJM0J6Zis0SDVmOEE4cWk2amxvMWpabmNaSUVBZHMvNHlPZkMxZWZJNTQrZWhqYTgvVHp0REczZGpoSVN1YStEZUhIUEYzZkZVUVN0IFZiSnRjQk9hblBXZnA1cGc1Nm1ocmk1NlhiVDg1Wjd0bjRaaDZjVjlicE56cG1tcGtnWm8reHBKU1EraFBXdVpndGYyZGloWVF4dWIgSndtR1MrZGFhelRiVHNHdWtvZWN1ZXFLL2wxc0N5a09LdVhveDU5Qno0QWJPbHkzOENOckpYemxyT05IcVVXd3IzQlQ2MGFEM3BoWiBtekxuclZsa09CUUZaUEJqczYzalN4VUxLRTBMTW45bjdraFBIdmY2cGMyNUZ0aUxQTkRySDlSSU9NSWVPUDhBaVFQRkR4dGZ2L3grIDZJMlNtNGNDbTdVdVNqUGpkcW5EVnBacVBXNEZnWVpsb1ZMRVRWZFBJT0Zic2pKY0VOd2ZBWjdpVTRNOHJIakZubS8rL2o0RFlEL2QgM3JqcC9WbzhBVjl3bFZVNEVyYWJhOVVteXQzQjhWMU5QRkxIOEZ0b0I2ZjRITVcyUlBxL0djQnNBQ2JXaWRacTVSbUdQR3lHem5QaiArd0FOL1FUL0FHSWFsVjhWc3RSU3FET05oeWlTRExNRmVzbGtMMHlyM3lXcnRIYi9BSjRZZkRDZXZtRlZTNEhWYWV6REJUUXNvendFIGRUYU9BcUszVi9CK2ZnRlJMKzVMWUVOWHl3d3V6S3JTYUJLM05XOHRIeWp6UjNJS05FczlwOWZFK3Ezd3doclgyUTRCMUlRR3Brd2UgWHloeWF5OFVtRXEzMysvZmlMcm5hdlN4NnZSckZLSnAwaW1pazFLeDhSNnFOYkt3enB6MmJnU1plNDFQREc5SENqcmoxRHhTdkpGNiBjMGtNa0tURG1TRGN3QmtpTkNwQmlDcmZIL2ZwZTJCYkRRK05DRytUNmxHcE9WVExiMm5tRXFuaWNEVjJGTmxiZVljSzMxQ09ESGNFIE9kYlZQMjFpeWY4QXFnRkUyYjdzYndZUEFJUHNmZmorNnZMRUlYY0x0bUF4dTIvSHNsL0xWd2t3NlBpR01lN0Q0TWhwOHhicXZaL0QgemtQZ2NFd3NyQ0cwTEpNR2svUndBRG4yQi96L0FFNEtyRjNna1ZaRE0zbVlDWjFCYW5EWmE2RU14Vjh1SFVvR3pTalE0RDRlTXpuayB6K2VVdUJ3TFV0OUdLSy9zamhOazhBL0lMOGcvWU9veGdJQTFlUFh0aklleUUzeWE3Y3dKVEU5U0RnVU93aGI0bjRNakpNNDRISW1BIGFqYjRGcU1FeGUxazFrSFYreUF3Qi9FQi9rZjZJTGNTaU1JK29FSnFTSjg0NU5ranRqT0s1TzJmWWxjMGVlT2FBeGRwWnc3YWJlWGUgQlRDUWIzS2JhWk51VnR0bjNKVnIrZXZ0cWFhbE5JYUljQkNQTnR6Wm9ING1uOGE3U0tuWkVNWGJCNFd0c0JneFZiSXliaE5WUjl3QSBYbVl6TEw0cms5OGRqWVJIMy9ZRDREZitxdTVqSWhKc09aUGloeVNURitORU1jMkhwQ0hGZklqUUFtRUZ1WjNVcXZjT0RuNi81d2g4IEY1UXpMSU1JN3BPLy93QkE4QjgrYXE5Z090b1ZmY0FlK0h4L2hvVHRaSEtOTk15UmQzeXFIaVhJNVBpZVlRN1VmR1FQQURnd0RoUGEgdjZvS0V4bTlwQnZmL3dCZ3dQOEFuKzJSV1lldVZ1SGxXcXlFcTk3WXFWM01BRXhqRWZIMFhmTzFtR0JiWkUrSEQ3Znd6azRlZVZiSSBaaWZQQ2JOaitMdTdyOGc0Z1BjL3NEaktNVlNVcDJXeVFaNVl4dmlGYWVQRWZ5WTlneTRDUHliNkRhVkhrTUlkRU8zVE9sZjNpS1dPIFphRm5MYmlFWlBJdjZqNHc3MkZZbHFORlMyRExTQ2o1VXFHZXpsSXZIMU9BVmV6WmtXeGhQY2FZbnNscVZYTVF6QSsxQVlGd3FVNUwgL0YvYUJuUndnVGc3OEFRdm9KOCtBeEQ3b3VTR3VhdU9iaHJtWkQ2UXlHN0NNTWpWWUhQS2JxKytkUG95RzNwN0l5T0ZWcmpBdG5HMyBnZUV4bUdYSXIxbVQ3MnV3UjRQSCtBbi9BRDRBQVcxZHF5MG1WUFZWczFuWUNOSzFNWG1Hb3hxRWFhcTR6WVRFbTFOU1Zua25NOU9mIFFsVnc1NTAyUFBlak1Id2tpeUd1MEt6OUp6MWhEQ1RpQk5BMXZNdzlQcncvYnBXOVB1U3ZYckhFVHlVTUMrV2d3NG1HclVCWnRqMmcgbTJGU0l0bFQwL2VMNER6SEFOT2dPQ0dkcmQ1dDlwZkZtcy9DaE5nOCt3YkI0QlVUTEpiUnh1bVgwOE1jeFgwMm91R2FQeHVWWUxDeCBWcnliNE9WWFd3V1NaQ2QxMFJxQjNLcFNhTlk0R21vM2ZoYXM3dFA3QUNwdW0zeUFVQTA0Tk02aEhaZVIwa3cwWWJYYlMrbTNjWVlEIEZxMlJ3OWtZREZjejJDQXFwNHdYOUdadGtTYlJ4QWVBOCtBdzZqYllPQXhkMk5WUzAzblhZK01iVS93eDQzSmtWa1lxVURxRXBHeHEgM1lJYmdudmlkQzQyRHFWdzdqRjJaWjl1MmUrZjM4QWVYL1BnRUdTVDArT1owWjFqWHdaRGYzeVVram9qd2V6ZzZuVzlYeFY2VTBPTSA5UE1RN3NocmJBKzc5YUdIRCt4cUcrY21TRFlSSnF0QmZqNkNBUGdFSStmYWt4YnZ5MzFPeUhLMEpsZnUxZzBiU2RJM1JEYXJBaUI2IFFsYWNFMnBUQkMxSmdlR0hUMS9nOEJmdW51cVRXV2hYNU1EdElKandISFlIN1lEK3dGR1pJNDNsa2ZmZHBwTERMakcxRkFNd3AzRFYgOGJjc2Z6bGx4aXVUQ1V3SUluOUlxR0tEY0Ewa1o3MFlkdFZrS1BOMzQ0NXJHanNBdE56TTZCYUJnSTFKc09OTHE4UG5YUjhNbXIwaSBlY2pGWHc3Z21NaUlIWDdKdkI4d2JRY1BiRU1XczJZajJpa3U0TStBUCtmdDNZT3JLZzlPZXNEVHpYa09yMktsRFZaS1dzWmJySXhNIFQ2bVUrVVdOWVVXdUxJSG1FOWttc2xrV0FabjBQWUFBN2NBemJCYnlUQm16ZnNBUVQ1K291UDdBZnF3Uk02dzNaOHpxNjB5MlNOdFIgajByMDVhN2hTY3d6cDhwK0x5S25KZlA0TGU5M0F0MnFuc21ENUFJVTg0dkt4aGc4WWczYkVMeC8yWHo5dkh3SFJKUmRxUTIxWDcwNiB2dFZHOFp0WTA1UTFYamEzanNMNWNrcTdsZXVXUWRkdFZvYTM4TzBBN1VCc0NBMUdNSGtWM001eUVDT3dQOVBBQU1FSG9qTFAydmdqIGJUcVZXc3RRSTE1U09BOFk0MmMybzJjZTBZOGdxd3FtQWQxeW9GbEVYZkh3c3FIY2lscjFBeUFxUlFqTEVISUtncldZdGd3bUxkSTIgcWsxK0duMlJhUlpISnpIRGdkWHlwZXBaWGh1RXd3bm1PNUs4dG5LSDRIQlQxbG1WcWJXV1o0cTQzcUhPYi9VUi9FK3djQjZmR1cwWCBCS0IzOVdsYUFWSVBsSG45ZVlBSzJueExKS0M3dUEvTVQwK3E2ZmgxWHFFM2lFQlQ0SHd5ZHYxZmg5NC9GMkNDQTJBQUFRUGJxU2prIEZjb3ByWm1MblZ0Wk5nMmRIczB4YWxZbVd5dDR0aWlRSlJiY0szV3RQZHdQa3djK0F6M2RxZCtYMWNXakl4enpkVnZ3RDZEdjRCK1EgWmhUZU5RQm0yS3hLYWVEMnBCdzFTcmEySlJ3T2RIVTVrcG9sT1ZjL2NIeERjQTlxZk1CY2ZyVDZ5czhYZWJNOWphVDU4QjRBK2c4KyBCb3hxam1wUjBEeFNiYWFqRUpJa3NjcnlPMjBiU1RiVldmRWJOV1JKbFN2YVF4cVZka1JvNnlWSThSM1ZWOXgvSC9jL25xTmtNRmZwIEZSMC9YTDVXOXRKTnRWTGhjVlB0VUpYK1k1SGw2MEh4UFgrQm1GdVk0RCs4U0gvSXpCZ3hvRnZPeDczNy9RVUhZUFBnSUROT2FsSUYgcVoyYlRiM2FJZUF5TGN0ZmRySVI0a09wUU1STlBReURndHJuR3c3QXQvQVhwODZHemJXMExLTWN0RTNzZXdleDgvc0dJQnoyM2FkbSBQWXZrVmxXcFpEM3JDenZpdE5odUFZVFd3cXVXRk9yckZ3RXd4Q2V5VWtuNGJEUUJERmxHMW8wMmordXluTWNkL2ZnT0lERmdBTGRUIG9Oa3NGbHlRTStZRW9kdHlRZGhSNjlQUEJZeHpKaFBTakE5a1c0ZUd6TUd4bmw5dEJtUmlNTDNObWVNVGJzOGIvd0NBUCtmNmtPbDAgMm1qRzdOcVpOeDVYRGErWU5JTXBtbEtJK0l1T0xkRWNhME51RklVdGl1ZlY2azZtV2JLS0tDREZJbFpJWTl1UG1PS1FFSmtjYU1tTiBXYkF1K2FDcmg0MWV1RDVtelp3MHdMVDZ1RXA2MjFCN1lXeFl1SWhLN0l3Y2xjR1JERGovQUoySkE5QnNnbVQ1UnRtOXBKdDQvTHI4IEF3NThmNlpDVldieFVGaUo3RzVJYWxuVkxrbTdZSVRibXNDRytBYW1MQ3p3ZGdUOTRyZTdGc2VIcm10QjZGNzJZTVYyZ1lNNXM3R3ogaUNBWHdEQnY0QmZQeHJZUE1BVWNiRnJSRFc5UFpsa3RHV0dQVEt2RTAvamNpOWNrVlBjRUp3TWN3WkdBUDg5Zm5xc01uK0crUzhKNSBzOEh3Q0NmZnNBR1BVazJNbHVka2xWOGZDVWt4VlNySnB3T3FqU0M5ektLSlZ1U01BZGtaYWZtclk4d3FnZWVBM0RrNzRyck94cEp1IGsvN0IrbmdHNjZERkpZVWt2UEdFc2swdW0xQzduaG9WaWZ2b2p1Vm0vd0FORVdlbGFUVU04Z2tNTWNUeHh1NkUvd0FIQVRJVGloWTQgR0orTzhVYjZYcU82QTRDbmt4V05QRzNZWlNUZktLM0FOQ25mQjRERTVRK0R6RDVaRmJtRThlbmc5UENmN01tNXRGWFBLeWNTYnMzeCBCeEFiL3NBRG9xS1ZQWDVRNURYQU5uSk4vSTdVRDdiL0FPQ24walZZdDhMQ3l1b1ZmbXpERmtRM0RHbjRLa3dQbEhyWk41b2UrRmw1IEJtOWtPYkErK0ErL2RKK3M0YW44Y0RtMDJrdXdmVmRNc2lWSERaVmdVNkhQVU84RlVNdzR2bUppbjNEdWdZd240SHE0RHJCT3owTm0gUjhVbkh0WGl2b0o1ZjJEOWVxdzlRV1hyUlhkTFduQkkwajVBbXRkSkdIcHRpd2wrQXhKNHNUcUNWWWJldjRYWlk5alduYjUrRmdoTCA4RUpEYUZyRWJjSC9BREpmcU9IZlpnWXNWNzAraGVYaGFUR1FGQldOWmJVT0duVzhRTXU5dG9ramozNVVmR1BMR0JOQ1ZxcnV5SzVTIEdNQmR4M1lWbGhhMEtITEhucVV0Q3QwZVZVOVZ2a0NZeVhCcHBTWXRJaDdtRHE2Uk1xODlMUTJod1g3VXZpaGx0UHNnZXQ0dmcvZzkgVjIrVFYzeFpzdzUzU044KzMvSDlFSG4wa3dDNlB2MjNNa1hSbGhFcTlyVG15bjJ4VzVDUXRwclJ3MitJZGYxVVljS1RUN1U3cWRsViA4RGFpR2pJMk55RTd5UndnVDZDZlA5M1FEOTBYNmp5aStHcUxVaEVpNmU2TDAxSk9xNWJodkFkV2tscGxpMk9rMXlyc1k5UGg2ZkVUIC9sbnJWY1VQaWljUWVSaXVoMCtMTm1ic1NuakhnQysvQWNBQURyN21YWVBsV1pNc3ZXUmsyUllidkRkcTlWN08wMHZGWXA2YSthaEEgSXRiY0dTR0d1QU9IVDF0VlVnQUtkRHFEOERrOThObXdtL2dBQUFBZzdBL0h3YVNYc2VPWFUyVVdQazcybjFNZzRqV2ZUOW5pM0tIZCBPSUw4RzZFZmFFanJnZ1RNa0F5N2NrVHNWRWtjY21MM1haazJJdmdZaXVwM0xzakxhSWMycGMyeUxqVDUra1ViY2FCVDloUERGU2ZEIFJJR21yNGNHT3E0YkpaRlY4d2d0cStoMXkrY1pmY0JheTdoQW51Z3NDRFVYQWRnZnVxMUFyVU9XV2owK0xQSVkyNE1wRGJhY3EvVWogWjFzUThEMm4ySW14ZStDM1ZXTDRZNUJNdFJEc0dmOEFNM044MGw2ZWlmQ2F1N1ZjK1FkL3QwLzlCWTdUcTBGMFBXR2JRZGNWd2JyRyBxaGwxMVJxM0pXYlc5VDkrR2lrYnVUcklYbkdIUkNlK3VCOWJWbnlzQjdVR3hlVUwyR25NTzEyT0tDd1lZNDc5N1J6QThJYmJabGU2IFFhSGhxTEplZW52c000V1JlZExPOHRvVnRSN2x2RGhENWdob2U0SjZPQlgvQU1xTEswVWFHWVljL2g0U2NENkVBQWNCUG45L2dDUlMgb3NtbmNURkpKSW1Qc01jVzJKMmlldlVDaDR5M0MwV1U4M3dTRjNpTW9lNGc4Y2NpbGF1U1c5cFNiNHl3Zm12UHh6UmZGeUphZmJWUCByZGZTcStOaDRnY2s3aDFSd2FCTXdXcjBpcm5uQWVZUXpGRDNZeUo2M080ZnEwQnZoT3pCYlJlU3lEMlEzaHNDL3dBQnFMZitxb3pLIDBzaEloMlF4dHRlbTdDYlZSYmJIQnFBMXZMUXdMa3ZWeUwrbjQ5MUU4T1BaSzVBcjRIQmtlU2YwYjhvbXdod0FmL3NHL2dMZFpsaUYgTXBYTXltTURhTko1UmhUc0plczZYeDd1aEZVd0NiZGpoZkZEMCtuekh3Zjg2QlI0R2N5SXZQUDk3VmQ1L3dBQUJBSHdIU1pRN2NhSSBGZ01vYXhyeUNWdkZoZzZ5Y0FMaVB3N2NsTlI5dEZIeHdaRStZeVdRSFQ1a0dldm9kalN5ZkYrVGNIU1FpVGdBcUlBQVh3SGdNWkFOIFJMSXNRUjVFYkxQS1gxRXlsZVVMQytCMm93SlN1R0xjcVRseUFGVHlRUlp5RE11bUt4Z0p1UmlNZUkzanpYTERuRnNoZG5qanB6R0QgRnFVakhBaG1OUG9FbEsxTGFlSmRrVnVTdEJzREZMR0xKcFJ3cCtyTjRUekFjZk1PQWRRRGFjY0ViaTZ1c2pQNkpSc1gzWU1INUE0QyBmUm9OUHZqVDdhR1NyNVI1a1ZiYWFoa1N5TGd6bkNuQTRFcFhwNnBiVXNFT3R1RlY3UjhKcXVraFMxY0dIbG1hTnpadUU3M3Y0Qis1IDgvSUw5c0NaUXg5b0pGNXc5MGgxTGN5dk1KTU5nSGtudGs0VnloMWtlS0dCL2JlSFcrcEJjWDNCcVEwK2xuaUdNc3hYS0xEemdidzggL2ordm4vZDVWR2wzUkZwZXdyazE2a3JqNzNOYVRZY2dQWVZiQ1REbTVPOFZ5YitTTGEyNFB1M2h6bExMN2JqM2ZHQzZ1L1pIYi9WNyB3Q0Q1OWdoajI1TmFxUnhoSlBwNTViMUplT1o1SWhHUXBhYWVWSkVFQWFWSGlpcmNqb3lVU3JqbExEcHk4dHVkd0NKbDlTQ01HUGJSIHlyUEcxNU5SU1J2YWNndkZtM2NRT2tiOFpsVmlFZHN0cXJld2c2cVlyOFNIQXBxOVl3dmg2ZkRmTm5aQ0g4Z3Z2a0V3ekUxY29NRmcgemY4QVlBQy92Lzc5MXg3UXk1Uml3dDVHa3NtcitBTml2a3cyaXdvWlE4djdvdGozQndUN1VoMXRYNjJqdG8rQWNoczVNWHRoUEh3ZyBRK2c4Qnh3My9vRTFFTnJBaDJZQmxORmhNdGtaUmhrWHJJTHpHaWhuMVhpMnhiUlZQc0NadkZWb2I0dm9sak52d0hpR3pEQ25qTms3IG8xWGlmL0VSOEFCUDlCSkN5R2hOcmY1V3p5U1N2YWJzMTJRZVQyZ1RERmkvdVFjaERyZHdaRnRiODQya045NU1US0ZDYno1dEozLzIgUGdEK3dkQ0kyUmtuZDVpOHFLN0VTVUQrQjdmdDU1K2I2dG1iWk1aQ0FSMVNoS2tHUlc5eVMvVXZIdDdVeDd2T1Y5UnF2Wmo1WHp3ayBUNkhhbllQQVQ0ekZXOXFMYWV3NHkzTGk5ako5ZnpFOURwK0gvcU5aYWVlQm9TME0zVGM5a1NYWUdnZ0VJK0FxUHdCK1lZSmdPdnRXIGx6WEpQcXVNaDV1Y05scjdKTTh4RlBNTVR5SE1LZ01JaTJ2NEhFTzBMYWd3MW16VU5YV1ZrSFZ3UTJjUGdIOCtBQWU1L3EzVjRhYjAgZGpaSFpINXN0MnBsVStFWGg2SFoybDlzbVJTalpLUFZYWDdKd053cCt0eDh3SDNBUGNrR2UzK1dKdjhBOCtQdno5d0RwVjFXaDEvcSBDc2dDWmkxdkdyZElHMXV2Y3cxVVNDeGhYY3E5dVN1VU93SmhneHZFTndROWhwOThlRnNYUnI1dWUrQktTT1BIYUkvd0YrOC8wd3ZBIDJjd2tRNytPODZSWVlZRVlXTTJ5dkpxNVhHdm0rRnFyUitrUlNKV0EvQUlBUHdQd09yS2FWOUF0SjZpUlYxMkt1bDNGZnJYTTFFMmEgRnA2SW9LOXVhbVEvcXJJWjZRV0lQMCttMGFwc1ErQkpTQnBDU1lBNTJCVElBc1pUQVJsdGhFYVR5R1dDM3MrZFVNekxhcDJnVHpZaSBKUXovQUJGYjFIL1NiQmxMZldiYlE3RUxqWndRTEdoK3RsRVVzV1VxOGxTd01hRGxKM29LQzhra1VsWkN6bFpMVDYxdHFqR1VCT3pxIDFGS29NMWtBQW5DclBITlpHdlBQSjhIOGRVWmJKT1BuOS84QTg2TzJVd2h1NHV5S2xaOG1wYzVrUGFoM2VuN2hjYllMbUl1cURUMlYgaXc2dldyc1R6RU1PUWNBZkgzeThIeXpHWXBhRlpqTzZWb3BLUDduKzd2Nzkwd3ROYS9RZDhTR1J0dVN5YmFzN1d2YWtaaHBla2hxdSBwb2NxMEpaNm0wOGZNcmZrakpESUdLNXNzLzJkaGswWW8wUFN5RE5KQVFHZndmaisvd0N3SCtxNjArcm85bGxiYWZBS2VOSlpzTWxkIDBoMnlhL2Q0WlN4cllhSXRrV0JNZkVRUGFnY2hEZ3Zsb0tTUHlabVYxZDV0OUh3dElJOEFINEJ2NTgvZ0FQejJaV2RvT1MvUnBSRHkgWC9Vc0JhcUJZYmdzT3lWYUpMN2pVTmJWWHc5b2hyZUJoRFgwK3hnSGFWVk1iWXJ0Qk1aNXZmQUIvd0ErQStnZ0FXR1VwSERCcTVrQyBQSGcyM3UrSllwVHAyWDZiVWVucWRvTElRWTZNWUpXU3FCTk5Ja3RUYVNBMVdjRGN4bXdLWWdyeklsSGJldXpKdTFzdUppdDA5a2ZBIGRlNmJuR3d0bnFBRGFOc05CSUNyRmxzb1VySkRpbUNFTjhtSjVpRVAyT0JZQUdDSFpoYXZ5WW4ydTJRNXdIWVAzOEFBS2JrdWpUSTcgZ3o5MFpkMXJqZ0doNm9aU1JZU2hwMzB6UFlHVFZDSEZ4Z1ZXbjN1aFh3dDR3d1o2QlpRSk9wK3pNYWJHdkdEcmpnODRIOEdERmd3ZiAwRjlDc3dmYWxqU0s5UXhiS01HdTdoYUltd0Zaa0gyRlc2R2ViSElvaGowNE9ZUTk0c0N0emlIeEtjdGt4ajVWK0JNNEUxRHUyLzdCIHdFL3YvdUg2ZDQ5MEpGZHV5YUtKRFVsY01kdlNGNUo1Q3MxdmdkeGdaVnE4OFpFOWJ0UmFYM3l4dVB0cHhiMnhvYUVaR2VUWU0zdjQgQUNBUGdPQTlGQnBvb2NsaVdHRGN1ZWVHQ2xlSFZ6eVNTNmdnRCtMUEpGKzdQYnNZNDEwRHpNMVJPcnp1T054NUIyb29VUlJxdTJjWSA0b3dxS3VSOEU4WFFYc2pMdWpORmpYS1ZNYlFMUlpDU1dYOFRCQmVEZ1FPb1VDTEQyZ3RtUGhoM0FlWUJxVEFlUmc2MVdZdG80eWQ5IDdSd0FQejkrd0FOZ2YwT2szKzh5cmhiK2xhaDFJd2g2ZXduTUR4Y2V3dm1NcWtlMHJoaHhCbHVCUFd4OVdVZlpkd0hsV3R5Wk5vVjkgUEl3NWhzaHg5QWZRVC9IK2pEVm93V2Zwem1XMEJ5aVNSWHJhSGt1NlBNMDl2Q1FuNmc0dERWZmZIYis3SzNNY2sreUk5YVdBQU9PRCBOVUNIdVl3NGJ0RkpCdng4K2cvdit3VlFPTW12aFNsdFdqeG9jSTFNMXBjRlhhZTA4RGtyOHRQcHM4MlUyZWNHQmtwKzFIeFByY2ZqIHp4Z2JlTjdZMFBlMkk5MkcwbkRqNzhmL0FOdm43bGxtblFDRllYaGJsWkwzWUYwalk3a3F5S0JJc2pVdUJTQ1RieGF4WlhvVEZDckUgTVpnNmJFS3RXM3VUK3BzdmFtV000amM0U1NURXNNaU1oYy9mbVcwVDdNVDdrWEtUSlEyMTlOeTdBaGpXQ2tURlhJZHNPU3ZaQkJrZiBXU3Q4Smc4TjQvZzlrRENiVFY3TjJyTnBHSC8vQUh6OXFFY3BhakpjRmIyV0gxVUxicmFGOGFTMkV4WVZ3WEIvTks0a0Nyd3lNTjhvIGRQVDVqQTRiOHZua2ZreU1WYUJuNVJPV2ljZm40QWZ3QUg4ZlliT05GYnU3Z1NUY3Eya201c3F0eVR2WkRoWkRoeVFEU044NmdtaHcgSU9FT3EwTXcrTUdGeGR3TEw1SldhTTBibXpiSWtuUEFiQnNBQS92NjlySkxJUUpsTWh1ekx0ZnpiRHdiTUZ1dlYvOEFvMnpYeERRKyBOdUZxTGJndGtKbjVRZ1ZXeUxObHRBdEdXVG1POSs1OC93QSs1QjU0WkFzMGJsMFJud0tNenJubG1WQU5XdFk0bml6ZGprVnl5TmRpIFNOMWR6dU9xeFNJMjNWbW1MSlRaZVZvWkQ1K1R3U1RMa0RsSy9aQTlOd3dpZXVFcEttOEdFTlBiSEJYc2EyRmROWkI1ampjUFQybjEgZUczNndCNE9ZVVpoYlFUWnYyVGtIL1lPQTlhZ2FldjIwY0E1cUc3R3lUSkMrVzRCekZrTmt3WEY1NFVjQ0RJbm9rTzFBNCtaNUQyVyA2elp2eVlNd1NRanNELzdDL0FIN29qZkszYk4wdVd5MjFrZjNZTnBpa3NPbGJPcjI4Rjd0SzVMeWE1Y2Zob2E0dHZpR25oMGNDd0tVIEZrWmVMOEdXUW5OamV3UHg5QlFjRC9nSjRHbmxEeW1laXo0ZFhXZFh5SEdpV0FCWkNCYVlVc1lUWE5qUTJBekRtS0VNdzRNaU9ocC8gY1VQV2JOYUhhQkczdTdLVEIvMkRZQUI4K3BWVkkyMUQrbkd6bDI4TnN6cmhRKzNQYXlQTkxtV0hDMEFZeStvdnh0T2o1QVZKd0xwSCAreTc3alRYUTRGZEwwNVI5NEMxdW1kVi9NQW1sMjBiYXRxd2srdDhsWExUQUxrdzg4UStZZmNHU3F4LzN5djdhT0lmMWRESnZKd0lhIDN3Ky9ZYkF2OCt4WDRHanpEWlE5NkxkL1R5UVFsYXJoR2lFREo2TXByWjc1ZktGdlo1aGhPWkpnK0dxb2RnS1ZIMnB4bmxETndmOEEgdjREd0I5ZjJFL1pBNG4wdlFUZ3lKRHU0V2piU2xVcWxMSDJGZkNPa0dCYWFrUGx5TGE4eUo4TjhRb2ErWVZaN0FwSEEvSnRSbjJiZSAzYXJqaURidS93REgwRStBNm9ycU0xR0dJb05EeVUyd2xzOWFCZ0tKc2dDazFla1dQRjdleWdOa09FeHdEbVZzd1AyT3kwOGZoVmF5IHpDL2NuNXNKYWdEd0hBZlkrZk5Xa2xENGluZU14czQ1THlQVzBLNHE4WCtUL3dCT2kyWW9YM2dIMmtydGQ4c0NjUndjUjdxL3dqbnAgMlVtRFh3TEpUNm1HcGtiWkVwVnNpWHAzUTVpT3c3OUsxWUpzcGtId2sva2hnd1BodFlGUDRyREprMWY4dmdnZ1Ezai9BUDBGQXdiViBtQTVobDBTVDFmWEJhRU04N05zUzBHckpIc016NVVRcHc5aFk3SHArSHh0ZzRyL1AxeW5yS3pxTUtibWQ3bzg0QVliQWduMEhZRDZUIFpHUjgxQlNPV3U5cDNaUXpSeHRUc0JxV3FucHpkSzVMSnNWa3RCOEQ4a3JjeXdHTmg0azhNZ3ppNnZqMk9DZjFCdjhBd0YrQWUvU3ggWklkcUdrUFRIcUhUZVNKTEhhWkpoYUUvSmp1N2dMVFJMUlY1aHdEOHdEbUF3OE04QVI2SGNjeG10OHB4amZjVWxKZU5nZmo5dW45LyBQZEhoTHFKWkp3LzlHUlYwYnBFZDUyQ0JFbXpScElycHNXaWRiSmJNTlMwbDJSSTJTczl5dThka2tlUFBZeERWbGxUY2ZiMWRjZmFEIFErQTczeWx4MnRGd1k1Z1JlcWU3TzZHRmtWTDI5MGx4UkRCOVBtTGRrRDdJcm1lbjJYM0k0eXIvQUpNQjJpRWRrYm54OStQOCtmdXYgcVdQb1BLcXU4cnoxWVhOR2hIa09pb2tldDZsZ1MyUjhQTzR0OGNPSHA4TjhocDlnR1BnTUNsdkNNc2xFT3M4S3JkZ2xYUEI5Ky84QSBjLzBnV3c0dE5Ed3R0c3B3ZjdtUE9EYXdtTGdWWEJJUTR2Y0pOQXZuNWdXNWx3QnlDR0NnTDdhOElieVRROXNScXJDaE9jTDc4d1B3IEQ5L1lCc3dEMHYxTHFBenJhS0RaSktyNWpiRU1XY05WM2VHK0hsK0srUGpnbnNkYjJSNC81MjRLZkpGa1lMZmJNOEk3SlA4QVQrSUEgL3NCL3JLME1lcFRFTHR1WnQ1ZHZzZE9GdGRNeWpiMDN4dUZJVHU5bVFBUWRQRTd3czRkN3pRcWdZeFBHOGI0WXlPa2NzdDNSSVZpaCBISkJOOXJ5ZEtMeXp4Z0RtcTluUDdVeDJvU2Q2ZmFnTlRyekpYTmpTMWVMYVkrWXRtSzNtUGxvY3F0cW43TGVJVHlNVjhkUW93NTlKIEI3K0EvUUI0QURtS2EzaHB6b2QzbnV3VG5tY0V3YUdTR0hzMlpZd3RzbEZJWHpBN0loekU5UGgxeUFRSUNyKzZDM244MkJIYThMZFEgVCt3SUlEZndGMGpCUmdZN0FocmthaUJwS3ViQzA4WVdCUTlFVSt3aGhZdlRnaHZoZ2d5ZDdKamhEd01lMm9CRStZVHZMZ1pNbDdndyBuQWZQL3dDV09BSEllQTlYMWVZQW9jTTJTU01HU25CelUrV0RXUmh5QTFQVW90OG5tRnVHdDNaancrdVFOUDhBejJUalBBMW5ZLzhBIHA0QUJ2L0FlajNGRWlpUVBKdHVqcTBhNUkxR2lGZXhkOFdjZUQ4YzhXMGUxVzIxUEpuVU8zTEZqdHl5Ujh4U291MlRoWklhVElHamkgRUROWHM0TGJEeFRHeXg2ckdHaGtwY0U3Q25yL0FNeDhpbGxjcHlCYk04d3NnUEFoL1BZSUFQdG53UGpJd0hpYjJNL3dFLzhBNWIvRyA1bGtUSEsxS1phQ2lUR1BJYVN5S2JUTkphbUN5Y3I2YzNjWEttRVE5MlRHUjgzQndWYTByOThSMFBhMWVyMmFzM2cxaHZuZ1BvTy9nIE9ua1BCMmUwR0hCY3pYWUpuZDFFRDh3QVUvNWdzV3cxS3J6QjhNT3RsdzVqN3hVdjFXazFrWVU0TjdHKzF4enovZ01lUWRWMUZ3NmIgVjZ2czR6bFhsZjJTZXNsa3JMaE5oQjJKa1Y5TDloTEJSa1lBNzZ0bDVpZVBoL0FQNmVjRExNVEZvWk5aTzQ0T3h6Z0g5UDcvQUxBNSBnc2l5cWpvanlwZ3FwUFYyQVNTZHZrZ2tVS0YzNUhTbzMrbmwwMDBnM0VnZk1tOEs1WGdtbTkxZjdWNE45U1IyaS80cGJZenExMFIxIDcyOXFxOG41ZXE4bFFJYXpmbElZbG9URU5nc2R3VDZyWTdJd21BMU5nN2NMZG1QT0hHV2JHcnNFa0hVUUFBQS9WZlBnSWR3VDJ3QysgSisvV1FTaGxFNGxMYUtCc2dnN2gwMCtKVFdpR3dMY01QalpFTWd5Y1MrQXE0N1lVS00zdWs4MzM4QnY0QS92L0FFU1ZOZmxRVjdTOSAyR2JMZkJyaGZ1ZFYxWlZQcDFwOWZTV1FDQmlBWEtIdzk4WkE4d3dQc2hxUTNEVFM4QjFtelVOOFpzUVpzR2J3dzRDdmdRRis4QjY2IDlUR1phajVSOWUyTXIxam9uVHcxd1ZkWjFQM3hSdEQ4a1BIcGNXcjA5ZnRSazFPVEZ1RXdZVHA3Z0E0Mno4bnVUOWZDSE5ndDdud0EgQUFQOUwwY2lpWXE2ZjNtTXZFWjVVaUpiY2kwOG9aWkpab2QzSE1xUW83ZTBrak1VM1VSdWdFcVM3VjdNeFdKY0w4a1IzazFScFoyMSByc3R2T1hBaHVFZXdTQ3F1RkhCdHM2ZmtzZ210OW5rTzRlcjdRaVh5VW1jUHFzdzRJYTJ3SjZycUhIejNnT1RHUG4yWkhOTzNnUDhBIFlMOXY1OSsxUG1MYms0UGxTcTlNa21VeUhqRm5naytQRU45cEZ6WVVPbTZUL25LM2htR1AzVlZKZ1VaeTRNczBZVUdXWThKRm9wUEEgUUw4QVBua0FBd0gwMGZUM0JEaUh0UmliWVVhWnhWLzdQTGQ4Y3NxdE5jcGRvWEloc0RHeVZXWUVXcXdRNTIzbmthMUVZbi9UT3lWYyBFUjBFK2c3QWZBUHo4QWJMaFJtbXNEWGEyZE02aEZ0YjFTdFYrMndrR05LNWhzdXkrRUtob3ROb1pHRTNtQzVudUErMkszT09DT25MIFBBM3ZreDFLZFhaNFh3Q0Z2NitCWDlnTnBZbWRjZFE3emFoMFNUQ3RSdTVEMVNiS2JXZEtBTGU4ZjF5dFVrakJVUm9FaG9ScWlsYWogTllxVDNYamp3YUYyZUIwanFyTUVMUUJ0VlhuczUyZHArUU4zQ2pjbGZzSmtsRkdHVmJUZzRUTHNEdUNmWkZnTWlxQkhIdmhzNnh6dyBZTTgzZGlPQXhQN0FmUG4rdU02TG1WcGxrb3NESmt3eUEwM1p0ZmtzNWdMUTkrcjJ4a01PUWZHVHVwVmEzdkVGOFQrS3cvcTZ1c2pOIDc5LzZCZmovQU9tUFdtWlIrV0dJWjBvVzd5VDBETzJteUR6SnhPWWh5bDV5Y2x0ZkR1QWQ4VHc5Z1RBYUd3d0hqRGd6UTBiWURONzUgKy9nUGYzMkNIa1RCWjYzSzlQTGdCSnIweXFyZ2xISkxiUkVoeFJlMXlrNzRmZFNHK2N3VCtXcjc1TzJ3WjlHL3pOZy9mLzU4MkxCUyBvVUhSc0FxbXo3elcyaDRQdjdxSThZOGdrbm9WaWpEeEdSY05RamlSMnNzVmpRRE5xQUYxa09MNXZwblZRd0ZESlJ2SGk4OGtuSGcrIDB0Q1RWWTlJL2lNbFdGZDI4TUNHSHRTbjlNUWV2ekU3YjBPdVU5NVdia2FLejJNMmt1eU9BK2dyKy84QVVZbHZBaG8wOE9DNW1RMzYgMm1mOFVCbHpPazRHRTdUN01xWVVudjdKQzB4dmtTNEhGd25UeDRFMzdyTk5xd3dsaUZ4eHhBQVFHT0FEQUFBeFZqSTIwM1h5L0RLQSBWVy9pVlhEVktXSE1CeDhTdDR2eTlRVFFudUV4a1F3N0lZWURFRUNuVm8xQmlmS0VQbktPYmRnbS92eUQvcTc3NFh2dzFSNWV1dTB3IDl4d05GRkJBcUhwcXY2bkQ0elROWlRKTllWOEJya00vMlBkaUhha3hqWDhBYUN2M1MwcDZ5anE1UjNyTTNnRXE4SGpqc0I3Rmd4eDYgQXl3aVFGTk5hUitxdW9FR3ovSFh1VFVTUVp5U0Z1K1JIYXNWeVJlQ3hNbExDMzFXNGFqaTVPNEk0RSs2N1gyWlZRSGZrUmExejU1VSB1WUJuKzFkR0tUaGlCY2tsdEwyQXRqV0N2VThvNUNZdG9HRjRQVmFjWVQ3VVg0YndldkNmT21EUGRYSnZPeUpKc0dnOW9uNStBWDUxIFp6Vkpja2Q4bVcxYlFvYTZ2akhVcHZCZnJHR3J4SEN1YTVYcWxxL2J6QWNPeVUrWEh3Mm9Dd1BpckRlWGxES2VjODJjUGdINC9zSDAgRHJTanh3OUdXalRMbG01emFoeGNrSHFFTTFKRFg1YTJoQVphYTBJYStuaDFzT1k3WHpKMXRKNzVPVzd5ck5YVjl6cXZzbTdBMEUrQSB0MUEzL2Y4QXB3UEZOMlFtdkY1QldoYkcxS21Ia0FxcnZsZTEvWVJnOS9Ybkh2aHArRU16OHc0MnNFQlZaSGxtRjhtSitFTm5MZFlEICtHLzdCMUZSV256WnR5SFpDeGlhV3ZUbkkza1U0SHp0eDJmMEJRNmhabzQyVEI0bkUwckZXRll5THQ3Ymp6ZUZ0WTR2SVdSWFNCRjMgQURuM1JVcHFnZzhhdlNiSXQxa1lwazlHWHEzZkQwVFV2WE16NGZiZDhNVW1QTWN1SDJYYWdjWndOWEo0QTk3NXcvY2ZmdnZ3RG9iMCA5MlEwUGw0TGVhQm9HOVhEVWpNZHJDMC81Tk0wdXZUTlBvRjNQT2NNaE11QlBaTFVtT0V3SFMxWDFwcy9mTEZYMU02ZW5qQjI4L3YvIEFJQUNBMkJrTmhSa3JsUHRyWnJnVzRSNlovRExxUXFWMnE5SXJkWFBkN3VYdUQ0NFZ1bjN4Q0lPRUZTWUo2T1lSYk1hRmY4QUtmOEEgZndHTDlqc0hBVDhDbHRENFV0eVpxbHFWd3ZVd3hoMGl3clF0UU9IYkRGalBoWjdpcmJCTW1HR1J3bVhBaDJNUXIvWThlTXRIR2Q4eCBwUUo0QUF2NysvYkIxbk1HNUZHR0xsNUVNS1RaWWZVNHl1bTFOSUEyRzdHSXBVYW53M0hTbTl6TkJWWnl0MjdQTEtZMUFXT0YxaGVXIE5rVzIvd0NXNnNMRjJwc1kwYmNVRm5VUzA1MTNRN1d0clRncnZDVGZMZ2l0U2xxaHZqVUpVRjBLcjZDQXFPWmNJWnBFMFhlS3drTjIgVmhkODZ6Q0FleDgwZk1ZbllUUGhsRHpFMXk4Y0djdG5YbFY2MTFDc3llek5RSFIwcDZnNWtxd3JYeVc5ekZCYXl1eWVOYy9SYXJybSBtMXRtZkRBNXVJRmplUi9qeGprY3BJTGY0all0bjE1KzljZkRNYnZYSWtaMFkwNmdBRFZUQUNnQnh3Qmgvd0Rybi9mOGN3dHFRYWJSIHdnZzhqOEhzc1hYNjgxK2Z4MDdGZTFLVHRCTE1FS3ZQYWg2Wnl0Tjl0TytvQmtEdUduQmIxR1Z6VGoyK1RLZlQ4WENxMEtxKzIrL0UgRU9xMXNvVEZ2bXFzbWNxNEp3aGdBSDBFL3dBKzM5QnNXMld4SXArekxDRjFWYlVtazBoa1VrZ2ZNWksvc083YlFpM0dCaWg2dnA5OCB2aXRneGdoRFZRTmYyV3F6RmttMFZmMnplTFJDQktyZm42b1g3NkRzR0N4SHlNeXFoalUwVHlTVFZhdldBUmVYMlJxVjY5aDZncXZTIExHdEJidEJ3cmRiaDFYTUlNaU8rYWY4QVV0eHRteEYyZ3NzM2E1Sk5uUDMvQUdCQkFZcjdJcWRMMU1UNGFmbzh1NTJRTElkM0M3Q3kgTzR6QjVZT2R0Q25OUmdIQ3Y5NFczMmJpd2ZCZ1YrK0tySXMxbXJ0R25xelA3RnovQUdCQmZ1Zlk5TkVXRGYzaVJHUWFtTjQzUVJEWiA4N1JZUnhSZ3h3OTJVakVtbUZLS05xVjVDanRFK0RycGxVSVlSTHUrcEJGU3NkUFBqSU4zSkk2WGNJSXk3YkNsZkpDdTdpK1pXRFdNIGExTExKRWkxZ1hZbjVEWVlUUU9KUm9tRHZtWTF2VlpnaERCcVJIbFMzNHUwR1pHOXplR0o4K0EzL2Y4QXB3QTh5bDRxZnFvb3pWZVMgYlR4bm0xc0wrbnRKRGlROWNubDRvNVRIQ0dZVzluRHNDM0JVdk9WV0w1UnVZenRkc213ZnYrLzhCd3JxY09RN0dwZXZXaGNkcWxBbiBnUVJocTlrcDk0bHNpdWVweDhQS0RoU2NTdDRjemg2MmNxWGxzRk9aZnhlek14d0ord1B3RFlIN2tEOTFQYmhIRFYzY0VBTlp6L255IG1xcmkxa1ZYWHNoVHVDeGxkM2l4UTQ2SDJmVzNBT1BNUVlFOXRWWEN6Qm41eVJ0a3E1MjQvd0M1OC9oNThBbUhUcVk2M0pzL3FaR1YgOXoyU1F5dEZKRXlsZStOcVJuRnBsd1B0c3ZmVXNvWWxFWGNoVm5oUVkzSEtmU2N2emQwOURIam5ucUJyK2pualVPd3ArbjBYa0lEZyBHWkJyeFpCaTFMb2JQbFJWNVh0QlBIcDVod013N1RUKzZrRG5oempJeXJ4ZmJQOEFyYllOZ2ZqNkQwbVdCVHZTMEV1c1JsbDJwM2dTIEVsYlUyQ3NXUXdXaDJOYUM4MEs4TWhNRGgvdmcvbkRhbjB0aFc5bWJwZ2pFemdQem5BZmZ6L1RyWk5LaTNkMHhEdFhUUW4yUUhGcDkgSjJFNFdva2tDeGdDZWQ1UUdHd1RMc1EwOFBpUTlxelQ2MG5CMFlZcjg1Wi9OdTJCL2dJRHdIbjJISWZKams0QWJCbnV3UmtsRFdSSSByYmhSQ3ZKbGNnV0hTcUxUMThQTTQydG1YQmthbEswT0t6SGtuenpreU9FU2NBZS9uei9BVC9UMGVXVGIxQ01qb0VsZFhkOXFlUEhhIHNEVDArZWZIOVZjY1I3c3VNYkxHZDNNNFRIQ3VCSkJxYUJCL3daYlgvYmMvZGRCK1kwSGJCS1UvUGdhZFBtQlZ2UzdFcDlicjFmU04gcVYwaEVUWVRBK1UvZGt4RFd4L3pyTFQvQUp6NE1zeG9hQm4zYm0yQi93RFlQMUFkYmJJZUtycSswTkxzL1MrNzJRZWZEQ2tXajJwZSBWa1JMSXgwK3FkOFNnNmVZaG1LM1R6SHpGWCtSVlVObVJpbUN5cytFOEJ2L0FENCtlMkRwaG85a0dMQmhvZE4xeW55VnVWVXRrWEhaIEJKdzNZeFNNcUlteXVQc2dnd2hzbklGdDRuOHRPTWhOSDl1VEE5N2RnZXdJT0dBQUF3SDhhNnNtRlh0REFTcXFWWVNTTmFQak83d0ggaU9IdzVRRklhSlJnZ3lPQzNEaHpGOHhZejQ0TnJYdGhRWnRteC9kK2VuK2ZmdjREcUVZa2laTGgwcVJySno3OHZhZkhhQmdiOTNuOSBkTmtYTXFzSnltbmVSNHo0MjYyOGhYT1JOaWphMVYxK0xJcjdSWmp1REEyVzVYTjJmcUM4bHV3bDl3c0p3cjI5MmphYkd0QlBxL3Z4IFc1aERyZGdoemtOUGZKekpXVkd0Rm9MS3pSM050OFgzNUJmZ0g5L1VoeU95R1dnRFZSUkVHdUZxekcxVGFTVlNwNjlEc1lDSmxBUS8gSk9IMlFucDQ5N3NheWwvR25YeXNoZ3Z0bVQzdDJkMGYyUDhBbndBQkJQenkzVmNoeUhwL1BMT2xQamJrb0FsR3ppVFJMMzdFU0JReiBIR3pQZFNHaGtBODQ4dnFXem8zQThSbXgvd0NsZlB0Z1FlZmRLcHdwNEhUYnBuR2Y4WnRHMFBXTk9XdzhKTlBoK2VLOWpLZGpja1grIFNPRlYyUVlJQis1WTg5K3JNTFF4ak5WWnYrZ2VmSUxCKy9uMUxFeGpacmhFaGRwWTBoOEdUc1ZHWnIvb3hyR2c0N3padGZIUlNTcVcgN085QjdYOFplTDdlYXIvVS93RG5xd0RJUWJLZ3pNa1hjaXJaRmVpeWY0ditXcnhEQUVXMldnVkRrT1lXcERtcmkrWVIxSzhLSDVoNSBSb3N6OFhZOXE3ZFFYNzkvMzgrTlI3b2oxQVFNR2NvdzdLcmRaRmJpZTdRMHd3MVhhQXRlVGJHVzErdDF1K0psUHNqQk1PVkxYMCtjIFlHZUs4NGtwTHNjQVArRDhnZ0QvQUVTS2RtTmxRVElZdVZjQkoyMDBuaVFsSEEyRTBYRTRPZFhpZFJqa2hqMXUrSENrMlI4WDBNNVUgcER1b1laeWYzbWpUcVQ0TStBeHhBYyszOCtzY3l0NmpYT1lZWlZQMWRrc2FTdHhHak9zNE9rQnhjWDdRSHNCOFVEQ2VZUXg4T0NlWCAzMUhyZjc1Mnkzd0k3ZmZnQURnSjhBd0lKOTBra1FpRE1YajJrMDlTWjd1OEovcHJuZ2tVQ1JNdC92UklKcTIweWRjbDZvYWFlYWVMIFJRUkpMcVpOU1kxaEcxREd6eFF2SWl5YjBxUnZuZ3dVdExIdDl4RzVkQm5MYlFITTJCcXVzdDMxTHBOa1dyblA0bXdFbUhaQWg4QTIgZ2tBYWJaQjlKb1NGVDRjd1BXd2JiYUYwd25Dek4wcTlaZVhpcmppVC9YMy9BT21sa01BOVh3K2s2UnQvSnE2dUxlaHNrdXQ5NDVEVCA5WHB0eHZrVjhzRDVsa1RXV3Q4V000MmtPSzdZTUY4NUpnemJzYjluNUJQK2Y2R3dIOFBlYXl3N1FvMGJXK0pTc2RQQzlxd0EyMVlDIFFIQUZGUDRvZGY4QTJmWjZmVCs1ZGdYeFkwd3BXU0dyaXlaejMyTS92NEFCMWlQVDRjTnAvd0JKZW9Jelhxa3FhUnRTdGtjZ0QwbmIgRFlZMUxkMkx1RjF2WUg1SXV6VGVocjhNNEI1NVhLZnptcjFlczNvNEVDRy9Qc0d3YitnMUZoa1dXRFlUVnh5N2FUbHBvQWRQdHlUWSA2WVp3dm96THVTMzlNdFJ5R0hjM0RpM3BtM3ZwdFNzcjZReG9ab3NZcGR1ZUtaRndyQmxsaGFTTjgrNndyZG1QazMwMm1Sb3NUUTlEIDFJYUxhV0ExTFliYmRrYW5FZHFzNGV3cDlvY3NLUlpuRzdVRDd4RDRIQlVoejRxaHlheXJVUFpnelpLVE5tejc4Z1c2QThBQTZhalIgWDh4b2VGdXVXbFZYRSt5NkhTYnVzaTFFK3AwaXErNDJudXIzeHdZR1JrVDJSUFd5RGdEYlU5RGd6RVlZaGkrY3ZEdDJ1MzgvOWZQOSBVL01SMlJ0ekR0dEpDM0pBd0s5a3BFY3c3SjViaHNWaVYxZUdQcmVuME5raGgyQXhWZk1JQ05NSmpHbDgvWkRac0cvZTU4K0F3K3ZtIDBQc21ydUNxQlNHUzBxM1NEMVNyeEFFU1gyd3lmdEM3dFZWTkdONGZERGc0VGZCOHdzbzVEck1ZVXE5bVdlRTdJY0FiQitoL3ordmIgVU5JWWxTSHkwZ1JQNUpJWXROR3pua1ZuVmdjNEMxdHJ2cENTTVNTeHVxQytCVWE5MGFjRG5ia1ZIcytjY2FGMkNSYnpCYWxNckdLNyAzQWJyMWNHMXhNcjRsRGo4bEtQbjN6OGJkazNGUG1mTU9UNlA3eEdDV1BLUDEra25OZ0FjK0FmdjY5S0krWkZrR0dqaDlicE5JcmFTIDIwZGttS2ZMVExrcVdaWXdHR3ZodzlrR0VOd0lHSng3bHFyaU1abndwd2JtMVhZNDRnRDZEejRCdjRDeFR3UUthTGRSRkF4U2xoVmQgcWhzR1pUZGhXQUhxdFhYa01vNVJDbGpRMDljc2hFdUN5REk1OE9OeEE4anA0eDUrOGpBWnMyYkIrQXg4QnNCK0hqdmo1ZDBPNWtPdCBLVEduaFY1RGJEMUVOVEtueEVOV2l4SlQ0SEgycDNJbU1uY0Nub05sdUduaXErRE0xWG9ieTgxVWtoT2NIMEczUUhQZ0FESHBaL2tqIGtYdVNUYXhPVXFFN2xnL3h5UjNqUVBkZDN3Rm81TWpabldWWkRjelBuSnhXSU5GUlh6N1c1NC9OZm1CcitRSHJTWUhsSGx1eUVNcFggcnNXWHlSNVhFaCtHbHY1TndtSjh5WVloODhlSHh3UGZNSjFCVjVUYzZQQ0pKczRmQVAyQy9pL0FEL1hIYkNkY2prdDAvUTdrU3BQTyBESWcxaGFBNDBqWHBtSzBDWHhvbUw0Y3dIY0h5RzRCL244dFZWc21qVmVWUmhod0liL1lEL3dCK3dYejRBUHk3MFMxeGZoODNaRFNHIG0ySDI5K0dCTU1NdzlLWVUxWDNBT3Rodzh3d25tRWJjRkk0dUl6eTBibThuSFpKNXovWDc4L0g5L1B5UmdVamxBOW5TbWgyU1R5NW4gUm5nZytLcEJoY0pMbFEzTWx0dy9uRTlraHNBZXhwNitCUjVpeXNib01HZnNaejNZQUQ5eUQ5VkpGRk5xQnFKZjZFckdOUFBxYkxRRiA4djhBNlU4aTQ0L2NUZkZHTk5JdWptMGtjYUNHVkVqZFVHRnhpV0tiRStiRzVER3dQR0lVam5Ld0hvK24vU2ZiVFpFb2NvSEc1ejR0IGttRU9Temg3dlc1UnAzNnVmNnc1Sk1aWERuQUc4S3pxdGJKakJkWDdaN094dndDQ2YrZ256L1RPUngraytncmdTWXJrN2Y0SVlhL3QgaS9hbW9yVFBTTzFpKzB0b0ovTUZ0RDRlSFQ0WU44VDN3SE1Kck5vSWp5aldvay8rUDFGamdmd1ByOUZYeVJRZEJYWUJQQmlUL3FjVCBJZW5pdlNHU0hWNGpJQmlscFI0TzRRL3VCZ092dzJybUZhVFRDS1RGOTN4aU9iZHF1Qm4vQU8vbndIdGQ2cUdBWFlOWnFvdXBheGpPIDFhTlZrYmhuV292MmJjRnlIaXptVVpIQ1lIcCs0SHdPd0liVnBhWHdQazNrcUxXWG52WmFJVGo1L1lOZ1A5b3V0VWtqbG1ScDBrU1IgSTNZUmR1M2VWTEViYmF2bkkwMmRMd3VQT2RJMkRBN1NacGhuRklOeE8rU0dKY2gyWlZtVytQQi94V0t1MllEcTg4K2FkVEw0cWphbCBwc2t0MGlqdmx6U0lrT3hqeW5YTmpJYzlicmUxTFRNQng4T2RaZGdiSE1KNEZGY1lqZytFbTkvUVFIUGo2RGJyOEFnYW5xT3E5T2VwIFFiU3lha2t0WUN1U0pXRU8wOXA4ZTJBL0E3Tml1VnFEMXVuekVUamRnVnYybGNIeXVYemt4UVh0bXlZZnFmOEFQN0IwL1NPWm81VFEgbXBSV1o1bW9heU5UV2MzMWxXK211dlhGZW1nVTFUOVBJd0RoZ3lQVEl0NFRKc0RGOEljM1JtakI2UnQ2Q09xT3dZdndEbjUvRERxdSBGdUI2ZnFwTGR1T2dlTm1RN3Y4QXppZTRNRXhvRjdXZU1NQ2Y4eFBoaHQ0ZU1VOVNya01UV2QwOTNqWkRld1llMzM3Z0FDMVpYeW9NIE1YWkN4WENRWTF5ajIyTi9jS1BnYzlVSThHZ2RlelR5eVpxWXByQ2J3V3dSZ01xeEJCc1hiY0N1Yng1Y3lhVU9XRlZWK3VHbmhPdC8gbjlzZHpyZ2NNV1E5VjY2ZTJmamNQVEdIbVZ2UG1OVGF2bitTYzVwdTBOendONzJqbi9vSi9nUG42ZEE3TUZ0c1BPREpwZzJ5QzNZSyBKam1NNGdrUTdRdENwM0tLeVhCdkZKR0U4d1FxdXF6eWVlYXpDeVRLRk1TWnpaRFp6M0FIL2Z3UFJVRGJDRVN5Rld3YzJ5UDhBOFlyIGRUa0tzTm9pVEdnQzJXTUJNTUlmNGJJb0o3Qk00aVFzdEg0MFRGN3B2bTltem5BVC9BVUUvaDArR1NSZERsVWR0TzY0NEVrbHlscVYgOGg3NHNJZXdoeFZYMkVMY2pCQzFJZFZwOVBoeUV6NS9MUWUyVkFVb2NZcy9kdkF2d0IrUDlSVzJrR0lzeU9pUm9lMUZ1OGk4dE5qNSBGRERtanlENU9SVWRvYldraGhmSWc1TzJHR09FZExsZk45NHhvV1RmQmVZMHI2cktDM2pUSTdoMUpxemJVVXE5a01pSFU3dlVGUzFLIGtQamtoMkJXOWJ6UzdnNFlMYzRGcVErQ3RsQ1l2YzFuaEpzSWpuei9BSURmK2ZkVTZvZU9IY2loNUR1bHFiZUJ2aTA3bUs5cjFmbGggd01vdGQrenA4eUd0M3dId0h1SCsrRS9GNVYwUGsyeVdpN2d3QURZQUFBK2Y5dXlzM1N1OG94YzEwbmp6SmFtb0tZU1lWZFBwK3B4TSB6Rk4rTFRkVmtLMzVnNFdReU1CaTR0UEEvVHhWYjRNKzBMUEJ3aVNrbzU4QjREd0dIVE9qaGw5M1pLOUZwaklPZkNrd0pMVDdPVHpJIG5oc3FKWTEzOFBaSmdjTytNaS9EQm5rNVNuQjlQVE5WNzQ4NzVzaHZuK0FEL3Z3QzR6S0ZDUzRGNUNHWm8wMmthUVZteW96R09QT3ggWWtuWGtjRnFOQUZqSmVWR2RzY1ZDTTJiN2ZHMmthMHQ0ZDJSNHNrY0N1V29uMlEwUUt2ckhLVjMxdHV3cE1xNWdZYkNBNFZrNE9WUyA2V2hkU3pDQzI0VnZNVDF0Z0QyTkFyK2YvVXo0cnJPQU1Jay9mdGcvZnovSUY2cmxCYlE4ZktBcExKY0dhNFJ1NUZQc2xiaVRDSTBGIG5LVWhrRStHaGh3OE54ZkRnSWVodkcyRXhiUTg3NXpiWXdHd1lnVUh6NkN3bHV0N0FzZlQzV0xIbFUrUzdjTlZ4MTdWNlRrMGZiQWEgTGNiREZzWjljTzZpZmRsYjhnV3dkMC9hdkppOEdkRkJtMG53RDhBZnVBK0E2Q1hTczQ5ZkhPMzJTeURUR1ZXNkFrR0tmczVvckhuZyB1MkVQZUNFUDRiaDh3ZVlybStGNDg4T0RNc3E1UlkyTTV2WncrQUFIL29MOGY2VkRDcGQ4UWliYVo5aUVaVVZGRXF6eEg4Z3h5U1ZaIEJBN2JjZTljejc1MGpkajVxdkF5YktWdm5tU1IvTnFGdHNyRmFkekVNemNtbnVWVXI1VXJKRmJ5VVNRMUxaaXZWc29DTEhsZitjRGggMCtIQ0lUQWR0TURhRG00REt2S2NsUjdSMlR6L0FPdmFJL2oxU2ZNSWFmNmJzdzlWUXVaak11bERRTDVrV0ZWWWRzRGdaVVN4Z01PdyBBOE9IYWpKTVgyUzFKNURUVEJXeGpNcnE2TU10VEEyY3hBZmwxK1FRSDJDMTBOa3BkanNDd3cxbDNsSkpXL0Q0OFlxVXdyc08xNDJhICtQamdRbUxZZXlPTjhENGx3SUdIUmtZcHdZWWpoRWtJajkzZGcvcjdEcnlTdHloODFjZUR6bFplZEdXM3l2WDl0a05VTm8vMm01QWIgSTQySGh2aGh3SVRLNW51TTlxWkVaWmZQczNDY1AzLy9BS0g4T3JnTFR0T0k4MC9pWHZpbGp6a1lOdGhOeFk4a2t4WXBJdCtEYURpdyBuclR4d3NVU1JKTThHV1d5Y05zdGtNT1BjQU9UeFk2OWFkSm4vRmMwOGFkRSt3VTlEZmRjTkcray9ialE3Tk5jcU5lNk56NllEWmk0IGRaSGZGVUREcXJqRzBpQ0hyWVZjRFpjdGdqN2xuemhVN056dlY2Y1BYNk1uS3pxbTFoSFF0ZkZSaWZPWTZYUXA0Z0RCelp5dDZMVGIgbEJPaXlUT2RNUDhBcUwxYktWWFdTcE9WYk4vb0sraHpYMnBRTEhGTDBTV0VtcXJKVDFCRmVEQ2haMW5rMG11THNVMThLSVdPS2JPbCBiRmJGTGxzaTZCb0doZkhBdmhzZXF4UkZ3dkZGRjVlYUFGKzNwcTZlREZpNm9OVzl0VmhxdVc2a29qdUZwNWxWOEJ6ZE9GYVE1TmNxIFpNL0RJUGNTcTRZaERQdUlTcHJSdWczQ3haM3hDdDhYdmVPS1B2d0VEaGhpZkE5Y2RSbExFelV2VDNVdThYSFFOUzkvcXkxQVoxWU0gRXBib2NYWHJrbWgxOVBjTGhRN1VyY2VYdUxiOFlMSnVlNkkyK0pJUTNodjc5c0cvbndIVHNoNmc2enRwTHM2dEczT1c2clEycTJsUCBVUXlaTzB1RFJUZW5zV2h3OEdUNGRicDh3Z0hzYXRHRGc0amsyQlFtVHdOdTMrZFJjQkFiL2owa3loQndWM0JWZHdPbnRiR2hzNWJ3IHNoMlZFOTNNUkQxT0NudnVnNFEwK3lFTnd1QXhCZ0wvQUJVd01zeStNVmw1QjBtN1ZkMkRBSHdGUkFEL0FPWFRlUFRKSWlpT1kwalAgRnB0UWM5USsxRHBvMkVpc0RMTDdWSXpsT0daQytTU0s3cnh0SVhSNWNva2wxY2NrdTJjODhTcVF5UVJtc1dzS3ErUlo2Z1V1a3o1UyBzNzRVdCtmekNhK1NiRFQyUmJIc01PejNLd25LbStZWEFodmwySWI0d1RKd0VlQlZiSVppZG9QaE1tY05oTjg4L1VJQS9VVDgvZFdEIHN0REVMbGRCODFaaVlXU01UNVZmVS9DQXUrbzZIRTFBcVRPcnFFQjhoV1BpblRJR05QTnRZUGJzSXdaYWN0RkdLV29FQzBxYllBUUQgQmV0ekgvbFFGWHF2SVdKZnRtYWozSE5kbzFidmN4allMWEpKMk5zaDA2VzJPU3RWYS9ocUVyZGJpVnVSWlVpQ3dJY0dZc3JOWUZSdCBtQTByVkVrbkQ0QStmeGZqOXU5S3hvMUUzSXVWdFRJdVVOb3FIYlZQcmRlNlJ4dGVvNm5Ncm03cTlRMWRiVHc4T0hxRUR6TEEvbzk4IG5XcCs2STNCL05neit3SDBEWU1kZ1pOeEhwNVJQQ2lhalVuRU0vZTJRUUdGa29iTWpFRGJteWZDbTlOcjRxUDA1WFNTSjg5TkNya24gdGo5SVZ1TEp6dXhybGNzV0taQXA2Z3JwdEZIZ1BYMGViamVkWTFLSHpiSStXUE1PREE3NzlhQW5HS3RyNWdPSHBQaC93K0lqd0p4dyBXYk1hTnpadjg3VS9mOWcvZnp5bjdjektIYUtZdjJBZVNiQ2xPeVMySytvU1lPYkxVdG9DdlZ6RVcveW9IMUlmTVg5OFVyQWdUdnMzIEtGa1ljN29oTmd3ZmtIRS9qejdyc09IRU9wUlpLaDIxUG9ISmxUSktRUjBvcmNlN29kakZXRkRzYXQ5NFQ2VHNpdDNCUGhWeTJqeDcgVVpaa1pvS0V4bFZ1d1M3UHZ3QUFmNTlqMHE0WWRMc1p3R3NiSHA3ZGdLNVQ5YjFsVitkWWRnUzdnQWk2bjM2WXZKKzhha0szaHArQSBTQVBiYlVNTXhQaTRzbUROaE9jUDNBUUdJQUJqMG9KOVJZVlppaXV5V2tYODEwMm1lQ2ZNMUhKSWhmTGJhOW9MWE5nbU8yVVZYaE1rIGlLNnN6U2lPTytIU1dLV0NQY2N4czZNcXVOck1NUzJRQkc3UXpIU3RDZzBEY2wyU1pqUWtteXlzTkF0RFl0cTFTaVh5VkQyZFBxdHcgcFB3OXhlNmtEY0NlMThHSm5BZ1RmTWQvUGdOL0FiK051Z2NSWXhBeFFWZ3RTazdMamdFTEVLZm1SeEpoWGFGNW9sQjJCYkRvZHFRNCBiQUhzWjhjTzNOYmpCbFlGQmd0SFNkOE9IOGJkL2Z6NzkwYktDV3dWcGhNWTJPaDBoSXNaOEcyYThOVU92NzVtdVJRU3J2c1B0V3RMIGQySWJJdnpFZEQrZWNUKzVuUEdZbi9FTzdjSC9BSC9ZTi8yQmduR0ROZDlQYjVMcGFtVnQzemJtdU5JcjkyeVUrSkR1UzBGT3J3QWYgbUJneFQ5cUp6Z0huY2ZzdFVUeWFOYURRc293Tko3Smd3Qjgvd0UvNTkrZUh3bFdKQmpoT1lTMTNuZU5NUlFxcVBGbno1NkdPTldrYSB5alpKa01HeXh3dzRQQTkyWEIvUjQ1NEVJK1pWNlJTOVlaUjZ5SkpsdEFoQzJuZUdIMC9sbVJvVjRqNUZUeUVPcTBPdDNBeFlDM083IEgyWnhzblppdmFGRzIvd25lemg4QXdiQSsvZmdEVVQ0OHlncndXN3VLSWR0VzAwT0J0ZWp6QTlYdFllMm5JVEZUUTdCWkVQK1RmR0MgSkJRN2dBZ3c2eU1mTUxMR1dvRXRFMjhBQUdBQUJqN256NHBEek5LOFdxMCtBQXBpL3FaVFhhcmw0T3lPRmZ4SWRqZ1ZQWDBtcDdCWiBCaXE1a013UUQwN0FyOENEY081alEwTXpOZ2IyVERZRUVBZ245L1lENitYeGRvTGlmWkNRNGtsdFZQV2NwVEtlZkJxZUpNSGtPSkZsIHpFK3lLM2ZFT1lZWUE1dzk4ODVNR0ZOMFdTWnc0RXE1SFFRR0w4dnI1L2Y4YzdaekxLNVRGMlRCbldMWmtPUURFbytUMWhHc2prVWMgc0FPTHNWdFJvWVVEb3FLZ2pqVkhpbHR4aVZVbU56am1ib3Q0eE5CdWFkbW95NjZEZDc0dXpLVWc5bzJScG8xWE50T0lENEJlSmY4QSBENGhwR29LMmxzZ0hROVpsd2U5ZlEvci9BUE9ETHl4ZkViZlBObzc4ZlBnRUh3R0I5R3lEalkwYXZMSXZoOG8wYnBYVjBOU1hyZ00xIDZybG9pR3I0SGsyaUsvRFE3SHA5a1hFOWJCOGZQUEFkNUtmZWZOcFBPVjkrQWdUK1BnTU9PRzBabFMxM0R0KzFRNmlCaW9iK0pIekYgc1BFWkxHS2NvS1BnOWt1QkNwKzdFTmdNSEZKZmJUYWZ0aXVMSmpEbFhCTzZnRGord2IrL1AzVCtjNWlmRjB2MTVWL2JHMFlabXNhYyBiTFlXNjNJWEhXOW9JZjhBRGtldFJQWTBPN0ZzdW44a3JpbGlBRUVZck5tZkJiTU1xczJrNGYwQ2duOS9BQU9pajI0Mmlpd21rM3BJIHd6WmJsU0NTS1I1S29WbVlsR04vdkkxUll5dEtMYVJCaHdtWnFrTkJVQjV2Q2paNDhqZ2ZLbEJpNDlsZzYzcXJLTWJiYjRFYXZMNEYgVlIzZXQrR2lZdGpROE40ZklhZXlMN0tEclR0bzFJZFoxbVVHZHpBZXlKTy80QUQ0QS9pQUFIK3hYa0w2WklaRE9uaERxNndsMVZXMyBjZ1NyMjJmUEFZaFMwSmxnQjYzdURSblE0Y2V0ZzZsSFV0QnJaWkdXaGNveis5dkcvd0RzL0gwRUIwWU9DTzRPd01iUHE1d1pFK3lsIHNhNzNnMVhZdnU2ZUxRN1pmU2o1WDliMlIyZkQzQVArRFA4QW52QmhaS05DdVRKbzd2YUlRSHNCK29jSDQvMUkxUERYUDRTSWJSYUMgRTJWVzJMWkpySHZjMU9WRVN1bWlxSXdGUGdHR1crS0hlNFo5YXNac256am5HR2E0NmNlU242KytPR0svZ0F3Zm1EMU1ZTWlQUExPMCAyY2pHT0tPSEhWcTcwMnpHTnhxa21rM0hVZmR5T01MWVFwM1lvb0R0NXd4N3p6eWd4aUFXWkxZcDIrVitEZjZybGZMZHVWR0dqalNtIFZhaWxrdEdJUnNIMkVxaDNlR2VWNlJ4VjRmekE0ZHdNTWcvWTdMSDJXOEIyWm1WeWlNemIyYkNZSDMvWUQ0Qit4eDZjRXkxQ2p1aC8gNFN2VDZreVdnSFpQajNsZGkrajRXTlYrd2krUGg1aTI0UXpCREVHaHNEYkJEb3d4REZzeXlEMlIyL1lOZ1A4QWdPaHRUcnRiYUxFYSBqVGN5V1FxbExyMDN4TFFTZG5ZVnNXVXB5TGFDR1FtVlcrR0hCdzRlalQ2UFBJNWhHUnJrVjJaWmVMUkNmNysvWUVGZzY0eFpWa2FGIGZKZDBOa04weTBXcEdscjRlcGFIWVliNGhOaFNrYmdJQjJRUEREbUxCWk1JRGg4NWJXZHI3bWViTlZjY1FUK1AzN3Badzc0d3FNNCsgbnpSWkxraU0yWVhjWER0L2pZcjNVOU40cmxpYnNhcE9VZEltZVJCSVJjYjRZRXZDMWk1RXlvTlhwNWVHem9JMkhVWkF5cjVPVm1nUyBXZFlLVHl5UU55US8rbzN4V2hiSVRmbVdReXcwL0FINEZIWkdhczJqN09DQ2JKK24wSHovQUxuazFic1JvcU5iZ1BtZFVxSldpZUZFIHlLcld4OFJibEp2ZTRwTVQzQXhNMDlzamVRWkhoRFlKN3hWYXl6UG1PNWd3bjNnK0E4QjlnNjBtQ2hCM3RBUFhNV3Q1T205OFBWZEUgYUllZFlCYVllS0ZtaVZNSU1qNCt6VEswdmh6a0JQYlp6SVRKaTBONldmQ0JQWis1OGc0YkFBNm5yRXVnV1pzR3ZNcW9OUGRYYWV6SyAzVXJDMFdyWHp4WVhLUUphNUtiY0dFUERjRnRrWkNEaEI3WFcwYzR5VGFCYjBUUnpidHNmQVg3K3Z0L2Zvd1lNU1Jta0ZDSk5uY3hqIElCV0pXekZ5ZHB3V3ZVNTVYRGtZRkJHQVpVK3Bkb0oza2JGTnRNZldtYWpVRWVSM1k2NzhrNzF4NVVyUVFXM3laYlV0anV3YWVub2EgVEV0aHd2aVEyT0RrVWE5K1ExOWJtTGJKVmNNY3lRWjlnS1gwYmxDR3pES3J1d0lFQm4vQVlZSUovd0J5U0hTZW5OY3NWMnNFRnFXSiBJZGw2ZXlURGRIYkcrRjRPVUF0a3F1YTNYNFpoa21iT25oL244OGdzaE1ZaDduVUR3N0pQbi92M2dQMGMxbHVuZjIzTEMxU25nTGErIHo3NDNXcjlSUTJuMU95RmNDN2dZcTJRcXVHSE1MY3hnRHF2SDFGVld4bTZDeGpOdmU5OCtBUHo4QTRDZndQb2NmVStZcmgxVnBuNmUgeVRKQXRwQTdUMFBZVlB5OGE1UENaVVY4VHpFUENHWm1jdzRHUTdWVExNV1NoU29GazUrVVFkUkgrQW56L0lNT21qY2pYY0N2SElFWSB4bzZFVHJIR1V4akVGOTJPUkJiY1g0R1BRb3l5UFMyTnRFRHMwMjZqU2M1U08rQ2JPZERGY1h1ajNkdk51dFJFeUdMc3gyY3I0dHBTIHp1MWNudFBNUTlON1p1aWFrSWJSRHI4eFcvWit5SWRmdm5QR0NmM0laaG5GMmFzM2gyN1hXb2Z3dDBBQVFQdndDdCtuTmtzRFNyYmsgT0F4M05KRzVWQWpST3BCd2xvRXVIUS9lT0lMREQxc1BhZ2RrdUFleVVEWmR3QVVkOEdEQ2lIeG4vUk1HL2JEOWd3My9BSzQ2dlQ2YiBTQVYvSHFWdUNpcVRpWEE3TU5mV0VoMWVKbUs3UlU4VlhtVTgrSVFleUZ1N0Y5a3RUajg4NS9RYXVqZXdRSWJSL3dBdTgrMzkrUVVHIFhkTzM5bDVDcXB6OUs2U1pnVnZhRnJtTHN1YW43akwyZzBNSUdJdDRtRU5sV2c1Z2N5QkQ5SVBzNWJXWGpuaU10ZmRrbEhQY0JQcjUgOSt4QUFLbGlTVkZTUjBLRHlFT2QyRURXZTNHNDJrUVZaN3kzMlUxd2hveUpJVVF1S0pMeUZOdU1ZNXVCZzJkV0xIYi9BS202NmpyZyBaQjZsWUI0QytXMDJ3M3h3TmlVLytKWkh0aTFISlhzSXBiVnFNTDVUNzR0ekRBNWtxdnRkQVZXVjVacXZRMFpadzN0SkI3QWZQbjM3IG4zVE9WM2hQREp4TFVFaHF1a3RxS0ROUENSWDdzTlIySGE3YXBFQ0xRaUg4UW04TWpKUjRldUh4UHN5dVE2eXpQaUdzakxVZHRQRm8gdkg2QVA5L0h3OG9Zck9xbDhPK1JjNm5CdVUxSUVRaGVXY2oxT3lOQUduTGFLR0hDWkRUbnlHK0VHOUhReDlhUENHOHJQOFJsWnJPRCBza20zallIN2dKLytvQWtmRGJLcHpIWlNYSHlRQnJuY25jZk5KVWZMbVdOS1laVDRIVDdzRDZ0ZU4yb0FobkFJK3k0TElNck1wVnl5IGpJOVhPMW9vNEFBQVA3Lysvd0FKY3Fpb1BZaXFUK2F4QVA2OEhqbmkrZWxJRkN1N2kwWEhJMzdiUEhIemRWLzIrZW53dmh3OVFWV04gL2h5K1BZV1ZuTmx4cTJUbkQyeHdWd1JhcFFLZW5tYWZjRU53c2hnTUE1NUJ0Ui92TlhxOVpqTmtTY0RuZ0Y5QlAvUWFqcmUwQzdRYiBmaFdYS0FFc1o0ZU4zQVE2OVlDMHdvQVhpamtIVC9zWWVIeUJrZ3o2L2ZBUWNaOW9Sc044Ti84QVRERUFmMkFBOGRPYW5YYVlVTVY4IHBFN0lTZFNMdFpERFQ0RndzajV0dFNsTURGNC9zNmZRK250YklNazRDd1BsY3ZpTmpxTEZ2Sk01ZG5Oamg4L1VSOCtBd1BuK2tFdU8gaWZGSHRRRUM3U2x1eTF0dDRPN1ZLNGQ0S1JBMVBjaXUrTDZmOHkxSWJJT3NnR2ZUd0tvSDNNV0xzell6ZmUxSHZ3K2dnQUhBUUNDLyBSeFdUQVNCMnhhTkhURE9Qd3Joc21xK2JGR3VCWnZpMVgyRVNiZW1hOFd4enhyQytMVzdzZkk0SHpkOUVpV1VzQklLT3l0WE9kOE9CIHFLcTZZcjNuWGdkMzg5dGJSdDZHeUI5bmNQaHRSNndKK3pMTHkrSzR6MjVzazdBQUFZc0dQZ0Q3Q3Fjb2xMaXVxeXRVdW0vdndCbVYgSzJWZlE5U29IRDR0WDJGWXdzd3dPSEwzeGtjQ0hnYkJVZ2U1L1EzbitpZGo1Qit1d2RRTHBiRGd4NmhFTmp5aVJzTVpaQW5lQmtHQiA1bFA3RFdWY2kxdGZXK05wOWtCdVNITGFyN3M2dHZObVk3bU1CdTJ5bkg0QXZvUFB0L0E5WklUMWRqM2dVVVBET1cvSllYbFBzS3IwIGZpL2Mwb2h1TEFIaHpBNWd3UWgyTXBEK0tCMWw1NVF6RFBDYjVzSHRzRy85REdHZU9FekxzdTZhZlVsUGZqbGwyWlVsMS9peEh6MjggZE5tMjFtbVdGOTZwM2hqT09HNFlnZ0xlNXNiekhIZFg1cXlFL3B2S1dKWUttdDFLZWF0Z1hBNFNXdm5vY2pqY1hUbnA3YVUxd3I5RCBRN2dzamVDQmlDUHI4OHFtQ2JNVUtZb3h3MkVkdUFuOS9BQU4vQUFIWkhGanVOalNtVloxZ2N0QXFVUWZaQzNZQW1ueGNwc2l5b1krIEhXK0dudVpWZkpHbzlSNmtxMlIzZnRHci9CaEVsMnc4QWdnTi9QZ0Q2WnRtUlhiUVlEejR0aFNWdGpTVktJbnVDVElMR0ZjWFh1NjcgZkNodzVzUG1CZzQycCsrY1orK1BPeGhBbG84QjJEQkJ4L2Y3VU9QeUVQUjJlVnpPQ0JRSmtPcENkVEdrVlZjRjZJZXRDV0xLUTJBTSB0dzYzK0d2dmh5eXg3YlBoczNLRmNtc2d3Z1Q2Q0FQL0FML2hoMHlhQ2R0cDRkTENzTTh6UWtxdFNmWnZNa3YyYnR4Mk1UV0M4a0hwIFVjc2NTTWpPNW1pUXZLVWJES2loVUVkOWVHbzJlU2VEZlI1b3JyKzlMNFlMQ3pUSWNiV0thMUVraG9yRlV6MkZQUFJiQ1Y5UU1NZ1ogOHdZc2doRGVHMndIdWN0ckROUTdTOG95UFYzZ3dBREhZRDc2QUFkSjl3VTQ3T1FNWnA2alFpSGNHVHdqYmx1K040Y3BVU0xTSzM4TyBKeVJrTUo3SlhQTVVPQW5vMVo0aTNuWTBrM1Nad0FnbjBIZi9BTDhnMVhUNnpGMW5tS3ZjR0diVDR0aGpWNnYyVE9wY3QvOEFlYTArIGxGdGZaVENmRFcyVWdZcXM4UStkTXN3WWh2anlNZVB1d05CQVlnQUhnZW45SXVnMmtNZmN0TkdvQmpLemdqYlgrTlYyQmJESTVKb2wgeVY3SUlKOE5ibVVuREhyYzVTcStmT2gxQXpDaWpPekhBbU4ySS9BZWZiQnY0RG9ZanFZbWxkVnRKblY5TzhCemtTQXh4Uk9BMUxnWiB4RWhCbzBWcWpWazN3ZFZoS3ZBL09RZGZGbENPYkYrRCtLc2ZucnpBMWgzcnEzYXJrenBqMktWcWZOeFZrRGtZVjdwRlU2T2kxZUNqIFR2VEtQZXIxRlZLWFlNb3JYbGhFNTVtY1ZjMG8zakZMd1owM0pLVEJ3M0V4NklFZk92YUZWMTZoa3VVNVpvZ2phdGVaRG00em5uTXIgYWhyNnJ5cDZ3ci8wbXhRYU9OV2w1SXZKS1o3Qkhlallod2t6blNwaytLSEtaaGZjbDBRSUN5WWNESnpyVW8weUtpRFRmMmxTSWlqTyBhWE9sVlIzWkZqa2FOMnhObnlhNlh2YW55MnIwenR3V2RYUUt4NEpJQ3hLb0JyZ0FBVVR4MGoyRmZYcXRydW5yZlVnUXlKWXpaa2FvIE0rQTFldkp6UFNaVENGTSt1bjNaZktBaVVQTmhrR0dhWm1PQnBiWWU1OHF3b25wcm5PeXF2V29xM1h1WDZscjEzczB3NmVxMTFSZjggVXpVSnAvdHdHSWtJNmd3NmpVS1JKUkUydWFqT09tUXNWZFVCNE93dXViVktVbWh5WjNFaTRUc1Q4WWVGRXFydEZnQzRMMnNNMFBMbSA1TS9PczY1ZXNkeEhJNGRnNnBDRmNNUXdGdndHdXdQMERYUXhBQ1JhQUY2cXpYRm44bjkvdnJ6eXZobkthWDZ0MHYyVFNQcEdLVmlYIEYvd3ZnRjgyRTV6Z29oeUxuMjNWQ3p1S3hjSUxOeVhtRXlDTWhDTUFGUlhGaEU3SUY1WXhTamdCL3JXY0JjajVXZEp0L2QyaytrajkgNjRXdmdxUmc3QTBOTFVjUENoVVVWbUtjcGc5VDNsQjVoNGV1R1JoZUNzbENaK1BDc01qbktlQUxMa09vK0hqNmNuTFZNdjFLdVpuVyBkYW9pZi9VeWxuQjlMcVE2MzJ1TGc0WmZERGs4RUVjbnJZNkkzOWpTc3lxelJ6YVhiWXFDMGVXZVdCSXRjcUdXTlhRdndPcWZaeW9oIHRXa3QyYThhOVRWMGtuZzRyT25ZcVl6UEI1aWVaYnhnVWtYOWFtVnladVl4TFlmMWxBb2dwNkZJTWFoSjJaT0d3OHlZdnkvUmtlbkwgd0dxMGd0OXYvd0RFQXRXZ3N5NExsckdzL1RwNXE1cm5BYVdzQXBXY1V5OStoeVczZGFzQXFQQitqQUxuTjlmTzV6MXRWZGtJNG1MRyBVSjRvQU9Gd2N0ZEN3UW1YbldkR3BPMk9UeEhLdzU4TXVHTEQvTXRuRStSWm85WVNBUEFBNFh3SytCMWZnT2pabVFtLzhXRExlWEZ1IHV4aDBYeTc4dGVoblM4TTFkc2c4dXZzUXM1SXpVZG1qQzY1NlVpZGpaUTllQWxuVWZscU1RWmxNb1VRYlRJU2ZKR1FNSTlZZE1GL3QgaG1vNmplczhNdFF6dW9GbUxLYnppSTVRSWlRVWtTeFhPbFpsZnB1UVBhSS9xVWE3TDVIcnpqSlpBRVp1U241eEhQekJrUUxDVHNmUSByZWpPczZXN3UwK3B5Wm1xZDZ5WW1ycTZzbXZBL3dDbld1TlZXTk1WQzNkNGdDK1U4MTU4bi9xZXZ4QlFoT2JRRm01L3BuSElvc0NlIFFKa0paaEV2VkNYdlE4MXBaTmUxU0J0dVBHalpXWE5EMnlSVmZWbjVUWTZyeEFOT2JzWnhFY3daYzVjSVRBV2N3VWl0Rmx1dDIxTW8gbjZqWHdtVFRyWlJYMXdNVHhVbGtDQ0JCVUZxbzdNRlNEOGt3UjljTldnbDJxWXRCREU0c0FpRldxWE5uQ2lPSzFYMldtNTFuVGZFVSBqajNMaGkzM0xZNW8rUmRDNlBQejFVLzhoLzIvL0RyajA4VjJHdWJUL2RUb3l5aUFqMHE0VFQxQUhKeWw2QklKQ3pvMXlLTHU5bnZRIFJXUFFLa1I1dnFBK21jVFVGUE16TTdEMWpWV2ZoNjUvcUxOWWhkYVF5VHNRemwxcHBmVHJjRUFsc29aZDFjQTN5Rnc2Rmk1NllETEcgQ1ZUSmhUMGd3bzdhODc0QkFWWVhyOWMrQWNJRzQ4L09VRkNQTzlNa1RrSHhqRG5XZFU1UDArcTVQOHgvOGdmK09scDdsLzIvOEoxNiBkclM3QXhiTEtGQmMwaXAraUNuYStteU5tckpPYkNqZWc1V2l0V1RnaWY4QU11eXM2Y24rdGRXSGU0WFo1Rm9YcVhNYTl5SEhQRXNHIENwalBCQ3MyTlRmUGk0MVQvd0FCL1Nqck5YNTV3aGFMdzQyd1d6MXBoWTJBblZLdjYyakl0TEpPUkVXdi9RVGlqbERKbjVkY3J1VG4gU2crZmtGOFlHWWJEN25zakFYR3k4NnpwRUFCa2pzWDZxSG44aTZQK28vUFZ0N0pQM0d3UDdCcXdmMGZrZFZjcWw2TU8vcXhSaG5wOSBGYUFJRk5hVkxCWGNLMUlNQWNvcXRGeVViVzFPWEo2d3hzMGFZUzhoY3RDdkhZbXZzU0VmbUc2L0ZSb0liQktWbFQwajhQVG0yY3BVIFBNMUZCS0pzQzVuR3lITTFuMS9YMWx6dlRqWkRzdStrbXlXUkRNT0xqNnlSVlNPQUdlWmx6bWxaaUhROHpOUDRtMHNqS2xaeUtYV2YgOEFWZ016ck90T3BBU0tCMUFWdHBVeVhoc0hZWkpZbzR0UXlXNmFoWU5EcE9tSk1tcHNrK3Q4bS9PTitmejg5VXl0SExKcnI3YkdueSBPeU1lZldrYklSNWNlRDZTT0FRNWt5eTlRdVY3WkVuTGFWUElYV0hEMWhIcFJBWWpmUmlReHlKSVVkRkZzR1VjOU1hSm5SN282bTlZIGx4M2pTdyt6cGZxVWEyZjdYWHJsclY3YzZyVllJQnhNcWFucFN3c1RDRDZYUTE2MlZ3Z2NpSzZia2NTeitrZWVpeGlLeVpkd2NlUEIganNYcDlVRE9zNlZJQjlYRWE1RjBma2Z4ZUQ4ZFBqNTBPcXZtdHB4K25VUGl3L0RMWnhieUxORWRKai9oeE1icnExMG8zRVJlYkVzWiBJWXRPdGJXNElyWnJxQjZaVUppanhTeENoY3Nqa0daa2NqUGpsaFJZZllyQ05hbFBOaVpTUllIcHl3eGl4bGx1WndnMDlIYkdkWDhxIGlodXRZblh6ODd4aTJrYTFyQXlxL0lHK0hNbnBhY21ZMWFac2ovbXNjTWFUNWkyZkt3Ty9UbG1nMm9RRlhYRmV6QnFmZ0JZaDJTdFEgOHIxNTFuU3RQMzZQVTU5L3IvZjNlYnZ6Zm1oZjVycHVvSmpuVXhreGszZUhiNDI2OXRmazliODJkYmJEWW8vT1o5UWx1TkV4cXFTcSB2UXd6ajJYVjg2U2VQUlIrcWw1SHVUTmgyMHk0N2t6d1N4dHJoK3JNZFk3RUdMaFdzaU1Zd3ByS0VxSHFXckdhU2FhVnRSR3FpdzY1IHNMUGx4aEt5VzAxZWdVWFJ4S1pYelBGRmFtVlJqekdaV2dHazlVRVpvRklyOWNUb05mVkNqckdVRFUwaXZpcktzN09VanNCTE56czYgenFSQUJZZ0FBTzd4eDhwMHB2OEFpblB5Y2JQeWVla0pPcVpVT2ltQ25TdnBteTFPdklMcTlqZjFnWkdjWG12Z0VycUFuQWp3dUtQeSBGVFBVb05oTGVNcjFMdzFiRlEzQ0thSlpsbmM4TXdsa3d2UUZaVUt2ak5KR2wyWk5hbk5tTDNEb2gxMzI4d0gyblBWeTV3TVYwYWs3IElTcWRYMWNqNmxYSnpCd09PR09aWHFJbHBtQk93UjgwTEJrcER3bmJtMTViSm5XZGFHSnlYazhTeWtmb3NZc2lQd1RRcy9OQytseCsgNTAreGtnREo5akJkekVNdmdoYk9JSUlGbXZKNk0xMnZqbW0zVVBYVVNtcm11bEp3MUZqb0hwdGlTSWJ4OEdlYW4wZUFTVEswZUR6byBRQ0xLVEdOaTlmcU1qYkFPSnVhQkl1WVpzYXhoWFA4QVZITTUySG8vY0twMTRkcUh1TmU5SkE5Tk9rOUp6L1p0aTJVVW14Q1ZoVzYxIFcxb2R6ZFVic1FmeVVzZm1BOG9uT3VCZTlScUMxSXE4a3ZBYUFYbGlSVFRFaWgwN0JYenJPc3NZQjFJY2dGM2dpTHVSM01WeXhMTjUgWXJrMkpKTldhcXowNEUvVDZIazhHUUQ5QnRuSUQ4QnFGMTVvWDQ2U09xSzBQU1FTNy9QakszcVpTOUZJYVhkUE44VjhJVmtpTkJpRCBuNlFldXBUbTRTeTh5V1JjSnlxWGlBczB5eXBtY3o0TERlNU1MRzd0d3c2MlRvNWlGRVVzc0VhKzBRNlY5WUNRN05hNWMwM1VEYnEzIGt5bytVb2tGZ2VOa2FJeTF6VHNySVdEaW9WSEVNa2hMbm02K21EVCtCa0w2NndQRUZ2TEY1VTdJRW14bWRaMXVzblQ2WmlTV2JQSmkgYlpxYUtySjVOV2FzOFdmejFrY0F6b1NCWnUvMzdmUDU2WUZaK2daY0ZIV3RjakdLMnRsWTNJTFJ6U1BWMkYxRGhHV243STB6VmhiTCBiWFpUMDR0RW8za3JwVWswVDFXZDZCSndaT0tJOFljRE5UaWtpTGlTekZaWXpXMHJpVFI5dmpXWmd6Mkk1SXMybG80VmtNa0hsR1cxIDhaWlJwTEFtRmxMZTVES0JIbUY4TERpZW9ZTGtSSnFINnllWG5GaWFXUklFU3NpZm5XZFprOTJtL1VTZ2ZvQXBRSDRBL0hVMWp1dWwgMUdMTXR5TVRpeEZtMTVORVdmMmVlb1c0ZFoxemhFKzZhK0YrdFVIZ3l0RTZmWHc5SUdBTm5MSENTQXNOcWVNRHlDQWFhUDhBVUtVaSBJMnl5ZWNXVjFqTEFpUGtDUnVRSWppQlJOekdOZDFhSlVJbDNVbHBqbEh6TFV1RXJXMHkxTmZ0anoxSm1MNUdXNHQ1RFhrQ2preFpvIEN4U1dSVGtMUkdTa3FoT1JHOUMvbEdzdWFFaTVVTTdGRzVrb2ZJenJPc1dwSlRWUlJvU2thelI0b3BLb3RpelNpbEZuazBPZXVnaXEgd2t5VU5VTWxaQUdyVkxxNzgvUFZvTkV2L0RnMDhhbktVN2t2M3BZeHgzME9UTUI5T1V1d2Ezek1yTmh4Y3lJVTlHY1FLdHRkdGpXYiBtNFNqRXZJalNEckdUeEVBOGdPcGdmU0pVbDFlQkM4NnpyT3UzSExLRlVDU1N1UHZiOHArK3VQSkhHWGNsRUpMTVNTcWtrMzVKcjlEIC9wMS8vOWs9ICIKICAgICAgIHk9IjAiCiAgICAgICB4PSIwIgogICAgICAgaWQ9ImltYWdlOSIKICAgICAgIGhlaWdodD0iMjYwIgogICAgICAgd2lkdGg9IjI2MCIgLz48L3BhdHRlcm4+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDkyNSI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkyNyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhOGE4YTg7c3RvcC1vcGFjaXR5OjEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNGQ0ZDQ7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjEzMTc5NjAzIgogICAgICAgaWQ9InN0b3A0OTI5IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5MzEiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTllOWU5O3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTI1IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ4ODAiCiAgICAgeDE9Ijc2LjMwNjY3OSIKICAgICB5MT0iMTUzLjEzMTEzIgogICAgIHgyPSI3Ni4zMDY2NzkiCiAgICAgeTI9Ijc0LjMyMDUwMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODU5OTk4NDUsMCwwLDAuODUzMjYzNTMsLTE2Mi4zMjQ2NywtMzYuNTA0OTEyKSIgLz48Y2xpcFBhdGgKICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0iY2xpcFBhdGg2NDAyIj48cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4wNTQ0NTU0NTtmaWxsOnVybCgjcGF0dGVybjY0MDYpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAtMTA2Ljk1MDYyLDcyLjY4NzUwMSBjIC0zLjA2MDE5LDAgLTQuODk5NzEsMi4wNTI3NzkgLTUuNSw0LjQzNzUgbCAtMTYsNjMuNTYyNDk5IGMgLTAuNDIyODUsMS42Nzk4NCAwLjUwNTY1LDguMjQ5MiAwLjYxMzc5LDguODMyMTQgMC4zODk1LDIuMDk5NjggMi44MzA5MiwzLjYwNTM2IDUuNTExMjEsMy42MDUzNiBsIDExMi43MTg3NTM4LDAgYyAyLjQ3NzgzMDEsMC4xMTYyNyA0LjgyMjQ4NTUsLTEuNDM5NjcgNS40MjI1NTYzLC0zLjE1NjI1IDAuMjUzODcyNiwtMC43MjYyMyAwLjU1MzYwNTcsLTQuMDUxNTggMC43MjcxNzU4LC04LjM0MTAyIDAuMDEyMjA5LC0wLjMwNDAyIDAuMDQzODM3LC0wLjYxNjY5IC0wLjAyNDc2NywtMC45NDAyMyBMIC0xOS40ODE4NSw3Ny4xMjUwMDEgYyAtMC42MDAyODMsLTIuMzg0NzIxIC0yLjQzOTgwOSwtNC40Mzc1IC01LjQ5OTk5OSwtNC40Mzc1IGwgLTgxLjk2ODc1MSwwIC0zZS01LDAgeiIKICAgICAgIGlkPSJwYXRoNjQwNCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2Njc3Njc2NjYyIgLz48L2NsaXBQYXRoPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NDYzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0NjkiCiAgICAgeDE9IjUxNS4xMjA0OCIKICAgICB5MT0iNDk0LjM0MDI3IgogICAgIHgyPSItNy4zODE2NjI0IgogICAgIHkyPSItMjguMTYxODc1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NTExIgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDY2MzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjUxMTI1ODYsMC4zODk1NzMzMiwtMC4yMjI4NjIwMiwwLjg2NDU0MTExLC0yMy40OTU3NDgsLTYuMjAxMDg5KSIKICAgICBjeD0iNTguMDMxMjUiCiAgICAgY3k9IjI3LjY5OTc2OCIKICAgICBmeD0iNTguMDMxMjUiCiAgICAgZnk9IjI3LjY5OTc2OCIKICAgICByPSI0MS4xODA1NDIiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3MzEiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50NjczNyIKICAgICBjeD0iNjMuNTUxMjI4IgogICAgIGN5PSIxMDIuNzIwOTMiCiAgICAgZng9IjYzLjU1MTIyOCIKICAgICBmeT0iMTAyLjcyMDkzIgogICAgIHI9IjU1LjI0MjcyMiIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDk3MzkyNCwwLDAsMC4wOTkxOTk5OSwtNjkuNzQwNjM2LDkyLjUzMTAxOSkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3NDUiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc1MSIKICAgICB4MT0iODEuMDkzMyIKICAgICB5MT0iODYuODE0OTgiCiAgICAgeDI9IjgxLjA5MzMiCiAgICAgeTI9Ijc1LjQ5OTU4OCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNjIuMTI2MzMsMCkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3NjIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc2OCIKICAgICB4MT0iOTIiCiAgICAgeTE9Ijc2IgogICAgIHgyPSItMi4yMDc5OTk3IgogICAgIHkyPSIyMi4wNzk2ODkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkwNjI1LDAsMCwwLjkwNjI1LC0xNjIuMTI2MzMsMC4zNjI1KSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njc2MiIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2ODA3IgogICAgIHgxPSI1NiIKICAgICB5MT0iMTQwLjI0OTc2IgogICAgIHgyPSI1NiIKICAgICB5Mj0iMTIiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkwNjI1LDAsMCwwLjkwNjI1LC0xNjIuMTI2MzMsMCkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY4MjkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjgzNSIKICAgICB4MT0iODIuNjk1MzEyIgogICAgIHkxPSIzNC44OTA2MjUiCiAgICAgeDI9IjkwLjIwMDE5NSIKICAgICB5Mj0iMzQuODkwNjI1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE2Mi4xMjYzMywwKSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTE5IgogICAgIHgxPSI0NSIKICAgICB5MT0iNjQiCiAgICAgeDI9Ijg0IgogICAgIHkyPSI2NCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTYyNjY4MSwwLDAsMS4xOTQ2NDE2LC0xOTAuNDQ3MzcsLTI1LjkzNzcxNikiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkyMSIKICAgICB4MT0iNTYuMzM3OTE0IgogICAgIHkxPSIzOS4zMTQyODUiCiAgICAgeDI9Ijc2LjExMjE4MyIKICAgICB5Mj0iNTEuNjQ1NzY3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTMxIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIKICAgICB4MT0iNzYuMjcwNjA3IgogICAgIHkxPSI1OS4xNTQ4OTIiCiAgICAgeDI9IjYyLjA1NjM1MSIKICAgICB5Mj0iNTIuODg4MDUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkzMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjEzODMyMSwwLDAsMS4zNTY5MzQ2LC0xODYuNDA3NTYsLTMwLjA5MzMzMSkiCiAgICAgeDE9IjU2LjIxNzE3OCIKICAgICB5MT0iNjYuNTEwMDcxIgogICAgIHgyPSIzOC44MTI2MDMiCiAgICAgeTI9IjM5LjQ1MDE4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5MzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjIxMzgzMjEsMCwwLDEuMzU2OTM0NiwtMTg2LjQwNzU2LC0zMC4wOTMzMzEpIgogICAgIHgxPSIzOC41OTQ0NjciCiAgICAgeTE9IjM5LjMxNDI4NyIKICAgICB4Mj0iNzguMzExNzgzIgogICAgIHkyPSIzOS4zMTQyODciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkzNyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjEzODMyMSwwLDAsMS4zNTY5MzQ2LC0xODYuNDA3NTYsLTMwLjA5MzMzMSkiCiAgICAgeDE9IjM4LjU5NDQ2NyIKICAgICB5MT0iMzkuMzE0Mjg3IgogICAgIHgyPSI3OC4zMTE3ODMiCiAgICAgeTI9IjM5LjMxNDI4NyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzAwNyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDMwIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MTM5MjY3NiwwLDAsMC44MTM5MDM3MiwtMTYyLjg4Nzg4LDQuNTM1MDE2MykiCiAgICAgeDE9IjU0LjUzMDc2MiIKICAgICB5MT0iLTMyLjI2NjYwOSIKICAgICB4Mj0iNTQuNTMwNzYyIgogICAgIHkyPSIzOS44NjMxMjkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcwMDciCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA0MCIKICAgICB4MT0iMTAuMjUzMDUiCiAgICAgeTE9IjMuMzcyNDMwMyIKICAgICB4Mj0iOTYuMTY2NTE5IgogICAgIHkyPSI1MC43NDg1ODUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjczNzYyMTEyLDAsMCwwLjczNzYwMDI3LC0xNjMuMDM1NCwzLjk0NDkzNjEpIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MDc1IgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDcwODEiCiAgICAgY3g9IjY0LjUyMzQ5MSIKICAgICBjeT0iMzUuMjA2MTEyIgogICAgIGZ4PSI2NC41MjM0OTEiCiAgICAgZnk9IjM1LjIwNjExMiIKICAgICByPSIzMy40MzQ4MjMiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjc2NDcxOTQ3LDAsMTEuOTgxNzQ2KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTA5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIKICAgICB4MT0iNzYuMjcwNjA3IgogICAgIHkxPSI1OS4xNTQ4OTIiCiAgICAgeDI9IjYyLjA1NjM1MSIKICAgICB5Mj0iNTIuODg4MDUiIC8+PGNsaXBQYXRoCiAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImNsaXBQYXRoNDQ4NSI+PHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMDU0NDU1NDU7ZmlsbDp1cmwoI3BhdHRlcm40NDg5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMjIuNzc5NzI1LDI1LjM3NSBjIC0yLjYzMTc1OCwwIC00LjIyMjk0NywwLjg0Mjk5NiAtNC43Mjk5ODEsMi44ODAxMDcgTCA0LjI4OTc2ODYsODMuNTM4NjA1IGMgLTAuMzU3MTYyNCwxLjQzNDk3MiAwLjQzNDg1MzIsNy4wMzg3MzQgMC41Mjc4NTE3LDcuNTM2MTM2IDAuMzM0OTc0NywxLjc5MTU4NSAyLjQzNDU5NTEsMy4wNzYzMjQgNC43Mzk2Mzc3LDMuMDc2MzI0IGwgOTYuOTM3OTQyLDAgYyAyLjEzMDkzLDAuMDk5MjEgNC4xNDczMywtMS4yMjg0MTcgNC42NjMzOSwtMi42OTMxMTEgMC4yMTgzMywtMC42MTk2NyAwLjQ3NjEsLTMuNDU3MDcxIDAuNjI1MzcsLTcuMTE3MDg4IDAuMDEwNSwtMC4yNTk0MTIgMC4wMzc3LC0wLjUyNjIwNCAtMC4wMjEzLC0wLjgwMjI2MSBMIDk4LjAwMjczOSwyOC4yNTUxMDcgQyA5Ny40OTU3MDcsMjYuMjE3OTk2IDk1LjkwNDUwNywyNS4zNzUgOTMuMjcyNzQ5LDI1LjM3NSBsIC03MC40OTI5OTksMCAtMi41ZS01LDAgeiIKICAgICAgIGlkPSJwYXRoNDQ4NyIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2Njc3Njc2NjYyIgLz48L2NsaXBQYXRoPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ1NTEiCiAgICAgeDE9IjczLjUiCiAgICAgeTE9IjY3Ljc1IgogICAgIHgyPSI5OSIKICAgICB5Mj0iNjcuNzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDU4NSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICB4MT0iNzMuNSIKICAgICB5MT0iNjcuNzUiCiAgICAgeDI9Ijk5IgogICAgIHkyPSI2Ny43NSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NjA2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yOTQxMTc2LDAsMCwxLjI5NDExNzYsLTI1LjM2NzY0NywtMjEuMTc2NDcxKSIKICAgICB4MT0iNzYuOTYzNzIyIgogICAgIHkxPSI2Ny43NSIKICAgICB4Mj0iOTkiCiAgICAgeTI9IjY3Ljc1IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ2MTAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjI5NDExNzYsMCwwLDEuMjk0MTE3NiwtMjUuMzY3NjQ3LC0yMS4xNzY0NzEpIgogICAgIHgxPSI5NC45NDgxNjYiCiAgICAgeTE9IjYwLjU3NjA2OSIKICAgICB4Mj0iODYuNDA5MDEyIgogICAgIHkyPSI2NS41MDYxNDkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDYyMCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjk0MTE3NiwwLDAsMS4yOTQxMTc2LC0yNS4zNjc2NDcsLTIxLjE3NjQ3MSkiCiAgICAgeDE9IjczLjUiCiAgICAgeTE9IjY3Ljc1IgogICAgIHgyPSI5OSIKICAgICB5Mj0iNjcuNzUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NDIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc0OCIKICAgICB4MT0iMTA0LjUyNjUxIgogICAgIHkxPSIzNi44NDg4NTgiCiAgICAgeDI9IjEwNC41OTQxNiIKICAgICB5Mj0iNTMuMDYyNSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc5OSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzODA1IgogICAgIHgxPSI5Ny40MTQyMTQiCiAgICAgeTE9IjQ0IgogICAgIHgyPSIxMjAiCiAgICAgeTI9IjQ0IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjM4MDciPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjU2NTM2MTQ4IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzgwOSIgLz48L2ZpbHRlcj48Y2xpcFBhdGgKICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0iY2xpcFBhdGgzODEzIj48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiCiAgICAgICBpZD0icGF0aDM4MTUiCiAgICAgICBkPSJtIDg4LDMyIDcuOTAxMzU4LDAgQyAxMDAsMzIgMTIwLDUwLjE5NzA1MiAxMjAsNTUuOTYzNDk2IEwgMTIwLDcyIDg4LDcyIDg4LDMyIHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzgxNyk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PC9jbGlwUGF0aD48cmFkaWFsR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc3MyIKICAgICBpZD0icmFkaWFsR3JhZGllbnQzODE3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4yODk0MTkzLC0xLjMwNDU2OTRlLTgsMCwxLjkzMjg3OTgsLTk0LjM1NjU1NSwtMzcuMDczNTgxKSIKICAgICBjeD0iOTAuMTM0ODk1IgogICAgIGN5PSIzOS44NzUiCiAgICAgZng9Ijk1LjM3NjM5NiIKICAgICBmeT0iNDMuMzc3MzE2IgogICAgIHI9IjUwLjc1IiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzODIxIgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDM4MTkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2OC40OTIzMzUsMCwtMy4yOTUwNjAyZS03LDU3LjgyNTc3OCwtNjE4OC4wOTE2LC0yMjczLjE3NzkpIgogICAgIGN4PSI5MS44ODIwNTciCiAgICAgY3k9IjM5Ljg3NSIKICAgICBmeD0iOTcuMTIzNTU4IgogICAgIGZ5PSI0My4zNzczMTYiCiAgICAgcj0iNTAuNzUiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4MjEiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50Mzg0NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDc0Nzg2MiwtMS4xODIyNjZlLTgsMCwxLjc1MTY3MjMsLTg1LjUxMDYyOCwtMzMuNTk3OTMzKSIKICAgICBjeD0iOTMuMTkyNDM2IgogICAgIGN5PSIzNi4yNTM0NiIKICAgICBmeD0iOTguNDMzOTM3IgogICAgIGZ5PSIzOS43NTU3NzUiCiAgICAgcj0iNTAuNzUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3ODMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg1NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICB4MT0iMTA4IgogICAgIHkxPSI0NCIKICAgICB4Mj0iMTE0IgogICAgIHkyPSIzNiIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iLTEyNi4xOTk1MiIKICAgICB4Mj0iOTEuMjkyODMxIgogICAgIHkxPSItMTEwIgogICAgIHgxPSI5MS4yOTI4MzEiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAxMjQ1OTgsMCwwLDEuMDEyNDU5OSwtMi43NTc5MTYyLDApIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM2ODkiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA0MSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE0NC4wNTcwOCIKICAgICB4Mj0iNDcxLjgwNDM1IgogICAgIHkxPSIxNDEuNDc1MSIKICAgICB4MT0iNDcxLjgwMDM4IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40MDgyMjIzLDAsMCwwLjM3MzkxNjEsLTMwMi44Nzc0OCwtMTc3LjY4OTQxKSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjgzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NjkuMTA1NjIiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40NjU0MjcxLC0yLjU2MjUzNGUtMyw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzQ5IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMi40MTk3NjI2ZS0zLC0xLjY3MjM4NTIsMjAxLjMwODc3LDI2My40OTU5NSkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc0NyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTE9IjMxLjk5OTk5OCIKICAgICB4MT0iMTM4LjUwODI0IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40NTA2OTMzLDAsMCwwLjY3OTk0ODMsNTAuNTc1MjYzLDIzLjI4MTQ5NykiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc0NCIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTMwIgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMTkiCiAgICAgeDI9IjExNiIKICAgICB5MT0iMjAuNTc0NTI0IgogICAgIHgxPSIxMTYiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjgzMzMzMzMsMCwwLDAuODAzMTM3NywxOS4yNSwzMC45NTI5MzQpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3NDEiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE0NC4wNTcwOCIKICAgICB4Mj0iNDcxLjgwNDM1IgogICAgIHkxPSIxNDEuNDc1MSIKICAgICB4MT0iNDcxLjgwMDM4IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMjg4NjExLDAsMCw3LjYyNzQ0NThlLTIsLTI2NS45NzE3NiwzNi4wNDE3NTYpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MzgiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjMxLjk5OTk5OCIKICAgICB4Mj0iMTQ5LjYwMjI2IgogICAgIHkxPSIzMS45OTk5OTgiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDkuMDEzODY1ZS0yLDAsMCwwLjgzMzMzMzYsMTAyLjUxNTA1LDEzLjgzMzMyNikiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjczNSIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0ODg0IgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODkyLC0zLjkxOTg1MTVlLTQsNi41MDA4ODA0ZS0zLC0wLjk3MDk3NzcsMTc0LjI4MTE4LDIwMi42NzA4KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzMxIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyNykiCiAgICAgeTI9IjM2Ljk5OTk5OSIKICAgICB4Mj0iMTIxLjEwMjI2IgogICAgIHkxPSIzNi45OTk5OTkiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzE3IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwNzkiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjE4ODM4LDcuOTk1ODYyOWUtNSwyLjY3NzY4MzFlLTIsMC4xOTgwNjM3LDE3MS41MTA4NiwzMC45MzczMDIpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MTMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE5LjUxNzE4NyIKICAgICB4Mj0iMTE2IgogICAgIHkxPSIyMy4wNzk2ODciCiAgICAgeDE9IjExNiIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LDE5LjI1LC01OS4xMjY3NTMpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MDgiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjQ2LjU5NTI5OSIKICAgICB4Mj0iMTQ2LjkyODEiCiAgICAgeTE9IjMzLjQ0NzI3MyIKICAgICB4MT0iMTQ2LjkyODEiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjY5NTY1MjIsMCwwLDAuNjk1NjUyMiwxNC4zMDc2MDksMzYuMzI2MDg3KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzA1IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NzYiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIzMy43MTg3NSIKICAgICB4Mj0iMTQzLjQwNjI1IgogICAgIHkxPSI0Ni42ODg0NDIiCiAgICAgeDE9IjE0My40MDYyNSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNjk1NjUyMiwwLDAsMC42OTU2NTIyLDE0LjMwNzYwOSwzNi4zMjYwODcpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MDIiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk3NiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGZpbHRlcgogICAgIGhlaWdodD0iMS4wMDU4OTU2IgogICAgIHk9Ii0wLjAwMjk0Nzc3NzQiCiAgICAgd2lkdGg9IjEuNDg4NDM2OSIKICAgICB4PSItMC4yNDQyMTg0NiIKICAgICBpZD0iZmlsdGVyNDg2MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDg2NCIKICAgICAgIHN0ZERldmlhdGlvbj0iMC4xMTYwMjYxNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48L2ZpbHRlcj48ZmlsdGVyCiAgICAgaGVpZ2h0PSIxLjAwNTk5NjkiCiAgICAgeT0iLTAuMDAyOTk4NDQ0MSIKICAgICB3aWR0aD0iMS4yMDM1MjAxIgogICAgIHg9Ii0wLjEwMTc2MDA3IgogICAgIGlkPSJmaWx0ZXI0ODM4IgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+PGZlR2F1c3NpYW5CbHVyCiAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0ODQwIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjExODAzMzYzIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjwvZmlsdGVyPjxjbGlwUGF0aAogICAgIGlkPSJjbGlwUGF0aDM3NjEiCiAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPjxwYXRoCiAgICAgICBpZD0icGF0aDM3NjMiCiAgICAgICBkPSJNIDE3MC43NSwxMTIuMjEyNSBMIDE3MC43NSwyMDcuODY4NzUgTCAzMDQuNDA2MjUsMjA3Ljg2ODc1IEwgMzA0LjQwNjI1LDExMi4yMTI1IEwgMTcwLjc1LDExMi4yMTI1IHogTSAyNTMuOTY4NzUsMTI1LjI3NSBDIDI2My4wOTI0OSwxMjUuMTE3MzkgMjcyLjM5MTA2LDEyNi44MTczNCAyNzkuNTYyNSwxMzAuOSBDIDI4MS4yNTgyMSwxMzEuODY1MzYgMjgyLjgzMDI1LDEzMi45NTkyNyAyODQuMjgxMjUsMTM0LjI0Mzc1IEMgMjkxLjczNjk2LDE0MC44NDM3NCAyOTYuNTM2MywxNTAuMTEyNzIgMjkwLjA5Mzc1LDE1OC4wNTYyNSBDIDI4NS4xMzQ1MiwxNjQuMTcwOSAyNzUuNTQ0NDcsMTYwLjc3ODc4IDI3Ni4zNDM3NSwxNTUuNTg3NSBDIDI3Ni43Mjc4MSwxNTMuMDkzMDQgMjc4LjQwODYzLDE0OS4wNjE1MyAyNzUuNTkzNzUsMTQ3Ljc0Mzc1IEMgMjY4Ljk0MjA4LDE0NC42MzYwMyAyNjEuMjg1MDgsMTQ5Ljc3NDAzIDI1OC41LDE1NC4zMDYyNSBDIDI1Ny43ODI0LDE1NS40NzQ3OSAyNTYuNDM5NTEsMTU3Ljg5NTgzIDI1Ny43NSwxNTkuMTgxMjUgQyAyNTkuNzM2OTEsMTYxLjEzMDE0IDI2Mi4wOTczMSwxNTkuNTIzNjIgMjY0LDE2MS4zMzc1IEMgMjY4LjU1MjI1LDE2NS42NzcyOSAyNjMuMDQxNTksMTc3LjQyMjIxIDI1Ny4xNTYyNSwxODIuMDg3NSBDIDI0OC4zMTU0NywxODkuMDk1NTUgMjM2LjQ0MzU3LDE5My42NTk4NSAyMjQuMDkzNzUsMTkzLjkzMTI1IEMgMjExLjM2OTczLDE5NC4yMTA4OCAxOTguMTI0NywxOTAuMDMzMTcgMTg3LjE1NjI1LDE3OS4xNSBDIDE4Ni40Njc3NywxNzguNDY2ODggMTg1LjQyNTAxLDE3Ny4xNjQ4OSAxODQuNzgxMjUsMTc2LjExODc1IEMgMTc2LjA4OTYzLDE2MS45OTQ1NyAxNzkuNDE4OTgsMTQwLjA3NjM0IDE5Ny41MzEyNSwxNDIuMjQzNzUgQyAyMDMuMzU4OTIsMTQyLjk0MTEyIDIxMy4xNjA2OSwxNTAuNjc1MjIgMjA2LjkzNzUsMTYxLjQzMTI1IEMgMjA1LjE4ODE1LDE2NC40NTQ3OSAyMDYuODEyNDYsMTY2Ljg4MDgyIDIxMC43MTg3NSwxNjcuMzM3NSBDIDIxNC4wOTA5NywxNjcuODMwOTMgMjIwLjEwNTg1LDE2Ni4zMjQzMyAyMjQuNTYyNSwxNjMuMTE4NzUgQyAyMjYuOTc3NDEsMTYxLjM4MTc2IDIyOC44ODQxMywxNTkuMzQ3MDEgMjI5LjM0Mzc1LDE1Ny4wODc1IEMgMjI5Ljk2NTYzLDE1NC4wMzAyNSAyMjguMjM4NjIsMTUwLjg0MzY2IDIyNS41OTM3NSwxNTAuMDU2MjUgQyAyMjQuNjM0MTUsMTQ5Ljc3MDU3IDIyMy4xODg1LDE1MC41MDEgMjIzLjc1LDE1MS41MjUgQyAyMjQuMzE5NjUsMTUyLjU2Mzg1IDIyMi42NDY1NCwxNTMuNzYwNzQgMjIxLjEyNSwxNTMuMTE4NzUgQyAyMTMuNTI5ODIsMTQ5LjkxNDE1IDIxNi43OTE1OSwxNDAuMDE3NzIgMjI0LjM3NSwxMzMuOSBDIDIzMC43ODU1NiwxMjguNzI4NDQgMjQyLjIzODIzLDEyNS40Nzc2NCAyNTMuOTY4NzUsMTI1LjI3NSB6IE0gMTk1LjE4NzUsMTUzLjQzMTI1IEMgMTkzLjc3OTczLDE1My41MjQyMyAxOTIuMjI1MjgsMTU0LjE1NTA2IDE5MS4yNSwxNTUuMTE4NzUgQyAxODcuNjI3NTEsMTU4LjY5ODIxIDE4OC45NDI5NCwxNjUuNDM1ODYgMTkxLjg0Mzc1LDE2OS43NzUgQyAxOTcuNTM0MDksMTc4LjI4Njg2IDIxMy44OTA0MSwxODguMDA4NjYgMjM3LjI4MTI1LDE4MC4xMTg3NSBDIDI0NC4yMTc1MiwxNzcuNzc5MSAyNDkuMjM5MjIsMTcwLjgxODYxIDI0Ni42ODc1LDE2Ny4xMTg3NSBDIDI0NS43Nzc5OSwxNjUuODAwMDEgMjQ0LjE2OTE5LDE2Ni41ODc0OSAyNDEuNjI1LDE2Ni41ODc1IEMgMjM4Ljc0NDg0LDE2Ni41ODc1IDIzNy40MDcyMiwxNjUuNjU5OSAyMzYuMzc1LDE2Ny4wODc1IEMgMjI5Ljg3NTExLDE3Ni4wNzcwNyAyMTguNTA1MDYsMTc4LjcyNDg0IDIwNS42MjUsMTc0LjgzNzUgQyAxOTkuMDM1NDgsMTcyLjg0ODcgMTk1LjIxMDUxLDE2Ni44NzEzMyAxOTUuMjUsMTYxLjkzMTI1IEMgMTk1LjExODk5LDE1OS40NTc1MSAxOTUuODI5LDE1Ny44MzY0MyAxOTcuMDYyNSwxNTcuNjgxMjUgQyAxOTguMTkyMzIsMTU3LjUzOTExIDE5OC40OTg3MSwxNTUuODM2MDcgMTk4LjE4NzUsMTU0Ljg2ODc1IEMgMTk3LjgzNTE0LDE1My43NzM1IDE5Ni41OTUyNywxNTMuMzM4MjcgMTk1LjE4NzUsMTUzLjQzMTI1IHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM2NjMzNjY2O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zMDAwMDAwMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiAvPjwvY2xpcFBhdGg+PGxpbmVhckdyYWRpZW50CiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgeTI9IjQuNzUiCiAgICAgeDI9IjcuOTM3NSIKICAgICB5MT0iMTgiCiAgICAgeDE9IjcuOTM3NSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTY0IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY0MTciCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzNzAiPjxzdG9wCiAgICAgICBpZD0ic3RvcDMzNzIiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGUyOTY1O3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3AzMzc2IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzA5MWU2YTtzdG9wLW9wYWNpdHk6MTsiIC8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICByPSIxMzkuNTU4NTkiCiAgICAgY3k9IjExMi4zMDQ3IgogICAgIGN4PSIxMDIiCiAgICAgaWQ9IlhNTElEXzhfIj48c3RvcAogICAgICAgaWQ9InN0b3A0MSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZmVmZWY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ3IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Y5ZjlmOTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMTg4NTEwNDkiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRkFGQUZBIgogICAgICAgb2Zmc2V0PSIwLjI1NzE4MTQ3IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDUxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRiIKICAgICAgIG9mZnNldD0iMC4zMDExMTI3NyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MyIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNGQUZBRkEiCiAgICAgICBvZmZzZXQ9IjAuNTMxMyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNFQkVDRUMiCiAgICAgICBvZmZzZXQ9IjAuODQ0OSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1NyIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNFMUUyRTMiCiAgICAgICBvZmZzZXQ9IjEiIC8+PC9yYWRpYWxHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NDE3Ij48c3RvcAogICAgICAgaWQ9InN0b3A2NDE5IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU1ZGRmZjtzdG9wLW9wYWNpdHk6MSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3ZWNmNDtzdG9wLW9wYWNpdHk6MSIKICAgICAgIG9mZnNldD0iMC44MzQ5MjI2MSIKICAgICAgIGlkPSJzdG9wNjQyNSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A2NDIxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Q4ZWRmMjtzdG9wLW9wYWNpdHk6MSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MDAiPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MDIiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UzZTNlMztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNTA1ODc4NjkiCiAgICAgICBpZD0ic3RvcDM4MDQiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzgwNiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhMGEwYTA7c3RvcC1vcGFjaXR5OjE7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3NjEiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3AzNzYzIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0ODg0Ij48c3RvcAogICAgICAgaWQ9InN0b3A0ODg2IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzdjN2M3YztzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MzQzNDM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjAzMTI1IgogICAgICAgaWQ9InN0b3A0ODg4IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC4yNSIKICAgICAgIGlkPSJzdG9wNDg5MCIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0ODkyIgogICAgICAgb2Zmc2V0PSIwLjM3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC41IgogICAgICAgaWQ9InN0b3A0ODk0IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ4OTYiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDg5OCIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkZmRmZGY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTA5MDkwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC44NzUiCiAgICAgICBpZD0ic3RvcDQ5MDAiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkwMiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0ZjRmNGY7c3RvcC1vcGFjaXR5OjE7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDkzMCI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3YzdjN2M7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A0OTMyIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5MzQiCiAgICAgICBvZmZzZXQ9IjAuMDMxMjUiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDM0MzQzO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0OTM2IgogICAgICAgb2Zmc2V0PSIwLjMwMTU1OTg0IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjQzMzkyNTU0IgogICAgICAgaWQ9InN0b3A0OTM4IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5NDAiCiAgICAgICBvZmZzZXQ9IjAuNTM2ODI4NDYiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgaWQ9InN0b3A0OTQyIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGZkZmRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIGlkPSJzdG9wNDk0NCIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0OTQ2IgogICAgICAgb2Zmc2V0PSIwLjg3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5MDkwOTA7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNGY0ZjRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNDk0OCIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj48c3RvcAogICAgICAgaWQ9InN0b3A0OTU0IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDk1NiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDk3NiI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDk3OCIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5ODAiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwNDEiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj48c3RvcAogICAgICAgaWQ9InN0b3A1MDQzIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RiZGJkYjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTA0NSIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkYmRiZGI7c3RvcC1vcGFjaXR5OjA7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTA1OSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3YzdjN2M7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MDYxIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDUwNjMiCiAgICAgICBvZmZzZXQ9IjAuMDg0Nzg5MDgiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDM0MzQzO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDY1IgogICAgICAgb2Zmc2V0PSIwLjI1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjM3NSIKICAgICAgIGlkPSJzdG9wNTA2NyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDY5IgogICAgICAgb2Zmc2V0PSIwLjUiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgaWQ9InN0b3A1MDcxIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGZkZmRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIGlkPSJzdG9wNTA3MyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDc1IgogICAgICAgb2Zmc2V0PSIwLjg3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5MDkwOTA7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNGY0ZjRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNTA3NyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwNzkiPjxzdG9wCiAgICAgICBpZD0ic3RvcDUwODEiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzYwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmNGY0ZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMTg0NTE0NjQiCiAgICAgICBpZD0ic3RvcDUwODciIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTA4OSIKICAgICAgIG9mZnNldD0iMC41MDIxMTg2NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhZDI2MjY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTQzZTNlO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NTEwNTkyOSIKICAgICAgIGlkPSJzdG9wNTA5MSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDgzIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzVlMDAwMDtzdG9wLW9wYWNpdHk6MTsiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MDkzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUwOTUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MDk3IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA2MSI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDA2NCIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NWRkZmY7c3RvcC1vcGFjaXR5OjEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjN2VjZjQ7c3RvcC1vcGFjaXR5OjEiCiAgICAgICBvZmZzZXQ9IjAuNTQzNzAwNTgiCiAgICAgICBpZD0ic3RvcDQwNjYiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDA2OCIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOGVkZjI7c3RvcC1vcGFjaXR5OjEiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NzEzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDQ3MTUiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDM1NCIKICAgICAgIG9mZnNldD0iMC4xMjgzNTY1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIwNTBhYztzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDcxNyIKICAgICAgIG9mZnNldD0iMC40ODEzNTU0OSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MDg1ZDE7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjA0Nzk1O3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC45MTQyNjUxIgogICAgICAgaWQ9InN0b3A0MzU2IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwOTU5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNDcxOSIgLz48L2xpbmVhckdyYWRpZW50PjxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgIGlkPSJwZXJzcGVjdGl2ZTIwMiIKICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNjQgOiA0Mi42NjY2NjcgOiAxIgogICAgIGlua3NjYXBlOnZwX3o9IjEyOCA6IDY0IDogMSIKICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDY0IDogMSIKICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDU5IgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDUwOTkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjA4MzQ5ODQsLTEuMTI2NDAwM2UtNiwxLjM1NTI1MDZlLTYsMi41MDY4MDE4LC0xMjUuMTQ0MDgsLTE1LjE2MjcxMykiCiAgICAgY3g9IjExNS41IgogICAgIGN5PSIxMC4wNzI1MTYiCiAgICAgZng9IjExNS41IgogICAgIGZ5PSIxMC4wNzI1MTYiCiAgICAgcj0iMC41IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTMwIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMDEiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQ1MDY5MzMsMCwwLDAuNjc5OTQ4MywtNDUuMTk2NjE1LDAuMjIxODgyODIpIgogICAgIHgxPSIxMzguNTA4MjQiCiAgICAgeTE9IjMxLjk5OTk5OCIKICAgICB4Mj0iMTQ5LjYwMjI2IgogICAgIHkyPSIzMS45OTk5OTgiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEwMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LC03Ni41MjE4NzUsNy44OTMzMTk4KSIKICAgICB4MT0iMTE2IgogICAgIHkxPSIyMC41NzQ1MjQiCiAgICAgeDI9IjExNiIKICAgICB5Mj0iMTkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEwNSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzI4ODYxMDksMCwwLDAuMDc2Mjc0NDYsLTE3MC4zNTI0NCwxMi45NDc2NTkpIgogICAgIHgxPSI0NzEuODAwMzgiCiAgICAgeTE9IjE0MS40NzUxIgogICAgIHgyPSI0NzEuODA0MzUiCiAgICAgeTI9IjE0NC4wNTcwOCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDg4NCIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTA3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xMjI1MzI2NywwLDAsMC44NzU4MTQwOCwyLjA1OTQ1MzYsLTEwLjcxMzEwNSkiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICB5MT0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTI9IjMxLjk5OTk5OCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTA5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODkyLC00LjYyODg4NTVlLTQsMC4wMDY1MDA4OCwtMS4xNDY2MTA5LDc4LjUwOTMwNSwyMDMuNjA5MDcpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExMSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQ2NTQyNzEsLTAuMDAyNTYyNTMsNy4xMzE1Mjc3ZS00LC0xLjY3MjM5NDQsMzU3LjM0OTk0LDI2NC4zNTUwNikiCiAgICAgeDE9IjQ2OS4xMDU2MiIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NjAuMDYzNjMiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTEzIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIyNjIzMywtNi43NTEzNTMxZS00LDAuMDAyNDE5NzYsLTEuNjcyMzg1MiwyMDEuMzA4NzcsMjYzLjQ5NTk1KSIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzU5IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMTUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQwODIyMjQ5LDAsMCwwLjQ0MTU1MDksLTIwNy4wNTUyMiwtMTc0LjI2NzY1KSIKICAgICB4MT0iNDcxLjMwMzQ3IgogICAgIHkxPSIxNDEuMjUyMDMiCiAgICAgeDI9IjQ3MS4zMDQxNyIKICAgICB5Mj0iMTQxLjcwMDk5IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NzEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMTciCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtOTUuNzcxODc1LDMuOTQwMzg1OCkiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICB5MT0iMzciCiAgICAgeDI9IjEyMS4xMDIyNiIKICAgICB5Mj0iMzciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExOSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjEyMTg4MzgsNy45OTU4NjI5ZS01LDAuMDI2Nzc2ODMsMC4xOTgwNjM3LDc1LjczODk4NSw3Ljg3NzY4NzgpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEyMSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQ2NTQyNzEsLTAuMDAyNTYyNTMsNy4xMzE1Mjc3ZS00LC0xLjY3MjM5NDQsMzU3LjM0OTk0LDI2NC4zNTUwNikiCiAgICAgeDE9IjQ2OS4xMDU2MiIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NjAuMDYzNjMiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTIzIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIyNjIzMywtNi43NTEzNTMxZS00LDAuMDAyNDE5NzYsLTEuNjcyMzg1MiwyMDEuMzA4NzcsMjYzLjQ5NTk1KSIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTUyIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMjUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjgzMzMzMzMsMCwwLDAuODAzMTM3NywtNzYuNTIxODc1LC0zNi4wNjcxMzkpIgogICAgIHgxPSIxMTYiCiAgICAgeTE9IjIzLjA3OTY4NyIKICAgICB4Mj0iMTE2IgogICAgIHkyPSIxOS41MTcxODciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ3MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEyNyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTA3NTA0NCwwLDAsMC4zMDIwODMzOSwtODUuMTM0NzI5LC0xMTkuMDIwODMpIgogICAgIHgxPSIxMTAuMDA4MjQiCiAgICAgeTE9IjM3IgogICAgIHgyPSIxMjEuMTAyMjYiCiAgICAgeTI9IjM3IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTUzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxNTkiCiAgICAgeDE9IjEwMi41IgogICAgIHkxPSI1MS41IgogICAgIHgyPSIxMDciCiAgICAgeTI9IjQ5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUxNjciCiAgICAgeD0iLTAuMDExOTMyMzkyIgogICAgIHdpZHRoPSIxLjAyMzg2NDgiCiAgICAgeT0iLTAuNDc4NjAwNDMiCiAgICAgaGVpZ2h0PSIxLjk1NzIwMDkiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjU1ODA4NTUiCiAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI1MTY5IiAvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTgzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxODkiCiAgICAgeDE9IjEwMS41IgogICAgIHkxPSI5OC43ODEyNSIKICAgICB4Mj0iMTAxLjUiCiAgICAgeTI9IjEwOC4zMzQ1NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48ZmlsdGVyCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJmaWx0ZXI1MjAzIgogICAgIHg9Ii0wLjA0NzcyOTU2NyIKICAgICB3aWR0aD0iMS4wOTU0NTkxIgogICAgIHk9Ii0xLjkxNDQwMTciCiAgICAgaGVpZ2h0PSI0LjgyODgwMzUiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIyLjIzMjM0MiIKICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjUyMDUiIC8+PC9maWx0ZXI+PGZpbHRlcgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0iZmlsdGVyNTI0MiIKICAgICB4PSItMC4wNzEzOTM3NzkiCiAgICAgd2lkdGg9IjEuMTQyNzg3NiIKICAgICB5PSItNS4xOTYzNDM4IgogICAgIGhlaWdodD0iMTEuMzkyNjg4Ij48ZmVHYXVzc2lhbkJsdXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0ZERldmlhdGlvbj0iMi45ODk0OTI3IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTI0NCIgLz48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTI2NyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MjczIgogICAgIHgxPSItODgiCiAgICAgeTE9IjIwOCIKICAgICB4Mj0iNDgiCiAgICAgeTI9IjU2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUyODMiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjk4MzAwOTcxIgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTI4NSIgLz48L2ZpbHRlcj48ZmlsdGVyCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJmaWx0ZXI1Mjk5IgogICAgIHg9Ii0wLjAzMzcyNTA4OSIKICAgICB3aWR0aD0iMS4wNjc0NTAyIgogICAgIHk9Ii0wLjY0MDc3NjciCiAgICAgaGVpZ2h0PSIyLjI4MTU1MzQiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjEzMzQ5NTE1IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTMwMSIgLz48L2ZpbHRlcj48cmFkaWFsR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTMwMyIKICAgICBpZD0icmFkaWFsR3JhZGllbnQ1MzA5IgogICAgIGN4PSIyMS41NTU2MDkiCiAgICAgY3k9IjExOC43NzU2IgogICAgIGZ4PSIyMS41NTU2MDkiCiAgICAgZnk9IjExOC43NzU2IgogICAgIHI9IjUuMDcwMzg4NCIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjMyNjQ3MywwLjA0OTMwNTk0LC0wLjAxMDEyNDEzLDAuMjUzMTAyOTksLTMuODY3OTYzMiw4Ni44NzQ3MjEpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUzMTEiCiAgICAgeD0iLTAuMDYwODczNzg2IgogICAgIHdpZHRoPSIxLjEyMTc0NzYiCiAgICAgeT0iLTAuNjA4NzM3ODYiCiAgICAgaGVpZ2h0PSIyLjIxNzQ3NTciPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjI1MzY0MDc4IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTMxMyIgLz48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTM0MCIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzQ2IgogICAgIHgxPSI5Ny44NzUiCiAgICAgeTE9IjM4LjA2MjUiCiAgICAgeDI9IjEwMy4zMTI1IgogICAgIHkyPSIzMi42MjUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwNTkiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50NTM2NiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDgzNDk4NCwtMS4xMjY0MDAzZS02LDEuMzU1MjUwNmUtNiwyLjUwNjgwMTgsLTEyNS4xNDQwOCwtMTUuMTYyNzEzKSIKICAgICBjeD0iMTE1LjUiCiAgICAgY3k9IjEwLjA3MjUxNiIKICAgICBmeD0iMTE1LjUiCiAgICAgZnk9IjEwLjA3MjUxNiIKICAgICByPSIwLjUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5MzAiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM2OCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDUwNjkzMywwLDAsMC42Nzk5NDgzLC00NS4xOTY2MTUsMC4yMjE4ODI4MikiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICB5MT0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTI9IjMxLjk5OTk5OCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzcwIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MzMzMzMzLDAsMCwwLjgwMzEzNzcsLTc2LjUyMTg3NSw3Ljg5MzMxOTgpIgogICAgIHgxPSIxMTYiCiAgICAgeTE9IjIwLjU3NDUyNCIKICAgICB4Mj0iMTE2IgogICAgIHkyPSIxOSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzcyIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMjg4NjEwOSwwLDAsMC4wNzYyNzQ0NiwtMTcwLjM1MjQ0LDEyLjk0NzY1OSkiCiAgICAgeDE9IjQ3MS44MDAzOCIKICAgICB5MT0iMTQxLjQ3NTEiCiAgICAgeDI9IjQ3MS44MDQzNSIKICAgICB5Mj0iMTQ0LjA1NzA4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0ODg0IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzNzQiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjEyMjUzMjY3LDAsMCwwLjg3NTgxNDA4LDIuMDU5NDUzNiwtMTAuNzEzMTA1KSIKICAgICB4MT0iMTM4LjUwODI0IgogICAgIHkxPSIzMS45OTk5OTgiCiAgICAgeDI9IjE0OS42MDIyNiIKICAgICB5Mj0iMzEuOTk5OTk4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzNzYiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjE4OTIsLTQuNjI4ODg1NWUtNCwwLjAwNjUwMDg4LC0xLjE0NjYxMDksNzguNTA5MzA1LDIwMy42MDkwNykiCiAgICAgeDE9IjQ0Ni4yNTcxNCIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzc4IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDY1NDI3MSwtMC4wMDI1NjI1Myw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICB4MT0iNDY5LjEwNTYyIgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzODAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMC4wMDI0MTk3NiwtMS42NzIzODUyLDIwMS4zMDg3NywyNjMuNDk1OTUpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM4MiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDA4MjIyNDksMCwwLDAuNDQxNTUwOSwtMjA3LjA1NTIyLC0xNzQuMjY3NjUpIgogICAgIHgxPSI0NzEuMzAzNDciCiAgICAgeTE9IjE0MS4yNTIwMyIKICAgICB4Mj0iNDcxLjMwNDE3IgogICAgIHkyPSIxNDEuNzAwOTkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ3MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM4NCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05NS43NzE4NzUsMy45NDAzODU4KSIKICAgICB4MT0iMTEwLjAwODI0IgogICAgIHkxPSIzNyIKICAgICB4Mj0iMTIxLjEwMjI2IgogICAgIHkyPSIzNyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzg2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODgzOCw3Ljk5NTg2MjllLTUsMC4wMjY3NzY4MywwLjE5ODA2MzcsNzUuNzM4OTg1LDcuODc3Njg3OCkiCiAgICAgeDE9IjQ0Ni4yNTcxNCIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzg4IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDY1NDI3MSwtMC4wMDI1NjI1Myw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICB4MT0iNDY5LjEwNTYyIgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzOTAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMC4wMDI0MTk3NiwtMS42NzIzODUyLDIwMS4zMDg3NywyNjMuNDk1OTUpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM5MiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LC03Ni41MjE4NzUsLTM2LjA2NzEzOSkiCiAgICAgeDE9IjExNiIKICAgICB5MT0iMjMuMDc5Njg3IgogICAgIHgyPSIxMTYiCiAgICAgeTI9IjE5LjUxNzE4NyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDcxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzk0IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45MDc1MDQ0LDAsMCwwLjMwMjA4MzM5LC04NS4xMzQ3MjksLTExOS4wMjA4MykiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICB5MT0iMzciCiAgICAgeDI9IjEyMS4xMDIyNiIKICAgICB5Mj0iMzciIC8+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODYzIgogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTgiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMC4wIgogICBncmlkdG9sZXJhbmNlPSIxMC4wIgogICBvYmplY3R0b2xlcmFuY2U9IjEwLjAiCiAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgaWQ9ImJhc2UiCiAgIHdpZHRoPSIxMjhweCIKICAgaGVpZ2h0PSIxMjhweCIKICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjciCiAgIGlua3NjYXBlOmN4PSIxNTIuNjY0MTQiCiAgIGlua3NjYXBlOmN5PSIxMjAuNTg0NTQiCiAgIGlua3NjYXBlOndpbmRvdy14PSI1MjAiCiAgIGlua3NjYXBlOndpbmRvdy15PSIyNjAiCiAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkxpdmVsbG9fMSIKICAgc2hvd2dyaWQ9InRydWUiCiAgIHNob3dndWlkZXM9InRydWUiCiAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgIGlua3NjYXBlOnNuYXAtbm9kZXM9InRydWUiCiAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJ0cnVlIj48aW5rc2NhcGU6Z3JpZAogICAgIHR5cGU9Inh5Z3JpZCIKICAgICBpZD0iZ3JpZDQwNzYiCiAgICAgc3BhY2luZ3g9IjFweCIKICAgICBzcGFjaW5neT0iMXB4IgogICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICBlbmFibGVkPSJ0cnVlIiAvPjwvc29kaXBvZGk6bmFtZWR2aWV3PgoKPGcKICAgaWQ9Imc1MjE5IgogICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjE2NzIwMTU4LDAsODEuNzAyMTIpIgogICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyNTI0MikiPjxwYXRoCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTUyOTAzNCwwLDAsMC40OTMzNjkxMywwLjcwMDM5NTU1LDQzLjk5MjA3NikiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1MTY3KSIKICAgICBkPSJtIDcuNzgxODU0MiwxMDYuODg3MDMgMTEyLjI0OTUxNTgsMCAwLDIuNzk0NDIgYyAtMzUuMDE1MDE4LC0wLjAxNDMgLTcyLjQ2Mjc5MiwwLjAxNDQgLTExMi4yNDk1MTU4LDAgbCAwLC0yLjc5NDQyIHoiCiAgICAgaWQ9InBhdGg1MTYxIgogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+PC9nPjxwYXRoCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk1MjkwMzQsMCwwLDAuMTE1MDkyODMsMC43MDAzOTU1NSw4NS44MzgzNTcpIgogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjUyMDMpIgogICBkPSJtIDcuNzgxODU0MiwxMDYuODg3MDMgMTEyLjI0OTUxNTgsMCAwLDIuNzk0NDIgYyAtMzUuMDE1MDE4LC0wLjAxNDMgLTcyLjQ2Mjc5MiwwLjAxNDQgLTExMi4yNDk1MTU4LDAgbCAwLC0yLjc5NDQyIHoiCiAgIGlkPSJyZWN0Mzg1OSIKICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz48cGF0aAogICBzdHlsZT0iZmlsbDojMDAwMDAwIgogICBkPSIiCiAgIGlkPSJwYXRoMjE5NyIgLz48ZwogICBzdHlsZT0iZGlzcGxheTpub25lIgogICBpZD0iRnJhbWVfY29weSIKICAgZGlzcGxheT0ibm9uZSIKICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzY1LjQ1NzI2LC0zMTQuMTE2NCkiPjxnCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGRpc3BsYXk9ImlubGluZSIKICAgICBpZD0iZzM5NzgiPjxpbWFnZQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC43NSIKICAgICAgIHdpZHRoPSI1NzEiCiAgICAgICBoZWlnaHQ9IjU3MSIKICAgICAgIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBanNBQUFJN0NBWUFBQUFLMWxwYkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBIEJHZEJUVUVBQU5iWTFFOVlNZ0FBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUZTNFNVUkIgVkhqYTdKMEpkeHJia21hREZCcHNYOWZyLy84cnE5Njl0cXdKdWwydGZBNkNpRGh4a2dRUzJIc3RsZ2JiRXNJU3VmWEZjRllDQUpmSyA2b0Mvc3lxOHIvZnRVN0U5OE8zb2ZkbjdxMzhPQUJmNlpBa0F5LzQ1N1JXWDF1dlY5NTNqT1dUYmVMMzZ2dXoxWGtGQ2dnQ1FIUUNZIDRXZXlKVFM5MHFKZnJnNzRPNmQ4SHNsRVpodThyL2Z2VlArc0lqb0lFQUN5QThEUFgvSDlWV25KeEdRMTA5dXJRSGlPK1h3U3BTNWIgNXlZenZqMUZrQkFnQUdRSGdKKzNvdGhVWmFZbEpYUGZoa1Nxam8wbklKdEFlbzUxaStTb0lrRUlFQUN5QTNCemN0TXJOQlVScWJ3OSBUUGczM3ArdE9pVHUwRFFuUzNRMndldXR0emVOZjU5OTNEbEVxUFYxQWdDeUEzQVZjcE5KVFVVOHZKZlIrNksvMC9xNFF5SkwwZGM0IGQ1cmp5YzdHZWJscGlJejl1NjIzV3g5MzA1Q3ZRNUlnNUFjQTJRRzRLTG1wSkRVdGdmSGVudk8yYW53ZWU1OUVUbFBPeXNwWG5xeHMgR25LVDNUNktmNVo5emtyQ1ZPa0pxaVpCQUlEc0FCejFaMmFLM05na0paT1l1K1R0MXV1dDkwMFZJWnM0bmVLNXhFdEpOaE9GeGhNWSA3K1ZINGU5VVAwOHJEZHBLZndrTStRRkFkZ0NPbnQ1a1UwODlZaE5KeVYzeGJmdSs2TyszUktpYUhMVktXWWMrdjFUNmRhcUNzdzJTIG1VaHVQaHpScWR3aVFjcWt5S1pQMVg0Z1VoOEFaQWZncE9sTnF4eVZwVFdSdUt3NzMyN2RodVIxZlorcUpiTHFLUG94VTUxdFI1cXogZFlTaktqVHZoZGV6OTMwMFVxSldDcFQxQUdXcEQrSURnT3dBbEFXbmxkNTR2UzZ0cENhU203WHoranI1TzVINHJKUFBXUzFwcllxcCB6cm5MV050Q2FsSXBYVVhpVW5sWmVWOVZocW9DVkNsN0lUNEF5QTVBU1hDeTlDWktiVnBDWTJVbXU5MEhFdVI5ekVxNkU4bE9aV3FyIGQvejhGT2xPYXlJcksyZjFKRHZ2amRkN2Jwa1FlZkx6SVgzOVA0Z1BBTElEZk05M0MwNmxnZmpPU1Z5cUVuUGZlT25kZWlVbmFuUnUgU1UwbU9lY2VQVzlKVHlaQlVmOU9yL0JrdHpmbjliZmd6eXZ5azVYQUVCOEFaQWVndE84bUd3Ry9TOUliTFNDUnhGUmZ6NFNuVmNZYSBnaVRISzFsRmtyTnF5STBuTzZkTWRpTFp5WGJkdEpLZmx2aThTMTdlaWlUSGUvbm12QjNKVUZRaWE4a1A0Z09BN0FBcFRsZDZZeVVpIEswUGROMjRQaWVCNEFsUk5kSHBIeXl1YmthTUVaNmxuWTFVa2FDUDFhYTZldE9lamtPcjAzbG9DOUM3dDhoZmlBNERzQUlKVGtodXYgVCthK0lUY1BTbXdlQXRtcEpEbHJKOG5KZW5HbTl0eGtZaU55bWFlZTl3cFFKRDgyOWJHSmlrMTlvcVRIUzNkZUcyOTc3N01mYjN3NyBLbjhkSWo1SUR5QTdBQXYrWG83S1ZQYUM3NVdtb3VRbUVwd0hJemdQenZ1cW90TktjVm9KVHZYOHEwcGEweU0zNTVDZGl2ejBwa0F0IDhha2tQOVh5bGljMHI4bjdYcE8vK3laeCthdFhmRWg3QU5rQnVPQVVwelUxVlJHYiswQm1vcHY5KzFYQjBaS1RDVTZXMkF6SjR6RkYgYWxZTGUrNm9pRSt2QkUwVm9Pb0lleVk4bWVSa3R6ZnoraFR4cVk2MEl6MkE3QUFzSU1WcFNVNDBDbTdsNXFHUjJsUnU5dDk3cFNwdiBmRHhyTXU0dFIvV0lUWS9RTE9WNVl6dEJoQ3JpSTFKcmVQWUV5QnRyajBwZEZmSFJRdk9pM3ZmaXZPKzFRM3plbmZzWmJYUzJqdzNpIEE4Z093SmxUSEcrQ3lrdHd0SGhrVXZQWWVEdVRISnZtVkp1TWV4cUtSZHI5TmEyVXB2VmNjQ25QRTl2T1A2c21RSkVFVlJxZXMzSlggcGN5VnljNUw4SHBMZk40T1RIeElld0RaQVRoVGltUDdjTElTMWIwak40L095OGZnejNvRTUxN2EvVGZlY1EydDlPYVF4T2FRbi8rbCBQV2RzWi93M1dTbXNwL3pWVS9KcVRYTkZKUzFQZGw2SzR2TTZrL2hVVWpRQVpBZmdRTW1KVXB4V2llckJDRTEyNjVHY2RTUEZhYVUzIDFlVjkxWW1vRmM4RGt5N0VVeHVoZStVbjIrblRrcDRYNStWTFFYeGVBdkhKK254SWV3RFpBVGl4NU5peGFxL1J1RmR3bm9MWE04bUogU2xSVEJHZjhlcVJUY0tvL3cveWN6eU5EVlFtcVRueGw4dU1sUGw0L3oydUg5RlNUbjBoODlIMnNqTEVqUFlEc0FEUWtSMS9jdllWLyBVUitPSnpnUGdkdzhtZGVqVk1jclUxWDI0RlFPMGF6dXNtbjl2UEt6ZkI0SmFnbFFLL21wcEQ1ZTJ1T0pUNWIyL0hLRTUxY2lQOTVZIGUxVG04c1FINlFGa0I2QWdPYmEwVStuRDhYcHdiR3JUSXpwWmloTTFHVThWSEpIYW9qNStacGN2UVpYcHI2cjhaRDArV1Y5UGx2VDggQ2w1NjZVODAyVlhaMzJPRkQra0JaQWVRSENNNVUxS2NMTDNKM281S1Z0RWtWVVZ3S2xOVEpEYTNLVUJWK2NuRXA5cmI0NG1QbGh4OSBlekd2VyttSnlseFIyalBlZDZRSGtCMUFjZ3FTazZVNFh2OU42NVpKanQ2TEUwbE9OYjJwSkRqOFBDSS9MZm5KU2wyWitHUlRYQytCIDhQd0tKR2lPdEFmcEFXUUhrQndqT2ZZVThhalJXTXZMRnlVMFh3TEo4Y3BWM3VLL1ZvclRrOTRnTjlBU29LeloyWk9mU0h5cVRjMWUgV2V2WlNNNnprL3BrNHRPYTVFSjZBTmtCSktjenhYbHl4T1pMUVhRZWpPUzBTbFhaQkZWMkN2aUtuemVZUVg2ODNwZE5VWHk4L2g2diB4R1ZMVzgrQjhEd0g0bVBMWE43aHBFZ1BJRHVBNURpU0U2VTRudUI4Q1VSSEp6OWVQNDVYcWhxU0ZLZXkrNGFmTDVoYmZsb1RYcTF4IDlrcmFrNVcxbm9PWGxUS1hONzZPOUFDeUEwaE9JamhXYnF6d1JDVXJ1d0RRUzNHOGM2aThBelVSSExoRThmSEtYSm4wdkNUQzgxd1EgSHkvdFFYb0EyUUVrSjVDY0w0VmJTM0x1RzVKVFRYRzhueGwraG1DSjRoT1Z1a2JSc0NXdUh1bnh4T2RaNHNabXBBZVFIVUJ5bE9SayBDYzdYSk5XSnlsVzZ1VG5hYXR6YWc0UGd3TFdJajM3NTBVaDdxdEtUM2FaS3owWllUZ2pJRGl4VWNyVHNERE5KemxjbE9WK0ROT2V4IElEbGV3N0VuT1FnT1hLdjRaQk5kRmVsNUZYOXl5d3JPejBCODlML05wQ2M2amtJa1Bud1VBTm1CbzM3ZmVKS2pEK2FjSWpsZmplaDQgaVU0cnlja2FqcU96cUJBY3VHYng4Y2JadmFXRlZueXlzWFV2NWZtcFh2NlV1TXdWTlRObkN3b3BiUUd5QTJkSmMxYlNQdExodmtOeSBXcUtUOWVSay9UaVZVaFUvRTNCTDRoT1Z1VnBUWEZuU1k2WG5wNUVmS3o1MmlxdlMwNFAwQUxJRFo1V2NyRnhsOStOOEtVak9WL0g3IGNuU1NvNWNBZWxOVnBEZ0FOZkZwbGJpODBYV3ZweWNTbmt4NnRQaU1IemVTSHUvc0xZUUhrQjJZN1hza080WGNTczZZdUdTVFZaSGcgZkpXOEwwZFBWOW1tNDJ5cUNzRUIyQmVEcU14bG01bXQrT2dsaGVQTjYrZjVtZHhhemN6UlVSVFJLZXRJRHlBN01GdWFNNHBFZERobiBhM3o4YTNMelJzbXpucHlvSDZkM3N6RUFhVTkrTnBkTmUwWUJlUXVTSHR2UDQ4bk9ENVA0MkMzTnI0bjBVTm9DWkFlT0lqbGVYMDdXIGVEeEtpMDV3dm5WS3pxUHM3OG1KenFteXkvOUljUUFPVDNzaThkSDdlcUtlSGp1cXJzWG1oM25wcFQyNlJQYVdTQStsTFVCMllOTDMgUTFTeThpUkhsNnNla3hUbm0zbXBTMWs5a3BQdHh5SEZBWmcvN2VscFp0Wkp6NHVSSHR2UDh5TVJINis4TlVxVVBuc3JhMkltNVFFdSBCbEJLY3dZbnpSbmx3NXV1c3BMekxSRWRtK1pVSmFmU2o4UDNOY0R4MDU1b1NhRW5QYmFKZVJRYUxUcFIydlBMSkQzUnVIcFcya0o0IGJwdzFEd0dpNDBoT1ZMTFNZK1E2eVhsS1Voejl1azF6ZENLRTVBQXM4N2xoNi95Y2JkVkwvVnp4WVo0djNpU2V5bnlXL1VOOWY4aisgWU1MUHozLy8vUG14UnVtNWs3eWZSNXo3ai9RZ08wQ2FVK3JMOFViSXZ4cTUrZWFrT2Jaa3BSY0NJamtBbHlzOVcrZTU0MFBpWFZ1ZSArRHpKZmtsYjMzNG84Zm4xK2ZGK3laL1MxdkFwUEN2WjdTbXlLYzhLNFVGMmdEUkhUemQ1emNmNnlXZVVsMitCNkZqSnNXbk9GTW1oIDZSamc4cVhudmlFOW52am9oT2VuK2ppL1BqKzJKejJrUElEc2tPYVVTbFpSWDg3WFFITCtrcmczNTlGSmM2WklEb0lEc0R6cFdUa0ogaWljOXJjM3FGZW5SNVMyOWptTDgrR00venlEN1UxdWtQTWdPM0hpYW94dVF2YjZjckZ6MWwvaTlPVkhKS2p2V0Fja0J1THhmbnJicSBaemFUbm1paTAwdDducHpVNXpINHhlbFpmVXpiejBQS0E4Z09hVTQ2U3Y2VVNNNWY0cGV0V2lVcmIrc3hrZ053WFdtUEp6MzZ1ZWREIDRsMWRXWG5yMFhsdThYNlIraVg3ZTdoSWVaQWRJTTNaU1hPczVIeFZjdk9YSXp0WkEzSmxJU0NTQTNEOTBqTSs5MnlTcEtjbFBwN3MgMk9lYVp5VThwRHlBN055ZzZHUTdjN3lTbFUxeS9uSVNIUy9OaVVwV1NBN0FiVXFQeU83SWVyVEhLeXB0ZWRMem1DUTgrcm5uaFpRSCBrSjNybGh5UitHUnltK2JvZlRtUjVGalJpUnFRbzc0Y3UvWFl1NzhBY0YzUFI5NzBWaVErZDVJM01sZWtaL3o3YS9NOFJNcUQ3TUFOIHBUbmV6aHliNXZ3VjNGcHBUclZrSmFRNUFEZWQ4b3dNemk5a3RwY3drcDdXN1o2VUI1Q2Q2M3d5RVlsUEo5ZFBHbDREOHJkTzBiR24ga21kbldGR3lBb0JxRTdQZTkxV1ozbm9RdjV5bGIxN0tNKzdrZVN1a1BBZ1BzZ01MVEhOV0hXbE9KRG5mSlM1YmVXbk8rSG5veXdHQSAzcVRISzJ1dEpralBnOFE5UERibCtmM3h4a1dFV25oV1Jub29heUU3c0VEUmlVYktLMm5POTBCMGRObktubVcxVnBKekovVGxBRUQ5ICtTdnE1OW1ZbHoxN2VsclNvMlhIbHJiR2M3YTAzRkRXUW5iZ3pKSWpFazgyZUVjOTZONmNVV2ErTzZLanR5Ri9iYVE1VVFPeWtPWUEgd0lTVVJ6NmZSMXFUVzVIMFZIcDdXc3ROM3ovdkIyVXRaQWNXbE9ib3VOYzd1Tk5MYzdUY2ZKZjkvcHhSZEZxOU9aU3NBR0J1NmJINyBlWHFscDlxOGJGZGozQVVwajFmV1FuaVFIVGloNkVRajVWRnZqaWM2VWRuSzdzMnA3TXhCY2dCZ3pxVEhQdDlGU2JiOVJTOFNuM3Z4ICszaWlYK0RlVGJLek1mY1o2VUYyNElpaW8zL1l2VFRuVWZ6ZW5PK081R2pSMFUzSVh1VHI5ZWFJMEpjREFQTSszMldsclkyMHo5MWEgTjFLZXFJY24yZ3YyWWRJZFVoNWtCNDRrT1dKK0NQVVB0bTdLaS9ibVpLSmptNUM5TkNjYUp5Zk5BWUJUcFR4YjlmcmczTHo5UExhZiA1NzRoUFZHSi9zTkplQkFlWkFkbVRuTmFaU3ZkaEd6SHlTUFJ5WnFRMThsdk9xUTVBTENFbEtlMWhYbWR5TTU5UTNac3lmN05TQS9DIGcrekFrVVFuMnAxVFRYTnNmMDQyVWs2YUF3Q1huUEpFbTVpajNUdnJKT0VabndmZmtwUkgxUHNBMllGTzBmRU84QnhGWjV5VzBxZVQgUjVMelhmYVhCRVpOeVBUbUFNQVNueHNQVFhuV1NuRHV6ZXRXZEtLUzFwdjYvUFR4SUR0d2dPU0k3RzhSamNwV1VacnpYMUl2VzQwZiBtMGtyQUxpRTU4bWVsQ2VUSGs5MktpVXQyOGZEUGg1a0J5YWtPVkYvanQyZDQwMWEvWmQ2cVJjRlJydHpzcEZ5MGh3QVdPcHpaay9LIFk2WEhreDlQZHJLbVpkdkh3ejRlWkFjbWlJN1huNlBMVm5wdmpoWWRtK2kwZHVkazB3ZWtPUUN3OU9mT0xPWEpraDZiNEZSbEp5dHIgQ2NLRDdFQmJkS0w5T2Q3dW5MOGN5ZkZFeHp2QU14b3BIMGh6QU9BQ24wZWpsTWY3UlZKTGo1V2Z1MFNHaG9iMDBMaU03RUNINk9oRyBaSHUybFMxYldja1pTMWM2MGRGbEsxMmpIc1NmdGhKRUJ3QXU5UGswMnI0Y3BUeGVlY3ZyMjdrTHBNZjdIQ0kwTGlNNzBCU2RWbitPIGwrYm9STWNiSzg4Mklkc2ZVaVFIQUM3NXVkVkxlYWFLajVVZ2IwckwrNFdSeG1Wa2h4OUc5VkpQWEdYN2M3S3lWU1E2M3BKQW1wQUIgNEZhZVkzdWxKNU9jZFVOMnN1ZFVHcGVSblpzWEhmMURGdTNQaWNwVy81TDlIVHJSV0xrVkhkSWNBTGlGNTF2dkpIWDk1ejJUVzczbCBMSHVRS01LRDdOek1ENTdlb1dNYmtXMS96aWc2M3p0RlIyOUQ5bzU4UUhRQTROWit3ZHpLL2c2emJPVkhyL1MwOXBNaFBNak96Znl3IFJhUGwzcUpBcnovblg3SmZ1c29ha1hWL3p1RDhnQ002QUhCTHo4TmVXY3Q3Ymg1ZnYydEl6eUJ4S2N1NzJVa3RoQWZadVNuUjhScVIgbzdMVitMbzNjZVgxNTBUVFZrZ09BTnk2OEZTbXRqTHBHU1FmU1k5U25vMTZpZkFnTzFjdE9ycDBGZTNQc1pLalMxZjY2QWY2Y3dBQSBwZ25QSUgxOVBJUEV1M3BhNmM3NDhXMGZEOEtEN0Z5TjZFUTdkUFRFbFQ3YlNndk8rTG9WblZZak1rc0NBUURpNStkcUg4L0tQS2ZlIEZXU24xYitEOENBN1Z5MDYzZzRkZlZyNWZ4bko4VXBYV25TODA4cnB6d0VBcUQxWFYvcDRyT3pZZG9US1ptWHZ1ZmdENFVGMnJsMTAgbmdMUitaY2pPOTRPbmV4OEs4cFdBQURUaENmcjQxazVNak1VYmw1aTVJSHdJRHNYSnpyWnNzQm90UHhmNGljNjNtaTVGUjM2Y3dBQSA1aEdld1pHTjZnYm15bFJXQnNLRDdGeVU2R1RMQWtmUnlVcFhOdEd4b21NbnJ1alBBUUE0L0RrODZ1TnBUVzZ0R3RMVDg1eU04Q0E3IEZ5VTY5dFJ5S3pyZkplN1JxWW9PL1RrQUFQTStuMGQ5UENMdGRHY2wwMU1kaEFmWnVWalJ5WGJvZkRlQ1k1dVJJOUc1UTNRQUFNNGkgUEt2Q3JiVkZHZUZCZHE1R2RQUldaTzh3VDY4Wk9kdUtQSDY4Nk1SeUpBY0E0SGpDRXozUFZtUW5lcDZ1UEdjalBNak9va1hIanBhUCBvdk5mZ2VoOEQwUW4yNkdENkFBQW5FNTRkT055cTVlbmRlM29BZUZCZGhZdk90OEMwZkVtcnJ5dHlHT2l3Mmc1QU1ENWhFZU05TmkvIDAycGlQdlI1R3VGQmRzNG1PanF5OUpxUjlXR2UzclNWSFMwZmQrallaWUdJRGdEQStaLzN2VWt0NzNuNFdNL0xDQSt5Y3hiUjBSczAgYlRPeUp6ci9SL3pSY204cnNuZHFPYUlEQUhEZWE0QnRYTDZUL1Q2Y1ZmRmpJVHpJemtXSWp0MmpZdy8wdEtLalpTYzcvaUViTFVkMCBBQUNXSlR6REVhUUc0VUYyenZwTkhoMEI0WTJYVzlINVArcDlWblFlUDIrNkVabGxnUUFBbHljOHAzaU9SbmlRbmFOSmppMWZlVWRBIFpLSmp4OHRaRmdnQWNKM0Njd29RSG1UbjdLTFRtcnI2Sm45MjZMQXNFQUFBNGJGc0MrOUhlSkNkV2I2UjlldTZJVGs2NnlxYXZQcVggRVIwdjBXRlpJQURBN1FwUGo2eThJenpJenB5aUUvWG85SWlPYmthT1JJZlJjZ0FBaEtjaVJGc2xQUHJ6SWp6SXppeWk0NDJZYTlINSBMdnZuWEgyWDNXYmtKMFFIQUFEaDZaQ2E2SDIybklYd0lEc0hpWTRlTWMrT2dmQU85R3p0MFVGMEFBQVFub3I0dEhwNEVCNWtwMXQwIDdIWmtMVHBlNmNwclNLNU9YU0U2QUFBSWo1VVg3MlYwRTBkNEFObHBpbzR0WGRrVHpQK1MrQVR6c2FUMURkRUJBRUI0T29XblIzS3kgMGhiU2crdzBSU2NyWFkyaUV6VWoyNmtyZmFnblc1RUJBQkFlU2FURWs1eU5lZW5KanYyNytuNGdPeENLVG1WcFlLdDBOZmJvZUp1UiBFUjBBQUlRbkVwOU1kaUw1MFRDU2p1enNTVTdQMGtDdlQyZDhlMHgwdmdyTnlBQUFYR1A2aFNlU0hYdkxraDVHMHBHZG5XOUMvYnBYIHZ2SkVwN1V3TUJPZEFkRUJBRUI0R25JVENVNGtQZEcwRmhOYU55NDdsYVdCZHNROFNuUnNRN0xlcGFOTFY0Z09BQURDNHdtUHlIN2YgVHEvNFJMMDhOeitodGI3aGJ6cVJ1SHhsUjh3ajBkR3lZMFZuVEhUV1F1a0tBQURxSmExREVoNHY2Ym41Q2ExYlQzYWlFWE5idnZvdSArMGRCZUltT1hScW9TMWNEb2dNQWdQQklMZUdKbXBOLzN6N01yU0k3TnoyaHRiN1JielNiNk9qRmdZK1NOeVRybTdkTFIvZm8zQm5KIEFRQUFpSVJuSzM5NlJrWDZrNTJzcERWeWt4TmE2eHY4QnRPdlIzMDZudWhremNnc0RRUUFnRU9GNTA2OXZ2MjhybFNUblVyS2M3TVQgV3VzYis4YlNrcVBMVjE3cHl2YnA2RFRITGcxRWRBQUFZQTdoR1pTTWlQamxMQzAxV29CYWZUd2pOOWV3dkw2aGJ5Z1J2eUg1WG5iTCBWN29oT1pLZDZMd3J0aU1EQU1BaHdqUEt6cDBqTzl0QWNxS2JMV2xwd2RtbyszRDEwbk5yeVU1MjVwVTl4ZHhPWDQwTEExc0hlN0lkIEdRQUE1aENlU0haMHV0TVNuYWlrcFV0WVYxL09XdC9JTjVHVkhYdVNlV3REc2k1ZDJha3J2VXVIUkFjQUFPWVFIdjNMK2RSa3g1T2UgbTJ4WVh0L0FOMCtQNkhoOU9yWkg1MnNpT2l3TkJBQ0FPWVNuc24vSFMzZmVQMjllRDgvTkhpbXh2dkp2R2lzNlkrbHFyVVNuMWFmRCBkbVFBQURqWGRVdzNMTjlMTzkxNWw3NlVSK1FHR3Badklkbnhqb040VUxJVDllbFVSWWZTRlFBQXpIbmQ4aWEwdklabFBZWFZrcDFOIElqdjY1VldtTytzci9tYXhzdE56a25sRmRMenlGYUlEQUFESEVoNVBkcllTOSs2OHkyNVp5NXZRMGg5cmRhM0NzNzdTYnhKUGRIU3EgTTRxT1BmZnF1N1NQZ2REblhiRWRHUUFBVGlFOGVpUzlsZTU4T0pMVEdrdS82djZkOVJWK2MyalJXY24rNGtBOVp2NlhFaHN0T21NeiBNa3NEQVFCZ0tjTGpUV2hGNmM2NzFOTWR2WFBuS3Z0M3JqWFo2ZDJuWXhNZHZSM1pubUxPNUJVQUFKeERlTElEUTIyemNpUTdudlJFIGg0ZGVUYnF6dnJKdkNDczdla3V5UHZkcVRIWCtTa1RuYXlJNkpEb0FBSEJxNFJGMWZkdCtYcGZzZEZiV3QrT1Z0anpadWJyK25mVVYgZlNONG9yTXVpTTczaHVqUWtBd0FBRXU2MW9uRURjdTZmK2U5Y0l1a1IvZnZYRHpYbHV4azAxZTZJZGxPWDMyWCtDaUlyQ0VaMFFFQSBnRk5kNDZvTnkxNy96dHZuTFJPZHF5MW5yYS9rRzBBUzBSbjdkTEpVcDNMbWxWZStBZ0FBT0pmd1JBM0wwV1RXZXlBK1dlUHlWWlN6IDFsZndIKytKVHRTbjg2MGdPalFrQXdEQUpRaFAxTENza3hvck9HOUdkdDRjNGRGVFhsZFJ6cnFXWk1mS3pyM3NwenFlNkVSblhvMy8gbm9aa0FBQllxdkNJK0EzTEQ3TGJ0L1BoaU02cnRFdGJWMVBPV2wvNGY3Wkl2anp3VVhZUCtiU3k4MDNhUjBIUWtBd0FBRXUrRG9ycyBOeXg3bytqdlNuUmVaVC9sOFVUbktzcFo2d3YvRDY0Y0IySExWL3JsWDBwMGRLcGorM1FFMFFFQWdJVmRCN09HWlU5MnNuVEg5dkRZIHB1V0xMbWRkZXJKVGFVcitKdnROeWJwMDlTVVJIZHVuQXdBQXNGVGhzZGRETFR4ZXN2TnEzcmF5Y3pYbHJQV0YvdWVLeEUzSmR2cksgcGpyMktBZ1dCd0lBd0RVSVQ3Unc4Rkg4ZE9mVkVSK2I4RnhGT1d0OWdmK3BudWlNaVU2VzZtamhHVVhuaXhLZFVYYVl2QUlBZ0VzViBIakhDRTZVN1ZkbTVpbkxXcFNZN3ZlVXJLenJSUGgxRUJ3QUFMbGw2dE94bzRmRjZkMTRENGJtNmN0YjZBdjhUSytXcmI3TGZxOVBxIDB4bUVQaDBBQUxoYzBmRWFsa2ZoZWZpVWxpZnhlM2RzRDg5VmxiUFdGL1NmNklsT3BYeGxSVWZ2MDlGajVuZENxZ01BQUpjdlBQcDYgcWFlelJ1RnA5ZTVFQ2MvRmxyTXVMZG1wbHEraXB1VHNnRStiNWlBNkFBQndxZElqc2p1T1hwbk9lZ2xrNTEwdXZKeTF2cUQvdE94SSBpS2g4MVROOVJma0tBQUN1UVhSYTQraVBTbUplRzdkczRlREZsTFBXRi9DZmxvbk92ZnhaQ09nZDlPbjE2VEJtRGdBQXR5QTgrdnFwIHkxbjNTbmhzT2N1bU85R0c1VUV1cUp4MUtjbU9scDFCZHN0WCtraUl2OFJQZGI0Nm9rUDVDZ0FBcmwxNlJOcmxyS3gzSityZjJacWIgbFN4a3AvTS9TU1ErRXNJNzBidzMxYUY4QlFBQTF5ZzZQZVVzcjNmblJmYjM3K2gweCt2ZldTU1hVTWJTaVk0OTVQTkppWTVOZHV6MCBGZVVyQUFDNFJlSFIxOU5XT2N1VEhTL2hzYktqcDdRV0p6M3JCZjhIU1NBNnJWUkhOeVJUdmdJQUFLVG4vK09Wcyt5eVFTMDNMK3JtIGxiTjB3ck9TQlRjcnJ4ZjhueEtObWx2UmlXU0hRejRCQUFEUnljdFpldG1nN2QzUm91TWRLV0hMV1l0dFZsNXlzaFB0MU5HajVsK2wgUFdadWx3ZFN2Z0lBZ0ZzVUhuMTl6WllOZXNtT3Q0UEhHMGRmWkxQeWVvSC9JZUxZcDkycEUvWHFhTkhSWjE5UnZnSUFBS1RuL3pPbyBsN3FjOWY1NTdYd0xaR2U4WmVuT0lwdVZsMXJHc3IwNjNwRVFYd1BSYVIzeVNma0tBQUJ1VVhSc09XdE1kL1E2bDNkSGRuNTkzcktFIFp4U2VRUmJZckx4ZTJIK0VscDN4UDZJMWdmWE5FUjF2K3VwT0tGOEJBQURDWTRPRk1WVDQrTHgyWnFXc1NqbHJjYzNLU3l4alJlV3IgU3FwalJlZGUvQU0rRVIwQUFMaGw2Ukg1c3dYNVR2Nk1vdXRtNWRmUGE2dE9kM1RLRTZVN2kydFdYaS9zZ2UvZHEvTk40ajZkZTlrOSB6Wnp5RlFBQUlEcTdNcUtGeHc0QzZYVEhpazYyY0hCeHpjcnJoVHp3V25Sc3JQYWdIdml2Z2V6MGJrbEdlQUFBNE5hRlI4dzFkNXpPIDBzM0tXblk4NlhrTlpHY2pDMHAzbHBUc2VLUG1hOW1kd1ByaXlJNFZIVytuRHVVckFBQ0FPR3dZbktEaDBRalA3OXV6SXp0ZU9XdE0gakJhUjdxd1g4a0JidTR6S1YxK1Y0R2pSMFR0MW9rUUh5UUVBQU5pVkR6c1VaSStTMEpOWnZ3WG5MOWt2WittRXg5dTlJMElaS3ozViAzRFltMjBUSEd6UFh2VHBNWHdFQUFMU0ZaMHhpdk9rc2ZRMytwVjVXbXBWMUtldHM2Yzc2ekEreWZsMkx6bHI4Q2F5djBpNWZhZEVaIEVCMEFBSURTOWJqVnJQemlpSTVPZUd6dnp0aS84eUdVc1pyVFYxOGN5ZmtxL1UzSkFBQUFzSDhkOXBxVk4rcDYvQzUvMmtsMGsvS3ogL09uaDhmcDN4ckxZMlU5Rlg1L3h3ZFd5czVMZHBtUnZXM0tXNnRqeUZVM0pBQUFBMDY3TDNwbVU5cHI4TEgzbExKRWJMMk5GcVk0KyAyYnpTcStQMTZTQTVBQUFBN2V0eHRGbFpCeEJ2bjlmZUxOMFpoVWVYczhieTJOblNuZldaSGxSdGozWUM2MTZKVGxUQzhzcFgrdndyIFVoMEFBSUREcnM5ZXVqUEtqazUzdkhMV21PNjh5d0xTbmZVQ0gxQ3ZWK2Vya1IxdnB3Nmo1Z0FBQU5Pdnkzb1VQV3BXMXNMenl3aVAgVjg3Ni9XL1BudTRNWjVhYzFxajVWMGQwOUU0ZGIza2dvK1lBQUFDSFhhT2pFdzMwTmZxTENTUzhZNXU4QmI4bnZ6WXZvWXpWU25XaSA4cFgzUURKcURnQUFNTTkxV3FjN252RDh2aTZQZTNlZTFkdS9YMTlVdWpPYzRjSHpVcDExWUl6ZUJGWW1Pa2dPQUFEQTRkZHFlNzF1IFhhdDFLTkdxd0p6OFduM3VNbFpydE0xNzhPd0VGdVVyQUFDQSthL1hxK0wxMnJ0bTYrdTFIU0k2dWZRTUozelFyQ1cydGlYYkJZTFIgcG1RV0NBSUFBTXgvemJiWDdhaFpPUW9uRnBQdW5MT01GZFVBSTBQTUxKRlJjd0FBZ1BtdjI2c0oxMjNkZHJLSWRHYzQwWU5sSHpqZCAzYTNQM3ZoaXpGQy96cWc1QUFEQTZRT0tiTkhna3lNOFgyUmhrMW1uTEdONVVWaXIyU2w3c0RnV0FnQUE0SFRDWTlNZEw2ekllbTNQIGx1NE1KM3FnUlBKR3A4d01IeVh1MVNIVkFRQUFPRTFnMFpQdVJPdGl2TERpYXNwWW5oWGFjN0Iwc2xOdGNHSUNDd0FBNFBpaFJTWGQgaVVJTGZSMzNKcW5sMk5meFU1YXhzbTV1VDNTaU9mM29RUUlBQUlEVEJSZmVaRlowTGJlbHJKTk9VdzlIZm1DeUIraEJkbXQ5MllNVCBwVHBIdDBFQUFBQkVaK2Q2SGsxbTJVTzhLeWNmbk9SNmZvcWVuY2dFN3lVdVlla0h4azVncllSZUhRQUFnSE5JVDdYLzFtdEowZW5PIFNmdHZoeU0rSUpFRmV1ZGdWVklkcjN0YkJPRUJBQUE0aGVpMHJ1dFpPYXQ2cnVWRnlZNTlZS0xUemFOVTU2d0dDQUFBQU9uMVBldmQgZVpScHJTbEhHemdhanZRZ2lDTTZVK3h2M2JBL2hBY0FBT0Qwb3FPRnh4czZlanBRZUJZdk85YjZWcks3UkxEVnF4T05xSkhxQUFBQSBuRmQwdkRERERoOTV3dk1rZmFXc1dhL3p4eTVqWlNXc0h1dTdFeWF3QUFBQWxpSTkyZkNScmQ0OE9jSVRYZU9QRW1nTVIzZ0FKSGdRIDdCTEJMd1hyMHcvQ2dPUUFBQUNjWFhRa3VkYTMrbklmcFQ2R3Zsalo4WXpQSHZwcDQ2MG5xY1ZiVnFZQUFBRGdmTktUbGJLOFVmVHMgV3U4SnoyelgrbUhtTDF3a1B2UXo2OVhSSlN6ZHE4TUVGZ0FBd1BKRXg1T2U2SVFFVDNwc0ZlZW92Ym5ITEdQWlhwMnNVOXN1RWRRbiBvM0lHRmdBQXdIS2x4MTd6ZGJxakF3NmQ3TFFhbFdlOTVoK3pqTld5dk9nTHQxLzAwWmNOQVFBQXdHVFJhUzBaaks3N2V2SjY3Vnp6IEYxZkdxcFN3SXNQejZuY25tNzBIQUFDQWc2Ny8xVWJsVEhpTzJxZzhuT0FMOXZwMXJPaEVSME13Ymc0QUFMQmMwYWtLejVNalBDY3IgWlEwemZyRWl0VlNuOHNYcWNYTlNIUUFBZ09XTGo3NytleWVpUjJISDBhczZjNWF4cWlVczc0czkrVFpGQUFBQU9Ma0Q5S3ljbWMwQiBqbFhHMGsxS1VjMHU2c2Era3lNMUtBRUFBTURzb21NOVlNN0FZNVowWjVqcGk0eEV4MFpZaitxTE8rc0pxQUFBQURDNzlMUW1zL1FKIEN0b045RFQyblN5d2pPWE4yZXVOeVpIUjZiMDZkb2tnNCtZQUFBQ1hKenFWZE9jeGNZRk1lQ1o3d2R3OU85NVpXQzNaT1dwMEJRQUEgQUNjVkg2OVJ1UkorWkgwN1ordlo2ZG10OHloeHFwT2RpM0h3RndnQUFBQW5FNTNldlR1UGtsZDZGdE96NDFsY0ZsdDVqY20yWHdmSiBBUUFBdUN6UnNYNlJwVHRlQ0tLZHdKNmljSkFiREROOFVUMEdsOVhuYUV3R0FBQzRmT25KRmd6Ym9hWEh3QXZXTXVOeXdXSEdMNmpTIGpPUjFYbWNia3dFQUFPQnlSQ2Z5Zyt4UThLT1hzdVlxWSttUjgwcFV4Y1prQUFDQTZ4YWZhUGRlbE81RTI1UVBUbmlHaVYrQVoyNTIgQ2l0clFvcStHTy96QUFBQXdHV0pqb2hmK2NtRXA5WGlNdGtOaHBtK2tHeDVrRmZHeW5wMWtCd0FBSURMRjUyb3AvZGU5bGZUVkU1ViBPR3ZQVHJSSTBCT2VCL1Yzc29nS0FBQUFMbDk4Qm1tdnBzbWFsR2NwWlEwVDduaG1iT3VHclhtZDF1eldBUUFBdUQ3UjhWd2g2dTA5IGFpbnIwSjRkejlhaU1oYUhmZ0lBQU55RzZOaTM5VlNXRGtZaTRabTFsSFZJejA2MEVqcWJvZGNsck9ob0NJUUhBQURnZXNUSEsyV04gQWNtajhZYWpsTEtHempzc3NoOU5lYkdVZDhjcmgzd0JBQURBOVloTzYvaUlrNVN5RHVuWjBhYm1iVWQ4TUs5bmpjbmRkeHdBQUFBVyBMVHJXTjRaTzRabXRsRFcxWjhkYkZCVGQ4Y2pRS0dFQkFBRGNodmhFTzNkT1VzbzZwR2NuTytUTDN1NkZFaFlBQU1DdGlrNDBsVlVwIFpVWEp6dXc5TzYzekxucFNIVXBZQUFBQXR5RTYxamt5ZDRqODRlQ3pzZzVwVVBaU0hTL1o4WHAxdkkzSkNBOEFBTUQxaWs5V3l2TDYgZmFOZTMrNkVaempDbmZWa0owcDFFQndBQUlEYkVKM1dnc0ZxMzg1UmVuYXlFbFowMW9XWDZzeDZxQmNBQUFCY2hPall0N05KN3NvSSBlbmRnTXFWbnh6WW1aNmxPZENjUkhnQUFnTnNUbjBIT01PRFUyN09UTlNmZlMxK3FnK0FBQUFEY2p1aDR3VW5tRWVOdExmNlptaUxGIDBHUkt6ODVjL1RyTk93Y0FBQUJYSVRwV2VySUtVWFRNVk5UN2UzQ0RjbXZrUEl1ZnNtVkFpQTRBQU1CdGlrOG1QRldmbUwyTTVRbFAgYStUOFh2TGpJVmFCOFFFQUFNRDFpbzVJZk9UVTJqaUU5WWs3eVNlN1Y0ZklqZ1FXMW1wT3pzNjBRSEFBQUFCdVUzU2lZNmNxZlR1VCBqbzNvbFIxN2F1bmEyQmNqNXdBQUFGQnhDdTl3VU9zVmxVclJRVDA3WHFkenRGK25JanFNbkFNQUFDQTZWbmlzNkhoZW9aM0M2d09lIExEc2k4U0xCcUlSbGJZd1NGZ0FBQUhpaTAycFU5cEtkU1VkUFRlM1o2ZG12TXdpVFdBQUFBTER2RmxHamNsVEtPa3FEc3Bmc2pNSnogN3dpUE53OS9oK2dBQUFCQTRoZFJzbE5aWjlPc0dnM0puZkRNUzkrWnRYTkhLcWVjQzlJREFBQncwNklqMGo1Y1BDcGxlUzB5TWtWMiBSUGFqb1ZYeHpsUWFrd0VBQUFEUnFTd1l0SDdSU25kV1BiSWpnWG5aemNuZUhkSWxyRkx6RUFBQUFOeWsvR1I5TzYxa3A5UzNVKzNaIHljcFlXblNxMWdVQUFBQ0lUclZ2SjlxM003bEIyZHV2VXhrTlcwdTlub2IwQUFBQTNMYm9XTWRvdGNyWVFLWGN0ek4wM29ub2prU2kgUTc4T0FBQUFaSTdSS3p6ZG5sRnBVQjdFYjA3MmhLZDFGaGJDQXdBQUFOWTNvc1hGRmVIeFBHTlZsUjByUE40Qm9GNnF3eUpCQUFBQSBxSXBPNjZRR0wxanhYS043R3N2K0l5OWFpajU1NjRnSXBBY0FBQUJXZ2ZCRXcxQlpiM0JheWhxQ1QyeWxKL3JrYTRrbnNKakNBZ0FBIGdLcncyQkYwYnlES0JpdWxKdVhXTkpiWG5PeWxPNU82b3dFQUFPQ21KVWY3eGlweERTOWs4VTQvZDkyalZjYXFOQ2RIeDY2WDU5OEIgQUFEZ3BzV25OZjA5SldCWnRXUkhwRFoyN3BXeHVvOWVCd0FBQUtSSDZxMHpYUUhMMERBc3J6djZybE4wQUFBQUFDTEJFYW0xem1TOSB3bW1UOHVCOFFuc25Ldld6TzRuUHFrQjRBQUFBb0NVNnZYMDc1Y1dDd3dHR2xVMWlNVzRPQUFBQXZmSlRGWjRvWkJGUGVySXkxdEQ0IGhOa0lHTk5ZQUFBQU1GVjBvbVhHV2Q5TzJLUmNtY1k2Sk5taE9Sa0FBQUJhb2hQNVIrWWRXbmk4bnAxMEdpczY3YnoxaVdoT0JnQUEgZ0VPa3B5ZG95WHFGM1RMV0toR2Q2aWRrY3pJQUFBRDBDbzVJdlVtNVVzcmFvelY2M2hLZE8rbGMyUXdBQUFDUXlFOTJDSGxMZEZ3UCBpVWJQbzFUSCs0VDA2Z0FBQU1EY29tUDdkdTdNNjYwbTVmKzhISkpQTk40eXlibXJmaUwrRHdFQUFHQ2k5TndaLy9BOHBObXpVeldyIGlsRlJ5Z0lBQUlCZXdjbEU1ODRSbnRhUkVmLzV1TmxTd1lyb2xKdURBQUFBQUJxaUkrSUhMaTNwU1JjTERoT3NxbUpUSkRzQUFBQncgaVBoazZVN1hNVlUyaWZGNmRxSjBwN0kxR2VFQkFBQ0FYdUdKSnJKYXdVczZqZVd0Vng0NlA4bEsySzhEQUFBQTg0aE9SWG9HOFpjYSBoMldzeUtpR3hpZUpHcE9aeEFJQUFJQkRwR2ZvY0pGU2czS2xoRldOalJBY0FBQUE2QlVjNlhTUlRIaEt5YzdRWVZTVXNBQUFBR0J1ICthbWtPNjBHNWRWUXNLcEI4a1FuTzFvZEFBQUFvQ0kybm9jTUVxYzdtWXMwajR2SVRHb29tQlRTQXdBQUFIT0lqeWM2MVhUblB6NHkgQkIrNEZSME4wbzZPRUI0QUFBQ1lLanlWZ2FsU3BTazdHeXY3b05tWUY1SURBQUFBY3duUGtOeWkvbUVSMDZBYzFja3ltL0lzQ2dBQSBBR0F1eVJHcGh6RHBkUGpRWVZHVlppQjI3QUFBQU1DYzBxTWJsZThrRDJCY0p4bWNEeWlCUlhrdjA5Z0lBQUFBb0ZOd3JFdGtqY290IDBmbGZldmZzZUtLVEhyNEZBQUFBTUZGOHZIUm5hTnoycHNPckc1UXJKZ1VBQUFCd2lOeEV3aE9KVHFXTUZZNmVWL3AxbU1RQ0FBQ0EgWTBsUEZNQ3Nla1JIcEQyTkZTMFZiQjY2QlFBQUFIQ2c4RlNrSnd0Zy92Zlcyck1UQ1UvTG9oQWVBQUFBT0ZSNFdzdU9vL2Z0TURRKyBjS3NCaURJV0FBQUFuRko4dXIzRWpwNUx4d2VqT1JrQUFBQk9MVG1lcDZUVDRhMWtwOGVndkRzSUFBQUFNRlZ5NUFBdjJWc3FLQkkzIEtLOGtUblRZbWd3QUFBREhsQjZSV251TjE3TVRIaGRSRVI1RUJ3QUFBSTRwT09JNHlhU3FVelE2dmtvK09FM0pBQUFBY0FycHNjRksgSkRpbEJtV1JmSHc4cXAxbEpnWUFBQUF3dC9pMFJ0RDNmQ1k3RzB1a1hyWkNkQUFBQUdBT3FhbUlUaVE4N3JUNFVMU29TSVFRSFFBQSBBRGlXOUt3YXd1UDFGdS85KzZGZ1Zpd1BCQUFBZ0tVSlR6WkV0ZU15MGFubmtyd2VTUkVBQUFEQXNjUW51NGtrUjFnTmdiU3NpamVFIEJ3QUFBSllnUHRIZkxXMVFSbmdBQUFEZ25HSWpqbTlrTFRjN2Y5N2FvTnl6VzRkZUhnQUFBRGltK0lqVTJteDJHQUpMeXNhN2FGWUcgQUFDQWM0aE85TDUwOTU4OTlUeGJ5YndxQ2cveUF3QUFBS2VTbnVhZlpVc0ZxNnVZQVFBQUFCWkxsT3hFMndtOVUwVVJId0FBQUZnQyBxMGgyYkFuS1MzS2FKNG9DQUFBQUxFRnVQTm5SLzhCclVLNlVzeVo5Y2dBQUFJQmpZNWNLdGtiT0k5RmgzdzRBQUFBc1duWWk0YWxNIFlDRTZBQUFBc0dqWmlUWVFpdFEzS0FNQUFBQXNWblpFYWh1UlNYQUFBQURnWW1Vbms1aktHVmdJRUFBQUFDeGVkZ0FBQUFDdVduYTIgd2QvWnFqL0wvZzRBQUFEQVltVm4yNUFjS1FnUEFBQUF3Q0psWitzSXp0WjVPN29CQUFBQUxGcDJ0T2g0Z3JQNXZFV2lRK0lEQUFBQSBpNWNkVDNRMmdmZ2dQQUFBQUhCeHNpUGlsNjgyNXBZSmo1aVBCUUFBQUxBSTJiRTlPNTdVV09HaFp3Y0FBQUF1Um5aRTRuTFZKcmw1IHBTOEFBQUNBVTFGeWp5SDRoMTZha3pVcEF3QUFBQ3hTZnFKa0o1ckdhazFtbFMwTEFBQUE0QlFNRWk4TzNCWWxCN2tCQUFDQVU3Q2QgOG1mVlBUdmU2OTRuUVh3QUFBRGdGSktUVlpXMmtleDRvbFBkb0l6a0FBQUF3Q21FWnh1OEhqSWtSbFE5SmdMUkFRQUFnR01KVHVRYyAyOFJiZHY1OENQNWk5RUdrOFQ0QUFBQ0FVd2hRcFg5NGEyVkhIRnZhU241UUtBQUFBTUM1QkNjN3ZQdy8vM1lvZkdDUk9Oa0JBQUFBIE9KYmdTQ0l6MGFrUGFSa3JraGg2ZGdBQUFHQkpvck5KaEdmdjMyZGxySmJZZEhkREF3QUFBQlFrSjNPUzZFaXJjRTFPZE9wNTlra1EgR3dBQUFEaTFCSG1uTzJTblBQem4zdzZTTnlGdkc4S0QrQUFBQU1DeEJVY2tQcUE4TzcvVExXTjVjdU5GUkZFVEVPSURBQUFBaDBwTyBKRDNiUkhvMmdhTTBqNHZZU0h3b0tNSURBQUFBcHhDZmx1Ulk0ZG41OTVYaklsbzFzYXpYQndBQUFHQ0s1R1NUV0pWVTV6Ly9ma2crIGFPdURaWWVDQWdBQUFNd2xQZHZBUTdLK25mL1FTblphTVJITnlnQUFBSEFPNlNsN3lkRDRZUGFEZmtpaEVRanBBUUFBZ0JrRnB6SnkgN3ZYc3lDZzcyWlpDVDNRaTRVRjBBQUFBWUM3UmlhU24wa2U4Y3hzQzBkbEludWhReGdJQUFJQmppazVMY3FyVkpuZURjcGJzWk5JRCBBQUFBY0tqa2lPTW1VY21xSkR4RDR3TnZwRC9sQVFBQUFKaERmaXBuWWtVOU8zc055dEh4RURiVnNYMDcyWEpCQUFBQWdGN0JzUzRSIE9VbHBlN0tXbmVnRGVrbE9KZGxCZkFBQUFPQlE4YkdwemtkRGVzS2xndEUwbHRldjgrRjhBaHFVQVFBQVlHN0o4WVRIYzVLc2w3ajcgdUlqc2c1UHFBQUFBd0RHa0ordlBzVjdpdHRWRW8rZlpqaDN2QXpPVkJRQUFBSE9Mam5hU0QrZTJxZmhJNWRUemo4SW5ZZDhPQUFBQSB6Q1U2SXZudXZ5NGZhUjBYa1gzZzdCTUFBQUFBVEJFY0t6cmJvdWlVRHdLVm1UNDR3Z01BQUFCVHhhZlZPOXdLWDNZK25yZEJXWndQIHZwSCtaQWZ4QVFBQWdCN0pzVzhmWE1MNnplQjhncFpOdll1L1lKQlNGZ0FBQUJ3cVBKWG01SGZwQ0Y1NmUzYmVDMGFWV1JvQUFBQkEgVlhvcXFZN1hXclBqSU5sU3dXelU2MTMyRXg0V0RBSUFBTURjb2hNNXlIdlZRYnhrUnlTdmswWFJFYnQyQUFBQVlJcmNpTFFYRzcrTCBYMkZxQ2s5MjZybVg3cnpMdEhJV0FBQUFRRVY4V28zSlVYVXBtc1pxSGhlUk5TaFh5bGhNWkFFQUFFQkZjaUxwaVVUSEJpK2hmd3dkIFpwVjlvdXlzTEFBQUFJQ0s4R1NCU3lRNlVhcXpjK3I1M2p0bC96aDFMOVh4ZW5lWXlBSUFBSUE1cENkclVQNUlIQ1JzVVBiS1RhM3ggY3lheUFBQUFZRzdKOFJZYnZ3YzNMVHBoWmFtM1FibXliMmVENUFBQUFFQlJjT3pMVm5OeU5JMVZIajIzd3JNeHdwT1pWY211QUFBQSBBQUxoOGNLV2ludWtZY3ZVWktkbi9KeUpMQUFBQUtpS1QxWlZ5bVFubkFRZkdwOHdtOGJ5YW1icDZCY0FBQUJBSWpsVjkyZ3RObTZlIGpSVjkwcGJzUko4VTBRRUFBSUJlNGNtOHcydFFEZ09XYVBSY0FzT3luK1F0a0I0a0J3QUFBRnB5WXlXbktqcGRKemkwR3BUSG02MmIgdlNXaWt5VTdDQkFBQUFCRXdwT1ZzRHp2ME03Uk5YcXVxZmJzZUovWVBXWWRBQUFBSUJDZmJWRjBzcEJsenp1cXlZNDMvdlVtdXdsUCBOdStPOEFBQUFFRExPV3pJNG5sSFMzVEVla2MwZWk0ZG4vaTk4TWtSSFFBQUFOZ1RFWm5XbU95VnNVU0taYXlzU1ZsLzhqZlpUM1l5IDRRRUFBQUNReER2c1FKVG5IRDFuYzRheUk0NXBSWDA3YjhrZHlNN0pRbjRBQUFBZ1duZmo5ZXRrd1VyejVJYWhjRWV5V0tsSGVCQWQgQUFBQThEd2oydXYzNWdqUGVHc3RGQ3pKVGxUS3NwTHpLbkd6TW4wN0FBQUEwQktlaXVpMFBFTmt3alNXRkd3clNuWTg0d0lBQUFESSBsZ25hWWFpVzZEUVhDa2F5MHpveXdpdGp2VW90MmFHY0JRQUFBRm1vMG1xVnlaS2RzdXg0ZDZneWtVWGZEZ0FBQVBRSVQ4VXhvbmFaIHNsOE1uWGZFczY1WHFkZlRFQjBBQUFEUW5wRlZqMXA5d1NYaDZXMVExdVlWV1JkOU93QUFBRkJ4aXloUW1WSTk2cDdHYXAxRTZ0WFQgNk5zQkFBQ0FYdUZwOVFTL2lyOVFzTlN2azhtT2Q4ZXlVMGhmSlc4aW9tOEhBQUFBeEJHZEtOWEoybVM2anFYcWFWQnV4VXl2NHFjNyA1ZEV3QUFBQXVHckJpZHpDTmllL1NwN3NkQTFBRGNVN1ZtbFNmalYzc05La2pQZ0FBQURjcHZUMFRtRzl5ZjZaV0VkdlVQNXc3a1JsIG16S1NBd0FBZ09qWWd6KzlYaDF2QUtxclg2Y2xPOTRkekpxVXN6dm1UV1VoUEFBQUFMY3BQRjRKeXdZbjFpdXlzZk9qOWV6WTJwcFggeW5vVDl1MEFBQUFnT0x0TzRUVW1SMU5ZV1hPeXlNdzlPeUxUbXBSYmpjcUlEd0FBd0cwS1QwdDBvdWJrcnZCa1Noa3J1b092UmVGQiBkQUFBQUc1WGVGcFRXUFptUzFnbjdkbVpjZ2NwWlFFQUFOeWU0SGlpRSszVzhYcUF0VTkwTHlrZURyaWpXUm1ydFhPSGJjb0FBQUMzIEt6eXRWT2RGL09Ca2trY01FKzVnWkdUZUhXeWxPNGdPQUFEQTdRaFBKZFY1a2RvVVZwbGg0cDF0VFdYWk81cFpHUUFBQUZ5djRIZ08gWVkrZWVwVzRIY1lLVDNjN3pERGhUdXN5VnF2V050Nml3N3V5QndRQUFBQ3VRM2k4NnBBV25kRWhYcVJkd3VyZTJkZmJvQ3lTSDl6MSA2dHpaTnlNOFhyME4wUUVBQUxodTRiSHVZQmNKWnFtTzE1eDhrZ1psM2FUOFhyekRING1kQVFBQXdIVUpUaVE4M3ZtYUwrYldhazR1IE03Vm5KMnRTOXU2c1hRb1VpUTdpQXdBQWNGM0Mwem9lNGszNVF1UU5CdzA0VGVuWkVXa3ZGM3cxZDl3N3NaUlNGZ0FBd0cwSVQ5VCsgTW9yT1MrQU5zNXpDTUxWbnAzTEhiY3JUdXVNQUFBQndQWUlUQ1k4WGtFVE55VkZJMHNWd3dCZVJuVmJxM1dsS1dRQUFBTGNsUEpVVCB6clAybDFsMjlFM3QyY21FcDlWb1JDa0xBQURnZG9Rbm0rQ3U5UGxHemNrbjdkbHA5ZTFVT3FzcFpRRUFBRnlQNEdoWDJFcDdZL0t2IHhCVU9LbUZOa1IzN3hXVG5XN3lZTHlEYnFNeFpXUUFBQU5jcFBGNHdrb1VpcjRrblRIS0VZWVl2d2pPMjFoY1JSVk9JRGdBQXdQVUkgajNmcVF1UUllcUJwdGhMV1ZObXBscktpTDBJTHorUnpMZ0FBQUdDUmdtTkZSMDloMmNia1g3SmZ3bW8xSjNjenpQQkZWWnFVOVJkaiBTMW1Uam1zSEFBQ0F4UXBQYXg5ZkZvYll5ZTJEM2VEUW5oMHJQSlVtNVJkcGIwWkVkQUFBQUM1UGNqVFpPVmcyREJrREVXOUZ6YUo2IGRyeGxRZDRYa28yaGJ4b1BIQUFBQUN4YmVMSXByS2pxYzdRUzFpR3k0MzFoUGFXc2FBeWRuVHNBQUFDWEx6eXRWT2VYN0ljaDJjR2YgSW1mdTJmRytzUGVPTDhwTGR4QWRBQUNBeXhLYzhXVXIxZmtsZmordnQxOW5sbjdlWWVZdnpOdTM0M1ZjWnhaSG96SUFBTUJsQzA5ciBCOSt6N0ZaN1JpYzR5cVQyTU9NWEdNM1M2eS9rMStjWFdObVNpT2dBQUFCY2p1Um9IN0RqNWxHbHAxTENXbFRQVG04cHE1THVDTklEIEFBQndFY0pUY1lHcC9Ub0h1Y0JjUFR2U0tUdlBwN0k1QUFBQU9KbndSQjZROWZCR1c1TVhYY2JLdGlsSFg2UTNha2FqTWdBQXdQSUYgSi9NQUw5VjVscjRTbHNoQ3lsZ2k5VkxXcy9TVnN1amZBUUFBdUF6aHlScVRXNVBaV1R2TFFReEgrSUpiNDJhZTFWV0ZCd0FBQUpZbCBPVnAwcGw3L2ozbzQrSENFTDdwNjZGY3J4cHJsV0hjQUFBQTRxdkJzMWZXNm11cWNySVExcCt6MGxMSTg0Ykdub2I4ZnkrNEFBQUJnIHR1dStkKzJ2OXVvY3ZURjVidG14WDdBVkhxOXZwN2QzUjVBZUFBQ0FSUWxQNzNCU3p6VDJiTmY4WTVXeHFrMUtWbnAwdXFPLzhObWIgbFFBQUFPQ2c2NzFJZkE3V2VEM1gxL3JLRk5aUnJ2WERFUitJMXZpWi9lSmZoSFFIQUFEZ1VvVEhTM2JHUGwydlQ4ZExkY2JyL1ZGYiBWNFlUUEFBMjNmRjZka2JwcVl5aElUb0FBQURMRVo3S0JGYldyM1BVRXRZeFpHZnFHSm9YYlVXbExEbUc5UUVBQUVENU9sOXRXWGtXIHY1SXpoaG9uT1RuaDJHV3NsdkY1RDRKWHk3TVBBcUlEQUFCd1B1SEpydkcvaXRmNGFBcHI5a0RqV0dXc1E0U25wM2NIQUFBQVRpYzUgSW42cUUvWGwvdnk4dGFhd2pucDlIMDd3d0ZTT2ovQ0VoeVdEQUFBQXl4T2VWcER4SE55OFZPY2tVOWZEaVIrUThVR0orbmE4VVhRYSBsUUVBQU00dk9TSnhxdU9Wc0hTcTgyeXU2Mjl5d29ucjRjZ1Bpa2k5bEdVZmxPeEVkTklkQUFDQTB3dFBkRTEvQ1VRbkttSFphL3BSIHIrZkRpUjRZVzhwNmwzWXBLeXBua2U0QUFBQ2NWbks4OE1KTGRUelJxWmF3amlZOHd3a2VITzhCOGg0Y3I1SEppN3hJZHdBQUFFNHYgUEwycGppYzZYbmh4OU92NGNLSUhTQ1R2M001aUx6MlRUN29EQUFCd1dzbnhRb3RXcXZNc2ZnbnI1S25PS1dUSGlvNCtFVFVxWlhuQyBRN29EQUFCd1B1RTVwRmNuR3pnNnlmVjdPT0VESlZMZnVVTzZBd0FBY0g3SkVibndWT2RVc3RPYjd2d1UwaDBBQUlDbENNOUZwenFuIGtwMUllbHJycGFlbU93Z1BBQURBZk5mc2kwNTFUaWs3YzZVN3JiMDdpQTRBQU1CODErNkxUM1ZPS1R1UjlGVFRuZkhCaTBiWE9CRWQgQUFCZy9tdjF4YWM2cDVhZFE5S2Q2cXcrNlE0QUFNQjhvblB4cWM1djFtZDZJRmVTcHp0ZXN2UGw4MzJQLysvMjhQOXU5NS8zLys1VCAyamFmSDNkbFBnOEFBQUQwWGFkYko1dFgyMDdPbnVxY1EzYXM2S3lrbHU3OCtKU2RwOCtiRlo2UFQrSFJzb1BvQUFBQTlGMmo5ZXNiIHlVODJqeW93aTBwMXppRTdrZlJFRCtTVEVwM3haWlR1akFuUFZza082UTRBQUVEZjlibDZnSGZyd005RnBEcm5rcDBwNlk0V25qSFogaWNwWkt5VTlDQThBQUVEdDJxeGZuM0xpZ2QyTHQ0aFU1MXl5RTBtUDEvdzBwanRhZUw2SVg4clNzck9TM1lRSEFBQUEydGRsVzc3eSBlblYwaThuaVU1MXp5azZXN25nUDZwUHNKanM2M2JsM2hFY25PeUtrT3dBQUFOazFXZFExZVN0NVUvS3pFcDBmNm4xblBkbDhpYklUIFNZK1g3andxNFJtbFJ6Y3JQM3plck95UTdnQUFBTlJGWjJ0RXg1dVUvbWxFWi9HcHpybGx4MHQzUGh6aGVWYkM0NlU3V25hOGNoYnAgRGdBQVFINDk5a3BZM3NMZm40N29hTmxaWEtwemJ0bXgwcU9GWjJ5RytuMy83cFh3UERrMzNidHpML3ZwRHFQb0FBQUEvdlZYdjY2YiBrcU9kT2ovVWJSUWZiK0h2WWxLZEpjaU9UbmZHdDBmWnVaUGRNWFN2bk9WTlp0M0o3aWo2Um5iTFdrZ1BBQURBbit0dU5tbytwanFSIDZDdysxVm1DN0ZpN3RPbk9teU04WHNKako3UFdzaitaeFNnNkFBREE3blczY29UVFQwZDJSdUhKRHVtbWpHVWU4Slh6b050MFozekEgdGV4OGtkMWt4MXMwdUJHYWxRRUFBRHpSMFUzSlduUzhwbVFyT2xtcXMxbUM1Q3hKZGlMTHRJM0s5NTh5bzB0WlQwcCtXbnQzYUZZRyBBQURZRjUyb0tUa1NuUi9pVDJDTnFZNDltSnN5bGlNZmRqckxUbVk5ZkQ3UWorS1hzanpoOFpxVkVSNEFBTGhGeVJGenZjMzIzSTF5IDg4L25MVXAxeGhLV0xsOXRsL0pGcnhmNm45QTZNOHMySzJkSFNOaUVaMURDQXdBQWNHdWlzeFgvU0FndjFmR1NIVytKb083VjJRWnkgaGV6SWJnT3hyaUVPc2orSy92TlRhaDZkVzVidXNGa1pBQUJ1WFhpeUl5SDA5Tlh2MnovaXB6b3ZFazlnTFNyVldacnNXT0d4cGF5byBXVm1YczZycERpZWpBd0RBclVtT0p6eWo2THpKZnZscUZKeHFVL0xpZW5XV0tqdjJQMFVMejl1bnRJek55dmZpSnp0MnlhQk5kOFlPIGNjcFpBQUJ3UzZLVEhRa1JMUTlzOWVyWUNhekZpYzVTWmNkclZoN0xXYVB3L0pLOG5CV05vZHQwaDNJV0FBRGNpdkI0TzNWc1Qyd20gT2o4TG9yTmQ0aGUvWHZoL2pCVWUyMEIxcjhUbUlaQ2RxSGVIY2hZQUFOeUM1Rmpoc1R0MVJ0RjVEa1FuV2lENEx2dUpqaXhSZUpaYyB4ckxOeWxwNHhtYmx0UkllTDltSjBwMUJpUTNsTEFBQXVHYlJ5YTZsZXZyS2lzNTR5OHBYM2w2ZHhiSDBaQ2RxVmg2VThEekxmcnFqIFgrcDB4MXMyU0RrTEFBQ3VXWGpzOUZVMFptNUZ4NTZCWlJjSWVxVXJ5bGdIbXFsM0t2cWQvRWwzN2dQWmVRaGtoM0lXQUFCY3MrUlkgNGRIbEsyLzZLcElkdTFNbjZ0VWgyVG5nUDh0clZoNlhBOTdKZmpuTHU3VjZkMFFvWndFQXdIV0pUbmFpdVhmSXB4VWRyMWZuWXBxUyBMMGwydlA4NDIwWCtJbi9LV2ZkR2Vtd3BpK2tzQUFDNEZlR0p5bGZlbVBsdndmbGIrbEtkeFpldkxrbDJiTE95VG5mMEtIb3IzY25LIFdmck1MQkhLV1FBQWNMbVNZNFhIbTc2eXl3UHQ3WWY0bTVJdnBuUjFhYkpqaFVka2YvZk9vSVFuazU0bzNlSHNMQUFBdUJiUnNlR0EgTjMxbHkxYzYxZEhUVjc5azk2QlByekdaTXRZUi95TjFMRGZJbjNLV2JWaU9aQ2M2RlYyZmprNjZBd0FBbDNhZHpKWUhWc3BYUDVUcyB2RjY2NkZ5YTdHVGxySlg4T1VxaUlqczIzYkg5T3lLN2sxb0lEd0FBWEVvWXNKWGFsbVFyT3Y4WTBibVlnejZ2U1hhczhJajQ1U3c5IG9hVWxwOVc3WTVNZHh0RUJBT0FhUk9kTjlyY2tWMFVua2gyNUpPRlpYOEYvYktXYzVjbU9GUjVQZWtRSkR3QUF3TkpGSnhzejk3WWsgL3kzNVFaOFhYYjY2Wk5scGxiTUdKUzllU2V1K0lUdTJXWm4rSFFBQVdQcDFzWGRMOHQreTM2dHpkZVdyUzVZZEt6d2l1K1VzZTNhVyBUWGp1cFhhTUJPUG9BQUN3OUd1aGZqMFNuWEg2eXFZNVVhcnpLbGRTdnJwMDJiSC8wZm8vZWV6ZGVSRS8zY2xrSjVyT0doQWVBQUJZIDhQWFBwanJlUHAwZjhpZlIwYUtqZCtyb0xjbFhJVHFYTGp1dFpZTzJuR1YzOEVUbHJFSDJqNU9nZndjQUFKWW9PbHZuRjM2ZDZuaWwgS3lzN1hsUHlWWlN2cmtGMnJQQ0k3SitkNVoyZmRSK0lUaVhkb1g4SEFBQ1dKRHFWNHlEK2NXUW5PeExpcWxLZGE1QWQ3ei9mbTg3eSAwcDJxOUZpcFlmOE9BQUNjKzVvWFRWN1pmVHFSNk5oTnlWbFQ4a1dMenJYSWpsZk9Xc2x1M1ZJdkQxd1hSQ2ZhcXN6K0hRQUFPUGN2IDl2cVgrM0dmem50RGRQNzllZk5TbmF3aGVYc05EOXcxSlR0Uk9jc3JhWG1pVTIxV0ZxRmhHUUFBemlNNlh1a3FPK0RUNjlQUnFZNDkgMGR3ZTlDblhJRHpySy8xbTBPbU8zYjFqUzFwcjZadk1FcUZoR1FBQXppTTZyY1dCbnVqOHV5QTZIOWNxT3RjbU8xNjZNOHJJYUwwNiAzYkdOeTFhQTdvU0daUUFBV0pib3RCcVNJOUd4NVN1dlQ4ZnIxYmtLcmpIWldabHZqR2k3c3Bmd1ZFVkhROE15QUFDY1FuUmFEY2svIGpPeG8wUmxsUjR1T25iNnlmVHBYSXp6cksvN21FUG1UN3RoeGRMdUQ1ODZSSFc4cWl3TkRBUURnWE5jMnJ5SFpIZ1ZoRTUzeHBiY2wgK2VxV0I5NlM3SGhHYk1mUmJjUHluU002Vm5haTA5RkZhRmdHQUlEalhzTXFEY2xhZEx6cHE2czlEdUpXWlNjYVIzK1gvWkpXdEduNSBUdmJMV1Y2Nkk3TGZzSXp3QUFEQUhLTGpsYSttaU01UEpUcXZSblN1c2svbkZtVEhDby9JYnNOeXE2VGx2UjJsT3lLNzUyY2hQQUFBIE1KZm9qSkl6UlhUK05xS2p5MWMzaytwY3UrelliNXlzZjhjMkxrZnlrL1h1Q01JREFBQXppNDVOZExJenI2enM2RU0rYmZucWFzZk0gYjFGMmJMcGpEMHZ6U2xyMlBDMXZNcXN5blFVQUFEQlZkTGFKNk9nTnlhUG8vSS9VKzNSdVNuUnVRWGFzOEd6VSsxZEtlRm9KVDBWNCByUGd3a2c0QUFGTkZSNWV1c2pPdi9wMkl6czN0MDdsbDJSSEo5Kys4eVc1NUtwT2VRZHJwemxvWVNRY0FnT21pbzh0WGtlallzbFhVIHB6T0t6cHZFNTE1ZHZmQ3NiL0FiU21TM2YwZkVQME1ya3h3ck81SDRNSklPQUFDOW9wTXREWXg2ZEZwOU9qclIyZHlTNk55YTdOaHYgTGx2Uzh0SWRMK214c3RNNlB3dmhBUUNBeXJWSlQxNTVpWTZXbmY5Uk42OVB4eDd3K1dFazUyWkU1eFpscDlLdzNKSWVUM1pXaWV5dyBnd2NBQUtKZnZIWFpTbCtQb3NNOS95MStvbU1ia25XZmptMUl2cGxlblZ1VkhTczhVY055ci9RTWlmVDg1ZzdoQVFBQVIzUjArYXExIEhYbVVHNXZvL0MzNWh1U2JhMGhHZG5hRlIxdTE3ZC9wbFI1UGN1ekhRWGdBQUJBZGtYeHBZTFJMeDRxT2QrN1ZXTDd5bGdiZVZKOE8gc3VQL1oyOE9sSjFXdWlNSUR3QUFvaVB4MHNBM1IzU3M1RVNpWTA4eTk0NkR1RW5SdVhYWnNkOThka0pMSE9ucEZSMVBaQkFlQUFCRSBaMXNRSFR0aVhsMGM2RW5PellvT3NoT2ZueVd5MzJ6c2lVOXJ5YUQrV0FnUEFBQ2k0eTBOZkpkNE83THQwL2tmSlRvL3BYYVMrYzMyIDZpQTdzZkJvMjE0bG90TXFjV1VUV2dnUEFNRHRpbzZkdkhwUm9oUDE2SGdOeVQ4VDBibnBobVJrcHkwOG0rRHZlS0xUYWxKdXlRdkMgQXdCd2U2S1RIUU9oVHpIUGR1bDRmVHFSNk55ODhDQTd2dkI0WStsWjQvSnFvdXdnUEFBQWlJNVh1ckxOeUZwMmVzNjhJdGxCZGxMaCBrYzl2bXRYbk4xSlZlaUxaV1NFOEFBQ0lqdFI3ZFBUTFNxSno4eVBteUU3L042a280WkZFZHFyYmsxc2dQQUFBMXkwNmVwZU90eDM1IGIwZDB4cEtXVG5UR1BoMmI2Tno4aURteU0vMGJ0aW83Y3FEc0lEd0FBTmNyT2w2aWt6VWoyejRkUFhrMUhpZkJMaDFrNStCdldHOGsgL1NQNCs5bGVuVjRRSGdDQTZ4ZWRiR2xnSmpyZUtlYnMwa0YyWmhjZUVmOUlDR204RCtFQkFMZ2QwUmxGcEtjWk9UdkZuRjA2eU03SiBoRWNmMWphSDFDQThBQUNYTHpsYWRQUU9uUS9aM1l6ODYxTmV4a1JubEp2Ly9yenBwWUd0d3owUkhXVG5hTUtqMDUzM2pvK3htdmpEIGcvQUFBRnltNkV4SmRIU3EweElkbGdZaU95Y1RubzhaNUVZYTM2d0lEd0RBTWtWSHR6bDRSMEM4aUw4d2NCU2Qvell2N1lpNVBzV2MgcFlISXpsbUZaeTZwc2I4aDZMZnZFQjRBZ01XSlR1WDBjcDNvL0NPN2lZNHVYVVZMQTcwUmMwUUgyVm04OFBRSzBTZzY0NUVVV25nRSA2UUVBV0lUb3ZEZEV4enNDSXB1ODB0dVIzNFdsZ2NqT0JRdlBOcmpwUDdzMy8yWXdra1BLQXdCd1B0R3h5d0x0SGgxZHVvb21yLzV4IFJFZjM2V3lFWFRySXpnVUt6N1pEZ1BUNzdwVG8ySlFINFFFQU9JL29qRXYrOUZiazZBaUk3QVR6ckVjSDBVRjJMa0o0dG8wZkhQMEQgMUlvcWJicUQ4QUFBbkY1MDlMTEE2UGlIdjQzZ1JLTGpuWGZGZG1SazV5S0ZKL3M0a2V4NHQ3V1JIb1FIQU9BMG9tT1hCYjdKbngwNiAwVGxYbnVqb2hZRzZSd2ZSUVhhdVNuZ2lrZGtVeE9jM2R3Z1BBTUJSSlVla3ZTelFqcGFQRTFmMlFFOTdxS2ZlbzZPbnJ1alJRWGF1IFNuanNWdWJvVmlsdElUd0FBS2NSbmZkRWRFYVo4ZnB6c3JPdUVCMWs1eXFGSjB0MVd0TGo3Vmk0RTBiVEFRRG1FcDFzV1dCTGRQNG4gRUoxL0pEN1VrMlprWk9mcWhNZWJzb3FrSnBJZWZiT2o2VXhxQVFBY0pqcFJvdk9haUU0MFd1NU5YSGxIUUh6SWJwS1A2Q0E3RnlrOCAzamZ2TnZuQmFrbU9kN3NUSnJVQUFPWVNuWTlFZFBRT0hadm82SDRkbmVqOGt2cFpWNGdPc25PeHd2UHUvRDByT3Exa3B5VkFOQzREIEFQUkpqa2pjaU93dEM3VEhQMFE5T2xaMFhoQWRaT2VXaEtlMVo2ZjNGaTBpcEk4SEFDQVhIZHVmayszUThZNS84TWJMLzFhaW8wZkwgc3gwNmlBNnljMVhDVXlsajlhWTdudlRvLzF2NmVBQUFmTkhKSnE3R3JjaWpzSGpIUCtpU2xkMmhZN2NpandMMUlaeDFoZXhjdWZDcyBBdEh4ZHV6WTIwZnllaVE5OVBFQUFNUy9iRlltcmtiUjhSS2Rmd2VpWTNmbzJFUUgwVUYycmxwNFJQeEpyVW81NjBOMmE4a2ZnZlJZIGNhS1BCd0I0SHQ1OWFjdFdyWW1yTE5IUkUxZFdkTjRRSFdRSDRka1ZIVTk2dG9IMGZDVFNzMGwrb09qakFZQmJGcDJvYkRVbU9tTi8gVG5UOGc3MWxvK1hSc2tEN3ZBL0l6dFVMai8yR2IyMVcvaWpjSXVHeGZUejZSc29EQU5jcU9TTHRzcFVXSFc5WjROK0I2T2orSER0YSB6ckpBWkFmaFVlL3pVcDVzQjgrSCtXM2t2U0ErWGgrUFY5WVNwQWNBcmtoMFdtV3JVWEs4aVNzdjBSbmYva2Y4d3p4WkZvanNRRUY0IFdodVdyZXhVRTU3ZnR3Y2pQTnRFZWhBZUFMZ0cwYW1VcmFLSnE3OEQyZmxIL1A0Y2R1Z2dPeEQ4TUlxUmk5Wm9ldFNrM0VwNnJQaXMgUDI5YkpUMTJXa3VRSGdDNDRPZFY3NWZGckd6bDdkRFJMNzJ4Y3QyZnd3NGRaQWVTSDg3S2FIcHJNc3VUbkhmemcrZlZqdGRHYkVoNSBBT0NTUlNmNkpiRlZ0dnJSRUoyb2JEVk9YRVdubGlNNnlBNDR3aU95UDVwZW1jeDZsLzEwNXoyUkladnk2QkgxbFpEeUFNQmxTVTcwIFhGa3RXMFdpODQvc0h2dVFIZjNBYURteUF4T0VwN0owc0NVN1dXbnJNUkNlc2FSRnlnTUFsNUxtaU9SbEsrOThLMXUyK2p0SmMzVFogU3UvUGlmcHpFQjFrQjRyQ00wcFA5QnRMVnM3U3Y4bThteDlNVDM0ZWxQVGNDU2tQQUZ4dW1yTXh6NEhlK1ZZL0hOR3h2VGsyemZIMiA1K2cwWnhOSUdDQTcwQkNlYmZHSE8ycFc5bVFua2g0dFBLUThBSEJKYWM3V1BBZStLZEg1cFVRbksxdDVUY2hSMllyK0hHUUhadnl0IFJhVGV1QnlsTzFwMjdHMzg4eWZ4ZTNsSWVRQmd5V2xPMUlTY2JVT09FaDJ2Q1ZtTGp0ZjdTTmtLMllFWmZyaTl4dVhla3RhYitTMUggdjdUU00vYnkzQXNwRHdCY1JwclRVN2I2cDVIbS9EQnBUblMrRmFLRDdNQ1JoYWVWOGtTeTg1cklqcFdlUjFJZUFGaG9tdU0xSVh1SCBlT3B0eUhaUllGUzJhbTFEOXNwV2lBNnlBMGNRbm15ZnhOWThBV1RTWTI5ZUw0K1g4Z3lmMGtQS0F3Q25sSnpvbHpxZDVyVEd5cTNrIFVMWkNkbUNoUC93MjRaSGlrNEc5ZWJMejVvalBvL2dOeklPd2ZSa0Fqdk5jNTVXczlLU1ZiVUwyeWxZL2xOUjRrdVB0enFGc2hlekEgQWxPZWpkUjZlS3JwamhXZmJHSnJMR3RwNGJFbnFTTTlBREJIbXVQMTVuaExBcjMrbkgrQ05PZW41R2RiV2RFUlJBZlpnZk1KanpnLyBqSzBlbnFyc2FPbDVVaC9yWHZ6eUZxVXRBSmhUY3FwcGppMWIvZE9RbkZGMFhvU3lGYklERnlFOFc5bHRHTTZhK0ZvcHowdERmR3hwIFN3dlAyTXNqUWdNekFQUkpqb2hmc29wK1VkTzdjMzRtb3FNbEoydENwbXlGN01EQ255d3F4MHkwUnRKN3BPZExJRHk2cERVSXBTMEEgeUorN3ZEVGFHeWUzazFaNmQ0NG5PcDdrMkNaa081aEIyUXJaZ1F0S2VTU1JudXhvaWFpYzllS0lqeGFrMzZXdEJ5ZmxzYjA4WG1rTCA2UUc0N1RTbnAyU1ZwVGsyMFlsS1Zsa1RNbVVyWkFjdVRIaTJKa25abXQ5V05zNXZUZG1VVnF1djUrbnpZendvOFZuTGJtbkxUbTFwIDZVRjRBRzVYY3V3R1pPL3dUcTgzUisvUCtTZEljbXpKS2pyeTRjTzVUNGdPc2dNTGYwSnBwVHpaV1ZydnNydDQ4Q1c1L2Y3enI0SDAgNk5MV1J2eXBMVkllZ051U0hKSDJVVGRlQTdKTmN6elJHVi8vR2FRNWRzclVIby9Ea2tCa0IyNDA1ZkhLV1ZaMnh0ZS9Pc0l6bHJiVyBTbmpvNXdHNExkR0orbkt5U2RFWDJkK2I0NVd0ZnNoKzg3RlhzcXBzUWliTlFYYmdobEtlcUt6MTBraDZ0Qmc5T1NuUC9hZnNyQ1hmIHpZUDBBRnhYbWxNNTVpRXJXWGxOeUpua2VDV3JWbThPb29Qc3dBMm1QTmxPbmhmelc5ZUwrUTFxVEhtMDlEd282Zm1RM1lXRUE5SUQgY0hPU1V5MVoyVFFua3B5ZjZ0L3FYNzZxYVE2aWcrd0FLYzllV2FzbE8xcDRSdWw1Tk5LamhRZnBBYmg4d2ZFa3gvc2x5bHNNNktVNSB0amZIM25TU0U1V3NkQU15YVE2eUE2UTg0VzlmbFpUbmwvbXRURC94ZkRIQzh5aTdwYTBwMG9QNEFDd3J4UkhwMis4VjdjelJrMVkvIHhKK3VzdnR5ZmdXU1E1b0R5QTVQVXFXVXg1YTAzb1BmeUY0YzJSbHZYNVgwUEFVcFQ0LzBDR2tQd0VWSlRqUktycyt6YXFVNVZuS2UgelhPUG5iS0tKSWMwQjlrQlVwNmR0NGRBZXJ4OVBKSG8vRksvZlgzNUZKOHZKdVY1Vk1KVGxSNUJlZ0F1U25KYUpTdXZOOGRLanUzTCBzWktUalpPVDVpQTd3Qk5ZbXZMMGxyVittU2V5YitybEtEMWZUTkx6Z1BRQVhLVGtlR1BrbnVTMEdwQi9CcUpUN2N2UjIrSDEvUkxTIEhFQjJvSnJ5UlAwOGJ4S1h0ZlNUbWhhZXIwN0sweXM5SzlsZlRvajBBTXd2T0NMNzVaK04xQ2FzM3B6bmhHZnhlM04rR1BIUkUxYlIgS0htMVpJWG9BQmNFQ0w4bjlNdFJMRWJaR1BmbHJEK0ZaSlNVUnlVdVg0ellqS0pqYjE4bVNJOWRURGlZKzd2aSt4eGc5aFRIUzN1OSBoYVRlQUVQVW0rTkpUdFI4L0tvK2g1V2NqZmc5T1VnT2NCR0EwdmVGYlJBZWxQRGNLZUhKcE9lTGtwNnZuZEpqeDlYdG1Wdlo5SmIzIHRRQkFudUtJNUh0eW9qRnlyeS9IcGprL2t4U24wbnhzMHh4S1ZvRHN3RkZTbnBWSlZrYnB1UzhrUFYrY3hLY2xQZDY0dXQzR1BFaCsgRElXUTlnQ1VVaHlSdUIvSEsxZTl5MjdmM3BqRWpNbU1saHg5KzJIK1RBOHplRXNCS1ZrQnNnTm5rUjVkUXJvckpEMlBTZEx6SlpDZSA4ZTgvT2tuUFd2enlWdGJYUTlvRENFNDd4Y242Y1ZvcktMeVNsWGZUZjhkT1dFV1NZNXVQa1J4QWR1Q28zeXV0MHBZblBROG02WGtxIFNJK2QzSHFVZURIaFd2SytIdEllUUhKcUtVNUxjcndKVExzejU5bVJtNWJrakIvN1hmeFJja3BXZ096QTJhWEhTM3EwaEZTbEp4TWUgbmZJOFN0N1QwOXZNalBnQUtjNXVpaEtOa0VkOU9jK3kzNS96MDVFZ2U3eU1UWEphKzNKSWN3RFpnWk4vNzJUOVBNTkU2ZkhTSG04LyB6Mk1nUGQ3SStsMGdQYTB5Rno4bmNDMkNJNFVVSnpzVHowdHlmZ1dKem5ORGNuUlBqaDBqcHk4SGtCMVlmTW9qUmlnT2xaNHZRY0x6IFZFaDY3cDJrcDFMaXlucDYrSm1CU3hFY2tYZ0JvRzA2ZnBmMndiOTJVL3B6NGZZcmtSeWI1SGdUVnBTc0FObUJxNVNleDBSNnZnVFMgWTVPZXg2TDBlTTNNMmM0ZXhBZVdMRGdpZnBtcUo4WHBrWnhmaWR6MFNJNGRhNC9Pc0VKMEFObUJxNWFlU0g2ZUpraVBMbkY1KzNwMCAyb1A0d0NVSmpqZ0pqbmVVUTZWVUZVbk9MMGR1bmh1Q1UrM0oyVGhmRDVJRHlBNWN2ZlJFNHZQRmtaK25pZEtUbGJpeUVYYkVCMDRwIE55SnhTY2VXZld5S3MxR0NFYVU0dHVuNHhVak1jL0RTQ2s3VWo0UGtBTElEU0U4Z1BWN2FrNG1QSnp4Uk03TW5QZXRFZW16aUkxSnIgYnVibkRPWVduRmFaYW1xcEtrdHk3UHRlQ2luT20reHVXa1p5QU5rQnBNZElqN2VWMlV0N0hoM0o4VjUvVEtUSFcxSllGWjhwUjFUdyBjd2N0dVpraU9LMEZnRzlKaXVOSmpuMzlaVUtLZytRQXNnTklUME42ZXRPZXgwQjR2TW10Ykd6ZGxyZ3k4VmxKKzRnSzVBZW15STNJIC9pUlZWS2JTQ1lvOXltR0s1RVNOeHA3Z1JOdU9rUnhBZG9EdnUwN3B1WE9rcDFMbWltNlBEZW14YVk4VkgrOGcwbXJpVXptdWdwL04gNnhPYlRHNGtTVzhxWmFwcVAwN1VrMU1WbkZhSzQrM0lRWElBMlFHKy94THBXVFdreDB0N0l2RjVESVRIbHJhOEV0ZTl0TXRjUGVLRCAvTnlHMkV5Um02cmdWRXBWclo2Y2x1QWNtdUpza1J4QWRnRGEwck9hTWUzeHlsMlBRY29UaVUrcnpPV05zUjhxUHdqUVpZdU52ZGozIENJNTMwcmh0T1BaS1ZhOUtWS0tTbFgzZmkvazNWbkM4TGNmUnVWWHN5UUZrQjZCRGVrVGk4N2VzOU53NTBtUEZ4MnR1Zmt6ZVo0V24gTXNuVkVwK2VrdGNoNCszOGJCOVBhbHBpVXhHY0xMM0pCTWRMY2Q0Y3dmSEtWbEdUc1Qyanl0dUw4Mjd1V3lRNFNBNGdPd0F6U1k5MyA4S2czdmg2VnVUejV5VzRQenN1b3hPV1Z1UTZSSDVINUo3MzR1YTlmaEZ2TC9DU1FHbkZFb0ZXZTJwajB4Q1k0VWFrcUtsbEYwbU1UIG5LaE1GVTFVYlFLQlEzSUEyUUU0a3ZSRWg0KzJ4Q2RLZlI0YXdoTTFNM3ZTTTBWK3BwYThLc25QNm9hZUc3WUgvdDJla3BRRVVoT04gaDA5SmNGcVM4K3FrTkZIL3paUm00MDB4eFVGeUFOa0JtT243TkV0N290NGUyOSt6RHNRblNuNDgyZkZTbm50SGZPN041MjgxT0I5UyA4b29Fc2ZKenYxckljOHZjRjh0dDhmM2J3c3ZvYUlhVzNIZ054bFp1SXNsNURVVG5wZmp5VmZaTFZGR1ppaFFIa0IyQUswaDdNdkdKIFNsNWUrdVBKanRmSUhQWDNlRnViNTBoOU1nSHE3UUZhU2hLMG5lSHZWOHRSbFo2YmpmVDMzclFTbkt3WEp4T2Q2SDNleDNpWGVKcXEgSlRuMk1VRnlBTmtCT0ZQYUV6VTFqNEpnUldJdGVibkxTc3hENHhaSno0TWpWVjdKNjA3aUptZHZ0SDBRdjQ4cGVpem1rcURxbjA5NSBmdGxPL0xOZXFXa0pUYVdwZUZ1UW14N0JhU1U1VVJuTFMyMWFQVGlrT0lEc0FGeHAydE9UK0hqaVk4dGVsWmYzeGNTbjFlQ2NIVjFoIFU1OUsraE5KejZyeHVGYWtjK3B6ekxiejdaYlVTSERCM3NvMHVhbjAza1J5MDVLYzEwYWk4OVloTmphOThTYXBQaHh4SThVQlpBZmcgUXRNZVNhUm5WUkNmT3lNaTl4S1h2dTZUOTdYa0oycHVidlg0M0FYU002Y0FWVVJtYWtyVWs4UkVGOXdwaS9zeXNka1d4Q1piOHZmaCBTTWRiUVhUZUFwbXBpazJVM2xRVEhGSWNRSFlBcmlUdGtZbmljeWR4ejQzWGtIemZrSitzcWJsWGV1N00vYTRtUHozOVA5SklmYVpNIGlmVTBDTGYyMnZRSXpxWW9PQzI1cWFRNFdibXE5MmJUb1EvbnBiM1AyZEkvSnFvQTJRRzRnYlNuUjN5R0lQWEorbjRxQXRScVpyNlggOWhqN0lmSXp4N2g3cFUrb1JUYnh0RTFFcUNvNVdiOU5iM29USlRudlR1TFNFcDczSksySlVodHZQRHhLYjFyajRxUTRnT3dBSUQ1aCBuMCtVL2tRQ0ZNblBXdktSZGZ2djdRaDdkcXZLVDFWOHZNZEtwRjRheTVLZFNxa3BTM21tQ3M2SCtNdjlNc0dKa3B5cThMd0hTVTFGIGJENmMreHdsVlJYQlFYSUEyUUZBZkZ6eGlaS2ZvVU4rSXBtNVQvN091aUE4VVptcjFlc3paYU56MWd1MUtpWThGVmxwbFY2bU5CZFggU2xTZTRId0VRaEtKUy9iMlIxRnNyTnhzcGI4OGhlQUFUL2dBL0J4MGlVOHIrV2tsUUo2d3JJczNyNFIyVjB4Nk11R3BqTFpYRzc1WCB5YitWUUhncVBUVlp5dU10OXRzbUNVNUZkTEpFNXlNUm52ZEVpRnBTOHhIYzU1YllJRGdBeUE3QTdPSWpRWnBSRWFCVytlc3VFWnNwIGdqTkZlTHl2S1JPZFZqbXNtdXhrcGFkV1AwOTBUTU1VMGNtRUoyb016cHFHSTZuNWtIeTB2VGU1UVhBQWtCMkFXY1JIcEwrc1UwbC8gV2pMVUl6S3QvcDFLV2FzNnNSVjlqYXRDdWhPVm9Ib3YrRDBialQzWnFZalBoN1Q3YUZwU2t6VVNSd2VIUmttV0lEZ0F5QTdBc1g5VyBLdE5KMVNRazZ3RWFPb1dsVjI1YS9UdFR2NTVXdXROS2RUSVJhQjNua1BYcFRKR2ZUZVAxVGVOMVQ5eGFKYW5LNkQyQ0E0RHNBSnd0IDllbVZuMVZER0lhaW5IaC9mdGY1NzF1eTBrcDFvcDZmbHV4a2sxTlowdUVkekxrcDNENEtNaFJKUzFSK2F0M3ZhditSU0Z5YVFtNEEga0IyQVJhVSttZnhrOHRCcS9CMGFyN2QyNjB6WnZTTlNLMlBaOTltdjJWNjBiYzlOMUxkVGJWS3U3dFNwL25sRlpGcEMwOXR2UTJrSyBBTmtCdURyNWtZSllEQWZLVWVzb2libkd6dWRxVUo1ei9IeGJsS2xONFg1VVpLYWEyZ2pwRFFDeUEzQUw4bE1SSUpINWR0NE14YjlYIFdTcTRsRDA3SXZWaklsb2ZmMDZaNmRsVWpOd0FJRHNBVi85ejF6cHh2RmVJcENBdVU4N0dhbjNlSWZrN0xkbVJRRGdpcVpnaVBaVy8gSnpLOXI0YlVCZ0RaQVlDSkFqUzNFTFZlRjhrUEFlMUpuMXBFQXRLU0RDa2tLcjJ2VjE1V3BRYTVBVUIyQUdEaXorZnFTRkxVZWwrUCBYTFUrUmlRUGg0ckdkc0xIcnI2TzJBQWdPd0N3Z0ovWm5oNmhYbkdxeWs5RmRLcVNVVTFRdGgxdnoxRnFRbW9Ba0IwQXVCQVJhdjNiIFZlZkhYRTI0WDl2T3Qzdmw0NUNtWUtRRzRNTDV2d0lNQURhOWUyNnFaLzIwQUFBQUFFbEZUa1N1UW1DQyIKICAgICAgIGlkPSJpbWFnZTM5ODAiIC8+PGcKICAgICAgIGlkPSJnMzk4MiI+PGNpcmNsZQogICAgICAgICBzb2RpcG9kaTpyeT0iMjc1LjkwOSIKICAgICAgICAgc29kaXBvZGk6cng9IjI3NS45MDkiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIyNzguOTMzOTkiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIyNzkuNTE1MDEiCiAgICAgICAgIGN4PSIyNzkuNTE1MDEiCiAgICAgICAgIGN5PSIyNzguOTMzOTkiCiAgICAgICAgIHI9IjI3NS45MDkiCiAgICAgICAgIGlkPSJjaXJjbGUzOTg0IgogICAgICAgICBkPSJtIDU1NS40MjQwMSwyNzguOTMzOTkgYyAwLDE1Mi4zODAzMyAtMTIzLjUyODY2LDI3NS45MDkgLTI3NS45MDksMjc1LjkwOSAtMTUyLjM4MDMzLDAgLTI3NS45MDg5OTE5LC0xMjMuNTI4NjcgLTI3NS45MDg5OTE5LC0yNzUuOTA5IDAsLTE1Mi4zODAzMyAxMjMuNTI4NjYxOSwtMjc1LjkwODk5NjEgMjc1LjkwODk5MTksLTI3NS45MDg5OTYxIDE1Mi4zODAzNCwwIDI3NS45MDksMTIzLjUyODY2NjEgMjc1LjkwOSwyNzUuOTA4OTk2MSB6IiAvPjwvZz48L2c+PGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaWQ9IkZyYW1lX2NvcHlfMV8iCiAgICAgZGlzcGxheT0iaW5saW5lIiAvPjwvZz48ZwogICBzdHlsZT0iZGlzcGxheTpub25lIgogICBpZD0iRnJhbWVfY29weV8yIgogICBkaXNwbGF5PSJub25lIgogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NjUuNDU3MjYsLTMxNC4xMTY0KSI+PGNpcmNsZQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZGlzcGxheTppbmxpbmUiCiAgICAgc29kaXBvZGk6cnk9IjI3NS45MDkiCiAgICAgc29kaXBvZGk6cng9IjI3NS45MDkiCiAgICAgc29kaXBvZGk6Y3k9IjI3OC45MzM5OSIKICAgICBzb2RpcG9kaTpjeD0iMjc5LjUxNTAxIgogICAgIGRpc3BsYXk9ImlubGluZSIKICAgICBjeD0iMjc5LjUxNTAxIgogICAgIGN5PSIyNzguOTMzOTkiCiAgICAgcj0iMjc1LjkwOSIKICAgICBpZD0iY2lyY2xlMzk4OCIKICAgICBkPSJtIDU1NS40MjQwMSwyNzguOTMzOTkgYyAwLDE1Mi4zODAzMyAtMTIzLjUyODY2LDI3NS45MDkgLTI3NS45MDksMjc1LjkwOSAtMTUyLjM4MDMzLDAgLTI3NS45MDg5OTE5LC0xMjMuNTI4NjcgLTI3NS45MDg5OTE5LC0yNzUuOTA5IDAsLTE1Mi4zODAzMyAxMjMuNTI4NjYxOSwtMjc1LjkwODk5NjEgMjc1LjkwODk5MTksLTI3NS45MDg5OTYxIDE1Mi4zODAzNCwwIDI3NS45MDksMTIzLjUyODY2NjEgMjc1LjkwOSwyNzUuOTA4OTk2MSB6IiAvPjxnCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlkPSJGcmFtZV9jb3B5XzJfMV8iCiAgICAgZGlzcGxheT0iaW5saW5lIiAvPjwvZz48ZwogICBpZD0iRm9yZWdyb3VuZF9HcmlkXzFfIgogICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMzMzY5MiwwLDAsMC4zMzM2OTIsLTg4Ny4zOTg1NywtMTg1LjUxODg5KSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzgxOSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gNy4yNSwyNS4zNzUgNzkuNjYwNjA2LDAgQyA5MC42MjUsMjUuMzc1IDEwOC43NSw0MS44NjYwNzggMTA4Ljc1LDQ3LjA5MTkxOCBsIDAsNTAuNzgzMDgyIC0xMDEuNSwwIDAsLTcyLjUgeiIKICAgaWQ9InJlY3QyOTY2IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIgLz48cGF0aAogICBkPSJtIDguMTU2MjUsMjkuOTA2MjUgMCw3MC42ODc1IDk5LjY4NzUsMCAwLC00OS44NzUgYyAwLC0wLjc4MDcgLTEuMDAzNDQsLTIuODA1MTI5IC0yLjcxODc1LC01LjAzMTI1IC0xLjcxNTMxLC0yLjIyNjEyMSAtNC4wNTgwNywtNC43NjA4IC02LjUzMTI1LC03LjEyNSAtMi40NzMxODMsLTIuMzY0MiAtNS4wNzIzNjgsLTQuNTYwODY1IC03LjI1LC02LjE1NjI1IC0xLjA4ODgxNiwtMC43OTc2OTMgLTIuMDc5ODk1LC0xLjQ0NDIxIC0yLjg3NSwtMS44NzUgLTAuNzk1MTA1LC0wLjQzMDc5IC0xLjQzNDY2NiwtMC42MjUgLTEuNTYyNSwtMC42MjUgbCAtNzguNzUsMCB6IgogICBpZD0icGF0aDM4NDkiCiAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MTg5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gNy4yNSAyOSBMIDcuMjUgMTAxLjUgTCAxMDguNzUgMTAxLjUgTCAxMDguNzUgNTAuNzE4NzUgQyAxMDguNzUgNDUuNDkyOTEgOTAuNjIwNjQ0IDI5IDg2LjkwNjI1IDI5IEwgNy4yNSAyOSB6ICIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC45MDkzMTA3IgogICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpvZmZzZXQiCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMuNjI1KSIgLz48cGF0aAogICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpvZmZzZXQiCiAgIGlua3NjYXBlOnJhZGl1cz0iLTEuODAyMzkwNSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gNy4yNSAyOSBMIDcuMjUgMTAxLjUgTCAxMDguNzUgMTAxLjUgTCAxMDguNzUgNTAuNzE4NzUgQyAxMDguNzUgNDUuNDkyOTEgOTAuNjIwNjQ0IDI5IDg2LjkwNjI1IDI5IEwgNy4yNSAyOSB6ICIKICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDM4NDcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICBpZD0icGF0aDM4NDUiCiAgIGQ9Im0gOS4wNjI1LDMwLjgxMjUgMCw2OC44NzUgOTcuODc1LDAgMCwtNDguOTY4NzUgYyAwLC0wLjI2NDMyNSAtMC44MjYzLC0yLjMyNzg3MiAtMi41LC00LjUgLTEuNjczNywtMi4xNzIxMjggLTQuMDIwMjUsLTQuNjkwNjQ5IC02LjQ2ODc1LC03LjAzMTI1IC0yLjQ0ODQ5NSwtMi4zNDA2MDEgLTUuMDIyMTU5LC00LjQ5OTAxNCAtNy4xNTYyNSwtNi4wNjI1IC0xLjA2NzA0NSwtMC43ODE3NDMgLTIuMDA5OTkzLC0xLjQxMTU2MiAtMi43NSwtMS44MTI1IC0wLjc0MDAwNywtMC40MDA5MzggLTEuMzU4ODc2LC0wLjUgLTEuMTU2MjUsLTAuNSBsIC03Ny44NDM3NSwwIHoiCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMuNjI1KSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjQwMjExNjM2O3N0cm9rZTpub25lIgogICBkPSJtIDEyLjY4NzUsMjkuOTA2MjUgMCwwLjQ1MzEyNSAwLDYyLjk4NDM3NSAwLjQ1MzEyNSwwIDkwLjYyNTAwNSwwIDAuNDUzMTIsMCAwLC0wLjQ1MzEyNSAwLC01MC4yOTY4NzUgLTAuNDUzMTIsMCAwLDUwLjI5Njg3NSAtOTAuNjI1MDA1LDAgMCwtNjIuNTMxMjUgNzkuMjk2ODc1LDAgMCwtMC40NTMxMjUgLTc5Ljc1LDAgeiIKICAgaWQ9InJlY3Q0MDMyIgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjYyIgLz48cGF0aAogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICBpZD0icGF0aDM3OTciCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTA2MjUsMCwwLDAuOTA2MjUsMCwtMy42MjUpIgogICBkPSJNIDk3LjQxNDIxNCwzMiBDIDEwMS40MTQyMSwzMiAxMDMuMzE0OTksNDguMDM5MjUgMTA0LDUzLjYzNTE4NCAxMDcuODYwMDcsNTEuMTcxNDE1IDEyMCw1MiAxMjAsNTYgbCAwLDAgQyAxMjAsNTAuMjQwOTU5IDEwMy4xMDM1MSwzMiA5Ny40MTQyMTQsMzIgeiIKICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM4MDUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjM4MDcpIgogICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzODEzKSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM0Nik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gODcsMjUuMzc1IGMgMy42MjUsMCA0LjU4NjIyMywxMy43MzQ1NTEgNS4yMDcwMTMsMTguODA1ODY3IEMgOTUuNzA1MjAyLDQxLjk0ODA3NiAxMDguNzUsNDMuNSAxMDguNzUsNDcuMTI1IGwgMCwtMC4wMjgzMiBDIDEwOC43NSw0MS44Nzc1NDkgOTIuMTU1OTI4LDI1LjM3NSA4NywyNS4zNzUgeiIKICAgaWQ9InJlY3QzNzY4IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOm9mZnNldCIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC44NDIwMDc4MiIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gOTYgMzIgQyAxMDAgMzIgMTAxLjA2NDk5IDQ3LjE1NDA2NiAxMDEuNzUgNTIuNzUgQyAxMDUuNjAwOTggNTAuMjkyMDMyIDExOS45MzI1MiA1MS45ODg5MjUgMTIwIDU1Ljk2ODc1IEMgMTIwIDUwLjIwOTcwOSAxMDEuNjg5MyAzMiA5NiAzMiB6ICIKICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM4NTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICBpZD0icGF0aDM4NTUiCiAgIGQ9Im0gOTkuMjUsMzQuMTU2MjUgYyAwLjcxNzU0OCwxLjYxNjY2OCAxLjI1NzQ5LDMuNzAzMjg1IDEuNjg3NSw1Ljk2ODc1IDAuNzkwNzgsNC4xNjYxMjYgMS4xNzMxMyw4LjU4MjU3MiAxLjUsMTEuNDY4NzUgMS4wNjY1LC0wLjQwNjA4MyAyLjI3NjQ1LC0wLjY4NjEzOCAzLjcxODc1LC0wLjc4MTI1IDEuOTU5NTUsLTAuMTI5MjIxIDQuMTU1MjgsLTAuMDAzNSA2LjI1LDAuMzEyNSAxLjk5MzMzLDAuMzAwNzM4IDMuODc1MTcsMC43ODY1ODYgNS4zNzUsMS40Njg3NSAtMC40MTgwMiwtMC43NDM0MjEgLTAuODA1NjgsLTEuNDc1MjY5IC0xLjQwNjI1LC0yLjMxMjUgLTEuNzY3MiwtMi40NjM1OTUgLTQuMjI2MjcsLTUuMjY1Njk2IC02Ljg0Mzc1LC03Ljg3NSAtMi42MTc0OCwtMi42MDkzMDQgLTUuNDExMzEsLTUuMDIxOTUxIC03Ljg3NSwtNi43ODEyNSAtMC44Nzc5OCwtMC42MjY5NTYgLTEuNjM0OTEsLTEuMDQyNDEgLTIuNDA2MjUsLTEuNDY4NzUgeiIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLjE4MTI1LC0zLjg5Njg3NSkiIC8+PHBhdGgKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLjE4MTI1LC0zLjg5Njg3NSkiCiAgIGQ9Im0gOTkuMjUsMzQuMTU2MjUgYyAwLjcxNzc3NCwxLjYxNzE3NSAxLjI1NzQ2LDMuNzAzMTM3IDEuNjg3NSw1Ljk2ODc1IDAuNzg4NzEsNC4xNTUyMzggMS4xNzM0NSw4LjU0OTM3OSAxLjUsMTEuNDM3NSAxLjA2MjY3LC0wLjQwMDM1OCAyLjI4Njg2LC0wLjY1NTU3NSAzLjcxODc1LC0wLjc1IDEuOTU5ODgsLTAuMTI5MjQ0IDQuMTU1MDIsLTAuMDM0ODIgNi4yNSwwLjI4MTI1IDEuOTgyNDIsMC4yOTkwOTIgMy44NDc1LDAuODIzNjYyIDUuMzQzNzUsMS41IC0wLjQxNzQ4LC0wLjc0MjE0MSAtMC43NzU2NCwtMS40NzY5NTUgLTEuMzc1LC0yLjMxMjUgLTEuNzY3MDIsLTIuNDYzMzUgLTQuMjI2MzksLTUuMjM0NTY5IC02Ljg0Mzc1LC03Ljg0Mzc1IC0yLjYxNzM2LC0yLjYwOTE4MSAtNS40MTE1NiwtNS4wNTMzNzUgLTcuODc1LC02LjgxMjUgLTAuODc3ODksLTAuNjI2ODk0IC0xLjYzNTAzLC0xLjA0MjUyNSAtMi40MDYyNSwtMS40Njg3NSB6IgogICBpZD0icGF0aDUxNTEiCiAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MTU5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gOTYgMzIgQyAxMDAgMzIgMTAxLjA2NDk5IDQ3LjE1NDA2NiAxMDEuNzUgNTIuNzUgQyAxMDUuNjAwOTggNTAuMjkyMDMyIDExOS45MzI1MiA1MS45ODg5MjUgMTIwIDU1Ljk2ODc1IEMgMTIwIDUwLjIwOTcwOSAxMDEuNjg5MyAzMiA5NiAzMiB6ICIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC44NDU4NzEzMyIKICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6b2Zmc2V0IiAvPjxwYXRoCiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gNjkuNzgxMjUsODQuMjgxMjUgMCwwLjQ1MzEyNSAwLDguMTU2MjUgMC40NTMxMjUsMCAwLC04LjE1NjI1IDMzLjUzMTI1NSwwIDAsLTAuNDUzMTI1IC0zMy41MzEyNTUsMCAtMC40NTMxMjUsMCB6IgogICBpZD0icmVjdDQwNDEiCiAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPjxyZWN0CiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIGlkPSJyZWN0NDA0NiIKICAgd2lkdGg9IjAuNDUzMTI1IgogICBoZWlnaHQ9IjguMTU2MjUiCiAgIHg9Ijg0LjI4MTI1IgogICB5PSI4NC43MzQzNzUiIC8+PHJlY3QKICAgeT0iODguODEyNSIKICAgeD0iLTg0LjI4MTI1IgogICBoZWlnaHQ9IjAuNDUzMTI1IgogICB3aWR0aD0iMTQuMDQ2ODc1IgogICBpZD0icmVjdDQwNDgiCiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8+PHJlY3QKICAgeT0iODQuNzM0Mzc1IgogICB4PSI5NC4yNSIKICAgaGVpZ2h0PSI4LjE1NjI1IgogICB3aWR0aD0iMC40NTMxMjUiCiAgIGlkPSJyZWN0NDA1MCIKICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC40MDIxMTYzNjtzdHJva2U6bm9uZSIgLz48cGF0aAogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC4wOTA2MjUsMC4wOTA2MjUpIgogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjQwMjExNjM2O3N0cm9rZTpub25lIgogICBkPSJtIDUyLjc4MTI1LDMzLjI4MTI1IC02LDMuNDY4NzUgYyAtMC4xMTUzNDgsLTAuMDgzNDkgLTAuMjQ1NjY0LC0wLjEyNSAtMC40MDYyNSwtMC4xMjUgLTAuMzEyNDQ2LDAgLTAuNTc2NDE0LDAuMjAzNTE5IC0wLjY4NzUsMC40Njg3NSBsIC03LjE4NzUsMCBDIDM4LjM4NjA5OSwzNi44MzQ3MzkgMzguMTUwODA5LDM2LjYyNSAzNy44NDM3NSwzNi42MjUgYyAtMC4zMDcwNTgsMCAtMC41NDIzNDYsMC4yMDk3NCAtMC42NTYyNSwwLjQ2ODc1IGwgLTcuMTI1LDAgLTAuMDMxMjUsMCAtMi44MTI1LC0xLjY1NjI1IGMgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjUzMTI1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IGwgMS43NSwxIC0xMi41OTM3NSwwIGMgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjQ2ODc1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCBsIDEyLjc4MTI1LDAgLTEuOTM3NSwxLjA5Mzc1IGMgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjUzMTI1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgbCAyLjkzNzUsLTEuNzUgMC4wMzEyNSwwIDcsMCBjIDAuMDc3MDYsMC4xNjQ1MTkgMC4yMTA5MjEsMC4yNzM0OTUgMC4zNzUsMC4zNDM3NSBsIDAsMy41OTM3NSBjIC0yLjc3OTA2MiwwLjE1MDY1OCAtNSwyLjQ2NTEyMiAtNSw1LjI4MTI1IDAsMi44MTYxMyAyLjIyMDkzOCw1LjEzMDU5MiA1LDUuMjgxMjUgbCAwLDQuMzc1IGMgLTIuNzg3MzMsMC4xNDIwNCAtNS4wMzEyNSwyLjQ1OTA4NyAtNS4wMzEyNSw1LjI4MTI1IDAsMi44MjIxNjUgMi4yNDM5Miw1LjEzOTIxIDUuMDMxMjUsNS4yODEyNSBsIDAsNC40MDYyNSBjIC0yLjc4NzMzLDAuMTQyMDQgLTUuMDMxMjUsMi40NTkwODcgLTUuMDMxMjUsNS4yODEyNSAwLDIuODIyMTY1IDIuMjQ0MzksNS4xMDg0MyA1LjAzMTI1LDUuMjUgbCAwLDMuNjUzMTI1IGMgLTAuMTc0MDg4LDAuMDczOTYgLTAuMjk3MTE0LDAuMjM1MTk3IC0wLjM3NSwwLjQwNjI1IGwgLTguODc1LDAgMS45Mzc1LC0xLjEyNSBjIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODUsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjUgYyAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgLTAuMDA2NCwtMC4wMTM2IC0wLjAxNzY1LC0wLjAyNDg2IC0wLjAzMTI1LC0wLjAzMTI1IC0wLjAxMDIxLC0wLjAwMjUgLTAuMDIxMDQsLTAuMDAyNSAtMC4wMzEyNSwwIC0wLjAxMDIxLC0wLjAwMjUgLTAuMDIxMDQsLTAuMDAyNSAtMC4wMzEyNSwwIGwgLTIuODc1LDEuNjU2MjUgYyAtMC4wMTM2LDAuMDA2NCAtMC4wMjQ4NSwwLjAxNzY1IC0wLjAzMTI1LDAuMDMxMjUgbCAtMC4wMzEyNSwwLjA2MjUgLTEwLjAzMTI1LDAgYyAtMC4wMTAyMSwtMC4wMDI1IC0wLjAyMTA0LC0wLjAwMjUgLTAuMDMxMjUsMCAtMC4wMTM2LDAuMDA2NCAtMC4wMjQ4NSwwLjAxNzY1IC0wLjAzMTI1LDAuMDMxMjUgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgbCAwLDAuNDM3NSBjIC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IDAuMDA2NCwwLjAxMzYgMC4wMTc2NSwwLjAyNDg2IDAuMDMxMjUsMC4wMzEyNSAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgbCAxMC4xMjUsMCAwLjAzMTI1LDAgMi44MTI1LDEuNjU2MjUgYyAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgMC4wMTAyMSwwLjAwMjUgMC4wMjEwNCwwLjAwMjUgMC4wMzEyNSwwIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODUsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjUgYyAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgLTAuMDA2NCwtMC4wMTM2IC0wLjAxNzY1LC0wLjAyNDg2IC0wLjAzMTI1LC0wLjAzMTI1IGwgLTEuNzUsLTEuMDMxMjUgOC42ODc1LDAgYyAwLjExMzkwMSwwLjI1OTAxMSAwLjM0OTE5MiwwLjQ2ODc1IDAuNjU2MjUsMC40Njg3NSAwLjMwNzA1OSwwIDAuNTQyMzQ2LC0wLjIwOTc0IDAuNjU2MjUsLTAuNDY4NzUgbCAyNC4wMzEyNSwwIGMgMC4wMTAyMSwwLjAwMjUgMC4wMjEwNCwwLjAwMjUgMC4wMzEyNSwwIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODYsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjQzNzUgMCwtOC44NjU2MjUgQyA2Mi43NzI4MTIsNzcuMjQyNjc0IDYyLjkyMzc5NSw3Ny4wOTAwNzIgNjMsNzYuOTEyNSBsIDMuOTY4NzUsMCBjIDAuMTUwNjY2LDIuNzc4NjMyIDIuNDY1NjAyLDQuOTY4NzUgNS4yODEyNSw0Ljk2ODc1IDIuODE2MTE0LDAgNS4wOTk3NzgsLTIuMTkwODg3IDUuMjUsLTQuOTY4NzUgbCA0LjA2MjUsMCBjIDAuMTA1MzEyLDAuMjc1ODc2IDAuMzY5NjIyLDAuNDY4NzUgMC42ODc1LDAuNDY4NzUgMC40MTE4NDEsMCAwLjc1LC0wLjM0MTEwOSAwLjc1LC0wLjc1IDAsLTAuMzEwNDU5IC0wLjIwMDgwNCwtMC41NzcwNDEgLTAuNDY4NzUsLTAuNjg3NSBsIDAsLTEzLjIxNTYyNSBDIDgyLjc5ODcxNiw2Mi42MTc0MjEgODMsNjIuMzUwODQ4IDgzLDYyLjA0MDYyNSBjIDAsLTAuMzEwMjIyIC0wLjIwMTI4NCwtMC41NzY3OTcgLTAuNDY4NzUsLTAuNjg3NSBsIDAsLTE0LjA2MjUgQyA4Mi43OTIzMDksNDcuMTc2OTkyIDgzLDQ2LjkzOTI0OSA4Myw0Ni42MzQzNzUgYyAwLC0wLjMwNDg3MyAtMC4yMDc2OTEsLTAuNTQyNjE4IC0wLjQ2ODc1LC0wLjY1NjI1IGwgMCwtOC4zNTMxMjUgMCwtMC40Njg3NSBjIDAuMDAyNSwtMC4wMTAyMSAwLjAwMjUsLTAuMDIxMDQgMCwtMC4wMzEyNSAtMC4wMDY0LC0wLjAxMzYgLTAuMDE3NjUsLTAuMDI0ODYgLTAuMDMxMjUsLTAuMDMxMjUgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgbCAtMjcuNjU2MjUsMCBDIDU0LjY5ODU5OSwzNi44MzQ3MzkgNTQuNDYzMzA5LDM2LjYyNSA1NC4xNTYyNSwzNi42MjUgYyAtMC40MTE4NDEsMCAtMC43NSwwLjM0MTExIC0wLjc1LDAuNzUgMCwwLjQwODg5MSAwLjMzODE1OSwwLjc1IDAuNzUsMC43NSAwLjMwMjYzNCwwIDAuNTQxNDYxLC0wLjE4MDA1MSAwLjY1NjI1LC0wLjQzNzUgbCAyNy4xMjUsMCAwLDguMjkwNjI1IGMgLTAuMTY1NzQ1LDAuMDc3MDIgLTAuMjczNDgsMC4yMTIxODQgLTAuMzQzNzUsMC4zNzUgbCAtNC4wMzEyNSwwIGMgLTAuMTUwNjU4LC0yLjc3OTA2MiAtMi40NjUxMiwtNSAtNS4yODEyNSwtNSAtMi44MTYxMjgsMCAtNS4xMzA1OTIsMi4yMjA5MzggLTUuMjgxMjUsNSBsIC00LDAgYyAtMC4xMDUzMTIsLTAuMjc1ODc2IC0wLjM2OTYyMSwtMC40Njg3NSAtMC42ODc1LC0wLjQ2ODc1IC0wLjQxMTg0MSwwIC0wLjc1LDAuMzQxMTEgLTAuNzUsMC43NSAwLDAuMzAwNjUzIDAuMTc3NTksMC41NDE5OCAwLjQzNzUsMC42NTYyNSBsIDAsMTQuMDYyNSBjIC0wLjI2Njg3NiwwLjExMTQ5NSAtMC40Mzc1LDAuMzgxODE2IC0wLjQzNzUsMC42ODc1IDAsMC4zMDU2ODUgMC4xNzA2MjQsMC41NzYwMDUgMC40Mzc1LDAuNjg3NSBsIDAsMTMuMjE1NjI1IGMgLTAuMjY2ODc2LDAuMTExNDk1IC0wLjQzNzUsMC4zODE4MTYgLTAuNDM3NSwwLjY4NzUgMCwwLjMwNTY4NSAwLjE3MDYyNCwwLjU3NjAwNSAwLjQzNzUsMC42ODc1IGwgMCw4LjgwMzEyNSAtMjMuNSwwIGMgLTAuMDc3ODksLTAuMTcxMDUzIC0wLjIwMDkxMSwtMC4zMzIyODggLTAuMzc1LC0wLjQwNjI1IGwgMCwtMy42NTMxMjUgYyAyLjc2NTY3LC0wLjE2MzgxMiA0Ljk2ODc1LC0yLjQ0MzE5MyA0Ljk2ODc1LC01LjI1IDAsLTIuODA2ODA1IC0yLjIwMjYwNywtNS4xMTY5NjggLTQuOTY4NzUsLTUuMjgxMjUgbCAwLC00LjQwNjI1IGMgMi43NjYxNDMsLTAuMTY0MjgyIDQuOTY4NzUsLTIuNDc0NDQzIDQuOTY4NzUsLTUuMjgxMjUgMCwtMi44MDY4MDUgLTIuMjAyNjA3LC01LjExNjk2OCAtNC45Njg3NSwtNS4yODEyNSBsIDAsLTQuMzc1IGMgMi43NzkwNjMsLTAuMTUwNjU4IDUsLTIuNDY1MTIgNSwtNS4yODEyNSAwLC0yLjgxNjEyOCAtMi4yMjA5MzcsLTUuMTMwNTkyIC01LC01LjI4MTI1IGwgMCwtMy41OTM3NSBjIDAuMTY0MDc4LC0wLjA3MDI2IDAuMjk3OTQyLC0wLjE3OTIzIDAuMzc1LC0wLjM0Mzc1IGwgNy4xODc1LDAgYyAwLjExMTg4OSwwLjI2NDY2NiAwLjM3OTU1NywwLjQzNzUgMC42ODc1LDAuNDM3NSAwLjQxMTg0MSwwIDAuNzE4NzUsLTAuMzQ0NzU0IDAuNzE4NzUsLTAuNzUgMCwtMC4wMzQyOCAwLjAwNzUsLTAuMDcxOTkgMCwtMC4wOTM3NSBsIDUuOTY4NzUsLTMuNSBjIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODYsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgMC4wMDI1LC0wLjAxMDIxIDAuMDAyNSwtMC4wMjEwNCAwLC0wLjAzMTI1IEwgNTIuODc1LDMzLjMxMjUgYyAtMC4wMDY0LC0wLjAxMzYgLTAuMDE3NjUsLTAuMDI0ODYgLTAuMDMxMjUsLTAuMDMxMjUgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgeiBtIC0xNC45Mzc1LDguOTA2MjUgYyAxLjE5MzQ4MywwIDIuMjY1NzAyLDAuNDg0MDYyIDMuMDkzNzUsMS4yMTg3NSBsIC0zLjA5Mzc1LDMuMTI1IC0zLjEyNSwtMy4xMjUgYyAwLjgyODY2NiwtMC43MzQxOTkgMS45MzE1MTksLTEuMjE4NzUgMy4xMjUsLTEuMjE4NzUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IGMgMS4xOTM0ODMsMCAyLjI2NTcwMiwwLjQ4NDA2MiAzLjA5Mzc1LDEuMjE4NzUgbCAtMy4wOTM3NSwzLjEyNSAtMy4xMjUsLTMuMTI1IGMgMC44Mjg2NjYsLTAuNzM0MTk5IDEuOTMxNTE5LC0xLjIxODc1IDMuMTI1LC0xLjIxODc1IHogbSAtMzcuOTM3NSwxLjg2NTYyNSAzLjEyNSwzLjEyNSBMIDM0LjM0Mzc1LDUwIEMgMzMuNjA5MDYyLDQ5LjE3MTk1MiAzMy4xMjUsNDguMDk5NzMzIDMzLjEyNSw0Ni45MDYyNSBjIDAsLTEuMTkzNDgxIDAuNDg0NTUxLC0yLjI5NjMzNCAxLjIxODc1LC0zLjEyNSB6IG0gNi45Njg3NSwwIGMgMC43MzQxOTksMC44Mjg2NjYgMS4yMTg3NSwxLjkzMTUxOSAxLjIxODc1LDMuMTI1IDAsMS4xOTM0ODMgLTAuNDg0MDYyLDIuMjY1NzAyIC0xLjIxODc1LDMuMDkzNzUgbCAtMy4wOTM3NSwtMy4wOTM3NSAzLjA5Mzc1LC0zLjEyNSB6IG0gMjcuNDY4NzUsLTAuMjcxODc1IDMuMTI1LDMuMTI1IC0zLjEyNSwzLjA5Mzc1IGMgLTAuNzM0Njg4LC0wLjgyODA0OCAtMS4yMTg3NSwtMS45MDAyNjcgLTEuMjE4NzUsLTMuMDkzNzUgMCwtMS4xOTM0ODEgMC40ODQ1NTEsLTIuMjk2MzM0IDEuMjE4NzUsLTMuMTI1IHogbSA2Ljk2ODc1LDAgYyAwLjczNDE5OSwwLjgyODY2NiAxLjIxODc1LDEuOTMxNTE5IDEuMjE4NzUsMy4xMjUgMCwxLjE5MzQ4MyAtMC40ODQwNjIsMi4yNjU3MDIgLTEuMjE4NzUsMy4wOTM3NSBsIC0zLjA5Mzc1LC0zLjA5Mzc1IDMuMDkzNzUsLTMuMTI1IHogbSAtMTIuNzUsMy40MDYyNSA0LDAgYyAwLjE1MDY1OCwyLjc3OTA2MyAyLjQ2NTEyMiw1IDUuMjgxMjUsNSAyLjgxNjEzLDAgNS4xMzA1OTIsLTIuMjIwOTM3IDUuMjgxMjUsLTUgbCA0LjAzMTI1LDAgYyAwLjA3MDI3LDAuMTYyODE1IDAuMTc4MDA0LDAuMjk3OTg1IDAuMzQzNzUsMC4zNzUgbCAwLDE0LjA2MjUgYyAtMC4xNjkyODMsMC4wNzA4MyAtMC4yNzAxNzEsMC4yMDkzOTUgLTAuMzQzNzUsMC4zNzUgbCAtNC4wNjI1LDAgYyAwLjAwMTYsLTAuMDUyOTkgMCwtMC4xMDI4ODIgMCwtMC4xNTYyNSAwLC0yLjkxMzI2IC0yLjM2Nzk5LC01LjI4MTI1IC01LjI4MTI1LC01LjI4MTI1IC0yLjkxMzI2LDAgLTUuMjgxMjUsMi4zNjc5OSAtNS4yODEyNSw1LjI4MTI1IDAsMC4wNTI2NCAtMi42MmUtNCwwLjEwMzE0MiAwLDAuMTU2MjUgbCAtMy45Njg3NSwwIGMgLTAuMDc1MzYsLTAuMTcyMjQgLTAuMjM3MzU3LC0wLjI3MTQzMyAtMC40MDYyNSwtMC4zNDM3NSBsIDAsLTE0LjA5Mzc1IGMgMC4xNzI2NDgsLTAuMDc3NzQgMC4zMzIxNDQsLTAuMjAyMjEzIDAuNDA2MjUsLTAuMzc1IHogTSAzNy44NDM3NSw0Ny4yODEyNSA0MC45Mzc1LDUwLjM3NSBjIC0wLjgyODA0OCwwLjczNDY4OCAtMS45MDAyNjcsMS4yMTg3NSAtMy4wOTM3NSwxLjIxODc1IC0xLjE5MzQ4MSwwIC0yLjI5NjMzNCwtMC40ODQ1NTEgLTMuMTI1LC0xLjIxODc1IGwgMy4xMjUsLTMuMDkzNzUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IDMuMDkzNzUsMy4wOTM3NSBjIC0wLjgyODA0OCwwLjczNDY4OCAtMS45MDAyNjcsMS4yMTg3NSAtMy4wOTM3NSwxLjIxODc1IC0xLjE5MzQ4MSwwIC0yLjI5NjMzNCwtMC40ODQ1NTEgLTMuMTI1LC0xLjIxODc1IGwgMy4xMjUsLTMuMDkzNzUgeiBNIDM3LjgxMjUsNTcuMTU2MjUgYyAxLjE3OTY3NiwwIDIuMjM4MjI3LDAuNDY4Mjg5IDMuMDYyNSwxLjE4NzUgbCAtMy4wMzEyNSwzLjA2MjUgLTMuMDYyNSwtMy4wNjI1IGMgMC44MjIxODYsLTAuNzExODEzIDEuODU5ODUsLTEuMTg3NSAzLjAzMTI1LC0xLjE4NzUgeiBNIDcyLjI1LDU2Ljg4NDM3NSBjIDEuMTc5Njc2LDAgMi4yMzgyMjcsMC40NjgyODkgMy4wNjI1LDEuMTg3NSBsIC0zLjAzMTI1LDMuMDYyNSAtMy4wNjI1LC0zLjA2MjUgYyAwLjgyMjE4NiwtMC43MTE4MTMgMS44NTk4NSwtMS4xODc1IDMuMDMxMjUsLTEuMTg3NSB6IG0gLTM3Ljg3NSwxLjgwMzEyNSAzLjA5Mzc1LDMuMDkzNzUgLTMuMTg3NSwzLjE1NjI1IGMgLTAuMDA0NSwtMC4wMDUyIC0wLjAyNjgyLDAuMDA1MiAtMC4wMzEyNSwwIC0wLjcwOTM0NCwtMC44Mjc3NTQgLTEuMTI1LC0xLjkyMDYzOCAtMS4xMjUsLTMuMDkzNzUgMCwtMS4yMTY1ODYgMC40OTEyMTQsLTIuMzIyNjE3IDEuMjUsLTMuMTU2MjUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IDMuMDkzNzUsMy4wOTM3NSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTIgLTAuMDI2ODIsMC4wMDUyIC0wLjAzMTI1LDAgLTAuNzA5MzQ0LC0wLjgyNzc1NCAtMS4xMjUsLTEuOTIwNjM4IC0xLjEyNSwtMy4wOTM3NSAwLC0xLjIxNjU4NiAwLjQ5MTIxNCwtMi4zMjI2MTcgMS4yNSwtMy4xNTYyNSB6IE0gNDEuMjUsNTguNzE4NzUgYyAwLjc1MTU1MiwwLjgzMTgzNSAxLjI1LDEuOTE2MzY2IDEuMjUsMy4xMjUgMCwxLjE2NjQwMyAtMC40ODA0MjgsMi4yMDk5OCAtMS4xODc1LDMuMDMxMjUgTCAzOC4yMTg3NSw2MS43ODEyNSA0MS4yNSw1OC43MTg3NSB6IG0gMzQuNDM3NSwtMC4yNzE4NzUgYyAwLjc1MTU1MiwwLjgzMTgzNSAxLjI1LDEuOTE2MzY2IDEuMjUsMy4xMjUgMCwxLjE2NjQwMyAtMC40ODA0MjgsMi4yMDk5OCAtMS4xODc1LDMuMDMxMjUgbCAtMy4wOTM3NSwtMy4wOTM3NSAzLjAzMTI1LC0zLjA2MjUgeiBNIDM3Ljg0Mzc1LDYyLjEyNSBsIDMuMTI1LDMuMTU2MjUgYyAtMC44Mjk2ODEsMC43Nzk4MDEgLTEuOTMwNTYzLDEuMjgxMjUgLTMuMTU2MjUsMS4yODEyNSAtMS4yMTU4MjksMCAtMi4zMjQ1NzMsLTAuNDU1MDc2IC0zLjE1NjI1LC0xLjIxODc1IDAuMDAyNSwtMC4wMTAyMSAwLjAwMjUsLTAuMDIxMDQgMCwtMC4wMzEyNSBsIDMuMTg3NSwtMy4xODc1IHogbSAzNC40Mzc1LC0wLjI3MTg3NSAzLjEyNSwzLjE1NjI1IGMgLTAuODI5NjgxLDAuNzc5ODAxIC0xLjkzMDU2MywxLjI4MTI1IC0zLjE1NjI1LDEuMjgxMjUgLTEuMjE1ODI5LDAgLTIuMzI0NTczLC0wLjQ1NTA3NiAtMy4xNTYyNSwtMS4yMTg3NSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAzLjE4NzUsLTMuMTg3NSB6IE0gNjMsNjIuMzIxODc1IGwgNC4wMzEyNSwwIGMgMC4zNjcyNjgsMi41NTU3ODIgMi41NjIzNzUsNC41MzEyNSA1LjIxODc1LDQuNTMxMjUgMi42NTU5ODgsMCA0Ljg1MDAxNSwtMS45NzU2MyA1LjIxODc1LC00LjUzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCBsIDQuMDkzNzUsMCBjIDAuMDcyMzMsMC4xNjc1OTQgMC4xNzAwODMsMC4zMzEwMyAwLjM0Mzc1LDAuNDA2MjUgbCAwLDEzLjIxNTYyNSBjIC0wLjE2OTYzMywwLjA3MDcgLTAuMjcwMTY5LDAuMjA5MjUgLTAuMzQzNzUsMC4zNzUgbCAtNC4wOTM3NSwwIEMgNzcuMzM0MDk3LDczLjU1Mzc2NCA3NS4wNTU4OTYsNzEuMzUgNzIuMjUsNzEuMzUgYyAtMi44MTU2NDgsMCAtNS4xMzA1ODQsMi4xOTAxMTkgLTUuMjgxMjUsNC45Njg3NSBsIC0zLjk2ODc1LDAgQyA2Mi45MjQ2NCw3Ni4xNDY1MSA2Mi43NjI2NDMsNzYuMDQ3MzE3IDYyLjU5Mzc1LDc1Ljk3NSBsIDAsLTEzLjI0Njg3NSBDIDYyLjc3MjgxMiw2Mi42NTIwNDkgNjIuOTIzNzk1LDYyLjQ5OTQ0NyA2Myw2Mi4zMjE4NzUgeiBNIDM3LjgxMjUsNzIuMTI1IGMgMS4xODA3NjgsMCAyLjIzODg3MiwwLjQzODczMyAzLjA2MjUsMS4xNTYyNSBsIC0zLjAzMTI1LDMuMDYyNSAtMy4wNjI1LC0zLjA2MjUgQyAzNS42MDI3ODIsNzIuNTcxMTM0IDM2LjY0LDcyLjEyNSAzNy44MTI1LDcyLjEyNSB6IE0gNzIuMjUsNzEuOTQzNzUgYyAxLjE4MDc2OCwwIDIuMjM4ODcyLDAuNDM4NzMzIDMuMDYyNSwxLjE1NjI1IEwgNzIuMjgxMjUsNzYuMTYyNSA2OS4yMTg3NSw3My4xIEMgNzAuMDQwMjgyLDcyLjM4OTg4NCA3MS4wNzc1LDcxLjk0Mzc1IDcyLjI1LDcxLjk0Mzc1IHogbSAtMzcuODc1LDEuNzEyNSAzLjA5Mzc1LDMuMDYyNSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTEgLTAuMDI2ODIsMC4wMDUxIC0wLjAzMTI1LDAgLTAuNzA5Mjc2LC0wLjgyMDc0OCAtMS4xMjUsLTEuODg5Mzg4IC0xLjEyNSwtMy4wNjI1IDAsLTEuMjE2NTg2IDAuNDkxMjE0LC0yLjMyMjYxNyAxLjI1LC0zLjE1NjI1IHogbSA2Ljg3NSwwIGMgMC43NTEwNiwwLjgzMjQ1OSAxLjI1LDEuOTQ3NjE1IDEuMjUsMy4xNTYyNSAwLDEuMTY2NDAzIC0wLjQ3OTk0NiwyLjE3OTMzNyAtMS4xODc1LDMgTCAzOC4yMTg3NSw3Ni43MTg3NSA0MS4yNSw3My42NTYyNSB6IG0gMjcuNTYyNSwtMC4xODEyNSAzLjA5Mzc1LDMuMDYyNSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTEgLTAuMDI2ODIsMC4wMDUxIC0wLjAzMTI1LDAgLTAuNzA5Mjc2LC0wLjgyMDc0OCAtMS4xMjUsLTEuODg5Mzg4IC0xLjEyNSwtMy4wNjI1IDAsLTEuMjE2NTg2IDAuNDkxMjE0LC0yLjMyMjYxNyAxLjI1LC0zLjE1NjI1IHogbSA2Ljg3NSwwIGMgMC43NTEwNiwwLjgzMjQ1OSAxLjI1LDEuOTQ3NjE1IDEuMjUsMy4xNTYyNSAwLDEuMTY2NDAzIC0wLjQ3OTk0NiwyLjE3OTMzNyAtMS4xODc1LDMgTCA3Mi42NTYyNSw3Ni41Mzc1IDc1LjY4NzUsNzMuNDc1IHogbSAtMzcuODQzNzUsMy42MTg3NSAzLjEyNSwzLjEyNSBDIDQwLjEzOTA2OSw4MC45OTg1NTEgMzkuMDM4MTg3LDgxLjUgMzcuODEyNSw4MS41IGMgLTEuMjE5MzAyLDAgLTIuMzIzODc5LC0wLjQ1ODc5MiAtMy4xNTYyNSwtMS4yMTg3NSAtMC4wMDUsLTAuMDA0NiAwLjAwNSwtMC4wMjY2NiAwLC0wLjAzMTI1IGwgMy4xODc1LC0zLjE1NjI1IHogbSAzNC40Mzc1LC0wLjE4MTI1IDMuMTI1LDMuMTI1IGMgLTAuODI5NjgxLDAuNzc5ODAxIC0xLjkzMDU2MywxLjI4MTI1IC0zLjE1NjI1LDEuMjgxMjUgLTEuMjE5MzAyLDAgLTIuMzIzODc5LC0wLjQ1ODc5MiAtMy4xNTYyNSwtMS4yMTg3NSAtMC4wMDUsLTAuMDA0NiAwLjAwNSwtMC4wMjY2NiAwLC0wLjAzMTI1IGwgMy4xODc1LC0zLjE1NjI1IHoiCiAgIGlkPSJwYXRoNTM5NiIKICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3NjY3NjY2Njc3NzY2NzY2Njc3NjY3NzY2Njc2Njc3NzY2NjY2Njc2Njc2Njc2NjY2Njc2Njc3NzY2NjY2Nzc2Njc3NjY2Njc3NzY2NzY2Njc2Njc3NjY2NjY3NjY3NzY2NzY2NzY2Njc3NjY3Nzc2NjY2Njc2Njc3NjY3NjY3NjY2NjY3NjY3NjY3NjY2Njc3NjY3NzY2Nzc2NjY2NjY2NjY2NjY2Njc2Njc2NjY2NjY3NjY3NjY2NjY3NjY2NjY2Nzc3NjY2NjY2Njc2NjY2NzY2NjY2NjY2NjY2NjY2Njc3NjY2Njc3NjY3NjY2Njc2NjY2Njc2NjY2Njc2NjY2Njc2NjY2NjY2NzY2NjY2NjY2NjY2NjY2NjY2Njc3NjY3NjY2NjY2Nzc2Njc2NjY2Njc3NjY2Njc3NjYyIgLz48cmVjdAogICBzdHlsZT0ib3BhY2l0eTowLjg3MTI4NzA5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1MzExKSIKICAgaWQ9InJlY3Q1Mjg3IgogICB3aWR0aD0iMTAiCiAgIGhlaWdodD0iMSIKICAgeD0iMTciCiAgIHk9IjExOCIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NTE1NjI1LDAsMCwwLjkwNjI1LC0xLjA0MjE4NzUsLTMuNjI1KSIKICAgcnk9IjAuNSIgLz48cGF0aAogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIKICAgaWQ9InBhdGg0MTk3IgogICBkPSJtIDcuMjUsMjUuMzc1IDc5LjY2MDYwNiwwIEMgOTAuNjI1LDI1LjM3NSAxMDguNzUsNDEuODY2MDc4IDEwOC43NSw0Ny4wOTE5MTggbCAwLDUwLjc4MzA4MiAtMTAxLjUsMCAwLC03Mi41IHoiCiAgIHN0eWxlPSJvcGFjaXR5OjAuMDM0NjUzNDk7ZmlsbDp1cmwoI3BhdHRlcm41MTQ5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz48cGF0aAogICBzdHlsZT0ib3BhY2l0eTowLjg3MTI4NzA5O2ZpbGw6IzAwNjE5YTtmaWxsLW9wYWNpdHk6MC44NDY1NjA4NTtzdHJva2U6bm9uZSIKICAgZD0ibSAxMDIuNjYxMTMsODUuODM4ODY3IGMgLTAuMDk3MSwwLjA0NTMgLTAuMTg2LDAuMDk2MzEgLTAuMjgzMiwwLjE0MTYwMiAtMC43MTY2MywwLjMzOSAtMS40MzU4OCwwLjY4MTc0OSAtMi4xMjQwMiwxLjA3NjE3MiAtMC4yNTU2NTcsMC4xNTcwOCAtMC40MjkwMzIsMC4yNTk4MDMgLTAuNjc5NjkxLDAuNDI0ODA0IC0wLjQyNjA5MiwwLjI4MDQ5NCAtMC44MzMzNDIsMC41OTg4NDEgLTEuMjE3Nzc0LDAuOTM0NTcxIC0wLjIzMzM2OCwwLjIxMzM4NSAtMC4yODk1MzgsMC4yNTg5ODggLTAuNTA5NzY1LDAuNDgxNDQ1IC0wLjI2NjAzOSwwLjI2ODczIC0wLjUxMjQ4NSwwLjUzOTc2MiAtMC43NjQ2NDksMC44MjEyODkgLTAuMDY0MzQsMC4wNzc3NiAtMC4xMzQwOTgsMC4xNDg2NTIgLTAuMTk4MjQyLDAuMjI2NTYyIDAuMDA3MywtMC4xMTI1MDEgMC4wMjA3NSwtMC4yMjc0NDEgMC4wMjgzNywtMC4zMzk4NDMgMC4wNDU4NiwtMC42MDMwMSAwLjA5NDI2LC0xLjE4NzkwNCAwLjE5ODI0MiwtMS43ODQxOCAwLjAxNjc2LC0wLjA4NTE5IDAuMDM4NDIsLTAuMTcwMDAzIDAuMDU2NjQsLTAuMjU0ODgzIDAuMDM2ODgsLTAuMTcxNzcgMC4wODk3MiwtMC4zNDE4MjggMC4xNDE2MDEsLTAuNTA5NzY1IC0wLjExODE4NCwtMC4xMDM2NDMgLTAuMjUyODI2LC0wLjE5Nzk1MyAtMC41MDk3NjYsLTAuNDgxNDQ2IC0wLjAyMTc1LDAuMDkzMjIgLTAuMDM5NDIsMC4xODkwMTcgLTAuMDU2NjQsMC4yODMyMDMgLTAuMDE3MzEsMC4wOTQyMSAtMC4wNDE0MiwwLjE4ODY0NSAtMC4wNTY2NCwwLjI4MzIwNCAtMC4wOTQwNSwwLjYwNTYxIC0wLjEzOTcxNiwxLjIwMjY0OCAtMC4xOTgyNDIsMS44MTI1IC0wLjAzNjcsMC40MDQ4NzYgLTAuMDgxNDcsMC44MTI0NzEgLTAuMTEzMjgxLDEuMjE3NzczIC0wLjAzMzA4LDAuNDAyNzI4IC0wLjAyNjkyLDAuNDA2NTggMC4xNjk5MjIsMS4wNDc4NTIgMC4wMTAzMywwLjAzMzUzIDAuMDQ5OTMsMC4wMjUxOSAwLjA4NDkxLDAuMDI4MzYgMC4xMjk4NTcsMC4wMTM2OCAwLjE1MDksLTAuMDA2MyAwLjI1NDg4MywtMC4wNTY2NCAwLjAyMzkzLC0wLjAyMjExIDAuMDYyNzEsLTAuMDMyODEgMC4wODQ5MiwtMC4wNTY2NCAwLjA4OTA4LC0wLjA5NTE0IDAuMTUyMzIyLC0wLjIwNTE2NiAwLjIyNjU2MiwtMC4zMTE1MjMgMC4xNjg5OTgsLTAuMjQyMTQxIDAuMDQxMjQsLTAuMDQ0MjMgMC4yMjY1NjMsLTAuMzExNTI0IDAuMjgxMSwtMC40MDY5OTcgMC41ODcwMzIsLTAuODA5MDE4IDAuOTM0NTcsLTEuMTYxMTMzIDAuMDgxMDIsLTAuMDgyMTEgMC4xNzIyMDYsLTAuMTQ2MDk2IDAuMjU0ODgzLC0wLjIyNjU2MiAwLjQ2NzMxNywtMC40MzQ3MSAwLjk2NDA1OSwtMC44MTY5NzYgMS41MDA5NzQsLTEuMTYxMTMzIDAuMTEzMzEsLTAuMDcyNTkgMC4yMjU0NiwtMC4xNTU2OTQgMC4zMzk4NCwtMC4yMjY1NjMgMC41Njg3MiwtMC4zNDg4NzkgMS4xNzE3NiwtMC42NDI4ODQgMS43ODQxOCwtMC45MDYyNSAwLjEwNTI3LC0wLjA0NTI3IDAuMjM0MTksLTAuMDY5MDUgMC4zMzk4NSwtMC4xMTMyODEgMC4wOTc5LC0wLjAzOTI5IDAuMTg1MywtMC4xMDIzMDEgMC4yODMyLC0wLjE0MTYwMSAwLDAgLTAuMTk4MjQsLTAuNzM2MzI4IC0wLjE5ODI0LC0wLjczNjMyOCB6IgogICBpZD0icGF0aDU2ODgiCiAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3Nzc3Nzc3NjY3Nzc3Nzc3Nzc3Nzc3Nzc3NjYyIgLz48ZwogICBpZD0ibGF5ZXI0IgogICBpbmtzY2FwZTpsYWJlbD0iYm94IgogICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjQzMzkyMywwLDAsMC42NDMzOTIzLDI4Ni42MDcwMSw4Ni4xMDEyMjUpIiAvPjxnCiAgIGlkPSJsYXllcjUiCiAgIGlua3NjYXBlOmxhYmVsPSJ6aXBfYXBwIgogICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjQzMzkyMywwLDAsMC42NDMzOTIzLDI4Ni42MDcwMSw4Ni4xMDEyMjUpIiAvPjxyZWN0CiAgIHN0eWxlPSJvcGFjaXR5OjAuNTc3ODY4ODk7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICBpZD0icmVjdDEzMjciCiAgIHdpZHRoPSIwLjY0MzM5MjMyIgogICBoZWlnaHQ9IjAiCiAgIHg9IjI4Ny4xOTkwNyIKICAgeT0iOTYuNDc3Njc2IiAvPjxwYXRoCiAgIHN0eWxlPSJvcGFjaXR5OjAuODcxMjg3MDk7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTI3Myk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNTI4MykiCiAgIGQ9Im0gMzAsNDUgMCw2MyAtMTQsMTEgMTEsMCAxNCwtMTEgMCwtNjMgLTExLDAgeiIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLC00LjUzMTI1KSIKICAgaWQ9InJlY3Q1MjQ2IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8+PGcKICAgaWQ9Imc1MTI5IgogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjE4MTI1LC0zLjYyNSkiPjxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtNS40Mzc1KSIKICAgICBpZD0iZzUwODAiPjxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTM2Nik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDUwNDkiCiAgICAgICBzb2RpcG9kaTpjeD0iMTE1LjUiCiAgICAgICBzb2RpcG9kaTpjeT0iMTAuMDU5NjE0IgogICAgICAgc29kaXBvZGk6cng9IjAuNSIKICAgICAgIHNvZGlwb2RpOnJ5PSIwLjUiCiAgICAgICBkPSJtIDExNiwxMC4wNTk2MTQgYyAwLDAuMjc2MTQzIC0wLjIyMzg2LDAuNSAtMC41LDAuNSAtMC4yNzYxNCwwIC0wLjUsLTAuMjIzODU3IC0wLjUsLTAuNSAwLC0wLjI3NjE0MjIgMC4yMjM4NiwtMC40OTk5OTk4IDAuNSwtMC40OTk5OTk4IDAuMjc2MTQsMCAwLjUsMC4yMjM4NTc2IDAuNSwwLjQ5OTk5OTggeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzU5Mzc2MywwLDAsMS4zNTkzNzUsLTEzNy4yOTcwMywxLjA1MTc3NDQpIiAvPjxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHJ4PSIwIgogICAgICAgeT0iMTkuOTQwMzg2IgogICAgICAgeD0iMTcuMjI4MTMiCiAgICAgICBoZWlnaHQ9IjQuMDc5Njg5IgogICAgICAgd2lkdGg9IjUiCiAgICAgICBpZD0icmVjdDQ5MjIiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM2OCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MzcwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDk1MCIKICAgICAgIHdpZHRoPSI1IgogICAgICAgaGVpZ2h0PSI0LjA3OTY4OSIKICAgICAgIHg9IjE3LjIyODEzIgogICAgICAgeT0iMTkuOTQwMzg2IgogICAgICAgcng9IjAiCiAgICAgICByeT0iMCIgLz48cmVjdAogICAgICAgcnk9IjAuMTU3MDU2NiIKICAgICAgIHJ4PSIxLjA2MTkxNDYiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45OTk5OTk5NCwzLjU1Mzc2MDhlLTQsMC4wMDY2MDYzOSwwLjk5OTk3ODE4LDAsMCkiCiAgICAgICB5PSIyMy41NDU2OTYiCiAgICAgICB4PSItMjMuNTk4Mjg4IgogICAgICAgaGVpZ2h0PSIwLjQ0MjY3MSIKICAgICAgIHdpZHRoPSI4LjA1NzA5NjUiCiAgICAgICBpZD0icmVjdDQ5MDgiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM3Mik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzc0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDkyNiIKICAgICAgIHdpZHRoPSIxLjM1OTM4IgogICAgICAgaGVpZ2h0PSI1LjI1NDg4MjgiCiAgICAgICB4PSIxOS4wMzEyNSIKICAgICAgIHk9IjE0LjY4NTUwMiIKICAgICAgIHJ4PSIwIgogICAgICAgcnk9IjAiIC8+PHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDI0LjcyNjM2NSwxMTEuOTI2OTEgMC42MDE3NiwtNjQuOTg2NTI0IC0xMS4xLDAgMC40OTk5OSw2NC45NDg1NjQgOS45OTgyNSwwLjAzOCB6IgogICAgICAgaWQ9InBhdGgzNzgzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlkPSJwYXRoMzc5NSIKICAgICAgIGQ9Im0gMjQuNDU3ODU1LDExMS45MjU5MSAwLjU0MjAzLC02NC45NTE0NDUgLTIuOTgzOTYsLTAuMDI3NTggLTAuMTkyMjMsNjQuOTY5MDE1IDIuNjM0MTYsMC4wMSB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC40MjU3NDI1OTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzc2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiCiAgICAgICBpZD0icGF0aDM3ODUiCiAgICAgICBkPSJtIDE0Mi41Mjc5NywxMjkuNjM1NjIgMC4wMzg5LC05NC41MjI2OTEgLTIuNzgzODEsLTAuMDM5MDMgMC4yODc0Nyw5NC41NDgxOTEgMi40NTczOSwwLjAxMzUgNWUtNSwzZS01IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM3OCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDgzOCkiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwwLDAuODI0Mzg1MiwtMTIzLjQyMzQ4LDUuOTg4MTAxOCkiIC8+PHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDI1NzQyNTk7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM4MCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDg2MikiCiAgICAgICBkPSJtIDE0Ni42MDQzMywxMjkuNzcxNzggMC4zMTI2MywtOTQuNzM0Njc1IC0xLjE0MDIyLC0wLjAyOTk4IDAuMDM5Myw5NC43NjAzMjUgMC43ODgyNywwLjAwNCB6IgogICAgICAgaWQ9InBhdGgzODA1IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk0MDM2MiwwLDAsMC42ODU2MjMzLC0xMjMuNDIzNDgsMjIuOTQzMTU1KSIgLz48cmVjdAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzODIpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgaWQ9InJlY3QzNzczIgogICAgICAgd2lkdGg9IjEwLjAwMTQ0OSIKICAgICAgIGhlaWdodD0iMi41NjI2MTE2IgogICAgICAgeD0iLTI0Ljg4NTkyOSIKICAgICAgIHk9Ii0xMTIuOTE1ODIiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45OTk5OTg2MywtMC4wMDE2NTczNSwwLjAwMTQxNjYsLTAuOTk5OTk5LDAsMCkiCiAgICAgICByeD0iMS4zMTgxNzc2IgogICAgICAgcnk9IjAuOTA5MTk3NTEiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzg0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDg2NiIKICAgICAgIHdpZHRoPSIxMS4wOTQwMTkiCiAgICAgICBoZWlnaHQ9IjExLjk5OTk5OCIKICAgICAgIHg9IjE0LjIzNjM3NSIKICAgICAgIHk9IjM0Ljk0MDM4NCIKICAgICAgIHJ4PSIwIgogICAgICAgcnk9IjAiIC8+PHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICBpZD0icGF0aDQ5MDQiCiAgICAgICBkPSJtIDIzLjcyNjM2NSwyMy43MTQ3MTcgMS42MDE3NiwxMS4yMjU2NjkgLTExLjEsMCAxLjQ5OTk5LC0xMS4yMTkxMTEgNy45OTgyNSwtMC4wMDY2IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjQyNTc0MjU5O2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzODYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAyMy4zMDg4MDUsMjMuNzE0ODkyIDEuNjkwNTksMTEuMjE5NjA3IC0yLjk4MzQ3LDAuMDA0OCAtMC44NDExLC0xMS4yMjI2NDMgMi4xMzM5OCwtMC4wMDE3IHoiCiAgICAgICBpZD0icGF0aDQ5MDYiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwwLjAwNzQ2ODc1LC0wLjExODQzMzUsLTEyNC4wMzg5OSwzOS4wODU2MykiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM4OCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDgzOCkiCiAgICAgICBkPSJtIDE0Mi4xMjU1NywxMjkuNzQ5MzUgMC40NDEzNSwtOTQuNjM2NDIxIC0yLjc4MzgxLC0wLjAzOTAzIDAuMjg3NDcsOTQuNjYxOTIxIDIuMDU0OTksMC4wMTM1IHoiCiAgICAgICBpZD0icGF0aDQ5MTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwtMC4wMDc0NjE3MSwtMC4xMTg0MzM1LC0xMjMuMTYyMjQsMzkuMDg1NjMpIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlkPSJwYXRoNDkxMiIKICAgICAgIGQ9Im0gMTQ2LjYwNDMzLDEyOS43NzE3OCAwLjMxMjYzLC05NC43MzQ2NzUgLTEuMTQwMjIsLTAuMDI5OTggMC4wMzkzLDk0Ljc2MDMyNSAwLjc4ODI3LDAuMDA0IHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjQyNTc0MjU5O2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzOTApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjQ4NjIpIiAvPjxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHJ4PSIwIgogICAgICAgeT0iLTIxLjU0NjY1OSIKICAgICAgIHg9IjE3LjIyODEzIgogICAgICAgaGVpZ2h0PSIxLjYwNjI3NDYiCiAgICAgICB3aWR0aD0iNSIKICAgICAgIGlkPSJyZWN0NDk2MCIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MzkyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMSwtMSkiIC8+PHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgcng9IjAiCiAgICAgICB5PSItMTA5LjY1NjI1IgogICAgICAgeD0iMTQuNjk4MjQyIgogICAgICAgaGVpZ2h0PSIzLjYyNSIKICAgICAgIHdpZHRoPSIxMC4wNjc4NzEiCiAgICAgICBpZD0icmVjdDQzNTgiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM5NCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDEsLTEpIiAvPjwvZz48L2c+PHJlY3QKICAgc3R5bGU9Im9wYWNpdHk6MC41MDk5MDA5ODtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ1MzA5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1Mjk5KSIKICAgaWQ9InJlY3Q1MjkzIgogICB3aWR0aD0iOS40OTk5OTYyIgogICBoZWlnaHQ9IjEuMDAwMDA0OCIKICAgeD0iMTciCiAgIHk9IjExNyIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLC0zLjYyNSkiCiAgIHJ5PSIwLjI1IiAvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"qelectrotech,qelectrotech\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"qelectrotech.Qelectrotech\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"qElectrotech\"\nLABEL oc.displayname=\"qElectrotech\"\nLABEL oc.path=\"/usr/bin/qelectrotech\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"qElectrotech\"\nENV APPBIN \"/usr/bin/qelectrotech\"\nENV APP \"/usr/bin/qelectrotech\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/qelectrotech/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/qelectrotech/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/qelectrotech/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/qelectrotech/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes python3-gtkspellcheck wkhtmltopdf python3-markdown yelp && apt-get clean\nRUN curl -Ls -o /tmp/remarkable_1.87_all.deb https://remarkableapp.github.io/files/remarkable_1.87_all.deb && apt-get install --no-install-recommends --yes /tmp/remarkable_1.87_all.deb && apt-get clean && rm -rf /tmp/remarkable_1.87_all.deb && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"remarkable.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMjgiCiAgIHZpZXdCb3g9IjAgMCAzNi4xMjQ0NDUgMzYuMTI0NDQ1IgogICBoZWlnaHQ9IjEyOCIKICAgaWQ9InN2ZzIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC40IHI5OTM5IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZW1hcmthYmxlLnN2ZyI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMjgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTMwMSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3NDQiCiAgICAgaWQ9Im5hbWVkdmlldzI2IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpzbmFwLWdsb2JhbD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iNjkuMzA2MTI3IgogICAgIGlua3NjYXBlOmN5PSI1OS4wMjI0MTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY1IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzIiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMzc3NyIKICAgICAgIGVtcHNwYWNpbmc9IjUiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0NjAiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MzUwNGQiCiAgICAgICAgIGlkPSJzdG9wNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI2ZTZhIgogICAgICAgICBpZD0ic3RvcDkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY4OTAwIgogICAgICAgICBpZD0ic3RvcDEyIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmE1M2QiCiAgICAgICAgIGlkPSJzdG9wMTQiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDU4LDAsMCwwLjA1MjU3LC0xLjU3NDkyLC0xLjQxNzQyKSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwMzgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTUwIgogICAgICAgeTE9IjIxMiIKICAgICAgIHkyPSIxMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgyPSIwIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTA1MjUsMCwwLDEuMTA1MjUsLTEzNC4yNzg3NCwtMjk1Ljc2MTgzKSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ0NjAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDMxIgogICAgICAgeTE9IjI3OS4wOTYwMSIKICAgICAgIHkyPSIyNjguMzI5OTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgyPSIwIiAvPgogIDwvZGVmcz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOiM0Y2MxZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQiCiAgICAgaWQ9ImcxOCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjc4MjY1NjMsMCwwLDIuNzgyNjU2MywtMC43ODQ3MDkwOSwtMC43ODQ3MDkxNSkiPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMi45ODIiCiAgICAgICB4PSIwLjI4MjAwMDAxIgogICAgICAgeT0iMC4yODIwMDAwMSIKICAgICAgIHJ4PSI2LjQ5MTAwMDIiCiAgICAgICBoZWlnaHQ9IjEyLjk4MiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTtmaWxsOiM0Y2MxZmY7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDIwIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMS44NTMiCiAgICAgICB4PSIwLjg0NyIKICAgICAgIHk9IjAuODQ3IgogICAgICAgcng9IjUuOTI2MDAwMSIKICAgICAgIGhlaWdodD0iMTEuODUzIgogICAgICAgc3R5bGU9ImZpbGw6IzRjYzFmZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0MjIiIC8+CiAgPC9nPgogIDxnCiAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMS40MTMwOTkyOXB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpTYW5zIgogICAgIGlkPSJ0ZXh0Mzc3MyI+CiAgICA8cGF0aAogICAgICAgZD0ibSAyOS42ODM1NDIsMTIuMDEyMTQxIGMgLTIuNGUtNSwwLjc4MjI3NSAtMC41NTIyMDcsMS45NDY0NiAtMS42NTY1NSwzLjQ5MjU2IC0wLjIyMDg5NiwwLjMxMjkxNSAtMC45NTI1MzgsMC43Njg0NjYgLTIuMTk0OTI5LDEuMzY2NjU0IC0wLjI5NDUxOCwwLjM1ODkyOSAtMC44Njk3MDgsMC44MDA2NzUgLTEuNzI1NTczLDEuMzI1MjQgLTAuNjM1MDI5LDAuMTkzMjczIC0xLjU0MTUyOSwwLjUwMTU3NSAtMi43MTk1MDMsMC45MjQ5MDcgLTAuMzk1NzQ3LDAuMjMwMDg0IC0wLjk3NTUzOSwwLjUyOTE4MyAtMS43MzkzNzgsMC44OTcyOTggLTAuMTE5NjUzLDAuMDI3NjIgLTEuMDUzNzYzLDAuMTc5NDY3IC0yLjgwMjMzLDAuNDU1NTUxIC0xLjM5ODg3NSwwLjIyMDg4IC0yLjA5ODMwNiwwLjUwNjE3NSAtMi4wOTgyOTcsMC44NTU4ODQgLTllLTYsMC4zMjIxMTMgMC42MDI3OSwwLjkxMTEwOCAxLjgwODQwMSwxLjc2Njk4NyAwLjk4NDcxNSwwLjY5OTQzNiAxLjY1NjUzNywxLjEyNzM3OCAyLjAxNTQ2OSwxLjI4MzgyNiAwLjk4NDcxMywwLjQzMjU0NyAyLjYyMjg1NSwxLjE3MzM5MiA0LjkxNDQzMiwyLjIyMjUzOCBsIDIuMzc0Mzg4LDAuNzg2ODYyIGMgMS4wNTgzMywwLjQ3ODU1OCAxLjYwMTMxLDEuMDQ5MTQ3IDEuNjI4OTQxLDEuNzExNzY4IC0wLjE2NTY3NywwLjMwMzY5OSAtMC40MTQxNTksMC40NTU1NDkgLTAuNzQ1NDQ4LDAuNDU1NTUxIC0wLjAwOTIsLTJlLTYgLTAuMTkzMjg1LC0wLjAzNjgxIC0wLjU1MjE4MywtMC4xMTA0MzYgLTAuMzU4OTM5LC0wLjA2NDQyIC0wLjU3NTIxMSwtMC4wOTY2MyAtMC42NDg4MTUsLTAuMDk2NjMgLTEuMjcwMDQxLC0xZS02IC0yLjQzODgyOCwtMC4yNDM4ODIgLTMuNTA2MzY1LC0wLjczMTY0MyAtMC4wNjQ0NCwtMC4wMDkyIC0xLjEwODk4MywtMC40ODc3NjIgLTMuMTMzNjQsLTEuNDM1Njc2IC0wLjQxNDE1MSwtMC4yNTc2ODUgLTEuMDM1MzU2LC0wLjY1ODAxOCAtMS44NjM2MTksLTEuMjAwOTk5IC0wLjY4MTAzNywtMC40NDE3NDUgLTEuMTczNCwtMC44NjA0ODMgLTEuNDc3MDksLTEuMjU2MjE3IC0wLjExOTY1LC0wLjAwOTIgLTAuMjg1MzA1LC0wLjA0MTQxIC0wLjQ5Njk2NSwtMC4wOTY2MyAtMC4zMDM3MTEsLTAuNDY5MzUzIC0xLjE1MDM5MSwtMS4xMjczNzEgLTIuNTQwMDQ0LC0xLjk3NDA1NiAtMS4xNjg3OTQsLTAuNzI3MDM2IC0xLjc1MzE4NywtMS4zMDIyMjYgLTEuNzUzMTgyLC0xLjcyNTU3MyAwLjA1NTIxLC0wLjEzODAzOSAwLjIzMDA3MSwtMC41NzUxODQgMC41MjQ1NzQsLTEuMzExNDM1IDEuODMxNDAxLC0wLjM5NTcyMyA0LjE1OTc3MSwtMC45Mzg3MDMgNi45ODUxMiwtMS42Mjg5NDEgMC4yODUyODEsLTAuMDU1MjEgMC45ODQ3MTMsLTAuMjE2MjYyIDIuMDk4Mjk2LC0wLjQ4MzE2IDAuNzE3ODIzLC0wLjE3NDg0OCAxLjk2OTQzNywtMC44NjUwNzcgMy43NTQ4NDcsLTIuMDcwNjg4IDIuMjM2MzIyLC0xLjUxODQ5MSAzLjM1NDQ5MiwtMi43NzkzMDggMy4zNTQ1MTQsLTMuNzgyNDU2IC0yLjJlLTUsLTAuODkyNjggLTAuMzkxMTUxLC0xLjcwNzE0OTMgLTEuMTczMzksLTIuNDQzNDExMyBDIDI1LjUzMjk0NCw4LjQ2NDM4MjIgMjQuNTc1ODI3LDguMDA0MjI5OCAyMy40NDM4Nyw3LjgyOTM1MjMgMjIuOTE5Mjc4LDcuNjE3NzAxOSAyMi42MDE3NzMsNy41MTE4NjY4IDIyLjQ5MTM1NCw3LjUxMTg0NjggYyAtMC4xODQwNzgsMmUtNSAtMC41MjQ1OTEsLTAuMDA0NTggLTEuMDIxNTQsLTAuMDEzODA0IC0wLjYwNzQxNywtMC4wMDkxOCAtMS4wOTk3OCwtMC4wMTM3ODUgLTEuNDc3MDksLTAuMDEzODA1IGwgLTEuNjg0MTU5LC0wLjAxMzgwNSBjIC0wLjEyODg1NiwyZS01IC0wLjE5MzI3NywwLjAxMzgyNSAtMC4xOTMyNjQsMC4wNDE0MTQgLTEuM2UtNSwwLjA5MjA1MSAtMC4wMTM4MiwwLjE1MTg3MDMgLTAuMDQxNDEsMC4xNzk0NTk2IC0wLjI1NzY5OCwtMC4wMDkxOCAtMC40OTIzNzYsLTAuMDEzNzg1IC0wLjcwNDAzNCwtMC4wMTM4MDQgLTAuNjM1MDIyLDEuOThlLTUgLTEuMDUzNzYxLDAuMDI3NjI5IC0xLjI1NjIxNywwLjA4MjgyNyAtMC40NTA5NiwwLjEzODA2NTQgLTEuMTk2NDA3LDAuNDIzMzU5OCAtMi4yMzYzNDMsMC44NTU4ODQyIC0wLjUyNDU4MiwwLjEzODA2NDUgLTEuMTc3OTk4LDAuMzIyMTI1NSAtMS45NjAyNTEsMC41NTIxODMzIC0wLjY4MTAzMSwwLjMwMzcxODkgLTEuMDY3NTU5LDAuNjAyODE3OSAtMS4xNTk1ODUsMC44OTcyOTgxIC0wLjU0Mjk4NSwxLjc2NzAwMiAtMC45MTExMDY1LDMuODYwNjk1IC0xLjEwNDM2NjMsNi4yODEwODUgMC4wMzY4MDgsMC40OTY5NzYgMC4wNTUyMTQsMS4yNTYyMjcgMC4wNTUyMTgsMi4yNzc3NTcgLTQuMmUtNiwwLjE2NTY2NCAtNC4yZS02LDAuMzQwNTIxIDAsMC41MjQ1NzQgLTAuMDY0NDI2LDAuMTQ3MjU3IC0wLjE2MTA1NzUsMC4zODE5MzUgLTAuMjg5ODk2MiwwLjcwNDAzNCAtMC4xOTMyNjc5LDAuODc0Mjk3IC0wLjI4OTg5OTksMS42NDI3NTEgLTAuMjg5ODk2MywyLjMwNTM2NSAtMy42ZS02LDAuMTc0ODYzIDAuMDA0NiwwLjM0MDUxOCAwLjAxMzgwNSwwLjQ5Njk2NSBsIDAuMDgyODI4LDAuODY5Njg5IGMgMC4wMjc2MDUsMC4zNDk3MiAwLjA0MTQxLDAuODU1ODg3IDAuMDQxNDE0LDEuNTE4NTA0IC0zLjhlLTYsMS40MzU2NzggLTAuMjcxNDkzNywyLjE1MzUxNiAtMC44MTQ0NzA1LDIuMTUzNTE1IC0yLjllLTYsMWUtNiAtMC4xOTc4Njg0LC0wLjA2OTAyIC0wLjU5MzU5NzEsLTAuMjA3MDY4IEMgNy40NzE5NjQ1LDI2Ljg0Mjg2NiA3LjI0NjQ4OTgsMjYuNzY5MjQyIDcuMTgyMDcwMiwyNi43NjkyNDEgNi45ODg4MDQ1LDI1Ljc0NzcwNCA2Ljg5MjE3MjUsMjQuMDQ1MTQgNi44OTIxNzM5LDIxLjY2MTU0NSBjIC0xLjRlLTYsLTAuMDkyMDIgMC4wNzgyMjQsLTAuODQ2Njc0IDAuMjM0Njc4LC0yLjI2Mzk1MSAwLjIwMjQ2NTQsLTEuOTMyNjMyIDAuMzkxMTI3OCwtMy40NzQxNDMgMC41NjU5ODc5LC00LjYyNDUzNiAwLjE5MzI2MTgsLTAuNjI1Nzk1IDAuMzkxMTI3MywtMS4zNzEyNDEgMC41OTM1OTcxLC0yLjIzNjM0MyBsIDAsLTAuNjYyNjIgYyAtMC4xMzgwNDg1LC0wLjEzODAzIC0wLjIyNTQ3NzQsLTAuMjExNjU0IC0wLjI2MjI4NzEsLTAuMjIwODczIC0yLjVlLTYsMS42ZS01IC0wLjE0MjY0OTcsMC4wNjkwNCAtMC40Mjc5NDIxLDAuMjA3MDY5IEMgNy4zMjAxMTQyLDExLjk4OTE0OSA3LjE0OTg1NzksMTIuMDUzNTcgNy4wODU0MzgxLDEyLjA1MzU1NSA2LjkxMDU3ODYsMTIuMDUzNTcgNi43NDk1MjUzLDExLjg4NzkxNiA2LjYwMjI3NzcsMTEuNTU2NTkgNi41MDEwNDMxLDExLjM0NDkzNiA2LjQ1MDQyNjMsMTEuMTY1NDc2IDYuNDUwNDI3MywxMS4wMTgyMTEgNi40NTA0MjYzLDEwLjAzMzUwMiA2LjcyMTkxNjIsOS4yMzI4MzY1IDcuMjY0ODk3Nyw4LjYxNjIxMzYgNy42NDIyMjA5LDguMTkyODkyMyA4LjQ3NTA5NjYsNy41Mzk0NzYgOS43NjM1Mjc0LDYuNjU1OTYyNyA5LjkwMTU2ODgsNi41NjM5NTMgMTEuMDk3OTY1LDYuMjk3MDY0NyAxMy4zNTI3MTksNS44NTUyOTY4IGMgMi4zMDk5NTcsLTAuNDMyNTIxNiAzLjg4MzY3OCwtMC42NDg3OTMyIDQuNzIxMTY4LC0wLjY0ODgxNTQgMS44NDA1OTcsMi4yMmUtNSAzLjU5ODM3OCwwLjA4Mjg1IDUuMjczMzUxLDAuMjQ4NDgyNSAwLjExOTYyMiwwLjEwMTI1NTUgMC4zMjIwODksMC4xOTMyODYgMC42MDc0MDIsMC4yNzYwOTE2IDAuODc0MjcxLDAuMDA5MjIgMS45MDUwMTIsMC40OTIzODQ4IDMuMDkyMjI2LDEuNDQ5NDgxMyAxLjE4NzE3MiwwLjk1NzEzNzIgMS44Nzc0LDEuODU0NDM0MiAyLjA3MDY4OCwyLjY5MTg5MzkgLTIuNGUtNSwwLjAxODQyNCAwLjA2NDQsMC4xNjEwNzEzIDAuMTkzMjY0LDAuNDI3OTQyMyAwLjEyODgxOSwwLjI2NjkwNSAwLjE5MzI0LDAuNDE0MTU0IDAuMTkzMjY0LDAuNDQxNzQ2IC0yLjRlLTUsMC4wMzY4MyAwLjAzMjE5LDAuMjQzODk4IDAuMDk2NjMsMC42MjEyMDcgMC4wNTUxOSwwLjM5NTc0NyAwLjA4MjgsMC42MTIwMTggMC4wODI4MywwLjY0ODgxNSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MjguMjcxNzg3NjRweDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiNmZmZmZmY7Zm9udC1mYW1pbHk6RGFuaWVsOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246RGFuaWVsIEJvbGQiCiAgICAgICBpZD0icGF0aDI5OTYiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"remarkable,markdown,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"remarkable.desktop\"\nLABEL oc.launch=\"remarkable.Remarkable\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"remarkable\"\nLABEL oc.displayname=\"Remarkable\"\nLABEL oc.path=\"/usr/bin/remarkable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/x-markdown;text/markdown;\"\nLABEL oc.fileextensions=\"md;markdown\"\nLABEL oc.legacyfileextensions=\"md;markdown\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remarkable\"\nENV APPBIN \"/usr/bin/remarkable\"\nENV APP \"/usr/bin/remarkable\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remarkable/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remarkable/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remarkable/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remarkable/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends remmina libsecret-1-0 remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc remmina-plugin-exec remmina-plugin-nx remmina-plugin-spice && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"remmina.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmVyc2lvbj0iMS4xIj4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMwOC4zKSI+CiAgPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iMTIiIGN5PSIzMjAuMyIgcj0iOSIvPgogIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMSIgZD0ibSA4LDMxNS4xMzM5NyB2IDIuNDI1NzggTCA5Ljg2MTMyODEsMzE4Ljc5OTk4IDgsMzIwLjA0MDIyIHYgMi40MjU3OCBsIDUuNSwtMy42NjYwMiB6Ii8+CiAgPHBhdGggc3R5bGU9ImZpbGw6IzIwYWE3MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwzMDguMykiIGQ9Ik0gOCA2LjMzMzk4NDQgTCA4IDguNzU5NzY1NiBMIDkuODYxMzI4MSAxMCBMIDggMTEuMjQwMjM0IEwgOCAxMy42NjYwMTYgTCAxMy41IDEwIEwgOCA2LjMzMzk4NDQgeiIvPgogIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMSIgZD0ibSAxNiwzMTkuMTMzOTcgLTUuNSwzLjY2NjAxIDUuNSwzLjY2NjAyIHYgLTIuNDI1NzggTCAxNC4xNDA2MjUsMzIyLjc5OTk4IDE2LDMyMS41NTk3NSBaIi8+CiAgPHBhdGggc3R5bGU9ImZpbGw6IzM5ODlkYSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwzMDguMykiIGQ9Ik0gMTYgMTAuMzMzOTg0IEwgMTAuNSAxNCBMIDE2IDE3LjY2NjAxNiBMIDE2IDE1LjI0MDIzNCBMIDE0LjE0MDYyNSAxNCBMIDE2IDEyLjc1OTc2NiBMIDE2IDEwLjMzMzk4NCB6Ii8+CiAgPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4yIiBkPSJtIDIwLjc0OTAyNCwzMTUuOTcyODUgLTEuNjgxNjQxLDEuMTE5MTQgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDIwLDMyMC43OTk5OSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDEyLDMyOC44IDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS44NDQ3MjY1LDMyNS44ODg4NiBMIDQuMTY4OTQ1MiwzMjcuMDA0MSBDIDYuMDAyMTQ2NSwzMjkuMzEzNjMgOC44MjkxMTc0LDMzMC44IDEyLDMzMC44IGMgNS41MTM5NTYsMCAxMCwtNC40ODU3OCAxMCwtMTAuMDAwMDEgMCwtMS43NTA3MSAtMC40NTcwMDEsLTMuMzk0NDUgLTEuMjUwOTc2LC00LjgyNzE0IHoiLz4KICA8cGF0aCBzdHlsZT0iZmlsbDojMjBhYTczIiBkPSJtIDIwLjc0OTAyNCwzMTUuNDcyODUgLTEuNjgxNjQxLDEuMTE5MTQgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDIwLDMyMC4yOTk5OSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDEyLDMyOC4zIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS44NDQ3MjY1LDMyNS4zODg4NiBMIDQuMTY4OTQ1MiwzMjYuNTA0MSBDIDYuMDAyMTQ2NSwzMjguODEzNjMgOC44MjkxMTc0LDMzMC4zIDEyLDMzMC4zIGMgNS41MTM5NTYsMCAxMCwtNC40ODU3OCAxMCwtMTAuMDAwMDEgMCwtMS43NTA3MSAtMC40NTcwMDEsLTMuMzk0NDUgLTEuMjUwOTc2LC00LjgyNzE0IHoiLz4KICA8cGF0aCBzdHlsZT0ib3BhY2l0eTowLjIiIGQ9Im0gMTIsMzEwLjc5OTk5IGMgLTUuNTE0MjE2OSwwIC0xMCw0LjQ4NTc5IC0xMCwxMCAwLDEuNjI3MzYgMC4zOTIwMjYzLDMuMTY0MTEgMS4wODQ5NjA5LDQuNTIzNDUgTCA0Ljc3NDQxNCwzMjQuMTk5NDEgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDQsMzIwLjc5OTk5IGEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMSA4LC04IDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS45Mjc3MzQsMi42NDc0NyBsIDEuNjg1NTQ3LC0xLjEyMTEgQyAxNy43Nzc4MiwzMTIuMTcwNzIgMTUuMDQ2MDQ5LDMxMC43OTk5OSAxMiwzMTAuNzk5OTkgWiIvPgogIDxwYXRoIHN0eWxlPSJmaWxsOiMzOTg5ZGEiIGQ9Im0gMTIsMzEwLjMgYyAtNS41MTQyMTY5LDAgLTEwLDQuNDg1NzggLTEwLDkuOTk5OTkgMCwxLjYyNzM2IDAuMzkyMDI2MywzLjE2NDExIDEuMDg0OTYwOSw0LjUyMzQ1IEwgNC43NzQ0MTQsMzIzLjY5OTQxIEEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMSA0LDMyMC4yOTk5OSBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgOCwtOCA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDUuOTI3NzM0LDIuNjQ3NDcgbCAxLjY4NTU0NywtMS4xMjExIEMgMTcuNzc3ODIsMzExLjY3MDcyIDE1LjA0NjA0OSwzMTAuMyAxMiwzMTAuMyBaIi8+CiAgPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4yO2ZpbGw6I2ZmZmZmZiIgZD0ibSAxMiwzMTAuMyBjIC01LjUxNDIxNjksMCAtMTAsNC40ODU3OCAtMTAsOS45OTk5OSAwLDAuMDc1MSAwLjAwNTE3LDAuMTQ4OSAwLjAwNjg0LDAuMjIzNjQgMC4xNDczNDM4LC01LjM4NjU1IDQuNTcxNjU5MSwtOS43MjM2NCA5Ljk5MzE2NCwtOS43MjM2NCAyLjg5NTE0MiwwIDUuNTA0NDUsMS4yNDAzMSA3LjMzMjAzMSwzLjIxMzg3IGwgMC4yODEyNSwtMC4xODc1IEMgMTcuNzc3ODIsMzExLjY3MDcyIDE1LjA0NjA0OSwzMTAuMyAxMiwzMTAuMyBaIE0gNC4wMDg3ODksMzIwLjYyNTE5IEEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMCA0LDMyMC43OTk5OSBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDAgMC42MTEzMjgxLDMuMDA3ODIgbCAwLjE2MzA4NTksLTAuMTA4NCBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgLTAuNzY1NjI1LC0zLjA3NDIyIHoiLz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"remmina,rdp,tsclient\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"remmina-file.desktop\"\nLABEL oc.launch=\"remmina.Remmina\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"remmina\"\nLABEL oc.displayname=\"Remmina\"\nLABEL oc.path=\"/usr/bin/remmina\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-remmina;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remmina\"\nENV APPBIN \"/usr/bin/remmina\"\nENV APP \"/usr/bin/remmina\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remmina/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remmina/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remmina/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remmina/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl -Ls -o /tmp/RemoteDesktopManager.Free_amd64.deb https://cdn.devolutions.net/download/Linux/RDM/2022.1.2.5/RemoteDesktopManager.Free_2022.1.2.5_amd64.deb\nRUN apt-get update && apt-get install --yes /tmp/RemoteDesktopManager.Free_amd64.deb && apt-get clean\nCOPY composer/init.d/init.RemoteDesktopManager.Free /composer/init.d/init.RemoteDesktopManager.Free\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gir1.2-gdkpixbuf-2.0 gtk2-engines-pixbuf libgdk-pixbuf2.0-0 adwaita-icon-theme libgdk-pixbuf2.0-bin librsvg2-2 librsvg2-common && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle-remotedesktopmanager.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJjLTMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjQxOTk5ODc0Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiLTYiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlLTMiIHgxPSI1MTkuMiIgeDI9IjUxOS4yIiB5MT0iMTAyNC44IiB5Mj0iNC44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wNjM1ODYgMCAwIC4wNjM1ODMgLS41NTYxNyAtLjU1MjcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2MDYwNjAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDE0MTQxIiBvZmZzZXQ9Ii4wMTk1NTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFlMWUxZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnLTUiIHg9Ii0uMDMxNjUyIiB5PSItLjA0MTk0NyIgd2lkdGg9IjEuMDYzMyIgaGVpZ2h0PSIxLjA4MzkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNjEwNjU4NDIiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYtNiIgeDE9IjQwOS41NyIgeDI9IjQwOS45NCIgeTE9IjU0Mi44IiB5Mj0iNTA0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDUyMywwLDAsMS4wMjc2LC03Mi41NjgsLTguNjkzMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg2ZDBmYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNzk0ZjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjLTMpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjczMzMzIi8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMCIgZmlsbD0idXJsKCNiLTYpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTUwLjI0OSA4LjE5MzJxLTMuODU5Ny0yLjk3MjUtOC40NDQtNC41NTU3LTQuNzM3Mi0xLjYzNzMtOS44MDIxLTEuNjM3M2MtMTYuNTcgMC0zMC4wMDMgMTMuNDMyLTMwLjAwMyAzMC4wMDEgMCAxNS4xNTggMTEuMjQ1IDI3LjY4NCAyNS44NDUgMjkuNzA5IDAuNzEyMTYgMC4wOTg1NSAxLjQzMzkgMC4xNzQ4NSAyLjE1ODcgMC4yMTkzNiAwLjY2MTI4IDAuMDQxMzMgMS4zMjU4IDAuMDY5OTQgMS45OTk4IDAuMDY5OTQgMTYuNTY3IDAgMjkuOTk3LTEzLjQzMiAyOS45OTctMjkuOTk5IDAtMS4zMDk4LTAuMDgyNjYtMi42MDM3LTAuMjQ0ODEtMy44NjU4LTAuMTg3NTgtMS40NzUxLTAuNDkyNzktMi45MDktMC44ODM4Ny00LjMwNDZxLTEuMzI4OS00LjY4OTItNC4wODIyLTguNzI2NS0yLjcyMTUtMy45NzcxLTYuNTQwMS02LjkxMTJ6IiBmaWxsPSJ1cmwoI2UtMykiIHN0cm9rZS13aWR0aD0iLjk5NzI0Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguNDY1ODYgLS4wNTU1NjYgLjA1NzI1OCAuNDUyMDkgLTIwOS40MSAtMTUzLjYzKSI+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWx0ZXI9InVybCgjZy01KSIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWxsPSJ1cmwoI2YtNikiLz4KICA8ZyBmaWxsPSIjZDVmZmZmIj4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDk4LjM1IiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ4OS44MyIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODEuMzEiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICA8L2c+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNiwxNikiIGZpbGw9IiNmZmYiPgogIDxwYXRoIGQ9Im0xNiAxMmE5IDkgMCAwIDAtNy44NzcgNC42NjhjMC4xMjkgMC4zNjQgMC4zNTcgMC42NzcgMC42NTYgMC45MDhhOCA4IDAgMCAxIDcuMjIxLTQuNTc2IDQgNCAwIDAgMC00IDQgNCA0IDAgMCAwIDQgNCA0IDQgMCAwIDAgNC00IDQgNCAwIDAgMC0zLjY1LTMuOTgyIDggOCAwIDAgMSA2Ljg3IDQuNTU4YzAuMzAyLTAuMjM0IDAuNTMzLTAuNTUgMC42Ni0wLjkxOGE5IDkgMCAwIDAtNy44OC00LjY1OHptMCAyYTMgMyAwIDAgMSAzIDMgMyAzIDAgMCAxLTMgMyAzIDMgMCAwIDEtMy0zIDMgMyAwIDAgMSAzLTN6bTAgMWEyIDIgMCAwIDAtMiAyIDIgMiAwIDAgMCAyIDIgMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMC4wOS0wLjU4OCAxIDEgMCAwIDEtMC45MSAwLjU4OCAxIDEgMCAwIDEtMS0xIDEgMSAwIDAgMSAwLjU5LTAuOTEgMiAyIDAgMCAwLTAuNTktMC4wOXoiLz4KICA8cGF0aCBkPSJtOCAxMXYxMWg3djJoLTN2MWg4di0xaC0zdi0yaDd2LTExaC0xNXptMSAxaDE0djloLTE0eiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"remotedesktopmanager,remote,desktop,ssh\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"remotedesktopmanager.free.desktop\"\nLABEL oc.launch=\"RemoteDesktopManager.Free.RemoteDesktopManager.Free\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"remotedesktopmanager\"\nLABEL oc.displayname=\"RemoteDesktop\"\nLABEL oc.path=\"/bin/remotedesktopmanager.free\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remotedesktopmanager\"\nENV APPBIN \"/bin/remotedesktopmanager.free\"\nENV APP \"/bin/remotedesktopmanager.free\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remotedesktopmanager/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remotedesktopmanager/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remotedesktopmanager/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remotedesktopmanager/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update rhythmbox\nLABEL oc.icon=\"circle_rhythmbox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iIzRjNGM0YyIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzJhMmEyYSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSI1MjAiIHgyPSI1MjAiIHkxPSIyNCIgeTI9IjEwMDQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM3OS42NSAtNDg1LjkzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMzk4Ljk1IiB4Mj0iMzk4Ljk1IiB5MT0iMTEzLjQxIiB5Mj0iOTEzLjQxIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00MzAuMjIgLTUwNi4zMykgc2NhbGUoMS4wMjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZWRmMmQiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNDhkMDEiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iNTU4Ljk1IiB4Mj0iNTU4Ljk1IiB5MT0iMjEzLjQxIiB5Mj0iODEzLjQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC45OCAwIDAgLjk4IC00MDcuNTkgLTQ4NC45MSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYiI+PHN0b3Agb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjUyOC45NSIgeDI9IjUyOC45NSIgeTE9IjM2MS4wNiIgeTI9IjY4OC41MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNDY3LjU4IC01NDEuNjgpIHNjYWxlKDEuMDg4OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgeDE9IjU1OC45NSIgeDI9IjU1OC45NSIgeTE9IjIxMy40MSIgeTI9IjgxMy40MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYgMCAwIC4wNiAtMS4wNTcgLjcxNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC01MTAuNjQgLTY2My41Mikgc2NhbGUoMS4zMjc2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGZpbHRlciBpZD0iaiIgeD0iLS4zNiIgeT0iLS4zNiIgd2lkdGg9IjEuNzIiIGhlaWdodD0iMS43MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzMCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDgxIiB5PSItLjA4MSIgd2lkdGg9IjEuMTYyIiBoZWlnaHQ9IjEuMTYyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMzLjEyNCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii44OSIvPjwvZmlsdGVyPjxyYWRpYWxHcmFkaWVudCBpZD0iaCIgY3g9IjU1MC45NSIgY3k9IjUyMS40MSIgcj0iNDI1IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00MzAuMjIgLTUwNi4zMykgc2NhbGUoMS4wMjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZThjMDYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZWE5MzMiIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODkuMzIgLTQ4OS45Mikgc2NhbGUoMS4wMTE1KSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIvPjxyZWN0IHg9IjEuOTgzIiB5PSIxLjk3OCIgd2lkdGg9IjU5Ljk5NyIgaGVpZ2h0PSI1OS45OTciIHJ5PSIyOS45OTgiIGZpbGw9InVybCgjZCkiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDM2NzMgMCAwIC4wMzY3MyAyNy4xMzggMzguMDQyKSI+PGNpcmNsZSBjeD0iMTMyLjM1IiBjeT0iMjYuMDc0IiByPSI0OTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+PGNpcmNsZSBjeD0iMTMyLjM1IiBjeT0iMjYuMDc0IiByPSI0OTAiIGZpbGw9InVybCgjZikiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjQwOC40MyIgZmlsbD0idXJsKCNnKSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9InVybCgjaCkiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNTQuMjQ1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNjEuNjcgLTYzMS45MSkiIGZpbGw9Im5vbmUiPjxjaXJjbGUgY3g9IjUxMiIgY3k9IjU0MC4zNiIgcj0iMTc1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPjxjaXJjbGUgY3g9IjIyNi4wMyIgY3k9IjgyNS42MSIgcj0iMTI1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPjxwYXRoIGQ9Im0zNjAgNDUyLjM2LTIzNSAzMDAgMTgwIDE3MCAzMTUtMjQ1eiIvPjwvZz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjI0NSIgZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuMiIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48Y2lyY2xlIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MDguMyAtNjQyLjg3KSBzY2FsZSgxLjE2MjgpIiBjeD0iNTUwLjk1IiBjeT0iNjExLjQxIiByPSIxMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2opIiBvcGFjaXR5PSIuNCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjE2My4zMyIgZmlsbD0idXJsKCNrKSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuOSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzkwLjMyIC00OTYuNTkpIHNjYWxlKDE2LjMzMykiIGQ9Ik0zMS44ODcgMTdBMTUgMTUgMCAwIDAgMTcgMzJhMTUgMTUgMCAwIDAgMTQuMzUgMTQuOTg2QTE0LjM1OSAxNC41IDAgMCAxIDE3LjY0MSAzMi41IDE0LjM1OSAxNC41IDAgMCAxIDMyIDE4YTE0LjM1OSAxNC41IDAgMCAxIDE0LjM1OSAxNC41IDE0LjM1OSAxNC41IDAgMCAxLTEzLjczNiAxNC40ODZBMTUgMTUgMCAwIDAgNDcgMzJhMTUgMTUgMCAwIDAtMTUtMTUgMTUgMTUgMCAwIDAtLjExMyAwem0uNzM2IDI5Ljk4NmExNC4zNTkgMTQuNSAwIDAgMS0uMzE4LjAxIDE1IDE1IDAgMCAwIC4zMTgtLjAxem0tLjMxOC4wMUExNC4zNTkgMTQuNSAwIDAgMSAzMiA0N2ExNSAxNSAwIDAgMCAuMzA1LS4wMDR6IiBmaWxsPSJ1cmwoI2wpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii4wNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48L2c+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii0yMCIgcj0iMyIgb3BhY2l0eT0iLjc1Ii8+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii00NCIgcj0iMyIgb3BhY2l0eT0iLjc1Ii8+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii0yMCIgcj0iMiIgZmlsbD0iIzRkNGQ0ZCIvPjxjaXJjbGUgdHJhbnNmb3JtPSJyb3RhdGUoOTApIiBjeD0iMTciIGN5PSItNDQiIHI9IjIiIGZpbGw9IiM0ZDRkNGQiLz48L3N2Zz4=\"\nLABEL oc.keyword=\"rhythmbox,rhythmbox,audio;song;mp3;cd;podcast;MTP;playlist;last.fm;dlna;radio;\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.gnome.Rhythmbox3.desktop\"\nLABEL oc.launch=\"rhythmbox.Rhythmbox\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"rhythmbox\"\nLABEL oc.displayname=\"rhythmbox\"\nLABEL oc.path=\"/usr/bin/rhythmbox\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-ogg;application/ogg;audio/x-vorbis+ogg;audio/vorbis;audio/x-vorbis;audio/x-scpls;audio/x-mp3;audio/x-mpeg;audio/mpeg;audio/x-mpegurl;audio/x-flac;audio/mp4;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-stm;audio/x-xm;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"rhythmbox\"\nENV APPBIN \"/usr/bin/rhythmbox\"\nENV APP \"/usr/bin/rhythmbox\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/rhythmbox/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/rhythmbox/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/rhythmbox/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/rhythmbox/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-robots && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-robots.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iSXRlcm0iIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9Ii01MDYuNDUiIHgyPSItNTA2LjQ1IiB5MT0iLTE5LjEwMSIgeTI9IjEwMTMuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDU4ODI0IDAgMCAuMDU4ODI0IDYxLjc5MSAzLjEyMzYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNjI2MjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzMzIiBvZmZzZXQ9Ii41MDc2OSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGE0YTRhIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjkwMDAwMDA2Ii8+CiAgPC9maWx0ZXI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iMTguNjg1IiBjeT0iMjUuNjY4IiByPSI1LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2siLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImsiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTQwMDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2E0MDAwMCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjE4LjY4NSIgY3k9IjI1LjY2OCIgcj0iNS4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNqIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJqIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2MwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjMDAiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSIxOC42ODUiIGN5PSIyNS42NjgiIHI9IjUuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjaSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlZjI5MjkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWYyOTI5IiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJoIiBjeD0iMTMuMTk5IiBjeT0iMTIuNDY0IiByPSIyMS4wMDkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNjQ5IC42MTQ4MiAtLjYyMzAxIDEuMDc5MSAxNC40MDMgLTEuNTU0NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2QzZDdjZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4ODhhODUiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iNS42OTM0IiB4Mj0iNDAuNTAzIiB5MT0iNS40NTgzIiB5Mj0iNDAuMDgxIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNDk0OCA3LjU0NjIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlZWVlZWMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWVlZWVjIiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0ibCIgeD0iLS4xMjA5MyIgeT0iLS4xMTkwOSIgd2lkdGg9IjEuMjQxOSIgaGVpZ2h0PSIxLjIzODIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDM1OTI1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8bWFzaz4KICA8ZyBpZD0iZyI+CiAgIDxwYXRoIGQ9Im05NjkuNzUgMzkyLjA1Yy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNC0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1LTcyLjYtNzIuNi0xNTcuMTUtMTE2LjY1LTI1My42NS0xMzIuMDUtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LTAuNTUtMTkuODUtMC44NS0zMC4xLTAuODUtOS4zNSAwLTE4LjYgMC4yNS0yNy45IDAuNzUtMTE4LjM1IDYuMS0yMjAuMyA1MS45NS0zMDUuODUgMTM3LjVxLTEzOC4yNSAxMzguMjUtMTM4LjI1IDMzMy43NWMwIDEzMC4zNSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjggNTYuNyA1Ni42NSAxMjAuNTUgOTUuOSAxOTEuMSAxMTcuNTUgMzYuNzUgMTEuMjUgNzQuOCAxNy44NSAxMTQuNzUgMTkuOTVoMC40YzguNSAwLjQ1IDE2LjYgMC43IDI0LjUgMC43aDNjMTAuMyAwIDIwLjUtMC4zIDMwLjEtMC44IDIuNS0wLjE1IDQuNzUtMC4zIDYuOTUtMC40NSAyMC4yLTEuNDUgMzkuOS00LjA1IDU4LjctNy43IDcuOTUtMS41NSAxNS44LTMuMyAyMy40LTUuMTUgODAuOC0yMC4zIDE1Mi4xNS02MS42IDIxNC42NS0xMjQuMSA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTguNDUtNDcuNjUgMjguNjUtOTguOCAzMC41NS0xNTMuNSAwLjItNi4wNSAwLjMtMTIuMjUgMC4zLTE4LjV2LTNjLTAuMi00MC42NS00Ljk1LTc5LjUtMTQuMy0xMTd6IiBmaWxsPSIjZmZmIi8+CiAgPC9nPgogPC9tYXNrPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiIHN0eWxlPSJwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIi8+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0idXJsKCNiKSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjU1MTczIC40MDcwNikiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjUiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNDk0OCA3LjU0NjIpIj4KICAgPHBhdGggZD0ibTcuNTEzMyAxOC40NTRoMzIuOTk4djExLjc3OGgtMzIuOTk4YzNlLTQgLTMuOTI2IDNlLTQgLTcuODUyIDNlLTQgLTExLjc3OHoiIHN0cm9rZT0iIzJlMzQzNiIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE0MjksMCwwLDEuMTQyOSwtNDYuMjAyLC0xMi4xNzUpIiBvcGFjaXR5PSIuNzUiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6Ii8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6Ii8+CiAgIDwvZz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTU2LjIwMiwtMTIuMTc1KSI+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjM4NjEsMCwwLDEuMzg2MSwzNS41MjcsLTMuOTI1NykiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5MDEgMCAwIC45OTAxIDQyLjkyNyA2LjI5ODEpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC41OTQwNiAwIDAgLjU5NDA2IDUwLjMyNyAxNi40NjQpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgPC9nPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE0MjksMCwwLDEuMTQyOSwtMzYuMjAyLC0xMi4xNzUpIiBvcGFjaXR5PSIuNSI+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjM4NjEsMCwwLDEuMzg2MSwzNS41MjcsLTMuOTI1NykiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5MDEgMCAwIC45OTAxIDQyLjkyNyA2LjI5ODEpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC41OTQwNiAwIDAgLjU5NDA2IDUwLjMyNyAxNi40NjQpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgPC9nPgogIDwvZz4KICA8cGF0aCBkPSJtMzEuNDY0IDExLjA3N2MtMTAuMTE3IDAtMTguNTQ0IDcuMzI4OC0yMC4yMTkgMTYuOTY5aDQwLjQwNmMtMS42NzYtOS42MzktMTAuMDcxLTE2Ljk2OS0yMC4xODctMTYuOTY5em0tMjAuMTg4IDI0LjA2M2MxLjY5MDIgOS42MjIgMTAuMDgzIDE2Ljk2OCAyMC4xODggMTYuOTY4IDEwLjEwNSAwIDE4LjQ5OC03LjM0NCAyMC4xODctMTYuOTY4eiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMyZTM0MzYiIHN0cm9rZS13aWR0aD0iMXB4Ii8+CiAgPHBhdGggZD0ibTMxLjQ2NCAxMi4wNzdjLTkuMjI2IDAtMTYuOTUgNi40NDk4LTE4Ljk2OSAxNS4wNjNoMzcuOTM4Yy0yLjAyLTguNjEzLTkuNzQ0LTE1LjA2My0xOC45NjktMTUuMDYzem0tMTguOTY5IDIzLjk2OWMyLjAxOTIgOC42MTMgOS43NDMgMTUuMDMxIDE4Ljk2OSAxNS4wMzEgOS4yMjUgMCAxNi45NDktNi40MTggMTguOTY5LTE1LjAzMXoiIHN0cm9rZT0idXJsKCNmKSIgc3Ryb2tlLXdpZHRoPSIxcHgiLz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC41NTE3MyAuNDA3MDYpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3LjQ5NDggNy41NDYyKSI+CiAgIDxwYXRoIGQ9Im03LjUxMzMgMTguNDU0aDMyLjk5OHYxMS43NzhoLTMyLjk5OGMzZS00IC0zLjkyNiAzZS00IC03Ljg1MiAzZS00IC0xMS43Nzh6IiBmaWxsPSIjMmUzNDM2IiBzdHJva2U9IiMyZTM0MzYiLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTQ2LjIwMiwtMTIuMTc1KSIgb3BhY2l0eT0iLjc1Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuMzg2MSwwLDAsMS4zODYxLDM1LjUyNywtMy45MjU3KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguOTkwMSAwIDAgLjk5MDEgNDIuOTI3IDYuMjk4MSkiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIgZmlsbD0idXJsKCNjKSIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjU5NDA2IDAgMCAuNTk0MDYgNTAuMzI3IDE2LjQ2NCkiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIgZmlsbD0idXJsKCNhKSIvPgogICA8L2c+CiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTQyOSwwLDAsMS4xNDI5LC01Ni4yMDIsLTEyLjE3NSkiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiIGZpbGw9InVybCgjZSkiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDwvZz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTM2LjIwMiwtMTIuMTc1KSIgb3BhY2l0eT0iLjUiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiIGZpbGw9InVybCgjZSkiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDwvZz4KICA8L2c+CiAgPHBhdGggZD0ibTMxLjQ2NCAxMS4wNzdjLTEwLjExNyAwLTE4LjU0NCA3LjMyODgtMjAuMjE5IDE2Ljk2OWg0MC40MDZjLTEuNjc2LTkuNjM5LTEwLjA3MS0xNi45NjktMjAuMTg3LTE2Ljk2OXptLTIwLjE4OCAyNC4wNjNjMS42OTAyIDkuNjIyIDEwLjA4MyAxNi45NjggMjAuMTg4IDE2Ljk2OCAxMC4xMDUgMCAxOC40OTgtNy4zNDQgMjAuMTg3LTE2Ljk2OHoiIGZpbGw9InVybCgjaCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMmUzNDM2IiBzdHJva2Utd2lkdGg9IjFweCIvPgogIDxwYXRoIGQ9Im0zMS40NjQgMTIuMDc3Yy05LjIyNiAwLTE2Ljk1IDYuNDQ5OC0xOC45NjkgMTUuMDYzaDM3LjkzOGMtMi4wMi04LjYxMy05Ljc0NC0xNS4wNjMtMTguOTY5LTE1LjA2M3ptLTE4Ljk2OSAyMy45NjljMi4wMTkyIDguNjEzIDkuNzQzIDE1LjAzMSAxOC45NjkgMTUuMDMxIDkuMjI1IDAgMTYuOTQ5LTYuNDE4IDE4Ljk2OS0xNS4wMzF6IiBmaWxsPSJub25lIiBzdHJva2U9InVybCgjZikiIHN0cm9rZS13aWR0aD0iMXB4Ii8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"robots,gnome robots,game robots,robots\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-robots.desktop\"\nLABEL oc.launch=\"gnome-robots.Gnome-robots\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Robots\"\nLABEL oc.displayname=\"Robots\"\nLABEL oc.path=\"/usr/games/gnome-robots\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Robots\"\nENV APPBIN \"/usr/games/gnome-robots\"\nENV APP \"/usr/games/gnome-robots\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/robots/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/robots/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/robots/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/robots/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update shotcut mesa-dri-gallium\nLABEL oc.icon=\"circle_shotcut.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZGVmcz4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItMTM2Ljk5IiBjeT0iMTk4LjY1IiByPSIzOC41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wOTgxOTYgMCAwIC4wODI0NzEgMjEuOTE4IC03LjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMjU2MWRiIiBzdG9wLW9wYWNpdHk9Ii45NDExOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwZDBkMGQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4yMzI1OCIgeT0iLS4yNDc5MSIgd2lkdGg9IjEuNDY1MiIgaGVpZ2h0PSIxLjQ5NTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMDYwNzE4NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImoiIHg9Ii0uMDExNjI5IiB5PSItLjAxMjM5NiIgd2lkdGg9IjEuMDIzMyIgaGVpZ2h0PSIxLjAyNDgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMDMwNDU1NDkxIi8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iYSIgeD0iLS4wNjI0NDQiIHk9Ii0uMDY2NTYiIHdpZHRoPSIxLjEyNDkiIGhlaWdodD0iMS4xMzMxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjA4NTUyNzgzNiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImkiIHg9Ii0uMDU1MjM5IiB5PSItLjA2NTY2IiB3aWR0aD0iMS4xMTA1IiBoZWlnaHQ9IjEuMTMxMyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NjI0MjQ3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4yMzI1OCIgeT0iLS4yNDc5MSIgd2lkdGg9IjEuNDY1MiIgaGVpZ2h0PSIxLjQ5NTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTEyMDkyMzUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjA1ODE0NSIgeT0iLS4wNjE5NzgiIHdpZHRoPSIxLjExNjMiIGhlaWdodD0iMS4xMjQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMTI4MDIzMDkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjE5NjI4IiB5PSItLjMwODc3IiB3aWR0aD0iMS4zOTI2IiBoZWlnaHQ9IjEuNjE3NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMi45ODc4MDM3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibiIgeD0iLS4xMDk3OCIgeT0iLS4xMjk5OSIgd2lkdGg9IjEuMjE5NiIgaGVpZ2h0PSIxLjI2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjE1MjI3ODI5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibSIgeD0iLS4xODk4NyIgeT0iLS4yNDMyMyIgd2lkdGg9IjEuMzc5NyIgaGVpZ2h0PSIxLjQ4NjUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMTUyMjc4MjkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI4LjQ2NjciIHgyPSI4LjQ2NjciIHkxPSIyODAuNiIgeTI9IjI5Ni40NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAxMiAwIDAgMS4wMTIgLS4xMDIgLTI4My41NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM5ZjlmOWYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iMjgyLjE4IiB5Mj0iMjk0Ljg4IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2NjYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iMjgzLjI0IiB5Mj0iMjkzLjgyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMjEyMTIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iLTIuOTIwMyIgeTI9IjE5Ljg0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjY2MiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJlYmViIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9Im8iIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjM0MTQxMDE2Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguNjk3NDYgMCAwIC42OTc0NiAyLjU2MTMgMi41NjYpIiBzdHJva2Utd2lkdGg9IjEuNDMzOCI+CiAgPGNpcmNsZSBjeD0iOC40NjY3IiBjeT0iOC40NiIgcj0iMTEuMzgiIGZpbHRlcj0idXJsKCNvKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iOC40NjY3IiBjeT0iOC40NiIgcj0iMTEuMzgiIGZpbGw9InVybCgjbCkiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI3Ljk2NjMiIGZpbGw9InVybCgjZSkiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI2LjM1IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNDMzOCIvPgogIDxjaXJjbGUgY3g9IjguNDY2NyIgY3k9IjguNDYiIHI9IjUuMjkxNyIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIxLjQzMzgiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI0LjExNiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlPSIjMGQyMjRkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjMzNjMzIi8+CiAgPGcgc3Ryb2tlLXdpZHRoPSIxLjQzMzgiPgogICA8cGF0aCBkPSJtNC45NDQ4IDYuNDcgMS40NjQ2IDAuODEwNDNzMC40NTc3MS0wLjQ3NzQ3IDAuNzcxOTItMC42ODYxNGMwLjM0ODE2LTAuMjMxMiAxLjEwNDctMC40MTU4NyAxLjA5MjUtMC4zNjA0N2wtMC4yNDA4Mi0xLjc2MjFzLTEuNjIxMy0wLjE2MDctMy4wODgyIDEuOTk4M3oiIGZpbGw9IiM0Njc4Y2MiIGZpbHRlcj0idXJsKCNuKSIgb3BhY2l0eT0iLjgiLz4KICAgPHBhdGggZD0ibTQuNzg3NyA2LjczIDEuNTY1IDAuNjk1MzlzLTAuMDg4MjkyIDAuMjAxNjItMC4xMjMwNyAwLjQyMDkzYy0wLjAzMTc5MSAwLjIwMDUyIDAuMDA0NDQgMC4zODYyMyAwLjAwNDQ0IDAuMzg2MjNsLTEuODA2Mi0wLjAxODNzMC4wNzIxOTMtMS4wMzU5IDAuMzU5OTEtMS40ODQyeiIgZmlsbD0iIzQ2NzhjYyIgZmlsdGVyPSJ1cmwoI20pIiBvcGFjaXR5PSIuOCIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0yODAuMDcpIiBmaWxsPSIjZmZmIj4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4xNTY4MyAtLjEzNTkxIC4xMzU5MSAuMTU2ODMgMzYuMjc4IDI0OC42OCkiIGN4PSItMjI4LjMzIiBjeT0iNDQuOTQ0IiByeD0iMy4wODMiIHJ5PSIxLjkwMjgiIGZpbGwtb3BhY2l0eT0iLjMiIGZpbHRlcj0idXJsKCNnKSIvPgogICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoLjEwMjkxIC0uMDg5MTggLjA4OTE4IC4xMDI5MSAyNi4xMTIgMjYyLjAzKSIgY3g9Ii0yMjguMSIgY3k9IjUxLjE2NiIgcng9IjEuOTE3OCIgcnk9IjEuMTgzNyIgZmlsbC1vcGFjaXR5PSIuMyIgZmlsdGVyPSJ1cmwoI2EpIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMTE4NzMgLS4wNzk0MjUgLjA3OTQyNSAuMTE4NzMgMjcuNDA2IDI1OS43NSkiIGN4PSItMjIyLjAzIiBjeT0iMTExLjcyIiByeD0iMTguNDE5IiByeT0iMTEuMzY4IiBmaWx0ZXI9InVybCgjaSkiIG9wYWNpdHk9Ii4yIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMTAyOTEgLS4wODkxOCAuMDg5MTggLjEwMjkxIDI2Ljc2NCAyNjEuNDYpIiBjeD0iLTIzNS4yOSIgY3k9Ijc1LjA0NiIgcng9IjMuNjY3IiByeT0iMi4yNjMzIiBmaWxsLW9wYWNpdHk9Ii4zIiBmaWx0ZXI9InVybCgjaikiLz4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4xMjUyMyAtLjEwODUzIC4xMDg1MyAuMTI1MjMgMjkuOTE4IDI1NC43KSIgY3g9Ii0yMzQuMjEiIGN5PSI4OC43NTkiIHJ4PSI2LjM4NTkiIHJ5PSIzLjk0MTMiIGZpbHRlcj0idXJsKCNrKSIvPgogICA8L2c+CiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiPgogICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoLjE0MDQ2IC0uMDgyODE0IC4wODI4MTQgLjE0MDQ2IDMxLjY1MSAyNTYuMDIpIiBjeD0iLTIyMi4wMyIgY3k9IjExMS43MiIgcng9IjE4LjQxOSIgcnk9IjExLjM2OCIgZmlsbD0iIzQzOTdlZSIgZmlsdGVyPSJ1cmwoI2YpIiBvcGFjaXR5PSIuNDUiLz4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4wODEzMjUgLS4wNzA0NzYgLjA3MDQ3NiAuMDgxMzI1IDIyLjA1OSAyNjcuMTMpIiBjeD0iLTIyOC4zMyIgY3k9IjQ0Ljk0NCIgcng9IjMuMDgzIiByeT0iMS45MDI4IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44NTQxNyIgZmlsdGVyPSJ1cmwoI2gpIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMDY5MTU2IC0uMDU5OTMgLjA1OTkzIC4wNjkxNTYgMjAuOCAyNzEuNDkpIiBjeD0iLTIyOC4xIiBjeT0iNTEuMTY2IiByeD0iMS45MTc4IiByeT0iMS4xODM3IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zIiBmaWx0ZXI9InVybCgjYSkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"shotcut,video,audio,editing,suite,mlt,4k,video4linux,blackmagic,decklink\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.shotcut.Shotcut.desktop\"\nLABEL oc.launch=\"shotcut.Shotcut\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Shotcut\"\nLABEL oc.displayname=\"Shotcut\"\nLABEL oc.path=\"/usr/bin/shotcut\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;application/vnd.mlt+xml;application/ogg;application/x-ogg;audio/ogg;audio/x-vorbis;audio/x-vorbis+ogg;video/ogg;video/x-ogm+ogg;video/x-theora+ogg;video/x-theora;audio/x-speex;audio/opus;application/x-flac;audio/flac;audio/x-flac;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;video/x-ms-asf;video/x-ms-asf-plugin;video/x-ms-asx;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;audio/x-pn-windows-acm;video/divx;video/msvideo;video/vnd.divx;video/x-avi;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/vnd.rn-realaudio;audio/x-pn-realaudio;audio/x-pn-realaudio-plugin;audio/x-real-audio;audio/x-realaudio;video/vnd.rn-realvideo;audio/mpeg;audio/mpg;audio/mp1;audio/mp2;audio/mp3;audio/x-mp1;audio/x-mp2;audio/x-mp3;audio/x-mpeg;audio/x-mpg;video/mp2t;video/mpeg;video/mpeg-system;video/x-mpeg;video/x-mpeg2;video/x-mpeg-system;application/mpeg4-iod;application/mpeg4-muxcodetable;application/x-extension-m4a;application/x-extension-mp4;audio/aac;audio/m4a;audio/mp4;audio/x-m4a;audio/x-aac;video/mp4;video/mp4v-es;video/x-m4v;application/x-quicktime-media-link;application/x-quicktimeplayer;video/quicktime;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/3gpp;audio/3gpp2;audio/AMR;audio/AMR-WB;audio/amr;audio/amr-wb;video/3gp;video/3gpp;video/3gpp2;x-scheme-handler/mms;x-scheme-handler/mmsh;x-scheme-handler/rtsp;x-scheme-handler/rtp;x-scheme-handler/rtmp;x-scheme-handler/icy;x-scheme-handler/icyx;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-player;application/x-cd-image;application/ram;application/xspf+xml;audio/mpegurl;audio/x-mpegurl;audio/scpls;audio/x-scpls;text/google-video-pointer;text/x-google-video-pointer;video/vnd.mpegurl;application/vnd.apple.mpegurl;application/vnd.ms-asf;application/vnd.ms-wpl;application/sdp;audio/dv;video/dv;audio/x-aiff;audio/x-pn-aiff;video/x-anim;video/x-nsv;video/fli;video/flv;video/x-flc;video/x-fli;video/x-flv;audio/wav;audio/x-pn-au;audio/x-pn-wav;audio/x-wav;audio/ac3;audio/eac3;audio/vnd.dts;audio/vnd.dts.hd;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/vnd.dolby.mlp;audio/basic;audio/midi;audio/x-ape;audio/x-gsm;audio/x-musepack;audio/x-tta;audio/x-wavpack;audio/x-shorten;application/x-shockwave-flash;application/x-flash-video;misc/ultravox;image/vnd.rn-realpix;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-xm;application/mxf;\"\nLABEL oc.fileextensions=\"mlt\"\nLABEL oc.legacyfileextensions=\"mlt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Shotcut\"\nENV APPBIN \"/usr/bin/shotcut\"\nENV APP \"/usr/bin/shotcut\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/shotcut/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/shotcut/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/shotcut/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/shotcut/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update stellarium\nLABEL oc.icon=\"stellarium.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgaWQ9InN2ZzgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEyLjcgMTIuNyIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcyBpZD0iZGVmczIiPjxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNTM0MyI+PHBhdGggZD0ibSAzLjA2ODgzNTEsMjg1LjU1Njc3IGMgLTEuNjEzNTY4LDEuMTk1OTYgLTIuNTY2MjE4MSwzLjA4NDc4IC0yLjU2ODgzNTA5LDUuMDkzMjMgMCwzLjUwNzAxIDIuODQyOTkyMTksNi4zNSA2LjM1MDAwMDA5LDYuMzUgQyAxMC4zNTcwMDgsMjk3IDEzLjIsMjk0LjE1NzAxIDEzLjIsMjkwLjY1IGMgLTAuMDAyMiwtMC44NDI5NiAtMC40NTIwNzgsLTIuNzEyNzEgLTAuNTAwMjI4LC0yLjQ1MzU5IC0wLjAyNDI0LDAuODQxMjEgLTAuNTcxODA5LDIuMzUzMjIgLTAuNjAyMDMxLDIuMjMxMzggLTAuMDAyNiwtMC41MDYyMSAtMC4yODc2LC0xLjQyNjI2IC0wLjMwNTA5OCwtMS4xOTUwOSAwLjAyODA0LDEuNDA2OTUgLTEuNDgzNzQsMy4xNzY3NyAtMi4zMDc2NjIzLDMuNTAwMzggLTAuODMxMDQ1NywwLjM2OTQyIC0xLjczNzE2MzcsMC41NjQxMiAtMi42MTE3MjY3LDAuNTY1MzQgLTAuMTczNjkxOCwyZS01IC0xLjE2ODY1MTksLTAuMTM4MDcgLTEuNjQ0MzQzOSwtMC43MDQzNSAtMC44MjYzNzYsLTAuODkyNTMgLTAuMDAyMDEsLTEuMDk5OTQgMC40NjI1MDM5LC0xLjI3MzMxIDAuNTA1NTg2MiwtMC4xODg3MSAxLjAzMDg4NywtMC4zMDk2OSAxLjUyMDMyMTIsLTAuNDIwMTMgMC43NDU2OTg4LC0wLjE2ODI2IDAuNDcxMDYxOCwtMC41MjYyNiAwLjEwNDkwMjgsLTAuNjI4OSAtMC45MjY2OTM5LC0wLjI1OTc2IC0yLjA0NDg4NiwwLjMzNTQzIC0yLjg2NTQ1NzksMC4zMDU5MyAtMC44NDg0MDYsLTAuMDI5MSAtMC44MDQ2MTgsLTEuNjk2MjEgLTAuMTQwNTYwMSwtMS43NjIxNyAwLjczOTQyMTIsLTAuMDczNCAxLjY2NjUxNTEsLTAuNTEwNzkgMS40NjE3NzksLTAuNjU2NzMgLTAuODMwMzU0OSwtMC42MTY3MiAtMC45NjE3MzY5LC0wLjc5MDgxIC0xLjA1OTU1NDksLTEuMTY0MTggLTAuMTQ4MDIwMSwtMC41NjUgMC4zNDEyODIsLTEuMDM1NTcgMC4wNTc3NywtMC45NjM1NiAtMC4yNTk2MTY5LDAuMDggLTAuNDExMDY3OCwwLjE1NjQxIC0wLjU5ODg2MTksMC4yNTcxNSAtMC4xNjcyOTI5LDAuMDg5NyAtMC4yOTM4MTQsMC4wNTQ2IC0wLjY3NTE4NDEsMC4wMDIgLTAuMzI0OTQ0OSwtMC4wNDUgLTAuMzg3MDA1OCwtMC4wNTU3IC0wLjM3NTUwMDksLTAuMjU2NzMgMC4wMTE1LC0wLjIwMDk3IDAuMDcyOTUsLTAuNTIxMjUgLTAuMDUyMjMsLTAuNDc2NDggeiIgaWQ9InBhdGg1MzQ1IiBzdHlsZT0iZmlsbDojN2FhZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjAxMDQ1OTQyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQ1NDMiPjxwYXRoIGQ9Im0gMS43NzYwMDg4LDI5MS41Njk2IGMgLTEuODI2MTMzMzksMC4xNzQzNCAtMy4yOTQwMzE1LDAuOTE5MzQgLTMuNDkwMzk5NiwyLjE2NDUxIC0wLjI2MjkwNTQsMS42NjcyOSAxLjU2Nzg1OTEsMy4zNDEyNyA0LjA4OTEyMTMsMy43Mzg5MyAxLjIxNzIwODQsMC4xOTExOSAyLjQzNDIzNCwwLjA1MyAzLjM4MDc0MjMsLTAuMzgzODcgMC43MzEwMTk0LDAuNTI4MyAxLjY2OTM1NywwLjkwMDc4IDIuNjcwNDcyMSwxLjA2MDA4IDIuNTIxMjY5MSwwLjM5NzcxIDQuNzc4MzM4MSwtMC42MzE1IDUuMDQxMjgwMSwtMi4yOTg4IDAuMjYyOTA1LC0xLjY2NzMgLTEuNDkwNjY3LC0xLjk0MzI5IC00LjI1NzE2MywtMi4xNzkzOCAtMi43NjY0OTU4LC0wLjIzNjA5IC0zLjYxNjM4OTYsLTEuNjg4MzkgLTUuNzQ3MDQ0OCwtMi4wNDU3NSAtMC41NjYwMTkxLC0wLjA4OTMgLTEuMTM4MDgwOCwtMC4xMDgxNyAtMS42ODcwMDg0LC0wLjA1NTcgeiIgaWQ9InBhdGg0NTQ1IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM2NjY2NjY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMTE2NjY2NTY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGlkPSJsYXllcjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4NC4zKSI+PGNpcmNsZSBjeD0iNi4zNDk5OTk5IiBjeT0iMjkwLjY0OTk5IiBpZD0icGF0aDQ1MTQiIHI9IjYuMzQ5OTk5OSIgc3R5bGU9ImZpbGw6I2FhY2NmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS43NDY1ODgxMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQ1NDMpIiBkPSJtIDEyLjcsMjkwLjY0OTk5IGEgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSAtNi4zNTAwMDAxLDYuMzUgQSA2LjM0OTk5OTksNi4zNDk5OTk5IDAgMCAxIDAsMjkwLjY0OTk5IGEgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSA2LjM0OTk5OTksLTYuMzUgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSA2LjM1MDAwMDEsNi4zNSB6IiBpZD0icGF0aDQ1MTQtMyIgc3R5bGU9ImZpbGw6IzY2NjY2NjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS43NDY1ODgxMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIvPjxnIGlkPSJnNDY3Ny05IiBzdHlsZT0iZmlsbDojNWI5OWY4O2ZpbGwtb3BhY2l0eToxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOS4xNTI0OTU4LC0zLjUyNDkyMzIpIj48cGF0aCBkPSJtIDE5LjU2NzQ1OCwyOTEuNzc1NjEgYSAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAwIC0wLjQ2ODk5MiwtMC4zNjQ2NyAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAxIC0wLjM2NTExNiwzLjA0NzM0IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDEgLTMuMDQ2NDYsMC4zNjYgMi40ODY2ODExLDIuNDg2NjgxMSAwIDAgMCAwLjM2NDIzMSwwLjQ2NzY2IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMy41MTYzMzcsNC41ZS00IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMCwtMy41MTY3OCB6IiBpZD0icGF0aDQ1MjYtNjkiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41NjA1MDIyOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PHBhdGggZD0ibSA2LjQxODUxNDUsMjk0LjIzMjk5IC0wLjM1NjYyNDksLTAuMjUzOTQgLTAuMzU2NjI0OSwwLjI1Mzk0IDAuMDQxNjAyLC0wLjQzNTgyIC0wLjM5ODIyNjcsLTAuMTgxODcgMC4zOTgyMjY3LC0wLjE4MTg4IC0wLjA0MTYwMiwtMC40MzU4MiAwLjM1NjYyNSwwLjI1Mzk0IDAuMzU2NjI0OSwtMC4yNTM5NCAtMC4wNDE2MDIsMC40MzU4MiAwLjM5ODIyNjcsMC4xODE4OCAtMC4zOTgyMjY3LDAuMTgxODcgeiIgaWQ9InBhdGg0NTYxLTMzIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMTY4ODgxLC0wLjY0NDgzNTY1LDAuNjQ0ODM1NjUsMS4xMTY4ODgxLC0xODMuMzc4MjEsLTMyLjQ5MTY2NikiLz48Y2lyY2xlIGN4PSIxMS4zMTU4NTUiIGN5PSIyOTMuNzIzOTQiIGlkPSJwYXRoNDYyMS04IiByPSIwLjMwMjY3ODI2IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuOTg5NDk2MjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxjaXJjbGUgY3g9IjE1LjU3NTQyMSIgY3k9IjI5MC4yMjA3OSIgaWQ9InBhdGg0NjI1LTAiIHI9IjAuMzU4MjY4ODkiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My42OTkzOTgwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PGNpcmNsZSBjeD0iMTcuMTY4NjIzIiBjeT0iMjkyLjAxNDg5IiBpZD0icGF0aDQ2MjUtNS01IiByPSIwLjIyNjQ5Njk5IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMzM4NzUyOTk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGQ9Im0gNi40MTg1MTQ1LDI5NC4yMzI5OSAtMC4zNTY2MjQ5LC0wLjI1Mzk0IC0wLjM1NjYyNDksMC4yNTM5NCAwLjA0MTYwMiwtMC40MzU4MiAtMC4zOTgyMjY3LC0wLjE4MTg3IDAuMzk4MjI2NywtMC4xODE4OCAtMC4wNDE2MDIsLTAuNDM1ODIgMC4zNTY2MjUsMC4yNTM5NCAwLjM1NjYyNDksLTAuMjUzOTQgLTAuMDQxNjAyLDAuNDM1ODIgMC4zOTgyMjY3LDAuMTgxODggLTAuMzk4MjI2NywwLjE4MTg3IHoiIGlkPSJwYXRoNDU2MS0xLTYiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS41OTk5MTY0NjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjY4NzMwMTcyLC0wLjM5NjgxMzg1LDAuMzk2ODEzODUsMC42ODczMDE3MiwtMTA2LjEzNzk2LDk0LjI3OTU3NikiLz48L2c+PGcgaWQ9Imc0Njc3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOS4zMjk0NTE3LC0zLjc0MjMyMjQpIj48cGF0aCBkPSJtIDE5LjU2NzQ1OCwyOTEuNzc1NjEgYSAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAwIC0wLjQ2ODk5MiwtMC4zNjQ2NyAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAxIC0wLjM2NTExNiwzLjA0NzM0IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDEgLTMuMDQ2NDYsMC4zNjYgMi40ODY2ODExLDIuNDg2NjgxMSAwIDAgMCAwLjM2NDIzMSwwLjQ2NzY2IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMy41MTYzMzcsNC41ZS00IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMCwtMy41MTY3OCB6IiBpZD0icGF0aDQ1MjYiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41NjA1MDIyOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PHBhdGggZD0ibSA2LjQxODUxNDUsMjk0LjIzMjk5IC0wLjM1NjYyNDksLTAuMjUzOTQgLTAuMzU2NjI0OSwwLjI1Mzk0IDAuMDQxNjAyLC0wLjQzNTgyIC0wLjM5ODIyNjcsLTAuMTgxODcgMC4zOTgyMjY3LC0wLjE4MTg4IC0wLjA0MTYwMiwtMC40MzU4MiAwLjM1NjYyNSwwLjI1Mzk0IDAuMzU2NjI0OSwtMC4yNTM5NCAtMC4wNDE2MDIsMC40MzU4MiAwLjM5ODIyNjcsMC4xODE4OCAtMC4zOTgyMjY3LDAuMTgxODcgeiIgaWQ9InBhdGg0NTYxIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMTY4ODgxLC0wLjY0NDgzNTY1LDAuNjQ0ODM1NjUsMS4xMTY4ODgxLC0xODMuMzc4MjEsLTMyLjQ5MTY2NikiLz48Y2lyY2xlIGN4PSIxMS4zMTU4NTUiIGN5PSIyOTMuNzIzOTQiIGlkPSJwYXRoNDYyMSIgcj0iMC4zMDI2NzgyNiIgc3R5bGU9Im9wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjk4OTQ5NjIzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiLz48Y2lyY2xlIGN4PSIxNS41NzU0MjEiIGN5PSIyOTAuMjIwNzkiIGlkPSJwYXRoNDYyNSIgcj0iMC4zNTgyNjg4OSIgc3R5bGU9Im9wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjY5OTM5ODA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiLz48Y2lyY2xlIGN4PSIxNy4xNjg2MjMiIGN5PSIyOTIuMDE0ODkiIGlkPSJwYXRoNDYyNS01IiByPSIwLjIyNjQ5Njk5IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMzM4NzUyOTk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGQ9Im0gNi40MTg1MTQ1LDI5NC4yMzI5OSAtMC4zNTY2MjQ5LC0wLjI1Mzk0IC0wLjM1NjYyNDksMC4yNTM5NCAwLjA0MTYwMiwtMC40MzU4MiAtMC4zOTgyMjY3LC0wLjE4MTg3IDAuMzk4MjI2NywtMC4xODE4OCAtMC4wNDE2MDIsLTAuNDM1ODIgMC4zNTY2MjUsMC4yNTM5NCAwLjM1NjYyNDksLTAuMjUzOTQgLTAuMDQxNjAyLDAuNDM1ODIgMC4zOTgyMjY3LDAuMTgxODggLTAuMzk4MjI2NywwLjE4MTg3IHoiIGlkPSJwYXRoNDU2MS0xIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMC42ODczMDE3MiwtMC4zOTY4MTM4NSwwLjM5NjgxMzg1LDAuNjg3MzAxNzIsLTEwNi4xMzc5Niw5NC4yNzk1NzYpIi8+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"stellarium,stellarium,astronomy\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.stellarium.Stellarium.desktop\"\nLABEL oc.launch=\"stellarium.stellarium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Stellarium\"\nLABEL oc.displayname=\"Stellarium\"\nLABEL oc.path=\"/usr/bin/stellarium\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-stellarium-script;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Stellarium\"\nENV APPBIN \"/usr/bin/stellarium\"\nENV APP \"/usr/bin/stellarium\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/stellarium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/stellarium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/stellarium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/stellarium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update step\nLABEL oc.icon=\"step.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ExQTdBRjsiIGQ9Ik00MjAsNDZIOTJjLTI0LjI2MiwwLTQ0LDE5LjczOC00NCw0NHYzMTJjMCw2LjYyNyw1LjM3MywxMiwxMiwxMnMxMi01LjM3MywxMi0xMlY5MA0KCWMwLTExLjAyOCw4Ljk3Mi0yMCwyMC0yMGgzMjhjMTEuMDI4LDAsMjAsOC45NzIsMjAsMjB2MzEyYzAsNi42MjcsNS4zNzMsMTIsMTIsMTJzMTItNS4zNzMsMTItMTJWOTBDNDY0LDY1LjczOCw0NDQuMjYyLDQ2LDQyMCw0NnoNCgkiLz4NCjxnPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiM1NTYwNkU7IiBkPSJNMjQ4LDI1OGMwLDQuNDE4LDMuNTgyLDgsOCw4czgtMy41ODIsOC04VjcwaC0xNlYyNTh6Ii8+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzU1NjA2RTsiIGQ9Ik0zNzAuNjkyLDcwaC0xNy42NTNsODAuODU0LDE3My4zOTJjMS4xODMsMi41MzksMy41MjksNC4xNjIsNi4xMDcsNC41MzZ2LTI5LjI5NkwzNzAuNjkyLDcweiIvPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiM1NTYwNkU7IiBkPSJNNDQ0LjUyMywyNDcuMjYyYzQuMDA0LTEuODY3LDUuNzM3LTYuNjI3LDMuODY5LTEwLjYzMUw0NDAsMjE4LjYzMnYyOS4yOTYNCgkJYzAuMzc5LDAuMDU1LDAuNzYyLDAuMDg1LDEuMTQ3LDAuMDg1QzQ0Mi4yNzksMjQ4LjAxMyw0NDMuNDMsMjQ3Ljc3MSw0NDQuNTIzLDI0Ny4yNjJ6Ii8+DQo8L2c+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkY4Qzc4OyIgZD0iTTI1NiwyNThjLTI2LjQ2OCwwLTQ4LDIxLjUzMy00OCw0OHMyMS41MzIsNDgsNDgsNDhzNDgtMjEuNTMzLDQ4LTQ4UzI4Mi40NjgsMjU4LDI1NiwyNTh6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojREI2QjVFOyIgZD0iTTI3MiwzNDZjLTI2LjQ2OCwwLTQ4LTIxLjUzMy00OC00OGMwLTE1LjU2LDcuNDQ4LTI5LjQwOSwxOC45Ni0zOC4xODUNCglDMjIyLjgxMSwyNjUuNTEyLDIwOCwyODQuMDUzLDIwOCwzMDZjMCwyNi40NjcsMjEuNTMyLDQ4LDQ4LDQ4YzEwLjkwNywwLDIwLjk3MS0zLjY2MywyOS4wNC05LjgxNQ0KCUMyODAuODkxLDM0NS4zNTgsMjc2LjUyLDM0NiwyNzIsMzQ2eiIvPg0KPHBhdGggc3R5bGU9ImZpbGw6IzU1NjA2RTsiIGQ9Ik0xNDQsMjU4YzAsNC40MTgsMy41ODIsOCw4LDhzOC0zLjU4Miw4LThWNzBoLTE2VjI1OHoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRjhDNzg7IiBkPSJNMTUyLDI1OGMtMjYuNDY4LDAtNDgsMjEuNTMzLTQ4LDQ4czIxLjUzMiw0OCw0OCw0OHM0OC0yMS41MzMsNDgtNDhTMTc4LjQ2OCwyNTgsMTUyLDI1OHoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNEQjZCNUU7IiBkPSJNMTY4LDM0NmMtMjYuNDY4LDAtNDgtMjEuNTMzLTQ4LTQ4YzAtMTUuNTYsNy40NDgtMjkuNDA5LDE4Ljk2LTM4LjE4NQ0KCUMxMTguODExLDI2NS41MTIsMTA0LDI4NC4wNTMsMTA0LDMwNmMwLDI2LjQ2NywyMS41MzIsNDgsNDgsNDhjMTAuOTA3LDAsMjAuOTcxLTMuNjYzLDI5LjA0LTkuODE1DQoJQzE3Ni44OTEsMzQ1LjM1OCwxNzIuNTIsMzQ2LDE2OCwzNDZ6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkY4Qzc4OyIgZD0iTTUwNC45MzIsMjYzLjIyOWMtNS40MTktMTEuNjItMTUuMDM4LTIwLjQzNS0yNy4wODYtMjQuODJjLTEyLjA1LTQuMzg2LTI1LjA4NC0zLjgxNi0zNi43MDMsMS42MDMNCgljLTIzLjk4NywxMS4xODUtMzQuNDAyLDM5LjgtMjMuMjE3LDYzLjc4OGM4LjEzNiwxNy40NDYsMjUuNDg3LDI3LjcxMyw0My41NzYsMjcuNzEyYzYuNzgyLDAsMTMuNjcxLTEuNDQ0LDIwLjIxMi00LjQ5NQ0KCUM1MDUuNzAxLDMxNS44MzIsNTE2LjExNiwyODcuMjE2LDUwNC45MzIsMjYzLjIyOXoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNEQjZCNUU7IiBkPSJNNDgwLjA3MSwzMjJjLTE4LjA4OSwwLjAwMS0zNS40NC0xMC4yNjYtNDMuNTc2LTI3LjcxMmMtOS40MS0yMC4xODEtMy41MjktNDMuNjM0LDEyLjg1Ny01Ny4yMzENCgljLTIuNzkxLDAuNzMyLTUuNTM5LDEuNzA5LTguMjA5LDIuOTU0Yy0yMy45ODcsMTEuMTg1LTM0LjQwMiwzOS44LTIzLjIxNyw2My43ODhjOC4xMzYsMTcuNDQ2LDI1LjQ4NywyNy43MTMsNDMuNTc2LDI3LjcxMg0KCWM2Ljc4MiwwLDEzLjY3MS0xLjQ0NCwyMC4yMTItNC40OTVjMy44MTQtMS43NzksNy4yODItNC4wMDEsMTAuMzc4LTYuNTczQzQ4OC4xMDksMzIxLjQ4Miw0ODQuMDcyLDMyMiw0ODAuMDcxLDMyMnoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiMzQzlGRTg7IiBkPSJNNDcyLDM5NEg0MGMtMjIuMDU2LDAtNDAsMTcuOTQ0LTQwLDQwdjI0YzAsNC40MTgsMy41ODIsOCw4LDhoNDk2YzQuNDE4LDAsOC0zLjU4Miw4LTh2LTI0DQoJQzUxMiw0MTEuOTQ0LDQ5NC4wNTYsMzk0LDQ3MiwzOTR6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojNDI3RkM5OyIgZD0iTTAsNDQyLjMzM1Y0NThjMCw0LjQxOCwzLjU4Miw4LDgsOGg0OTZjNC40MTgsMCw4LTMuNTgyLDgtOHYtMTUuNjY3SDB6Ii8+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"step,step\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.step.desktop\"\nLABEL oc.launch=\"step.step\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Step\"\nLABEL oc.displayname=\"Step\"\nLABEL oc.path=\"/usr/bin/step\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-step;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Step\"\nENV APPBIN \"/usr/bin/step\"\nENV APP \"/usr/bin/step\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/step/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/step/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/step/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/step/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends at-spi2-core gnome-terminal dbus-x11 stress && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"stress.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDk2LjgiIGhlaWdodD0iNDk2LjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbD0iIzZlYzZmMCIgZD0ibTE1Miw0ODRjMCw2LjQgLTUuNiwxMiAtMTIsMTJsMCwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsLTQ3MmMwLC02LjQgNS42LC0xMiAxMiwtMTJsMCwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDQ3MnoiLz4KICA8cGF0aCBpZD0ic3ZnXzMiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0yMDgsNDg0YzAsNi40IC01LjYsMTIgLTEyLDEybDAsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLC00NzJjMCwtNi40IDUuNiwtMTIgMTIsLTEybDAsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCw0NzJ6Ii8+CiAgPHBhdGggaWQ9InN2Z181IiBmaWxsPSIjNmVjNmYwIiBkPSJtMzEyLDQ4NGMwLDYuNCAtNS42LDEyIC0xMiwxMmwwLDBjLTYuNCwwIC0xMiwtNS42IC0xMiwtMTJsMCwtNDcyYzAsLTYuNCA1LjYsLTEyIDEyLC0xMmwwLDBjNi40LDAgMTIsNS42IDEyLDEybDAsNDcyeiIvPgogIDxwYXRoIGlkPSJzdmdfNyIgZmlsbD0iIzZlYzZmMCIgZD0ibTM2OCw0ODRjMCw2LjQgLTUuNiwxMiAtMTIsMTJsMCwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsLTQ3MmMwLC02LjQgNS42LC0xMiAxMiwtMTJsMCwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDQ3MnoiLz4KICA8cGF0aCBpZD0ic3ZnXzkiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0yNjAsNDg0YzAsNi40IC01LjYsMTIgLTEyLDEybDAsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLC00NzJjMCwtNi40IDUuNiwtMTIgMTIsLTEybDAsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCw0NzJ6Ii8+CiAgPHBhdGggaWQ9InN2Z18xMSIgZmlsbD0iIzZlYzZmMCIgZD0ibTEyLjgsMTUyYy03LjIsMCAtMTIuOCwtNC44IC0xMi44LC0xMmwwLDBjMCwtNy4yIDUuNiwtMTIgMTIuOCwtMTJsNDcxLjIsMGM3LjIsMCAxMi44LDQuOCAxMi44LDEybDAsMGMwLDcuMiAtNS42LDEyIC0xMi44LDEybC00NzEuMiwweiIvPgogIDxwYXRoIGlkPSJzdmdfMTMiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im00OTYsMTk2YzAsNi40IC01LjYsMTIgLTEyLDEybC00NzIsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLDBjMCwtNi40IDUuNiwtMTIgMTIsLTEybDQ3MiwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDB6Ii8+CiAgPHBhdGggaWQ9InN2Z18xNSIgZmlsbD0iIzZlYzZmMCIgZD0ibTQ5NiwzMDBjMCw2LjQgLTUuNiwxMiAtMTIsMTJsLTQ3MiwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsMGMwLC02LjQgNS42LC0xMiAxMiwtMTJsNDcyLDBjNi40LDAgMTIsNS42IDEyLDEybDAsMHoiLz4KICA8cGF0aCBpZD0ic3ZnXzE3IiBmaWxsPSIjNmVjNmYwIiBkPSJtNDk2LDI1MWMwLDYuNCAtNS42LDEyIC0xMiwxMmwtNDcyLDBjLTYuNCwwIC0xMiwtNS42IC0xMiwtMTJsMCwwYzAsLTYuNCA1LjYsLTEyIDEyLC0xMmw0NzIsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCwweiIvPgogIDxwYXRoIGlkPSJzdmdfMTkiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0xMi44LDM2OGMtNy4yLDAgLTEyLjgsLTQuOCAtMTIuOCwtMTJsMCwwYzAsLTcuMiA1LjYsLTEyIDEyLjgsLTEybDQ3MS4yLDBjNy4yLDAgMTIuOCw0LjggMTIuOCwxMmwwLDBjMCw3LjIgLTUuNiwxMiAtMTIuOCwxMmwtNDcxLjIsMHoiLz4KICA8cGF0aCBpZD0ic3ZnXzIxIiBmaWxsPSIjMzYzRjNFIiBkPSJtNDA4LDM4MS42YzAsMTQuNCAtMTIsMjYuNCAtMjYuNCwyNi40bC0yNTkuMiwwYy0xNC40LDAgLTI2LjQsLTEyIC0yNi40LC0yNi40bDAsLTI1OS4yYzAsLTE0LjQgMTIsLTI2LjQgMjYuNCwtMjYuNGwyNTkuMiwwYzE0LjQsMCAyNi40LDEyIDI2LjQsMjYuNGwwLDI1OS4yeiIvPgogIDxwYXRoIGlkPSJzdmdfMjIiIGQ9Im05NiwxMjIuNGMwLC0xNC40IDEyLC0yNi40IDI2LjQsLTI2LjRsMjU5LjIsMGMxNC40LDAgMjYuNCwxMiAyNi40LDI2LjRsMCwyNTkuMmMwLDE0LjQgLTEyLDI2LjQgLTI2LjQsMjYuNCIvPgogIDxwYXRoIGlkPSJzdmdfMjMiIGZpbGw9IiM0OTUxNTAiIGQ9Im0zNTIsMzM1LjJjMCw5LjYgLTcuMiwxNi44IC0xNi44LDE2LjhsLTE2Ni40LDBjLTkuNiwwIC0xNi44LC03LjIgLTE2LjgsLTE2LjhsMCwtMTY2LjRjMCwtOS42IDcuMiwtMTYuOCAxNi44LC0xNi44bDE2Ni40LDBjOS42LDAgMTYuOCw3LjIgMTYuOCwxNi44bDAsMTY2LjR6Ii8+CiAgPGcgaWQ9InN2Z18yOSIvPgogIDxnIGlkPSJzdmdfMzAiLz4KICA8ZyBpZD0ic3ZnXzMxIi8+CiAgPGcgaWQ9InN2Z18zMiIvPgogIDxnIGlkPSJzdmdfMzMiLz4KICA8ZyBpZD0ic3ZnXzM0Ii8+CiAgPGcgaWQ9InN2Z18zNSIvPgogIDxnIGlkPSJzdmdfMzYiLz4KICA8ZyBpZD0ic3ZnXzM3Ii8+CiAgPGcgaWQ9InN2Z18zOCIvPgogIDxnIGlkPSJzdmdfMzkiLz4KICA8ZyBpZD0ic3ZnXzQwIi8+CiAgPGcgaWQ9InN2Z180MSIvPgogIDxnIGlkPSJzdmdfNDIiLz4KICA8ZyBpZD0ic3ZnXzQzIi8+CiA8L2c+Cjwvc3ZnPg==\"\nLABEL oc.keyword=\"stress,stress,cpu,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"gnome-terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.stress\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=stress\"\nLABEL oc.name=\"stress\"\nLABEL oc.displayname=\"stress\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"stress\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=stress\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/stress/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/stress/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/stress/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/stress/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl -Ls https://download.sublimetext.com/sublimehq-pub.gpg | apt-key add -a\nRUN echo \"deb https://download.sublimetext.com/ apt/stable/\" | tee /etc/apt/sources.list.d/sublime-text.list\nRUN apt-get update && apt-get install --yes libgl1 && apt-get clean\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y sublime-text && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_sublime-text.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iU3VibGltZS1UZXh0IiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InN1YmxpbWUtaWNvbi1iIiB4MT0iMTkzLjU5IiB4Mj0iMjExLjQ5IiB5MT0iNDE0LjU2IiB5Mj0iMzI0Ljc1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuODcxNyAwIDAgMS4yNDc4IDE4Mi4wNSAxNTkuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNGRjk3MDAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjRjQ4RTAwIiBvZmZzZXQ9Ii41MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjQ0U2RTAwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjUyMC40NCIgeDI9IjUyMCIgeTE9IjM2LjgyMiIgeTI9Ijk4NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0ZDRkNGQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzIzMjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjUyMCIgeDI9IjUyMCIgeTE9IjQiIHkyPSIxMDI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmOWY5ZjkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDQxMzc3IiB5PSItLjAzMTg2IiB3aWR0aD0iMS4wODI4IiBoZWlnaHQ9IjEuMDYzNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi43NzE0MDczIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IHgxPSI1MjAiIHgyPSI1MjAiIHkxPSI0IiB5Mj0iMTAyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTA0Njg4Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDYzODA5IDAgMCAuMDYzODA5IC0uNjY5OTkgLS42Njk5OSkiIHN0cm9rZS13aWR0aD0iMTUuNjcyIj4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzAuMTYiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMCIgc3Ryb2tlLXdpZHRoPSIwIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICA8ZyBpZD0ic2hhZG93IiB0cmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIiBmaWxsPSJ1cmwoI2EpIiBzdHJva2Utd2lkdGg9IjE1LjY3MiI+PC9nPgogICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1MTIiIHI9IjQ3MC4xNiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLW1pdGVybGltaXQ9IjAiIHN0cm9rZS13aWR0aD0iMCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMTQuNDgzIDMuODgwNykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iMjQuMDQ1Ij4KICAgIDxwYXRoIGQ9Im03MDguMjggNTEyLjA4YzAtNS45ODE2LTQuNDE5Mi05LjQzMDgtOS44NDI0LTcuNzE3MWwtMzczLjA4IDExOC4zNGMtNS40MzQgMS43MjQ2LTkuODQyNCA3Ljk3OS05Ljg0MjQgMTMuOTV2MTIwLjk1YzAgNS45ODE2IDQuNDA4MyA5LjQ0MTcgOS44NDI0IDcuNzE3MWwzNzMuMDgtMTE4LjMzYzUuNDIzMS0xLjcyNDYgOS44NDI0LTcuOTc5IDkuODQyNC0xMy45NjF6Ii8+CiAgICA8cGF0aCBkPSJtMzE1LjUyIDUwOC45YzAgNS45ODEyIDQuNDA3NyAxMi4yMzUgOS44NDEgMTMuOTZsMzczLjA5IDExOC4zNWM1LjQzMzMgMS43MjQ1IDkuODQxLTEuNzM1NCA5Ljg0MS03LjcwNTd2LTEyMC45NmMwLTUuOTcwMy00LjQwNzctMTIuMjI0LTkuODQxLTEzLjk0OWwtMzczLjA5LTExOC4zNWMtNS40MzMzLTEuNzI0NS05Ljg0MSAxLjcyNDUtOS44NDEgNy43MDU3eiIvPgogICAgPHBhdGggZD0ibTcwOC4yOCAyNjMuODRjMC01Ljk4MTYtNC40MTkyLTkuNDQxNy05Ljg0MjQtNy43MTcxbC0zNzMuMDggMTE4LjMzYy01LjQzNCAxLjcyNDYtOS44NDI0IDcuOTc5MS05Ljg0MjQgMTMuOTYxdjEyMC45NWMwIDUuOTgxNiA0LjQwODMgOS40MzA4IDkuODQyNCA3LjcxNzFsMzczLjA4LTExOC4zNGM1LjQyMzEtMS43MjQ2IDkuODQyNC03Ljk3OSA5Ljg0MjQtMTMuOTV6Ii8+CiAgIDwvZz4KICA8L2c+CiAgPGcgc3Ryb2tlLXdpZHRoPSIyMy45NTEiPgogICA8cGF0aCBkPSJtNzIwIDUwNGMwLTUuOTU4Mi00LjQwMi05LjM5NC05LjgwMzktNy42ODY5bC0zNzEuNjMgMTE3Ljg4Yy01LjQxMjggMS43MTc5LTkuODAzOSA3Ljk0NzktOS44MDM5IDEzLjg5NXYxMjAuNDhjMCA1Ljk1ODIgNC4zOTExIDkuNDA0OCA5LjgwMzkgNy42ODdsMzcxLjYzLTExNy44N2M1LjQwMTktMS43MTc5IDkuODAzOS03Ljk0NzkgOS44MDM5LTEzLjkwNnoiIGZpbGw9InVybCgjc3VibGltZS1pY29uLWIpIi8+CiAgIDxwYXRoIGQ9Im0zMjguNzcgNTAwLjgzYzAgNS45NTc4IDQuMzkwNSAxMi4xODcgOS44MDI2IDEzLjkwNWwzNzEuNjMgMTE3Ljg4YzUuNDEyIDEuNzE3OCA5LjgwMjYtMS43Mjg2IDkuODAyNi03LjY3NTZ2LTEyMC40OGMwLTUuOTQ3LTQuMzkwNS0xMi4xNzctOS44MDI2LTEzLjg5NGwtMzcxLjYzLTExNy44OGMtNS40MTItMS43MTc4LTkuODAyNiAxLjcxNzgtOS44MDI2IDcuNjc1NnoiIGZpbGw9IiNmZjk4MDAiLz4KICAgPHBhdGggZD0ibTcyMCAyNTYuNzNjMC01Ljk1ODItNC40MDItOS40MDQ4LTkuODAzOS03LjY4N2wtMzcxLjYzIDExNy44N2MtNS40MTI4IDEuNzE3OS05LjgwMzkgNy45NDc5LTkuODAzOSAxMy45MDZ2MTIwLjQ4YzAgNS45NTgyIDQuMzkxMSA5LjM5NCA5LjgwMzkgNy42ODdsMzcxLjYzLTExNy44OGM1LjQwMTktMS43MTc5IDkuODAzOS03Ljk0NzkgOS44MDM5LTEzLjg5NXoiIGZpbGw9IiNmZjk4MDAiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"sublime-text,ide,code,sublime-text\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"sublime_text.desktop\"\nLABEL oc.launch=\"sublime_text.Sublime_text\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"sublime-Text\"\nLABEL oc.displayname=\"sublime-Text\"\nLABEL oc.path=\"/opt/sublime_text/sublime_text\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"sublime-Text\"\nENV APPBIN \"/opt/sublime_text/sublime_text\"\nENV APP \"/opt/sublime_text/sublime_text\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/sublime-text/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/sublime-text/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/sublime-text/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/sublime-text/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-sudoku\nLABEL oc.icon=\"org.gnome.Sudoku.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjMxLjIyMiIgeDI9IjMxLjYyOCIgeTE9IjYxLjE0NyIgeTI9IjIuODUzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlhOWE5YSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0ic2lsdmVyIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjMxLjY0MSIgeDI9IjMyLjE2OCIgeTE9IjYxLjMzOSIgeTI9IjMuODEyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2VmYjUyOCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2U2OWM3NiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMS43MjIiIHgyPSIzMi4yNzgiIHkxPSI2Mi44NzMiIHkyPSIuNzQzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48ZmlsdGVyIGlkPSJhIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xNiIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMTUzIiB5PSItLjA5OCIgd2lkdGg9IjEuMzA2IiBoZWlnaHQ9IjEuMTk2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii4zNiIvPjwvZmlsdGVyPjwvZGVmcz48cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0NiAtLjU0NikiIGQ9Ik05MjkuODUgMjg5LjY1Yy0yLjM1LTQuMzUtNC45NS05LTcuNjUtMTMuNi0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1Qzc3My4yNSAxMDUuNyA2ODguNyA2MS42NSA1OTIuMiA0Ni4yNWMtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LS41NS0xOS44NS0uODUtMzAuMS0uODUtOS4zNSAwLTE4LjYuMjUtMjcuOS43NS0xMTguMzUgNi4xLTIyMC4zIDUxLjk1LTMwNS44NSAxMzcuNS0yMC41IDIwLjUtMzguNzUgNDEuOTUtNTQuNyA2NC40LTE1LjM1IDIxLjU1LTI4LjU1IDQ0LTM5LjYgNjcuMmwtLjAyNS0uMDI1UTQwLjA1IDQwMS44NzMgNDAuMDUgNTEyLjA1NWMwIDEzMC4zNSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjggNTYuNyA1Ni42NSAxMjAuNTUgOTUuOSAxOTEuMSAxMTcuNTUgMzYuNzUgMTEuMjUgNzQuOCAxNy44NSAxMTQuNzUgMTkuOTVoLjRjOC41LjQ1IDE2LjYuNyAyNC41LjdoM2MxMC4zIDAgMjAuNS0uMyAzMC4xLS44IDIuNS0uMTUgNC43NS0uMyA2Ljk1LS40NSAyMC4yLTEuNDUgMzkuOS00LjA1IDU4LjctNy43IDcuOTUtMS41NSAxNS44LTMuMyAyMy40LTUuMTUgODAuOC0yMC4zIDE1Mi4xNS02MS42IDIxNC42NS0xMjQuMSA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTguNDUtNDcuNjUgMjguNjUtOTguOCAzMC41NS0xNTMuNS4yLTYuMDUuMy0xMi4yNS4zLTE4LjV2LTNjLS4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTUuMDUtMTQuMjUtMTAuODUtMjguMjUtMTcuNDUtNDIuMTUtMS44NS0zLjgtMy43NS03LjY1LTUuNy0xMS41LTEuNDUtMi44NS0yLjk1LTUuNy00LjY1LTguOHoiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjYwIiByeD0iMzAiIHJ5PSIzMCIgZmlsbD0idXJsKCNiKSIvPjxyZWN0IHg9IjIxLjI4NiIgeT0iMjEuMjg2IiB3aWR0aD0iMjEuNDI5IiBoZWlnaHQ9IjIxLjQyOSIgcnk9IjAiIGZpbGw9InVybCgjYykiLz48ZyBmaWxsPSIjZmZmIj48cGF0aCBkPSJNMjYuNjE2IDIxLjI2NnEwIC44NjQtLjQ5MiAxLjM4LS40OC41MDQtMS4yODQuNjcydi4wNDhxMS4wMi4xMiAxLjUyNC42NDguNTE2LjUyOC41MTYgMS4zOCAwIC43NTYtLjM0OCAxLjMzMnQtMS4wOC45cS0uNzIuMzI0LTEuODYuMzI0LS42NzIgMC0xLjI0OC0uMTA4LS41NzYtLjA5Ni0xLjEwNC0uMzZ2LS45ODRxLjU0LjI3NiAxLjE2NC40MnQxLjIuMTQ0cTEuMTUyIDAgMS42NTYtLjQ0NC41MTYtLjQ1Ni41MTYtMS4yNDggMC0uODA0LS42MzYtMS4xNTItLjYyNC0uMzYtMS43NjQtLjM2aC0uODI4di0uOWguODRxMS4wNTYgMCAxLjU5Ni0uNDQ0LjU1Mi0uNDQ0LjU1Mi0xLjE3NiAwLS42MjQtLjQyLS45Ni0uNDItLjM0OC0xLjE0LS4zNDgtLjY5NiAwLTEuMTg4LjIwNHQtLjk3Mi41MTZsLS41MjgtLjcycS40NTYtLjM2IDEuMTI4LS42MjQuNjg0LS4yNjQgMS41NDgtLjI2NCAxLjM0NCAwIDEuOTkyLjYuNjYuNi42NiAxLjUyNHoiIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjUxOTggMCAwIDEuNDU5NyAtNC41NjUgLTIuMzcpIi8+PHBhdGggZD0iTTM1Ljg4NiAyOC42NzJxMCAxLjI2LS43NDggMi4wMTQtLjczLjczNi0xLjk1Mi45OHYuMDcxcTEuNTUuMTc1IDIuMzE3Ljk0Ni43ODQuNzcuNzg0IDIuMDE0IDAgMS4xMDQtLjUzIDEuOTQ1dC0xLjY0IDEuMzEzcS0xLjA5NS40NzMtMi44MjcuNDczLTEuMDIyIDAtMS44OTctLjE1Ny0uODc1LS4xNC0xLjY3OC0uNTI2VjM2LjMxcS44Mi40MDMgMS43Ny42MTN0MS44MjMuMjFxMS43NSAwIDIuNTE3LS42NDguNzg0LS42NjYuNzg0LTEuODIyIDAtMS4xNzMtLjk2Ny0xLjY4MS0uOTQ4LS41MjYtMi42OC0uNTI2aC0xLjI1OXYtMS4zMTRoMS4yNzdxMS42MDUgMCAyLjQyNS0uNjQ4Ljg0LS42NDguODQtMS43MTYgMC0uOTExLS42NC0xLjQwMi0uNjM3LS41MDgtMS43MzItLjUwOC0xLjA1NyAwLTEuODA1LjI5OHQtMS40NzcuNzUzbC0uODAzLTEuMDVxLjY5My0uNTI2IDEuNzE0LS45MTEgMS4wNC0uMzg2IDIuMzUzLS4zODYgMi4wNDMgMCAzLjAyOC44NzYgMS4wMDMuODc2IDEuMDAzIDIuMjI1eiIvPjwvZz48cGF0aCBkPSJNMjEuMjg2IDMuOTkyQTI5LjkxMyAyOS45MTMgMCAwIDAgMy45OTIgMjEuMjg2aDE3LjI5NHptMjEuNDI5IDB2MTcuMjk0aDE3LjI5NEEyOS45MTMgMjkuOTEzIDAgMCAwIDQyLjcxNSAzLjk5MnpNMy45OTMgNDIuNzE0YTI5LjkxMyAyOS45MTMgMCAwIDAgMTcuMjk0IDE3LjI5NFY0Mi43MTR6bTM4LjcyMiAwdjE3LjI5NGEyOS45MTMgMjkuOTEzIDAgMCAwIDE3LjI5NC0xNy4yOTR6IiBmaWxsPSJ1cmwoI2UpIi8+PC9zdmc+\"\nLABEL oc.keyword=\"sudoku,sudoku\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Sudoku.desktop\"\nLABEL oc.launch=\"org.gnome.Sudoku.org.gnome.Sudoku\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"sudoku\"\nLABEL oc.displayname=\"sudoku\"\nLABEL oc.path=\"/usr/bin/gnome-sudoku\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"sudoku\"\nENV APPBIN \"/usr/bin/gnome-sudoku\"\nENV APP \"/usr/bin/gnome-sudoku\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/sudoku/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/sudoku/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/sudoku/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/sudoku/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpinei.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update supertux mesa-gl mesa-egl mesa-dri-gallium\nLABEL oc.icon=\"circle_supertux.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iTXBsYXllciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjE2Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iLTIwLjU0MiIgeDI9Ii0yMy4wODUiIHkxPSI0MC44NTYiIHkyPSI0My4yOTciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTM2IDAgMCAxLjkxMzYgMTMwLjY3IDEyLjYwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2E5YTlhOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNhOWE5YTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSItNTkuNjEyIiB4Mj0iLTQzLjc5MiIgeTE9IjUxLjE4NiIgeTI9IjUxLjE4NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjkxMzYgMCAwIDEuOTEzNiAxMzAuNjcgMTIuNjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZDcwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM5OTgxMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMjI4LjgxIiB4Mj0iMjI4LjgxIiB5MT0iNjExLjE4IiB5Mj0iNjE0LjQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDMyNCAwIDAgMi4wMzI0IC0zODMuNzMgLTEyMTUuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9Ii00Ni4xMzUiIHgyPSItNDMuMjM0IiB5MT0iMjMuMTkiIHkyPSIyMi42NDUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTM2IDAgMCAxLjkxMzYgMTMwLjY3IDEyLjYwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIzMjMyMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMzIzMjMiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImkiIHgxPSItMjMuNDY1IiB4Mj0iLTEyLjA3IiB5MT0iNDQuNTc4IiB5Mj0iNDQuNTc4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuOTEzNiAwIDAgMS45MTM2IDEzMC42NyAxMi42MDcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSItMjcuNjY1IiB4Mj0iLTI2LjE4NiIgeTE9IjI2LjY3IiB5Mj0iMzYuNjM2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuOTEzNiAwIDAgMS45MTM2IDEzMC41OSAxMy4zMjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZGZkZmQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTZhNmE2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjMyIiB4Mj0iMzIiIHkxPSIyIiB5Mj0iNjIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZkZmRmZCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkY2RjZGMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjIiIHkyPSI2MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguODMzMzMgMCAwIC44MzMzMyA1LjMzMzMgNS4zMzMyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmJkZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQ3YTZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjA3MDE2NCIgeT0iLS4wNTI0MDgiIHdpZHRoPSIxLjE0MDMiIGhlaWdodD0iMS4xMDQ4IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjY5MzA1MSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzU1OSAwIDAgLjA2MzU1OSAtLjU0NTU1IC0uNTQ1NTUpIiBkPSJtOTI5Ljg1IDI4OS42NWMtMi4zNS00LjM1LTQuOTUtOS03LjY1LTEzLjYtMjAuMy0zNC41LTQ1LjgtNjcuMi03Ni4zNS05Ny43NS03Mi42LTcyLjYtMTU3LjE1LTExNi42NS0yNTMuNjUtMTMyLjA1LTE2LjI1LTIuNi0zMi44LTQuNC01MC4wNS01LjM1LTkuNy0wLjU1LTE5Ljg1LTAuODUtMzAuMS0wLjg1LTkuMzUgMC0xOC42IDAuMjUtMjcuOSAwLjc1LTExOC4zNSA2LjEtMjIwLjMgNTEuOTUtMzA1Ljg1IDEzNy41LTIwLjUgMjAuNS0zOC43NSA0MS45NS01NC43IDY0LjQtMTUuMzUgMjEuNTUtMjguNTUgNDQtMzkuNiA2Ny4ybC0wLjAyNS0wLjAyNXEtNDMuOTI1IDkxLjk5OC00My45MjUgMjAyLjE4YzAgMTMwLjM1IDQ2LjEgMjQxLjY1IDEzOC4yNSAzMzMuOCA1Ni43IDU2LjY1IDEyMC41NSA5NS45IDE5MS4xIDExNy41NSAzNi43NSAxMS4yNSA3NC44IDE3Ljg1IDExNC43NSAxOS45NWgwLjRjOC41IDAuNDUgMTYuNiAwLjcgMjQuNSAwLjdoM2MxMC4zIDAgMjAuNS0wLjMgMzAuMS0wLjggMi41LTAuMTUgNC43NS0wLjMgNi45NS0wLjQ1IDIwLjItMS40NSAzOS45LTQuMDUgNTguNy03LjcgNy45NS0xLjU1IDE1LjgtMy4zIDIzLjQtNS4xNSA4MC44LTIwLjMgMTUyLjE1LTYxLjYgMjE0LjY1LTEyNC4xIDQ4LjYtNDguNiA4NC40LTEwMi41IDEwNy4zNS0xNjEuOCAxOC40NS00Ny42NSAyOC42NS05OC44IDMwLjU1LTE1My41IDAuMi02LjA1IDAuMy0xMi4yNSAwLjMtMTguNXYtM2MtMC4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTUuMDUtMTQuMjUtMTAuODUtMjguMjUtMTcuNDUtNDIuMTUtMS44NS0zLjgtMy43NS03LjY1LTUuNy0xMS41LTEuNDUtMi44NS0yLjk1LTUuNy00LjY1LTguOHoiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY4MyIvPgogPHBhdGggZD0ibTU4LjU1NSAxNy44NjRjLTAuMTQ5MzYtMC4yNzY0OC0wLjMxNDYyLTAuNTcyMDMtMC40ODYyMy0wLjg2NDQxLTEuMjkwMy0yLjE5MjgtMi45MTEtNC4yNzEyLTQuODUyNy02LjIxMjktNC42MTQ0LTQuNjE0NC05Ljk4ODMtNy40MTQyLTE2LjEyMi04LjM5My0xLjAzMjgtMC4xNjUyNS0yLjA4NDctMC4yNzk2Ni0zLjE4MTEtMC4zNDAwNC0wLjYxNjUyLTAuMDM0OTU4LTEuMjYxNy0wLjA1NDAyNS0xLjkxMzEtMC4wNTQwMjUtMC41OTQyOCAwLTEuMTgyMiAwLjAxNTg5LTEuNzczMyAwLjA0NzY2OS03LjUyMjIgMC4zODc3MS0xNC4wMDIgMy4zMDE5LTE5LjQ0IDguNzM5NC0xLjMwMyAxLjMwMy0yLjQ2MjkgMi42NjYzLTMuNDc2NyA0LjA5MzItMC45NzU2MyAxLjM2OTctMS44MTQ2IDIuNzk2Ni0yLjUxNjkgNC4yNzEybC0wLjAwMTU5LTAuMDAxNnEtMi43OTE4IDUuODQ3My0yLjc5MTggMTIuODVjMCA4LjI4NDkgMi45MzAxIDE1LjM1OSA4Ljc4NzEgMjEuMjE2IDMuNjAzOCAzLjYwMDYgNy42NjIxIDYuMDk1MyAxMi4xNDYgNy40NzE0IDIuMzM1OCAwLjcxNTA0IDQuNzU0MiAxLjEzNDUgNy4yOTM0IDEuMjY4aDAuMDI1NDJjMC41NDAyNSAwLjAyODYgMS4wNTUxIDAuMDQ0NDkgMS41NTcyIDAuMDQ0NDloMC4xOTA2OGMwLjY1NDY2IDAgMS4zMDMtMC4wMTkwNyAxLjkxMzEtMC4wNTA4NSAwLjE1ODktMC4wMDk1IDAuMzAxOTEtMC4wMTkwNyAwLjQ0MTc0LTAuMDI4NiAxLjI4MzktMC4wOTIxNiAyLjUzNi0wLjI1NzQyIDMuNzMwOS0wLjQ4OTQxIDAuNTA1My0wLjA5ODUyIDEuMDA0Mi0wLjIwOTc1IDEuNDg3My0wLjMyNzMzIDUuMTM1Ni0xLjI5MDMgOS42NzA1LTMuOTE1MiAxMy42NDMtNy44ODc3IDMuMDg5LTMuMDg5IDUuMzY0NC02LjUxNDggNi44MjMxLTEwLjI4NCAxLjE3MjctMy4wMjg2IDEuODIxLTYuMjc5NyAxLjk0MTctOS43NTYzIDAuMDEyNzEtMC4zODQ1MyAwLjAxOTA3LTAuNzc4NiAwLjAxOTA3LTEuMTc1OHYtMC4xOTA2OGMtMC4wMTI3MS0yLjU4MzctMC4zMTQ2Mi01LjA1My0wLjkwODktNy40MzY0LTAuMDY5OTEtMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDMtMC4yMzE5OS0wLjg2NDQxLTAuMDYzNTYtMC4yMTYxLTAuMTI3MTItMC40MzUzOC0wLjIwMDIxLTAuNjY3MzctMC4xMDE3LTAuMzI3MzMtMC4yMTYxLTAuNjY3MzctMC4zMzY4Ni0xLjAwNzQtMC4zMjA5Ny0wLjkwNTcyLTAuNjg5NjItMS43OTU1LTEuMTA5MS0yLjY3OS0wLjExNzU4LTAuMjQxNTItMC4yMzgzNS0wLjQ4NjIzLTAuMzYyMjktMC43MzA5My0wLjA5MjE2LTAuMTgxMTQtMC4xODc1LTAuMzYyMjktMC4yOTU1NS0wLjU1OTMyeiIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIuOTk2OCIvPgogPHBhdGggZD0ibTU0LjEyOSAyMC4yMmMtMC4xMjQ0Ny0wLjIzMDQtMC4yNjIxOC0wLjQ3NjctMC40MDUxOS0wLjcyMDM0LTEuMDc1Mi0xLjgyNzMtMi40MjU4LTMuNTU5My00LjA0NC01LjE3NzQtMy44NDUzLTMuODQ1My04LjMyMzYtNi4xNzg1LTEzLjQzNS02Ljk5NDItMC44NjA3LTAuMTM3NzEtMS43MzczLTAuMjMzMDUtMi42NTEtMC4yODMzNy0wLjUxMzc3LTAuMDI5MTMxLTEuMDUxNC0wLjA0NTAyMS0xLjU5NDMtMC4wNDUwMjEtMC40OTUyMyAwLTAuOTg1MTcgMC4wMTMyNDEtMS40Nzc4IDAuMDM5NzI0LTYuMjY4NSAwLjMyMzA5LTExLjY2OCAyLjc1MTYtMTYuMiA3LjI4MjgtMS4wODU4IDEuMDg1OC0yLjA1MjQgMi4yMjE5LTIuODk3MiAzLjQxMS0wLjgxMzAzIDEuMTQxNC0xLjUxMjIgMi4zMzA1LTIuMDk3NSAzLjU1OTNsLTAuMDAxMzMtMC4wMDEzcS0yLjMyNjUgNC44NzI4LTIuMzI2NSAxMC43MDljMCA2LjkwNDEgMi40NDE3IDEyLjc5OSA3LjMyMjYgMTcuNjggMy4wMDMyIDMuMDAwNSA2LjM4NTEgNS4wNzk0IDEwLjEyMiA2LjIyNjIgMS45NDY1IDAuNTk1ODcgMy45NjE5IDAuOTQ1NDUgNi4wNzc5IDEuMDU2N2gwLjAyMTE4YzAuNDUwMjEgMC4wMjM4MyAwLjg3OTI0IDAuMDM3MDggMS4yOTc3IDAuMDM3MDhoMC4xNTg5YzAuNTQ1NTUgMCAxLjA4NTgtMC4wMTU4OSAxLjU5NDMtMC4wNDIzOCAwLjEzMjQyLTAuMDA3OSAwLjI1MTU5LTAuMDE1ODkgMC4zNjgxMS0wLjAyMzgzIDEuMDY5OS0wLjA3NjggMi4xMTMzLTAuMjE0NTEgMy4xMDkxLTAuNDA3ODQgMC40MjEwOC0wLjA4MjEgMC44MzY4Ni0wLjE3NDc5IDEuMjM5NC0wLjI3Mjc4IDQuMjc5Ny0xLjA3NTIgOC4wNTg4LTMuMjYyNyAxMS4zNjktNi41NzMxIDIuNTc0Mi0yLjU3NDIgNC40NzAzLTUuNDI5IDUuNjg1OS04LjU2OTkgMC45NzcyMi0yLjUyMzggMS41MTc1LTUuMjMzMSAxLjYxODEtOC4xMzAzIDAuMDEwNTktMC4zMjA0NCAwLjAxNTg5LTAuNjQ4ODMgMC4wMTU4OS0wLjk3OTg3di0wLjE1ODljLTAuMDEwNTktMi4xNTMxLTAuMjYyMTgtNC4yMTA4LTAuNzU3NDItNi4xOTctMC4wNTgyNi0wLjIzMDQtMC4xMjQ0Ny0wLjQ3NjctMC4xOTMzMy0wLjcyMDM0LTAuMDUyOTctMC4xODAwOC0wLjEwNTkzLTAuMzYyODItMC4xNjY4NC0wLjU1NjE0LTAuMDg0NzUtMC4yNzI3OC0wLjE4MDA4LTAuNTU2MTQtMC4yODA3Mi0wLjgzOTUxLTAuMjY3NDgtMC43NTQ3Ny0wLjU3NDY4LTEuNDk2My0wLjkyNDI2LTIuMjMyNS0wLjA5Nzk5LTAuMjAxMjctMC4xOTg2Mi0wLjQwNTE5LTAuMzAxOTEtMC42MDkxMS0wLjA3NjgtMC4xNTA5NS0wLjE1NjI1LTAuMzAxOTEtMC4yNDYyOS0wLjQ2NjF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTY4Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMzE4OTEgMCAwIC4zMTg5MSAxMS4zNjEgMTEuODMpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjMuMTM1NiI+CiAgPHBhdGggZD0ibTY3LjcxMSA3NS41NjIgMjcuMTA1IDE3Ljg4OS0zLjk0NzIgOS40NTI2cy0yMi40NTctMTguMDEtMjMuMTU4LTI3LjM0MnoiLz4KICA8cGF0aCBkPSJtNzAuOTIyIDQ0LjUyMmMxMC4xMTktNi45MDg1IDI1LjAzOC0xOC43NTYgMjYuNjYxLTI0LjEzMSAxLjU1NjgtNS4xNTcgNy45Nzg4LTQuMTg0IDYuNTE5MiAxLjY1NDEtMS40NTk1IDUuODM4MS05LjQzODMgMjguODk5LTIxLjk5IDQ0LjI3MiIvPgogIDxwYXRoIGQ9Im0xOS43NDEgOTYuNzc0YzUuNzI3Ni0xLjY4MjcgOC45MzEyLTguMjg3IDEzLjEyMy0xMi40MjIgNy41OTcyIDYuOTczOSA0Ny4xNTIgMjAuMzgyIDI2LjU5MiAyMC43MjQtMTAuNTY1LTAuNjA4MzctMTYuNzEyIDUuMTI4OS0yMi40NjggOS44MDg5eiIvPgogIDxwYXRoIGQ9Im02My45MjYgMS4zOTM2Yy0xNC45OTkgMC4yNzUyMS0xOS45NTMgMTEuNjk3LTE5Ljk1MyAxNy4zMzggMCA1LjY0MTggMS44NTI4IDE3LjM2OS0yLjY4ODIgMjUuMDc1LTMgNS4wOTA5LTEyLjUwNiAxNy4xNTYtMTUuMjAxIDI4LjQ1NC0yLjY5MTggMTEuMjg0LTAuNTg5OCAzNS4wOSAzMC42ODYgMzUuNjQgMzIuMiAwLjU2NjcgMjkuOTg3IDcuNDQ2MiAyOS45ODcgNy40NDYybDExLjQyNi0yMS44MjdjLTIuOTg3NC0xLjQyNzYtNy41NTktMy41OTI4LTcuMzY5My0zLjk5NDkgNS43NDIzLTEyLjE3My05LjYzMDUtMzQuODA0LTEyLjUyLTQzLjYxMS0yLjg4OTctOC44MDY4IDAuNTA3MjYtMTAuOTg1IDIuODQ2Ni0xNi4zNTIgMi4zMzkzLTUuMzY2NiAzLjI4ODctMjguMTY5LTE3LjIxNS0yOC4xNjl6Ii8+CiAgPHBhdGggZD0ibTIxLjY4MSA5Ny4xNjdjLTIuODMzOC0yLjI2NjMtNS4yNjY4IDAuODcyMTItMy41NzA4IDMuODkwNCAxLjY5NTkgMy4wMTgzIDE2LjE2MyAxNy41NCAyMC4zMTggMjIuMTE3IDQuMTU1NCA0LjU3NyAxMS4zODktMi4xMDU2IDQuODU5NC01Ljg3MjctNi41My0zLjc2NzItMTguNzczLTE3Ljg2OS0yMS42MDctMjAuMTM1eiIvPgogIDxwYXRoIGQ9Im0yNS41NTkgODQuNDg2YzEuMTc3OCA0LjUxNDctNC4zNjI0IDkuOTI3NS03LjMyMDggMTIuNzEzLTMuODQ4IDMuNjIzIDAuMDk4MTQgNS41OTQzIDEuMzc0IDUuNDk2MiAxLjI3NTktMC4wOTggMTAuNzYyLTMuNTI4MyAxOC4xMjMgMC41OTM4MiIvPgogIDxwYXRoIGQ9Im03My4xMzEgMTEuMzM5Yy00LjMwNDctMC4wNDkwOC03LjMwNzQgNC44NDI5LTUuMDU4MyAxMC42IDEuMjg5MSAzLjI5OTkgOS43NjU4IDMuMTE4NyAxMC4zMDQtMC4zMTk4NSAwLjkxNzgyLTUuODY0My0wLjk4NzM3LTEwLjIzMi01LjI0NTYtMTAuMjh6Ii8+CiAgPHBhdGggZD0ibTcyLjc2MSAxNy4yOTFhMy4wMzgzIDMuNjg1OCAwIDAgMSA0LjI5MTEtMC4wMDc5IDMuMDM4MyAzLjY4NTggMCAwIDEgMC4wMTcyIDUuMjA1NSAzLjAzODMgMy42ODU4IDAgMCAxLTQuMjkxIDAuMDM0NjEgMy4wMzgzIDMuNjg1OCAwIDAgMS0wLjAzOTk2LTUuMjA1MyIvPgogIDxwYXRoIGQ9Im04MS40NjMgMzMuMDM2YzIuNzIyIDAuMDkwNjYgMTguODczLTMuMDg0OSAxOS4wNTQtNS4zNTMzIDAuMTgxNS0yLjI2ODMtMTEuMzQyLTMuMzU3MS0xMy42MS00LjM1NTItMi4yNjgzLTAuOTk4MDgtMTMuMjkzLTMuOTQxOS0xMy4xNTYgMy40NDc5IDAuMTM2NzkgNy4zODk3IDQuOTkwMyA2LjE2OTkgNy43MTIzIDYuMjYwNnoiLz4KICA8cGF0aCBkPSJtNzcuMzI0IDI4LjgwMmM1Ljc0MTMgMS4yNDY4IDEyLjcwMyAxLjY2ODQgMTYuNTUzIDEuMDI2NSIgc3Ryb2tlPSIjYWU5MzAwIiBzdHJva2Utd2lkdGg9IjMuMTg2NSIvPgogIDxwYXRoIGQ9Im04MS40NjMgMzMuMDM2YzIuNzIyIDAuMDkwNjYgMTguODczLTMuMDg0OSAxOS4wNTQtNS4zNTMzIDAuMTgxNS0yLjI2ODMtMTEuMzQyLTMuMzU3MS0xMy42MS00LjM1NTItMi4yNjgzLTAuOTk4MDgtMTMuMjkzLTMuOTQxOS0xMy4xNTYgMy40NDc5IDAuMTM2NzkgNy4zODk3IDQuOTkwMyA2LjE2OTkgNy43MTIzIDYuMjYwNnoiLz4KICA8cGF0aCBkPSJtNDUuODM2IDQwLjE2OGMtMTMuNTEyIDExLjQ0Mi0zNC43MjkgMzguNzktMzAuNDg1IDQxLjQ1IDMuNjYwMyAyLjI5MzQgMjUuNDc1LTE2LjYyMSAzNC43LTE4LjU1Ii8+CiAgPHBhdGggZD0ibTQwLjU1MyA0NS4xNjJjLTguNTU2NyA5LjA2NjctMjAuNzczIDIzLjQ2MS0yNC42MjUgMzEuMjY0LTMuODAyNCA2LjAxNzkgMC41OTYzMiA4LjI2MzQgNS43NTI1IDMuMzI2MiA3LjAwMzEtMy44NjY5IDE3LjUtMTMuMDQ0IDI0LjM4MS0xNC40ODMiLz4KICA8cGF0aCBkPSJtOTguNjQgODMuNjYxYzAuMzgxOTctNS40NTI2IDguMDE4Ni02LjM1ODYgNy45NzAyIDAuMzEyNjYtMC4wNTUxIDcuNTg3OS0xMC4zMzEgMjUuOTQ3LTE0LjIgMzAuNTMyLTMuNzI4NCA0LjQxODEtNy40MzE1IDAuOTYyNzQtNC44MTYyLTMuMzAyNiAyLjYxNDEtNC4yNjM0IDEwLjUzMS0yMC4xOSAxMS4wNDYtMjcuNTQyeiIvPgogIDxwYXRoIGQ9Im03OS42MDMgNTMuMTE3Yy0yLjU5MjctMS4xNDk4LTMuNTA4IDUuNTYzOS01LjY2MzQgOC43MDA2LTIuNTk2NyAzLjc3ODktNS4wOTg1IDcuNDE2NS0zLjE4NyAxMy4zOTJsMTkuNzU1IDEzLjcxMmMyLjU0NzYtMTAuMDI3LTQuMjgzOC0yNC42MjctMTAuOTA1LTM1LjgwNXoiLz4KICA8cGF0aCBkPSJtNzQuMTMzIDE2Ljk3YTEuMDM1NSAwLjY1OTExIDAgMCAxIDEuNDYyNC0wLjAwMTIgMS4wMzU1IDAuNjU5MTEgMCAwIDEgMC4wMDU4IDAuOTMwODggMS4wMzU1IDAuNjU5MTEgMCAwIDEtMS40NjI0IDAuMDA2MiAxLjAzNTUgMC42NTkxMSAwIDAgMS0wLjAxMzYtMC45MzA4NSIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjMxODkxIDAgMCAuMzE4OTEgMTEuMzYxIDExLjgzKSIgc3Ryb2tlLXdpZHRoPSIzLjEzNTYiPgogIDxwYXRoIGQ9Im02Ny43MTEgNzUuNTYyIDI3LjEwNSAxNy44ODktMy45NDcyIDkuNDUyNnMtMjIuNDU3LTE4LjAxLTIzLjE1OC0yNy4zNDJ6IiBmaWxsPSJ1cmwoI2YpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNzAuOTIyIDQ0LjUyMmMxMC4xMTktNi45MDg1IDI1LjAzOC0xOC43NTYgMjYuNjYxLTI0LjEzMSAxLjU1NjgtNS4xNTcgNy45Nzg4LTQuMTg0IDYuNTE5MiAxLjY1NDEtMS40NTk1IDUuODM4MS05LjQzODMgMjguODk5LTIxLjk5IDQ0LjI3MiIgZmlsbD0iIzE4MTgxOCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTE5Ljc0MSA5Ni43NzRjNS43Mjc2LTEuNjgyNyA4LjkzMTItOC4yODcgMTMuMTIzLTEyLjQyMiA3LjU5NzIgNi45NzM5IDQ3LjE1MiAyMC4zODIgMjYuNTkyIDIwLjcyNC0xMC41NjUtMC42MDgzNy0xNi43MTIgNS4xMjg5LTIyLjQ2OCA5LjgwODl6IiBmaWxsPSIjMTgxODE4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNjMuOTI2IDEuMzkzNmMtMTQuOTk5IDAuMjc1MjEtMTkuOTUzIDExLjY5Ny0xOS45NTMgMTcuMzM4IDAgNS42NDE4IDEuODUyOCAxNy4zNjktMi42ODgyIDI1LjA3NS0zIDUuMDkwOS0xMi41MDYgMTcuMTU2LTE1LjIwMSAyOC40NTQtMi42OTE4IDExLjI4NC0wLjU4OTggMzUuMDkgMzAuNjg2IDM1LjY0IDMyLjIgMC41NjY3IDI5Ljk4NyA3LjQ0NjIgMjkuOTg3IDcuNDQ2MmwxMS40MjYtMjEuODI3Yy0yLjk4NzQtMS40Mjc2LTcuNTU5LTMuNTkyOC03LjM2OTMtMy45OTQ5IDUuNzQyMy0xMi4xNzMtOS42MzA1LTM0LjgwNC0xMi41Mi00My42MTEtMi44ODk3LTguODA2OCAwLjUwNzI2LTEwLjk4NSAyLjg0NjYtMTYuMzUyIDIuMzM5My01LjM2NjYgMy4yODg3LTI4LjE2OS0xNy4yMTUtMjguMTY5eiIgZmlsbD0iIzIzMjMyMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTIxLjY4MSA5Ny4xNjdjLTIuODMzOC0yLjI2NjMtNS4yNjY4IDAuODcyMTItMy41NzA4IDMuODkwNCAxLjY5NTkgMy4wMTgzIDE2LjE2MyAxNy41NCAyMC4zMTggMjIuMTE3IDQuMTU1NCA0LjU3NyAxMS4zODktMi4xMDU2IDQuODU5NC01Ljg3MjctNi41My0zLjc2NzItMTguNzczLTE3Ljg2OS0yMS42MDctMjAuMTM1eiIgZmlsbD0idXJsKCNoKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTI1LjU1OSA4NC40ODZjMS4xNzc4IDQuNTE0Ny00LjM2MjQgOS45Mjc1LTcuMzIwOCAxMi43MTMtMy44NDggMy42MjMgMC4wOTgxNCA1LjU5NDMgMS4zNzQgNS40OTYyIDEuMjc1OS0wLjA5OCAxMC43NjItMy41MjgzIDE4LjEyMyAwLjU5MzgyIiBmaWxsPSIjMjMyMzIzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNzMuMTMxIDExLjMzOWMtNC4zMDQ3LTAuMDQ5MDgtNy4zMDc0IDQuODQyOS01LjA1ODMgMTAuNiAxLjI4OTEgMy4yOTk5IDkuNzY1OCAzLjExODcgMTAuMzA0LTAuMzE5ODUgMC45MTc4Mi01Ljg2NDMtMC45ODczNy0xMC4yMzItNS4yNDU2LTEwLjI4eiIgZmlsbD0iI2ZkZmRmZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTcyLjc2MSAxNy4yOTFhMy4wMzgzIDMuNjg1OCAwIDAgMSA0LjI5MTEtMC4wMDc5IDMuMDM4MyAzLjY4NTggMCAwIDEgMC4wMTcyIDUuMjA1NSAzLjAzODMgMy42ODU4IDAgMCAxLTQuMjkxIDAuMDM0NjEgMy4wMzgzIDMuNjg1OCAwIDAgMS0wLjAzOTk2LTUuMjA1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTgxLjQ2MyAzMy4wMzZjMi43MjIgMC4wOTA2NiAxOC44NzMtMy4wODQ5IDE5LjA1NC01LjM1MzMgMC4xODE1LTIuMjY4My0xMS4zNDItMy4zNTcxLTEzLjYxLTQuMzU1Mi0yLjI2ODMtMC45OTgwOC0xMy4yOTMtMy45NDE5LTEzLjE1NiAzLjQ0NzkgMC4xMzY3OSA3LjM4OTcgNC45OTAzIDYuMTY5OSA3LjcxMjMgNi4yNjA2eiIgZmlsbD0idXJsKCNlKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc3LjMyNCAyOC44MDJjNS43NDEzIDEuMjQ2OCAxMi43MDMgMS42Njg0IDE2LjU1MyAxLjAyNjUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FlOTMwMCIgc3Ryb2tlLXdpZHRoPSIuNjI3MTMiLz4KICA8cGF0aCBkPSJtODEuNDYzIDMzLjAzNmMyLjcyMiAwLjA5MDY2IDE4Ljg3My0zLjA4NDkgMTkuMDU0LTUuMzUzMyAwLjE4MTUtMi4yNjgzLTExLjM0Mi0zLjM1NzEtMTMuNjEtNC4zNTUyLTIuMjY4My0wLjk5ODA4LTEzLjI5My0zLjk0MTktMTMuMTU2IDMuNDQ3OSAwLjEzNjc5IDcuMzg5NyA0Ljk5MDMgNi4xNjk5IDcuNzEyMyA2LjI2MDZ6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0ibTQ1LjgzNiA0MC4xNjhjLTEzLjUxMiAxMS40NDItMzQuNzI5IDM4Ljc5LTMwLjQ4NSA0MS40NSAzLjY2MDMgMi4yOTM0IDI1LjQ3NS0xNi42MjEgMzQuNy0xOC41NSIgZmlsbD0idXJsKCNqKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTQwLjU1MyA0NS4xNjJjLTguNTU2NyA5LjA2NjctMjAuNzczIDIzLjQ2MS0yNC42MjUgMzEuMjY0LTMuODAyNCA2LjAxNzkgMC41OTYzMiA4LjI2MzQgNS43NTI1IDMuMzI2MiA3LjAwMzEtMy44NjY5IDE3LjUtMTMuMDQ0IDI0LjM4MS0xNC40ODMiIGZpbGw9Im5vbmUiLz4KICA8cGF0aCBkPSJtOTguNjQgODMuNjYxYzAuMzgxOTctNS40NTI2IDguMDE4Ni02LjM1ODYgNy45NzAyIDAuMzEyNjYtMC4wNTUxIDcuNTg3OS0xMC4zMzEgMjUuOTQ3LTE0LjIgMzAuNTMyLTMuNzI4NCA0LjQxODEtNy40MzE1IDAuOTYyNzQtNC44MTYyLTMuMzAyNiAyLjYxNDEtNC4yNjM0IDEwLjUzMS0yMC4xOSAxMS4wNDYtMjcuNTQyeiIgZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc5LjYwMyA1My4xMTdjLTIuNTkyNy0xLjE0OTgtMy41MDggNS41NjM5LTUuNjYzNCA4LjcwMDYtMi41OTY3IDMuNzc4OS01LjA5ODUgNy40MTY1LTMuMTg3IDEzLjM5MmwxOS43NTUgMTMuNzEyYzIuNTQ3Ni0xMC4wMjctNC4yODM4LTI0LjYyNy0xMC45MDUtMzUuODA1eiIgZmlsbD0idXJsKCNnKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc0LjEzMyAxNi45N2ExLjAzNTUgMC42NTkxMSAwIDAgMSAxLjQ2MjQtMC4wMDEyIDEuMDM1NSAwLjY1OTExIDAgMCAxIDAuMDA1OCAwLjkzMDg4IDEuMDM1NSAwLjY1OTExIDAgMCAxLTEuNDYyNCAwLjAwNjIgMS4wMzU1IDAuNjU5MTEgMCAwIDEtMC4wMTM2LTAuOTMwODUiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"supertux2,supertux\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"supertux2.desktop\"\nLABEL oc.launch=\"supertux2.supertux2\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpinei.minimal\"\nLABEL oc.name=\"supertux2\"\nLABEL oc.displayname=\"supertux2\"\nLABEL oc.path=\"/usr/games/supertux2\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"supertux2\"\nENV APPBIN \"/usr/games/supertux2\"\nENV APP \"/usr/games/supertux2\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/supertux2/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/supertux2/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/supertux2/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/supertux2/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends swell-foop && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_swell-foop.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNjhiMGUzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY4ODRlMyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjIiIHkyPSI2MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWQyMTIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMzkzZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIxOC4wMDIiIHgyPSIxOC4wMDIiIHkxPSIxMiIgeTI9IjI0LjAwMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzAuMDA0IiB4Mj0iMzAuMDA0IiB5MT0iMTIiIHkyPSIyNC4wMDMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjMwLjAwNCIgeDI9IjMwLjAwNCIgeTE9IjI0IiB5Mj0iMzUuOTk5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIxOC4wMDIiIHgyPSIxOC4wMDIiIHkxPSIyNCIgeTI9IjM1Ljk5OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWVlZTRjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZjA2ZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJoIiB4PSItLjA1OTk5NSIgeT0iLS4wNjAwMDUiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzgyNjQxMjkiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mjc0NSAwIDAgLjA2Mjc0NSAtLjEyNTQ5IC0uMTI1NDkpIiBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzguMTIiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjkzOCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcuODEzNiAxMS4wNjgpIiBmaWx0ZXI9InVybCgjaCkiIG9wYWNpdHk9Ii41Ij4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyA4LjUwOTIgLTEwLjM3MikiPgogICA8Zz4KICAgIDxnPgogICAgIDxwYXRoIGQ9Im0yNi40MDIgMTJoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0xNC4zOTggMTJoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0yNi40MDIgMjRoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0xNC4zOTggMjRoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcuODEzNiAxMS4wNjgpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyA4LjUwOTIgLTEwLjM3MikiPgogICA8Zz4KICAgIDxwYXRoIGQ9Im0yNi40MDIgMTJoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIgZmlsbD0idXJsKCNlKSIvPgogICAgPHBhdGggZD0ibTE0LjM5OCAxMmg3LjIwN2MxLjMyNCAwIDIuMzk4IDEuMDc0IDIuMzk4IDIuMzk4djcuMjA3YzAgMS4zMjQtMS4wNzQgMi4zOTgtMi4zOTggMi4zOThoLTcuMjA3Yy0xLjMyNCAwLTIuMzk4LTEuMDc0LTIuMzk4LTIuMzk4di03LjIwN2MwLTEuMzI0IDEuMDc0LTIuMzk4IDIuMzk4LTIuMzk4IiBmaWxsPSJ1cmwoI2YpIi8+CiAgICA8cGF0aCBkPSJtMjYuNDAyIDI0aDcuMjAzYzEuMzI0IDAgMi4zOTggMS4wNzQgMi4zOTggMi4zOTh2Ny4yMDNjMCAxLjMyNC0xLjA3NCAyLjM5OC0yLjM5OCAyLjM5OGgtNy4yMDNjLTEuMzI0IDAtMi4zOTgtMS4wNzQtMi4zOTgtMi4zOTh2LTcuMjAzYzAtMS4zMjQgMS4wNzQtMi4zOTggMi4zOTgtMi4zOTgiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im0xNC4zOTggMjRoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIgZmlsbD0idXJsKCNjKSIvPgogICA8L2c+CiAgPC9nPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"swell-foop,swell,foop\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.SwellFoop.desktop\"\nLABEL oc.launch=\"swell-foop.Swell-foop\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"swell-foop\"\nLABEL oc.displayname=\"swell-foop\"\nLABEL oc.path=\"/usr/games/swell-foop\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"swell-foop\"\nENV APPBIN \"/usr/games/swell-foop\"\nENV APP \"/usr/games/swell-foop\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/swell-foop/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/swell-foop/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/swell-foop/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/swell-foop/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-taquin\nLABEL oc.icon=\"org.gnome.Taquin.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ZkZmNmYiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2YxZjBlZiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI0OCIgeDI9IjQ2NCIgeTE9IjQ0IiB5Mj0iNDQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQuOTIzIDI1LjY1NSkgc2NhbGUoLjE0NDIzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNiYWJkYjYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNmY1ZjQiIG9mZnNldD0iLjA0MiIvPjxzdG9wIHN0b3AtY29sb3I9IiNkNWQzY2YiIG9mZnNldD0iLjA4MyIvPjxzdG9wIHN0b3AtY29sb3I9IiNkZWRkZGEiIG9mZnNldD0iLjkxNSIvPjxzdG9wIHN0b3AtY29sb3I9IiNlYmVhZTgiIG9mZnNldD0iLjk0NCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNmY1ZjQiIG9mZnNldD0iLjk4NSIvPjxzdG9wIHN0b3AtY29sb3I9IiNiYWJkYjYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMzIuNTc3IiB4Mj0iMzIuNTc3IiB5MT0iMiIgeTI9IjU3Ljk2MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIC4wMDEpIHNjYWxlKC45OTk5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjUyLjE4MyIgeDI9IjUyLjE4MyIgeTE9IjMuODIiIHkyPSI1Ny45NjEiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAuMDAxKSBzY2FsZSguOTk5OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz48bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIxMi4zODUiIHgyPSIxMi4zODUiIHkxPSIzLjQxNCIgeTI9IjU3LjE0MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIC4wMDEpIHNjYWxlKC45OTk5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxmaWx0ZXIgaWQ9ImIiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii44OSIvPjwvZmlsdGVyPjwvZGVmcz48cmVjdCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzg5LjMyIC00ODkuOTIpIHNjYWxlKDEuMDExNSkiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2IpIiBvcGFjaXR5PSIuMjUiLz48cGF0aCBkPSJNMjIuNzY5IDQxLjIzNGgxOS42MTV2MTguNDYxSDIyLjc2OXoiIGZpbGw9IiNkZWRkZGEiLz48Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iI2M1YzRjMSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48cGF0aCBkPSJNMzEuODU1IDJhMzAgMzAgMCAwIDAtOS4wODYgMS40NTV2NTcuMDgyYzIuOS45MyA1Ljk5MiAxLjQzOCA5LjIxIDEuNDM4aC4wMDFjMy42NiAwIDcuMTY1LS42NSAxMC40MDItMS44NFYzLjg1NUEzMCAzMCAwIDAgMCAzMiAyYTMwIDMwIDAgMCAwLS4xNDQgMHoiIGZpbGw9InVybCgjYykiLz48cGF0aCBkPSJNNDIuMzg0IDQxLjIzdjE4LjQ2MWgxLjEyNWEyOS45NDQgMjkuOTQ0IDAgMCAwIDE3LjAyLTE4LjQ2MXoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNNDIuMzg1IDMuODU2djU2LjI3NmEzMi4wMDIgMzIuMDAyIDAgMCAwIDMuODk3LTEuNzUgMzAgMzAgMCAwIDAgLjAwNy0uMDAzIDMwIDMwIDAgMCAwIC4yMTMtLjExOGMuMjUtLjEzNC40OTctLjI4Ni43NDYtLjQyN0EzMCAzMCAwIDAgMCA2MiAzMiAzMCAzMCAwIDAgMCA0Mi4zODUgMy44NTV6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTU1Ljc2NSAxMy42NjNhMjIuMDQ4IDIyLjA0OCAwIDAgMC00LjMzMiA2Ljc5OWgzLjc2NGExOC40NzkgMTguNDc5IDAgMCAxIDIuNTU4LTMuODczIDI5LjkwOSAyOS45MDkgMCAwIDAtMS45OS0yLjkyNnoiIGZpbGw9IiMxYTVmYjQiLz48cGF0aCBkPSJNMy40MTYgMjIuNzcxQTMwLjEwNCAzMC4xMDQgMCAwIDAgMiAzMS4yODF2MS4zOTRBMzAuMTYgMzAuMTYgMCAwIDAgMy4wODQgNDBIMjIuNzdWMjIuNzdIMy40MTZ6IiBvcGFjaXR5PSIuMTUiLz48cGF0aCBkPSJNMjIuNzY5IDMuNDE1QTI5LjkyIDI5LjkyIDAgMCAwIDIgMzEuMjh2MS4zOTVjLjA0OSAyLjE0OC4zMiA0LjIzOC43OTMgNi4yNUgyMi43N1YzLjQxNHoiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJNMjIuNzY5IDEwLjcyOHYzLjk0N2EyNC4zMjIgMjQuMzIyIDAgMCAwIDEwLjQyIDIuMzI2IDI0LjM5OCAyNC4zOTggMCAwIDAgOS4xOTUtMS43ODV2LTMuODIyYTIwLjU1OCAyMC41NTggMCAwIDEtOS4xOTUgMi4xNDZjLTMuODMzIDAtNy40MDItMS4wMzItMTAuNDItMi44MTJ6bTAgMTYuMTUydjMuODIyYTE4LjQ3NiAxOC40NzYgMCAwIDEgNy45NTcgOC4yNGgzLjc2MUEyMi4wNDUgMjIuMDQ1IDAgMCAwIDIyLjc2OCAyNi44OHptMzAuMDM0LjUwNmMtMy43NDUgMC03LjI4Mi44NDItMTAuNDIgMi4zMjZ2My45NDdjMy4wMTctMS43OCA2LjU4Ni0yLjgxMiAxMC40Mi0yLjgxMiAzLjMwOCAwIDYuNDIuNzcgOS4xNSAyLjEyNS4wMS0uMzMxLjAyNi0uNjYxLjAyNi0uOTk0IDAtLjk2Ni0uMDUtMS45Mi0uMTQtMi44NjJhMjQuMzk4IDI0LjM5OCAwIDAgMC05LjAzNi0xLjczem0tLjg3MyAxMS41NDdhMjIuMDYgMjIuMDYgMCAwIDAgNi4xNzQgNy44MjggMjkuODA4IDI5LjgwOCAwIDAgMCAxLjU1OC0zLjE3NCAxOC40ODMgMTguNDgzIDAgMCAxLTMuODUxLTQuNjU0SDUxLjkzeiIgZmlsbD0iIzFhNWZiNCIvPjxwYXRoIGQ9Ik00LjUxIDE5Ljg4NmMtLjA4NS4xOTItLjE3LjM4Mi0uMjUuNTc2SDU5LjdjLS4wOC0uMTk0LS4xNjYtLjM4NC0uMjUtLjU3NnoiIGZpbGwtb3BhY2l0eT0iLjA4MSIvPjxwYXRoIGQ9Ik0xMC4zNDggMjAuNDY1YTE5LjY2IDE5LjY2IDAgMCAxIDEuOTczIDguNjE1IDE5LjYzIDE5LjYzIDAgMCAxLTIuNjMxIDkuODQ2aDQuMTRhMjMuMjMzIDIzLjIzMyAwIDAgMCAyLjE4NC05Ljg0NmMwLTIuOTUtLjU2MS01Ljg3NC0xLjY1NC04LjYxNWgtNC4wMTJ6bTI2LjMwNSAxOC40NjFDMzUuNTYgNDEuNjY2IDM0LjMwOCA0NSAzNC4zMDkgNTBjMCA1LjU5IDEuNDc4IDguNTczIDMuNzUyIDExLjM4MWEzMCAzMCAwIDAgMCAzLjM2NS0uOUMzOS4zOTggNTcuOTEgMzguMDAxIDU1IDM4LjAwMSA1MGMwLTUgMS40MDItOC40NzQgMi42NjYtMTEuMDc0aC00LjAxNHoiIGZpbGw9IiMxYTVmYjQiLz48cGF0aCBkPSJNMjMuMzQ2IDMuMjc1YTMwIDMwIDAgMCAwLS41NzYuMTh2NTcuMDgyYy4xOTIuMDYyLjM4My4xMjQuNTc2LjE4MlYzLjI3NnoiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjk1MyIgb3BhY2l0eT0iLjUiLz48cGF0aCBkPSJNMjIuNzY5IDMuNDE1Yy0uMTk0LjA2My0uMzg2LjEzLS41NzguMTk2djM1LjMxM2guNTc4VjMuNDE0eiIgZmlsbC1vcGFjaXR5PSIuMDgxIi8+PHBhdGggZD0iTTQyLjM4NSAzLjg1NnY1Ni4yODZhMzAgMzAgMCAwIDAgLjU3Ni0uMjE2VjQuMDc2YTMwIDMwIDAgMCAwLS41NzYtLjIyMXoiIGZpbGw9IiNmZmYiIG9wYWNpdHk9Ii41Ii8+PHBhdGggZD0iTTQxLjgwOSAzLjY1djU2LjY4MmMuMTkyLS4wNjYuMzg2LS4xMjkuNTc2LS4xOTlWMy44NTZhMzAgMzAgMCAwIDAtLjU3Ni0uMjA1eiIgb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNNC4yNiAyMC40NjJjLS4wOC4xOTEtLjE1Mi4zODUtLjIyNy41NzhoNTUuODk1Yy0uMDc1LS4xOTMtLjE1LS4zODctLjIyOC0uNTc4SDQuMjZ6bTE4LjUxIDE4LjQ2M3YuNTc2aDM4LjI2N2MuMDQ4LS4xOS4wODctLjM4NC4xMzItLjU3NkgyMi43N3oiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjU1NSIvPjxwYXRoIGQ9Ik0yLjY2IDM4LjM0NmMuMDQyLjE5NC4wODguMzg2LjEzMy41NzhoNTguMzc2Yy4wNDUtLjE5Mi4wOTEtLjM4NC4xMzMtLjU3OEgyLjY2eiIgZmlsbC1vcGFjaXR5PSIuMDgxIi8+PC9zdmc+\"\nLABEL oc.keyword=\"taquin,taquin\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Taquin.desktop\"\nLABEL oc.launch=\"org.gnome.Taquin.org.gnome.Weather\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"taquin\"\nLABEL oc.displayname=\"taquin\"\nLABEL oc.path=\"/usr/bin/gnome-taquin\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"taquin\"\nENV APPBIN \"/usr/bin/gnome-taquin\"\nENV APP \"/usr/bin/gnome-taquin\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/taquin/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/taquin/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/taquin/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/taquin/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
microsoft teams - preview.Microsoft Teams - Preview\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/ms-teams stable main\" > /etc/apt/sources.list.d/teams.list\nRUN apt update && apt install -y teams && apt-get clean && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"teams.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjEyOCAxNjAgNzY4IDcwNCI+Cgk8ZGVmcz4KCQk8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSItLjIiIHkxPSItLjIiIHgyPSIuOCIgeTI9Ii44Ij4KCQkJPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNWE2MmM0Ii8+CgkJCTxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzM5NDBhYiIvPgoJCTwvbGluZWFyR3JhZGllbnQ+CgkJPGNsaXBQYXRoIGlkPSJjIj4KCQkJPHBhdGggZmlsbD0iI2ZmZiIgZD0iTTY4NCA0MzJINTEydi00OS4xNDNBMTEyIDExMiAwIDEgMCA0MTYgMjcyYTExMS41NTYgMTExLjU1NiAwIDAgMCAxMC43ODUgNDhIMTYwYTMyLjA5NCAzMi4wOTQgMCAwIDAtMzIgMzJ2MzIwYTMyLjA5NCAzMi4wOTQgMCAwIDAgMzIgMzJoMTc4LjY3YzE1LjIzNiA5MC44IDk0LjIgMTYwIDE4OS4zMyAxNjAgMTA2LjAzOSAwIDE5Mi04NS45NjEgMTkyLTE5MlY0NjhhMzYgMzYgMCAwIDAtMzYtMzZ6Ii8+CgkJPC9jbGlwUGF0aD4KCTwvZGVmcz4KCTxwYXRoIGZpbGw9IiM1MDU5YzkiIGQ9Ik02OTIgNDMyaDE2OGEzNiAzNiAwIDAgMSAzNiAzNnYxNjRhMTIwIDEyMCAwIDAgMS0xMjAgMTIwIDEyMCAxMjAgMCAwIDEtMTIwLTEyMFY0NjhhMzYgMzYgMCAwIDEgMzYtMzZ6Ii8+Cgk8Y2lyY2xlIGZpbGw9IiM1MDU5YzkiIGN4PSI3NzYiIGN5PSIzMDQiIHI9IjgwIi8+Cgk8cGF0aCBmaWxsPSIjN2I4M2ViIiBkPSJNMzcyIDQzMmgzMTJhMzYgMzYgMCAwIDEgMzYgMzZ2MjA0YTE5MiAxOTIgMCAwIDEtMTkyIDE5MiAxOTIgMTkyIDAgMCAxLTE5Mi0xOTJWNDY4YTM2IDM2IDAgMCAxIDM2LTM2eiIvPgoJPGNpcmNsZSBmaWxsPSIjN2I4M2ViIiBjeD0iNTI4IiBjeT0iMjcyIiByPSIxMTIiLz4KCTxnIGNsaXAtcGF0aD0idXJsKCNjKSI+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIgLTI0KSBzY2FsZSAoNS45MDc3KSI+CgkJCTxwYXRoIG9wYWNpdHk9Ii4wNSIgZD0iTTg1IDYzdjU5LjYyYTUuMzgyIDUuMzgyIDAgMCAxLTUuMzggNS4zOEg0NS4yNWMtLjMtLjMzLS41OS0uNjYtLjg3LTFzLS41Ni0uNjYtLjgzLTEtLjUzLS42Ni0uNzktMS0uNTEtLjY2LS43Ni0xYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyYy4wNi0uMDguMTItLjE3LjE3LS4yNXMuMTItLjE3LjE5LS4yNS4xMi0uMTcuMTgtLjI1YTIuMzQ4IDIuMzQ4IDAgMCAxIC4xOS0uMjVoMzcuNjFjMi45NyAwIDUuMzggMy4wMyA1LjM4IDZ6IiBzdHlsZT0iJiMxMDsiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjA3NSIgZD0iTTg0LjI1IDYzLjF2NTguNTJhNS4zIDUuMyAwIDAgMS01LjI5IDUuMzhINDQuMzhjLS4yOS0uMzMtLjU2LS42Ni0uODMtMXMtLjUzLS42Ni0uNzktMS0uNTEtLjY2LS43Ni0xYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyYy4wNi0uMDguMTItLjE3LjE3LS4yNXMuMTItLjE3LjE5LS4yNS4xMi0uMTcuMTgtLjI1aDM3LjA1YzIuOTcgMCA1LjM4IDIuODcgNS4zOCA1Ljg1eiIvPgoJCQk8cGF0aCBvcGFjaXR5PSIuMSIgZD0iTTgzLjUgNjMuMTl2NTcuNDNhNS4yMjMgNS4yMjMgMCAwIDEtNS4xOSA1LjM4SDQzLjU1Yy0uMjctLjMzLS41My0uNjYtLjc5LTFzLS41MS0uNjYtLjc2LTFhNTYuMjU5IDU2LjI1OSAwIDAgMS0xMS0zMy41VjkwYTU2LjI1OSA1Ni4yNTkgMCAwIDEgMTAuMjgtMzJjLjA2LS4wOC4xMi0uMTcuMTctLjI1cy4xMi0uMTcuMTktLjI1aDM2LjQ4YTUuNjU1IDUuNjU1IDAgMCAxIDUuMzggNS42OXoiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjEyNSIgZD0iTTgyLjc1IDYzLjI4djU2LjM0YTUuMTQ0IDUuMTQ0IDAgMCAxLTUuMSA1LjM4SDQyLjc2Yy0uMjYtLjMzLS41MS0uNjYtLjc2LTFhNTYuMjU5IDU2LjI1OSAwIDAgMS0xMS0zMy41VjkwYTU2LjI1OSA1Ni4yNTkgMCAwIDEgMTAuMjgtMzJjLjA2LS4wOC4xMi0uMTcuMTctLjI1aDM1LjkyYTUuNTEyIDUuNTEyIDAgMCAxIDUuMzggNS41M3oiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjIiIGQ9Ik04MiA2My4zOHY1NS4yNGE1LjA3IDUuMDcgMCAwIDEtNSA1LjM4SDQyYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyaDM1LjM0QTUuMzgyIDUuMzgyIDAgMCAxIDgyIDYzLjM4eiIvPgoJCTwvZz4KCTwvZz4KCTxyZWN0IGZpbGw9InVybCgjZykiIHg9IjEyOCIgeT0iMzIwIiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjM4NCIgcng9IjMyIiByeT0iMzIiLz4KCTxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zOTkuMzY1IDQ0NS44NTVoLTYwLjI5M3YxNjQuMmgtMzguNDE4di0xNjQuMmgtNjAuMDJWNDE0aDE1OC43M3oiLz4KPC9zdmc+\"\nLABEL oc.keyword=\"teams,teams\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"teams.desktop\"\nLABEL oc.launch=\"microsoft teams - preview.Microsoft Teams - Preview\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--disable-namespace-sandbox --disable-setuid-sandbox\"\nLABEL oc.name=\"teams\"\nLABEL oc.displayname=\"Microsoft Teams\"\nLABEL oc.path=\"/usr/bin/teams\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/msteams;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"teams\"\nENV APPBIN \"/usr/bin/teams\"\nLABEL oc.args=\"--disable-namespace-sandbox --disable-setuid-sandbox\"\nENV APP \"/usr/bin/teams\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/teams/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/teams/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/teams/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f teams.d -t teams .\n
"},{"location":"applications/teams/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect teams > teams.json\ndocker image save teams -o teams.tar\nctr -n k8s.io images import teams.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @teams.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.20.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal sudo openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminal,terminal,bash,shell,cmd,admin,ftp,telnet,netcat,sshfs,curl,wget,git,ssh\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.Gnome-terminal\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.20.04\"\nENV ARGS=\"--disable-factory\"\nLABEL oc.name=\"Terminal\"\nLABEL oc.displayname=\"Terminal sudo\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Terminal\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminal/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminal/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminal/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminal/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends at-spi2-core gnome-terminal dbus-x11 pulseaudio-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminalephemeral,ephemeral,terminal,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.ephemeral\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=ephemeral\"\nLABEL oc.name=\"terminalephemeral\"\nLABEL oc.displayname=\"Terminal [ephemeral container]\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"terminalephemeral\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=ephemeral\"\nENV APP \"/usr/bin/gnome-terminal\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminalephemeral/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminalephemeral/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminalephemeral/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminalephemeral/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends pulseaudio-utils at-spi2-core gnome-terminal dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminalpod,pod,terminal,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.pod\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=pod\"\nLABEL oc.name=\"terminalpod\"\nLABEL oc.displayname=\"Terminal [Pod]\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"terminalpod\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=pod\"\nENV APP \"/usr/bin/gnome-terminal\"\nLABEL oc.containerengine=\"pod_application\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminalpod/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminalpod/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminalpod/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminalpod/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-tetravex && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gnome-tetravex.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJz8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZyB4bWxuczpjYz0naHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjJyB4bWxuczpkYz0naHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nIHNvZGlwb2RpOmRvY25hbWU9J2dub21lLXRldHJhdmV4LXN5bWJvbGljLnN2ZycgaGVpZ2h0PScxNicgaWQ9J3N2ZzczODQnIHhtbG5zOmlua3NjYXBlPSdodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlJyB4bWxuczpvc2I9J2h0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYicgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczpzb2RpcG9kaT0naHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQnIHhtbG5zOnN2Zz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZlcnNpb249JzEuMScgaW5rc2NhcGU6dmVyc2lvbj0nMC45MSByMTM3MjUnIHdpZHRoPScxNicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxtZXRhZGF0YSBpZD0nbWV0YWRhdGE5MCc+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PScnPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0naHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UnLz4KICAgICAgICA8ZGM6dGl0bGU+R25vbWUgU3ltYm9saWMgSWNvbiBUaGVtZTwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcgaW5rc2NhcGU6YmJveC1wYXRocz0ndHJ1ZScgYm9yZGVyY29sb3I9JyM2NjY2NjYnIGJvcmRlcm9wYWNpdHk9JzEnIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9J2xheWVyOScgaW5rc2NhcGU6Y3g9JzIwOS42ODE0OScgaW5rc2NhcGU6Y3k9JzguOTU0NDEnIGdyaWR0b2xlcmFuY2U9JzEwJyBpbmtzY2FwZTpndWlkZS1iYm94PSd0cnVlJyBndWlkZXRvbGVyYW5jZT0nMTAnIGlkPSduYW1lZHZpZXc4OCcgaW5rc2NhcGU6b2JqZWN0LW5vZGVzPSdmYWxzZScgaW5rc2NhcGU6b2JqZWN0LXBhdGhzPSdmYWxzZScgb2JqZWN0dG9sZXJhbmNlPScxMCcgcGFnZWNvbG9yPScjNTU1NzUzJyBpbmtzY2FwZTpwYWdlb3BhY2l0eT0nMScgaW5rc2NhcGU6cGFnZXNoYWRvdz0nMicgc2hvd2JvcmRlcj0nZmFsc2UnIHNob3dncmlkPSdmYWxzZScgc2hvd2d1aWRlcz0ndHJ1ZScgaW5rc2NhcGU6c25hcC1iYm94PSd0cnVlJyBpbmtzY2FwZTpzbmFwLWJib3gtbWlkcG9pbnRzPSdmYWxzZScgaW5rc2NhcGU6c25hcC1nbG9iYWw9J3RydWUnIGlua3NjYXBlOnNuYXAtZ3JpZHM9J3RydWUnIGlua3NjYXBlOnNuYXAtbm9kZXM9J3RydWUnIGlua3NjYXBlOnNuYXAtb3RoZXJzPSdmYWxzZScgaW5rc2NhcGU6c25hcC10by1ndWlkZXM9J3RydWUnIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9JzEzNzYnIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9JzEnIGlua3NjYXBlOndpbmRvdy13aWR0aD0nMjU2MCcgaW5rc2NhcGU6d2luZG93LXg9JzAnIGlua3NjYXBlOndpbmRvdy15PScyNycgaW5rc2NhcGU6em9vbT0nMzInPgogICAgPGlua3NjYXBlOmdyaWQgZW1wc3BhY2luZz0nMicgZW5hYmxlZD0ndHJ1ZScgaWQ9J2dyaWQ0ODY2JyBvcmlnaW54PSctODAuOTk5OTk4JyBvcmlnaW55PSctMzYyJyBzbmFwdmlzaWJsZWdyaWRsaW5lc29ubHk9J3RydWUnIHNwYWNpbmd4PScxcHgnIHNwYWNpbmd5PScxcHgnIHR5cGU9J3h5Z3JpZCcgdmlzaWJsZT0ndHJ1ZScvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDx0aXRsZSBpZD0ndGl0bGU5MTY3Jz5Hbm9tZSBTeW1ib2xpYyBJY29uIFRoZW1lPC90aXRsZT4KICA8ZGVmcyBpZD0nZGVmczczODYnPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSdsaW5lYXJHcmFkaWVudDcyMTInIG9zYjpwYWludD0nc29saWQnPgogICAgICA8c3RvcCBpZD0nc3RvcDcyMTQnIG9mZnNldD0nMCcgc3R5bGU9J3N0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsnLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnIGlua3NjYXBlOmdyb3VwbW9kZT0nbGF5ZXInIGlkPSdsYXllcjknIGlua3NjYXBlOmxhYmVsPSdhcHBzJyBzdHlsZT0nZGlzcGxheTppbmxpbmUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0zMjIuMDAwMiwxNDUpJz4KCiAgICA8cGF0aCBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPScwJyBkPSdtIDMyNC4zNDM5NSwtMTQ0IDUuNjI1LDUuNjI1IDUuNjI1LC01LjYyNSAtMTEuMjUsMCB6IG0gNS42NTYyNSwxIGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSA3LDAuNDA2MjUgLTUuNjI1LDUuNjI1IDUuNjI1LDUuNjI1IDAsLTExLjI1IHogbSAtMTQsMC4wNjI1IDAsMTEuMTI1IDUuNTYyNSwtNS41NjI1IC01LjU2MjUsLTUuNTYyNSB6IG0gMiw0LjUzMTI1IGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSAxMCwwIGMgMC41NTIyOSwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcxLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSAtNS4wMzEyNSwyLjQzNzUgLTUuNTYyNSw1LjU2MjUgMTEuMTI1LDAgLTUuNTYyNSwtNS41NjI1IHogbSAwLjAzMTIsMi41NjI1IGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHonIGlkPSdyZWN0NzAyNicgc3R5bGU9J2ZpbGw6I2JlYmViZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZScvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"tetravex,game\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"gnome-tetravex.Gnome-tetravex\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"Tetravex\"\nLABEL oc.displayname=\"Tetravex\"\nLABEL oc.path=\"/usr/games/gnome-tetravex\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"384M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Tetravex\"\nENV APPBIN \"/usr/games/gnome-tetravex\"\nENV APP \"/usr/games/gnome-tetravex\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/tetravex/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/tetravex/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/tetravex/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/tetravex/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends tk thunderbird gnome-keyring && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"thunderbird.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAyNDYuOTYgMjQyLjgwOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQ2Ljk2IDI0Mi44MDg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiMzNjM5NTk7fQ0KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9DQoJLnN0MntmaWxsOiNGQkZCRkI7fQ0KCS5zdDN7ZmlsbDojOTk5OTk5O30NCgkuc3Q0e2ZpbGw6I0Y4RjhGODt9DQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMl8pO30NCgkuc3Q2e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQ0KCS5zdDd7ZmlsbDp1cmwoI1NWR0lEXzRfKTt9DQoJLnN0OHtmaWxsOiMzRjY0OTk7fQ0KCS5zdDl7ZmlsbDp1cmwoI1NWR0lEXzVfKTt9DQoJLnN0MTB7ZmlsbDp1cmwoI1NWR0lEXzZfKTt9DQoJLnN0MTF7ZmlsbDp1cmwoI1NWR0lEXzdfKTt9DQoJLnN0MTJ7ZmlsbDp1cmwoI1NWR0lEXzhfKTt9DQoJLnN0MTN7ZmlsdGVyOnVybCgjQWRvYmVfT3BhY2l0eU1hc2tGaWx0ZXIpO30NCgkuc3QxNHtmaWxsOnVybCgjU1ZHSURfMTBfKTt9DQoJLnN0MTV7bWFzazp1cmwoI1NWR0lEXzlfKTt9DQoJLnN0MTZ7b3BhY2l0eTowLjY7fQ0KCS5zdDE3e29wYWNpdHk6MC4yO30NCgkuc3QxOHtmaWxsOnVybCgjU1ZHSURfMTFfKTt9DQoJLnN0MTl7ZmlsbDp1cmwoI1NWR0lEXzEyXyk7fQ0KCS5zdDIwe29wYWNpdHk6MC4xO2ZpbGw6I0YyRjJGMjt9DQoJLnN0MjF7ZmlsbDojMkY0MjgyO30NCgkuc3QyMntmaWxsOnVybCgjU1ZHSURfMTNfKTt9DQoJLnN0MjN7ZmlsbDp1cmwoI1NWR0lEXzE0Xyk7fQ0KCS5zdDI0e2ZpbGw6I0ZGRkZGRjt9DQoJLnN0MjV7ZmlsbDp1cmwoI1NWR0lEXzE1Xyk7fQ0KCS5zdDI2e2ZpbGw6dXJsKCNTVkdJRF8xNl8pO30NCgkuc3QyN3tmaWxsOnVybCgjU1ZHSURfMTdfKTt9DQoJLnN0Mjh7ZmlsbDp1cmwoI1NWR0lEXzE4Xyk7fQ0KCS5zdDI5e2ZpbGw6dXJsKCNTVkdJRF8xOV8pO30NCgkuc3QzMHtmaWxsOnVybCgjU1ZHSURfMjBfKTt9DQoJLnN0MzF7ZmlsbDp1cmwoI1NWR0lEXzIxXyk7fQ0KCS5zdDMye2ZpbGw6dXJsKCNTVkdJRF8yMl8pO30NCgkuc3QzM3tmaWxsOnVybCgjU1ZHSURfMjNfKTt9DQoJLnN0MzR7ZmlsbDp1cmwoI1NWR0lEXzI0Xyk7fQ0KCS5zdDM1e2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyXzFfKTt9DQoJLnN0MzZ7ZmlsbDp1cmwoI1NWR0lEXzI2Xyk7fQ0KCS5zdDM3e21hc2s6dXJsKCNTVkdJRF8yNV8pO30NCgkuc3QzOHtmaWxsOnVybCgjU1ZHSURfMjdfKTt9DQoJLnN0Mzl7ZmlsbDp1cmwoI1NWR0lEXzI4Xyk7fQ0KCS5zdDQwe2ZpbGw6dXJsKCNTVkdJRF8yOV8pO30NCgkuc3Q0MXtmaWxsOnVybCgjU1ZHSURfMzBfKTt9DQoJLnN0NDJ7ZmlsbDp1cmwoI1NWR0lEXzMxXyk7fQ0KCS5zdDQze2ZpbGw6dXJsKCNTVkdJRF8zMl8pO30NCgkuc3Q0NHtmaWxsOnVybCgjU1ZHSURfMzNfKTt9DQoJLnN0NDV7ZmlsbDp1cmwoI1NWR0lEXzM0Xyk7fQ0KCS5zdDQ2e2ZpbGw6dXJsKCNTVkdJRF8zNV8pO30NCgkuc3Q0N3tmaWxsOnVybCgjU1ZHSURfMzZfKTt9DQoJLnN0NDh7ZmlsbDp1cmwoI1NWR0lEXzM3Xyk7fQ0KCS5zdDQ5e2ZpbGw6dXJsKCNTVkdJRF8zOF8pO30NCgkuc3Q1MHtmaWxsOnVybCgjU1ZHSURfMzlfKTt9DQoJLnN0NTF7ZmlsbDp1cmwoI1NWR0lEXzQwXyk7fQ0KCS5zdDUye2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyXzJfKTt9DQoJLnN0NTN7ZmlsbDp1cmwoI1NWR0lEXzQyXyk7fQ0KCS5zdDU0e21hc2s6dXJsKCNTVkdJRF80MV8pO30NCgkuc3Q1NXtmaWxsOnVybCgjU1ZHSURfNDNfKTt9DQoJLnN0NTZ7ZmlsbDp1cmwoI1NWR0lEXzQ0Xyk7fQ0KCS5zdDU3e2ZpbGw6dXJsKCNTVkdJRF80NV8pO30NCgkuc3Q1OHtmaWxsOnVybCgjU1ZHSURfNDZfKTt9DQoJLnN0NTl7ZmlsbDp1cmwoI1NWR0lEXzQ3Xyk7fQ0KCS5zdDYwe2ZpbGw6dXJsKCNTVkdJRF80OF8pO30NCjwvc3R5bGU+DQo8Zz4NCgk8Zz4NCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxOTkuNTMzIiB5MT0iMjAxLjkwNyIgeDI9IjM5LjY3ODciIHkyPSI0Mi4wNTI3Ij4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzAwMzYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMjI5NyIgc3R5bGU9InN0b3AtY29sb3I6IzE4MDIzQiIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC41MTIyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjYwOTRBIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjgyMTEiIHN0eWxlPSJzdG9wLWNvbG9yOiMzRDE1NjMiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM0RTFENzUiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTE4OC44ODcsMzUuNDkyYy0xNC41MDEtOS40NzItMzMuMDQ2LTEyLjUzOC00My4yODEtMTMuNjA5Yy0xMC45NTQtMS4xNDUtMjAuNDY4LTAuOTQzLTI4LjgzNiwwLjI4NQ0KCQkJYy0wLjcwOS0wLjAwOS0xLjQxNC0wLjAzNy0yLjEyNy0wLjAzN2MtMC41NDQsMC0xLjA4LDAuMDIzLTEuNjI3LDAuMDI5YzAuMjI1LTAuMjc1LDAuMzgxLTAuNDQ1LDAuMzgxLTAuNDQ1DQoJCQlzLTAuNDQsMC4wNjktMS4zMDQsMC40NmMtMi43MTcsMC4wNDQtNS40MjEsMC4xMzgtOC4wODUsMC4zMmMzLjcxMS00LjA2OCw2Ljc1MS02LjIsNi43NTEtNi4ycy0zLjYwOCwwLjUyOC0xMC4xOTIsNi40OTYNCgkJCWMtMy4xMzIsMC4yODgtNi4yMjEsMC42Ny05LjI1OCwxLjE0NWM2LjkxOC05LjM2MiwxNC4xNTUtMTMuMzA0LDE0LjE1NS0xMy4zMDRzLTguNzcyLTEuNzg2LTIyLjUwNywxMi4wMTYNCgkJCWMtMS4xNDksMS4xNTUtMi4yMTUsMi4zNTYtMy4yNDYsMy41NzJDMzkuNjgsMzUuOTA3LDExLjAzLDYxLjc1OCwxMS4wMyw5Mi4xMzljMCw1Ljk1OC0xLjgyOSwxMi41MTEsMC4xNDMsMTkuMDU0DQoJCQljLTAuNzg4LDEwLjQ1MywwLjg5LDM4Ljk3NSwwLjg5LDM4Ljk3NXMxMC44MzcsNTguNjQ5LDUyLjUxLDY4Ljg0NmMwLjY2MiwwLjE1OC04LjcwNy0xNC42Mi0xMi44NTEtMzIuNDQyDQoJCQljOC4wNjksOC4yMDgsMTcuNjg1LDE0LjY5OSwyOC40NzgsMTUuODI0YzEuMzI1LDAuMTM3LTYuMTY1LTguNjQtMTIuNzI1LTE5LjIzNGw5NC42OTgsMzEuOTA2DQoJCQljNDkuNTI5LTIxLjI3NCw0My43NjMtMTkuMzU3LDU0LjM5Ny0zMC44NzVjMjMuNDI4LTI1LjM2LDI2LjcwOC0zOS43NSwyMC44MDYtODIuMjM1DQoJCQlDMjMzLjM4Myw3My4yNzksMjEyLjIxNiw0NC44NzUsMTg4Ljg4NywzNS40OTJ6Ii8+DQoJCTxwb2x5Z29uIGNsYXNzPSJzdDIiIHBvaW50cz0iMjIuNjg3LDYyLjI3NiA4LjU0NiwxNDIuNjggMTYuMzg3LDE2Ni45NzQgMTcyLjkxMSwyMTkuMDE1IDIwMS45MzksOTUuNTkxIAkJIi8+DQoJCTxnPg0KCQkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzLjEyOCw2NS4wMWMwLjc4NSwxLjY4OSwwLjU1NCwyLjA4OSwwLjA2NSwyLjA4OWMtMC4yMiwwLTAuNDkyLTAuMDgxLTAuNzQ3LTAuMTYxDQoJCQkJYy0wLjI1NS0wLjA4MS0wLjQ5NC0wLjE2MS0wLjY0OC0wLjE2MWMtMC40MzMsMC0wLjE4OSwwLjYzOSwyLjI2MywzLjcyYzMuNDY4LDQuNDA2LDU0LjM5OSw4MS4yOTMsNTcuMTgyLDgxLjI5Mw0KCQkJCWMwLjAxNSwwLDAuMDI4LTAuMDAyLDAuMDQtMC4wMDZjMjMuNzEtOC40NDgsMTI0LjU0My00My4wNTgsMTI0LjU0My00My4wNThMMTk1LjUxLDkzLjY5N0wyMy4xMjgsNjUuMDEiLz4NCgkJPC9nPg0KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMjQuNjA3LDYzLjEyMWMwLDAsMC43NiwzLjkzMiw0LjI4MSw4LjI4NGMzLjUsNC4zOTIsNTAuNTEsNzUuNTcxLDUyLjg2OSw3NC45NDQNCgkJCWMzMC43OTUtOC4xNzYsMTQyLjUyNS01MS42NzQsMTQyLjUyNS01MS42NzRMMjQuNjA3LDYzLjEyMXoiLz4NCgkJPHBvbHlnb24gY2xhc3M9InN0MyIgcG9pbnRzPSIxNjcuMzIxLDIxNy4xNjEgMTguNTY4LDE2Ny43MDMgMTkuMDk0LDE3MS4xNzggMTY4Ljk3NiwyMjEuMDEyIAkJIi8+DQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTAuMjQyOCIgeTE9Ijk1LjMxMTMiIHgyPSI1Ny43MDM5IiB5Mj0iOTUuMzExMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMzE1NkE4Ii8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjI0NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiMzMzUxQTQiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuNTM2NSIgc3R5bGU9InN0b3AtY29sb3I6IzNCNDM5NyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC44NDUzIiBzdHlsZT0ic3RvcC1jb2xvcjojNDcyQzgyIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojNEUxRDc1Ii8+DQoJCTwvbGluZWFyR3JhZGllbnQ+DQoJCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik01Ny43MDQsNTkuNzk1YzAsMC01NC4xMjIsMTUuODUtMjkuMjg4LDcxLjAzM2MwLDAtMTEuMzg3LTEwLjQyNi0xOC4xNjctMjMuNzU3DQoJCQlDOS45NDQsMTA2LjQ3NCwyMS41NSw2NS4yNDIsMjEuNTUsNjUuMjQyTDU3LjcwNCw1OS43OTV6Ii8+DQoJCQ0KCQkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9IjU5LjA3MzIiIGN5PSIxMTMuOTIzMiIgcj0iODUuMjQ2NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxLjQ1IDAgLTUxLjI2NTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjE2NTQiIHN0eWxlPSJzdG9wLWNvbG9yOiMxNENEREEiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuNTQ3OCIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC42NTQ2IiBzdHlsZT0ic3RvcC1jb2xvcjojMjY1OEFDIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjg2NCIgc3R5bGU9InN0b3AtY29sb3I6IzM3M0Y4MSIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzQzMkQ2MiIvPg0KCQk8L3JhZGlhbEdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjguNDE2LDEzMC44MjhjLTQuNzA3LTAuMDgxLTEyLjI2OS0zLjk2NC0xNC43MjItOC42NjVjLTMuMDY2LDUxLjA5OCwxNy43ODIsODAuOTM5LDUwLjg4LDk2Ljg1Mw0KCQkJQzUzLjc1OSwyMTcuNzc2LDAsMTg5LjQwNywwLDEyMS4xNEMwLDYzLjA5Myw0Ni4wNiwxMS4yMDgsMTE4LjE0Miw4LjgzMWMwLjQ0MiwzLjI1NC0zNS43MzYsMTEuNDE0LTM2Ljg5MywxNS4yNTENCgkJCWMtMS43OTYsNS45NzItNS45MjQsMTIuNDczLTkuNDA2LDE3LjY4NGMtNC43MTgsNy4wNjEsNi41NTcsMTMuMDk5LTEuNzI5LDE1LjAwMWMtMTIuNDY4LDIuODYxLTI5LjA5OCwxLjI3Ny00MS4zNjEsMTcuMjE5DQoJCQlDMTAuMzE5LDk3Ljk1MSwyMi42MiwxMjUuMzY1LDI4LjQxNiwxMzAuODI4eiIvPg0KCQk8Zz4NCgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iNDQuNTM4NyIgeTE9IjU3Ljg5NzUiIHgyPSIxOTEuNTE1IiB5Mj0iNTcuODk3NSI+DQoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuMTg0NiIgc3R5bGU9InN0b3AtY29sb3I6IzJCNTFBQyIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuNjgyNiIgc3R5bGU9InN0b3AtY29sb3I6IzQ0MkM4NCIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuOTQwOSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQkJPC9saW5lYXJHcmFkaWVudD4NCgkJCTxwYXRoIGNsYXNzPSJzdDciIGQ9Ik0xMzcuMDQ4LDEwLjY5OWMtNDYuNjgyLTMuNTgyLTcwLjcwNywxNS4wOTctODYuMTMsMzYuODE3Yy01LjYxNyw3LjkwNi01LjAwMiwxNS4xNjYtMy4wNjgsMjMuOTM3DQoJCQkJYzAuODMxLDMuNzQ0LDEuNjcxLDUuNTM4LDAuNjU5LDkuMzU1Yy0wLjU1OCwyLjEwNi0wLjQ2NSw0LjA3Mi0xLjE1OCw1LjMxNGMtMC45NTksMS43MTctMi4xOCwzLjU5NC0yLjU4OSw2LjY3Nw0KCQkJCWMtMS4wMjIsNy42OTksMS43MDMsMTAuMTUxLDMuNDA2LDEyLjc0MWMyLjQyNi0yLjQwOSw3LjE2NS04LjA3OSwxNS43MS0xMS40NjZjOC41NDUtMy4zODcsMTQuMTY3LTguNDc3LDI0Ljg3Ni0xMy45NDENCgkJCQljMTQuNjMyLTcuNDYzLDMxLjc4MiwzLjg1OSw2NC4zLTYuNzk2YzEwLjAwNi0zLjI3OSwzMy4wMDItMzcuMzQ0LDM4LjQ2MS0zOC42NTJDMTc2LjMxMiwxNy44NzMsMTUwLjQ0OCwxMS43MjYsMTM3LjA0OCwxMC42OTl6DQoJCQkJIi8+DQoJCTwvZz4NCgkJPHBhdGggY2xhc3M9InN0OCIgZD0iTTEwNi4yMDcsMC4wMzJjMCwwLTguMzM1LDQuMDI2LTExLjk2NSwxMS4zMDFjOC4zODEtNC4yMjUsMTMuMjQ2LTYuNTMzLDE1LjU0Ni02LjgwOA0KCQkJYzAsMC0yLjIwMywxLjA2Ny00LjkzNSw2Ljg3YzQuODMtMS41NDcsNi40OTMtMi41MjIsNy44MTktMi41MzdjMCwwLTAuMzg1LDAuNjEtMC43MzcsNi40MDINCgkJCWMtNy40MTctMi40MDQtMjEuNjkzLDAuMzk3LTI5LjI4Nyw1LjE1M0M4MC4wNzIsNi42NzgsMTA2LjIwNywwLjAzMiwxMDYuMjA3LDAuMDMyeiIvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzVfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjY2LjE3MzYiIHkxPSIyMy4yMDU2IiB4Mj0iMTY3LjI2NDIiIHkyPSIxMTEuMDgyMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjAyMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiM0OEE4RTAiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMzg4MyIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC40OTY4IiBzdHlsZT0ic3RvcC1jb2xvcjojMkI1MUFDIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjc4OTIiIHN0eWxlPSJzdG9wLWNvbG9yOiM0NDJDODQiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuOTQwOSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3Q5IiBkPSJNMTM5LjM3OSw4LjYzQzEyNS4wNyw2Ljc3NiwxMTMuMTA5LDcuMTQxLDEwMi45NCw5LjFjMy4xOTgtMy4wNjUsNi44OTgtNC41NzUsNi44OTgtNC41NzUNCgkJCWMtNC43OTUsMC40MjQtMTAuNzgxLDMuNTU0LTE1LjkxNyw2Ljg2OGMtMi41ODgsMC44MjYtNS4wNTQsMS43NTgtNy4zOSwyLjc5OWMxLjQzLTEuODg1LDMuMDk0LTMuODk5LDQuNzItNS40NDUNCgkJCWM2LjAzOS01Ljc0MywxNS4wMDYtOC43MTUsMTUuMDA2LTguNzE1Qzk4LjYwMy0wLjUzLDcyLjk4OSw2LjAyNyw1Ny41NzYsMzcuMjQ1Yy0yLjUyNiwzLjA3Ny00Ljg4Myw2LjIzNS03LjEyOSw5LjM5OA0KCQkJYy01Ljc5OCw4LjE2NC01LjE2MiwxNS42NTgtMy4xNjIsMjQuNzE1YzAuODUyLDMuODY3LDEuMDA5LDEwLjA0LDAuMTY4LDE0LjAyOWMtMC4xNjgsMC43OTktMi4zNjMsMi44NjMtMi45MjYsOC40MjgNCgkJCWMtMC42MDIsNS45MDUsMS41MDUsOC44MDQsMy41ODIsMTEuMjAzYzcuMzgtMTAuNzkyLDE0LjY2MS0xMi45MzEsMTQuNjYxLTEyLjkzMUM3My4xLDg3Ljg1NSw3Ny40LDgzLjMzNSw4OC40NTgsNzcuNjk0DQoJCQljMTUuMTA4LTcuNzA5LDY3LjkzOSwxNy40NSwxMDEuNTEyLDYuNDQ4YzEwLjMzMi0zLjM4NC0zLjk3Ny00Ny4zNTksMS42NjMtNDguNzA5QzE3NS45MzQsMTguMDczLDE1My4xMzksMTAuNDEzLDEzOS4zNzksOC42M3oiDQoJCQkvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE5LjY3NjIiIHkxPSIzMzcuNDEzOSIgeDI9IjIxNy44MzUzIiB5Mj0iNDMuNjMwOSI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjM3ODciIHN0eWxlPSJzdG9wLWNvbG9yOiMzMTU2QTgiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM0RTFENzUiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MTAiIGQ9Ik0yNDQuMTc2LDEwMy4yODhjLTguMjc2LTQzLjIzNy00OC4wOTYtODIuNTcyLTgwLjExNy04NC43NTJjLTE0LjIxMS0wLjk2OC05Ljg0Nyw2LjMxOS0xOC43MzksOS4wOTQNCgkJCWMtMzguMzIsMTEuOTU5LTM4LjkwNiwxOC45NDEtMzguOTA2LDE4Ljk0MWM4MS4yNTIsMy44MTksODIuNDg0LDg0LjA2NCw2MC43MjQsMTA0LjM2NmM2LjEyMy0xLjQyOCwxMi43NjItOC45MTQsMTguODU5LTIwLjY2Ng0KCQkJYy0wLjczMiw0LjkzMS0xLjM2LDEwLjk4LTIuMjc0LDE3LjcyOWMtMi43ODgsMjAuNTk1LDAuODIzLDYzLjYxNC01OC4zNTYsOTIuNDA1YzAsMCwzMi4zNzItMi42NDYsNDguNDI1LTIwLjcxNw0KCQkJYy02LjUyOCwxNS4wMTItMjQuNDQxLDIzLjEyMS0yNC40NDEsMjMuMTIxYzEzLjE4Mi0xLjkyOCw0Ny44MS0xMi4xNDYsNjkuODY4LTM5LjczMg0KCQkJQzI0NC4xODUsMTcxLjg1MiwyNTEuNjkzLDE0Mi41NTgsMjQ0LjE3NiwxMDMuMjg4eiIvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzdfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijk2Ljc0NTIiIHkxPSIyNzguNjQ1OCIgeDI9IjIwNi4zMTc1IiB5Mj0iMzIuNTQyMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMjlBQkUyIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjc3MzMiIHN0eWxlPSJzdG9wLWNvbG9yOiMzODVBQTYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuODU3NSIgc3R5bGU9InN0b3AtY29sb3I6IzQxNDI5MyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTE2NC45OTMsMTgyLjIyMWMwLDAsMjYuMzk2LTcuMzgsMzQuOTAzLTIxLjYzM2MtMS4wMzIsMTYuNjE5LTE2LjEwNywzMy42NjItMTYuMTA3LDMzLjY2Mg0KCQkJczIyLjAzOC00LjQ2LDMxLjQzNi0xOS45NjhjLTEuMjI0LDEzLjk5NC0xOC4xOTEsMzIuOTA3LTE4LjE5MSwzMi45MDdjMTcuMzQ2LTMuMTEzLDYwLjkzLTMwLjY0NSw0Ny4xNDMtMTAzLjkwMQ0KCQkJYy04LjE0Mi00My4yNjItNDguMDk2LTgyLjU3Mi04MC4xMTctODQuNzUyYy0xNC4yMTEtMC45NjgtOS44NDcsNi4zMTktMTguNzM5LDkuMDk0Yy0zOC4zMiwxMS45NTktMzguOTA2LDE4Ljk0MS0zOC45MDYsMTguOTQxDQoJCQljODEuMjUyLDMuODE5LDEwMi44NDQsNDYuMzQ0LDYwLjcyNCwxMDMuMjMxYzYuMTIzLTEuNDI5LDguNTc4LTQuNzk0LDEzLjE3OC0xMC4zMDENCgkJCUMxODAuMzE1LDEzOS41MDEsMTgyLjQwMSwxNjEuMjgxLDE2NC45OTMsMTgyLjIyMXoiLz4NCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF84XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI0OC4yNjg2IiB5MT0iOTIuMDMzNyIgeDI9IjU0LjI0MTQiIHkyPSI5NS40NjgzIj4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNCMERDRDYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM1M0FDRTAiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MTIiIGQ9Ik02MC42MDksODUuNTY3YzAsMC00LjcxOSwzLjMwMS04LjEzNiwyLjQ2Yy00LjA0NS0wLjk5My00LjczLTQuOTEzLTQuNzMtNC45MTMNCgkJCWMtMC4wODksMC44MDMtMC4xOTIsMS41NzgtMC4zNDEsMi4yNzNjLTAuMTY4LDAuNzk5LTIuMzYzLDIuODYzLTIuOTI2LDguNDI4Yy0wLjYwMiw1LjkwNSwxLjYxNSw5LjMyNSwzLjY5MiwxMS43MjQNCgkJCUM1NS41NDksOTQuNzQ3LDYyLjcyLDkyLjA4Nyw2Mi43Miw5Mi4wODdDNTkuOTExLDkxLjEwNSw2MC42MDksODUuNTY3LDYwLjYwOSw4NS41Njd6Ii8+DQoJCTxkZWZzPg0KCQkJPGZpbHRlciBpZD0iQWRvYmVfT3BhY2l0eU1hc2tGaWx0ZXIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMTYyLjY4IiB5PSIxOC4zNTUiIHdpZHRoPSIxNC45MjciIGhlaWdodD0iNi42MjkiPg0KCQkJCTxmZUNvbG9yTWF0cml4ICB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMSAwIDAgMCAwICAwIDEgMCAwIDAgIDAgMCAxIDAgMCAgMCAwIDAgMSAwIi8+DQoJCQk8L2ZpbHRlcj4NCgkJPC9kZWZzPg0KCQk8bWFzayBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIxNjIuNjgiIHk9IjE4LjM1NSIgd2lkdGg9IjE0LjkyNyIgaGVpZ2h0PSI2LjYyOSIgaWQ9IlNWR0lEXzlfIj4NCgkJCTxnIGNsYXNzPSJzdDEzIj4NCgkJCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzEwXyIgY3g9IjE1NC4zODQiIGN5PSI2Ny45OTg1IiByPSI1MS45Njc1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQoJCQkJCTxzdG9wICBvZmZzZXQ9IjAuODY4IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGIi8+DQoJCQkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDAiLz4NCgkJCQk8L3JhZGlhbEdyYWRpZW50Pg0KCQkJCTxyZWN0IHg9IjkxLjI5NSIgeT0iLTcuMjE4IiBjbGFzcz0ic3QxNCIgd2lkdGg9IjEwMC4wMTUiIGhlaWdodD0iOTMuMzM5Ii8+DQoJCQk8L2c+DQoJCTwvbWFzaz4NCgkJPGcgY2xhc3M9InN0MTUiPg0KCQkJPGcgY2xhc3M9InN0MTYiPg0KCQkJCTxnIGNsYXNzPSJzdDE3Ij4NCgkJCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTc2LjIxMzkiIHkxPSIyMy4wODUxIiB4Mj0iMTY0LjI0MDMiIHkyPSIyMC41NTU0Ij4NCgkJCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMzMDkyQjkiLz4NCgkJCQkJCTxzdG9wICBvZmZzZXQ9IjAuMjE5OSIgc3R5bGU9InN0b3AtY29sb3I6IzI1OERCNiIvPg0KCQkJCQkJPHN0b3AgIG9mZnNldD0iMC42NTY0IiBzdHlsZT0ic3RvcC1jb2xvcjojMTY4NUIxIi8+DQoJCQkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMTA4MkFGIi8+DQoJCQkJCTwvbGluZWFyR3JhZGllbnQ+DQoJCQkJCTxwYXRoIGNsYXNzPSJzdDE4IiBkPSJNMTYzLjUxMywxOC40MzRjMS4xMDYtMC4yODcsNS42MjEsMC4yMDQsOC41ODQsMS41MzNjMi45NjQsMS4zMjksOC4wNzMsMy42NzksMy45ODYsNC43MDENCgkJCQkJCWMtNC4wODgsMS4wMjItNi40MzgtMC42MTMtOC40ODItMi4zNTFTMTYwLjc1NCwxOS4xNDksMTYzLjUxMywxOC40MzR6Ii8+DQoJCQkJPC9nPg0KCQkJPC9nPg0KCQk8L2c+DQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMTJfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjgwLjc4MzgiIHkxPSIzOC4wMjUyIiB4Mj0iOTAuNjM3IiB5Mj0iNzcuNTQ0MyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjAwNzQiIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzk4RDE7c3RvcC1vcGFjaXR5OjAiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMjQ4MiIgc3R5bGU9InN0b3AtY29sb3I6IzExODdDMjtzdG9wLW9wYWNpdHk6MC42MTk3Ii8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjY0MjIiIHN0eWxlPSJzdG9wLWNvbG9yOiMzRjY0OTk7c3RvcC1vcGFjaXR5OjAuNzEiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMyRjQyODI7c3RvcC1vcGFjaXR5OjAuNSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTYxLjA1MSw4NC45MjFjMCwwLDI1Ljg4OC00Mi42NjIsNDkuMjkyLTU0LjE3NWMyLjE3My0xLjA5My0zMi40MDUsOS4xOTEtNDYuMzIsMjQuNTUNCgkJCUM1NS43NTIsNjQuNDI1LDYwLjEzMiw4Mi4yOTgsNjEuMDUxLDg0LjkyMXoiLz4NCgkJPHBhdGggY2xhc3M9InN0MjAiIGQ9Ik02MS4wNTEsODQuOTIxYzAuMDI0LTAuMDE1LDAuMDUtMC4wMywwLjA3NS0wLjA0NWM2LjY5NC00LjEzNiwxOC4xNjYtNi41MTgsMjEuODY0LTE0LjAxNQ0KCQkJYzE0LjIzNy0yOC44NjksMjcuMzU0LTQwLjExNSwyNy4zNTQtNDAuMTE1Qzg2LjkzOSw0Mi4yNTksNjEuMDUxLDg0LjkyMSw2MS4wNTEsODQuOTIxeiIvPg0KCQk8cGF0aCBjbGFzcz0ic3QyMSIgZD0iTTYzLjUxMiw3Ny4xMThjMCwwLTQuNjY2LTcuMTU5LDIuMDUzLTEzLjY4N2MzLjU0Ni0zLjQ0LDguOTE5LTEuNTI5LDkuNTQtMC45MQ0KCQkJYzIuNjQ0LDIuNjIyLDAuOTgyLDguMTU2LTEuMzk4LDExLjI4OEM3Mi4zNjIsNzUuNTczLDY4LjQ0OCw3OC4zMTksNjMuNTEyLDc3LjExOHoiLz4NCgkJDQoJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzEzXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI0OC43MzgzIiB5MT0iMTQuMzczIiB4Mj0iNDMuMTk5MyIgeTI9IjExLjMwMjciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45OTk0IDAuMDM0OSAtMC4wMzQ5IDAuOTk5NCAyNC41OTA2IDU3LjEyMDIpIj4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGOUMyMUIiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMTQ3OSIgc3R5bGU9InN0b3AtY29sb3I6I0YzQkExQiIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC4zNzg3IiBzdHlsZT0ic3RvcC1jb2xvcjojRTNBNDFCIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjY2MzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOTgwMUMiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuOTg4NCIgc3R5bGU9InN0b3AtY29sb3I6I0E0NEUxQyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNEMxQyIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QyMiIgZD0iTTY2LjE4Nyw3Ni42NzRjMCwwLTMuMjI0LTQuOTQ5LDEuNDIyLTkuNDU5YzIuNDQ2LTIuMzc2LDYuMTYxLTEuMDU2LDYuNTkyLTAuNjMNCgkJCWMxLjgyNiwxLjgxMiwwLjY3Niw1LjYzNy0wLjk2OCw3LjhDNzIuMzA0LDc1LjYwOCw2OS41OTgsNzcuNTA0LDY2LjE4Nyw3Ni42NzR6Ii8+DQoJCTxwYXRoIGQ9Ik03Mi42MjMsNzEuMzkzYy0wLjA3MiwxLjk3OC0xLjc0NiwzLjUyMi0zLjczOCwzLjQ1NGMtMS45OTYtMC4wNjktMy41NTgtMS43MjYtMy40ODctMy43MDQNCgkJCWMwLjA3MS0xLjk3NywxLjc0NC0zLjUyMSwzLjc0MS0zLjQ1M0M3MS4xMzEsNjcuNzU5LDcyLjY5Miw2OS40MTcsNzIuNjIzLDcxLjM5M3oiLz4NCgk8L2c+DQoJPGNpcmNsZSBjbGFzcz0ic3QyNCIgY3g9IjY2LjcyNSIgY3k9IjcwLjI4NyIgcj0iMS4xMzYiLz4NCgk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzE0XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyMDYuMjExMyIgeTE9IjEzMC4xMzkxIiB4Mj0iMTY5LjQyOTgiIHkyPSI0Ny41MjY0Ij4NCgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzQwOUVDMyIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjYyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjA2MUJEIi8+DQoJPC9saW5lYXJHcmFkaWVudD4NCgk8cGF0aCBjbGFzcz0ic3QyMyIgZD0iTTIyOC41MDUsNjUuMDFjLTE3LjcyMS0yNi45NzYtMzEuNzYxLTMzLjgzMS0zMS43NjEtMzMuODMxczAuNjQ1LDE5LjY1LDEwLjQ4NCwyOS4xMjgNCgkJYzEuMTI0LDEuMDgzLTExLjc3NC04LjQzMi0xMS43NzQtOC40MzJzLTIuNzU4LDkuMDc2LDMuNTYyLDE5LjUxYy0xLjgzNi0yLjQzOS0zLjA1MS0zLjM2My0zLjA1MS0zLjM2Mw0KCQlzLTExLjkwOCw1LjQ5MS0xNS40MjMsMTMuMTA5Yy0xLjgxNS0zLjQyNi0zLjE3Ni01LjQ0NC0zLjE3Ni01LjQ0NHMtOC4yMzYsMTYuNDM3LTcuMjAxLDM1LjQ5NQ0KCQljMS42ODQsMzAuOTg4LTUuODAzLDQyLjQwNC01LjgwMyw0Mi40MDRzMjAuMDU3LTcuNjk1LDI5LjY3Ni0zMi40NjhjMy45NzQsMTAuNTMzLTAuMTIxLDIxLjYxOS0wLjEyMSwyMS42MTkNCgkJczE2LjIwNi0xMi4xMDksMTkuNjkxLTM0LjE4YzMuODYzLDYuMjMsMi43MjcsMTguNjY0LDIuNzI3LDE4LjY2NHMxMC4zNDQtMTQuNDAyLDEwLjU5Ni0zMC4wODYNCgkJYzQuNzk0LDMuMzQzLDUuMjM1LDE2LjM5OSw1LjIzNSwxNi4zOTlTMjQ3LjUwMiw5My45MjgsMjI4LjUwNSw2NS4wMXoiLz4NCgk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzE1XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNzYuNzYwMyIgeTE9IjEwMy4wNjEiIHgyPSIxNTAuNDA2OSIgeTI9IjIxLjk1MzYiPg0KCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMTRCMkRBIi8+DQoJCTxzdG9wICBvZmZzZXQ9IjAuNDAyOCIgc3R5bGU9InN0b3AtY29sb3I6IzI5N0NDQyIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjUwNzciIHN0eWxlPSJzdG9wLWNvbG9yOiMyNTZGQzUiLz4NCgkJPHN0b3AgIG9mZnNldD0iMC42NDkyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjE2NEJGIi8+DQoJCTxzdG9wICBvZmZzZXQ9IjAuODE2MiIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiMyMDYxQkQiLz4NCgk8L2xpbmVhckdyYWRpZW50Pg0KCTxwYXRoIGNsYXNzPSJzdDI1IiBkPSJNMjExLjI4Miw0Ni4xNThjLTQuNjMxLTguNjMtMTIuODAzLTE0LjEzLTE5Ljk4Ni0xOC41ODJjLTE3LjkwOS0xMS4xMDUtMjkuNDI3LTEyLjY2NS0yOS40MjctMTIuNjY1DQoJCXMtMTYuNTI4LDMuMDc0LTEzLjY4OSw3LjY3MmMwLjE0NiwwLjIzNiwwLjQ4NywwLjUzNSwwLjk2OCwwLjg3N2MtMTQuNDk4LTYuNjc4LTIyLjcyMiw4LjY3Ny0yMi43MjIsOC42NzcNCgkJYy04LjI4NC0wLjUwMy0xOC4zNzEsMy41NzUtMjEuMzEyLDE0LjQ5OWMtMC4zMDUsMS4xMzQsMy43MTEsMC40OTYsNS43NzcsMC45NDVjMTIuMDc5LDIuNjI2LDIzLjQ1LDguMzIsMjguNjc1LDExLjEzNA0KCQljMTIuMTU0LDYuNTQ4LDE5LjM2NSwxNy40NTEsMjMuNTI4LDI1LjYyOWM1LjAzNyw5Ljg5NCw3LjA5NCwyNy4zMDQsNy4wOTQsMjcuMzA0czEzLjI1My0xOC4yMDUsMTAuMDg2LTI3LjU1Mg0KCQljNS4yNDksMy4yNiw2LjI4NSwxNC44OTEsNi4yODUsMTQuODkxczguODM1LTEzLjgzOCw2LjIyMy0yNS44OTFjNi44MTUsNC4xNTMsNy4wNDIsMTIuNjAxLDcuMDQyLDEyLjYwMXM2LjkzOS05LjYzMSwzLjgwMy0yNS40MjcNCgkJYzYuODU4LDUuNDUzLDguMjkzLDEyLjUxNyw4LjI5MywxMi41MTdTMjE3LjUyNiw1Ny43OTQsMjExLjI4Miw0Ni4xNTh6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"thunderbird,mail\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"thunderbird.desktop\"\nLABEL oc.launch=\"Mail.Thunderbird\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"thunderbird\"\nLABEL oc.displayname=\"Thunderbird\"\nLABEL oc.path=\"/usr/bin/thunderbird\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/mailto\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"thunderbird\"\nENV APPBIN \"/usr/bin/thunderbird\"\nENV APP \"/usr/bin/thunderbird\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/thunderbird/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/thunderbird/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/thunderbird/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/thunderbird/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes vice libmp3lame0 git wget && apt-get clean\nRUN git clone https://github.com/stuartcarnie/vice-emu/ && mv vice-emu/vice/data/DRIVES/* /usr/lib/vice/C64 && cd /vice-emu/vice/data/C64 && mv chargen kernal basic /usr/lib/vice/C64\nRUN mkdir /usr/lib/vice/C64/cartridge\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_1-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_1-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_2-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_2-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_3-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_3-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_4-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_4-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/C64638_Jack_Attack-8000.bin -O /usr/lib/vice/C64/cartridge/C64638_Jack_Attack-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/315102-01.bin -O /usr/lib/vice/C64/cartridge/315102-01.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/315103-01.bin -O /usr/lib/vice/C64/cartridge/315103-01.bin\nLABEL oc.icon=\"c64.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNDAiPg0KICA8cGF0aCBkPSJNODMsOTcuMTEwOSBMODMsMTI4LjU4MzMgQTYxLDYxIDAgMSwxIDgzLDExLjQxNjcgTDgzLDQyLjg4OTEgQTMyLDMyIDAgMSwwIDgzLDk3LjExMDkiIHN0cm9rZT0ibm9uZSIgZmlsbD0iIzAwMjI1NSIgLz4NCiAgPHBvbHlnb24gcG9pbnRzPSI4Myw0MyA4Myw2NyAxMTEsNjcgMTM1LDQzIiBzdHJva2U9Im5vbmUiIGZpbGw9IiMwMDIyNTUiIC8+DQogIDxwb2x5Z29uIHBvaW50cz0iODMsOTcgODMsNzMgMTExLDczIDEzNSw5NyIgc3Ryb2tlPSJub25lIiBmaWxsPSIjZmYwMDAwIiAvPg0KPC9zdmc+\"\nLABEL oc.keyword=\"vice,x64,vice,commodore,c64\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"x64.desktop\"\nLABEL oc.launch=\"x64.X64\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nLABEL oc.name=\"vice\"\nLABEL oc.displayname=\"Commodore64\"\nLABEL oc.path=\"/usr/bin/x64\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"crt;bin\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vice\"\nENV APPBIN \"/usr/bin/x64\"\nENV APP \"/usr/bin/x64\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vice/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vice/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vice/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vice/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update ffmpeg vlc-qt dbus dbus-x11 mesa-dri-gallium\nLABEL oc.icon=\"circle_vlc.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQ2FsY3VsYXRvciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlYzU4OSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iNTIwIiB4Mj0iNTIwIiB5MT0iNCIgeTI9IjEwMjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjZSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjUyMC4zMiIgeDI9IjUyMC4zMiIgeTE9Ii0xMzguNDYiIHkyPSIxNDg0LjgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZGE2NCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjM1MTUyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjQ0OTc2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDkuNTgyIiB4Mj0iNDkuNTgyIiB5MT0iLTQwLjc2NCIgeTI9IjEyMC45MiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDMuMjQ1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIuNiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM0ODc1IiB5PSItLjAzNzIiIHdpZHRoPSIxLjA2OTgiIGhlaWdodD0iMS4wNzQ0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjM5NDk5ODkiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSI1MTEuOCIgY3k9IjUxMS4zNSIgcj0iNDcxLjQ1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDgwOCAuMDI0NDQyIC0uMDI0NDM5IDEuMDgwNiAtMjguODM5IC01My43NDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRhNjQiIHN0b3Atb3BhY2l0eT0iLjA4NTU2MiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjkxMDczIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjE0MzUiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCAtLjY3OCkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICA8ZyBpZD0ic2hhZG93IiB0cmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIj48L2c+CiAgPGcgaWQ9ImNpcmNsZSIgdHJhbnNmb3JtPSJtYXRyaXgoLjk5Nzk4IDAgMCAuOTk3OTggLjczMTMxIDIuMTgwNCkiIGZpbGw9InVybCgjZCkiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8cGF0aCBkPSJtOTgzLjI1IDUxMS4zNWMwLTcuOTUtMC4yLTE1Ljg1LTAuNS0yMy41NXEtOC0xODAuMTUtMTM3LjU1LTMwOS44NWMtOTIuMDUtOTItMjAzLjItMTM4LjA1LTMzMy40LTEzOC4wNS0xMzAuMTUgMC0yNDEuMzUgNDYuMDUtMzMzLjM1IDEzOC4wNS05Mi4wNSA5Mi0xMzguMSAyMDMuMi0xMzguMSAzMzMuNCAwIDEzMC4xNSA0Ni4wNSAyNDEuMzUgMTM4LjEgMzMzLjM1IDg2LjE1IDg2LjMgMTg5LjM1IDEzMi4xNSAzMDkuMTUgMTM3LjYgOCAwLjMgMTYgMC41IDI0LjIgMC41IDEzMC4yIDAgMjQxLjM1LTQ2LjEgMzMzLjQtMTM4LjEgOTItOTIgMTM4LjA1LTIwMy4yIDEzOC4wNS0zMzMuMzV6IiBmaWxsPSIjMDAwIiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yNSIvPgogICAgPHBhdGggZD0ibTk4My4yNSA1MTEuMzVjMC03Ljk1LTAuMi0xNS44NS0wLjUtMjMuNTVxLTgtMTgwLjE1LTEzNy41NS0zMDkuODVjLTkyLjA1LTkyLTIwMy4yLTEzOC4wNS0zMzMuNC0xMzguMDUtMTMwLjE1IDAtMjQxLjM1IDQ2LjA1LTMzMy4zNSAxMzguMDUtOTIuMDUgOTItMTM4LjEgMjAzLjItMTM4LjEgMzMzLjQgMCAxMzAuMTUgNDYuMDUgMjQxLjM1IDEzOC4xIDMzMy4zNSA4Ni4xNSA4Ni4zIDE4OS4zNSAxMzIuMTUgMzA5LjE1IDEzNy42IDggMC4zIDE2IDAuNSAyNC4yIDAuNSAxMzAuMiAwIDI0MS4zNS00Ni4xIDMzMy40LTEzOC4xIDkyLTkyIDEzOC4wNS0yMDMuMiAxMzguMDUtMzMzLjM1eiIgZmlsbD0idXJsKCNjKSIvPgogICAgPHBhdGggZD0ibTk4My4yNSA1MTEuMzVjMC03Ljk1LTAuMi0xNS44NS0wLjUtMjMuNTVxLTgtMTgwLjE1LTEzNy41NS0zMDkuODVjLTkyLjA1LTkyLTIwMy4yLTEzOC4wNS0zMzMuNC0xMzguMDUtMTMwLjE1IDAtMjQxLjM1IDQ2LjA1LTMzMy4zNSAxMzguMDUtOTIuMDUgOTItMTM4LjEgMjAzLjItMTM4LjEgMzMzLjQgMCAxMzAuMTUgNDYuMDUgMjQxLjM1IDEzOC4xIDMzMy4zNSA4Ni4xNSA4Ni4zIDE4OS4zNSAxMzIuMTUgMzA5LjE1IDEzNy42IDggMC4zIDE2IDAuNSAyNC4yIDAuNSAxMzAuMiAwIDI0MS4zNS00Ni4xIDMzMy40LTEzOC4xIDkyLTkyIDEzOC4wNS0yMDMuMiAxMzguMDUtMzMzLjM1eiIgZmlsbD0idXJsKCNhKSIgb3BhY2l0eT0iLjIiLz4KICAgPC9nPgogIDwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCg2LjA1NjIgMCAwIDYuMDU2MiAyMTkuOSAxOTkuODMpIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTQ3Ljk5OCA2My40MzRjMTEuOTUxIDAgMjEuOTU1LTQuMDYxIDIyLjU2MS05LjM2Mi0xLjc3Ny00Ljk4NS0zLjcxNS0xMC40MjEtNS42MTktMTUuNzY0LTEuMzIyIDMuODExLTguNjIzIDYuNDk4LTE2Ljk0MSA2LjQ5OC04LjMxNiAwLTE1LjYxNy0yLjY4OC0xNi45NDEtNi40OTctMS45MDQgNS4zNDItMy44NCAxMC43NzctNS42MTcgMTUuNzYzIDAuNjA0IDUuMzAxIDEwLjYwNiA5LjM2MiAyMi41NTcgOS4zNjJ6bTAtMzMuNTI2YzUuNjE3IDAgMTAuODM2LTEuNzM5IDEyLjM2My00LjQzOS0yLjEwNS01LjkxMy0zLjkxNC0xMC45ODYtNS4wNTctMTQuMTg3LTAuNzU5LTIuMTMzLTQuMjAxLTMuMjQxLTcuMzA2LTMuMjQxcy02LjU0NyAxLjEwOC03LjMwNyAzLjI0MWMtMS4xNDEgMy4yMDEtMi45NDkgOC4yNzQtNS4wNTcgMTQuMTg3IDEuNTI4IDIuNyA2Ljc0OSA0LjQzOSAxMi4zNjQgNC40Mzl6bTQzLjkwNCAzOC40NjUtMTguNzc3LTcuNTYzIDIuMTYyIDYuMDMzYy0wLjEwOSA2LjM5NC0xMi41MjEgMTEuNDg5LTI3LjI4OSAxMS40ODktMTQuNzY2IDAtMjcuMTgtNS4wOTUtMjcuMjg3LTExLjQ4OWwyLjE2LTYuMDMzLTE4Ljc3NSA3LjU2M2MtNS4yNjQgMi4xMjEtNS40ODQgNi4wNDktMC40OSA4LjcyNmwzNS4zMTIgMTguOTM1YzQuOTk0IDIuNjc3IDEzLjE2OCAyLjY3NyAxOC4xNjIgMGwzNS4zMTItMTguOTM1YzQuOTk1LTIuNjc3IDQuNzc0LTYuNjA1LTAuNDktOC43MjZ6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yIi8+CiAgICA8cGF0aCBkPSJtNDcuOTk4IDYxLjYzN2MxMS45NTEgMCAyMS45NTUtNC4wNjEgMjIuNTYxLTkuMzYyLTEuNzc3LTQuOTg1LTMuNzE1LTEwLjQyMS01LjYxOS0xNS43NjQtMS4zMjIgMy44MTEtOC42MjMgNi40OTgtMTYuOTQxIDYuNDk4LTguMzE2IDAtMTUuNjE3LTIuNjg4LTE2Ljk0MS02LjQ5Ny0xLjkwNCA1LjM0Mi0zLjg0IDEwLjc3Ny01LjYxNyAxNS43NjMgMC42MDQgNS4zMDEgMTAuNjA2IDkuMzYyIDIyLjU1NyA5LjM2MnptMC0zMy41MjZjNS42MTcgMCAxMC44MzYtMS43MzkgMTIuMzYzLTQuNDM5LTIuMTA1LTUuOTEzLTMuOTE0LTEwLjk4Ni01LjA1Ny0xNC4xODctMC43NTktMi4xMzMtNC4yMDEtMy4yNDEtNy4zMDYtMy4yNDFzLTYuNTQ3IDEuMTA4LTcuMzA3IDMuMjQxYy0xLjE0MSAzLjIwMS0yLjk0OSA4LjI3NC01LjA1NyAxNC4xODcgMS41MjggMi43IDYuNzQ5IDQuNDM5IDEyLjM2NCA0LjQzOXptNDMuOTA0IDM4LjQ2NS0xOC43NzctNy41NjMgMi4xNjIgNi4wMzNjLTAuMTA5IDYuMzk0LTEyLjUyMSAxMS40ODktMjcuMjg5IDExLjQ4OS0xNC43NjYgMC0yNy4xOC01LjA5NS0yNy4yODctMTEuNDg5bDIuMTYtNi4wMzMtMTguNzc1IDcuNTYzYy01LjI2NCAyLjEyMS01LjQ4NCA2LjA0OS0wLjQ5IDguNzI2bDM1LjMxMiAxOC45MzVjNC45OTQgMi42NzcgMTMuMTY4IDIuNjc3IDE4LjE2MiAwbDM1LjMxMi0xOC45MzVjNC45OTUtMi42NzcgNC43NzQtNi42MDUtMC40OS04LjcyNnoiIGZpbGw9InVybCgjYikiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"vlc,vlc, videolan, video, lan, dvd\"\nLABEL oc.cat=\"utilities,office,graphics\"\nLABEL oc.desktopfile=\"vlc.desktop\"\nLABEL oc.launch=\"vlc.vlc\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"vlc\"\nLABEL oc.displayname=\"videolan\"\nLABEL oc.path=\"/usr/bin/vlc\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"video/3gpp;video/dv;video/fli;video/flv;video/mp2t;video/mp4;video/mp4v-es;video/mpeg;video/msvideo;video/ogg;video/quicktime;video/vivo;video/vnd.divx;video/vnd.rn-realvideo;video/vnd.vivo;video/webm;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flic;video/x-flv;video/x-m4v;video/x-matroska;video/x-mpeg;video/x-ms-asf;video/x-ms-asx;video/x-msvideo;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-nsv;video/x-ogm+ogg;video/x-theora+ogg;\"\nLABEL oc.fileextensions=\"asx;dts;gxf;m2v;m3u;m4v;mpeg1;mpeg2;mts;mxf;ogm;pls;bup;a52;aac;b4s;cue;divx;dv;flv;m1v;m2ts;mkv;mov;mpeg4;oma;spx;ts,vlc,vob,xspf;dat;bin;ifo;part;3g2;avi;mpeg;mpg;flac;m4a;mp1;ogg;wav;xm;3gp;srt;wmv;ac3;asf;mod;mp2;mp3;mp4;wma;mka;m4p\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vlc\"\nENV APPBIN \"/usr/bin/vlc\"\nENV APP \"/usr/bin/vlc\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vlc/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vlc/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vlc/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vlc/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/vmmacos/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktop/docker-osx:$TAG\nUSER root\nRUN yes | sudo pacman -S xorg-xauth\nLABEL oc.icon=\"MacOS_logo.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQyIDQyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0yMy4wOTEgMTQuMDE4di0wLjM0MmwtMS4wNjMgMC4wNzNjLTAuMzAxIDAuMDE5LTAuNTI3IDAuMDgzLTAuNjc5IDAuMTkxLTAuMTUyIDAuMTA5LTAuMjI4IDAuMjYtMC4yMjggMC40NTMgMCAwLjE4OCAwLjA3NSAwLjMzOCAwLjIyNiAwLjQ0OSAwLjE1IDAuMTEyIDAuMzUyIDAuMTY3IDAuNjA0IDAuMTY3IDAuMTYxIDAgMC4zMTItMC4wMjUgMC40NTEtMC4wNzRzMC4yNjEtMC4xMTggMC4zNjMtMC4yMDZjMC4xMDItMC4wODcgMC4xODItMC4xOTEgMC4yMzktMC4zMTIgMC4wNTgtMC4xMjEgMC4wODctMC4yNTQgMC4wODctMC4zOTl6bS0yLjA5MS0xMy43NjhjLTExLjU3OSAwLTIwLjc1IDkuMTcxLTIwLjc1IDIwLjc1IDAgMTEuNTggOS4xNzEgMjAuNzUgMjAuNzUgMjAuNzVzMjAuNzUtOS4xNyAyMC43NS0yMC43NWMwLTExLjU3OS05LjE3LTIwLjc1LTIwLjc1LTIwLjc1em00LjAyOCAxMi4yOTljMC4wOTgtMC4yNzUgMC4yMzYtMC41MTEgMC40MTUtMC43MDdzMC4zOTQtMC4zNDcgMC42NDYtMC40NTMgMC41MzMtMC4xNTkgMC44NDItMC4xNTljMC4yNzkgMCAwLjUzMSAwLjA0MiAwLjc1NSAwLjEyNSAwLjIyNSAwLjA4MyAwLjQxNyAwLjE5NSAwLjU3OCAwLjMzNnMwLjI4OSAwLjMwNSAwLjM4MyAwLjQ5MyAwLjE1IDAuMzg3IDAuMTY5IDAuNTk2aC0wLjgzM2MtMC4wMjEtMC4xMTUtMC4wNTktMC4yMjMtMC4xMTMtMC4zMjJzLTAuMTI1LTAuMTg1LTAuMjEzLTAuMjU4Yy0wLjA4OS0wLjA3My0wLjE5My0wLjEzLTAuMzEyLTAuMTcxLTAuMTItMC4wNDItMC4yNTQtMC4wNjItMC40MDUtMC4wNjItMC4xNzcgMC0wLjMzOCAwLjAzNi0wLjQ4MSAwLjEwNy0wLjE0NCAwLjA3MS0wLjI2NyAwLjE3Mi0wLjM2OSAwLjMwMnMtMC4xODEgMC4yODktMC4yMzcgMC40NzVjLTAuMDU3IDAuMTg3LTAuMDg1IDAuMzk0LTAuMDg1IDAuNjIyIDAgMC4yMzYgMC4wMjggMC40NDggMC4wODUgMC42MzQgMC4wNTYgMC4xODcgMC4xMzYgMC4zNDQgMC4yNCAwLjQ3MyAwLjEwMyAwLjEyOSAwLjIyOCAwLjIyOCAwLjM3MyAwLjI5NnMwLjMwNSAwLjEwMyAwLjQ3OSAwLjEwM2MwLjI4NSAwIDAuNTE3LTAuMDY3IDAuNjk3LTAuMjAxczAuMjk2LTAuMzMgMC4zNS0wLjU4OGgwLjgzNGMtMC4wMjQgMC4yMjgtMC4wODcgMC40MzYtMC4xODkgMC42MjRzLTAuMjM0IDAuMzQ4LTAuMzk2IDAuNDgxYy0wLjE2MyAwLjEzMy0wLjM1NCAwLjIzNi0wLjU3NCAwLjMwOHMtMC40NjIgMC4xMDktMC43MjUgMC4xMDljLTAuMzEyIDAtMC41OTMtMC4wNTItMC44NDYtMC4xNTUtMC4yNTItMC4xMDMtMC40NjktMC4yNTItMC42NDktMC40NDVzLTAuMzE5LTAuNDI4LTAuNDE3LTAuNzA1LTAuMTQ3LTAuNTg4LTAuMTQ3LTAuOTM1Yy0yZS0zIC0wLjMzOSAwLjA0Ny0wLjY0NyAwLjE0NS0wLjkyM3ptLTExLjg1My0xLjI2MmgwLjgzNHYwLjc0MWgwLjAxNmMwLjA1MS0wLjEyMyAwLjExOC0wLjIzNCAwLjItMC4zMyAwLjA4Mi0wLjA5NyAwLjE3Ni0wLjE3OSAwLjI4NC0wLjI0OCAwLjEwNy0wLjA2OSAwLjIyNi0wLjEyMSAwLjM1NC0wLjE1NyAwLjEyOS0wLjAzNiAwLjI2NS0wLjA1NCAwLjQwNy0wLjA1NCAwLjMwNiAwIDAuNTY1IDAuMDczIDAuNzc1IDAuMjE5IDAuMjExIDAuMTQ2IDAuMzYxIDAuMzU2IDAuNDQ5IDAuNjNoMC4wMjFjMC4wNTYtMC4xMzIgMC4xMy0wLjI1IDAuMjIxLTAuMzU0czAuMTk2LTAuMTk0IDAuMzE0LTAuMjY4IDAuMjQ4LTAuMTMgMC4zODktMC4xNjkgMC4yODktMC4wNTggMC40NDUtMC4wNThjMC4yMTUgMCAwLjQxIDAuMDM0IDAuNTg2IDAuMTAzczAuMzI2IDAuMTY1IDAuNDUxIDAuMjkgMC4yMjEgMC4yNzcgMC4yODggMC40NTUgMC4xMDEgMC4zNzYgMC4xMDEgMC41OTR2Mi45ODFoLTAuODd2LTIuNzcyYzAtMC4yODctMC4wNzQtMC41MS0wLjIyMi0wLjY2Ny0wLjE0Ny0wLjE1Ny0wLjM1OC0wLjIzNi0wLjYzMi0wLjIzNi0wLjEzNCAwLTAuMjU3IDAuMDI0LTAuMzY5IDAuMDcxLTAuMTExIDAuMDQ3LTAuMjA4IDAuMTEzLTAuMjg4IDAuMTk4LTAuMDgxIDAuMDg0LTAuMTQ0IDAuMTg2LTAuMTg5IDAuMzA0LTAuMDQ2IDAuMTE4LTAuMDY5IDAuMjQ3LTAuMDY5IDAuMzg3djIuNzE1aC0wLjg1OHYtMi44NDRjMC0wLjEyNi0wLjAyLTAuMjQtMC4wNTktMC4zNDJzLTAuMDk0LTAuMTg5LTAuMTY3LTAuMjYyYy0wLjA3Mi0wLjA3My0wLjE2MS0wLjEyOC0wLjI2NC0wLjE2Ny0wLjEwNC0wLjAzOS0wLjIyLTAuMDU5LTAuMzQ5LTAuMDU5LTAuMTM0IDAtMC4yNTggMC4wMjUtMC4zNzMgMC4wNzUtMC4xMTQgMC4wNS0wLjIxMiAwLjExOS0wLjI5NCAwLjIwNy0wLjA4MiAwLjA4OS0wLjE0NiAwLjE5My0wLjE5MSAwLjMxNC0wLjA0NCAwLjEyLTAuMTE2IDAuMjUyLTAuMTE2IDAuMzk0djIuNjgzaC0wLjgyNXYtNC4zNzR6bTEuODkzIDIwLjkzOWMtMy44MjUgMC02LjIyNC0yLjY1OC02LjIyNC02LjlzMi4zOTktNi45MDkgNi4yMjQtNi45MDkgNi4yMTUgMi42NjcgNi4yMTUgNi45MDljMCA0LjI0MS0yLjM5IDYuOS02LjIxNSA2Ljl6bTcuMDgyLTE2LjU3NWMtMC4xNDEgMC4wMzYtMC4yODUgMC4wNTQtMC40MzMgMC4wNTQtMC4yMTggMC0wLjQxNy0wLjAzMS0wLjU5OC0wLjA5My0wLjE4Mi0wLjA2Mi0wLjMzNy0wLjE0OS0wLjQ2Ny0wLjI2MnMtMC4yMzItMC4yNDktMC4zMDQtMC40MDljLTAuMDczLTAuMTYtMC4xMDktMC4zMzgtMC4xMDktMC41MzQgMC0wLjM4NCAwLjE0My0wLjY4NCAwLjQyOS0wLjlzMC43LTAuMzQyIDEuMjQzLTAuMzc3bDEuMTgtMC4wNjh2LTAuMzM4YzAtMC4yNTItMC4wOC0wLjQ0NS0wLjI0LTAuNTc2cy0wLjM4Ni0wLjE5Ny0wLjY3OS0wLjE5N2MtMC4xMTggMC0wLjIyOSAwLjAxNS0wLjMzMSAwLjA0NC0wLjEwMiAwLjAzLTAuMTkyIDAuMDcyLTAuMjcgMC4xMjdzLTAuMTQzIDAuMTIxLTAuMTkzIDAuMTk4Yy0wLjA1MSAwLjA3Ni0wLjA4NiAwLjE2Mi0wLjEwNSAwLjI1NmgtMC44MThjNWUtMyAtMC4xOTMgMC4wNTMtMC4zNzIgMC4xNDMtMC41MzZzMC4yMTItMC4zMDYgMC4zNjctMC40MjcgMC4zMzYtMC4yMTUgMC41NDYtMC4yODIgMC40MzgtMC4xMDEgMC42ODUtMC4xMDFjMC4yNjYgMCAwLjUwNyAwLjAzMyAwLjcyMyAwLjEwMXMwLjQwMSAwLjE2MyAwLjU1NCAwLjI4OCAwLjI3MSAwLjI3NSAwLjM1NCAwLjQ1MSAwLjEyNSAwLjM3MyAwLjEyNSAwLjU5djMuMDAxaC0wLjgzM3YtMC43MjloLTAuMDIxYy0wLjA2MiAwLjExOC0wLjE0IDAuMjI1LTAuMjM1IDAuMzItMC4wOTYgMC4wOTUtMC4yMDMgMC4xNzctMC4zMjIgMC4yNDQtMC4xMiAwLjA2Ny0wLjI1IDAuMTE5LTAuMzkxIDAuMTU1em01LjUwMyAxNi41NzVjLTIuOTE3IDAtNC45LTEuNTI4LTUuMDM4LTMuOTI3aDEuODk5YzAuMTQ4IDEuMzcxIDEuNDczIDIuMjc5IDMuMjg4IDIuMjc5IDEuNzQxIDAgMi45OTItMC45MDggMi45OTItMi4xNDkgMC0xLjA3NC0wLjc2LTEuNzIzLTIuNTE5LTIuMTY3bC0xLjcxNC0wLjQyNmMtMi40NjQtMC42MTEtMy41ODQtMS43MzItMy41ODQtMy41NzUgMC0yLjI2OSAxLjk4Mi0zLjg0NCA0LjgwNy0zLjg0NCAyLjc2IDAgNC42ODYgMS41ODQgNC43NiAzLjg2MmgtMS44OGMtMC4xMy0xLjM3MS0xLjI1LTIuMjE0LTIuOTE4LTIuMjE0LTEuNjU4IDAtMi44MDYgMC44NTItMi44MDYgMi4wODQgMCAwLjk3MiAwLjcyMiAxLjU0NyAyLjQ4MiAxLjk5MWwxLjQ0NSAwLjM2MWMyLjc1MSAwLjY2NyAzLjg4MSAxLjc1MSAzLjg4MSAzLjY5Ni0xZS0zIDIuNDgyLTEuOTY0IDQuMDI5LTUuMDk1IDQuMDI5em0tMTIuNTg1LTEyLjEwNmMtMi42MjEgMC00LjI2IDIuMDEtNC4yNiA1LjIwNSAwIDMuMTg2IDEuNjM5IDUuMTk2IDQuMjYgNS4xOTYgMi42MTIgMCA0LjI2LTIuMDEgNC4yNi01LjE5NiAxZS0zIC0zLjE5NS0xLjY0OC01LjIwNS00LjI2LTUuMjA1eiIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"vmmacos,macos,apple\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"qemu.Qemu-system-x86_64\"\nLABEL oc.template=\"abcdesktop/docker-osx\"\nLABEL oc.name=\"vmmacos\"\nLABEL oc.displayname=\"vmmacos\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"devices\\\":[\\\"/dev/kvm\\\"],\\\"mem_limit\\\":\\\"16G\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmmacos\"\nLABEL oc.home=\"/home/arch\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER arch\nCMD [ \"/bin/bash,-c,sudo touch /dev/kvm /dev/snd \"${IMAGE_PATH}\" \"${BOOTDISK}\" \"${ENV}\" 2>/dev/null || true; sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd \"${IMAGE_PATH}\" \"${BOOTDISK}\" \"${ENV}\" 2>/dev/null || true ; [[ \"${NOPICKER}\" == true ]] && { sed -i '/^.*InstallMedia.*/d' Launch.sh && export BOOTDISK=\"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore-nopicker.qcow2}\" ; } || export BOOTDISK=\"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" ; [[ \"${GENERATE_UNIQUE}\" == true ]] && { ./Docker-OSX/osx-serial-generator/generate-unique-machine-values.sh --master-plist-url=\"${MASTER_PLIST_URL}\" --count 1 --tsv ./serial.tsv --bootdisks --width \"${WIDTH:-1920}\" -height \"${HEIGHT:-1080}\" --output-bootdisk \"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" --output-env \"${ENV:=/env}\" || exit 1 ; } ; [[ \"${GENERATE_SPECIFIC}\" == true ]] && { source \"${ENV:=/env}\" 2>/dev/null ; ./Docker-OSX/osx-serial-generator/generate-specific-bootdisk.sh --master-plist-url=\"${MASTER_PLIST_URL}\" --model \"${DEVICE_MODEL}\" --serial \"${SERIAL}\" --board-serial \"${BOARD_SERIAL}\" --uuid \"${UUID}\" --mac-address \"${MAC_ADDRESS}\" --width \"${WIDTH:-1920}\" --height \"${HEIGHT:-1080}\" --output-bootdisk \"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" || exit 1 ; } ; ./abcdesktop_config.sh ; ./Launch.sh\" ]\n\n
"},{"location":"applications/vmmacos/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmmacos/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmmacos/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmmacos/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libaio1 && apt-get clean\nCOPY VMware-Remote-Console-12.0.1-18113358.x86_64.bundle /tmp\nRUN chmod o+x /tmp/VMware-Remote-Console-12.0.1-18113358.x86_64.bundle\nRUN /tmp/VMware-Remote-Console-12.0.1-18113358.x86_64.bundle --eulas-agreed --console --required --ignore-errors\nLABEL oc.icon=\"circle_vmware.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQXBwLVN0b3JlIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI1MjAiIHgyPSI1MjAuMDMiIHkxPSI0NCIgeTI9Ijk4NS44NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0MjM3IC0uNTQyMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxNWUxZmMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTg2M2VlIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9Ii0xLjM1NTkiIHgyPSItMS4zNTU5IiB5MT0iLTU5LjExOSIgeTI9IjE5Ni44OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZlYjQyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTMxMSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI2Mi42NDQiIHgyPSI2Mi42NDQiIHkxPSItMTIzLjEyIiB5Mj0iMTMyLjg4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZThlOGU4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDc1IiB5PSItLjA3NSIgd2lkdGg9IjEuMTUiIGhlaWdodD0iMS4xNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNy45OTk5OTk4Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wNzUiIHk9Ii0uMDc1IiB3aWR0aD0iMS4xNSIgaGVpZ2h0PSIxLjE1IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3Ljk5OTk5OTgiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM1NiAwIDAgLjA2MzU2IC0uNTQyMzcgLS41NDIzNykiIGQ9Im05NjkuNyAzOTJjLTEuMS00LjM1LTIuMzUtOS0zLjY1LTEzLjYtMi41LTguNzUtNS4zNS0xNy42LTguNDUtMjYuMzUtNi40NS0xOC4yNS0xNC4xNS0zNi4wNS0yMy4xNS01My42NS0zLjgtNy40LTcuOTUtMTQuOTUtMTIuMy0yMi40aC0wLjAyNXEtMzAuNjAxLTUyLjAxLTc2LjMyNS05Ny43NWMtOTIuMTUtOTIuMTUtMjAzLjQ1LTEzOC4yNS0zMzMuOC0xMzguMjVzLTI0MS42IDQ2LjEtMzMzLjc1IDEzOC4yNS0xMzguMjUgMjAzLjQtMTM4LjI1IDMzMy43NSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjhjNjguMDUgNjguMDUgMTQ2LjUgMTEwLjk1IDIzNC45IDEyOC42NSAzMS45NSA2LjQgNjQuNzUgOS41NSA5OC44NSA5LjU1IDEzMC4zNSAwIDI0MS42NS00Ni4wNSAzMzMuOC0xMzguMiA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTctNDMuOTUgMjctOTAuOCAyOS45NS0xNDAuNzUgMC42LTEwLjIgMC45LTIwLjY1IDAuOS0zMS4yNSAwLTQxLjc1LTQuNy04MS42LTE0LjMtMTIweiIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMTUuNjcyIi8+CiA8cGF0aCBkPSJtNjEuMDkxIDI0LjM3M2MtMC4wNjk5MTYtMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDQtMC4yMzE5OS0wLjg2NDQxLTAuMTU4OS0wLjU1NjE1LTAuMzQwMDQtMS4xMTg2LTAuNTM3MDgtMS42NzQ4LTAuNDA5OTYtMS4xNi0wLjg5OTM3LTIuMjkxMy0xLjQ3MTQtMy40MS0wLjI0MTUzLTAuNDcwMzQtMC41MDUzLTAuOTUwMjItMC43ODE3OC0xLjQyMzdoLTAuMDAxNnEtMS45NDUtMy4zMDU3LTQuODUxMi02LjIxMjljLTUuODU3LTUuODU3LTEyLjkzMS04Ljc4NzEtMjEuMjE2LTguNzg3MXMtMTUuMzU2IDIuOTMwMS0yMS4yMTMgOC43ODcxLTguNzg3MSAxMi45MjgtOC43ODcxIDIxLjIxMyAyLjkzMDEgMTUuMzU5IDguNzg3MSAyMS4yMTZjNC4zMjUyIDQuMzI1MiA5LjMxMTUgNy4wNTE5IDE0LjkzIDguMTc2OSAyLjAzMDcgMC40MDY3OCA0LjExNTUgMC42MDY5OSA2LjI4MjkgMC42MDY5OSA4LjI4NSAwIDE1LjM1OS0yLjkyNjkgMjEuMjE2LTguNzgzOSAzLjA4OS0zLjA4OSA1LjM2NDQtNi41MTQ4IDYuODIzMS0xMC4yODQgMS4wODA1LTIuNzkzNCAxLjcxNjEtNS43NzEyIDEuOTAzNi04Ljk0NiAwLjAzODE0LTAuNjQ4MzEgMC4wNTcyLTEuMzEyNSAwLjA1NzItMS45ODYyIDAtMi42NTM2LTAuMjk4NzMtNS4xODY1LTAuOTA4OS03LjYyNzF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTYxIi8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMSAwIDAgLjEgMjguOTM2IDI4LjMxMikiIHN0cm9rZS13aWR0aD0iMTMuMzMzIj4KICA8cGF0aCBkPSJtMTAyLjY0IDE5Ni44OGMxMy4yOTcgMCAyNC0xMC43MDMgMjQtMjR2LTIwOGMwLTEzLjI5Ny0xMC43MDMtMjQtMjQtMjRoLTIwOGMtMTMuMjk3IDAtMjQgMTAuNzAzLTI0IDI0djIwOGMwIDEzLjI5NyAxMC43MDMgMjQgMjQgMjR6bS00MC02NGgtMTI4di0xMjhoMTI4eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBkPSJtMTY2LjY0IDEzMi44OGMxMy4yOTcgMCAyNC0xMC43MDMgMjQtMjR2LTIwOGMwLTEzLjI5Ny0xMC43MDMtMjQtMjQtMjRoLTIwOGMtMTMuMjk3IDAtMjQgMTAuNzAzLTI0IDI0djQwaDE5MnYxMjhoLTEyOHYtNjRoLTY0djEwNGMwIDEzLjI5NyAxMC43MDMgMjQgMjQgMjR6IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGQ9Im0xMDIuNjQgMTk2Ljg4YzEzLjI5NyAwIDI0LTEwLjcwMyAyNC0yNHYtMjA4YzAtMTMuMjk3LTEwLjcwMy0yNC0yNC0yNGgtMjA4Yy0xMy4yOTcgMC0yNCAxMC43MDMtMjQgMjR2MjA4YzAgMTMuMjk3IDEwLjcwMyAyNCAyNCAyNHptLTQwLTY0aC0xMjh2LTEyOGgxMjh6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgPHBhdGggZD0ibTE2Ni42NCAxMzIuODhjMTMuMjk3IDAgMjQtMTAuNzAzIDI0LTI0di0yMDhjMC0xMy4yOTctMTAuNzAzLTI0LTI0LTI0aC0yMDhjLTEzLjI5NyAwLTI0IDEwLjcwMy0yNCAyNHY0MGgxOTJ2MTI4aC0xMjh2LTY0aC02NHYxMDRjMCAxMy4yOTcgMTAuNzAzIDI0IDI0IDI0eiIgZmlsbD0idXJsKCNhKSIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"vmrc,vmrc,vmware,remote,console\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"vmware-vmrc.desktop\"\nLABEL oc.launch=\"vmrc.Vmrc\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"vmrc\"\nLABEL oc.displayname=\"VMRC\"\nLABEL oc.path=\"/usr/bin/vmrc\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"x-scheme-handler/vmrc;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmrc\"\nENV APPBIN \"/usr/bin/vmrc\"\nENV APP \"/usr/bin/vmrc\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vmrc/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmrc/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmrc/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmrc/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.vm.ubuntu:22.04\nUSER root\nLABEL oc.icon=\"vm-linux-ubuntu.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+CjxjaXJjbGUgZmlsbD0iI2Y0NzQyMSIgY3k9IjUwIiBjeD0iNTAiIHI9IjQ1Ii8+CjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjguNTUiIGN4PSI1MCIgY3k9IjUwIiByPSIyMS44MjUiLz4KPGcgaWQ9ImZyaWVuZCI+PGNpcmNsZSBmaWxsPSIjZjQ3NDIxIiBjeD0iMTkuNCIgY3k9IjUwIiByPSI4LjQzNzYiLz4KPHBhdGggc3Ryb2tlPSIjZjQ3NDIxIiBzdHJva2Utd2lkdGg9IjMuMjM3OCIgZD0iTTY3LDUwSDc3Ii8+CjxjaXJjbGUgZmlsbD0iI2ZmZmZmZiIgY3g9IjE5LjQiIGN5PSI1MCIgcj0iNi4wMDc0NSIvPjwvZz4KPHVzZSB4bGluazpocmVmPSIjZnJpZW5kIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjAsNTAsNTApIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2ZyaWVuZCIgdHJhbnNmb3JtPSJyb3RhdGUoMjQwLDUwLDUwKSIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"vmubuntu,vm,ubuntu,jammy\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"qemu.Qemu-system-x86_64\"\nLABEL oc.template=\"abcdesktopio/oc.vm.ubuntu:22.04\"\nLABEL oc.name=\"vmubuntu\"\nLABEL oc.displayname=\"vmubuntu\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"devices\\\":[\\\"/dev/kvm\\\"],\\\"mem_limit\\\":\\\"16G\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmubuntu\"\nLABEL oc.home=\"/home/balloon\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vmubuntu/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmubuntu/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmubuntu/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmubuntu/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/vscode stable main\" > /etc/apt/sources.list.d/teams.list\nRUN apt update && apt install -y --no-install-recommends code && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN mkdir -p /usr/share/code/extensions && chmod 777 /usr/share/code /usr/share/code/extensions\nLABEL oc.icon=\"circle_visual-studio-code.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjQwMi43MSIgeDI9IjQwMi43MSIgeTE9IjEzNy44OSIgeTI9IjQ2My4wNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTkxODkgMCAwIC4xOTE4OSAtNDQuNjY0IC0yNS41OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMzIzMjMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNWM1YzVjIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM4My41OCIgeDI9IjM4My41OCIgeTE9IjEzNy44OSIgeTI9IjQ2My4wNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMiAwIDAgLjIgLTQ4IC0yNy45OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDg5ZDIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMjZiMWYzIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImkiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0LjUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSI4NiIgeDI9IjYzIiB5MT0iMTkuNDU4IiB5Mj0iMzkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAwN2FiYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDZjYWYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iODYiIHgyPSI4MyIgeTE9IjIwIiB5Mj0iMjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9Ijg3IiB4Mj0iNjMiIHkxPSI0NiIgeTI9IjI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDgwY2UiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMDA4ZmQ1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9Ijg2IiB4Mj0iODMiIHkxPSI0NCIgeTI9IjQ0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjA5NTkzNyIgeT0iLS4wOTYwNjMiIHdpZHRoPSIxLjE5MTkiIGhlaWdodD0iMS4xOTIxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjk2MTUxODg1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaiIgeD0iLS4wOTU3OTYiIHk9Ii0uMDk2MjA1IiB3aWR0aD0iMS4xOTE2IiBoZWlnaHQ9IjEuMTkyNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS4yNzk0MTc3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4wNiIgeT0iLS4wNiIgd2lkdGg9IjEuMTIiIGhlaWdodD0iMS4xMiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS4zNSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHBhdGggY2xhc3M9InNocDEiIHRyYW5zZm9ybT0ibWF0cml4KC4yIDAgMCAuMiAtNDggLTI3Ljk5NCkiIGQ9Im00MDAgNDUwYzgyLjg0IDAgMTUwLTY3LjE2IDE1MC0xNTBzLTY3LjE2LTE1MC0xNTAtMTUwLTE1MCA2Ny4xNi0xNTAgMTUwIDY3LjE2IDE1MCAxNTAgMTUweiIgZmlsdGVyPSJ1cmwoI2kpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiA8cGF0aCBjbGFzcz0ic2hwMSIgZD0ibTMyIDU4YzE0LjM1OSAwIDI2LTExLjY0MSAyNi0yNnMtMTEuNjQxLTI2LTI2LTI2Yy0xNC4zNTkgMC0yNiAxMS42NDEtMjYgMjZzMTEuNjQxIDI2IDI2IDI2eiIgZmlsbD0idXJsKCNnKSIvPgogPHBhdGggZD0ibTMyIDVjLTE0LjkxMSAwLTI3IDEyLjA4OS0yNyAyN3MxMi4wODkgMjcgMjcgMjdjMTQuOTExIDAgMjctMTIuMDg5IDI3LTI3cy0xMi4wODktMjctMjctMjd6bTAgMmMxMy44MDcgMCAyNSAxMS4xOTMgMjUgMjVzLTExLjE5MyAyNS0yNSAyNWMtMTMuODA3IDAtMjUtMTEuMTkzLTI1LTI1czExLjE5My0yNSAyNS0yNXoiIGZpbHRlcj0idXJsKCNoKSIgb3BhY2l0eT0iLjE1Ii8+CiA8cGF0aCBkPSJtMzIgMi4wMDU5Yy0xNi41NjggMC0zMCAxMy40MzQtMzAgMzAuMDAyIDAgMTYuNTY4IDEzLjQzMiAzMCAzMCAzMHMzMC4wMDItMTMuNDMyIDMwLjAwMi0zMGMwLTE2LjU2OC0xMy40MzQtMzAuMDAyLTMwLjAwMi0zMC4wMDJ6bTAgMy45OTQxYzE0LjM1OSAwIDI2IDExLjY0MSAyNiAyNnMtMTEuNjQxIDI2LTI2IDI2Yy0xNC4zNTkgMC0yNi0xMS42NDEtMjYtMjZzMTEuNjQxLTI2IDI2LTI2eiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIzLjEzNjYiLz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ni4wMDEgLjAwMDY4OTcpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogIDxwYXRoIGQ9Im04NS4yMjMgMTYuMDUxYy0wLjM0MjE0IDAuMDM4MTgtMC42NzUwNyAwLjE1NTM4LTEuMDA3OCAwLjM3NSA0LjE3ZS00IDUuMmUtNCAwLjAwMTUgMC4wMDE0IDJlLTMgMmUtMyAtMC4xNDExMyAwLjA3NjY4LTAuMjgxNzcgMC4xNzI4LTAuNDE2MDIgMC4yOTY4OGwtMjEuMzU3IDE5Ljc0Yy0wLjQxNTY4IDAuMzg0MTctMC43MTM2NyAxLjA1NjMtMC4xODk0NSAxLjU1NDdsMS45OTYxIDEuODk4NGMwLjc4NTE1IDAuNzQ2NDcgMS42ODYgMC4wOTkzMSAyLjAzMTItMC4xNzE4OGwxOS43NDYtMTUuMTAydjE0LjcxMWwtMS42MTMzIDEuMjA5Yy0xLjI0MzMgMC45MzE1NyAwLjExMzI2IDYuMjk3OS0wLjIxMjg5IDYuOTg4MyAwLjM2MDMyIDAuMjE5OTEgMC44OTgxIDAuNDUzNzggMS4zNjkxIDAuMzk2NDggMC4xNTA4OS0wLjAxODM1IDAuMzAzNjItMC4wNjA1NCAwLjQ1NTA4LTAuMTM0NzdsNi41NjQ1LTMuMjE4OGMwLjcxNTQ0LTAuMzUwNjUgMS40Mzc1LTAuNjQwNzUgMS40Mzc1LTEuNDM3NXYtMjIuMzE2YzAtMC43OTY3NS0wLjcyMjA2LTEuMDg2OS0xLjQzNzUtMS40Mzc1bC02LjU2NDUtMy4yMTg4Yy0wLjE1MTQ2LTAuMDc0MjMtMC4zMDQxOS0wLjExNjQyLTAuNDU1MDgtMC4xMzQ3Ny0wLjExNzc2LTAuMDE0MzItMC4yMzM2MS0wLjAxMjczLTAuMzQ3NjYgMHoiIGZpbHRlcj0idXJsKCNqKSIgb3BhY2l0eT0iLjE1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogIDxwYXRoIGQ9Im04NS4yMjIgMTYuMDUxYy0wLjM0MjE0IDAuMDM4MTgtMC42NzUwNyAwLjE1NTM4LTEuMDA3OCAwLjM3NSAwLjUyMDU0IDAuNjQ3OTktMC41MzAyNiA2Ljc0ODMgMC43ODU2IDcuNTc0MmwxLjAyNjkgMC42NDQ1M3YxNC43MTFsLTEuNjEzMSAxLjIwODZjLTEuMjQzMyAwLjkzMTU3IDAuMTEyNTcgNi4yOTc0LTAuMjEzNTggNi45ODc3IDAuMzYwMzIgMC4yMTk5MSAwLjg5ODYgMC40NTQ2NiAxLjM2OTYgMC4zOTczOCAwLjE1MDg5LTAuMDE4MzUgMC4zMDM2Mi0wLjA2MDU0IDAuNDU1MDgtMC4xMzQ3N2w2LjU2NDUtMy4yMTg4YzAuNzE1NDQtMC4zNTA2NSAxLjQzNzUtMC42NDA3NSAxLjQzNzUtMS40Mzc1di0yMi4zMTZjMC0wLjc5Njc1LTAuNzIyMDYtMS4wODY5LTEuNDM3NS0xLjQzNzVsLTYuNTY0NS0zLjIxODhjLTAuMTUxNDYtMC4wNzQyMy0wLjMwNDE5LTAuMTE2NDItMC40NTUwOC0wLjEzNDc3LTAuMTE3NzYtMC4wMTQzMi0wLjIzMzYxLTAuMDEyNzMtMC4zNDc2NiAweiIgZmlsbD0iIzBkOTZkZCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDM2LjQ2NSAyMS4zNTktMTkuNzRjMC45Njk3LTAuODk2MjEgMi4yMjU3LTAuNTc4NDIgMi4yMjU3IDEuMjc1M3Y2LjY0NDFsLTE5Ljc0NiAxNS4xMDJjLTAuMzQ1MjkgMC4yNzExOS0xLjI0NTEgMC45MTg5Mi0yLjAzMDIgMC4xNzI0NWwtMS45OTc3LTEuODk5M2MtMC41MjQyMi0wLjQ5ODQtMC4yMjYzMy0xLjE3MDIgMC4xODkzNS0xLjU1NDR6IiBmaWxsPSJ1cmwoI2YpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogIDxwYXRoIGQ9Im02Mi40NDMgMjcuNTI1IDIxLjM1OSAxOS43NGMwLjk2OTcgMC44OTYyMSAyLjIyNTcgMC41Nzg0MiAyLjIyNTctMS4yNzUzdi02LjY0NDFsLTE5Ljc0Ni0xNS4xMDJjLTAuMzQ1MjktMC4yNzExOS0xLjI0NTEtMC45MTg5Mi0yLjAzMDItMC4xNzI0NWwtMS45OTc3IDEuODk5M2MtMC41MjQyMiAwLjQ5ODQtMC4yMjYzMyAxLjE3MDIgMC4xODkzNSAxLjU1NDR6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDI3LjUyNSAyMS4zNTkgMTkuNzRjMC45Njk3IDAuODk2MjEgMi4yMjU3IDAuNTc4NDIgMi4yMjU3LTEuMjc1M3YtNi42NDQxbC0xOS43NDYtMTUuMTAyYy0wLjM0NTI5LTAuMjcxMTktMS4yNDUxLTAuOTE4OTItMi4wMzAyLTAuMTcyNDVsLTEuOTk3NyAxLjg5OTNjLTAuNTI0MjIgMC40OTg0LTAuMjI2MzMgMS4xNzAyIDAuMTg5MzUgMS41NTQ0eiIgZmlsbD0idXJsKCNkKSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDM2LjQ2NSAyMS4zNTktMTkuNzRjMC45Njk3LTAuODk2MjEgMi4yMjU3LTAuNTc4NDIgMi4yMjU3IDEuMjc1M3Y2LjY0NDFsLTE5Ljc0NiAxNS4xMDJjLTAuMzQ1MjkgMC4yNzExOS0xLjI0NTEgMC45MTg5Mi0yLjAzMDIgMC4xNzI0NWwtMS45OTc3LTEuODk5M2MtMC41MjQyMi0wLjQ5ODQtMC4yMjYzMy0xLjE3MDIgMC4xODkzNS0xLjU1NDR6IiBmaWxsPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgZmlsbCBtYXJrZXJzIi8+CiAgPHBhdGggZD0ibTYyLjQ0MyAyNy41MjUgMjEuMzU5IDE5Ljc0YzAuOTY5NyAwLjg5NjIxIDIuMjI1NyAwLjU3ODQyIDIuMjI1Ny0xLjI3NTN2LTYuNjQ0MWwtMTkuNzQ2LTE1LjEwMmMtMC4zNDUyOS0wLjI3MTE5LTEuMjQ1MS0wLjkxODkyLTIuMDMwMi0wLjE3MjQ1bC0xLjk5NzcgMS44OTkzYy0wLjUyNDIyIDAuNDk4NC0wLjIyNjMzIDEuMTcwMiAwLjE4OTM1IDEuNTU0NHoiIGZpbGw9InVybCgjYykiIG9wYWNpdHk9Ii4xNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"vscode,ide,vscode,visual studio code,code\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"code.desktop\"\nLABEL oc.launch=\"code.Code\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--extensions-dir /usr/share/code/extensions --verbose\"\nLABEL oc.name=\"VSCode\"\nLABEL oc.displayname=\"VSCode\"\nLABEL oc.path=\"/usr/bin/code\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/x-c;application/json;application/javascript;application/xml;text/xml;application/java-archive;text/x-java-source;text/plain;image/svg+xml;application/x-csh;text/x-yaml;application/x-yaml;application/x-python;\"\nLABEL oc.fileextensions=\"c;cpp;py;json;js;java;jav;md;xml;txt;svg;html;htm;sh;csh;css;jsx;tsx;vue;yml;yaml;\"\nLABEL oc.legacyfileextensions=\"c;cpp;py;json;java;md;yml;yaml;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"2G\\\",\\\"shm_size\\\":\\\"2G\\\",\\\"cpu_period\\\":200000,\\\"cpu_quota\\\":200000,\\\"cap_add\\\":[\\\"SYS_ADMIN\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"VSCode\"\nENV APPBIN \"/usr/bin/code\"\nLABEL oc.args=\"--extensions-dir /usr/share/code/extensions --verbose\"\nENV APP \"/usr/bin/code\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vscode/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vscode/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vscode/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vscode/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-weather\nLABEL oc.icon=\"org.gnome.Weather.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjQyIi8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZiIgeD0iLS4wNSIgeT0iLS4wNzUiIHdpZHRoPSIxLjEiIGhlaWdodD0iMS4xNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuNzc3Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZSIgeD0iLS4wOTYiIHk9Ii0uMDk2IiB3aWR0aD0iMS4xOTIiIGhlaWdodD0iMS4xOTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjg4Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZCIgeD0iLS4wOCIgeT0iLS4xMiIgd2lkdGg9IjEuMTYiIGhlaWdodD0iMS4yNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjI0NCIvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgyNi4zNiAtMTEwNy41KSBzY2FsZSgyLjE0MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzVlYTVmYiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuOTkiIHgyPSIzOTkuOTkiIHkxPSI1NDUuMTQiIHkyPSI1MTguMTQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgyNi4zNiAtMTEwNy41KSBzY2FsZSgyLjE0MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzdhZGNmYyIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzBhNzllZCIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODI2LjM2IC0xMTA3LjUpIHNjYWxlKDIuMTQyOSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PGcgc3Ryb2tlLXdpZHRoPSIxLjU3MSI+PGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbD0idXJsKCNiKSIvPjxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9Im5vbmUiLz48L2c+PHBhdGggZD0iTTMyLjQ3OCAyMi4xMTZhMTEuMTQ1IDExLjE0NSAwIDAgMC0xMS4xNDUgMTEuMTQ1IDExLjE0NSAxMS4xNDUgMCAwIDAgLjAxOC41MTIgNi42MzIgNi42MzIgMCAwIDAtNS45OTcgNi41OTVBNi42MzIgNi42MzIgMCAwIDAgMjEuOTg2IDQ3aDIxLjY0MmE5LjAxOCA5LjAxOCAwIDAgMCA5LjAxOC05LjAxOCA5LjAxOCA5LjAxOCAwIDAgMC05LjAxOC05LjAxOCA5LjAxOCA5LjAxOCAwIDAgMC0uODU3LjA0OSAxMS4xNDUgMTEuMTQ1IDAgMCAwLTEwLjI5NC02Ljg5N3oiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjEiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48Y2lyY2xlIGN4PSIyMiIgY3k9IjI4IiByPSIxMSIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48Y2lyY2xlIGN4PSIyMiIgY3k9IjI4IiByPSIxMSIgZmlsbD0iI2ZmZDIwZiIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPjxwYXRoIGQ9Ik0zMi40NzggMjIuMTE2YTExLjE0NSAxMS4xNDUgMCAwIDAtMTEuMTQ1IDExLjE0NSAxMS4xNDUgMTEuMTQ1IDAgMCAwIC4wMTguNTEyIDYuNjMyIDYuNjMyIDAgMCAwLTUuOTk3IDYuNTk1QTYuNjMyIDYuNjMyIDAgMCAwIDIxLjk4NiA0N2gyMS42NDJhOS4wMTggOS4wMTggMCAwIDAgOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtLjg1Ny4wNDkgMTEuMTQ1IDExLjE0NSAwIDAgMC0xMC4yOTQtNi44OTd6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4xNSIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPjxwYXRoIGQ9Ik0zMi40NzggMjIuMTE2YTExLjE0NSAxMS4xNDUgMCAwIDAtMTEuMTQ1IDExLjE0NSAxMS4xNDUgMTEuMTQ1IDAgMCAwIC4wMTguNTEyIDYuNjMyIDYuNjMyIDAgMCAwLTUuOTk3IDYuNTk1QTYuNjMyIDYuNjMyIDAgMCAwIDIxLjk4NiA0N2gyMS42NDJhOS4wMTggOS4wMTggMCAwIDAgOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtLjg1Ny4wNDkgMTEuMTQ1IDExLjE0NSAwIDAgMC0xMC4yOTQtNi44OTd6IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIuODUiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48L3N2Zz4=\"\nLABEL oc.keyword=\"weather,weather\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Weather.desktop\"\nLABEL oc.launch=\"org.gnome.Weather.org.gnome.Weather\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"weather\"\nLABEL oc.displayname=\"weather\"\nLABEL oc.path=\"/usr/bin/gnome-weather\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"weather\"\nENV APPBIN \"/usr/bin/gnome-weather\"\nENV APP \"/usr/bin/gnome-weather\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/weather/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/weather/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/weather/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/weather/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.20.04:$TAG\nUSER root\nRUN curl -Ls -o /tmp/whatsdesk.deb https://zerkc.gitlab.io/whatsdesk/whatsdesk_0.3.9_amd64.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes desktop-file-utils libasound2 && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/whatsdesk.deb && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"whatsapp.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzUuMjE2IDE3NS41NTIiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9Ijg1LjkxNSIgeDI9Ijg2LjUzNSIgeTE9IjMyLjU2NyIgeTI9IjEzNy4wOTIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1N2QxNjMiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyM2IzM2EiLz48L2xpbmVhckdyYWRpZW50PjxmaWx0ZXIgaWQ9ImEiIHdpZHRoPSIxLjExNSIgaGVpZ2h0PSIxLjExNCIgeD0iLS4wNTciIHk9Ii0uMDU3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuNTMxIi8+PC9maWx0ZXI+PC9kZWZzPjxwYXRoIGZpbGw9IiNiM2IzYjMiIGQ9Im01NC41MzIgMTM4LjQ1IDIuMjM1IDEuMzI0YzkuMzg3IDUuNTcxIDIwLjE1IDguNTE4IDMxLjEyNiA4LjUyM2guMDIzYzMzLjcwNyAwIDYxLjEzOS0yNy40MjYgNjEuMTUzLTYxLjEzNS4wMDYtMTYuMzM1LTYuMzQ5LTMxLjY5Ni0xNy44OTUtNDMuMjUxQTYwLjc1IDYwLjc1IDAgMCAwIDg3Ljk0IDI1Ljk4M2MtMzMuNzMzIDAtNjEuMTY2IDI3LjQyMy02MS4xNzggNjEuMTNhNjAuOTggNjAuOTggMCAwIDAgOS4zNDkgMzIuNTM1bDEuNDU1IDIuMzEyLTYuMTc5IDIyLjU1OHptLTQwLjgxMSAyMy41NDRMMjQuMTYgMTIzLjg4Yy02LjQzOC0xMS4xNTQtOS44MjUtMjMuODA4LTkuODIxLTM2Ljc3Mi4wMTctNDAuNTU2IDMzLjAyMS03My41NSA3My41NzgtNzMuNTUgMTkuNjgxLjAxIDM4LjE1NCA3LjY2OSA1Mi4wNDcgMjEuNTcyczIxLjUzNyAzMi4zODMgMjEuNTMgNTIuMDM3Yy0uMDE4IDQwLjU1My0zMy4wMjcgNzMuNTUzLTczLjU3OCA3My41NTNoLS4wMzJjLTEyLjMxMy0uMDA1LTI0LjQxMi0zLjA5NC0zNS4xNTktOC45NTR6bTAgMCIgZmlsdGVyPSJ1cmwoI2EpIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTEyLjk2NiAxNjEuMjM4IDEwLjQzOS0zOC4xMTRhNzMuNDIgNzMuNDIgMCAwIDEtOS44MjEtMzYuNzcyYy4wMTctNDAuNTU2IDMzLjAyMS03My41NSA3My41NzgtNzMuNTUgMTkuNjgxLjAxIDM4LjE1NCA3LjY2OSA1Mi4wNDcgMjEuNTcyczIxLjUzNyAzMi4zODMgMjEuNTMgNTIuMDM3Yy0uMDE4IDQwLjU1My0zMy4wMjcgNzMuNTUzLTczLjU3OCA3My41NTNoLS4wMzJjLTEyLjMxMy0uMDA1LTI0LjQxMi0zLjA5NC0zNS4xNTktOC45NTR6Ii8+PHBhdGggZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE3ODApIiBkPSJNODcuMTg0IDI1LjIyN2MtMzMuNzMzIDAtNjEuMTY2IDI3LjQyMy02MS4xNzggNjEuMTNhNjAuOTggNjAuOTggMCAwIDAgOS4zNDkgMzIuNTM1bDEuNDU1IDIuMzEyLTYuMTc5IDIyLjU1OSAyMy4xNDYtNi4wNjkgMi4yMzUgMS4zMjRjOS4zODcgNS41NzEgMjAuMTUgOC41MTggMzEuMTI2IDguNTI0aC4wMjNjMzMuNzA3IDAgNjEuMTQtMjcuNDI2IDYxLjE1My02MS4xMzVhNjAuNzUgNjAuNzUgMCAwIDAtMTcuODk1LTQzLjI1MSA2MC43NSA2MC43NSAwIDAgMC00My4yMzUtMTcuOTI5eiIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik04Ny4xODQgMjUuMjI3Yy0zMy43MzMgMC02MS4xNjYgMjcuNDIzLTYxLjE3OCA2MS4xM2E2MC45OCA2MC45OCAwIDAgMCA5LjM0OSAzMi41MzVsMS40NTUgMi4zMTMtNi4xNzkgMjIuNTU4IDIzLjE0Ni02LjA2OSAyLjIzNSAxLjMyNGM5LjM4NyA1LjU3MSAyMC4xNSA4LjUxNyAzMS4xMjYgOC41MjNoLjAyM2MzMy43MDcgMCA2MS4xNC0yNy40MjYgNjEuMTUzLTYxLjEzNWE2MC43NSA2MC43NSAwIDAgMC0xNy44OTUtNDMuMjUxIDYwLjc1IDYwLjc1IDAgMCAwLTQzLjIzNS0xNy45Mjh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNjguNzcyIDU1LjYwM2MtMS4zNzgtMy4wNjEtMi44MjgtMy4xMjMtNC4xMzctMy4xNzZsLTMuNTI0LS4wNDNjLTEuMjI2IDAtMy4yMTguNDYtNC45MDIgMi4zcy02LjQzNSA2LjI4Ny02LjQzNSAxNS4zMzIgNi41ODggMTcuNzg1IDcuNTA2IDE5LjAxMyAxMi43MTggMjAuMzgxIDMxLjQwNSAyNy43NWMxNS41MjkgNi4xMjQgMTguNjg5IDQuOTA2IDIyLjA2MSA0LjZzMTAuODc3LTQuNDQ3IDEyLjQwOC04Ljc0IDEuNTMyLTcuOTcxIDEuMDczLTguNzQtMS42ODUtMS4yMjYtMy41MjUtMi4xNDYtMTAuODc3LTUuMzY3LTEyLjU2Mi01Ljk4MS0yLjkxLS45MTktNC4xMzcuOTIxLTQuNzQ2IDUuOTc5LTUuODE5IDcuMjA2LTIuMTQ0IDEuMzgxLTMuOTg0LjQ2Mi03Ljc2LTIuODYxLTE0Ljc4NC05LjEyNGMtNS40NjUtNC44NzMtOS4xNTQtMTAuODkxLTEwLjIyOC0xMi43M3MtLjExNC0yLjgzNS44MDgtMy43NTFjLjgyNS0uODI0IDEuODM4LTIuMTQ3IDIuNzU5LTMuMjJzMS4yMjQtMS44NCAxLjgzNi0zLjA2NS4zMDctMi4zMDEtLjE1My0zLjIyLTQuMDMyLTEwLjAxMS01LjY2Ni0xMy42NDciLz48L3N2Zz4=\"\nLABEL oc.keyword=\"whatsdesk,whatsapp,whatsdesk\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"whatsdesk.desktop\"\nLABEL oc.launch=\"whatsdesk.whatsdesk\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.20.04\"\nLABEL oc.name=\"whatsdesk\"\nLABEL oc.displayname=\"whatsdesk\"\nLABEL oc.path=\"/opt/whatsdesk/whatsdesk\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/whatsapp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"whatsdesk\"\nENV APPBIN \"/opt/whatsdesk/whatsdesk\"\nENV APP \"/opt/whatsdesk/whatsdesk\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/whatsdesk/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/whatsdesk/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/whatsdesk/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/whatsdesk/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winefile-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"winefile.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDhweCIKICAgaGVpZ2h0PSI0OHB4IgogICBpZD0ic3ZnNDI4OSIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40NSIKICAgc29kaXBvZGk6ZG9jYmFzZT0iL2hvbWUvZG9iZXkvUHJvamVjdHMvZ25vbWUtaWNvbi10aGVtZS9zY2FsYWJsZS9hcHBzIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzeXN0ZW0tZmlsZS1tYW5hZ2VyLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MjkxIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTE5NTUiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDExOTU3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjYWNjYzY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTE5NTkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izg4OGE4NTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDIyMTQwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMjIxNDIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjIxNDgiCiAgICAgICAgIG9mZnNldD0iMC41IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDIyMTQ0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjIxNDAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyMzA0NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjE4LjE0MjEzNiIKICAgICAgIHkxPSIzNSIKICAgICAgIHgyPSIxOC4xNDIxMzYiCiAgICAgICB5Mj0iNDIuMDQwNjYxIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjEyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDIzMDQyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAsLTEuMDAwMDAxLDEuMTQyODU2LDAsLTg5LjEwMjU5LC0zMS40OTk5OSkiCiAgICAgICBjeD0iNyIKICAgICAgIGN5PSIzOS40NjQ4MDYiCiAgICAgICBmeD0iNyIKICAgICAgIGZ5PSIzOS40NjQ4MDYiCiAgICAgICByPSIzLjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDIyMTIyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMjIxMjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDIyMTI2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjIxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyMzA0MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLC0xLjAwMDAwMSwxLjE0Mjg1NiwwLC00MS4xMDI1OSw0NS41MDAwMSkiCiAgICAgICBjeD0iNyIKICAgICAgIGN5PSIzOS40NjQ4MDYiCiAgICAgICBmeD0iNyIKICAgICAgIGZ5PSIzOS40NjQ4MDYiCiAgICAgICByPSIzLjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDc5NTciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDc5NTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RkZGRkOTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3OTYxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3OTUxIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3OTUzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNmQ2ZDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzk1NSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTU1NzUzO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk5NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOndoaXRlO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNjk5OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6d2hpdGU7c3RvcC1vcGFjaXR5OjAuNDY5OTQ1MzQiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A3MDAxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk4NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGM2YzA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A2OTg3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojODg4YTg1O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk4OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDExOTU1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk5MSIKICAgICAgIHgxPSIxOS41NzE0MjgiCiAgICAgICB5MT0iMTguMjg1NzE1IgogICAgICAgeDI9IjQwLjEwOTkzNiIKICAgICAgIHkyPSI0Mi43ODIzNzkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njk5NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMDMiCiAgICAgICB4MT0iMjMuNzE0Mjg5IgogICAgICAgeTE9IjE4LjYxODA0NCIKICAgICAgIHgyPSIyMy44NTY4ODQiCiAgICAgICB5Mj0iNi45OTk5OTgxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc5NTciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDI1IgogICAgICAgeDE9IjI1LjAwMDAwMiIKICAgICAgIHkxPSIzMy40NzkwNzMiCiAgICAgICB4Mj0iMjQuNTcyOTIyIgogICAgICAgeTI9IjMxLjM2MzcwMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNS45NjA0NjRlLTgsMS4wMDAwMDEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3OTUxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAzOSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjI2LjQ4OTg0NyIKICAgICAgIHkxPSIzMi40OTQ5MTkiCiAgICAgICB4Mj0iMjYuMjYyNjkxIgogICAgICAgeTI9IjMwLjk0NTg5NiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMTEyOTcyZS02LC0xMi45OTk5OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5ODUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ5NzQ1IgogICAgICAgeDE9IjE5LjE1MTc3NSIKICAgICAgIHkxPSIxNS45Njk1NDMiCiAgICAgICB4Mj0iNDAuNDg4NjA5IgogICAgICAgeTI9IjMwLjA4ODM5OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTg1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50OTc1MyIKICAgICAgIHgxPSIyNC4yMDI1NDEiCiAgICAgICB5MT0iMjkuOTc5Njk0IgogICAgICAgeDI9IjQwLjIyOTUxMSIKICAgICAgIHkyPSI0MS4wNzE0MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTQiCiAgICAgaW5rc2NhcGU6Y3g9IjI4LjI1MDg4NiIKICAgICBpbmtzY2FwZTpjeT0iMTkuMTMxOTUzIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjgwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijk0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjUiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDI5NCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC8iIC8+CiAgICAgICAgPGRjOnRpdGxlPlN5c3RlbSBGaWxlIE1hbmFnZXI8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlPkp1bHkgMjAwNjwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkFuZHJlYXMgTmlsc3NvbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICA8ZGM6c291cmNlPmh0dHA6Ly93d3cuZ25vbWUub3JnPC9kYzpzb3VyY2U+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9HUEwvMi4wLyI+CiAgICAgICAgPGNjOnBlcm1pdHMKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL1JlcHJvZHVjdGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGlzdHJpYnV0aW9uIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvTm90aWNlIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EZXJpdmF0aXZlV29ya3MiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9TaGFyZUFsaWtlIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU291cmNlQ29kZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPGcKICAgICAgIGlkPSJnMjIxNTAiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjY4NzUsMCwwLDEuNDI4NTcsOCwtMTYuOTk5OTQpIj4KICAgICAgPHJlY3QKICAgICAgICAgeT0iMzUiCiAgICAgICAgIHg9IjAiCiAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgd2lkdGg9IjQiCiAgICAgICAgIGlkPSJyZWN0MjIxMjAiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MjMwNDApO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjEuMjAwMDAwNTc7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgIHk9Ii00MiIKICAgICAgICAgeD0iLTQ4IgogICAgICAgICBoZWlnaHQ9IjciCiAgICAgICAgIHdpZHRoPSI0IgogICAgICAgICBpZD0icmVjdDIyMTM0IgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDIzMDQyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDoxLjIwMDAwMDU3O3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHk9IjM1IgogICAgICAgICB4PSI0IgogICAgICAgICBoZWlnaHQ9IjciCiAgICAgICAgIHdpZHRoPSI0MCIKICAgICAgICAgaWQ9InJlY3QyMjEzOCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyMzA0NCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MS4yMDAwMDA1NztzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ2OTkxKTtmaWxsLW9wYWNpdHk6MS4wO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojNTU1NzUzO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMTQuNTcxNDI5LDYuNSBMIDM0LjU3MTQyOSw2LjUgTCAzOC41LDExIEwgMzguNSwzOS41NzE0MjkgQyAzOC41MTQ3ODIsMzkuOTM2NzQ1IDM3Ljk1ODEzNSw0MC41MTYzNDYgMzcuNDcyOTE3LDQwLjQ1MzA5IEwgMTEuNDI4NTcxLDQwLjQ1MzA5IEMgMTAuOTA0NzYyLDQwLjM5NzI5OCAxMC41MjM4MDksNDAuMDU1NzkyIDEwLjUsMzkuNDI4NTcxIEwgMTAuNSwxMSBMIDE0LjU3MTQyOSw2LjUgeiAiCiAgICAgICBpZD0icGF0aDQzMDciCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDk3NDUpO2ZpbGwtb3BhY2l0eToxLjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2YzZmNmE7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InJlY3Q1MTk3IgogICAgICAgd2lkdGg9IjIwLjk5OTk5NiIKICAgICAgIGhlaWdodD0iMTEuMDAwMDAzIgogICAgICAgeD0iMTQuNDk5OTk4IgogICAgICAgeT0iMTMuNDk5OTk4IgogICAgICAgcng9IjEuMDcxNDI4NSIKICAgICAgIHJ5PSIxLjA3MTQyODUiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ5NzUzKTtmaWxsLW9wYWNpdHk6MS4wO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNmM2ZjZhO3N0cm9rZS13aWR0aDowLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTE5OSIKICAgICAgIHdpZHRoPSIyMC45OTk5OTYiCiAgICAgICBoZWlnaHQ9IjExLjAwMDAwMyIKICAgICAgIHg9IjE0LjUiCiAgICAgICB5PSIyNi40OTk5OTgiCiAgICAgICByeD0iMS4wNzE0Mjg1IgogICAgICAgcnk9IjEuMDcxNDI4NSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp3aGl0ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eTowLjUiCiAgICAgICBkPSJNIDExLjE0Mjg1NywxMSBMIDM3Ljg1NzE0MywxMC45Mjg1NzEgTCAzNC41LDcgTCAxNSw3IEwgMTEuMTQyODU3LDExIHogIgogICAgICAgaWQ9InBhdGg1MjAzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzAwMyk7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO29wYWNpdHk6MC41IgogICAgICAgZD0iTSAxNC45MjM0MzUsNy40OTk5OTggTCAzNC4yODAzOTEsNy40OTk5OTggTCAzNy40OTk3NDIsMTEuMjQwNTQ2IEwgMzcuNDk5NzQyLDM5LjQ1MDM3NSBMIDExLjUwMDAwMywzOS40OTQzMjQgTCAxMS41MDAwMDMsMTEuMjQwNTQ2IEwgMTQuOTIzNDM1LDcuNDk5OTk4IHogIgogICAgICAgaWQ9InBhdGg2OTkzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzAyNSk7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NzAxNyIKICAgICAgIHdpZHRoPSI3LjAwMDAwNTIiCiAgICAgICBoZWlnaHQ9IjMuMDAwMDA1MiIKICAgICAgIHg9IjIxLjUiCiAgICAgICB5PSIzMS40OTk5OTQiCiAgICAgICByeD0iMS4wNzE0MjgyIgogICAgICAgcnk9IjEuMDcxNDI4OCIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDcwMzkpO3N0cm9rZS13aWR0aDowLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDcwMzciCiAgICAgICB3aWR0aD0iNy4wMDAwMDUyIgogICAgICAgaGVpZ2h0PSIzLjAwMDAwNTIiCiAgICAgICB4PSIyMS40OTk5OTQiCiAgICAgICB5PSIxNy41IgogICAgICAgcng9IjEuMDcxNDI4MiIKICAgICAgIHJ5PSIxLjA3MTQyODgiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6d2hpdGU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtvcGFjaXR5OjAuNiIKICAgICAgIGQ9Ik0gMTIuNSwxMC41NzE0MjkgTCAzNi41NzE0MjksMTAuNTcxNDI5IgogICAgICAgaWQ9InBhdGg2MDkzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"winefile-wine,wine,winfile,winefile,file,manager\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winefile.exe.winefile.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"winefile-wine\"\nLABEL oc.displayname=\"Winefile Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/winefile\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winefile-wine\"\nENV APPBIN \"/usr/bin/winefile\"\nENV APP \"/usr/bin/winefile\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winefile-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winefile-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winefile-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winefile-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winemine-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"winemine.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4wIgogICB3aWR0aD0iNzBwdCIKICAgaGVpZ2h0PSI3MHB0IgogICBpZD0ic3ZnMiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiIC8+CiAgPGcKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY2LjYxMywtOTAuNjM3NDkpIgogICAgICAgaWQ9ImcxMDc5NyI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi43NTc4LDMzLjkwOTg4KSIKICAgICAgICAgaWQ9InVzZTQ0NzkiPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjIuMzkxODQsNC4wNzUyNTEpIgogICAgICAgICAgIGlkPSJnMTA3ODkiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMTguNTk3ODY5LDU4LjQwMDc1OCBMIDkzLjc1NjAxLDU4LjQwMDc1OCBDIDkzLjc2MTAxMSw1OC40MDA3NTggOTMuNzY1MDM4LDU4LjQwNDk4NiA5My43NjUwMzgsNTguNDEwMjQgTCA5My43NjUwMzgsMTMzLjM0NDcxIEMgOTMuNzY1MDM4LDEzMy4zNDk5NiA5My43NjEwMTEsMTMzLjM1NDE5IDkzLjc1NjAxLDEzMy4zNTQxOSBMIDE4LjU5Nzg2OSwxMzMuMzU0MTkgQyAxOC41OTI4NTksMTMzLjM1NDE5IDE4LjU4ODgzLDEzMy4zNDk5NiAxOC41ODg4MywxMzMuMzQ0NzEgTCAxOC41ODg4Myw1OC40MTAyNCBDIDE4LjU4ODgzLDU4LjQwNDk4NiAxOC41OTI4NTksNTguNDAwNzU4IDE4LjU5Nzg2OSw1OC40MDA3NTggeiAiCiAgICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNmZGZjZmQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNiZmE2Yjc7c3Ryb2tlLXdpZHRoOjAuNDc3ODQ1ODU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgICBpZD0icGF0aDEwNzkxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gOTMuNjM5MDI0LDU4LjQ4NDM0OSBDIDkzLjY0NDAzLDU4LjQ4NDM0OSA5My42NDgwNjEsNTguNDg4NTg0IDkzLjY0ODA2MSw1OC40OTM4NDQgTCA5My42NDgwNjEsMTMzLjU0NDI5IEMgOTMuNjQ4MDYxLDEzMy41NDk1NSA5My42NDQwMywxMzMuNTUzNzggOTMuNjM5MDI0LDEzMy41NTM3OCBMIDE4LjM5NTkxMiwxMzMuNTUzNzggQyAxOC4zOTA5MDYsMTMzLjU1Mzc4IDE4LjM4Njg3NiwxMzMuNTQ5NTUgMTguMzg2ODc2LDEzMy41NDQyOSBMIDkzLjYzOTAyNCw1OC40ODQzNDkgeiAiCiAgICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiMyNTI1MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNiZmE2Yjc7c3Ryb2tlLXdpZHRoOjAuNDc4NDg1NzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgICBpZD0icGF0aDEwNzkzIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI2NS43NjA5MDIiCiAgICAgICAgICAgaGVpZ2h0PSI2NS43NjA5MDIiCiAgICAgICAgICAgcnk9IjAuMDA4MTU0MDg0OSIKICAgICAgICAgICB4PSI0NS41ODcxODkiCiAgICAgICAgICAgeT0iNjcuMTcyMjI2IgogICAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2IzYjFiYztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2JmYTZiNztzdHJva2Utd2lkdGg6MC40MjEyMTM2O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgICBpZD0icmVjdDEwNzk1IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjg2NCwwLDAsMC41MDg3MjIsNTI4LjY4ODcsLTEwOS4zNzgpIgogICAgICAgICBpZD0iZzgxMTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAtNDc5LjY5MjAxLDQyMS43ODc3NSBMIC00NzkuNjkyMDEsNDczLjc4Mzc1IEMgLTQ3Mi44NTAwNiw0NzAuODk2NjIgLTQ2Mi43Mzg3OSw0NjUuMTIzMTYgLTQ2MC45MjA1Nyw0NjQuMDg1MzQgQyAtNDU4LjMxMDIsNDYyLjU5NTM4IC00MzguNjAyMTQsNDUxLjM1MDU5IC00MzguNTcxODcsNDQ4LjMxNzYgQyAtNDM4LjU0MTYsNDQ1LjI4NDYxIC00NTguMDIwMTIsNDMzLjYzNzgzIC00NjAuNjAwMjIsNDMyLjA5NDggQyAtNDYyLjQ0MzUzLDQzMC45OTI0MSAtNDcyLjkxMTg0LDQyNC43MzA5OCAtNDc5LjY5MjAxLDQyMS43ODc3NSB6ICIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiMwMDhmMGY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMjUzMzAzODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgaWQ9InBhdGg4MTEzIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjYuODU1NjA4IgogICAgICAgICAgIGhlaWdodD0iMTEzLjIzNTc4IgogICAgICAgICAgIHJ5PSIwLjAwMTA0NDQzOTYiCiAgICAgICAgICAgeD0iLTQ4Ni41NDY4NCIKICAgICAgICAgICB5PSI0MjEuNzk3NjEiCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjAzODE4NDE3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgICBpZD0icmVjdDgxMTUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"winemine-wine,wine,winemine,mine\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"winemine.exe.winemine.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"winemine-wine\"\nLABEL oc.displayname=\"WineMine Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/winemine\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winemine-wine\"\nENV APPBIN \"/usr/bin/winemine\"\nENV APP \"/usr/bin/winemine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winemine-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winemine-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winemine-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winemine-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winhelp-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.wine:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nUSER $BUSER\nRUN wineboot --init\nRUN echo disable > $WINEPREFIX/.update-timestamp\nCOPY --chown=$BUSER:$BUSER user.reg system.reg /composer/.wine/\nLABEL oc.icon=\"winhelp.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cjxzdmcgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0OCA0OC4wMDAwMDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTM3IiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMGEwZDQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDFhOGQ3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxwYXRoIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00em0wIDAuNXYwLjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBvcGFjaXR5PSIuMDIiLz4KICA8cGF0aCBkPSJtMSA0My4yNXYwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIG9wYWNpdHk9Ii4wNSIvPgogIDxwYXRoIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgb3BhY2l0eT0iLjEiLz4KIDwvZz4KIDxyZWN0IHRyYW5zZm9ybT0icm90YXRlKC05MCkiIHg9Ii00NyIgeT0iMSIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjQ2IiByeD0iNCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDQ1MzcpIi8+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDMuOTQ5ZS01KSI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMTAwNC40KSI+CiAgIDxwYXRoIGQ9Im0xIDEwNDMuNHY0YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtNGMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIG9wYWNpdHk9Ii4xIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsLTEpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLDEpIj4KICAgPGcgb3BhY2l0eT0iLjEiPjwhLS0gY29sb3I6ICM0MWE4ZDggLS0+CiAgICA8cGF0aCBkPSJtMjQgOWMtOC4yODUgMC0xNSA2LjcxNS0xNSAxNXM2LjcxNSAxNSAxNSAxNSAxNS02LjcxNSAxNS0xNS02LjcxNS0xNS0xNS0xNW0wIDZjNC45NjkgMCA5IDQuMDMgOSA5IDAgNC45NjktNC4wMyA5LTkgOS00Ljk2OSAwLTktNC4wMy05LTkgMC00Ljk2OSA0LjAzLTkgOS05Ii8+CiAgICA8cGF0aCBkPSJtMjQgOWMtOC4yODUgMC0xNSA2LjcxNS0xNSAxNSAwIDQuMzk4IDEuOTIyIDguMzIgNC45MzggMTEuMDYtMi40MjYtMi42NjQtMy45MzgtNi4xNzYtMy45MzgtMTAuMDYgMC04LjI4NSA2LjcxNS0xNSAxNS0xNSAzLjg4NyAwIDcuMzk4IDEuNTEyIDEwLjA2IDMuOTM4LTIuNzQyLTMuMDItNi42NjQtNC45MzgtMTEuMDYtNC45MzgiIGZpbGwtb3BhY2l0eT0iLjE0OSIvPgogICAgPHBhdGggZD0ibTM1LjA1IDIzLjg1Yy0wLjE2MjY0IDIuMDYzMy0xLjAzMDMgNC4wNzkzLTIuNjA3OCA1LjY1NjktMy41MTM2IDMuNTEzNi05LjIxMzYgMy41MTQzLTEyLjcyOCAwLTEuNTc2OC0xLjU3NjgtMi40NDQ1LTMuNTk0Mi0yLjYwNzgtNS42NTY5LTAuMTk2NTggMi41MzI5IDAuNjcxMDQgNS4xMzQzIDIuNjA3OCA3LjA3MTEgMy41MTM2IDMuNTEzNiA5LjIxMzYgMy41MTQzIDEyLjcyOCAwIDEuOTM2MS0xLjkzNjEgMi44MDMtNC41MzgyIDIuNjA3OC03LjA3MTEiIGZpbGwtb3BhY2l0eT0iLjE0OSIvPgogICA8L2c+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMSkiPjwhLS0gY29sb3I6ICM0MWE4ZDggLS0+CiAgPHBhdGggZD0ibTI0IDljLTguMjg1IDAtMTUgNi43MTUtMTUgMTVzNi43MTUgMTUgMTUgMTUgMTUtNi43MTUgMTUtMTUtNi43MTUtMTUtMTUtMTVtMCA2YzQuOTY5IDAgOSA0LjAzIDkgOSAwIDQuOTY5LTQuMDMgOS05IDktNC45NjkgMC05LTQuMDMtOS05IDAtNC45NjkgNC4wMy05IDktOSIgZmlsbD0iI2VhNWM1MyIvPgogIDxnIGZpbGw9IiNlZWVjZTAiPgogICA8cGF0aCBkPSJtMTAuMzc1IDE3Ljc4MWMtMC44NjcgMS44OTUtMS4zNzUgNC0xLjM3NSA2LjIxOXMwLjUwOCA0LjMyNCAxLjM3NSA2LjIxOWw1LjI1LTNjLTAuMzgzLTEtMC42MjUtMi4wODItMC42MjUtMy4yMTlzMC4yNDItMi4yMTkgMC42MjUtMy4yMTltLTUuMjUtMyIvPgogICA8cGF0aCBkPSJtMzcuNjI1IDE3Ljc4MS01LjI1IDNjMC4zODMgMSAwLjYyNSAyLjA4MiAwLjYyNSAzLjIxOXMtMC4yNDIgMi4yMTktMC42MjUgMy4yMTlsNS4yNSAzYzAuODY3LTEuODk1IDEuMzc1LTQgMS4zNzUtNi4yMTlzLTAuNTA4LTQuMzI0LTEuMzc1LTYuMjE5Ii8+CiAgIDxwYXRoIGQ9Im0yMC43ODEgMzIuMzc1LTMgNS4yNWMxLjg5NSAwLjg2NyA0IDEuMzc1IDYuMjE5IDEuMzc1czQuMzI0LTAuNTA4IDYuMjE5LTEuMzc1bC0zLTUuMjVjLTEgMC4zODMtMi4wODIgMC42MjUtMy4yMTkgMC42MjVzLTIuMjE5LTAuMjQyLTMuMjE5LTAuNjI1Ii8+CiAgIDxwYXRoIGQ9Im0yNCA5Yy0yLjIxOSAwLTQuMzI0IDAuNTA4LTYuMjE5IDEuMzc1bDMgNS4yNWMxLTAuMzgzIDIuMDgyLTAuNjI1IDMuMjE5LTAuNjI1czIuMjE5IDAuMjQyIDMuMjE5IDAuNjI1bDMtNS4yNWMtMS44OTUtMC44NjctNC0xLjM3NS02LjIxOS0xLjM3NSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0zMi45NzkgMjMuNDI0YTkgOSAwIDAgMSAtOC45Nzg1IDguNTc2MiA5IDkgMCAwIDEgLTguOTc4NSAtOC40MjM4IDkgOSAwIDAgMCAtMC4wMjE0ODQgMC40MjM4MyA5IDkgMCAwIDAgOSA5IDkgOSAwIDAgMCA5IC05IDkgOSAwIDAgMCAtMC4wMjE0ODQgLTAuNTc2MTd6IiBvcGFjaXR5PSIuMSIgc3Ryb2tlLXdpZHRoPSIuOTk4MjciLz4KIDxwYXRoIGQ9Ik0gMjQgOCBBIDE1IDE1IDAgMCAwIDkgMjMgQSAxNSAxNSAwIDAgMCA5LjAxOTUzMTIgMjMuNTg1OTM4IEEgMTUgMTUgMCAwIDEgMjQgOSBBIDE1IDE1IDAgMCAxIDM4Ljk4MDQ2OSAyMy40MTQwNjIgQSAxNSAxNSAwIDAgMCAzOSAyMyBBIDE1IDE1IDAgMCAwIDI0IDggeiAiIG9wYWNpdHk9Ii4xIiBzdHJva2Utd2lkdGg9IjQuMjYyMyIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"winhelp-wine,wine,winhelp,text,hlp,help,wine\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winhlp32.exe.Wine\"\nLABEL oc.template=\"abcdesktopio/oc.template.wine\"\nENV ARGS=\"winhelp\"\nLABEL oc.name=\"winhelp-wine\"\nLABEL oc.displayname=\"Winhelp Wine\"\nLABEL oc.path=\"/usr/bin/wine\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/hlp;\"\nLABEL oc.fileextensions=\"hlp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winhelp-wine\"\nENV APPBIN \"/usr/bin/wine\"\nLABEL oc.args=\"winhelp\"\nENV APP \"/usr/bin/wine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winhelp-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winhelp-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winhelp-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winhelp-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winscp-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.wine:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nUSER $BUSER\nRUN wineboot --init\nRUN curl -Ls -o /tmp/winscp553.zip http://winscp.net/download/winscp553.zip && unzip /tmp/winscp553.zip -d /composer/bin/ && rm /tmp/winscp553.zip\nRUN echo disable > $WINEPREFIX/.update-timestamp\nCOPY --chown=$BUSER:$BUSER user.reg system.reg /composer/.wine/\nLABEL oc.icon=\"winscp.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMjAgMjAiCiAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiCiAgIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgaWQ9InN2ZzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJJRE8yLUtBS1VDSE8uc3ZnIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczEwIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlkPSJuYW1lZHZpZXc4IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIyMy42IgogICAgIGlua3NjYXBlOmN4PSI4LjkyMzgyNjMiCiAgICAgaW5rc2NhcGU6Y3k9IjguOTk0NTA1NyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIgLz4KICA8IS0tU2hhY2tsZS0tPgogIDwhLS1Cb2R5LS0+CiAgPHJlY3QKICAgICB4PSI1IgogICAgIHk9IjEuMjUwMDAwMSIKICAgICB3aWR0aD0iMTAiCiAgICAgaGVpZ2h0PSIxNSIKICAgICByeD0iNSIKICAgICByeT0iNSIKICAgICBpZD0icmVjdDQiCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgwODA4MDtzdHJva2Utd2lkdGg6Mi41IiAvPgogIDxyZWN0CiAgICAgeD0iMi41IgogICAgIHk9IjcuNSIKICAgICB3aWR0aD0iMTUiCiAgICAgaGVpZ2h0PSIxMi41IgogICAgIHJ4PSIxLjI1IgogICAgIHJ5PSIxLjI1IgogICAgIHN0eWxlPSJmaWxsOiM5NmM0ODk7ZmlsbC1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q2LTgtOCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiMxMDg4MTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgZD0ibSAzLjc1LDcuNTAwMDAwMiAxMi41LDAgYyAwLjM0NjI1LDAgMC42NTg3NSwwLjEzOTM3NSAwLjg4NDY4NywwLjM2NTMxMjUgTCAyLjg2NTMxMjUsMTkuNjM0Njg3IEMgMi42MzkzNzUsMTkuNDA4NzUgMi41LDE5LjA5NjI1IDIuNSwxOC43NSBsIDAsLTkuOTk5OTk5OCBjIDAsLTAuNjkyNSAwLjU1NzUsLTEuMjUgMS4yNSwtMS4yNSB6IgogICAgIGlkPSJyZWN0Ni0wIgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc2Njc3NzIiAvPgogIDxwYXRoCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmIgogICAgIGQ9Im0gNi41LDEyLjc1IDMuNSwwIEwgOC41LDExLjI1IDEwLDkuNzQ5OTk5NyAxNC4yNSwxNCAxMCwxOC4yNSBsIC0xLjUsLTEuNSAxLjUsLTEuNSAtMy41LDAgbSAwLC0yLjUiCiAgICAgaWQ9InBhdGg4IiAvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"winscp-wine,wine,scp,sftp\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winscp.exe.Wine\"\nLABEL oc.template=\"abcdesktopio/oc.template.wine\"\nENV ARGS=\"/composer/bin/winscp.exe\"\nLABEL oc.name=\"winscp-wine\"\nLABEL oc.displayname=\"WinSCP\"\nLABEL oc.path=\"/usr/bin/wine\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winscp-wine\"\nENV APPBIN \"/usr/bin/wine\"\nLABEL oc.args=\"/composer/bin/winscp.exe\"\nENV APP \"/usr/bin/wine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winscp-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winscp-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winscp-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winscp-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nENV QT_XCB_NO_MITSHM=1\nRUN apk add --no-cache --update wireshark\nLABEL oc.icon=\"wireshark.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOTkuOTk2MzYxIgogICBoZWlnaHQ9Ijk5Ljg0MTkyNyIKICAgaWQ9InN2ZzEzMTUiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDQiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndzaWNvbi5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIyMzAuNDEiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIyMzAuNDEiCiAgIHZlcnNpb249IjEuMCI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEzMTciPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTUzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTU1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOGQ4ZDg7c3RvcC1vcGFjaXR5OjAuODE5NjcyMTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzk1NyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMDEwOTI4OTYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTAwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC43NDIyNjgwMzsiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDM1MDIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMjc4MzUwNTA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AzNTA0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjAzMiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MGIyZTc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDIwMzQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjA0MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTY3OWE3O3N0b3Atb3BhY2l0eTowLjkzODE0NDMzOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMzIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNzcwIgogICAgICAgY3g9IjE4Ni44Njg1IgogICAgICAgY3k9IjMxOS42MjQ2OSIKICAgICAgIGZ4PSIxODYuODY4NSIKICAgICAgIGZ5PSIzMTkuNjI0NjkiCiAgICAgICByPSI0OS45OTgxOCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC45OTg0NTYsMCwwLjUwMTI1NCkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzUwMCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1MDYiCiAgICAgICB4MT0iMTY4Ljg4NDkzIgogICAgICAgeTE9IjI4My4zNjIxOCIKICAgICAgIHgyPSIxNzMuNjM4ODQiCiAgICAgICB5Mj0iMzE3LjQzODIzIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDIzNjg0LDAsMCwxLC00LjM4Njg5MiwtMSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTUxIgogICAgICAgeDE9IjE3MS40ODYzNiIKICAgICAgIHkxPSIyNzguNzUxMTMiCiAgICAgICB4Mj0iMTcxLjY5NjgyIgogICAgICAgeTI9IjI4Ni41Mzc3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwNDcwNSwwLDAsMS4zMDc3MDksLTAuNjc4MDc5LC04NS43MzMxNSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMzMwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDA0NzA1LDAsMCwxLjMwNzcwOSwtMC42NzgwNzksLTg1LjczMzE1KSIKICAgICAgIHgxPSIxNzEuNDg2MzYiCiAgICAgICB5MT0iMjc4Ljc1MTEzIgogICAgICAgeDI9IjE3Mi4wNjg2MiIKICAgICAgIHkyPSIyODkuODcwMjQiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIyLjAwNzgyMjUiCiAgICAgaW5rc2NhcGU6Y3g9IjE2OS4yNzkzNCIKICAgICBpbmtzY2FwZTpjeT0iMzUuNDY0NTg0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgc2hvd2d1aWRlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9Ijg5MyIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MzMiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjgzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItMTMiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMTMyMCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzMy44NzY4LC0yNzQuNjQxOCkiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50Mjc3MCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOmJsYWNrO3N0cm9rZS13aWR0aDo0LjU1Mzk5OTk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDU4MTEiCiAgICAgICB3aWR0aD0iOTUuNDQyMzYiCiAgICAgICBoZWlnaHQ9Ijk1LjI4NzkyNiIKICAgICAgIHg9IjEzNi4xNTM4MiIKICAgICAgIHk9IjI3Ni45MTg3OSIKICAgICAgIHJ4PSIxMCIKICAgICAgIHJ5PSIxMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvZ2VyYWxkL2RldmVsL3dzd2ViL2ltYWdlL3dzaWNvbjI1Ni5wbmciCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMjMwLjQxIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjIzMC40MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpibGFjaztzdHJva2Utd2lkdGg6NC4yOTcyMzY5MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxMzYuODgwNDUsMzQ3LjM2MjE4IEwgMTYwLjg4MDQ1LDM0Ny4zNjIxOCBDIDE2MC44ODA0NSwzNDcuMzYyMTggMTY0LjY2MzY1LDI5OS4xNzQ0OSAyMDYuNzMxODMsMjk4LjUxMDggQyAxOTMuMTYxNDYsMzE5Ljc0ODY4IDIwNS44ODA0NSwzNDcuMzYyMTggMjA1Ljg4MDQ1LDM0Ny4zNjIxOCBMIDIzMC44ODA0NSwzNDcuMzYyMTgiCiAgICAgICBpZD0icGF0aDEzMjgiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9nZXJhbGQvZGV2ZWwvd3N3ZWIvaW1hZ2Uvd3NpY29uMjAwLnBuZyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxODAuMDA5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTgwLjAwOTk5IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMzMwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxNDEsMjc3LjM2MjE4IEMgMTQ4LjQzMzU4LDI3NS44NDQ2NSAyMTcuNDEwMjEsMjc1LjM2MjE4IDIyNiwyNzcuMzYyMTggQyAyMzQuMDMxMzksMjc5LjIzMjE2IDIwNCwzMDUuMzYyMTggMTg0LDMwNS4zNjIxOCBDIDE2NCwzMDUuMzYyMTggMTMzLjQ1NzYzLDI3OC45MDE5MiAxNDEsMjc3LjM2MjE4IHogIgogICAgICAgaWQ9InJlY3QzMDcwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6IiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp3aGl0ZTtmaWxsLW9wYWNpdHk6MC4wMTA5Mjg5NDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTcwNSIKICAgICAgIHdpZHRoPSIxIgogICAgICAgaGVpZ2h0PSIwIgogICAgICAgeD0iMTU3IgogICAgICAgeT0iMjg1LjM2MjE4IgogICAgICAgcng9IjguOTQ5NjkzNyIKICAgICAgIHJ5PSIwIiAvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"wireshark,capture,network,analyzer\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.wireshark.Wireshark.desktop\"\nLABEL oc.launch=\"wireshark.Wireshark\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"wireshark\"\nLABEL oc.displayname=\"wireshark (alpine)\"\nLABEL oc.path=\"/usr/bin/wireshark\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.tcpdump.pcap;application/x-pcapng;application/x-snoop;application/x-iptrace;application/x-lanalyzer;application/x-nettl;application/x-radcom;application/x-etherpeek;application/x-visualnetworks;application/x-netinstobserver;application/x-5view;application/x-tektronix-rf5;\"\nLABEL oc.fileextensions=\"cap,pcap\"\nLABEL oc.legacyfileextensions=\"cap\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"wireshark\"\nENV APPBIN \"/usr/bin/wireshark\"\nENV APP \"/usr/bin/wireshark\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/wireshark/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/wireshark/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/wireshark/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/wireshark/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_writer.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSIzNDUiIHgyPSIzNDUiIHkxPSIxMTczIiB5Mj0iMTE3OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjEyNSAwIDAgMi4xMzc0IC03MDIuMTIgLTI0ODcuOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iMjI5LjUzIiB4Mj0iMjI5LjUzIiB5MT0iLTU4MS42NCIgeTI9Ii01NzguNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xMjUgMCAwIDIgLTQ0MC43NSAxMTgxLjMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2M2JiZWUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYWFkY2Y3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjIxNy4yOSIgeDI9IjIxNy4yOSIgeTE9Ii03ODcuODQiIHkyPSItNzYzLjg0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTY4MyAwIDAgMi4zMjMzIC00MzguODcgMTgzMC42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAzNjlhMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwNDdmYzYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMzIuMDIiIHgyPSIzMi4wMiIgeTE9IjIuMDQzIiB5Mj0iNjIuMDQ1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIzMiIgeDI9IjMyIiB5MT0iNyIgeTI9IjU3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkMmYzZmMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQ1LjUwMSIgeDI9IjQ1LjUwMSIgeTE9IjcuMTA1NSIgeTI9IjI5Ljg5NiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJmYWZlIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U3ZjhmYyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NSIvPgogIDwvZmlsdGVyPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjM4LjA2NiIgY3k9IjI2LjE5MiIgcj0iMjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLS44IDIuOTg4NmUtOCAtMS45MjY1ZS04IC0xIDgwLjQ1MyA0MC4xOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTM1M2MiIHN0b3Atb3BhY2l0eT0iLjQ4NTM4IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5MTkxOSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDU2MzY0IiB5PSItLjA2NDEzOCIgd2lkdGg9IjEuMTEyNyIgaGVpZ2h0PSIxLjEyODMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzc1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9InVybCgjZykiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbC1vcGFjaXR5PSIwIi8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZikiLz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMSkiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjI1Ij4KICA8cGF0aCBkPSJtMTYgMTd2M2gxMXYtM3ptMTQgMHYxNGgxOXYtN2MtMy0zLTUtNC05LjUtN3ptLTE0IDV2My4wNDc5bDExLTAuMDQ3OTR2LTMuMDQ3OXptMCA1djMuMDQ3OWwxMS0wLjA0Nzk0di0zLjA0Nzl6bTAgNnYzbDMzLTAuMDQ3OTR2LTN6bTAgNXYzbDMzLTAuMDQ3OTR2LTN6bTAgNXYzaDI0di0zeiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz4KICA8cGF0aCBkPSJtMzEgMThoOC41YzMuNSAwIDguNSA0IDguNSA2djZoLTE3eiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz4KICA8cGF0aCBkPSJtNDAuOTE3IDI3LjIxMi00LjkxNy02LjIxMjEtNSA3LjYwNjF2MS4zOTM5aDE3di0xLjM5MzlsLTMuNTQxMy00LjE4MTh6IiBjb2xvcj0iIzAwMDAwMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxKSI+CiAgPHBhdGggZD0ibTE2IDE3djNoMTF2LTN6bTE0IDB2MTRoMTl2LTdjLTMtMy01LTQtOS41LTd6bS0xNCA1djMuMDQ3OWwxMS0wLjA0Nzk0di0zLjA0Nzl6bTAgNXYzLjA0NzlsMTEtMC4wNDc5NHYtMy4wNDc5em0wIDZ2M2wzMy0wLjA0Nzk0di0zem0wIDV2M2wzMy0wLjA0Nzk0di0zem0wIDV2M2gyNHYtM3oiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2opIi8+CiAgPHBhdGggZD0ibTMxIDE4aDguNWMzLjUgMCA4LjUgNCA4LjUgNnY2aC0xN3oiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2kpIi8+CiAgPHBhdGggZD0ibTQwLjkxNyAyNy4yMTItNC45MTctNi4yMTIxLTUgNy42MDYxdjEuMzkzOWgxN3YtMS4zOTM5bC0zLjU0MTMtNC4xODE4eiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjaCkiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zMiA3YTI1IDI1IDAgMCAwLTI1IDI1IDI1IDI1IDAgMCAwIDI1IDI1IDI1IDI1IDAgMCAwIDI1LTI1IDI1IDI1IDAgMCAwLTAuMTAzNTItMi4xMDM1bC0yMi43OTEtMjIuNzkxYTI1IDI1IDAgMCAwLTIuMTA1NS0wLjEwNTQ3eiIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KIDxwYXRoIGQ9Im01Ni44OTYgMjkuODk2LTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAgMjIuNzkxIDIyLjc5MXoiIGZpbGw9InVybCgjZSkiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"writer,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-writer.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-writer\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--writer\"\nLABEL oc.name=\"writer\"\nLABEL oc.displayname=\"Writer alpine\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/x-hwp;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.lotus-wordpro;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.stardivision.writer-global;application/x-extension-txt;application/x-t602;application/vnd.oasis.opendocument.text-flat-xml;application/x-fictionbook+xml;application/macwriteii;application/x-aportisdoc;application/prs.plucker;application/vnd.palm;application/clarisworks;application/x-sony-bbeb;application/x-abiword;application/x-iwork-pages-sffpages;application/x-mswrite;\"\nLABEL oc.fileextensions=\"sxw;stw;doc;dot;wps;rtf;602;wpd;docx;docm;dotx;dotm;abw;zabw;pages;dummy;lrf;cwk;hqx;fb2;mw;mcw;mwd;pdb;wn\"\nLABEL oc.legacyfileextensions=\"odf;ott;fodt;uot\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"writer\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--writer\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/writer/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/writer/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/writer/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/writer/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update xclock\nLABEL oc.icon=\"xclock.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJhIiBjeD0iNjMuMTI1IiBjeT0iNjMuMjA4IiByPSI2My4yMDg1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9Ii45MjM4Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjMuMTI1IiBjeT0iNjMuMjA4IiByPSI2My4yMDgiIGZpbGw9InVybCgjYSkiIG9wYWNpdHk9Ii42MiIvPgogIDxjaXJjbGUgY3g9IjYyLjEyNSIgY3k9IjYxLjg3NSIgcj0iNjEuNjI1IiBmaWxsPSIjMEQzMTdEIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjA5LjA5OTYiIHgyPSIyMDkuMDk5NiIgeTE9Ii0xMDYuMjEiIHkyPSItMjIzLjQ2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWM3M2Q5Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlNWY4ZmYiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjaXJjbGUgY3g9IjYxLjUiIGN5PSI2MS43NSIgcj0iNTkuMjUiIGZpbGw9InVybCgjYikiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIyMDYuOTEwMiIgeDI9IjIwNi45MTAyIiB5MT0iLTEwNy40MjY4IiB5Mj0iLTIxOS40ODIyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii41MTEiIHN0b3AtY29sb3I9IiMxZjdhZDQiLz4KICAgIDxzdG9wIG9mZnNldD0iLjU2NjMiIHN0b3AtY29sb3I9IiMyNTdlZDUiLz4KICAgIDxzdG9wIG9mZnNldD0iLjYzNzEiIHN0b3AtY29sb3I9IiMzNDg4ZDkiLz4KICAgIDxzdG9wIG9mZnNldD0iLjcxNjMiIHN0b3AtY29sb3I9IiM0Zjk4ZGUiLz4KICAgIDxzdG9wIG9mZnNldD0iLjgwMTciIHN0b3AtY29sb3I9IiM3M2IwZTYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjg5MTkiIHN0b3AtY29sb3I9IiNhMmNlZjEiLz4KICAgIDxzdG9wIG9mZnNldD0iLjk4NDkiIHN0b3AtY29sb3I9IiNkYmYyZmQiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2U1ZjhmZiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTExMy44NyAzOS4xMDYgMTAzIDQwcy0zNi4yNTggNzctNDEuNjI1IDc3QzMwLjEwMiAxMTcgNC43NSA5MS42NDggNC43NSA2MC4zNzVTMzAuMTAyIDMuNzUgNjEuMzc1IDMuNzVjMjMuNzUxIDAgNDQuMDg3IDE0LjYyMyA1Mi40OTUgMzUuMzU2eiIvPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjIwOS40MzI2IiBjeT0iLTE2NS4xMjYiIHI9IjUzLjAwMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iLjk1MDUiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzI0NTBhMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjEuODMzIiBjeT0iNjIuMTY2IiByPSI1My4wMDEiIGZpbGw9InVybCgjZCkiLz4KICA8Y2lyY2xlIGN4PSI2MS42MjUiIGN5PSI2MS44NzUiIHI9IjUxLjM3NSIgZmlsbD0iI0EyRDJGRiIvPgogIDxkZWZzPgogICAgPGNpcmNsZSBpZD0iZSIgY3g9IjYxLjYyNSIgY3k9IjYxLjg3NSIgcj0iNTEuMzc1Ii8+CiAgPC9kZWZzPgogIDxjbGlwUGF0aCBpZD0iZyI+CiAgICA8dXNlIHhsaW5rOmhyZWY9IiNlIiBvdmVyZmxvdz0idmlzaWJsZSIvPgogIDwvY2xpcFBhdGg+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMjA5LjIyNDYiIHgyPSIyMDkuMjI0NiIgeTE9Ii0xMTYuMjEiIHkyPSItMjE3LjIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4xNDc4IiBzdG9wLWNvbG9yPSIjZTFmMWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4yMzYzIiBzdG9wLWNvbG9yPSIjZDRlYmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4zNTA1IiBzdG9wLWNvbG9yPSIjZTNmMmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii41MjY0IiBzdG9wLWNvbG9yPSIjZjNmOWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii43MjYyIiBzdG9wLWNvbG9yPSIjZmNmZWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmYiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjaXJjbGUgY3g9IjYxLjYyNSIgY3k9IjYzLjg3NSIgcj0iNTEuMzc1IiBmaWxsPSJ1cmwoI2YpIiBjbGlwLXBhdGg9InVybCgjZykiLz4KICA8ZGVmcz4KICAgIDxjaXJjbGUgaWQ9ImgiIGN4PSI2MS42MjUiIGN5PSI2MS44NzUiIHI9IjUxLjM3NSIvPgogIDwvZGVmcz4KICA8Y2xpcFBhdGggaWQ9ImoiPgogICAgPHVzZSB4bGluazpocmVmPSIjaCIgb3ZlcmZsb3c9InZpc2libGUiLz4KICA8L2NsaXBQYXRoPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjIwNi42NDA2IiB4Mj0iMjA2LjY0MDYiIHkxPSItMTE2LjIxIiB5Mj0iLTIxNy4yMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMTQzNSIgc3RvcC1jb2xvcj0iI2VkZjdmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMjgwMiIgc3RvcC1jb2xvcj0iI2UwZjJmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMzA2MyIgc3RvcC1jb2xvcj0iI2UzZjNmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNDk0MiIgc3RvcC1jb2xvcj0iI2YzZmFmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNzA3NiIgc3RvcC1jb2xvcj0iI2ZjZmVmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2kpIiBkPSJNMTA3LjgzMyA0MS45MTcgNjMuNSA2Mi41bC0xLjg3NSA1Mi43NWMtMjguMzczIDAtNTEuMzc1LTIzLjAwMS01MS4zNzUtNTEuMzc1UzMzLjI1MiAxMi41IDYxLjYyNSAxMi41YzIwLjkyOCAwIDM4LjE5NyAxMS40NjUgNDYuMjA4IDI5LjQxN3oiIGNsaXAtcGF0aD0idXJsKCNqKSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjIxOC40NzY2IiB4Mj0iMjE4LjQ3NjYiIHkxPSItMTIwLjM1MzUiIHkyPSItMTk2LjcxNTIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNrKSIgZD0iTTcwLjg3NyAxOS4xNjhjLS42MiAwLTEuMTI2LS41MDYtMS4xMjYtMS4xMjZzLjUwNi0xLjEyNiAxLjEyNi0xLjEyNmMuNjE5IDAgMS4xMjYuNTA2IDEuMTI2IDEuMTI2cy0uNTA3IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibCIgeDE9IjIxMy42NDI2IiB4Mj0iMjEzLjY0MjYiIHkxPSItMTIwLjI0OCIgeTI9Ii0xOTYuNDc3MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2wpIiBkPSJNNjYuMDQ0IDE4LjU4MmMtLjYyMSAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjMgMC0uNjIxLjUwNC0xLjEyNSAxLjEyNS0xLjEyNS42MTkgMCAxLjEyMy41MDQgMS4xMjMgMS4xMjUgMCAuNjE5LS41MDQgMS4xMjMtMS4xMjMgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJtIiB4MT0iMjIzLjA1ODYiIHgyPSIyMjMuMDU4NiIgeTE9Ii0xMjAuNTg2OSIgeTI9Ii0xOTYuOTgxNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI20pIiBkPSJNNzUuNDYgMjAuNDZjLS42MiAwLTEuMTI3LS41MDYtMS4xMjctMS4xMjZzLjUwNy0xLjEyNiAxLjEyNy0xLjEyNmMuNjE5IDAgMS4xMjYuNTA3IDEuMTI2IDEuMTI2IDAgLjYyLS41MDcgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJuIiB4MT0iMjI3LjIyNjYiIHgyPSIyMjcuMjI2NiIgeTE9Ii0xMjAuODgxOCIgeTI9Ii0xOTcuMjQzNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI24pIiBkPSJNNzkuNjI4IDIyLjA4NGMtLjYyIDAtMS4xMjctLjUwNS0xLjEyNy0xLjEyNXMuNTA3LTEuMTI3IDEuMTI3LTEuMTI3IDEuMTI1LjUwNyAxLjEyNSAxLjEyNy0uNTA1IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjIzNS41MTg2IiB4Mj0iMjM1LjUxODYiIHkxPSItMTIxLjcxNzgiIHkyPSItMTk4LjAxMzMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNvKSIgZD0iTTg3LjkxOSAyNi42NjdjLS42MiAwLTEuMTI2LS41MDUtMS4xMjYtMS4xMjYgMC0uNjE5LjUwNi0xLjEyNCAxLjEyNi0xLjEyNC42MjEgMCAxLjEyNi41MDUgMS4xMjYgMS4xMjQgMCAuNjIxLS41MDUgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJwIiB4MT0iMjQyLjYwMTYiIHgyPSIyNDIuNjAxNiIgeTE9Ii0xMjIuODkyNiIgeTI9Ii0xOTkuMTg4MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNOTUuMDAyIDMzLjEyNmMtLjYxOSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjUgMC0uNjIuNTA2LTEuMTI1IDEuMTI1LTEuMTI1czEuMTI1LjUwNSAxLjEyNSAxLjEyNWMwIC42MTktLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InEiIHgxPSIyNDUuNTYwNSIgeDI9IjI0NS41NjA1IiB5MT0iLTEyMy41NTU3IiB5Mj0iLTE5OS44Njc3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjcSkiIGQ9Ik05Ny45NiAzNi43OTJjLS42MTkgMC0xLjEyNS0uNTA2LTEuMTI1LTEuMTI1IDAtLjYyLjUwNi0xLjEyNSAxLjEyNS0xLjEyNS42MiAwIDEuMTI2LjUwNiAxLjEyNiAxLjEyNSAwIC42Mi0uNTA2IDEuMTI1LTEuMTI2IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iciIgeDE9IjI1MC40MzY1IiB4Mj0iMjUwLjQzNjUiIHkxPSItMTI1LjA4MTEiIHkyPSItMjAxLjM3NjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNyKSIgZD0iTTEwMi44MzYgNDUuMTY3Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI0IDAtLjYyMi41MDQtMS4xMjYgMS4xMjQtMS4xMjYuNjIxIDAgMS4xMjYuNTA0IDEuMTI2IDEuMTI2IDAgLjYyLS41MDUgMS4xMjQtMS4xMjYgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJzIiB4MT0iMjUyLjE0MzYiIHgyPSIyNTIuMTQzNiIgeTE9Ii0xMjUuODcwMSIgeTI9Ii0yMDIuMTE1OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3MpIiBkPSJNMTA0LjU0NSA0OS40MTdjLS42MjIgMC0xLjEyNi0uNTA0LTEuMTI2LTEuMTI1IDAtLjYyLjUwNC0xLjEyNCAxLjEyNi0xLjEyNC42MiAwIDEuMTI0LjUwNCAxLjEyNCAxLjEyNHMtLjUwNCAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InQiIHgxPSIyNTMuMTQzNiIgeDI9IjI1My4xNDM2IiB5MT0iLTEyNi42MjExIiB5Mj0iLTIwMi45NDk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjdCkiIGQ9Ik0xMDUuNTQ1IDUzLjcwOGMtLjYyMiAwLTEuMTI2LS41MDQtMS4xMjYtMS4xMjUgMC0uNjIyLjUwNC0xLjEyNiAxLjEyNi0xLjEyNi42MiAwIDEuMTI0LjUwNCAxLjEyNCAxLjEyNiAwIC42MjEtLjUwNCAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InUiIHgxPSIyNTQuMTAxNiIgeDI9IjI1NC4xMDE2IiB5MT0iLTEyNy41MzUyIiB5Mj0iLTIwMy43OTc1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjdSkiIGQ9Ik0xMDYuNTAzIDU4LjU4M2MtLjYyMiAwLTEuMTI3LS41MDQtMS4xMjctMS4xMjVzLjUwNS0xLjEyNSAxLjEyNy0xLjEyNWMuNjIgMCAxLjEyNC41MDQgMS4xMjQgMS4xMjVzLS41MDQgMS4xMjUtMS4xMjQgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJ2IiB4MT0iMjU0LjAxOTUiIHgyPSIyNTQuMDE5NSIgeTE9Ii0xMjkuMjY2NiIgeTI9Ii0yMDUuNTI4OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3YpIiBkPSJNMTA2LjQyIDY4LjA4NGMtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA1LTEuMTI0IDEuMTI1LTEuMTI0IDEuMTI0LjUwNCAxLjEyNCAxLjEyNC0uNTA0IDEuMTI1LTEuMTI0IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0idyIgeDE9IjI1My4xODU1IiB4Mj0iMjUzLjE4NTUiIHkxPSItMTMwLjA3MDMiIHkyPSItMjA2LjM5ODgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCN3KSIgZD0iTTEwNS41ODUgNzIuNzFjLS42MiAwLTEuMTI0LS41MDUtMS4xMjQtMS4xMjcgMC0uNjIuNTA0LTEuMTI0IDEuMTI0LTEuMTI0LjYyMiAwIDEuMTI2LjUwNCAxLjEyNiAxLjEyNCAwIC42MjItLjUwNCAxLjEyNy0xLjEyNiAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IngiIHgxPSIyNTIuMDE5NSIgeDI9IjI1Mi4wMTk1IiB5MT0iLTEzMC45MzI2IiB5Mj0iLTIwNy4yNjExIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjeCkiIGQ9Ik0xMDQuNDE4IDc3LjQ2Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI2IDAtLjYyLjUwNC0xLjEyNSAxLjEyNC0xLjEyNS42MjIgMCAxLjEyNy41MDUgMS4xMjcgMS4xMjUgMCAuNjIyLS41MDUgMS4xMjYtMS4xMjcgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJ5IiB4MT0iMjUwLjAxOTUiIHgyPSIyNTAuMDE5NSIgeTE9Ii0xMzEuNzI0NiIgeTI9Ii0yMDguMDIwMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3kpIiBkPSJNMTAyLjQxOSA4MS43MDljLS42MiAwLTEuMTI0LS41MDQtMS4xMjQtMS4xMjQgMC0uNjIyLjUwNC0xLjEyNiAxLjEyNC0xLjEyNi42MjIgMCAxLjEyNi41MDQgMS4xMjYgMS4xMjYgMCAuNjItLjUwNCAxLjEyNC0xLjEyNiAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InoiIHgxPSIyNDUuNTU4NiIgeDI9IjI0NS41NTg2IiB5MT0iLTEzMy4yMTQ4IiB5Mj0iLTIwOS41NDM0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjeikiIGQ9Ik05Ny45NTkgOTAuMDQyYy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNXMuNTA2LTEuMTI2IDEuMTI1LTEuMTI2Yy42MiAwIDEuMTI2LjUwNyAxLjEyNiAxLjEyNnMtLjUwNiAxLjEyNS0xLjEyNiAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIyNDIuNTE4NiIgeDI9IjI0Mi41MTg2IiB5MT0iLTEzMy45MDcyIiB5Mj0iLTIxMC4yMDI2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjQSkiIGQ9Ik05NC45MTkgOTMuNzA4Yy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNSAwLS42Mi41MDYtMS4xMjUgMS4xMjUtMS4xMjVzMS4xMjUuNTA1IDEuMTI1IDEuMTI1YzAgLjYxOS0uNTA2IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iQiIgeDE9IjIzOS4yMjg1IiB4Mj0iMjM5LjIyODUiIHkxPSItMTM0LjUwNDkiIHkyPSItMjEwLjgwMDQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNCKSIgZD0iTTkxLjYyOSA5N2MtLjYyIDAtMS4xMjYtLjUwNi0xLjEyNi0xLjEyNXMuNTA2LTEuMTI1IDEuMTI2LTEuMTI1Yy42MTkgMCAxLjEyNS41MDYgMS4xMjUgMS4xMjVTOTIuMjQ4IDk3IDkxLjYyOSA5N3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkMiIHgxPSIyMzUuNjAzNSIgeDI9IjIzNS42MDM1IiB5MT0iLTEzNS4wODY5IiB5Mj0iLTIxMS4zNDkyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjQykiIGQ9Ik04OC4wMDIgMTAwLjA0Yy0uNjE5IDAtMS4xMjMtLjUwNC0xLjEyMy0xLjEyMyAwLS42Mi41MDQtMS4xMjYgMS4xMjMtMS4xMjYuNjIgMCAxLjEyNi41MDYgMS4xMjYgMS4xMjYgMCAuNjE5LS41MDYgMS4xMjMtMS4xMjYgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJEIiB4MT0iMjI3LjE0MjYiIHgyPSIyMjcuMTQyNiIgeTE9Ii0xMzUuODc3IiB5Mj0iLTIxMi4yMDU2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjRCkiIGQ9Ik03OS41NDUgMTA0LjcwOWMtLjYyMiAwLTEuMTI3LS41MDUtMS4xMjctMS4xMjcgMC0uNjE5LjUwNS0xLjEyNCAxLjEyNy0xLjEyNC42MTkgMCAxLjEyNC41MDUgMS4xMjQgMS4xMjQgMCAuNjIyLS41MDUgMS4xMjctMS4xMjQgMS4xMjd6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJFIiB4MT0iMjIyLjk3NjYiIHgyPSIyMjIuOTc2NiIgeTE9Ii0xMzYuMjE2OCIgeTI9Ii0yMTIuNTQ1NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI0UpIiBkPSJNNzUuMzc3IDEwNi41ODRjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjcgMC0uNjIuNTA1LTEuMTI0IDEuMTI1LTEuMTI0czEuMTI0LjUwNCAxLjEyNCAxLjEyNGMwIC42MjItLjUwNCAxLjEyNy0xLjEyNCAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkYiIHgxPSIyMTguMTg0NiIgeDI9IjIxOC4xODQ2IiB5MT0iLTEzNi40Njk3IiB5Mj0iLTIxMi43MzIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNGKSIgZD0iTTcwLjU4NSAxMDcuNjI1Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI0cy41MDQtMS4xMjUgMS4xMjQtMS4xMjUgMS4xMjQuNTA1IDEuMTI0IDEuMTI1LS41MDQgMS4xMjQtMS4xMjQgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJHIiB4MT0iMjEzLjY4NTUiIHgyPSIyMTMuNjg1NSIgeTE9Ii0xMzYuNjM2NyIgeTI9Ii0yMTIuODk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjRykiIGQ9Ik02Ni4wODYgMTA4LjU0MmMtLjYyIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNSAwLS42Mi41MDUtMS4xMjQgMS4xMjUtMS4xMjRzMS4xMjQuNTA0IDEuMTI0IDEuMTI0YzAgLjYyMS0uNTA0IDEuMTI1LTEuMTI0IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iSCIgeDE9IjE5OS4xNDE2IiB4Mj0iMTk5LjE0MTYiIHkxPSItMTIwLjM1MzUiIHkyPSItMTk2LjY2NTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNIKSIgZD0iTTUxLjU0MiAxOS4xNjdjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjVzLjUwNS0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNS41MDUgMS4xMjUgMS4xMjUtLjUwNCAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkkiIHgxPSIyMDMuOTc0NiIgeDI9IjIwMy45NzQ2IiB5MT0iLTEyMC4yNDgiIHkyPSItMTk2LjQ3NzIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNJKSIgZD0iTTU2LjM3NiAxOC41ODJjLS42MjEgMC0xLjEyNi0uNTAzLTEuMTI2LTEuMTI0cy41MDUtMS4xMjQgMS4xMjYtMS4xMjQgMS4xMjQuNTAzIDEuMTI0IDEuMTI0LS41MDMgMS4xMjQtMS4xMjQgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJKIiB4MT0iMTk0LjU1ODYiIHgyPSIxOTQuNTU4NiIgeTE9Ii0xMjAuNTg5OCIgeTI9Ii0xOTYuODUyMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI0opIiBkPSJNNDYuOTU5IDIwLjQ1OGMtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA0LTEuMTI1IDEuMTI1LTEuMTI1Yy42MiAwIDEuMTI1LjUwNSAxLjEyNSAxLjEyNXMtLjUwNSAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IksiIHgxPSIxOTAuMzkyNiIgeDI9IjE5MC4zOTI2IiB5MT0iLTEyMC44ODQ4IiB5Mj0iLTE5Ny4xODAzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjSykiIGQ9Ik00Mi43OTIgMjIuMDg0Yy0uNjE5IDAtMS4xMjQtLjUwNS0xLjEyNC0xLjEyNiAwLS42Mi41MDQtMS4xMjQgMS4xMjQtMS4xMjQuNjIyIDAgMS4xMjYuNTA0IDEuMTI2IDEuMTI0IDAgLjYyMS0uNTA1IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iTCIgeDE9IjE4Mi4wOTk2IiB4Mj0iMTgyLjA5OTYiIHkxPSItMTIxLjcxNjgiIHkyPSItMTk4LjAxMjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNMKSIgZD0iTTM0LjUgMjYuNjY3Yy0uNjIxIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNXMuNTA0LTEuMTI1IDEuMTI1LTEuMTI1IDEuMTI1LjUwNCAxLjEyNSAxLjEyNS0uNTA0IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iTSIgeDE9IjE3NS4wMTU2IiB4Mj0iMTc1LjAxNTYiIHkxPSItMTIyLjg4MzgiIHkyPSItMTk5LjIyODkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNNKSIgZD0iTTI3LjQxNyAzMy4xMjZjLS42MjEgMC0xLjEyNi0uNTA2LTEuMTI2LTEuMTI2IDAtLjYyMS41MDYtMS4xMjUgMS4xMjYtMS4xMjVzMS4xMjUuNTA0IDEuMTI1IDEuMTI1LS41MDQgMS4xMjYtMS4xMjUgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJOIiB4MT0iMTc4LjU3ODEiIHgyPSIxNzguNTc4MSIgeTE9Ii0xMjIuMjYzMiIgeTI9Ii0xOTguNTkxOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI04pIiBkPSJNMzAuOTc5IDI5LjY4OWMtLjYyMSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjZzLjUwNC0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNC41MDQgMS4xMjQgMS4xMjUtLjUwMyAxLjEyNi0xLjEyNCAxLjEyNnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9Ik8iIHgxPSIxNzIuMDU3NiIgeDI9IjE3Mi4wNTc2IiB5MT0iLTEyMy41NTQ3IiB5Mj0iLTE5OS44NjY3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjTykiIGQ9Ik0yNC40NTcgMzYuNzkyYy0uNjE5IDAtMS4xMjMtLjUwNC0xLjEyMy0xLjEyNXMuNTA0LTEuMTI1IDEuMTIzLTEuMTI1Yy42MjEgMCAxLjEyNS41MDQgMS4xMjUgMS4xMjVzLS41MDQgMS4xMjUtMS4xMjUgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJQIiB4MT0iMTY3LjE4MzYiIHgyPSIxNjcuMTgzNiIgeTE9Ii0xMjUuMDc3MSIgeTI9Ii0yMDEuMzg5MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1ApIiBkPSJNMTkuNTgzIDQ1LjE2N2MtLjYyIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNiAwLS42Mi41MDUtMS4xMjUgMS4xMjUtMS4xMjUuNjIyIDAgMS4xMjYuNTA1IDEuMTI2IDEuMTI1LS4wMDEuNjIyLS41MDUgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJRIiB4MT0iMTY1LjQ3NDYiIHgyPSIxNjUuNDc0NiIgeTE9Ii0xMjUuODU5NCIgeTI9Ii0yMDIuMTM4MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1EpIiBkPSJNMTcuODc1IDQ5LjQxN2MtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA1LTEuMTI1IDEuMTI1LTEuMTI1UzE5IDQ3LjY3MiAxOSA0OC4yOTJjLS4wMDEuNjItLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlIiIHgxPSIxNjQuNDc0NiIgeDI9IjE2NC40NzQ2IiB5MT0iLTEyNi42NTMzIiB5Mj0iLTIwMi44OTkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNSKSIgZD0iTTE2Ljg3NSA1My43MDhjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjVzLjUwNS0xLjEyMyAxLjEyNS0xLjEyMyAxLjEyNC41MDMgMS4xMjQgMS4xMjMtLjUwMyAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlMiIHgxPSIxNjMuNTE2NiIgeDI9IjE2My41MTY2IiB5MT0iLTEyNy41MjA1IiB5Mj0iLTIwMy44MTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNTKSIgZD0iTTE1LjkxNyA1OC41ODRjLS42MjEgMC0xLjEyNC0uNTA2LTEuMTI0LTEuMTI2IDAtLjYyMS41MDMtMS4xMjQgMS4xMjQtMS4xMjRzMS4xMjQuNTAzIDEuMTI0IDEuMTI0YzAgLjYyLS41MDQgMS4xMjYtMS4xMjQgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJUIiB4MT0iMTYzLjU5OTYiIHgyPSIxNjMuNTk5NiIgeTE9Ii0xMjkuMjY1NiIgeTI9Ii0yMDUuNTI3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1QpIiBkPSJNMTYgNjguMDgzYy0uNjE5IDAtMS4xMjQtLjUwNS0xLjEyNC0xLjEyNCAwLS42MjEuNTA0LTEuMTI1IDEuMTI0LTEuMTI1LjYyMSAwIDEuMTI1LjUwNCAxLjEyNSAxLjEyNSAwIC42MTktLjUwNCAxLjEyNC0xLjEyNSAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlUiIHgxPSIxNjQuNDMyNiIgeDI9IjE2NC40MzI2IiB5MT0iLTEzMC4wNTA4IiB5Mj0iLTIwNi40MTI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjVSkiIGQ9Ik0xNi44MzMgNzIuNzExYy0uNjIgMC0xLjEyNi0uNTA3LTEuMTI2LTEuMTI2IDAtLjYyLjUwNi0xLjEyNiAxLjEyNi0xLjEyNnMxLjEyNi41MDYgMS4xMjYgMS4xMjZjMCAuNjE5LS41MDYgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJWIiB4MT0iMTY1LjU5OTYiIHgyPSIxNjUuNTk5NiIgeTE9Ii0xMzAuOTMyNiIgeTI9Ii0yMDcuMjYxMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1YpIiBkPSJNMTggNzcuNDZjLS42MiAwLTEuMTI3LS41MDctMS4xMjctMS4xMjcgMC0uNjE5LjUwNy0xLjEyNCAxLjEyNy0xLjEyNHMxLjEyNi41MDUgMS4xMjYgMS4xMjRjMCAuNjItLjUwNiAxLjEyNy0xLjEyNiAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlciIHgxPSIxNjcuNTk5NiIgeDI9IjE2Ny41OTk2IiB5MT0iLTEzMS43MjQ2IiB5Mj0iLTIwOC4wMjAxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjVykiIGQ9Ik0xOS45OTkgODEuNzA5Yy0uNjIgMC0xLjEyNS0uNTA0LTEuMTI1LTEuMTI1IDAtLjYyLjUwNS0xLjEyNSAxLjEyNS0xLjEyNS42MjEgMCAxLjEyNy41MDUgMS4xMjcgMS4xMjUgMCAuNjIxLS41MDYgMS4xMjUtMS4xMjcgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJYIiB4MT0iMTcyLjA1ODYiIHgyPSIxNzIuMDU4NiIgeTE9Ii0xMzMuMTg5NSIgeTI9Ii0yMDkuNTUxMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1gpIiBkPSJNMjQuNDU4IDkwLjA0M2MtLjYxOSAwLTEuMTI0LS41MDUtMS4xMjQtMS4xMjZzLjUwNS0xLjEyNiAxLjEyNC0xLjEyNmMuNjIxIDAgMS4xMjYuNTA1IDEuMTI2IDEuMTI2cy0uNTA1IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iWSIgeDE9IjE3NS4wOTk2IiB4Mj0iMTc1LjA5OTYiIHkxPSItMTMzLjg3OTkiIHkyPSItMjEwLjIwODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNZKSIgZD0iTTI3LjUgOTMuNzA4Yy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNSAwLS42MjEuNTA2LTEuMTI2IDEuMTI1LTEuMTI2czEuMTI1LjUwNSAxLjEyNSAxLjEyNmMwIC42MTktLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IloiIHgxPSIxNzguMzg5NiIgeDI9IjE3OC4zODk2IiB5MT0iLTEzNC41MDQ5IiB5Mj0iLTIxMC44MDA0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjWikiIGQ9Ik0zMC43OSA5N2MtLjYxOSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjVzLjUwNi0xLjEyNSAxLjEyNS0xLjEyNWMuNjIgMCAxLjEyNS41MDYgMS4xMjUgMS4xMjVTMzEuNDEgOTcgMzAuNzkgOTd6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhYSIgeDE9IjE4Mi4wMTU2IiB4Mj0iMTgyLjAxNTYiIHkxPSItMTM1LjA4NjkiIHkyPSItMjExLjM0OTIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhYSkiIGQ9Ik0zNC40MTcgMTAwLjA0Yy0uNjIgMC0xLjEyNS0uNTA0LTEuMTI1LTEuMTIzIDAtLjYyLjUwNi0xLjEyNiAxLjEyNS0xLjEyNnMxLjEyNC41MDYgMS4xMjQgMS4xMjZjMCAuNjE5LS41MDQgMS4xMjMtMS4xMjQgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhYiIgeDE9IjE5MC40NzQ2IiB4Mj0iMTkwLjQ3NDYiIHkxPSItMTM1Ljg3NyIgeTI9Ii0yMTIuMjA1NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FiKSIgZD0iTTQyLjg3NSAxMDQuNzA5Yy0uNjIgMC0xLjEyNC0uNTA1LTEuMTI0LTEuMTI3IDAtLjYxOS41MDQtMS4xMjQgMS4xMjQtMS4xMjRzMS4xMjQuNTA1IDEuMTI0IDEuMTI0YzAgLjYyMi0uNTA0IDEuMTI3LTEuMTI0IDEuMTI3eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYWMiIHgxPSIxOTQuNjQwNiIgeDI9IjE5NC42NDA2IiB5MT0iLTEzNi4yMTY4IiB5Mj0iLTIxMi41NDU0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWMpIiBkPSJNNDcuMDQyIDEwNi41ODRjLS42MjIgMC0xLjEyNi0uNTA1LTEuMTI2LTEuMTI3IDAtLjYyLjUwNC0xLjEyNCAxLjEyNi0xLjEyNC42MiAwIDEuMTI1LjUwNCAxLjEyNSAxLjEyNCAwIC42MjItLjUwNCAxLjEyNy0xLjEyNSAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFkIiB4MT0iMTk5LjQzMzYiIHgyPSIxOTkuNDMzNiIgeTE9Ii0xMzYuNDY5NyIgeTI9Ii0yMTIuNzMyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWQpIiBkPSJNNTEuODM0IDEwNy42MjVjLS42MiAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjRzLjUwNC0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNS41MDUgMS4xMjUgMS4xMjUtLjUwNCAxLjEyNC0xLjEyNSAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFlIiB4MT0iMjAzLjkzMzYiIHgyPSIyMDMuOTMzNiIgeTE9Ii0xMzYuNjM2NyIgeTI9Ii0yMTIuODk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWUpIiBkPSJNNTYuMzM0IDEwOC41NDJjLS42MiAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjUgMC0uNjIuNTA0LTEuMTI0IDEuMTI1LTEuMTI0czEuMTI1LjUwNCAxLjEyNSAxLjEyNGMtLjAwMS42MjEtLjUwNSAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFmIiB4MT0iMjA5LjQ3NDYiIHgyPSIyMDkuNDc0NiIgeTE9Ii0xMTYuMjEiIHkyPSItMjEzLjIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWYpIiBkPSJNNjAuODc0IDExMS4yNXYtOC42MjZoMi4wMDF2OC42MjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhZyIgeDE9IjIwOS40NzM2IiB4Mj0iMjA5LjQ3MzYiIHkxPSItMTE1Ljc2MzciIHkyPSItMjE2LjUwMzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhZykiIGQ9Ik02MC44NzQgMjEuNDU4VjEyLjVoMnY4Ljk1OHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFoIiB4MT0iMjU0LjMwNzYiIHgyPSIyNTQuMzA3NiIgeTE9Ii0xMTYuMjEwNCIgeTI9Ii0yMTMuMjEwNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FoKSIgZD0iTTEwMi4zOTUgNjMuMTA0di0yLjAwMWg4LjYyNnYyLjAwMXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFpIiB4MT0iMTY0LjY0MDYiIHgyPSIxNjQuNjQwNiIgeTE9Ii0xMTYuMjEwNCIgeTI9Ii0yMTMuMjEwNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FpKSIgZD0iTTEyLjcyOCA2My4xMDR2LTJoOC42MjZ2MnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFqIiB4MT0iMjA5LjM4OTYiIHgyPSIyMDkuMzg5NSIgeTE9Ii0xMTUuNDYwNCIgeTI9Ii0yMTMuNzA5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FqKSIgZD0ibTI2LjM1OSA0Mi4zOTMuODY3LTEuNTE5LTcuNzU0LTQuNDM1LS44NjggMS41MTcuMzI2LjE4OCA3LjQyOSA0LjI0OXpNMzYuNDIzIDE5LjUzbC4xODkuMzI0IDQuMjgxIDcuNDA4IDEuNTE2LS44NzUtNC40NzItNy43MzItMS41MTQuODc1em0wIDg0Ljg0Mi4zMjQuMTg3IDEuMTk0LjY4MyA0LjQzNC03Ljc1Ny0xLjUxOS0uODY4LTQuNDMzIDcuNzU1ek0xOC42MzYgODUuOTA2bC4xODguMzI2LjY4NyAxLjE5IDcuNzM1LTQuNDc0LS44NzgtMS41MTQtNy43MzIgNC40NzJ6bTc4LjU4MS00My41MTQgNy43NTgtNC40MzQtLjg3MS0xLjUxOS03Ljc1NCA0LjQzNi4xODcuMzI1LjY4IDEuMTkyek04Mi42ODYgMjcuMjY1bDQuNDY5LTcuNzM3LTEuNTE4LS44NzQtNC40NjggNy43MzMuMzI0LjE5IDEuMTkzLjY4OHptLTEuNDg0IDcwLjIxOS4xODcuMzI2IDQuMjQ1IDcuNDMgMS41MjEtLjg2OC00LjQzNC03Ljc1Ny0xLjUxOS44Njl6bTE1LjEzLTE0LjUzNC4zMjIuMTg4IDcuNDA4IDQuMjg0Ljg4MS0xLjUxNy03LjczNy00LjQ3MS0uODc0IDEuNTE2eiIvPgogIDxwYXRoIGQ9Ik02MC42MTMgMzAuODc2di04LjIyOGgtLjY0OGMtLjE3NS4zNTQtLjQ3My43MTktLjg5NCAxLjA5Ni0uNDIxLjM3Ni0uOTEzLjY5Ny0xLjQ3Ni45NjF2Ljk3M2MuMzEzLS4xMTYuNjY2LS4yODkgMS4wNTktLjUyLjM5My0uMjMxLjcxMS0uNDYyLjk1My0uNjkzdjYuNDExaDEuMDA2em00LjI3MS0xLjUxMmMuMTcyLS4xODEuNTYtLjUyNCAxLjE2My0xLjAzMS43MjMtLjYxMSAxLjI0LTEuMDkyIDEuNTUxLTEuNDQyLjMxMi0uMzUuNTM0LS42ODQuNjY4LTEgLjEzNS0uMzE3LjIwMS0uNjM5LjIwMS0uOTY3IDAtLjY0NS0uMjI5LTEuMTg1LS42ODgtMS42MjEtLjQ1OC0uNDM2LTEuMDgtLjY1NC0xLjg2Ny0uNjU0LS43NzggMC0xLjM5OC4yMDItMS44NjEuNjA2LS40NjIuNDA1LS43MjkuOTkyLS43OTkgMS43NjRsMS4wMzQuMTA2Yy4wMDMtLjUxNS4xNTEtLjkxNy40NDEtMS4yMDguMjkxLS4yOTEuNjc4LS40MzYgMS4xNjMtLjQzNi40NTggMCAuODMuMTM3IDEuMTE0LjQxMS4yODUuMjc0LjQyOC42MS40MjggMS4wMDkgMCAuMzgtLjE1Ni43ODMtLjQ2OSAxLjIxLS4zMTMuNDI3LS45MTUgMS4wMDUtMS44MDYgMS43MzUtLjU3NC40Ny0xLjAxMy44ODMtMS4zMTYgMS4yNDEtLjMwNC4zNTctLjUyNS43MjEtLjY2MyAxLjA5LS4wODYuMjI0LS4xMjUuNDU3LS4xMTcuNjk5aDUuNDE3di0uOTY3aC00LjAxOWMuMTEyLS4xODIuMjU0LS4zNjQuNDI1LS41NDV6bTE3LjE1My4zOTJ2Ni40MTFoMS4wMDZ2LTguMjI4aC0uNjQ4Yy0uMTc2LjM1NC0uNDc0LjcxOS0uODk1IDEuMDk2LS40MjIuMzc2LS45MTMuNjk3LTEuNDc2Ljk2MXYuOTczYy4zMTMtLjExNi42NjYtLjI4OSAxLjA2LS41Mi4zOTMtLjIzMS43MTEtLjQ2Mi45NTMtLjY5M3ptMTQuMjYyIDE4LjA5aC00LjAyYy4xMTItLjE4My4yNTQtLjM2NC40MjYtLjU0NS4xNzEtLjE4MS41NTktLjUyNCAxLjE2Mi0xLjAzMS43MjMtLjYxMSAxLjI0LTEuMDkyIDEuNTUxLTEuNDQycy41MzQtLjY4NC42NjgtMWMuMTM1LS4zMTcuMjAxLS42MzkuMjAxLS45NjcgMC0uNjQ1LS4yMjktMS4xODUtLjY4OC0xLjYyMS0uNDU4LS40MzYtMS4wOC0uNjU0LTEuODY3LS42NTQtLjc3OCAwLTEuMzk4LjIwMi0xLjg2MS42MDYtLjQ2MS40MDUtLjcyOS45OTItLjc5OSAxLjc2NGwxLjAzNC4xMDZjLjAwMy0uNTE1LjE1MS0uOTE3LjQ0MS0xLjIwOHMuNjc5LS40MzYgMS4xNjMtLjQzNmMuNDU4IDAgLjgzLjEzNyAxLjExNS40MTEuMjg1LjI3NC40MjguNjEuNDI4IDEuMDA5IDAgLjM4LS4xNTcuNzgzLS40NzEgMS4yMS0uMzEzLjQyNy0uOTE0IDEuMDA1LTEuODA1IDEuNzM1LS41NzQuNDctMS4wMTMuODgzLTEuMzE2IDEuMjQxLS4zMDQuMzU3LS41MjUuNzIxLS42NjIgMS4wOS0uMDg2LjIyNC0uMTI1LjQ1Ny0uMTE3LjY5OWg1LjQxNnYtLjk2N3ptMy45MjIgMTQuMjQ3Yy0uMjctLjM1Mi0uNjQ2LS41ODQtMS4xMy0uNjk2LjM3Mi0uMTcxLjY1NC0uNDAyLjg0NS0uNjkzLjE4OS0uMjkxLjI4NS0uNjEzLjI4NS0uOTY3IDAtLjM3My0uMS0uNzI1LS4zLTEuMDU3LS4xOTktLjMzMi0uNDg3LS41OTMtLjg2My0uNzg1cy0uNzg4LS4yODgtMS4yMzUtLjI4OGMtLjY0OCAwLTEuMTkuMTg2LTEuNjI3LjU1Ni0uNDM2LjM3MS0uNzE1Ljg5NC0uODM4IDEuNTY4bDEuMDA2LjE3OWMuMDc0LS40OTIuMjQyLS44NjEuNTAzLTEuMTA3cy41ODctLjM2OS45NzktLjM2OWMuMzk1IDAgLjcxOC4xMjEuOTY3LjM2M3MuMzc0LjU0OC4zNzQuOTE3YzAgLjQ2Ni0uMTcxLjgxMS0uNTE0IDEuMDM0cy0uNzI5LjMzNS0xLjE1Ny4zMzVjLS4wNDEgMC0uMDk1LS4wMDQtLjE2Mi0uMDExbC0uMTEyLjg4M2MuMjgzLS4wNzQuNTIxLS4xMTEuNzExLS4xMTEuNDY1IDAgLjg1LjE1IDEuMTUuNDUuMzAzLjMuNDUzLjY4MS40NTMgMS4xNDMgMCAuNDg0LS4xNjIuODkxLS40ODggMS4yMTlzLS43MjcuNDkyLTEuMTk5LjQ5MmMtLjM5OCAwLS43MzctLjEyNy0xLjAxNS0uMzc4LS4yNzgtLjI1MS0uNDc1LS42NjItLjU5LTEuMjMybC0xLjAwNy4xMzRjLjA2OC42ODIuMzM5IDEuMjM4LjgxNCAxLjY2Ni40NzUuNDI5IDEuMDcyLjY0MyAxLjc5MS42NDMuNzk3IDAgMS40NTctLjI0OCAxLjk3OS0uNzQ2LjUyMS0uNDk3Ljc4My0xLjEwNC43ODMtMS44MTktLjAwMS0uNTMtLjEzNi0uOTcxLS40MDMtMS4zMjN6bS00LjgyNSAxNC4wMDRoLS44MjJsLTMuNzM4IDUuMzExdi45MjJoMy41NTV2MS45NjJoMS4wMDZWODIuMzNoMS4xMDZ2LS45MjJoLTEuMTA2di01LjMxMXptLTEuMDA2IDUuMzFoLTIuNTY2bDIuNTY2LTMuNjk1djMuNjk1em0tMTIuNzg2IDkuMDM0Yy0uNTQgMC0xLjA1Ny4xNzItMS41NDguNTE1bC40NDEtMi4yMDJoMy4yNzF2LS45NjFoLTQuMDc1bC0uNzk0IDQuMjA5Ljk0NS4xMjNjLjE0OC0uMjM1LjM1NC0uNDI2LjYxNC0uNTc0LjI2MS0uMTQ2LjU1NC0uMjIxLjg3OC0uMjIxLjUyMSAwIC45NDMuMTY2IDEuMjY2LjQ5OHMuNDgzLjc4NS40ODMgMS4zNThjMCAuNjA0LS4xNjcgMS4wODgtLjUwMyAxLjQ1M3MtLjc0NS41NDgtMS4yMjkuNTQ4Yy0uNDAyIDAtLjc0Ni0uMTI5LTEuMDMxLS4zODktLjI4NS0uMjU5LS40NjctLjY0Ni0uNTQ1LTEuMTZsLTEuMDU3LjA5Yy4wNjcuNjg5LjMzNyAxLjI0Mi44MDggMS42Ni40NzIuNDE4IDEuMDguNjI2IDEuODI1LjYyNi45MDkgMCAxLjYyNi0uMzMxIDIuMTUxLS45OTUuNDMzLS41NC42NDgtMS4xODIuNjQ4LTEuOTIyIDAtLjc3OS0uMjQ2LTEuNDE2LS43MzctMS45MTItLjQ5Mi0uNDk2LTEuMDk2LS43NDQtMS44MTEtLjc0NHptLTE4Ljk1OSA0LjI4NGMtLjM4NCAwLS43NTEuMDktMS4xMDEuMjY4LS4zNTEuMTgtLjY0Ni40NTMtLjg4OS44MjIuMDA3LS44Mi4xMDItMS40NTEuMjg1LTEuODk1cy40MzMtLjc4MS43NDktMS4wMTJjLjI0Mi0uMTguNTIzLS4yNjkuODQ0LS4yNjkuMzk4IDAgLjczNC4xNDQgMS4wMDYuNDMxLjE2NC4xNzguMjkxLjQ2NS4zOC44NmwxLjAwMS0uMDc4Yy0uMDgyLS42MzgtLjMzLTEuMTM3LS43NDEtMS40OTgtLjQxMi0uMzYxLS45NC0uNTQyLTEuNTg0LS41NDItLjg2NSAwLTEuNTUyLjMxMy0yLjA2My45MzktLjU4NS43MTktLjg3OCAxLjg3LS44NzggMy40NTMgMCAxLjQxNi4yNjUgMi40MzQuNzk0IDMuMDVzMS4yMTMuOTI1IDIuMDUxLjkyNWMuNDkyIDAgLjkzMi0uMTE3IDEuMzE5LS4zNTIuMzg3LS4yMzUuNjkxLS41NzMuOTE0LTEuMDE2LjIyMS0uNDQxLjMzMi0uOTE5LjMzMi0xLjQzNCAwLS43ODItLjIzNS0xLjQyLS43MDctMS45MTQtLjQ3MS0uNDkyLTEuMDQyLS43MzgtMS43MTItLjczOHptLjkzMyA0LjExM2MtLjMwNi4zNDQtLjY3MS41MTUtMS4wOTYuNTE1LS4yOTEgMC0uNTY4LS4wODMtLjgzMy0uMjQ5cy0uNDctLjQwNi0uNjE4LS43MjRjLS4xNDctLjMxNi0uMjIxLS42NDgtLjIyMS0uOTk1IDAtLjUyOS4xNTgtLjk1Ny40NzUtMS4yODMuMzE3LS4zMjUuNzAzLS40ODggMS4xNTctLjQ4OC40NTggMCAuODM4LjE2MyAxLjE0LjQ4OC4zMDIuMzI2LjQ1My43NzMuNDUzIDEuMzQuMDAxLjU4Ny0uMTUyIDEuMDU0LS40NTcgMS4zOTZ6TTQyLjM0OSA4OC4wMDRoNC4wMTRjLS41MTEuNTgyLS45OTIgMS4yOTYtMS40NDUgMi4xNDQtLjQ1My44NDgtLjggMS43MjgtMS4wNDIgMi42NDItLjI0My45MTItLjM2OSAxLjY5MS0uMzggMi4zMzZoMS4wMzRjLjA1Ni0uODE2LjE4NS0xLjU2Ni4zODYtMi4yNTIuMjc5LS45NzMuNjc1LTEuOTIgMS4xODgtMi44NC41MTMtLjkyIDEuMDI5LTEuNjU4IDEuNTUxLTIuMjE0di0uNzgySDQyLjM1di45NjZ6bS04Ljk1MS0xMC4wNTNjLjQwNi0uMTUyLjcwOS0uMzY5LjkwOC0uNjVzLjI5OS0uNjEyLjI5OS0uOTkyYzAtLjU5Ni0uMjE4LTEuMTAyLS42NTQtMS41MThzLTEuMDEyLS42MjMtMS43MjctLjYyM2MtLjcxMiAwLTEuMjgyLjIwMy0xLjcxLjYwOXMtLjY0My45MDctLjY0MyAxLjUwNGMwIC4zOTUuMTAxLjczMy4zMDIgMS4wMTdzLjUxLjUwMS45MjguNjUzYy0uNS4xMzEtLjg4NC4zNzYtMS4xNTQuNzM2LS4yNy4zNTktLjQwNS44MDUtLjQwNSAxLjMzOCAwIC43MTYuMjQ4IDEuMzEzLjc0NCAxLjc5MS40OTYuNDc5IDEuMTQ3LjcxOSAxLjk1Ni43MTlzMS40NjEtLjIzOCAxLjk1Ny0uNzE1Yy40OTYtLjQ3OC43NDMtMS4wNjYuNzQzLTEuNzY3IDAtLjUwNy0uMTMxLS45NDItLjM5NC0xLjMwOHMtLjY0Ny0uNjMtMS4xNS0uNzk0ek0zMC45IDc2LjI0N2MwLS4zNDMuMTI2LS42MzguMzgtLjg4NHMuNTcyLS4zNjguOTU2LS4zNjhjLjM4IDAgLjY5OC4xMjYuOTUzLjM3N3MuMzgzLjU2Mi4zODMuOTMxYzAgLjM1NC0uMTI0LjY1My0uMzcyLjg5N3MtLjU2NS4zNjYtLjk1My4zNjZjLS4zOTkgMC0uNzIzLS4xMjMtLjk3My0uMzY5cy0uMzc0LS41NjItLjM3NC0uOTV6bTIuNTQzIDQuOTk3Yy0uMzEzLjMwOS0uNzA5LjQ2NC0xLjE5LjQ2NC0uMzA5IDAtLjU5OC0uMDczLS44NjYtLjIyMS0uMjY5LS4xNDctLjQ3MS0uMzU0LS42MDYtLjYyNC0uMTM2LS4yNjgtLjIwNC0uNTQ1LS4yMDQtLjgzMiAwLS40Ny4xNTUtLjg2MS40NjctMS4xNzQuMzExLS4zMTMuNzAzLS40NyAxLjE3Ni0uNDcuNDg0IDAgLjg4OC4xNTkgMS4yMS40NzZzLjQ4My43MTcuNDgzIDEuMjAxYzAgLjQ3Ny0uMTU3Ljg3MS0uNDcgMS4xOHpNMzAuNjcgNjEuNTY5YzAtMS4wMDYtLjExNC0xLjc3NS0uMzQ0LTIuMzA2LS4yMjktLjUzMS0uNTY0LS45NC0xLjAwNi0xLjIyNy0uNDQyLS4yODctLjkyOS0uNDMxLTEuNDYyLS40MzEtLjczOCAwLTEuMzUyLjI1My0xLjg0Mi43NnMtLjczNSAxLjE3Ni0uNzM1IDIuMDA3YzAgLjgwNS4yMzUgMS40NTMuNzA0IDEuOTQ1LjQ3LjQ5MiAxLjA0My43MzggMS43MjIuNzM4LjQwNiAwIC43ODQtLjEgMS4xMzItLjI5OS4zNDktLjE5OS42MjQtLjQ1OS44MjUtLjc4LjAwMy4wODkuMDA1LjE1Ny4wMDUuMjAxIDAgLjQxNy0uMDUuODI4LS4xNTEgMS4yM3MtLjIyNi43MjItLjM3NS45NThjLS4xNDkuMjM3LS4zNC40MjYtLjU3My41NjctLjIzMy4xNDMtLjUwNC4yMTMtLjgxMy4yMTMtLjM2MSAwLS42NTgtLjEwMy0uODg5LS4zMDgtLjIzMS0uMjA0LS4zODgtLjUzNS0uNDY5LS45ODlsLS45NjcuMDg5Yy4wODIuNjQ1LjMyNiAxLjE0NS43MzIgMS41LjQwNi4zNTYuOTMuNTM0IDEuNTcuNTM0LjYwNCAwIDEuMTMtLjE2MiAxLjU3OS0uNDg2LjQ0OS0uMzI0Ljc4Ny0uNzk2IDEuMDE1LTEuNDE3LjIyOC0uNjE4LjM0Mi0xLjQ1Mi4zNDItMi40OTl6bS0xLjU2OC4xMDljLS4zLjMyNi0uNjgzLjQ4OS0xLjE0OC40ODktLjQ2MiAwLS44NTEtLjE2My0xLjE2Ni0uNDg5cy0uNDcyLS43NS0uNDcyLTEuMjcxYzAtLjU4Mi4xNjYtMS4wNTUuNDk4LTEuNDIuMzMyLS4zNjUuNzIxLS41NDggMS4xNjgtLjU0OC40MzIgMCAuODAyLjE2OSAxLjEwOS41MDkuMzA4LjMzOS40NjEuNzk3LjQ2MSAxLjM3NXMtLjE1IDEuMDI5LS40NSAxLjM1NXpNMzkuMTE1IDM5LjcyYy0uMjE2LS4zMzMtLjQ5LS41ODgtLjgyMS0uNzY2LS4zMzItLjE3Ny0uNzE4LS4yNjYtMS4xNTctLjI2Ni0uNTk2IDAtMS4wOTEuMTYxLTEuNDg0LjQ4MS0uMzk0LjMyLS42ODkuNzc2LS44ODkgMS4zNjctLjE5OS41OS0uMjk5IDEuMzctLjI5OSAyLjMzOSAwIDEuNTM5LjI3IDIuNjQ5LjgxMSAzLjMzMS40NTEuNTY2IDEuMDcxLjg1IDEuODYxLjg1LjYgMCAxLjA5Ni0uMTYxIDEuNDktLjQ4My4zOTMtLjMyMi42ODgtLjc3OS44ODYtMS4zNy4xOTctLjU5LjI5Ni0xLjM2Ny4yOTYtMi4zMjggMC0uODEzLS4wNjItMS40NTgtLjE4NS0xLjkzN3MtLjI5Mi0uODg0LS41MDktMS4yMTh6bS0uODEzIDUuODM5Yy0uMzE1LjQ0Ny0uNzA0LjY3MS0xLjE2Ni42NzFzLS44NTEtLjIyMy0xLjE2Ni0uNjY4LS40NzItMS4zNC0uNDcyLTIuNjg2LjE3My0yLjI2OC41Mi0yLjc2N2MuMjc2LS4zOTEuNjQ1LS41ODcgMS4xMDctLjU4Ny40NyAwIC44NjIuMjIyIDEuMTc3LjY2NS4zMTQuNDQ0LjQ3MiAxLjM0LjQ3MiAyLjY4OSAwIDEuMzQxLS4xNTcgMi4yMzUtLjQ3MiAyLjY4M3ptLTcuNDItNS4wNTN2Ni40MTFoMS4wMDZ2LTguMjI4aC0uNjQ4Yy0uMTc1LjM1NC0uNDczLjcxOS0uODk0IDEuMDk2LS40MjEuMzc2LS45MTMuNjk3LTEuNDc2Ljk2MXYuOTczYy4zMTMtLjExNi42NjYtLjI4OSAxLjA1OS0uNTIuMzkzLS4yMzEuNzExLS40NjIuOTUzLS42OTN6bTEzLjM5NC0xMS4yNXY2LjQxMWgxLjAwNnYtOC4yMjhoLS42NDhjLS4xNzUuMzU0LS40NzMuNzE5LS44OTQgMS4wOTYtLjQyMS4zNzYtLjkxMy42OTctMS40NzYuOTYxdi45NzNjLjMxMy0uMTE2LjY2Ni0uMjg5IDEuMDU5LS41Mi4zOTMtLjIzMS43MTEtLjQ2Mi45NTMtLjY5M3ptNC45OC0uNzIxYy0uNDIxLjM3Ni0uOTEzLjY5Ny0xLjQ3Ni45NjF2Ljk3M2MuMzEzLS4xMTYuNjY2LS4yODkgMS4wNTktLjUyLjM5My0uMjMxLjcxMS0uNDYyLjk1My0uNjkzdjYuNDExaDEuMDA2di04LjIyOGgtLjY0OGMtLjE3NC4zNTQtLjQ3My43MTktLjg5NCAxLjA5NnoiLz4KICA8cGF0aCBmaWxsPSIjRkY4MDY1IiBkPSJNNjIuOTMgNTQuNjIyYy40OTMuOTg4LjA5MiAyLjE4OS0uODk2IDIuNjgzbC0yLjA4OCAxLjA0MmMtLjk4OC40OTMtMi4xODkuMDkyLTIuNjgzLS44OTZsLTUuMzU5LTEwLjczN2MtLjQ5My0uOTg4LS4wOTItMi4xODkuODk2LTIuNjgzbDIuMDg4LTEuMDQyYy45ODgtLjQ5MyAyLjE4OS0uMDkyIDIuNjgzLjg5Nmw1LjM1OSAxMC43Mzd6Ii8+CiAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRkY4MDY1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYwLjM3NSA1Ni4zOTYgODQuMjUgMTA0Ljc1Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhayIgeDE9IjEyNi4yMzgzIiB4Mj0iMTI2LjIzODMiIHkxPSItMjA1LjQyMTkiIHkyPSItMjA3Ljk0MTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk3OTYgLS4yMDA4IC0uMjAwOCAtLjk3OTYgLTExMi4wMjkgLTExMy45ODA0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNTI0YWM5Ii8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4wOTU3IiBzdG9wLWNvbG9yPSIjNTg1NWJjIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4yMzUyIiBzdG9wLWNvbG9yPSIjNWQ2MGFmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4zNjgxIiBzdG9wLWNvbG9yPSIjNWY2NGFiIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii43MjUzIiBzdG9wLWNvbG9yPSIjMTkwYzdmIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FrKSIgZD0iTTY5LjAzMyA1OS45OTRjLjE4Ljg3OS0uMzg3IDEuNzM3LTEuMjY2IDEuOTE4bC0yOC41NiA1Ljg4Yy0uODc5LjE4MS0xLjczOC0uMzg3LTEuOTE4LTEuMjY3LS4xOC0uODc5LjM4Ni0xLjczOCAxLjI2NS0xLjkxOGwyOC41Ni01Ljg3OWMuODgtLjE4IDEuNzQuMzg2IDEuOTE5IDEuMjY2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYWwiIHgxPSItMTEzLjk1NzUiIHgyPSItMTEzLjk1NzUiIHkxPSItMTk4LjY2OTQiIHkyPSItMjAxLjg4NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjY1NTIgLS43NTU1IC0uNzU1NSAtLjY1NTIgLS45Nzc0IC0xNzAuNjU5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzUyNGFjOSIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMDk1NyIgc3RvcC1jb2xvcj0iIzU4NTViYyIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMjM1MiIgc3RvcC1jb2xvcj0iIzVkNjBhZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMzY4MSIgc3RvcC1jb2xvcj0iIzVmNjRhYiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNzI1MyIgc3RvcC1jb2xvcj0iIzE5MGM3ZiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhbCkiIGQ9Ik05My4zNzMgMjYuNjE5Yy40MTcuMzYyLjQ2My45OTMuMTAyIDEuNDFMNjAuMDE3IDY3LjE1MmMtLjM2Mi40MTgtLjk5NC40NjMtMS40MTEuMTAybC0uNzU1LS42NTZjLS40MTctLjM2MS0uNDYzLS45OTItLjEwMS0xLjQxbDMzLjQ1OC0zOS4xMjRjLjM2LS40MTguOTkzLS40NjIgMS40MDktLjEwMWwuNzU2LjY1NnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFtIiB4MT0iMjEwLjAwNTkiIHgyPSIyMTAuMDA1OSIgeTE9Ii0xNTkuOTYwNCIgeTI9Ii0xNjguMTQ3NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzhiYTRkNiIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWIzZWE2Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8Y2lyY2xlIGN4PSI2Mi40MDYiIGN5PSI2MS4yODEiIHI9IjQuNDY5IiBmaWxsPSJ1cmwoI2FtKSIvPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iYW4iIGN4PSIyMDguOTY0OCIgY3k9Ii0xNjAuMjUyIiByPSI3LjU2NTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjA1MTUiIHN0b3AtY29sb3I9IiNmNmZhZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjEzNjEiIHN0b3AtY29sb3I9IiNkZWYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjI0MzIiIHN0b3AtY29sb3I9IiNiNWQ5ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjM2ODgiIHN0b3AtY29sb3I9IiM3ZGJkZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjUwODEiIHN0b3AtY29sb3I9IiMzNjk5ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjU3MTQiIHN0b3AtY29sb3I9IiMxNDg3ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjgxMzIiIHN0b3AtY29sb3I9IiMwZjg1ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjk2NyIgc3RvcC1jb2xvcj0iIzMzOTdmZiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjIuMzY1IiBjeT0iNjEuMjkyIiByPSIzLjc1IiBmaWxsPSJ1cmwoI2FuKSIvPgo8L3N2Zz4=\"\nLABEL oc.keyword=\"xclock,clock,xclock,time\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xclock.XClock\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nLABEL oc.name=\"xclock\"\nLABEL oc.displayname=\"Xclock\"\nLABEL oc.path=\"/usr/bin/xclock\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xclock\"\nENV APPBIN \"/usr/bin/xclock\"\nENV APP \"/usr/bin/xclock\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xclock/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xclock/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xclock/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xclock/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps x11-utils xbitmaps && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_xedit.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMC45NzMiIHgyPSIzNi45MzciIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTAyIDAgMCAxLjUwMzcgLTMuOTgyNyAtMy4zNDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyYTJjMmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDI0NjQ5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjMxOS4yMSIgeDI9IjY1Ny42NSIgeTE9IjIzNS4xNSIgeTI9IjI2OS40OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTMyMzUgMCAwIC4xMzA3NSAtMzIuMzc5IDEuMDg3MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U1NGMxOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZWMzNTAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYsMCwwLDEuMzI3NiwtNTEwLjY0LC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgeD0iLS4wNDk4OTciIHk9Ii0uMDc1MjMyIiB3aWR0aD0iMS4wOTk4IiBoZWlnaHQ9IjEuMTUwNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MzU1MzYwOCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDU1MzE5IiB5PSItLjA2NTU2MyIgd2lkdGg9IjEuMTEwNiIgaGVpZ2h0PSIxLjEzMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTA2MjkxMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5LDAsMCwxLjQ5OTksLTU4MC44MSwtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5IDAgMCAxLjQ5OTkgLTU4MC44MSAtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPHJlY3QgeD0iNjQuOTY1IiB5PSIyOS43OTMiIHdpZHRoPSIuMDY3NDk1IiBoZWlnaHQ9IjAiIGZpbGw9IiMwMDBjZmYiIG9wYWNpdHk9Ii40MDc0MSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuMjU2MyI+CiAgPHBhdGggZD0ibTEyLjkzNCA1Mi45ODIgMTQuNzI0LTE5LjI3NC0xNS4xNTktMjEuMTkyIDkuNzQzMSAwLjAwODEgMTIuMDc5IDE2LjY2My0xOC4wNiAyMy43OTRoLTMuMzI3em0yOC44MTkgMC4wMTM2OC0xMS45OTUtMTYuNjkyIDE4LjIxMS0yMy44MDVoMy4yNDQ3bC0xNC43ODQgMTkuMzY0IDE1LjA2OCAyMS4xMzJ6Ii8+CiAgPHBhdGggZD0ibTMxLjk5NiAxOS44OTJjLTEuMTcxNCAwLTIuNDIyOSAwLjA4OTYtMy41NDk2IDAuMTk2NDYgMi4wMDcyIDIuNTg2MiAzLjY3MjYgNC43NzYyIDUuNTg5NCA3LjI2MzQtMS4wNzU4LTIuMjg3Mi0zLjI4NjktNC40ODA1LTIuNTIyNS01LjYwODQgMC43NTY2NS0xLjExNjYgMi4xNTA4LTAuOTI4NjIgMi4yNTctMC45Mjg2MiAyLjIzNTEgMCA0LjM4NjcgMC4yNDkzOSA2LjM5ODEgMC43MTA5NWwwLjQ3MTQ4LTAuNjQxNDljLTIuNjgyOC0wLjY4MjI4LTUuNTk2Ny0wLjk5MjIxLTguNjQzOS0wLjk5MjIxem0xMi4xMDYgMi4wODcyLTAuNDM0MjYgMC42MTI4OWM2LjE5NzIgMi4zOTc1IDEwLjM4OSA2Ljk3NjggMTAuMzg5IDEyLjIyNSAwIDcuNzI4MS05LjA4NzYgMTMuOTk4LTIwLjI4NiAxMy45OTgtMTEuMTk5IDAtMjAuMjktNi4yNzAzLTIwLjI5LTEzLjk5OCAxZS02IC00LjIwODUgMi42OTYxLTcuOTg2MiA2Ljk2MDYtMTAuNTU0bC0xLjMxMTEtMS45NzM1Yy02LjY4OTYgMi44MDIyLTExLjEzIDcuNzIwNy0xMS4xMyAxMy4zMiAwIDguNzEyMyAxMC43NSAxNS43OCAyMy45OTYgMTUuNzggMTMuMjQ3IDAgMjQtNy4wNjc1IDI0LTE1Ljc4IDAtNS44MDk2LTQuNzgwNy0xMC44OS0xMS44OTUtMTMuNjMxeiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIHN0cm9rZS13aWR0aD0iMS4yNTYzIj4KICA8cGF0aCBkPSJtMTIuOTM0IDUyLjk4MiAxNC43MjQtMTkuMjc0LTE1LjE1OS0yMS4xOTIgOS43NDMxIDAuMDA4MSAxMi4wNzkgMTYuNjYzLTE4LjA2IDIzLjc5NGgtMy4zMjd6bTI4LjgxOSAwLjAxMzY4LTExLjk5NS0xNi42OTIgMTguMjExLTIzLjgwNWgzLjI0NDdsLTE0Ljc4NCAxOS4zNjQgMTUuMDY4IDIxLjEzMnoiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzEuOTk2IDE5Ljg5MmMtMS4xNzE0IDAtMi40MjI5IDAuMDg5Ni0zLjU0OTYgMC4xOTY0NiAyLjAwNzIgMi41ODYyIDMuNjcyNiA0Ljc3NjIgNS41ODk0IDcuMjYzNC0xLjA3NTgtMi4yODcyLTMuMjg2OS00LjQ4MDUtMi41MjI1LTUuNjA4NCAwLjc1NjY1LTEuMTE2NiAyLjE1MDgtMC45Mjg2MiAyLjI1Ny0wLjkyODYyIDIuMjM1MSAwIDQuMzg2NyAwLjI0OTM5IDYuMzk4MSAwLjcxMDk1bDAuNDcxNDgtMC42NDE0OWMtMi42ODI4LTAuNjgyMjgtNS41OTY3LTAuOTkyMjEtOC42NDM5LTAuOTkyMjF6bTEyLjEwNiAyLjA4NzItMC40MzQyNiAwLjYxMjg5YzYuMTk3MiAyLjM5NzUgMTAuMzg5IDYuOTc2OCAxMC4zODkgMTIuMjI1IDAgNy43MjgxLTkuMDg3NiAxMy45OTgtMjAuMjg2IDEzLjk5OC0xMS4xOTkgMC0yMC4yOS02LjI3MDMtMjAuMjktMTMuOTk4IDFlLTYgLTQuMjA4NSAyLjY5NjEtNy45ODYyIDYuOTYwNi0xMC41NTRsLTEuMzExMS0xLjk3MzVjLTYuNjg5NiAyLjgwMjItMTEuMTMgNy43MjA3LTExLjEzIDEzLjMyIDAgOC43MTIzIDEwLjc1IDE1Ljc4IDIzLjk5NiAxNS43OCAxMy4yNDcgMCAyNC03LjA2NzUgMjQtMTUuNzggMC01LjgwOTYtNC43ODA3LTEwLjg5LTExLjg5NS0xMy42MzF6IiBmaWxsPSJ1cmwoI2EpIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xedit,text,notepad,edit,txt,editor,xedit\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xedit.Xedit\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.18.04\"\nLABEL oc.name=\"xedit\"\nLABEL oc.displayname=\"Xedit\"\nLABEL oc.path=\"/usr/bin/xedit\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/text;\"\nLABEL oc.fileextensions=\"txt;log;md\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xedit\"\nENV APPBIN \"/usr/bin/xedit\"\nENV APP \"/usr/bin/xedit\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xedit/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xedit/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xedit/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xedit/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update xeyes\nLABEL oc.icon=\"circle_xfce4-eyes.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0MSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0N2M0ZTUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDc4YmU1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MzUiIHgxPSIyOS41NjUiIHgyPSIyOS43MjgiIHkxPSIxMS4wNDgiIHkyPSI1My41NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjN2M3YzciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTIwIiB4Mj0iNTIwLjAzIiB5MT0iNDQiIHkyPSI5ODUuODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2MzU2IDAgMCAuMDYzNTYgLS41NDIzNyAtLjU0MjM3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzUzNTM1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzZkNmQ2ZCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4OTEiIHg9Ii0uMTQwMzEiIHk9Ii0uMTQwMzEiIHdpZHRoPSIxLjI4MDYiIGhlaWdodD0iMS4yODA2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjY2NDA5MjUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4OTUiIHg9Ii0uMTc2NTIiIHk9Ii0uMTc2NTIiIHdpZHRoPSIxLjM1MyIgaGVpZ2h0PSIxLjM1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS42NjQwOTI1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyOTA3IiB4PSItLjAyODUzIiB5PSItLjA1NTM5NSIgd2lkdGg9IjEuMDU3MSIgaGVpZ2h0PSIxLjExMDgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzM4Mzc1MzgiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MTEiIHg9Ii0uMDM1ODkzIiB5PSItLjA2OTE3IiB3aWR0aD0iMS4wNzE4IiBoZWlnaHQ9IjEuMTM4MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC4zMzgzNzUzOCIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MjEiIHgxPSIxMC44NzkiIHgyPSIzMy41MDUiIHkxPSIyOC4yNTYiIHkyPSIyOC4yNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5MzUiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTI5IiB4MT0iMjQuOTg5IiB4Mj0iNTMuNDU0IiB5MT0iMzQuMDk1IiB5Mj0iMzQuMDk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTM1Ii8+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudDk0MyIgY3g9IjIyLjE5MiIgY3k9IjI2LjA2NiIgcj0iNC4wMTQzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTQxIi8+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudDk1MSIgY3g9IjQxLjE2OCIgY3k9IjMxLjkwNSIgcj0iNi4yMDM5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTQxIi8+CiA8L2RlZnM+CiA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0MjM3IC0uNTQyMzcpIiBkPSJtOTY5LjcgMzkyYy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTIuNS04Ljc1LTUuMzUtMTcuNi04LjQ1LTI2LjM1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNGgtMC4wMjVxLTMwLjYwMS01Mi4wMS03Ni4zMjUtOTcuNzVjLTkyLjE1LTkyLjE1LTIwMy40NS0xMzguMjUtMzMzLjgtMTM4LjI1cy0yNDEuNiA0Ni4xLTMzMy43NSAxMzguMjUtMTM4LjI1IDIwMy40LTEzOC4yNSAzMzMuNzUgNDYuMSAyNDEuNjUgMTM4LjI1IDMzMy44YzY4LjA1IDY4LjA1IDE0Ni41IDExMC45NSAyMzQuOSAxMjguNjUgMzEuOTUgNi40IDY0Ljc1IDkuNTUgOTguODUgOS41NSAxMzAuMzUgMCAyNDEuNjUtNDYuMDUgMzMzLjgtMTM4LjIgNDguNi00OC42IDg0LjQtMTAyLjUgMTA3LjM1LTE2MS44IDE3LTQzLjk1IDI3LTkwLjggMjkuOTUtMTQwLjc1IDAuNi0xMC4yIDAuOS0yMC42NSAwLjktMzEuMjUgMC00MS43NS00LjctODEuNi0xNC4zLTEyMHoiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY3MiIvPgogPHBhdGggZD0ibTYxLjA5MSAyNC4zNzNjLTAuMDY5OTItMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDQtMC4yMzE5OS0wLjg2NDQxLTAuMTU4OS0wLjU1NjE1LTAuMzQwMDQtMS4xMTg2LTAuNTM3MDgtMS42NzQ4LTAuNDA5OTYtMS4xNi0wLjg5OTM3LTIuMjkxMy0xLjQ3MTQtMy40MS0wLjI0MTUzLTAuNDcwMzQtMC41MDUzLTAuOTUwMjItMC43ODE3OC0xLjQyMzdoLTAuMDAxNnEtMS45NDUtMy4zMDU3LTQuODUxMi02LjIxMjljLTUuODU3LTUuODU3LTEyLjkzMS04Ljc4NzEtMjEuMjE2LTguNzg3MXMtMTUuMzU2IDIuOTMwMS0yMS4yMTMgOC43ODcxLTguNzg3MSAxMi45MjgtOC43ODcxIDIxLjIxMyAyLjkzMDEgMTUuMzU5IDguNzg3MSAyMS4yMTZjNC4zMjUyIDQuMzI1MiA5LjMxMTUgNy4wNTE5IDE0LjkzIDguMTc2OSAyLjAzMDcgMC40MDY3OCA0LjExNTUgMC42MDY5OSA2LjI4MjkgMC42MDY5OSA4LjI4NSAwIDE1LjM1OS0yLjkyNjkgMjEuMjE2LTguNzgzOSAzLjA4OS0zLjA4OSA1LjM2NDQtNi41MTQ4IDYuODIzMS0xMC4yODQgMS4wODA1LTIuNzkzNCAxLjcxNjEtNS43NzEyIDEuOTAzNi04Ljk0NiAwLjAzODE0LTAuNjQ4MzEgMC4wNTcyLTEuMzEyNSAwLjA1NzItMS45ODYyIDAtMi42NTM2LTAuMjk4NzMtNS4xODY1LTAuOTA4OS03LjYyNzF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTYxIi8+CiA8Y2lyY2xlIGN4PSIyMi4xOTIiIGN5PSIyOC45ODYiIHI9IjExLjMxMyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg5NSkiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjguMjU2IiByPSIxMS4zMTMiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPHBhdGggZD0ibTIyLjE5MiAxNi45NDNhMTEuMzEzIDExLjMxMyAwIDAgMC0xMS4zMTMgMTEuMzEzIDExLjMxMyAxMS4zMTMgMCAwIDAgMC4wMTU2OCAwLjQyNzY2IDExLjMxMyAxMS4zMTMgMCAwIDEgMTEuMjk3LTExLjAxMSAxMS4zMTMgMTEuMzEzIDAgMCAxIDExLjI5NyAxMC44ODUgMTEuMzEzIDExLjMxMyAwIDAgMCAwLjAxNTY4LTAuMzAyMjEgMTEuMzEzIDExLjMxMyAwIDAgMC0xMS4zMTMtMTEuMzEzeiIgZmlsbD0iI2ZmZmZmZiIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjkxMSkiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjYuMDY2IiByPSI0LjAxNDMiIGZpbGw9InVybCgjcmFkaWFsR3JhZGllbnQ5NDMpIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjYuMDY2IiByPSIxLjA5NDgiIGZpbGw9IiMwMDAwMDAiIG9wYWNpdHk9Ii43NSIgc3Ryb2tlLXdpZHRoPSIuNzI5ODciLz4KIDxjaXJjbGUgY3g9IjM5LjIyMiIgY3k9IjM0LjgyNSIgcj0iMTQuMjMyIiBmaWx0ZXI9InVybCgjZmlsdGVyODkxKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSIzOS4yMjIiIGN5PSIzNC4wOTUiIHI9IjE0LjIzMiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDkyOSkiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSI0MS4xNjgiIGN5PSIzMS45MDUiIHI9IjYuMjAzOSIgZmlsbD0idXJsKCNyYWRpYWxHcmFkaWVudDk1MSkiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSI0MS4xNjgiIGN5PSIzMS45MDUiIHI9IjEuODI0NyIgZmlsbD0iIzAwMDAwMCIgb3BhY2l0eT0iLjc1IiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPHBhdGggZD0ibTM5LjIyMyAxOS44NjJhMTQuMjMyIDE0LjIzMiAwIDAgMC0xNC4yMzIgMTQuMjMyIDE0LjIzMiAxNC4yMzIgMCAwIDAgMC4wMTU2OCAwLjQyNzY2IDE0LjIzMiAxNC4yMzIgMCAwIDEgMTQuMjE3LTEzLjkzIDE0LjIzMiAxNC4yMzIgMCAwIDEgMTQuMjE3IDEzLjgwNSAxNC4yMzIgMTQuMjMyIDAgMCAwIDAuMDE1NjgtMC4zMDIyMSAxNC4yMzIgMTQuMjMyIDAgMCAwLTE0LjIzMi0xNC4yMzJ6IiBmaWxsPSIjZmZmZmZmIiBmaWx0ZXI9InVybCgjZmlsdGVyOTA3KSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xeyes,eyes\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xeyes.XEyes\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"xeyes\"\nLABEL oc.displayname=\"xeyes\"\nLABEL oc.path=\"/usr/bin/xeyes\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xeyes\"\nENV APPBIN \"/usr/bin/xeyes\"\nENV APP \"/usr/bin/xeyes\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xeyes/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xeyes/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xeyes/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xeyes/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps man-db manpages manpages-posix manpages-dev manpages-posix-dev && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_xorg.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMC45NzMiIHgyPSIzNi45MzciIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTAyIDAgMCAxLjUwMzcgLTMuOTgyNyAtMy4zNDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyYTJjMmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDI0NjQ5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjMxOS4yMSIgeDI9IjY1Ny42NSIgeTE9IjIzNS4xNSIgeTI9IjI2OS40OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTMyMzUgMCAwIC4xMzA3NSAtMzIuMzc5IDEuMDg3MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U1NGMxOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZWMzNTAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYsMCwwLDEuMzI3NiwtNTEwLjY0LC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgeD0iLS4wNDk4OTciIHk9Ii0uMDc1MjMyIiB3aWR0aD0iMS4wOTk4IiBoZWlnaHQ9IjEuMTUwNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MzU1MzYwOCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDU1MzE5IiB5PSItLjA2NTU2MyIgd2lkdGg9IjEuMTEwNiIgaGVpZ2h0PSIxLjEzMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTA2MjkxMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5LDAsMCwxLjQ5OTksLTU4MC44MSwtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5IDAgMCAxLjQ5OTkgLTU4MC44MSAtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPHJlY3QgeD0iNjQuOTY1IiB5PSIyOS43OTMiIHdpZHRoPSIuMDY3NDk1IiBoZWlnaHQ9IjAiIGZpbGw9IiMwMDBjZmYiIG9wYWNpdHk9Ii40MDc0MSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuMjU2MyI+CiAgPHBhdGggZD0ibTEyLjkzNCA1Mi45ODIgMTQuNzI0LTE5LjI3NC0xNS4xNTktMjEuMTkyIDkuNzQzMSAwLjAwODEgMTIuMDc5IDE2LjY2My0xOC4wNiAyMy43OTRoLTMuMzI3em0yOC44MTkgMC4wMTM2OC0xMS45OTUtMTYuNjkyIDE4LjIxMS0yMy44MDVoMy4yNDQ3bC0xNC43ODQgMTkuMzY0IDE1LjA2OCAyMS4xMzJ6Ii8+CiAgPHBhdGggZD0ibTMxLjk5NiAxOS44OTJjLTEuMTcxNCAwLTIuNDIyOSAwLjA4OTYtMy41NDk2IDAuMTk2NDYgMi4wMDcyIDIuNTg2MiAzLjY3MjYgNC43NzYyIDUuNTg5NCA3LjI2MzQtMS4wNzU4LTIuMjg3Mi0zLjI4NjktNC40ODA1LTIuNTIyNS01LjYwODQgMC43NTY2NS0xLjExNjYgMi4xNTA4LTAuOTI4NjIgMi4yNTctMC45Mjg2MiAyLjIzNTEgMCA0LjM4NjcgMC4yNDkzOSA2LjM5ODEgMC43MTA5NWwwLjQ3MTQ4LTAuNjQxNDljLTIuNjgyOC0wLjY4MjI4LTUuNTk2Ny0wLjk5MjIxLTguNjQzOS0wLjk5MjIxem0xMi4xMDYgMi4wODcyLTAuNDM0MjYgMC42MTI4OWM2LjE5NzIgMi4zOTc1IDEwLjM4OSA2Ljk3NjggMTAuMzg5IDEyLjIyNSAwIDcuNzI4MS05LjA4NzYgMTMuOTk4LTIwLjI4NiAxMy45OTgtMTEuMTk5IDAtMjAuMjktNi4yNzAzLTIwLjI5LTEzLjk5OCAxZS02IC00LjIwODUgMi42OTYxLTcuOTg2MiA2Ljk2MDYtMTAuNTU0bC0xLjMxMTEtMS45NzM1Yy02LjY4OTYgMi44MDIyLTExLjEzIDcuNzIwNy0xMS4xMyAxMy4zMiAwIDguNzEyMyAxMC43NSAxNS43OCAyMy45OTYgMTUuNzggMTMuMjQ3IDAgMjQtNy4wNjc1IDI0LTE1Ljc4IDAtNS44MDk2LTQuNzgwNy0xMC44OS0xMS44OTUtMTMuNjMxeiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIHN0cm9rZS13aWR0aD0iMS4yNTYzIj4KICA8cGF0aCBkPSJtMTIuOTM0IDUyLjk4MiAxNC43MjQtMTkuMjc0LTE1LjE1OS0yMS4xOTIgOS43NDMxIDAuMDA4MSAxMi4wNzkgMTYuNjYzLTE4LjA2IDIzLjc5NGgtMy4zMjd6bTI4LjgxOSAwLjAxMzY4LTExLjk5NS0xNi42OTIgMTguMjExLTIzLjgwNWgzLjI0NDdsLTE0Ljc4NCAxOS4zNjQgMTUuMDY4IDIxLjEzMnoiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzEuOTk2IDE5Ljg5MmMtMS4xNzE0IDAtMi40MjI5IDAuMDg5Ni0zLjU0OTYgMC4xOTY0NiAyLjAwNzIgMi41ODYyIDMuNjcyNiA0Ljc3NjIgNS41ODk0IDcuMjYzNC0xLjA3NTgtMi4yODcyLTMuMjg2OS00LjQ4MDUtMi41MjI1LTUuNjA4NCAwLjc1NjY1LTEuMTE2NiAyLjE1MDgtMC45Mjg2MiAyLjI1Ny0wLjkyODYyIDIuMjM1MSAwIDQuMzg2NyAwLjI0OTM5IDYuMzk4MSAwLjcxMDk1bDAuNDcxNDgtMC42NDE0OWMtMi42ODI4LTAuNjgyMjgtNS41OTY3LTAuOTkyMjEtOC42NDM5LTAuOTkyMjF6bTEyLjEwNiAyLjA4NzItMC40MzQyNiAwLjYxMjg5YzYuMTk3MiAyLjM5NzUgMTAuMzg5IDYuOTc2OCAxMC4zODkgMTIuMjI1IDAgNy43MjgxLTkuMDg3NiAxMy45OTgtMjAuMjg2IDEzLjk5OC0xMS4xOTkgMC0yMC4yOS02LjI3MDMtMjAuMjktMTMuOTk4IDFlLTYgLTQuMjA4NSAyLjY5NjEtNy45ODYyIDYuOTYwNi0xMC41NTRsLTEuMzExMS0xLjk3MzVjLTYuNjg5NiAyLjgwMjItMTEuMTMgNy43MjA3LTExLjEzIDEzLjMyIDAgOC43MTIzIDEwLjc1IDE1Ljc4IDIzLjk5NiAxNS43OCAxMy4yNDcgMCAyNC03LjA2NzUgMjQtMTUuNzggMC01LjgwOTYtNC43ODA3LTEwLjg5LTExLjg5NS0xMy42MzF6IiBmaWxsPSJ1cmwoI2EpIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xman,man,xman,help\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"topBox.Xman\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.18.04\"\nLABEL oc.name=\"xman\"\nLABEL oc.displayname=\"Xman\"\nLABEL oc.path=\"/usr/bin/xman\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-troff;application/x-troff-man;\"\nLABEL oc.fileextensions=\"man;roff\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xman\"\nENV APPBIN \"/usr/bin/xman\"\nENV APP \"/usr/bin/xman\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xman/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xman/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xman/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xman/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.xpad /composer/init.d/init.xpad\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends xpad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"xpad.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIFNvZGlwb2RpICgiaHR0cDovL3d3dy5zb2RpcG9kaS5jb20vIikgLS0+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIGlkPSJzdmcxMTQiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIHdpZHRoPSI3NTAiCiAgIGhlaWdodD0iNzUwIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9taWtlL0NvZGUveHBhZC9pbWFnZXMvaGljb2xvci9zY2FsYWJsZS9hcHBzLyIKICAgc29kaXBvZGk6ZG9jbmFtZT0ieHBhZC5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIzIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTE2Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA0NjguNzUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iOTM3LjUgOiA0NjguNzUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjQ2OC43NSA6IDMxMi41IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVkZDg4O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDYyMSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY2NTUwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MjIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTciPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZlZTk5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDYxOCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZGQ4ODtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MTkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjciPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2NjZDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEyOCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY1NjcwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMjkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMTkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZjMyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEyMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Q3ZDUwYTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjIiCiAgICAgICB4MT0iNi44NjM1ODg4ZS0wOSIKICAgICAgIHkxPSI4LjAwNzgzNzllLTA5IgogICAgICAgeDI9IjEiCiAgICAgICB5Mj0iOC4wMDc4Mzc5ZS0wOSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjE3IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTI0IgogICAgICAgY3g9IjAuMTEyMTg4MDkiCiAgICAgICBjeT0iLTAuMjA4MTMwOTMiCiAgICAgICBmeD0iMC4xMTIxODgwOSIKICAgICAgIGZ5PSItMC4yMDgxMzA5MyIKICAgICAgIHI9IjEuNTc0MDgiCiAgICAgICBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2MjAiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMjYiCiAgICAgICBjeD0iMS4yMjQ0OCIKICAgICAgIGN5PSIwLjExNjk3NjU5IgogICAgICAgZng9IjEuMjI0NDgiCiAgICAgICBmeT0iMC4xMTY5NzY1OSIKICAgICAgIHI9IjEuNDk2ODciCiAgICAgICBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjciCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ2MTYiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDYyMCIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI0MDIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIgogICAgICAgY3g9IjU4Mi44MDUyNCIKICAgICAgIGN5PSIxOTMuMDU0NCIKICAgICAgIGZ4PSI1ODIuODA1MjQiCiAgICAgICBmeT0iMTkzLjA1NDQiCiAgICAgICByPSI1ODcuNjQwMzgiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ic2NhbGUoMC45MzcwMTk4LDEuMDY3MjEzMykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDYxNyIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI0MDQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIgogICAgICAgY3g9IjE5Ni40Njk1NiIKICAgICAgIGN5PSItMzYuODYzNTg2IgogICAgICAgZng9IjE5Ni40Njk1NiIKICAgICAgIGZ5PSItMzYuODYzNTg2IgogICAgICAgcj0iMTEzMi45ODA1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuMDAyMjkzNiwwLjk5NzcxMTYpIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuNDkyOCIKICAgICBpbmtzY2FwZTpjeD0iNDY4Ljc1IgogICAgIGlua3NjYXBlOmN5PSI0MTkuODYyODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI2NDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjgwIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNiIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxMTQiIC8+CiAgPGcKICAgICBpZD0iZzIzOTgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjU0MTY2LDAuMjYwNzExNywtMC4yNjA3MTE3LDAuOTY1NDE2Niw1NS41NzEwNywtMjUxLjkyMDE1KSI+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC42NjMwMDIsLTAuMjE2MzUzLDAuMTg3NTksMC41NzQ4NTQsODEuNTUyNiw2MTkuMjY3KSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgIGlkPSJwYXRoMTI1IgogICAgICAgZD0iTSA5NS42NjkzLDE1Ny4wMjEgTCA0NjMuNTI0LDU3NS45ODcgTCA0NjEuODUyLDE1OC45NSBMIDk1LjY2OTMsMTU3LjAyMSB6IgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0MDIpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoxcHQiIC8+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NTgzNjIsLTAuMjg1NTU2LDAuMjg1NTU2LDAuOTU4MzYyLC0xMjAuNDkyLDIwNi4xNzQpIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgogICAgICAgaWQ9InBhdGgxMTgiCiAgICAgICBkPSJNIDEyNS4zNiwxMjIuMDYgTCAxMjUuMzYsNDcxLjc0OCBDIDEyNS4zNiw1ODguMzExIDI0OC44OTQsNjEwLjE3NSAzNzcuNTUyLDU2OC4zODkgQyAzMjEuNDE1LDY1MS4yNjYgMzU5LjU4NSw4MjEuNDM2IDQ3Ni42OTcsODIxLjQzNiBMIDgyOC4wMzQsODIxLjQzNiBMIDgyOC4wMzQsMTIyLjA2IEwgMTI1LjM2LDEyMi4wNiB6IgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0MDQpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxOC43NTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xpad,xpad, note, sticky, postit\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"xpad.desktop\"\nLABEL oc.launch=\"xpad.xpad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"xpad\"\nLABEL oc.displayname=\"Xpad\"\nLABEL oc.path=\"/usr/bin/xpad\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xpad\"\nENV APPBIN \"/usr/bin/xpad\"\nENV APP \"/usr/bin/xpad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xpad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xpad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xpad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xpad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update xterm sudo\nLABEL oc.icon=\"circle_xterm.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iSXRlcm0iIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8bWV0YWRhdGE+CiAgPHJkZjpSREY+CiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPgogICAgPGRjOnRpdGxlLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJlIiB4PSItLjA0MjY1MSIgeT0iLS4wMzExNDQiIHdpZHRoPSIxLjA4NTMiIGhlaWdodD0iMS4wNjIzIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0LjkzMTA4OTEiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSItNTA2LjQ1IiB4Mj0iLTUwNi40NSIgeTE9Ii0xOS4xMDEiIHkyPSIxMDEzLjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA1ODgyNCAwIDAgLjA1ODgyNCA2MS43OTEgMy4xMjM2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzMzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIuNTA3NjkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzRhNGE0YSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MDAwMDAwNiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4NjYiIHgxPSIyNC4zOTYiIHgyPSIyNC4zOTYiIHkxPSIzMy43NzUiIHkyPSIyMi45NDkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzU4ZmYwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNhMGZmMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDg2OCIgeDE9IjQyLjQzNCIgeDI9IjM4LjU5OSIgeTE9Ii0zMy4wMzMiIHkyPSItMzMuMDMzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1OGZmMDAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjY2YwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPG1hc2s+CiAgPGcgaWQ9ImciPgogICA8cGF0aCBkPSJtOTY5Ljc1IDM5Mi4wNWMtMS4xLTQuMzUtMi4zNS05LTMuNjUtMTMuNi0xLTMuNC0yLTYuODUtMy4xNS0xMC41LTEuNi01LjE1LTMuNC0xMC41LTUuMy0xNS44NS02LjQ1LTE4LjI1LTE0LjE1LTM2LjA1LTIzLjE1LTUzLjY1LTMuOC03LjQtNy45NS0xNC45NS0xMi4zLTIyLjQtMjAuMy0zNC41LTQ1LjgtNjcuMi03Ni4zNS05Ny43NS03Mi42LTcyLjYtMTU3LjE1LTExNi42NS0yNTMuNjUtMTMyLjA1LTE2LjI1LTIuNi0zMi44LTQuNC01MC4wNS01LjM1LTkuNy0wLjU1LTE5Ljg1LTAuODUtMzAuMS0wLjg1LTkuMzUgMC0xOC42IDAuMjUtMjcuOSAwLjc1LTExOC4zNSA2LjEtMjIwLjMgNTEuOTUtMzA1Ljg1IDEzNy41cS0xMzguMjUgMTM4LjI1LTEzOC4yNSAzMzMuNzVjMCAxMzAuMzUgNDYuMSAyNDEuNjUgMTM4LjI1IDMzMy44IDU2LjcgNTYuNjUgMTIwLjU1IDk1LjkgMTkxLjEgMTE3LjU1IDM2Ljc1IDExLjI1IDc0LjggMTcuODUgMTE0Ljc1IDE5Ljk1aDAuNGM4LjUgMC40NSAxNi42IDAuNyAyNC41IDAuN2gzYzEwLjMgMCAyMC41LTAuMyAzMC4xLTAuOCAyLjUtMC4xNSA0Ljc1LTAuMyA2Ljk1LTAuNDUgMjAuMi0xLjQ1IDM5LjktNC4wNSA1OC43LTcuNyA3Ljk1LTEuNTUgMTUuOC0zLjMgMjMuNC01LjE1IDgwLjgtMjAuMyAxNTIuMTUtNjEuNiAyMTQuNjUtMTI0LjEgNDguNi00OC42IDg0LjQtMTAyLjUgMTA3LjM1LTE2MS44IDE4LjQ1LTQ3LjY1IDI4LjY1LTk4LjggMzAuNTUtMTUzLjUgMC4yLTYuMDUgMC4zLTEyLjI1IDAuMy0xOC41di0zYy0wLjItNDAuNjUtNC45NS03OS41LTE0LjMtMTE3eiIgZmlsbD0iI2ZmZiIvPgogIDwvZz4KIDwvbWFzaz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9InVybCgjYikiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiLz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM4MyAwIDAgLjA2MzgzIC0uMDY2NDkyIC0xLjIyNjEpIiBkPSJtMzUwLjg2IDM4OC43NGMtNC45IDAtOS4wOTk2IDEuNzUtMTIuNiA1LjI1LTMuNDUgMy40NS01LjIwMTIgNy42NTA4LTUuMjAxMiAxMi41NTFzMS43NTEyIDkuMTAwOCA1LjIwMTIgMTIuNTUxbDU0LjQ0OSA1NC40NDktNTQuNCA1NC40Yy0zLjUgMy41LTUuMjQ4OCA3LjY5OTYtNS4yOTg4IDEyLjYgMC4wNSA0LjkgMS44IDkuMTAwOCA1LjI1IDEyLjU1MSAzLjUgMy40NSA3LjY5ODggNS4yIDEyLjU0OSA1LjI1IDQuOTUgMCA5LjE1MDQtMS43NSAxMi42NS01LjI1bDYwLjUtNjAuNTUxYzEyLjctMTIuNjUgMTIuNy0yNS4zNTEgMC0zOC4wNTFsLTYwLjU1MS02MC41NDljLTMuNDY2Ny0zLjQ2NjctNy42NDg4LTUuMjAxMi0xMi41NDktNS4yMDEyeiIgZmlsdGVyPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjE1LjY2NyIvPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMCAuMDYzODMgLS4wNjM4MyAwIDY1LjM0NyAtMS4wNzEpIiB4PSI2MzcuNzgiIHk9IjMxNC43OCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjM4MCIgcng9IjIwIiBmaWx0ZXI9InVybCgjZSkiIG9wYWNpdHk9Ii41IiBzdHJva2Utd2lkdGg9IjE1LjY2NyIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxwYXRoIGQ9Im0yMi4zMjkgMjIuOTQ5Yy0wLjMxMjc3IDAtMC41ODA4MiAwLjExMTctMC44MDQyNiAwLjMzNTEtMC4yMjAyMSAwLjIyMDIxLTAuMzMxOTkgMC40ODgzNS0wLjMzMTk5IDAuODAxMTNzMC4xMTE3OCAwLjU4MDkgMC4zMzE5OSAwLjgwMTEzbDMuNDc1NSAzLjQ3NTUtMy40NzIzIDMuNDcyM2MtMC4yMjM0IDAuMjIzNC0wLjMzNTAzIDAuNDkxNDYtMC4zMzgyMiAwLjgwNDI1IDAuMDAzMiAwLjMxMjc3IDAuMTE0ODkgMC41ODA5IDAuMzM1MTEgMC44MDExMyAwLjIyMzQgMC4yMjAyMSAwLjQ5MTQxIDAuMzMxOTEgMC44MDEgMC4zMzUxMSAwLjMxNTk2IDAgMC41ODQwNy0wLjExMTcxIDAuODA3NDUtMC4zMzUxMWwzLjg2MTctMy44NjVjMC44MTA2NC0wLjgwNzQ1IDAuODEwNjQtMS42MTgyIDAtMi40Mjg4bC0zLjg2NS0zLjg2NDhjLTAuMjIxMjgtMC4yMjEyNy0wLjQ4ODIyLTAuMzMxOTktMC44MDEtMC4zMzE5OXoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4NjYpIi8+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIHg9IjM5IiB5PSItNDUuMjU1IiB3aWR0aD0iMi41NTMyIiBoZWlnaHQ9IjI0LjI1NSIgcng9IjEuMjc2NiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg2OCkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xterm,xterm,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"xterm.desktop\"\nLABEL oc.launch=\"xterm.XTerm\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nENV ARGS=\"-xrm 'XTerm*selectToClipboard:true'\"\nLABEL oc.name=\"xterm\"\nLABEL oc.displayname=\"Xterm (sudo)\"\nLABEL oc.path=\"/usr/bin/xterm\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xterm\"\nENV APPBIN \"/usr/bin/xterm\"\nLABEL oc.args=\"-xrm 'XTerm*selectToClipboard:true'\"\nENV APP \"/usr/bin/xterm\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xterm/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xterm/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xterm/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xterm/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nCOPY composer/init.d/init.firefox.youtube /composer/init.d/init.firefox\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y firefox && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_youtube.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4OTkiIHgxPSItMzkuNjA1IiB4Mj0iLTM5LjYwNSIgeTE9IjU4LjI0NyIgeTI9IjYuOTg3NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MC41NDMgLjQxOTc1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDAwYzIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTE1MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MzAiIHg9Ii0uMDM4ODgiIHk9Ii0uMDM4ODgiIHdpZHRoPSIxLjA3NzgiIGhlaWdodD0iMS4wNzc4IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjk3MiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmaWx0ZXI5MzApIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS13aWR0aD0iMi4yODgxIiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGU7cGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4OTkpIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjIuMjg4MSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlO3BhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KIDxpbWFnZSB4PSIxMC41IiB5PSIxOSIgd2lkdGg9IjQzIiBoZWlnaHQ9IjMyIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDc0FBQUFnQ0FZQUFBQ0xtb0VEQUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUEgR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQWg5SlJFRlVXSVcxbU8yV2hDQUlodCttWnZmKyBiM2VhY24va1c0UllnaTNuY1ByUTdJa1FrUUh0TWpqNmVpWDFBQXpHdWRVMzhnRVdXRExhaW41VEJXQUE4TXJLYTZoejZ6a1BJTzhuIGRiNW1MWjdUTHlEa0JHQVVPcUNFYmdXdEFXdklCR0FSK3MzUSszUFNzZ1I5QS9qSnh6ZHM2N1lDM29GcllFTE9lZnhaQW12WU1RUCsgWnAxUVd2VktyRDR0azBlNndJTE5RTHplWFlXdzh2Zi80TEFzWGFCRklqNXI5Wk9naXdTMkxEdmg4TmxXaTk2Slp3eUxBY0QyRlJ6cyBwZlFwVUkvb1NDUlpDcDg4TlRwRWhxQW5KcUFWT2dmdEJoRnJ5dGlZeEl1aTQxVjU5S0xnZllFT09Tc08zeDl4V0lkamgwRTFiTlFLIGhKMnpjbHlwRVdESnRROGFIWVJDNjM0QmZMQlpsek9hQzR1RTlscDRQOVp5Z3dndzQrSlg2WUl0YmllY1YwUzNXTEE5UW1qZ25KQncgMG5YRjd0ZDlsNURVa3BZdXNTemJNN0FNVzB5S21CaDFyNGlFN2YxeS9ac2xLQ2NZUTFrM0xDVUNUV3VOMkN3SUhObWJoSXl1alB0eCBxalU0WVFsS3NONUZRWXFaZk11R1ZtQUM4UGN6MStoZGJ1WHVZUmR0MmFKRGcwZzRHTWVvRkR5VHVpa1RFbzg4blU1cWxnUWd2WXpHIEZYSG9KeUVMRHUwR1RFZ2k2emd1K251Mk5TdU9UZU1DWTRMcFRxTm90L3pSQTNzSEtpYzE4NHRQNWpodHh5M0xmdkwxQ25zdlpsVnIgUEdKVlhlU2NtWVdlTEZzcmNqREYwd0g5cVNKSHJXN0F2MnNXT1dyMUs3M0d0NFNsTytCYUhhdFdQaXJDNk5VTFd1T214eFd1YWw3NiB2T2dieWRyL1E1cWl4Ujhhbk1NQzBGUlNNZ0FBQUFCSlJVNUVya0pnZ2c9PSAiLz4KIDxwYXRoIGQ9Im0zMi4wMDMgMTkuMTQyYy02LjQ0OTQgMC0xMi40NDUgMC4yMjU1MS0xMy43NzEgMC41MTczMS0wLjg4ODY5IDAuMTk1NDktMS41OTI3IDAuNTY2MDctMi4yMzM3IDEuMTc1Mi0wLjUxMDAxIDAuNDg0Ny0wLjc5MDIzIDAuOTI0NDYtMS4wOTc0IDEuNzIxNC0wLjMzNzI4IDAuODc1MTMtMC41MTU5NCAxLjcwMDEtMC42MzkxIDIuOTQxOS0wLjIzNDg2IDIuMzY4Ny0wLjI3NzExIDMuNTM4MS0wLjI1NjE0IDcuMTA2NyAwLjAxNzggMy4wMzQ1IDAuMDMwNzEgMy4zODc0IDAuMjAyMTUgNS4zMzUxIDAuMTUxOTIgMS43MjU4IDAuMzE3OTMgMi41NDA5IDAuNzI0NDggMy41Njg0IDAuNDQ0NjcgMS4xMjM5IDEuMDYwOSAxLjgyMTggMi4wNTE3IDIuMzIxNiAwLjU5OTg3IDAuMzAyNjQgMS4xMzE4IDAuNDQzNyAyLjIxNDkgMC41ODg4OCAxLjQ3NjkgMC4xOTc5NiAzLjg5MTEgMC4zMDAyIDkuODQxNCAwLjQxNTYgNC43ODg0IDAuMDkyODggMTMuMS0wLjEwNjI2IDE1LjgyMi0wLjM3OTE5IDAuODc4MzctMC4wODgwOCAxLjQyMzMtMC4yMjU0NSAxLjk5NTItMC41MDA5OCAwLjU2NDc3LTAuMjcyMTEgMS4yMzk5LTAuODEyMDggMS41ODIxLTEuMjY1NiAwLjQ5ODY3LTAuNjYxMSAwLjk0MTI1LTEuODI0MyAxLjE2NjUtMy4wNjYyIDAuMDg3Ni0wLjQ4MzA0IDAuMjE5MjUtMS44MzI4IDAuMzI2NDYtMy4zNDg3IDAuMDkxNjEtMS4yOTU4IDAuMDkxNjItNy4yNjQyIDAtOC41NjA3LTAuMTkyOTQtMi43MzAxLTAuMzIzNC0zLjY1MjItMC42NjI5Ni00LjY5NDctMC4zMjk1NC0xLjAxMTctMC42MDYyLTEuNTA5OC0xLjE0MzktMi4wNTc5LTAuNjg2OTQtMC43MDAzNi0xLjM5MTItMS4wODk4LTIuMzUwNS0xLjMwMDgtMS4zMjY1LTAuMjkxNzktNy4zMjItMC41MTczMS0xMy43NzEtMC41MTczMXptLTMuMTkxNyA3LjcxNDRjMC4wNDM1NS0wLjAyOTU0IDguOTc1IDUuMTAzNSA4Ljk3NSA1LjE1OCAwIDAuMDU4MjkgMC4xMDkwNi0wLjAwNTItNC45OTM1IDIuODk3OS0yLjEyODUgMS4yMTEtMy44OTE5IDIuMjExLTMuOTE4NyAyLjIyMjQtMC4wMjY4OCAwLjAxMTM3LTAuMDU4MTMgMC4wMTA1Ny0wLjA2OTA1LTAuMDAxMi0wLjAyODk3LTAuMDMyMjctMC4wMjMxNC0xMC4yNTcgMC4wMDYzLTEwLjI3N3oiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iLjY0Mjg3Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"youtube,youtube,tube\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"firefox.desktop\"\nLABEL oc.launch=\"Navigator.youtube\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"-P youtube --class=youtube https://www.youtube.com/\"\nLABEL oc.name=\"youtube\"\nLABEL oc.displayname=\"Youtube\"\nLABEL oc.path=\"/usr/bin/firefox\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"2G\\\",\\\"shm_size\\\":\\\"2G\\\"}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"youtube\"\nENV APPBIN \"/usr/bin/firefox\"\nLABEL oc.args=\"-P youtube --class=youtube https://www.youtube.com/\"\nENV APP \"/usr/bin/firefox\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/youtube/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/youtube/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/youtube/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/youtube/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
"},{"location":"applications/abcdesktopio/oc.template.alpine.3.18/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.9\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.edge.gtk.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.edge.gtk/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.gtk/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.2\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.17/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.10\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.18/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.9\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.19/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.19.4\nPRETTY_NAME=\"Alpine Linux v3.19\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.20/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.edge/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.wine/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.debian.minimal/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.libreoffice.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.minimal.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.minimal.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.nvidia.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.nvidia.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.18.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.22.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.24.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.java/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.language-pack-all/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.18.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.22.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.24.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.nvidia.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.nvidia.22.04/#container-distribution-release","title":"Container distribution release","text":"
ARG TAG=dev\nARG BASE_IMAGE\nFROM ${BASE_IMAGE}:$TAG\nMAINTAINER Alexandre DEVELY \n\n# install wget\nRUN apt-get update && apt-get install --no-install-recommends --yes \\\n wget \\\n && apt-get clean\n\n\n# set arch to i386\nRUN if [ $(dpkg --print-architecture) == 'amd64' ]; then dpkg --add-architecture i386; fi\n\n# only to use wine repo\n# RUN wget -qO - https://dl.winehq.org/wine-builds/winehq.key | apt-key add -\n# RUN apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'\n\n\n# tools for winetricks\n# Uses the following non-POSIX system tools:\n# - wine is used to execute Win32 apps except on Cygwin.\n# - ar, cabextract, unrar, unzip, and 7z are needed by some verbs.\n# - aria2c, wget, curl, or fetch is needed for downloading.\n# - fuseiso, archivemount (Linux), or hdiutil (macOS) is used to mount .iso images.\n# - perl is used to munge steam config files.\n# - pkexec, sudo, or kdesu (gksu/gksudo/kdesudo are deprecated upstream but also still supported)\n# are used to mount .iso images if the user cached them with -k option.\n# - sha256sum, sha256, or shasum (OSX 10.5 does not support these, 10.6+ is required)\n# - torify is used with option \"--torify\" if sites are blocked in single countries.\n# - xdg-open (if present) or open (for OS X) is used to open download pages\n# for the user when downloads cannot be fully automated.\n# - xz is used by some verbs to decompress tar archives.\n# - zenity is needed by the GUI, though it can limp along somewhat with kdialog/xmessage.\n\n\n#RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes aria2 \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes binutils \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes cabextract fuseiso p7zip-full policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes fuseiso && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes p7zip-full policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes tor unrar unzip xdg-utils xz-utils zenity && \\\n# apt-get clean \n\n# gir1.2-gtk-3.0:i386 gir1.2-pango-1.0:i386 used by crossover\n\n# add for 20.04\n# apt-get install --no-install-recommends --yes libgcc-s1:i386 && \\\n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes aptitude libnss-mdns:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 gir1.2-gtk-3.0:i386 gir1.2-pango-1.0:i386 && \\\n# apt-get clean \n\n# add dns support for 32 apps running on 64 bits\n#RUN apt-get update && apt-get install -y \\\n# libnss-mdns-i386 \\\n# libnss-mdns \\ \n# wine-stable && \\\n# apt-get clean \n\n# RUN wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/amd64/libfaudio0_19.07-0~bionic_amd64.deb && \\\n# dpkg -i libfaudio0_19.07-0~bionic_amd64.deb && \\\n# rm libfaudio0_19.07-0~bionic_amd64.deb\n\n#RUN wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/i386/libfaudio0_19.07-0~bionic_i386.deb && \\\n# dpkg -i libfaudio0_19.07-0~bionic_i386.deb && \\\n# rm libfaudio0_19.07-0~bionic_i386.deb\n\n\n###\n#RUN mkdir -p /composer/.cache\n#RUN mkdir -p /composer/.cache/wine && \\\n# wget -O /composer/.cache/wine/wine-gecko-2.47.1-x86.msi http://dl.winehq.org/wine/wine-gecko/2.47.1/wine-gecko-2.47.1-x86.msi && \\\n# wget -O /composer/.cache/wine/wine-gecko-2.47.1-x86_64.msi http://dl.winehq.org/wine/wine-gecko/2.47.1/wine-gecko-2.47.1-x86_64.msi && \\\n# wget -O /composer/.cache/wine/wine-mono-4.9.4.msi https://dl.winehq.org/wine/wine-mono/4.9.4/wine-mono-4.9.4.msi \n##\n\nRUN mkdir -p /composer/.cache/fontconfig\n# COPY composer/.cache/fontconfig /composer/.cache/fontconfig\n\nRUN apt-get update && \\\n apt-get install --yes wine && \\\n apt-get clean\n\n# add xrdb for playonlinux\n# xrdb is in x11-xserver-utils\nRUN apt-get update && \\\n apt-get install --no-install-recommends --yes libpython3.6 playonlinux x11-xserver-utils && \\\n apt-get clean\n\n\nRUN apt-get update && \\\n apt-get install --no-install-recommends --yes mono-runtime winetricks && \\\n apt-get clean\n\nCOPY composer/updatereg.py /composer\nCOPY composer/init.d/init.wine /composer/init.d/init.wine\nCOPY composer/init.d/_init.wine /composer/init.d/_init.wine\nRUN mkdir /composer/.wine /composer/bin && chmod 777 /composer/.wine /composer/bin\n\n# Set for each app \nENV WINEPREFIX=/composer/.wine\n#ENV WINEARCH win32\n\n
file oc.template.ubuntu.wine.md is created at Sun Dec 01 2024 12:09:16 GMT+0000 (Coordinated Universal Time) by make-docs.js
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.wine.mswindow/#container-distribution-release","title":"Container distribution release","text":"
| ${FOO:-val} | $FOO, or val if not set | | ${FOO:=val} | Set $FOO to val if not set | | ${FOO:+val} | val if $FOO is set | | ${FOO:?message} | Show error message and exit if $FOO is not set |
if myfunc; then\n echo \"success\"\nelse\n echo \"failure\"\nfi\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#arguments","title":"Arguments","text":"Expression Description $# Number of arguments $* All arguments $@ All arguments, starting from first $1 First argument $_ Last argument of the previous command
Note that [[ is actually a command/program that returns either 0 (true) or 1 (false). Any program that obeys the same logic (like all base utils, such as grep(1) or ping(1)) can be used as condition, see examples.
Condition Description [[ -z STRING ]] Empty string [[ -n STRING ]] Not empty string [[ STRING == STRING ]] Equal [[ STRING != STRING ]] Not Equal --- --- [[ NUM -eq NUM ]] Equal [[ NUM -ne NUM ]] Not equal [[ NUM -lt NUM ]] Less than [[ NUM -le NUM ]] Less than or equal [[ NUM -gt NUM ]] Greater than [[ NUM -ge NUM ]] Greater than or equal --- --- [[ STRING =~ STRING ]] Regexp --- --- (( NUM < NUM )) Numeric conditions Condition Description [[ -o noclobber ]] If OPTIONNAME is enabled --- --- [[ ! EXPR ]] Not [[ X ]] && [[ Y ]] And [[ X ]] || [[ Y ]] Or","tags":["Featured"]},{"location":"cheatsheets/bash/#file-conditions","title":"File conditions","text":"Condition Description [[ -e FILE ]] Exists [[ -r FILE ]] Readable [[ -h FILE ]] Symlink [[ -d FILE ]] Directory [[ -w FILE ]] Writable [[ -s FILE ]] Size is > 0 bytes [[ -f FILE ]] File [[ -x FILE ]] Executable --- --- [[ FILE1 -nt FILE2 ]] 1 is more recent than 2 [[ FILE1 -ot FILE2 ]] 2 is more recent than 1 [[ FILE1 -ef FILE2 ]] Same files","tags":["Featured"]},{"location":"cheatsheets/bash/#example_1","title":"Example","text":"
# String\nif [[ -z \"$string\" ]]; then\n echo \"String is empty\"\nelif [[ -n \"$string\" ]]; then\n echo \"String is not empty\"\nfi\n
# Combinations\nif [[ X ]] && [[ Y ]]; then\n ...\nfi\n
# Equal\nif [[ \"$A\" == \"$B\" ]]\n
# Regex\nif [[ \"A\" =~ . ]]\n
if (( $a < $b )); then\n echo \"$a is smaller than $b\"\nfi\n
if [[ -e \"file.txt\" ]]; then\n echo \"file exists\"\nfi\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#working-with-arrays","title":"Working with arrays","text":"
echo ${Fruits[0]} # Element #0\necho ${Fruits[@]} # All elements, space-separated\necho ${#Fruits[@]} # Number of elements\necho ${#Fruits} # String length of the 1st element\necho ${#Fruits[3]} # String length of the Nth element\necho ${Fruits[@]:3:2} # Range (from position 3, length 2)\n
Declares sound as a Dictionary object (aka associative array).
","tags":["Featured"]},{"location":"cheatsheets/bash/#working-with-dictionaries","title":"Working with dictionaries","text":"
echo ${sounds[dog]} # Dog's sound\necho ${sounds[@]} # All values\necho ${!sounds[@]} # All keys\necho ${#sounds[@]} # Number of elements\nunset sounds[dog] # Delete dog\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#iteration_1","title":"Iteration","text":"","tags":["Featured"]},{"location":"cheatsheets/bash/#iterate-over-values","title":"Iterate over values","text":"
for val in \"${sounds[@]}\"; do\n echo $val\ndone\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#iterate-over-keys","title":"Iterate over keys","text":"
for key in \"${!sounds[@]}\"; do\n echo $key\ndone\n
| !$ | Expand last parameter of most recent command | | !* | Expand all parameters of most recent command | | !-n | Expand nth most recent command | | !n | Expand nth command in history | | !<command> | Expand most recent invocation of command <command> |
| !! | Execute last command again | | !!:s/<FROM>/<TO>/ | Replace first occurrence of <FROM> to <TO> in most recent command | | !!:gs/<FROM>/<TO>/ | Replace all occurrences of <FROM> to <TO> in most recent command | | !$:t | Expand only basename from last parameter of most recent command | | !$:h | Expand only directory from last parameter of most recent command |
!! and !$ can be replaced with any valid expansion.
| !!:n | Expand only nth token from most recent command (command is 0; first argument is 1) | | !^ | Expand first argument from most recent command | | !$ | Expand last token from most recent command | | !!:n-m | Expand range of tokens from most recent command | | !!:n-$ | Expand nth token to last from most recent command |
!! can be replaced with any valid expansion i.e. !cat, !-2, !42, etc.
printf \"Hello %s, I'm %s\" Sven Olga\n#=> \"Hello Sven, I'm Olga\n\nprintf \"1 + 1 = %d\" 2\n#=> \"1 + 1 = 2\"\n\nprintf \"This is how you print a float: %f\" 2\n#=> \"This is how you print a float: 2.000000\"\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#directory-of-script","title":"Directory of script","text":"
Docker For Mac embeds a hypervisor (based on xhyve), a Linux distribution which runs on LinuxKit and filesystem & network sharing that is much more Mac native. Docker For Mac is a Mac native application in /Applications.
At installation time, it creates symlinks in /usr/local/bin for docker and docker-compose, to the commands in the application bundle, in /Applications/Docker.app/Contents/Resources/bin.
To install dockerd on MacOS/X, use Docker for Desktop. Get Docker for MacOS on the docker website docker-for-mac
To get a shell to the LinuxKit docker-desktop, run the docker command
docker run -it --rm --privileged --pid=host justincormack/nsenter1\n
more info: https://github.com/justincormack/nsenter1
"},{"location":"common/acl/","title":"Define access control list for application","text":""},{"location":"common/acl/#goals","title":"Goals","text":"
restrict access to applications using authentication label
To restrict access to applications using authentication label, you have to define label using rules during authentification step, and define label to the application.
"},{"location":"common/acl/#define-authenticated-label-using-rules","title":"Define authenticated label using rules","text":"
You can read the chapter authentification-rules to define some autenticated labels.
Update the od.config file, to add a label mylocal if the source ip address is in local network 192.168.0.0/16
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can't download this file.
"},{"location":"common/acl/#run-the-xedit-application-from-your-local-network","title":"Run the xedit application from your local network","text":"
The xedit application is listed only if your are connected from a local network matching the previous rules.
Look for the application xedit, using the quick launch search text area on the bottom right corner. Insert the first character of xedit :
Launch the xedit application
"},{"location":"common/acl/#run-the-application-from-another-source-ip-address-or-update-the-acl-application","title":"Run the application from another source IP address or update the acl application","text":""},{"location":"common/acl/#update-acl-of-xedit-application","title":"Update acl of xedit application","text":"
To update the acl of xedit application, edit the edit.json file with the content, and set nowhere tag in acl array :
% node make.js -f xedit.json Dockerfile\nmyArgs: [ '-f', 'xedit.json', 'Dockerfile' ]\nopening file xedit.json\napplist.json entries: 1\nmyArgs: [ '-f', 'xedit.json', 'Dockerfile' ]\nBuilding file Dockerfile as output\n{\n acl: { permit: [ 'nowhere' ] },\n cat: 'utilities',\n debpackage: 'x11-apps',\n icon: 'xedit.svg',\n keyword: 'text,notepad,edit,txt,editor,xedit',\n launch: 'xedit.Xedit',\n name: 'xedit',\n displayname: 'Xedit',\n path: '/usr/bin/xedit',\n template: 'abcdesktopio/oc.template.gtk',\n mimetype: 'application/text;',\n fileextensions: 'txt;log;md'\n}\nBuilding xedit.Xedit\n\n% docker build -t xedit.d .\n[+] Building 1.5s (11/11) FINISHED \n => [internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 4.19kB 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk:dev 1.4s\n => [auth] abcdesktopio/oc.template.gtk:pull token for registry-1.docker.io 0.0s\n => [1/6] FROM docker.io/abcdesktopio/oc.template.gtk:dev@sha256:4aac32209c27a3e88906f39aecdfee6833bed022871366356bfd5518e2248b79 0.0s\n => CACHED [2/6] RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps && apt-get clean 0.0s\n => CACHED [3/6] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 0.0s\n => CACHED [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 0.0s\n => CACHED [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.0s\n => CACHED [6/6] WORKDIR /home/balloon 0.0s\n => exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:640a4dd66b03420c4128e2fcd920dc5749cc5b687abc62b68e52f3c562943903 0.0s\n => => naming to docker.io/library/xedit.d \n
Launch your web browser, and log in to your abcdesktop service
Check that xedit is not found and not listed.
The new acl does not allow the xedit application to be run and show. You can now define your own rules, add set the access control list to your applications.
To update the default wallpaper file, add a ENV variable in the desktop.envlocal dictionary.
Add the new entry SET_DEFAULT_WALLPAPER to the value like welcometoabcdesktop.png. The file welcometoabcdesktop.png already exists in the /composer/wallpapers directory of your abcdesktopio/oc.user.XX.YY container image.
Restart your pyos daemon, to make sure that the ENV dictionary will be use to start a new user container.
Login on your abcdesktop service, your should see the wallpaper file:
"},{"location":"common/custom-wallpaper/#update-ocuser-image-to-add-your-own-wallpaper","title":"Update oc.user image to add your own wallpaper","text":""},{"location":"common/custom-wallpaper/#find-a-new-wallpaper-image","title":"Find a new wallpaper image","text":"
Download a new wallpaper image, for example I choose the file on unsplash.com web site wallpaper unsplash from Silas Baisch
Rename the downloaded file as silas-baisch-unsplash.jpg
"},{"location":"common/custom-wallpaper/#create-a-new-ocuser-image","title":"Create a new oc.user image","text":"
Create a Dockerfile to copy the new wallpaper file in /composer/wallpapers directory
Not For a development environment, add the TAG dev
FROM abcdesktopio/oc.user.18.04:dev \nUSER root\nCOPY silas-baisch-unsplash.jpg /composer/wallpapers\nUSER balloon\n
Build the new docker image
To build the new docker image, run the command line
docker build -t abcdesktopio/oc.user.18.04 .\n
You should read on the standard output :
Sending build context to Docker daemon 3.184MB\nStep 1/4 : FROM abcdesktopio/oc.user.18.04:dev\n ---> 61bfdb4e71d4\nStep 2/4 : USER root\n ---> Using cache\n ---> c1aa17b9999c\nStep 3/4 : COPY silas-baisch-unsplash.jpg /composer/wallpapers\n ---> 73c786ecca04\nStep 4/4 : USER balloon\n ---> Running in 1e0ad794c0cb\nRemoving intermediate container 1e0ad794c0cb\n ---> a0b12a183b47\nSuccessfully built a0b12a183b47\nSuccessfully tagged abcdesktopio/oc.user.18.04:dev\n
To update the default wallpaper file, add a ENV variable in the desktop.envlocal dictionary.
Add the new entry SET_DEFAULT_WALLPAPER to the value like silas-baisch-unsplash.jpg. The file silas-baisch-unsplash.jpg exists in the /composer/wallpapers directory of your new abcdesktopio/oc.user.18.04 container image.
Restart your pyos daemon, to make sure that the ENV dictionary will be use to start a new user container.
Login on your abcdesktop service, your should see the wallpaper :
"},{"location":"common/debug_application/","title":"How to debug containerised application","text":""},{"location":"common/debug_application/#requirements","title":"Requirements","text":"
abcdesktop ready to run
docker or ctr package should be install on your Linux (optional)
Read stdout and stderr, dump all environment variables, and entrypoint log, to troubleshoot application error and get quick informations
"},{"location":"common/debug_application/#read-log-from-web-interface","title":"Read log from web interface","text":"
Start an containerised application, I choose 2048 application, for example.
Using the web browser, choose Settings in the menu.
Choose Tasks to list all running containers
Choose Logs to read the stdout log file of an application
This application write on stdout
Error setting cipher RC4\n40F7D1D5D07F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC4 : 37), Properties ()\nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
"},{"location":"common/debug_application/#read-log-from-daemon-interface-optionnal","title":"Read log from daemon interface (optionnal)","text":"
You will read the sample stdout line, using a docker logs command, open a shell on you host.
In a shell on your host, look for the container id of the 2048 containerised application
$ docker ps -a|grep 2048\n01579054a1f6 abcdesktopio/ubuntu-2048.d:3.0 \"/composer/appli-doc\u2026\" 21 minutes ago Up 21 minutes anonymous-ubuntu-2048-37830ad00d9f473aa4d0c7872089c6b8\n
Read the log file form the docker logs command
$ docker logs 01579054a1f6\n
You should read on output the same lines written on the web interface
Error setting cipher RC4\n40F7D1D5D07F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC4 : 37), Properties ()\nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
"},{"location":"common/debug_application/#read-log-files-from-an-application-using-the-redirected-stderr-and-stdout","title":"Read log files from an application using the redirected stderr and stdout","text":"
The main log files are lastcmd.loglastcmdenv.log and $APPBIN.log:
/tmp/lastcmd.log : contains the stdout file of the init script command /composer/appli-docker-entrypoint.sh for latest running application
/tmp/lastcmdenv.log: contains the dump of all environment variables for latest running application
/tmp/$APPBIN.log: contains stderr and stdout of the application $APPBIN. $APPBIN should be replace by the name of your binary application filename.
By default, with all abcdesktop templates, applications redirect stderr to stdout and pipe to a tee.
${APP} ${ARGS} \"${APPARGS}\" 2>&1 | tee /tmp/$BASENAME_APP.log\n
By default, the /tmp volume is shared with all containers. So to debug and read log applications, you can run a webshell to have an access to stdout and stderr content.
The var $BASENAME_APP is the name of your application
BASENAME_APP=$(basename \"$APPBIN\")\n
and APPBIN is path to the binary
Example with the 2048-qt application
APPBIN=/usr/games/2048-qt\n
The /tmp directory, you can read the log file '/tmp/2048-qt.log'. Look at the /tmp directory
balloon:~$ ls -la /tmp/\ntotal 20\ndrwxrwxrwt 5 root root 260 Dec 1 09:58 .\ndrwxr-xr-x 1 root root 4096 Dec 1 09:55 ..\n-rw-r--r-- 1 balloon balloon 102 Dec 1 09:58 2048-qt.log\nsrwxrwxrwx 1 root root 0 Dec 1 09:55 .cups.sock\n-rw-r--r-- 1 balloon balloon 0 Dec 1 09:57 gnome-2048.log\n-rw-r--r-- 1 balloon balloon 1175 Dec 1 09:58 lastcmdenv.log\n-rw-r--r-- 1 balloon balloon 437 Dec 1 09:58 lastcmd.log\ndrwx------ 2 balloon balloon 60 Dec 1 09:55 pulse-jkzlygT9Y7lT\nsrwxrwxrwx 1 balloon balloon 0 Dec 1 09:55 .pulse.sock\ndrwx------ 2 balloon balloon 40 Dec 1 09:58 runtime-balloon\n-r--r--r-- 1 balloon balloon 11 Dec 1 09:55 .X0-lock\ndrwxrwxrwt 2 root root 60 Dec 1 09:55 .X11-unix\nsrw------- 1 balloon balloon 0 Dec 1 09:55 .x11vnc\nballoon:~$\n
The files are /tmp/lastcmd.log, /tmp/lastcmdenv.log and /tmp/2048-qt.log.
/tmp/lastcmd.log the init command log file created by /composer/appli-docker-entrypoint.sh
/tmp/lastcmdenv.log the last environment variables file
/tmp/2048-qt.log the command log file for the application
Dump the /tmp/2048-qt.log, with a cat command cat /tmp/2048-qt.log. Replace /tmp/2048-qt.log by your own application (binary) if you choose another application.
You can run all bash commands inside the webshell.
balloon:~$ cat /tmp/2048-qt.log \nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
Dump the /composer/appli-docker-entrypoint.sh result in /tmp/lastcmd.log, with a cat command cat /tmp/lastcmd.log.
We describe how to read the environment variables, the stdout file and the stderr file, to get some information and error for a containerised application.
In next chapter we will start an application from a fresh ubuntu image, to get more details.
"},{"location":"common/disable-firefox-connections/","title":"How to disable Mozilla Firefox automatic connections at startup","text":""},{"location":"common/disable-firefox-connections/#usage-of-policiesjson","title":"Usage of policies.json","text":"
You can specifiy firefox policies in a file called policies.json, you may have to create it as it is noy present by default.
Path to policies.json depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\distribution\\policies.json Linux : /usr/lib/firefox/distribution/policies.json MacOS : /Applications/Firefox.app/Contents/Resources/distribution/policies.json
You can find all the policies templates, according to your firefox version, on the mozilla github page : https://github.com/mozilla/policy-templates/releases
"},{"location":"common/disable-firefox-connections/#usage-of-autoconfigjs-and-firefoxcfg","title":"Usage of autoconfig.js and firefox.cfg","text":"
Some preferences cannot be set through the policies.json file, such as disable normandy, because of firefox restrictions. But we can bypass it by creating a JS file called autoconfig.js and a config file called firefox.cfg.
autoconfig.js is used to load and execute firefox.cfg.
Path to autoconfig.js depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\defaults\\pref\\autoconfig.js Linux : /usr/lib/firefox/defaults/pref/autoconfig.js MacOS : /Applications/Firefox.app/Contents/Resources/defaults/pref/autoconfig.js
The locked preferences are specified in the firefox.cfg file. Path to firefox.cfg depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\firefox.cfg Linux : /usr/lib/firefox/firefox.cfg MacOS : /Applications/Firefox.app/Contents/Resources/firefox.cfg
"},{"location":"common/disable-firefox-connections/#usage-of-proxypac-file","title":"Usage of proxy.pac file","text":"
Despite all the efforts to disable automatic connections via policies.json and firefox.cfg files, there where still a few connections that seems to be not possible to disable. To bypass this phenomena, we will create a file named proxy.pac that will block access to the remaining URLs by redirecting them to an unreachable proxy.
Save proxy.pac on your machine and keep in mind the path to your file.
Once done, you should add the following line to the Proxy policy inside your policies.json file : \"AutoConfigURL\": \"file:///path/to/your/proxy.pac\"
"},{"location":"common/disable-firefox-connections/#disable-startup-connections","title":"Disable startup connections","text":""},{"location":"common/disable-firefox-connections/#policiesjson","title":"policies.json","text":"URL Parameter(s) to set https://location.services.mozilla.com\"browser.region.network.url\": \"\"https://contile.services.mozilla.comhttps://tiles-cdn.prod.ads.prod.webservices.mozgcp.net\"browser.topsites.contile.enabled\": false\"browser.topsites.contile.endpoint\": \"\"https://spocs.getpocket.com\"browser.newtabpage.activity-stream.discoverystream.enabled\": falsehttps://push.services.mozilla.com\"dom.push.connection.enabled\": falsehttps://accounts.firefox.com\"browser.startup.homepage_override.mstone\": \"ignore\"(also disable news page) https://shavar.services.mozilla.com\"browser.safebrowsing.provider.mozilla.gethashURL\": \"\"\"browser.safebrowsing.provider.mozilla.updateURL\": \"\"https://tracking-protection.cdn.mozilla.net\"browser.safebrowsing.downloads.remote.enabled\": falsehttp://detectportal.firefox.com\"network.captive-portal-service.enabled\": false\"network.connectivity-service.enabled\": falsehttps://incoming.telemetry.mozilla.orghttps://www.mozilla.org Set \"DisableTelemetry\" policy to true"},{"location":"common/disable-firefox-connections/#firefoxcfg","title":"firefox.cfg","text":"URL Parameter(s) to set https://normandy.cdn.mozilla.nethttps://classify-client.services.mozilla.comlockPref(\"app.normandy.enabled\", false)lockPref(\"app.normandy.api_url\", \"\")"},{"location":"common/disable-firefox-connections/#example-of-policiesjson-file","title":"Example of policies.json file","text":"
How to stop Firefox from making automatic connections
nikitastupin/stop-firefox-automatic-connections
Silencing Firefox's Chattiness for Web App Testing
Customizing Firefox Using AutoConfig
Firefox Reddit
Mozilla support forums
"},{"location":"common/firefox-extension/","title":"Mozilla Firefox clipboard extension","text":""},{"location":"common/firefox-extension/#install-firefox-extension-file","title":"Install Firefox Extension file","text":""},{"location":"common/firefox-extension/#download-the-mozilla-firefox-clipboard-extension-for-abcdesktop","title":"Download the Mozilla Firefox clipboard extension for abcdesktop","text":"
Download the firefox clipboard extension abcdesktop_clipboard_helper.xpi and press Continue to Installation button.
Choose Add as a response to the question Add abcdesktop Clipboad Helper ?
Press OKay, Got it to confirm the abcdesktop Clipboad helper insallation
"},{"location":"common/firefox-extension/#use-fully-qualified-domain-name-filter","title":"Use fully qualified domain name filter","text":"
Firefox clipboard extension runs ONLY if the hostname contains desktop string.
The URL must matches *://*desktop*/*\" to run the clipboard extension.
https://demo.abcdesktop.io matches, the firefox clipboard extension is running.
https://desktop.domain.io matches, the firefox clipboard extension is running.
https://abcdesktop.mydomain.local matches, the firefox clipboard extension is running.
https://demo.domain.com does not match, the firefox clipboard extension is not running.
"},{"location":"common/firefox-extension/#run-firefox-clipboard-extension-for-abcdesktop","title":"Run firefox clipboard extension for abcdesktop","text":"
Firefox clipboard extension syncs only text data, binary data like images are not yet supported.
Firefox clipboard extension syncs your clipboard data selected from your abcdesktop desktop to your local desktop environment.
Firefox clipboard extension syncs your local desktop environment clipboard to your abcdesktop desktop clipboard.
"},{"location":"common/flash-firefox-esr/","title":"How to build and run abcdesktop firefox-esr image to run flash application","text":"
Adobe no longer supports Flash Player after December 31, 2020 and blocked Flash content from running in Flash Player beginning January 12, 2021.
Lot of applications need to be rewrite, this can take time to rewrite application using HTML5.
Abcdesktop can be use to run Abode Flash application, using Firefox ESR web browser.
Firefox Extended Support Release (ESR) is an official version of Firefox developed for large organizations like universities and businesses that need to set up and maintain Firefox on a large scale. Firefox ESR does not come with the latest features but it has the latest security and stability fixes.
"},{"location":"common/flash-firefox-esr/#run-the-firefox-esr-application","title":"Run the firefox-esr application","text":""},{"location":"common/flash-firefox-esr/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Using you web browser, log in to your abcdesktop service
Look at the twice firefox icon for Firefox and Firefox-esr application.
Start the application Firefox-esr
Open you own flash website, or go to https://www.abcdesktop.io/flash sample web site
Click to the Run Adobe Flash plugins
And Allow the Adobe Flash to run
Great, you can run the Adobe Flash plugins.
"},{"location":"common/non-free-applications/","title":"Install non-free applications","text":""},{"location":"common/non-free-applications/#install-and-build-citrix-receiver-for-abcdesktop","title":"Install and build Citrix Receiver for abcdesktop","text":"
Citrix Workspace App or Citrix Receiver does not exist in official debian repository. You need to download the deb package from the www.citrix.com website manually.
"},{"location":"common/shm/#shared-memory","title":"Shared memory","text":""},{"location":"common/shm/#system-v-shared-memory","title":"System V shared memory","text":"
Goal: Test System V shared memory between two containers inside the same pod
This test creates two containers a sender and a receiver. The sender writes a string in a share memory and the receiver read the string.
The test is successful if there is no system error and the strings are equals.
The string MemContents stored in the shared memory is : This is the way the world ends...
The sender container writes a string from stdin into shared memory. The source code is here
int exit_code = -1;\n // ftok to generate unique key \n key_t key = ftok(\"/shared/shmfile\",65);\n // shmget returns an identifier in shmid \n int shmid = shmget(key,1024,0666|IPC_CREAT);\n // shmat to attach to shared memory \n char *str = (char*) shmat(shmid,(void*)0,0);\n strcpy( str, MemContents );\n //detach from shared memory \n exit_code = shmdt(str);\n
The receiver container print the sender's shared memory string to stdout. The source code is here
// ftok to generate unique key \n key_t key = ftok(\"/shared/shmfile\",65);\n // shmget returns an identifier in shmid \n int shmid = shmget(key,1024,0666|IPC_CREAT);\n // shmat to attach to shared memory \n char *str = (char*) shmat(shmid,(void*)0,0);\n printf(\"%s\\n\",str);\n cmp_code = strcmp( str, MemContents );\n //detach from shared memory \n exit_code = shmdt(str);\n
To run the System V tests
"},{"location":"common/shm/#run-a-shared-memory-test-access-using-a-shared-path","title":"Run a shared memory test access using a shared path","text":"
In this yaml file, sender and receiver containers share a file. This file is /shared/me and it is the first parameter to ftok system V call.
The env var FTOK_PATH set the first parameter to ftok system V call.
Run the test
# this test result is success\n./runtest.sh podsendershared_success.yaml\n
You can read the same string from sender to receive container.
This test is OK.
pod/podsysvsendershmtest created\npod/podsysvsendershmtest condition met\n**** Start sender ****\nsender starts\nidentity of the file named FTOK_PATH=/shared/me\nsending success This is the way the world ends...\n**** Read on receiver **** \nreceive starts\nidentity of the file named FTOK_PATH=/shared/me\nread This is the way the world ends...\n
"},{"location":"common/shm/#run-a-shared-memory-test-access-without-shared-path","title":"Run a shared memory test access without shared path","text":"
In this yaml file, sender and receiver do not share file. /dummy filename is the first parameter to ftok system V call.
The env var FTOK_PATH set the first parameter to ftok system V call.
Run the test
# this test result is failed\n./runtest.sh podsendershared_failed.yaml\n
You can read that the sender write a string. The receiver does not read this string.
This test is KO.
pod \"podsysvsendershmtest\" deleted\npod/podsysvsendershmtest created\npod/podsysvsendershmtest condition met\n**** Start sender ****\nsender starts\nidentity of the file named FTOK_PATH=/dummy\nsending success This is the way the world ends...\n**** Read on receiver **** \nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\n...\n^C\ncommand terminated with exit code 130\n
The ftok() function uses the identity of the file named by the given pathname (which must refer to an existing, accessible file) The file named by the given pathname must be shared by using a volume between containers
Goal: Test Posix shared memory between two containers inside the same pod
The source code is from inter-process communication in Linux: Shared storage Learn how processes synchronize with each other in Linux . The author is Marty Kalin
This test creates two containers a sender and a receiver to read a shared memory in /dev/shm, it uses a semaphore as a mutex (lock) by waiting for writer to increment it.
The string MemContents stored in the shared memory is : This is the way the world ends...
The sender container writes a string into shared memory map file /shMemEx
int fd = shm_open(BackingFile, /* name from smem.h */\n O_RDWR | O_CREAT, /* read/write, create if needed */\n AccessPerms); /* access permissions (0644) */\n if (fd < 0) report_and_exit(\"Can't open shared mem segment...\");\n\n ftruncate(fd, ByteSize); /* get the bytes */\n\n caddr_t memptr = mmap(NULL, /* let system pick where to put segment */\n ByteSize, /* how many bytes */\n PROT_READ | PROT_WRITE, /* access protections */\n MAP_SHARED, /* mapping visible to other processes */\n fd, /* file descriptor */\n 0); /* offset: start at 1st byte */\n if ((caddr_t) -1 == memptr) report_and_exit(\"Can't get segment...\");\n\n fprintf(stderr, \"shared mem address: %p [0..%d]\\n\", memptr, ByteSize - 1);\n fprintf(stderr, \"backing file: /dev/shm%s\\n\", BackingFile );\n\n /* semahore code to lock the shared mem */\n sem_t* semptr = sem_open(SemaphoreName, /* name */\n O_CREAT, /* create the semaphore */\n AccessPerms, /* protection perms */\n 0); /* initial value */\n if (semptr == (void*) -1) report_and_exit(\"sem_open\");\n\n strcpy(memptr, MemContents); /* copy some ASCII bytes to the segment */\n\n /* increment the semaphore so that memreader can read */\n if (sem_post(semptr) < 0) report_and_exit(\"sem_post\");\n\n sleep(12); /* give reader a chance */\n\n /* clean up */\n munmap(memptr, ByteSize); /* unmap the storage */\n close(fd);\n sem_close(semptr);\n shm_unlink(BackingFile); /* unlink from the backing file */\n\n
The receiver container print the sender's shared memory string to stdout
int fd = shm_open(BackingFile, O_RDWR, AccessPerms); /* empty to begin */\n if (fd < 0) report_and_exit(\"Can't get file descriptor...\");\n\n /* get a pointer to memory */\n caddr_t memptr = mmap(NULL, /* let system pick where to put segment */\n ByteSize, /* how many bytes */\n PROT_READ | PROT_WRITE, /* access protections */\n MAP_SHARED, /* mapping visible to other processes */\n fd, /* file descriptor */\n 0); /* offset: start at 1st byte */\n if ((caddr_t) -1 == memptr) report_and_exit(\"Can't access segment...\");\n\n /* create a semaphore for mutual exclusion */\n sem_t* semptr = sem_open(SemaphoreName, /* name */\n O_CREAT, /* create the semaphore */\n AccessPerms, /* protection perms */\n 0); /* initial value */\n if (semptr == (void*) -1) report_and_exit(\"sem_open\");\n\n /* use semaphore as a mutex (lock) by waiting for writer to increment it */\n if (!sem_wait(semptr)) { /* wait until semaphore != 0 */\n int i;\n for (i = 0; i < strlen(MemContents); i++)\n write(STDOUT_FILENO, memptr + i, 1); /* one byte at a time */\n sem_post(semptr);\n }\n\n /* cleanup */\n munmap(memptr, ByteSize);\n close(fd);\n sem_close(semptr);\n unlink(BackingFile);\n
"},{"location":"common/upload_and_download_files/","title":"Upload and Download files in your desktop","text":""},{"location":"common/upload_and_download_files/#goals","title":"Goals","text":"
Upload file from your local storage to your abcdesktop
Download file from your abcdesktop to your local storage
"},{"location":"common/upload_and_download_files/#upload-file-in-your-desktop","title":"Upload file in your desktop","text":"
To upload file into your local storage, just use a drag & drop, from your device to you adcdesktop
Then, start the filemanager, your new file is located in your home directory
"},{"location":"common/upload_and_download_files/#download-file-from-your-desktop","title":"Download file from your desktop","text":"
To download file from your abcdesktop to you local storage, just start the file manager.
Choose your file and using the right mouse button, choose the menu option Download for Desktop as describe :
The file is downloaded by your web browser
The file is located in your Downloads directory
Great, you have uploaded and downloaded files with your abcdesktop, you can now use abcdesktop.io applications to edit all your files.
"},{"location":"common/1.0/abcdesktop.bastion/","title":"Setup guide to use abcdesktop.io as bastion service","text":""},{"location":"common/1.0/abcdesktop.bastion/#design","title":"Design","text":"
The goal of this setup guide is to install abcdesktio.io as a bastion service, with only one virtual machine
"},{"location":"common/1.0/abcdesktop.bastion/#script-and-vagrant-file","title":"script and vagrant file","text":""},{"location":"common/1.0/abcdesktop.bastion/#get-script-and-vagrant-file","title":"get script and vagrant file","text":"
To get the installation script and the vagrant file, run the command
"},{"location":"common/1.0/abcdesktop.bastion/#login-as-a-user","title":"Login as a user","text":""},{"location":"common/1.0/abcdesktop.bastion/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your web browser to
http://[your-ip-hostname]:30443/\n
Replace [your-ip-hostname] by the host node IP address
You should get the web page
"},{"location":"common/1.0/abcdesktop.bastion/#log-in-as","title":"Log in as","text":"
abcdesktop adds an OpenLDAP server for testing LDAP applications, i.e. unit tests. The ldap server is used to authenticate user. To get more informations about the OpenLDAP server and the account detail, read ldap server
Login Accounts Login Password Hubert J. Farnsworth professor Philip J. Fry fry Hermes Conrad hermes Turanga Leela leela Bender Bending Rodr\u00edguez bende
Use the credentials, to login
Login Account: Philip J. Fry
Login Password: fry
"},{"location":"common/1.0/abcdesktop.bastion/#get-the-default-desktop","title":"Get the default desktop","text":"
After the login, you should get the default desktop.
"},{"location":"common/1.0/abcdesktop.bastion/#run-a-web-shell-process","title":"Run a web shell process","text":"
To start a shell, insert webshell as keywords in the search text area :
"},{"location":"common/1.0/abcdesktop.bastion/#run-ifconfig-command-to-list-network-interfaces","title":"Run ifconfig command to list network interfaces","text":"
In the web shell, run the command
$ ifconfig -a\n
This command shows the network interfaces net1 and net2 with the associated ip address
"},{"location":"common/1.0/abcdesktop.bastion/#tag-and-rules","title":"Tag and rules","text":"
'rule-ship': { 'conditions' : [ { 'memberOf': 'cn=ship_crew,ou=people,dc=planetexpress,dc=com', 'expected' : True } ], 'expected' : True, 'label': 'shipcrew' } If a user is member of 'cn=ship_crew,ou=people,dc=planetexpress,dc=com' then the label tag shipcrew is set to the user's pod
'rule-admin': { 'conditions' : [ { 'memberOf': 'cn=admin_staff,ou=people,dc=planetexpress,dc=com', 'expected' : True } ], 'expected' : True, 'label': 'adminstaff' } If a user is member of 'cn=admin_staff,ou=people,dc=planetexpress,dc=com' then the label tag adminstaff is set to the user's pod
In the abcdesktop.yaml configuration file, and look at the desktop.policies and the network option
"},{"location":"common/1.0/abcdesktop.bastion/#list-pods-and-labels-in-abcdesktop-namespace","title":"List pods and labels in abcdesktop namespace","text":"
To list pod in the abcdesktop namespace, run the command
export KUBECONFIG=/etc/kubernetes/admin.conf \nkubectl get pods -n abcdesktop \n
If a pod in the abcdesktop namespace, contains a label shipcrew: 'true' set the iptables to permit egress to host 192.168.55.21/32 and 192.168.55.22/32 using protocol TCP destination port 22.
"},{"location":"common/1.0/abcdesktop.bastion/#dump-the-generated-by-iptables-in-varlibmulti-networkpolicyiptables","title":"dump the generated by iptables in /var/lib/multi-networkpolicy/iptables/","text":"
root@kmaster:~# docker images\nREPOSITORY TAG IMAGE ID CREATED SIZE\nabcdesktopio/oc.pyos dev 6bd8b8d33b73 19 hours ago 1.17GB\nrancher/mirrored-flannelcni-flannel v0.16.3 8cb5de74f107 3 days ago 59.7MB\nmemcached latest fa6cf68061c2 5 days ago 89.1MB\nk8s.gcr.io/kube-apiserver v1.23.3 f40be0088a83 6 days ago 135MB\nk8s.gcr.io/kube-controller-manager v1.23.3 b07520cd7ab7 6 days ago 125MB\nk8s.gcr.io/kube-scheduler v1.23.3 99a3486be4f2 6 days ago 53.5MB\nk8s.gcr.io/kube-proxy v1.23.3 9b7cc9982109 6 days ago 112MB\nabcdesktopio/oc.user.18.04 latest 52176672cf2e 7 days ago 1.79GB\nabcdesktopio/oc.user.ssh.18.04 dev 52176672cf2e 7 days ago 1.79GB\nghcr.io/k8snetworkplumbingwg/multi-networkpolicy-iptables latest 54838d8bbd14 10 days ago 408MB\nrancher/mirrored-flannelcni-flannel-cni-plugin v1.0.1 ac40ce625740 12 days ago 8.1MB\nabcdesktopio/oc.nginx dev fe71c8621ef2 12 days ago 506MB\nabcdesktopio/oc.pulseaudio.18.04 dev d44997a46969 2 months ago 170MB\nabcdesktopio/oc.pulseaudio.18.04 latest d44997a46969 2 months ago 170MB\nk8s.gcr.io/etcd 3.5.1-0 25f8c7f3da61 3 months ago 293MB\nghcr.io/k8snetworkplumbingwg/multus-cni stable e6cafb5d5aa1 3 months ago 290MB\nk8s.gcr.io/coredns/coredns v1.8.6 a4ca41631cc7 3 months ago 46.8MB\nabcdesktopio/oc.cupsd.18.04 dev 095105a59722 4 months ago 745MB\nabcdesktopio/oc.cupsd.18.04 latest 095105a59722 4 months ago 745MB\nk8s.gcr.io/pause 3.6 6270bb605e12 5 months ago 683kB\nrroemhild/test-openldap latest c6b1bec361ca 10 months ago 144MB\nabcdesktopio/oc.mongo latest 802219537d3b 12 months ago 493MB\nabcdesktopio/oc.speedtest dev 298a391cfb5b 3 years ago 355MB\n
Add new application images
To add an application like Firefox, run the docker pull command :
"},{"location":"common/1.0/abcdesktop.bastion/#reload-the-web-browser-page","title":"Reload the web browser page","text":""},{"location":"common/1.0/abcdesktop.bastion/#connect-your-local-abcdesktop_1","title":"Connect your local abcdesktop","text":"
Reload or open your web browser
http://[your-ip-hostname]:30443/\n
Firefox is added to your desktop dock. Start Firefox application
No rule has be defined to allow http request from your pod to a web site
All http requests are denied
The firefox application inherits from the pod's the network rules.
If you choose to use VMware instead of VirtualBox hypervisor
"},{"location":"common/1.0/abcdesktop.bastion/#notes-about-the-macvlan-driver","title":"Notes about the macvlan driver :","text":"
Macvlan allows you to configure sub-interfaces of a parent, physical Ethernet interface, each with its own unique MAC address, and consequently its own IP address. Applications, VMs and containers can then bind to a specific sub-interface to connect directly to the physical network, using their own MAC and IP address.
"},{"location":"common/1.0/abcdesktop.bastion/#macvlan-driver-on-vswitch-vmware","title":"macvlan driver on vSwitch VMware","text":"
The security policy of a virtual switch includes a MAC address changes option. This option allows virtual machines to receive frames with a Mac Address that is different from the one configured in the VMX.
When the Mac address changes option is set to Accept, ESXi accepts requests to change the effective MAC address of a virtual machine to a different address than the initial MAC address.
Set the Mac address changes option is set to Accept
"},{"location":"common/1.0/docker_macvlan/","title":"Using docker network for an application","text":""},{"location":"common/1.0/docker_macvlan/#requirements","title":"Requirements","text":""},{"location":"common/1.0/docker_macvlan/#goals","title":"Goals","text":"
Use a dedicated network for an application. For example bind the application Firefox to a dedicated docker network. This dedicated network can use macvlan, ipvlan or an SRIOV network driver.
When abcdesktop create a docker container, abcdesktop can set a dedicated network for this container.
"},{"location":"common/1.0/docker_macvlan/#create-a-dedicated-network-for-your-application","title":"Create a dedicated network for your application","text":"
On your worker nodes :
create a dedicated network interface to bridge the new network interface
add the label abcdesktop=true to the network object
You have to choose a nework driver for example
network driver macvlan ipvlan docker-sriov-plugin
Only the name of the network is used by abcdesktop.
Create a network with macvlan or ipvlan driver
In these two examples :
Subnet is 192.168.8.0/24
Gateway is 192.168.8.254
Ip Range is 192.168.8.0/27
"},{"location":"common/1.0/docker_macvlan/#example-with-macvlan","title":"Example with macvlan :","text":"
Create a network abcnetfirefox with the driver macvlan and bridge the network interface eno1 with the vlan 123
"},{"location":"common/1.0/docker_macvlan/#test-your-new-network-macvlan-or-ipvlan","title":"Test your new network (macvlan or ipvlan):","text":"
Make sure that's you can reach the default gateway and the dns server for container. In this example, just start a busybox to :
ping the default gateway
nslookup to query www.google.com ip address
export GATEWAY=192.168.8.254\ndocker run --rm --network abcnetfirefox busybox ping $GATEWAY\n# Google\u2019s public DNS server 8.8.8.8 is added\ndocker run --rm --network abcnetfirefox --dns 8.8.8.8 busybox ping www.google.com\n
The new firefox container doesn't use the docker network abcnetfirefox, because the Hubert J. Farnsworth user account is NOT member of cn=ship_crew,ou=people,dc=planetexpress,dc=com
The network is disabled by default.
Inspect the Hubert J. Farnsworth firefox container
You do not need to logoff the Hubert J. Farnsworth, just close Firefox application and start it again. The new firefox container use the default network.
Now default user has a network access, and member of cn=ship_crew,ou=people,dc=planetexpress,dc=com use the abcnetfirefox network.
"},{"location":"common/1.0/docker_macvlan/#webhook-events-create-and-destroy-application","title":"Webhook events create and destroy application","text":"
A rule support a specific bash command to notify external security equipment like firewalls, by sending create and destroy events.
When a new docker container is created, the control plane pyos execute the command
/usr/bin/curl 'http://firewall.domain.local/update?action=create&key={{ key }}&name={{ name }}&ip={{ container_ip }}\n
When a new docker container is destoyed, the control plane pyos call the url
/usr/bin/curl 'http://firewall.domain.local/update?action=destroy&key={{ key }}&name={{ name }}&ip={{ container_ip }}'\n
Each {{ $label }} is a mustached value.
Label name description example container_ip container ip addr 192.168.8.130 provider authentification provider name planet providertype authentification provider type ldap userid authentification provider user id fry name username Philip J. Fry sha_id sha of the container image sha256%3A5c754563b357bfde4a3762728c686fe0001d10e43835b9468d5218e663b844e8 id name of the application image abcdesktopio/firefox-esr.d:dev launch WM_CLASS of the X11 application Navigator.Firefox icon icon file name firefox.svg keyword docker image label keywords firefox mozilla web internet cat docker image label category office displayname docker image label displayname Firefox-esr path binary path of the application /usr/bin/firefox-esr desktopfile desktop filename of the application firefox.desktop executablefilename binary file name of the application \u00a0firefox-esr locale user current locale settings en_US"},{"location":"common/1.0/docker_macvlan/#events","title":"Events :","text":""},{"location":"common/1.0/docker_macvlan/#create-event","title":"create event:","text":"
The control plane pyos replace the mustached url string /usr/bin/curl 'http://firewall.domain.local/update?action=create&name={{ name }}&ip={{ container_ip }}' as /usr/bin/curl 'http://firewall.domain.local/update?action=create&name=Philip%20J.%20Fry&ip=192.168.8.130'
The control plane pyos replace the mustached url string /usr/bin/curl 'http://firewall.domain.local/update?action=destroy&name={{ name }}&ip={{ container_ip }}' as /usr/bin/curl 'http://firewall.domain.local/update?action=destroy&name=Philip%20J.%20Fry&ip=192.168.8.130'
"},{"location":"common/1.0/docker_macvlan/#desktopwebhook-options-in-odconfig-file","title":"desktop.webhook options in od.config file","text":""},{"location":"common/1.0/docker_macvlan/#url-encoding-parameters","title":"url encoding parameters","text":"
To encode url parameters use the option desktop.webhookencodeparams. Set desktop.webhookencodeparams to True to encode label name. The default value is False
/usr/bin/curl 'http://{{ firewall_manage_ip }}/update?action=destroy&key={{ api_key }}&name={{ name }}&ip={{ container_ip }}'\n
becomes
/usr/bin/curl 'http://161.105.208.129/update?action=destroy&key=supersecret&name={{ name }}&ip={{ container_ip }}'\n
"},{"location":"common/1.0/update_frontend_image/","title":"Update and custom front end image","text":""},{"location":"common/1.0/update_frontend_image/#requirements","title":"Requirements","text":""},{"location":"common/1.0/update_frontend_image/#goals","title":"Goals","text":"
"},{"location":"common/1.0/update_frontend_image/#colors-dictionary-entries","title":"Colors dictionary entries","text":"entry default value example @primary #474B55 #474B55 @secondatry #2D2D2D #2D2D2D @tertiary #6EC6F0 #6EC6F0"},{"location":"common/1.0/update_frontend_image/#create-a-new-dockerfile-to-build-changes","title":"Create a new Dockerfile to build changes","text":""},{"location":"common/1.0/update_frontend_image/#update-the-uijson-with-your-own-values","title":"Update the ui.json with your own values","text":"
"},{"location":"common/1.0/update_frontend_image/#write-your-dockerfile","title":"Write your Dockerfile","text":"
FROM abcdesktopio/oc.nginx:builder as builder\n\n# copy data files\nCOPY --from=abcdesktopio/oc.nginx:dev var/webModules /var/webModules\n# copy updated file ui.json \nCOPY ui.json /var/webModules/transpile/config/ui.json\n# run makefile \nRUN cd /var/webModules && make css\n\n\n# --- START Build image ---\nFROM abcdesktopio/oc.nginx\n\n# COPY generated web site from builder container\nCOPY --from=builder var/webModules /var/webModules\n
Run the docker build command to build the new oc.nginx:acme image
docker build -t oc.nginx:acme .\n
Sending build context to Docker daemon 258.3MB\nStep 1/6 : FROM abcdesktopio/oc.nginx:builder as builder\n ---> b04ba79c6b97\nStep 2/6 : COPY --from=abcdesktopio/oc.nginx var/webModules /var/webModules\n ---> Using cache\n ---> 3c16ce97b6b5\nStep 3/6 : COPY ui.json /var/webModules/transpile/config/ui.json\n ---> Using cache\n ---> 3c8e48730bb0\nStep 4/6 : RUN cd /var/webModules && make css\n ---> Running in b9660fb676b2\nBuild css: 1.005s\nTotal duration: 1.007s\nRemoving intermediate container b9660fb676b2\n ---> febdb98ad1aa\nStep 5/6 : FROM abcdesktopio/oc.nginx\n ---> 2b311b600a4e\nStep 6/6 : COPY --from=builder var/webModules /var/webModules\n ---> Using cache\n ---> c9545d07f825\nSuccessfully built c9545d07f825\nSuccessfully tagged oc.nginx:acme\n
Run the docker images command to read the new oc.nginx image
docker images \n\nREPOSITORY TAG IMAGE ID CREATED SIZE\noc.nginx acme 4de1755b60d7 About an hour ago 746MB\n
"},{"location":"common/1.0/update_frontend_image/#update-the-dockercompose-or-the-abcdesktopyaml-file","title":"Update the dockercompose or the abcdesktop.yaml file","text":"
Update the dockercompose or the abcdesktop.yaml file to replace the default abcdesktopio/oc.nginx by the new image oc.nginx:acme name.
The run the docker-compose up, and start you web browser. You can read the new project name at the home page.
We define the new tertiary color as #00FCD4 in dict { \"name\": \"@tertiary\", \"value\": \"#00FCD4\" }
Old tertiary color has been replace by #00FCD4.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/","title":"How to create containerised application from scratch for troubleshooting","text":""},{"location":"common/3.0/createcontainerisedapplicationdebug/#requirements","title":"Requirements","text":"
envsubst command preinstalled. Common Linux systems have envsubst preinstalled
Create a new containerised application from scratch using pod volume mapping
Start a pod and get a shell inside container as user root. Run xedit application as root
Start a pod and get a shell inside container as user hermes. Run xedit application as hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#create-an-application-using-a-new-container","title":"Create an application using a new container","text":"
We are starting a new containerised application from a fresh ubuntu:20.04 image and bind the X11 socket to use the pod DISPLAY.
We start a new container one as root, and another one as current user hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-abcdesktop-session","title":"Start a new abcdesktop session","text":"
Open a web browser and go to abcdesktop service url
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#login-in-as-hermes","title":"Login in as hermes","text":"
In the example we use LDAP authentification.
The login is Hermes Conrad, the password is hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-hermess-pod-variables-name-uid-xauth_key","title":"Get hermes's pod variables: name, uid, XAUTH_KEY","text":"
Get a shell to your host. All next command use a host shell.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-pod-name","title":"Get the hermes's pod name","text":"
To read the hermes pod name, MIT-MAGIC-COOKIE-1, and uid
kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].metadata.name}' -n abcdesktop\n
We save this value in the pod variable, for next usage
POD=$(kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].metadata.name}' -n abcdesktop)\necho $POD\n
You should read on stdout
hermes-da0ca3c8-48ba-4736-85a9-d3fd2c85f009\n
We save this value in the $POD for a next usage.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-xauth_key","title":"Get the hermes's XAUTH_KEY","text":"
The release 3.0 need the MIT-MAGIC-COOKIE-1 to reach the x11 DISPLAY.
Run the command echo $XAUTH_KEY to read the $XAUTH_KEY value inside the hermes's pod
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#inspect-the-hermess-pod-to-look-for-binding-volume-mapping","title":"Inspect the Hermes's pod to look for Binding volume mapping","text":""},{"location":"common/3.0/createcontainerisedapplicationdebug/#list-files-in-varlibkubeletpodspoduid","title":"List files in /var/lib/kubelet/pods/$PODUID","text":"
The default kubelet's pod directory is /var/lib/kubelet/pods/. If you change it during the installation process replace /var/lib/kubelet/pods/ by your own directory.
ls -la /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket\n
ls -la /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket\ntotal 4\ndrwxrwxrwt 2 root root 60 Dec 8 19:43 .\ndrwxr-xr-x 9 root root 4096 Dec 8 19:43 ..\nsrwxrwxrwx 1 1051 2051 0 Dec 8 19:43 X0\n
X0 is a file unix socket, we will bind the X0 socket in the next podapp.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-pod-home-hermes-volume-location","title":"Get the hermes's pod home-hermes volume location","text":"
kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].spec.volumes[?(@.name==\"home-hermes\")].hostPath.path}' -n abcdesktop\n
Description of this query
items[0] is the first entry of the pod list.
spec.volumes is an array
read all entries in spec.volumes where the @.name==\"home-hermes\" and return .hostPath.path
We save this value in the PODHOME exported variable, for next usage
export PODHOME=$(kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].spec.volumes[?(@.name==\"home-hermes\")].hostPath.path}' -n abcdesktop)\n
Check the value with a echo
echo $PODHOME\n/tmp/hermes-conrad\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-container-from-ubuntu2004","title":"Start a new container from ubuntu:20.04","text":"
Now we've got the all volumes path and XAUTH_KEY, let's start a new container with mounted volume
to the X11 socket /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket:/tmp/.X11-unix
to the user homedir$PODHOME:/home/balloon
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#create-container-in-the-pod-sandbox-with-config-file","title":"Create container in the pod sandbox with config file","text":"
We use envsubst to replace variable content in a template yaml file.
Some systems have gettext with envsubst preinstalled. However, if it is missing, you can install it using a package manager. For macOS you can use homebrew:
brew install gettext
The variables ${PODUID}, ${PODHOME} and ${XAUTH_KEY} are exported.
Make sure to use export, otherwise your variables are considered shell variables and might not be accessible to envsubst
Create a file podapp.template.yaml
apiVersion: v1\nkind: Pod\nmetadata:\n name: podapp\n namespace: abcdesktop\nspec:\n volumes:\n - name: x11socket\n hostPath:\n # x11 directory location on host ${PODUID}\n path: /var/lib/kubelet/pods/${PODUID}/volumes/kubernetes.io~empty-dir/x11socket\n # this field is optional\n type: Directory\n - name: home\n hostPath:\n # home directory location on host\n path: ${PODHOME}\n # this field is optional\n type: Directory\n containers:\n - name: abccontainer\n image: ubuntu:20.04\n command: [\"/bin/sleep\"]\n args: [\"1d\"]\n volumeMounts:\n - mountPath: /tmp/.X11-unix\n name: x11socket\n - mountPath: /home/hermes\n name: home\n env:\n - name: XAUTH_KEY\n value: ${XAUTH_KEY}\n
Run the envsubst command to replace ${PODUID}, ${PODHOME} and ${XAUTH_KEY}
envsubst < podapp.template.yaml > podapp.yaml \n
Dump the podapp.yaml file content, and check that the volumes are set with the new values.
# cat podapp.yaml \n
apiVersion: v1\nkind: Pod\nmetadata:\n name: podapp\n namespace: abcdesktop\nspec:\n volumes:\n - name: x11socket\n hostPath:\n # directory location on host\n path: /var/lib/kubelet/pods/c6d2f8a7-eb7d-4a25-9a9c-9778ca9e35cf/volumes/kubernetes.io~empty-dir/x11socket\n # this field is optional\n type: Directory\n - name: home\n hostPath:\n # directory location on host\n path: /tmp/hermes-conrad\n # this field is optional\n type: Directory\n containers:\n - name: abccontainer\n image: ubuntu:20.04\n command: /bin/sleep 1d\n volumeMounts:\n - mountPath: /tmp/.X11-unix\n name: x11socket\n - mountPath: /home/hermes\n name: home\n
kubectl get pods podapp -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npodapp 1/1 Running 0 32s\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-a-shell-in-podapp","title":"Get a shell in podapp","text":"
You get a shell command inside the container.
kubectl exec -it podapp -n abcdesktop -- bash \n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#for-release-30-set-the-mit-magic-cookie-1","title":"for release 3.0 set the MIT-MAGIC-COOKIE-1","text":"
root@podapp:/# export DISPLAY=:0.0\nroot@podapp:/# echo $XAUTH_KEY\n306908f8e4d4768c7595ce5ad53479\nroot@podapp:/# xauth add $DISPLAY MIT-MAGIC-COOKIE-1 $XAUTH_KEY\nxauth: file /root/.Xauthority does not exist\nroot@podapp:/#\n
The file /root/.Xauthority does not exist, it has been created.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#install-your-x11-applications","title":"Install your X11 applications","text":"
For example, I choose to install the x11-apps package
Replace x11-apps by your own application
apt-get install -y x11-apps\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-your-x11-application","title":"Start your X11 application","text":"
To start the X11 application, just run it. Your DISPLAY is set to :0.0, (for release 3.0, you've already added the MIT-MAGIC-COOKIE-1).
But remember you a running a container as root, and all commands are running as root inside the container.
Start xedit
xedit\n
Go back to your web browser.
A new x11 window xedit should be present on your display
xedit doesn't write any error message in the bash container.
You've get a shell inside a container to run and start any application. You can also install and start any others applications.
To clean the running pod podapp
kubectl delete pods podapp -n abcdesktop \n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-container-from-ubuntu2004-as-hermes","title":"Start a new container from ubuntu:20.04 as hermes","text":"
To start a new container from ubuntu:20.04 as hermes, we have to add the localaccount secret volume to the previous container
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-your-x11-application-as-hermes","title":"Start your X11 application as hermes","text":"
A new x11 window xedit should be present on your display
The name of the edit window is the name of your pod (hermespodapp).
To clean the running pod hermespodapp
kubectl delete -f hermespodapp.yaml \n
You have created a pod to run an X11 application as a user in LDAP Directory. You get a root shell inside the pod, to patch, update or install other applications.
"},{"location":"common/3.0/mount_nfs_tag/","title":"Define rules to mount a nfs volume inside user pod","text":"
Only supported in abcdesktop release 3.0
An nfs volume allows an existing NFS (Network File System) share to be mounted into a Pod. NFS volume can be pre-populated with data, and can be shared between pods. NFS can be mounted by multiple writers simultaneously.
You must have your own NFS server running with the share exported before you can use it.
"},{"location":"common/3.0/mount_nfs_tag/#update-the-odconfig-file","title":"Update the od.config file","text":"
Update the od.config to add
a label to user
add a desktop rules to match the label
"},{"location":"common/3.0/mount_nfs_tag/#add-a-label-in-the-auth-provider","title":"Add a label in the auth provider","text":"
In this example, we add a label nfsuser as a condition to mount nfs resource
In the auth provider add a dummy condition or a memberOf condition. All types of conditions are supported, the goal is only to get a label.
Update the od.config file and look for the default ldapconfig dictionnary
"},{"location":"common/3.0/mount_nfs_tag/#add-a-dummy-condition","title":"Add a dummy condition","text":"
"},{"location":"common/3.0/mount_nfs_tag/#create-a-new-desktop-for-hermes-conrad-and-list-nfs-files","title":"Create a new desktop for Hermes Conrad and list nfs files","text":"
Open the url http://localhost:30443, in your web browser, to start a simple user's pod.
http://localhost:30443\n
Login with a user Hermes Conrad for example. Hermes Conrad is member of admin_staff.
Check that the label nfsuser is listed
Run a web shell to list the /mnt/iso directory content
You can define many rules from LDAP groups. To get more informations about rules, read the authentification rules section
"},{"location":"common/3.0/multiplegroupsfeature/","title":"The multiple groups features for RFC 2307 support","text":"
Let talk about a common features with multiple groups and user securityContext on pods
Define accounts in ldap directory service to get supplementalGroups support
"},{"location":"common/3.0/multiplegroupsfeature/#check-the-kubernetes-supplementalgroups-support","title":"Check the kubernetessupplementalGroups support","text":"
Let's create a yaml file to define pod with securityContext and supplementalGroups
The result exit with code 1. The groups do not exist in /etc/group
3000groups: unknown ID 3000\n 2000groups: unknown ID 2000\n 4000groups: unknown ID 4000\n 5000groups: unknown ID 5000\n 6000groups: unknown ID 6000\n command terminated with exit code 1\n
This is what you want to do with abcdesktop, the id numbers are replaced by strings. The uid, gid and supplementalgroups are read from posixAccount and posixGroup in the directory service.
"},{"location":"common/3.0/multiplegroupsfeature/#read-specsecuritycontext-from-a-pod","title":"Read .spec.securityContext from a pod","text":"
kubectl command to read .spec.securityContext
kubectl get pod/security-context-supplementalgroups-demo -o json | jq '.spec.securityContext' \n
Check inside the user pod check that hermes account can to write data in file humansfile, because hermes is member of humans group.
hermes:~$ ls -la humansfile \n>>>>>>> 612b52bcffb502a9d934c0cbba40a43d553fc731\n----rwx--- 1 root humans 6 Nov 23 16:16 humansfile\nhermes:~$ echo 'hello from hermes' >> humansfile \nhermes:~$ more humansfile \nhello\nhello from hermes\n<<<<<<< HEAD\nhermes:~$ \n
This is correct.
We describe a common features with multiple groups and user securityContext on pods and abcdesktop support multiple groups with posixGroup define in RFC2307.
To get more details about the ldif and ldap datas, you can download the ldif file planetexpress.
version: 1\n=======\nhermes:~$ \n
This is correct.
We describe a common features with multiple groups and user securityContext on pods and abcdesktop support multiple groups with posixGroup define in RFC2307.
"},{"location":"common/3.0/update_frontend_image/","title":"Update and custom frontend web page","text":"
abcdesktop uses a front HTML web site and X11 Linux application. So, to get a new graphic design, you have to define it twice in HTML (CSS) files and in X11 config.
"},{"location":"common/3.0/update_frontend_image/#create-new-image-for-abcdesktop-ocnginx","title":"Create new image for abcdesktop oc.nginx","text":""},{"location":"common/3.0/update_frontend_image/#download-uijson-file","title":"Download ui.json file","text":"
Download the ui.json file. ui.json is located in webModules/transpile/config directory of webModules abcdesktop's repository.
"},{"location":"common/3.0/update_frontend_image/#create-a-new-dockerfile-to-build-changes","title":"Create a new Dockerfile to build changes","text":""},{"location":"common/3.0/update_frontend_image/#write-your-dockerfile-to-build-the-new-image","title":"Write your Dockerfile to build the new image","text":"
Dockerfile
#\n# --- update oc.nginx:builder image start here ---\n# use the abcdesktopio/oc.nginx:builder\n# oc.nginx:builder contains Makefile and tools like nodejs, lessc need to update the ui.json file\n# oc.nginx:builder source https://raw.githubusercontent.com/abcdesktopio/oc.nginx/main/Dockerfile.builder \n\n#######\nFROM abcdesktopio/oc.nginx:builder as builder\n# copy data files /var/webModules\nCOPY --from=abcdesktopio/oc.nginx:3.2 var/webModules /var/webModules\n# copy updated file ui.json with your own custom values\nCOPY ui.json /var/webModules/transpile/config/\n\n# run makefile\n# make dev (for dev)\n# make prod (for prod)\nRUN cd /var/webModules && make dev\n# make version to update the version number from .git commit\nRUN cd /var/webModules && ./mkversion.sh\n\n#######\n#\n# --- oc.nginx image start here ---\n#\nFROM abcdesktopio/oc.nginx:3.2\n# COPY updated files from builder container to oc.nginx\nCOPY --from=builder var/webModules /var/webModules\nRUN cat /var/webModules/index.html\n
Run the docker build command to build the new oc.nginx:acme image
docker build -t oc.nginx:acme .\n
# docker build -t oc.nginx:acme .\nSending build context to Docker daemon 21.88MB\nStep 1/8 : FROM abcdesktopio/oc.nginx:builder as builder\nbuilder: Pulling from abcdesktopio/oc.nginx\neaead16dc43b: Pull complete \n2b469c68b643: Pull complete \n5cee1fa1576f: Pull complete \n359c5b0dcf0a: Pull complete \nDigest: sha256:b9b2c232a885405df39e146d7ac02f3da034a5addc78c00faca59e2d8934ec5b\nStatus: Downloaded newer image for abcdesktopio/oc.nginx:builder\n ---> ef7e71c277b9\nStep 2/8 : COPY --from=abcdesktopio/oc.nginx:3.2 var/webModules /var/webModules\n3.0: Pulling from abcdesktopio/oc.nginx\neaead16dc43b: Already exists \nd78e49ae48aa: Pull complete \n5a1b3cde12da: Pull complete \nd46852e47788: Pull complete \n301ba448a167: Pull complete \ne352a410ea9e: Pull complete \n6478c15f8c14: Pull complete \n52697000c467: Pull complete \n4f346a00bc16: Pull complete \n9d4bc434c5bb: Pull complete \nDigest: sha256:d8692b633b221654899d8dbe7987330f878364d7288ec5628f7aa47152ce4ea6\nStatus: Downloaded newer image for abcdesktopio/oc.nginx:3.2\n\n ---> c5a084901830\nStep 3/8 : COPY ui.json /var/webModules/transpile/config/\n ---> cbb23fb8634e\nStep 4/8 : RUN cd /var/webModules && make prod\n ---> Running in 976ee31ac5db\ncreate html page /var/webModules/demo.html\ncreate html page /var/webModules/index.session.mustache.html\ncreate html page /var/webModules/app.html\ncreate html page /var/webModules/app.session.mustache.html\ncreate html page /var/webModules/index.html\ncreate html page /var/webModules/description.html\nApply userInterface conf: 1.355s\nTransform and copy js files:\nBuild svg: 2.034s\nBuild css: 2.041s\n[...]\nTotal duration copy and transform: 10.430s\nWriting /var/webModules/app.js\nWriting /var/webModules/index.html: 0.975ms\nWriting /var/webModules/app.html: 0.855ms\nWriting /var/webModules/index.session.mustache.html: 0.781ms\nBuild app.js file: 11.362s\nremove out dir base /var/webModules/build: 9.129ms\nTotal duration: 12.752s\nRemoving intermediate container 976ee31ac5db\n ---> 784902ce50c1\nStep 5/8 : FROM abcdesktopio/oc.nginx:3.2\n ---> c77f6c5ca8a1\nStep 6/8 : COPY --from=builder var/webModules /var/webModules\n ---> 68474a5ee2d5\nStep 7/8 : RUN cat /var/webModules/index.html\n ---> Running in ddb958078b50\n [...]\nRemoving intermediate container ddb958078b50\n ---> f02e3c57ec7e\nStep 8/8 : LABEL name=\"frontend acmedesktop base image\" maintainer=\"acmedesktop\" version=\"3.0\"\n ---> Running in da5363dcf434\nRemoving intermediate container da5363dcf434\n ---> b5449d85393f\nSuccessfully built b5449d85393f\nSuccessfully tagged oc.nginx:acme\n
Run the docker images command to read the new oc.nginx image
docker images \n\nREPOSITORY TAG IMAGE ID CREATED SIZE\noc.nginx acme b5449d85393f 2 minutes ago 685MB\n
"},{"location":"common/3.0/update_frontend_image/#save-the-container-image-to-a-file","title":"Save the container image to a file","text":"
docker image save oc.nginx:acme -o oc.nginx.acme\n
"},{"location":"common/3.0/update_frontend_image/#import-the-file-ocnginxacme-in-k8sio-namespace-for-containerd","title":"Import the file oc.nginx.acme in k8s.io namespace for containerd","text":"
The oc.nginx.acme not is listed in the k8s.io namespace.
Start you web browser. You can read the new project name at the home page. After login you get the new color.
You have updated the html web page for abcdesktop release 3.X
"},{"location":"common/3.3/update_frontend_image/","title":"Update and custom frontend web page","text":"
abcdesktop uses a front HTML web site and X11 Linux application. So, to get a new graphic design, you have to define it twice in HTML (CSS) files and in X11 config.
The new desktop is defined with the default background color
We need to change the top color with the same new default value #18974c
Update the oc.nginx container image to add #18974c inside the new graphic chart.
"},{"location":"common/3.3/update_frontend_image/#create-new-image-for-abcdesktop-ocnginx","title":"Create new image for abcdesktop oc.nginx","text":""},{"location":"common/3.3/update_frontend_image/#clone-default-webmodules","title":"Clone default webmodules","text":"
Login progress is embedded in span HTML tags. Each projectNameSplitedStage describes a step during the user's authentification then pod's creation process.
"},{"location":"common/3.3/update_frontend_image/#colors-dictionary-entries","title":"Colors dictionary entries","text":"entry default value example @primary #474B55 #474B55 @secondatry #2D2D2D #2D2D2D @tertiary #6EC6F0 #6EC6F0"},{"location":"common/3.3/update_frontend_image/#update-the-uijson-with-your-own-values","title":"Update the ui.json with your own values","text":"
Change for example the name abcdesktop to acmedesktop
\"name\": \"acmedesktop.io\"\n
Update the projectNameSplitedHTML values, the @tertiary and @x11bgcolor colors
status user message OK 'Looking for your desktop' OK 'Looking for your desktop done' OK 'Building desktop' OK 'Starting network services, it will take a while...' OK 'Network services started.' OK 'Starting desktop graphical service %ds / %d' % (nCount,nCountMax) OK 'Starting desktop spawner service %ds / %d' % (nCount,nCountMax) OK 'Desktop services are ready after %d s' Error 'createDesktop error - myOrchestrator.createDesktop %s'"},{"location":"core/mongodb/","title":"Mongodb","text":"
Mongodb is an open-source document database that provides high performance, high availability, and automatic scaling.
The mongodb container comes from the public docker registry. This service is attend to the netback network.
The /etc/nginx/get.targetmap.lua read the jwt_token and return the ip address or the pod's fqdn, using the jwt_desktop_signing_public_key and the jwt_desktop_payload_private_key
It uses a targetmap (dict) as first cache level.
lua_shared_dict targetmap 1m;\n
Read the lua script get.targetmap.lua to get details jwt token data and payload encryption.
"},{"location":"core/ocuser/","title":"The POD User","text":"
After the login process, if no associated pod is all ready running, a new user pod is started. This pod starts at least a container with the graphical image.
"},{"location":"core/ocuser/#inside-the-pod-user","title":"Inside the POD User","text":"
The pod user runs by default a container with the graphical image : the oc.user.18.04.
A pod can also runs sound container image, and a printer container. These options are defined in the od.config configuration file [ section desktop.soundimage and desktop.printerimage].
"},{"location":"core/ocuser/#processes-running-inside-the-user-container","title":"Processes running inside the user container","text":"
All processes are running as the user named balloon, because none of theme need to run as root.
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems. All process running inside the user container, are started by supervisord.
TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), a client/server application that allows users to launch and interact with graphical applications on remote machines. TigerVNC provides the levels of performance necessary to run 3D and video applications, and it attempts to maintain a common look and feel and re-use components, where possible, across the various platforms that it supports. TigerVNC also provides extensions for advanced authentication methods and TLS encryption.
Openbox is the window manager, it supports extensive standards support.
Openbox is patched with few line to send SIG_USR1 and SIG_USR2 messages to internal spawner service. This patch is only required to send message (Create/Close) to the abcdesktop.io web front.
This patch add notification when X11/window change :
The notify patch send signals SIGUSR1 and SIGUSR2 to a process (pid)
spawner-service.js is a daemon written in nodejs, this daemon listen for messages on the tcp port 8001. spawner-service offers methods to interact with the container and the X11 server :
launch: start a new application inside the container [ use for builtin applications ]
filesearch: search file by keywords
activate: activate a window
raise: raise a window
minimize: minimize a window
close: close a window
getwindowslist: get window list
activatewindow: activate a window
closewindow
minimizewindow
raisewindow
info: get container information
clipboardsync: Sync primary clipboard to gtk default clipboard
getbroadcastwindowslist: broadcast the window list to all connected users
getappforfile: get the application key for a filename
getmimeforfile: get the mime type for a filename
echo: return an echo string
spawner-service.js is started by supervisord using the command :
Printer-service.js waits for a file in /home/balloon/.printer-queue directory. Printer-service.js use broadcastevent to notify the web browser to download new files to print. Printer-service.js is started by supervisord using the command :
File-service.js is a upload/download service to tranfert files between the browser and the user home directory. File-service.js supports the HTTP method POST to uploadFile and GET to respond data file. File-service.js is used for printer-service.js to download PDF printed files. File-service.js use the tcp port 8080.
http.createServer(function(req, res) {\n if (req.method === 'POST') {\n uploadFile( req, res );\n } \n else if (req.method === 'GET') {\n respondFile( req, res );\n }\n}).listen(8080, function() {\n console.log('Listening for requests');\n});\n
File-service.js is started by supervisord using the command :
PulseAudio is a sound system for POSIX, and is a proxy for sound applications. It allows you to do advanced operations on your sound data as it passes between applications. Pulseaudio is use as server to forward sound between X11 applications and the user browser. It supports also virtual local sound.
Xsettingsd is a daemon that implements the XSETTINGS specification. Xsettingsd is use to run GTK+ applications, to configure things such as themes, font antialiasing/hinting, and UI sound effects without we using the GNOME desktop environment. Xsettingsd set the default GTK theme and color pallette:
"},{"location":"core/ocuser/#build-the-user-container-image","title":"Build the user container image","text":"
The image oc.user.XX.YY is based from the oc.software.XX.YY witch came from oc.ubuntu.XX.YY. For example : * The image oc.user.18.04 is based from the oc.software.18.04 witch came from oc.ubuntu.18.04. * The image oc.user.20.04 is based from the oc.software.20.04 witch came from oc.ubuntu.20.04. * The image oc.user.21.04 is based from the oc.software.21.04 witch came from oc.ubuntu.21.04.
To build the image oc.user container from scratch, you need to build there 3 images. Build oc.ubuntu.18.04 first, next oc.software.18.04, and finish by oc.user.18.04. This is done by the Makefile command.
oc.pyos is the application server for abcdesktop.io. oc.pyos is the abcdesktop control plane that configures and shuts down user desktops. This repository oc.pyos is the container of pyos. os.py is python script based on cherrypy framework and listen tcp port 8000. os.py daemon waits for json request from the javascript web client scripts, and implements methods :
'login' : Request a login session, create a new user container if it does not exist.
'getkeyinfo' : Return the public key from a provider
'logout' : logout the container
'logs' : return logs from a started container
'getapplist' : return all avalaible applications
'install' : [ deprecated ] install a package
'share' : send a auth token to the email to share the desktop
'support' : send a support request
'restart' : retart the user container
'ocrun' : start a application
'ocstop' : stop the container
'whoami' : return a JSON object whoami
'set' : set a key value
'get' : get value from a key
'setcollection' : add value to a collection
'getcollection' : get all values from a collection
LibreSpeed/SpeedTest is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers. LibreSpeed/SpeedTest works with no Flash, no Java, no Websocket.
"},{"location":"services/file-service/","title":"File service v1.0.0","text":""},{"location":"services/file-service/#file-service","title":"File service v1.0.0","text":"
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
"},{"location":"services/file-service/#get__-responses","title":"Responses","text":"Status Meaning Description Schema 403 Forbidden none Inline 404 Not Found none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#get__-responseschema","title":"Response Schema","text":"
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data any false none none This operation does not require authentication"},{"location":"services/file-service/#post__","title":"post__","text":"
POST /
Upload a file at a given path
Body parameter
Example responses
200 Response
"},{"location":"services/file-service/#post__-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 403 Forbidden none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#post__-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/file-service/#delete__","title":"delete__","text":"
DELETE /
Remove a given file wich is present in home directory
Body parameter
{\n \"myFilename\": \"string\"\n}\n
"},{"location":"services/file-service/#delete__-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb myFilename body string true none
Example responses
200 Response
"},{"location":"services/file-service/#delete__-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 400 Bad Request none Inline 403 Forbidden none Inline 404 Not Found none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#delete__-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 400
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data strin false none none This operation does not require authentication"},{"location":"services/file-service/#get__directory_list","title":"get__directory_list","text":"
GET /directory/list
List files in a given directory
"},{"location":"services/file-service/#get__directory_list-parameters","title":"Parameters","text":"Name In Type Required Description directoryName query string true none"},{"location":"services/file-service/#get__directory_list-responses","title":"Responses","text":"Status Meaning Description Schema default Default Default response None This operation does not require authentication"},{"location":"services/spawner-service/","title":"Spawner service v1.0.0","text":""},{"location":"services/spawner-service/#spawner-service","title":"Spawner service v1.0.0","text":"
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
"},{"location":"services/spawner-service/#get__version-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__version-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb date Date false none none \u00bb commit string false none none \u00bb version string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__launch","title":"post__launch","text":"
"},{"location":"services/spawner-service/#post__launch-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb command body string true none \u00bb args body [string] false none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__launch-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none launch 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setaudioquality","title":"post__setAudioQuality","text":"
POST /setAudioQuality
Set the audio quality
Body parameter
{\n \"sink\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setaudioquality-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb sink body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__setaudioquality-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none processResult 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__playaudiosample","title":"post__playAudioSample","text":"
POST /playAudioSample
Play a sample audio
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__playaudiosample-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none processResult 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#put__configurepulse","title":"put__configurePulse","text":"
"},{"location":"services/spawner-service/#put__configurepulse-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb destinationIp body string true none \u00bb port body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#put__configurepulse-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__broadcastwindowslist","title":"post__broadcastwindowslist","text":"
POST /broadcastwindowslist
Emit a broadcast with window list as data
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__broadcastwindowslist-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__clipboardsync","title":"post__clipboardsync","text":"
POST /clipboardsync
Synchronize X11 and gtk clipboard
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__clipboardsync-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setdesktop","title":"post__setDesktop","text":"
"},{"location":"services/spawner-service/#post__setdesktop-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb key body string true none \u00bb value body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setdesktop-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__getdesktop","title":"get__getDesktop","text":"
GET /getDesktop
Get a data stored as json file
"},{"location":"services/spawner-service/#get__getdesktop-parameters","title":"Parameters","text":"Name In Type Required Description key query string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#get__getdesktop-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getdesktop-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data object false none none This operation does not require authentication"},{"location":"services/spawner-service/#get__getmimeforfile","title":"get__getmimeforfile","text":"
GET /getmimeforfile
Get a mime for a given filename
"},{"location":"services/spawner-service/#get__getmimeforfile-parameters","title":"Parameters","text":"Name In Type Required Description filename query string true none
Example responses
200 Response
{\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#get__getmimeforfile-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none MIME 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__filesearch","title":"get__filesearch","text":"
GET /filesearch
Used for list files by dock
"},{"location":"services/spawner-service/#get__filesearch-parameters","title":"Parameters","text":"Name In Type Required Description maxfile query integer false none keywords query string true none
"},{"location":"services/spawner-service/#get__filesearch-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__filesearch-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [object] false none none \u00bb\u00bb file string false none none \u00bb\u00bb mime string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__generatedesktopfiles","title":"post__generateDesktopFiles","text":"
POST /generateDesktopFiles
Build desktop files to run containerized applications
"},{"location":"services/spawner-service/#post__generatedesktopfiles-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb list body [object] true none \u00bb\u00bb mimetype body string false none \u00bb\u00bb path body string false none \u00bb\u00bb executablefilename body string false none \u00bb\u00bb icon body string false none \u00bb\u00bb name body string false none \u00bb\u00bb launch body string false none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__generatedesktopfiles-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__getappforfile","title":"get__getappforfile","text":"
"},{"location":"services/spawner-service/#get__getappforfile-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none AppForFile 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__about","title":"get__about","text":"
"},{"location":"services/spawner-service/#get__about-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__about-responseschema","title":"Response Schema","text":"
"},{"location":"services/spawner-service/#get__getsettings-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getsettings-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [any] false none none \u00bb\u00bb tab string false none none \u00bb\u00bb enabled boolean false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__setbackgroundcolor","title":"post__setBackgroundColor","text":"
POST /setBackgroundColor
Change the background color
Body parameter
{\n \"color\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundcolor-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb color body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundcolor-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setbackgroundimage","title":"post__setBackgroundImage","text":"
POST /setBackgroundImage
Set the background image
Body parameter
{\n \"imgName\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundimage-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb imgName body string true none
"},{"location":"services/spawner-service/#post__setbackgroundimage-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#post__setbackgroundimage-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data object false none none \u00bb\u00bb color string false none none \u00bb\u00bb subData Success false none All operations completed with success \u00bb\u00bb\u00bb code integer false none none \u00bb\u00bb\u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__setdefaultimage","title":"post__setDefaultImage","text":"
POST /setDefaultImage
Set the default image as background
Example responses
200 Response
"},{"location":"services/spawner-service/#post__setdefaultimage-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#post__setdefaultimage-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#get__getwindowslist","title":"get__getwindowslist","text":"
GET /getwindowslist
Get window list
Example responses
200 Response
"},{"location":"services/spawner-service/#get__getwindowslist-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getwindowslist-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [any] false none none \u00bb\u00bb id integer false none none \u00bb\u00bb pid integer false none none \u00bb\u00bb wm_class string false none none \u00bb\u00bb title string false none none \u00bb\u00bb machine_name string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__activatewindows","title":"post__activatewindows","text":"
POST /activatewindows
Activate windows
Body parameter
{\n \"windowsid\": [\n 0\n ]\n}\n
"},{"location":"services/spawner-service/#post__activatewindows-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb windowsid body [integer] true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__activatewindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__closewindows","title":"post__closewindows","text":"
POST /closewindows
Close windows
Body parameter
{\n \"windowsid\": [\n 0\n ]\n}\n
"},{"location":"services/spawner-service/#post__closewindows-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb windowsid body [integer] true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__closewindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__placeallwindows","title":"post__placeAllWindows","text":"
POST /placeAllWindows
Place and resize all windows
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__placeallwindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#schemas","title":"Schemas","text":""},{"location":"services/spawner-service/#tocS_InternalError","title":"InternalError","text":"
{\n \"code\": 0,\n \"data\": \"string\"\n}\n\n
"},{"location":"services/spawner-service/#properties","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data string false none none"},{"location":"services/spawner-service/#tocS_Success","title":"Success","text":"
{\n \"code\": 0,\n \"data\": \"string\"\n}\n\n
All operations completed with success
"},{"location":"services/spawner-service/#properties_1","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data string false none none"},{"location":"services/spawner-service/#tocS_processResult","title":"processResult","text":"
{\n \"code\": 0,\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_2","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data object false none none"},{"location":"services/spawner-service/#tocS_launch","title":"launch","text":"
{\n \"code\": 0,\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_3","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data object false none none"},{"location":"services/spawner-service/#tocS_MIME","title":"MIME","text":"
{\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_4","title":"Properties","text":"Name Type Required Restrictions Description data object false none none"},{"location":"services/spawner-service/#tocS_AppForFile","title":"AppForFile","text":"
Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.
abcdesktop team is not the authors of the CIFS Flexvolume Plugin for kubernetes. This file is an update from the original source file https://raw.githubusercontent.com/fstab/cifs/. The original source code is https://github.com/fstab/cifs The author is Fabian St\u00e4ber. The update is part for abcdesktop.io
This article is just an update from Fabian St\u00e4ber work.
Docker containers running in Kubernetes have an ephemeral file system: Once a container is terminated, all files are gone. In order to store persistent data in Kubernetes, you need to mount a Persistent Volume into your container. Kubernetes has built-in support for network filesystems found in the most common cloud providers, like Amazon's EBS, Microsoft's Azure disk, etc. However, some cloud hosting services, like the Hetzner cloud, provide network storage using the CIFS (SMB, Samba, Windows Share) protocol, which is not natively supported in Kubernetes.
Fortunately, Kubernetes provides Flexvolume, which is a plugin mechanism enabling users to write their own drivers. There are a few flexvolume drivers for CIFS out there, but for different reasons none of them seemed to work for me. So Fabian St\u00e4ber wrote this driver.
The flexvolume plugin is a single shell script named cifs. This shell script must be available on the Kubernetes master and on each of the Kubernetes nodes. By default, Kubernetes searches for third party volume plugins in /usr/libexec/kubernetes/kubelet-plugins/volume/exec/.
The plugin directory can be configured with the kubelet's --volume-plugin-dir parameter, run ps aux | grep kubelet to learn the location of the plugin directory on your system (see [#1][9]). The cifs script must be located in a subdirectory named abcdesktop~cifs/. The directory name abcdesktop~cifs/ will be mapped to the Flexvolume driver name abcdesktop/cifs.
On the Kubernetes master and on each Kubernetes node run the following commands:
It should output a JSON string containing \"status\": \"Success\". This command is also run by Kubernetes itself when the cifs plugin is detected on the file system.
"},{"location":"setup/kubernetes_flexvolume/#update-your-odconfig-file","title":"Update your od.config file","text":"
In this example, we use a Microsoft Active Directory as a LDAP Server.
CIFS is supported with kubernetes configuration, CIFS is not supported in docker non-cluster mode
Add a new policy to add a label TAG during the user's authentification process.
If the user's label is equal domainuser, then the user attribut homeDir is mounted to the homeDirectory by the CIFS flexvolume plugin.
"},{"location":"setup/kubernetes_flexvolume/#testing","title":"Testing","text":""},{"location":"setup/kubernetes_flexvolume/#apply-new-configuration-file","title":"Apply new configuration file","text":"
kubectl apply -f abcdesktop.yml\n
Open you abcdesktop website and fill the authentation form with your Microsoft Active Direcotry Service or Samba server credentials.
Run authentification on the Microsoft Active Direcotry Service or on your Samba server
Start the File Manager application. In this example, the homeDir is set to U:, the mount entry become the letter U.
Click on the homeDir to read the CIFS ressource data. In this example, the shared ressource //192.168.7.101/alex contains a file ```NAS-file.ods'
# mount | grep 192.168.7.101\n//192.168.7.101/alex on /var/lib/kubelet/pods/b7530cc0-6903-458a-a133-d8a8450e3af4/volumes/abcdesktop~cifs/flexvol-cifs-homedir-alex type cifs (rw,relatime,vers=1.0,cache=strict,username=alex,uid=4096,forceuid,gid=4096,forcegid,addr=192.168.7.101,soft,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1)\n
Check that the kubernetes secrets exist
kubectl get secrets -n abcdesktop\nNAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 65d\nabcdesktopjwtdesktopsigning Opaque 2 65d\nabcdesktopjwtusersigning Opaque 2 65d\nauth-cifs-alex-flexvol-cifs-homedir abcdesktop/cifs 4 10m\nauth-ldif-alex abcdesktop/ldif 11 10m\n
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"abcdesktop.io is a cloud native desktop service built on and for Kubernetes.","text":"
abcdesktop.io is a cloud native desktop service built on and for Kubernetes. abcdesktop.io is also a complete work environment accessible from a simple HTML 5 web browser, without any installation. Like serverless does, desktopless computing allocates desktop resources on demand. Each user\u2019s application runs as a container to reduce attack surface.
abcdeskop.io is an open source and free solution that offers seamless access to secure desktops and applications on any device, follow the https://github.com/abcdesktopio links.
This flexible working environment simplifies usage like
Telecommuting
Remote virtual desktop
Give temporary access to other contractors or guests
You can discover abcdesktop.io desktopless services on the demo website. https://demo.abcdesktop.io instance is a quick example to illustrate how the abcdesktop.io project works. Your desktopless is ready to run for 10 minutes, and will be terminated by the garbage collector after 10 minutes. It requires an OpenID Connect provider to sign-in like (Google, Facebook, Github). The security policy for Internet network prevents requests from your abcdesktop being allowed. Printer service (using cups) and sound service (using pulseaudio) inside the kubernetes pods are enabled.
To reach the demo website, follow the link https://demo.abcdesktop.io
abcdesktop.io provides a way to run graphics software securely isolated in a container, and use a web browser HTML5 as display device. Because containers are lightweight and run without the extra load of an operating system, you can run many graphical applications on a single kernel or even on a kubernetes cluster.
"},{"location":"#quick-installation-for-kubernetes","title":"Quick installation for kubernetes","text":"
You can watch the youtube video sample. This video describes the Quick installation process.
Download and extract the latest release automatically (Linux or macOS) or read the step by step installation process abcdesktop for kubernetes
curl -sL https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/install-3.2.sh | sh -\n
Here are some of the organizations we know are using abcdesktop.io. If you\u2019re using Abcdesktop and aren\u2019t on this list, please submit a pull request!
Adopters Name Description Public applications repository Embl The European Molecular Biology Laboratory is an intergovernmental organization dedicated to molecular biology research and is supported by 28 member states, one prospect state, and one associate member state https://git.embl.de/ysun/abcdesktop-apps/ Orange Telecommunications operator and digital service provider. Orange serves 287 million customers, individuals, professionals, and large companies Orange uses common public and private business applications"},{"location":"#features","title":"Features","text":"
Native support GNU/Linux X11 applications native support
Support Microsoft Windows applications using Wine
"},{"location":"#supported-web-browser-html","title":"Supported web browser HTML","text":"
abcdesktop.io uses many modern web technologies. However these are the minimum versions we are currently aware of:
Chrome 49,
Firefox 58,
Safari 11,
Opera 36,
Microsoft Edge (based on Chromium)
"},{"location":"#copy-and-paste-features","title":"Copy and Paste features","text":"
To fully use copy and paste features, from your local device to your abcdesktop (and vice versa), choose Chrome, Chromium or Microsoft Edge Chromium. The copy and paste feature is also supported on Firefox with a dedicated abcdesktop extension.
Web browser Clipboard sync Chrome Yes, built in support Chromium Yes, built in support Microsoft Edge Chromium Yes, built in support Firefox Yes, install the dedicated abcdesktop extension Safari No, the clipboard access is not allowed by the user agent or the platform in the current context, possibly because the user denied permission"},{"location":"#not-supported-web-browser","title":"Not supported web browser","text":"
abcdesktop.io does NOT support Microsoft Internet Explorer from version 1.x to 11.x. If you need a Microsoft web browser use Microsoft Edge. Edge is based on the Chromium open-source project. Chromium forms the basis of Google Chrome, so the new Edge feels very similar to Google Chrome.
"},{"location":"#release-history","title":"Release history","text":"Release Status Date Requirements Applications \u00a0Documentation 1.1 deprecated 09/15/2021 dockerd for personnal use and kubernetes An application is a docker container removed 2.9 deprecated 29/08/2022 require kubernetes < 1.24 and dockerd as container engine An application is a pod or a docker container removed 3.0 deprecated 09/03/2022 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container Release 3.1 stable 10/03/2023 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container, change PVC and PV support Release 3.2 stable 01/02/2024 kubernetes >= 1.24, all container engine An application is a pod or an ephemeral container, WebRTC sound support Release"},{"location":"#github-repositories","title":"Github repositories","text":"
abcdesktop has 42 repositories available. Follow the code on GitHub https://github.com/abcdesktopio to get the source code.
Here are some of the organizations we know are using abcdesktop.io.
Adopters Name Description Public applications repository Embl The European Molecular Biology Laboratory is an intergovernmental organization dedicated to molecular biology research and is supported by 28 member states, one prospect state, and one associate member state https://git.embl.de/ysun/abcdesktop-apps/ Orange Telecommunications operator and digital service provider. Orange serves 287 million customers, individuals, professionals, and large companies Orange uses common public and private business applications
If you\u2019re using abcdesktop.io and aren\u2019t on this list, please submit a pull request to add entry in this list.
Docker images applications for abcdesktop use docker's LABELS as metadata. To select only abcdesktop applications from standard docker images, all abcdesktop's applications must have a label 'oc.type' set to the value 'app'.
LABEL oc.type=app\n
"},{"location":"applicationsformat/#label-descriptions","title":"Label descriptions","text":"Label name Type Description Sample oc.icon string icon filename use by the web interface for the application, MUST suffix in .svg format writer.svg oc.icondata string icon file SVG data uuencoded PD94b...C9zdmc+Cg== oc.keyword string keywords use by the web application search engine separated by comma(,) firefox,mozilla,web,internet oc.desktopfile string .desktop gnome file name /usr/share/applications/firefox.desktop oc.cat string category use by the web application store, choose one value of the default list [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ] office oc.launch string X11 Windows Class name. It MUST be unique use the command 'wmctrl -lx' to can the right name oc.template string Template name to use FROM in the DockerFile oc.template.gtk.firefox oc.path string Path to the application binary /usr/bin/firefox oc.args string arguments added to the command --open oc.name string Name of the application Firefox oc.displayname string Display Name show by Web interface Firefox oc.type string Always set to the value 'app' app oc.mimetype string MimeType supported by the application separated by semicolon(;) text/html;text/xml;application/xml;application/rss+xml;video/webm oc.showinview string Set to the dock to add this app in dock dock oc.fileextensions string Supported extensions file, separated by semicolon(;) htm;html;xml;gif oc.legacyfileextensions string Legacy file extensions, separated by semicolon(;) htm;html;xml oc.host_config dict dictionary of resources (see resources details) { 'shm_size': '1g' }
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"applicationsformat/#the-inheritance-of-the-images","title":"The inheritance of the images","text":"
All abcdesktop applications use by default the oc.template.gtk images name.
"},{"location":"applicationsformat/#the-inheritance-of-the-classes","title":"The inheritance of the classes.","text":"
By default, oc.templace.gtk is the main image for all applications. For example oc.template.gtk.firefox use the oc.template.gtk image. oc.template.gtk.firefox.acme use the oc.template.gtk.firefox.
The oc.template.gtk.firefox contains the Mozilla Firefox application.
The oc.template.gtk.firefox.acme may contain custom set for Mozilla Firefox application, like Root CA, proxy values or policy.json files for the acme.
pyos is the core abcdesktop service act as a control plane. Pyos is a stateless services, Pyos's roles are :
Authenticate user on authenticate providers
OAuth 2.0 Provider : Google, Facebook, Orange
LDAP and LDAPS
Active Directory
Start/Stop user container in docker mode and Pod in Kubernetes mode
Start/Stop application container
When a new user is authenticated, a dedicated user container is created. When the user starts an application (like LibreOffice for example) a dedicated application container is created.
All applications are containers or pods, and share a graphical socket with the user's container
"},{"location":"buildapplications.wine/","title":"Build abcdesktop docker image for Microsoft Windows using Wine","text":""},{"location":"buildapplications.wine/#requirements","title":"Requirements","text":"
Read the chapter Edit your configuration file in docker mode is mandatory
Read the chapter Build abcdesktop docker image is mandatory.
A running dockerd last version
An access to the docker public registry
An access to the ubuntu repository
Nodejs installed on your host.
abcdesktop can run Microsoft Windows applications using Wine.
"},{"location":"buildapplications.wine/#wine-embedded-in-octemplategtkwine-image","title":"wine embedded in oc.template.gtk.wine image","text":"
To run Windows applications abcdesktop use wine. A dedicated image template source is ready to use as source of others Windows applications. This template is named abcdesktopio/oc.template.gtk.wine.
Start pulling this template image, if you don't have already done in the previous exercice :
docker pull abcdesktopio/oc.template.gtk.wine\n
This image embeded the architecture format win32win64. By default the WINEARCH is set to win32. The playonlinux package is all ready installed.
"},{"location":"buildapplications.wine/#change-the-odconfig-configuration-file","title":"Change the od.config configuration file","text":""},{"location":"buildapplications.wine/#the-homedirectorytype-option","title":"The homedirectorytype option","text":"
To share the home directory /home/balloonvolume data between containers, set the desktop.homedirectorytype to 'volume' in your od.config file.
Edit your own od.config file as described in the chapter Edit your configuration file in docker mode, and make sure that desktop.homedirectorytype is set to 'volume'
desktop.homedirectorytype: 'volume' \n
If need, run the docker-compose restart command in your abcdesktop directory where the od.config and the docker-compose.yml are located.
docker-compose restart\n
"},{"location":"buildapplications.wine/#build-a-new-windows-putty-inside-a-docker-container","title":"Build a new windows putty inside a docker container","text":"
In this exercice we are going to install and run putty.exe for Windows inside a docker container for abcdesktop.
PuTTY is an SSH and telnet client, developed originally by Simon Tatham for the Microsoft Windows platform.
Start an abcdesktop session. You can use an authenticated session using an authentication provider external or explicit, or you can do this exercice using Anonymous Authentification also know as the authentication provider implicit.
In this exercice we choose an Anonymous authentification, DO NOT CLOSE YOUR WEB BROWSER, you should not be able de reconnect with the same user context, and have to restart this exercice again.
Login using the Anonymous authentification provider.
Click on the menu and choose settings options
On the Settings dialog box, choose System option
Choose the User container tabs, and select the hostname value.
Copy this value into your clipboard. The hostname use the docker containerid value.
Keep your web browser open, and open a terminal shell on your server, to run docker shell commmand.
Run the docker inspect -f \"{{ .HostConfig.Binds }}\" and add your CONTAINER ID as parameter.
You should read the volume name starting by the prefix tmp- with your uuid value, and a second volume name starting by the prefix home- with your uuid:
We are using the /tmp volume and the /home/balloon volume of your container.
If your are using an anonymous authentification, the name of your container id is formated as an uuid, for example a32deda7-324f-4ee4-9e51-51c1aaf66bcf. The name of the tmp volume is tmp-a32deda7-324f-4ee4-9e51-51c1aaf66bcf and the name of tmp volume is home-a32deda7-324f-4ee4-9e51-51c1aaf66bcf
If your are using an LDAP authentification, the name of your container id is a string equal to the username, for example hermes. The name of the tmp volume is tmp-hermes and the name of tmp volume is home-hermes.
Replace in the command the string TMP_VOLUMENAME by your own tmp volume name.
Replace in the command the string HOME_VOLUMENAME by your own home volume name.
Great, you have started a new docker container. The oc.user container and your new container is sharing the same volume mounted as /tmp. You get a prompt inside the new docker container.
To run a command as administrator (user \"root\"), use \"sudo <command>\".\nSee \"man sudo_root\" for details.\n\nballoon@721263d5dece:~$ \n
Init the wine directory
wineboot --init\n
After few seconds you should read on the standard error
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0014:err:ole:get_local_server_stream Failed: 80004002\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0012:err:ole:get_local_server_stream Failed: 80004002\nCould not find Wine Gecko. HTML rendering will be disabled.\nCould not find Wine Gecko. HTML rendering will be disabled.\nwine: configuration in L\"/composer/.wine\" has been updated.\n
And now download putty.exe from the web site https://www.putty.org/.
Start the putty.exe with wine, with the command wine putty.exe
balloon@5719b77d3f2a:~$ wine putty.exe\n
After few seconds you should read on the standard error
0009:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.\n
The wine prefix is WINEPREFIX=/composer/.wine, all files used by wine are stored in /composer/.wine directory.
On abcdesktop display, wine is starting the application putty, after few seconds, Putty is running :
You can use this Putty Windows application to connect to another host using ssh or telnet protocol.
The application Putty is opened and is running in the background. At the right corner, write in the search bar the keyword shell Click on the Web Shell icon, a new Terminal WebShell is now opened :
Run the command to list each X11 windows and get the WMClass name.
wmctrl -lx \n
Read the WM_CLASS of the Putty Wine application: putty.exe.Wine
Then exit the web shell and quit on the Putty application. Wine has created a configuration directory in the default directory /composer/.wine.
"},{"location":"buildapplications.wine/#build-the-new-puttyd-image-for-abcdesktop","title":"Build the new putty.d image for abcdesktop","text":"
In this chapter we are going to build a new docker image for abcdesktop
The new image is the putty.
Create a directory named build, and create a directory icons inside build
mkdir build\nmkdir build/icons\ncd build\n
To build your own json file.
Create a json file named applist.json, inside build directory, and add the content to the json file.
name Type Data cat string utilities icon string putty.svg keyword string putty,ssh,terminal launch string putty.exe.Wine name string putty path string /usr/bin/wine args string /composer/bin/putty.exe template string abcdesktopio/oc.template.gtk.wine
You can read the following help lines.
cat is the category, choose the most appropriate value in the list : [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ]
icon is the name of the icon. abcdesktop support only svg icon file format. To get the icon file, look at the link https://raw.githubusercontent.com/abcdesktopio/oc.apps/main/icons/putty.svg
keyword is a list of the keywords to find the application. Set the value to putty,ssh,terminal.
launch is the X11 Class name of the window. To get this value, we need to run the application on GNU/Linux (read the dedicated chapter below).
name is the name of the application. Set the value to putty.
path is the binary path to run the application.
template is the name of the parent image. The default image parent for wine is abcdesktopio/oc.template.gtk.wine.
Save the putty icon file on SVG format to the icons directory.
"},{"location":"buildapplications.wine/#build-putty-your-from-applistjson","title":"Build putty your from applist.json","text":"
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can not download this file.
Save make.js it to you build directory. make.js is a nodejs JavaScript file. Node.js\u00ae is a JavaScript runtime built on Chrome's V8 JavaScript.
If you don't have already nodejs installed on your system, go to the website nodejs download website and follow the instructions to install nodejs.
putty-wine.d is the Dockerfile for your putty abcdesktop application
Read the content of the Dockerfile putty-wine.d. List all labels, and confirm that the icon file is uuencoded format. Uuencoding is a form of binary-to-text encoding.
Now it's time to build your putty app. Run the command docker build command.
[+] Building 21.6s (10/10) FINISHED \n => [internal] load build definition from putty-wine.d 0.0s\n => => transferring dockerfile: 12.46kB 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk.wine:dev 0.0s\n => CACHED [1/6] FROM docker.io/abcdesktopio/oc.template.gtk.wine:dev 0.0s\n => [2/6] RUN wineboot --init 10.9s\n => [3/6] RUN wget -O /composer/bin/putty.exe https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe 0.6s \n => [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 9.2s \n => [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.4s \n => [6/6] WORKDIR /home/balloon 0.0s \n => exporting to image 0.4s \n => => exporting layers 0.3s \n => => writing image sha256:2cbe019726e67ecb83af74e944ff932705086e632ab4a57dec719be5e7e654cd 0.0s \n => => naming to docker.io/library/putty-wine.d 0.0s\n
Now, your new image is ready to run.
"},{"location":"buildapplications.wine/#run-your-putty-for-abcdesktop","title":"Run your putty for abcdesktop","text":"
The API server does not know that you have built your new 2048 application. You have to send a message to the API server, to update the API Server images cache list.
Using your web browser or a curl command, call a http request to notify the API Server
http://localhost/API/manager/buildapplist\n
This http request return a json object, with all docker images details :
Reloead your web browser connected on the abcdesktop website, and log your again as anonymous.
In the search area, type putty. Click on the Putty Application.
Wine is starting your Putty application :
Great, you have build a abcdesktop image for Putty, build the application image Putty. You can push this image to your own private docker registry.
"},{"location":"buildapplications.wine/#optional-add-a-persistant-userreg-and-systemreg-windows-registry-files","title":"Optional add a persistant user.reg and system.reg windows registry files","text":"
This is a quick and dirty solution, but it works fine
Your wine configuration is stored in /composer/.wine, and by default user.reg and system.reg are located in the WINEPREFIX directory. The user.reg and system.reg files build when wine starts.
To make a copy of fresh running putty-wine.d image. Start your putty-wine.d image and using a shell located the new user.reg and system.reg files
docker ps -a | grep putty-wine\n65d95f4e7717 putty-wine.d:latest \"/composer/appli-doc\u2026\" 16 seconds ago Up 15 seconds anonymous-putty-wine-7877d100de0b4363ad24240d67032c8c\n
name Type Data cat string games debpackage string 2048-qt icon string 2048_logo.svg keyword string 2048 launch string 2048-qt.2048-qt name string 2048 path string /usr/games/2048-qt template string abcdesktopio/oc.template.gtk
You can read the following help lines, or fill the json missing value by yourself.
cat is the category, choose the most appropriate value in the list : [ 'office', 'games', 'graphics', 'development', 'utilities', 'education' ]
debpackage is the name of the 2048 ubuntu package. To find the package name, look at the link 2048 Ubuntu Package.
icon is the name of the icon. abcdesktop support only svg icon file format. To get the icon file, look at the link https://upload.wikimedia.org/wikipedia/commons/1/18/2048_logo.svg
keyword is a list of the keywords to find the application. Set the value to 2048.
launch is the X11 Class name of the window. To get this value, we need to run the application on GNU/Linux (read the dedicated chapter below).
name is the name of the application. Set the value to 2048.
path is the binary path to run the application.
template is the name of the parent image. The default image parent is abcdesktopio/oc.template.gtk. You will learn how to customize your own template image, in next chapter.
Save the 2048 icon file on SVG format to the icons directory. You should have this file in the icons directory as the output of the ls icons command :
2048_logo.svg\n
"},{"location":"buildapplicationsgnulinux/#build-your-new-image-2048","title":"Build your new image 2048","text":"
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can not download this file.
Save make.js it to you build directory. make.js is a nodejs JavaScript file. Node.js\u00ae is a JavaScript runtime built on Chrome's V8 JavaScript.
If you don't have already nodejs installed on your system, go to the website nodejs download website and follow the instructions to install nodejs.
In the build directory, you should have
drwxr-xr-x 5 devuser staff 160 Mar 11 15:15 .\ndrwxr-xr-x+ 31 devuser staff 992 Mar 11 15:15 ..\n-rw-r--r-- 1 devuser staff 265 Mar 11 15:15 applist.json\ndrwxr-xr-x 3 devuser staff 96 Mar 11 15:02 img\n-rw-r--r-- 1 devuser staff 8036 Mar 11 15:12 make.js\n\n./img:\ntotal 8\ndrwxr-xr-x 3 devuser staff 96 Mar 11 15:02 .\ndrwxr-xr-x 5 devuser staff 160 Mar 11 15:15 ..\n-rw-r--r-- 1 devuser staff 1909 Oct 31 2015 2048_logo.svg\n
Run the command make.js
node make.js\n
make.js build a new DockerFile for the 2048 application. Remember, all application images use container images.
The new files 2048.d and 2048.md have been generated :
2048.d is the Dockerfile for your 2048 abcdesktop application
2048.md is the documentation file for your 2048 abcdesktop application
Read the content of the Dockerfile 2048.d. List all labels, and confirm that the icon file is uuencoded format. Uuencoding is a form of binary-to-text encoding.
Now it's time to build your 2048 app. Run the command docker build command.
[+] Building 32.0s (10/10) FINISHED \n => [internal] load build definition from 2048.d 0.0s\n => => transferring dockerfile: 33B 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk:latest 1.4s\n => [1/6] FROM docker.io/abcdesktopio/oc.template.gtk:latest@sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 0.4s\n => => resolve docker.io/abcdesktopio/oc.template.gtk:latest@sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 0.0s\n => => sha256:f3c98362fb80f5edde423b895422fc183e2728257de1d4352c4f70c7b43835fb 4.50kB / 4.50kB 0.0s\n => => sha256:f3c3f03bd0b5cda9f56703a4ba1b9d96d5ff2be3c03bee1831ce30dc98bb3b62 8.93kB / 8.93kB 0.0s\n => [2/6] RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends 2048-qt && apt-get clean 27.5s\n => [3/6] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 0.5s\n => [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 0.5s \n => [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.4s \n => [6/6] WORKDIR /home/balloon 0.0s \n => exporting to image 1.1s \n => => exporting layers 1.1s \n => => writing image sha256:a861af06b7f0dfa19fcde19ee8848bfee65807f852b082d9314e68676966895a 0.0s\n => => naming to docker.io/library/2048.d\n
Check that your image is ready on your system:
Run the docker images command
docker images\n
You should read on the stdout more lines, only 2048.d is listed here :
REPOSITORY TAG IMAGE ID CREATED SIZE\n2048.d latest a861af06b7f0 About a minute ago 1.17GB\n
The total image size of 2048.d is 1.17GB.
The 2048.d does not use 1.17GB, but only the difference between the 2048 image and the source image abcdesktopio/oc.template.gtk.
"},{"location":"buildapplicationsgnulinux/#update-the-cache-application-list","title":"Update the cache application list","text":"
The API server receives a new image event from docker. To run the new applications just refresh you web browser page.
"},{"location":"buildapplicationsgnulinux/#run-your-new-application","title":"Run your new application","text":"
Return to your abcdesktop website http://localhost and log in as Anonymous.
At the right corner, write in the search bar the keyword 2048
Click on the 2048 icon, and start your first abcdesktop application :
Great it's a good job, you have build your own abcdesktop 2048 application.
Now you can spent a lot of time to reach the 2048 score. Have fun !
"},{"location":"buildapplicationsgnulinux/#get-launch-and-path-values","title":"Get launch and path values","text":"
To get the X11 class name of the 2048 game, we need to install it on a Linux host. You can use abcdesktop as a Linux host or choose your own.
If you want to use abcdesktop as a GNU/Linux host
Open the url http://localhost, in your web browser, to start a simple abcdesktop container. You will use this container to install the 2048 application and fill the missing values launch and path.
http://localhost\n
You should see the abcdesktop.io home page.
Press the Connect with Anonymous access, have look
At the right corner, write in the search bar the keyword shell
Click on the Web Shell icon, a new Terminal WebShell is now opened :
Run the command
sudo apt-get update \n
The default password is lmdpocpetit ( if your admin did not change it, otherwise ask to the administrator )
Run the installation command
sudo apt-get install -y 2048-qt \n
You should read the output, during the installation process
On Ubuntu, the games are installed in a dedicated directory /usr/games.
The new 2048 window is opening in the background. You can minimise the shell window to play to the 2048 game, but this is not the goal of this chapter. To show the shell window again, click on the shell icon on the upper right corner.
Run the command to list each X11 windows and get the WMClass name.
wmctrl -lx \n
wmctrl is a command that can be used to interact with an X Window manager, and can query the window manager for information, and it can request that certain window management actions be taken.
-l list the windows being managed by the window manager.
-x include WM_CLASS in the window list
Great, look at the third value, this is what we are looking for :
The launch is 2048-qt.2048-qt
The path is /usr/games/2048-qt
You can now close your web browser and fill your json file, by yourself
"},{"location":"changelog/#commits-on-jun-22-2023","title":"Commits on Jun 22, 2023","text":""},{"location":"changelog/#ocuser-heartbeat","title":"oc.user heartbeat","text":"
to fix issue: https://github.com/abcdesktopio/oc.pyos/issues/2#issuecomment-1607671669 use WEBSOCKIFY_HEARTBEAT in od.config file OR use proxy-read-timeout and proxy-send-timeout annotations to kind: Ingress
add --heartbeat=${WEBSOCKIFY_HEARTBEAT} to /usr/bin/websockify to keep session
"},{"location":"changelog/#commits-on-jun-16-2023","title":"Commits on Jun 16, 2023","text":""},{"location":"changelog/#ocuser-ocpyos-change-default-namespace","title":"oc.user, oc.pyos change default namespace","text":"
oc.pyos: support namespace change, new option in od.config file to change the default abcdesktop namespace
oc.user: support namespace change
"},{"location":"changelog/#commits-on-jun-9-2023","title":"Commits on Jun 9, 2023","text":""},{"location":"changelog/#ocpyos-clusterrole-and-role","title":"oc.pyos: ClusterRole and role","text":"
"},{"location":"changelog/#commits-on-may-24-2023","title":"Commits on May 24, 2023","text":""},{"location":"changelog/#add-new-label-role-for-each-core-service","title":"add new label role for each core service","text":"
abcdesktop/role
"},{"location":"changelog/#commits-on-may-17-2023","title":"Commits on May 17, 2023","text":""},{"location":"changelog/#replace-daemonset-by-deployment","title":"Replace daemonset by deployment","text":"
-- replace daemonset by deployment for oc.nginx and oc.pyos pods https://github.com/abcdesktopio/oc.user/commit/f498e2ab2a5f0af5525a16b5d108c8a1a1f22442
"},{"location":"faq/","title":"FAQ","text":"
List of questions and answers relating to abcdesktop.io
A Kubernetes Cloud provider can be Amazon EKS, DigitalOcean DOKS, Azur AKS, Google GKE, or any of others cloud provider with a Kubernetes service.
This list of questions and answers is relating network, talking about
port-forward
NodePort
LoadBalancer
Ingress Controler
WebSocket timeout
"},{"location":"faq/#how-can-i-reach-my-new-service-on-a-kubernetes-cloud-provider","title":"How can I reach my new service on a Kubernetes cloud provider ?","text":"
I was attempting to deploy the ABCDesktop (kubernetes-version-3.0) for testing my setup with a few of my own desktop applications. Everything worked fine when tested locally in my Ubuntu (22.04) machine. I then thought to deploy the setup in a Kubernetes cloud provider with 3 nodes cluster. How can I reach my new hosted service on a Kubernetes cloud provider (Amazon EKS, Digital Ocean, Azur AKS, Google GKE) ?
Then open your web browser to reach the http://localhost
Then open your web browser, you get the home page, login using LDAP auth or Anonymous auth.
Then login, and you get a pod user.
For the first time, you may get a timeout error, if container images can't be downloaded in less than 180 seconds on the worker node.
"},{"location":"faq/#how-can-i-expose-my-new-service-with-an-external-ip-address","title":"How can I expose my new service with an external IP address ?","text":"
I was attempting to deploy the abcesktop (kubernetes-version-3.0) for testing my setup with a few of my own desktop applications. Everything worked fine when tested locally in my Ubuntu (22.04) machine. I then thought to deploy the setup in a Kubernetes cloud provider with 3 nodes cluster. How can I expose my new service with an external IP address ?
To expose the service with an external IP address, we need to update the nginx service type. The default type on your own desktop is type: NodePort, the nginx service type on a Kubernetes cloud provider becomes type: LoadBalancer.
Delete the previous abcdesktop's nginx service
kubectl delete service nginx -n abcdesktop\n
Create a new nginx service yaml file named nginx-lb.yaml The new nginx service type is LoadBalancer
Wait for an EXTERNAL-IP from you kubernetes cloud provider
kubectl get service nginx -n abcdesktop\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nnginx LoadBalancer 10.245.105.75 <pending> 80:31581/TCP 64s\n
You get the EXTERNAL-IP for your LoadBalancer
kubectl get service nginx -n abcdesktop\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nnginx LoadBalancer 10.245.172.53 161.35.246.4 80:30443/TCP 2m36s\n
In case, the LoadBalancer service returns the EXTERNAL-IP 161.35.246.4 Then open your web browser to reach this EXTERNAL-IP 161.35.246.4.
Login using Philip J. Fry
And you should get the fry desktop
"},{"location":"faq/#how-can-i-expose-my-new-service-with-ingress-controller","title":"How can I expose my new service with Ingress Controller ?","text":"
A Kubernetes Ingress Controller acts as a reverse proxy.
In the Ingress, define a path to the abcdesktop's nginx service.
The request path: / is proxyfied to service named nginx in abcdesktop namespace.
"},{"location":"faq/#how-to-prevent-the-connection-from-closing-after-60-seconds-of-inactivity","title":"How to prevent the connection from closing after 60 seconds of inactivity ?","text":"
My desktop is disconnected after 60 seconds of inactivity, and the message \"Your abcdesktop session has been disconnected. Please reload this page\" appears.
The message Your abcdesktop session has been disconnected. Please reload this page appears when the websockify websocket is disconnected.
Add an heartbeat value to send a ping to the client every INTERVAL seconds
Edit the od.config file, add to the desktop.envlocal option 'WEBSOCKIFY_HEARTBEAT':'30'
To get more informations how to Keepalive in websockets
Timeout is a main feature to preserve from unnecessary network bandwidth.
"},{"location":"faq/#how-to-prevent-the-connection-from-closing-after-60-seconds-of-inactivity-with-an-ingress-controller","title":"How to prevent the connection from closing after 60 seconds of inactivity with an Ingress Controller ?","text":"
My desktop is disconnected after 60 seconds of inactivity, and the message Your abcdesktop session has been disconnected. Please reload this page appears.
To prevent the connection from closing after 60 seconds of inactivity through Ingress Controller, make sure the Ingress Controller isn't configured to automatically terminate long connections. The default value nginx's ingress controller is 60 seconds.
Update the default values for nginx.ingress.kubernetes.io/proxy-read-timeout and nginx.ingress.kubernetes.io/proxy-send-timeout annotations to more than 60 seconds.
"},{"location":"faq/#how-to-add-an-application","title":"How to add an application ?","text":"
To add an application : - get the json file of an application - push the json file to the abcdesktop's images endpoint
wget https://raw.githubusercontent.com/abcdesktopio/oc.apps/main/2048-alpine.d.3.0.json\ncurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine.d.3.0.json\n
The first start will pull the 2048 image, so it can take a while.
"},{"location":"faq/#how-to-get-the-json-file-of-a-containerized-application","title":"How to get the json file of a containerized application ?","text":"
To get the json file of a containerized application, you can use docker command or crictl command
"},{"location":"faq/#my-application-doesnt-start-how-to-get-log-files","title":"My application doesn't start. How to get log files ?","text":"
Open the webshell and read the logs files.
The log files are /tmp/lastcmd.log, /tmp/lastcmdenv.log and /tmp/NAME OF THE APPLICATION.log.
/tmp/lastcmd.log the init command log file created by /composer/appli-docker-entrypoint.sh
/tmp/lastcmdenv.log the last environment variables file
/tmp/NAME OF THE APPLICATION.log the command log file for the application
"},{"location":"guiappsoddocker/","title":"GUI application with containers","text":""},{"location":"guiappsoddocker/#other-related-projets-about-vdi-and-containers","title":"Other related projets about VDI and containers","text":"
A lot of different projets already exists using containers as a VDI. I just write list of projets, you can explore them :
https://github.com/mviereck/x11docker x11docker allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.
https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-ubuntu-18-04 By using noVNC and TigerVNC, you can run native applications inside a Docker container and access them remotely using a web browser.
HW accelerated GUI apps on Docker Describe How to containerizing a GUI app. Really easy to understand, a good article.
https://github.com/fcwu/docker-ubuntu-vnc-desktop docker-ubuntu-vnc-desktop is a Docker image to provide web VNC interface to access Ubuntu LXDE/LxQT desktop environment.
Dockerize GUI app This project dockerize typical GUI app so that you can visit it in browser. Really good technical solutions.
https://www.kasmweb.com Streaming containerized apps and desktops.
Docker and Wine Docker image that includes Wine and Winetricks for running Windows applications on Linux and macOS
n.eko This app uses Web RTC to stream a desktop inside of a docker container (doesn't use VNC)
"},{"location":"guiappsoddocker/#x11-window-system-architecture","title":"X11 window system architecture","text":"
In a *nix system a GUI application has the role of \u201cX client\u201d. Each time it redraws its content a sequence of graphics commands is encoded into the X protocol using a library (usually Xlib) and transmitted into the X11 socket. At the other end an X server reads such commands from the socket and renders them onto a display. [ source HW accelerated GUI apps on Docker]
"},{"location":"guiappsoddocker/#containerizing-a-gui-app","title":"Containerizing a GUI app","text":"
Taking a look at the X window system architecture it\u2019s clear that in order to make our containerized GUI apps capable of drawing on a screen we need to give it write access to the X11 socket, and we need an X server to consume and render the graphics commands onto a display.
We can approach this problem from three angles:
"},{"location":"guiappsoddocker/#all-in-one-container","title":"All in one container","text":"
we can bundle X11 server with our container image. All process run inside the same container.
we can share the X11 server socket with the X11 client container as unix file socket on an external shared volume. Applications and X11 server run in dedicated containers.
we can share the X11 server socket with the container using TCP. X11 uses TCP as its transport protocol. Applications and X11 server run in dedicated containers.
To guarantee isolation, abcdesktop/io.io run X11 server and X11 client in separated container. X11 server and X11 client share the socket as unix file socket on a dedicated external shared volume.
The unix file socket reduce the network tcp overhead.
The unix file socket garantes no latency troubleshooting. X11 uses a chatty protocol so that the network latency has a large impact when using X11
Local is best, thus server and application need to run on the same node, if it can.
"},{"location":"guiappsoddocker/#html5-web-browser-as-remote-display","title":"HTML5 Web Browser as remote DISPLAY","text":"
The Web Browser does not support X11 protocol. We need a graphical desktop system to paint the virtual DISPLAY in a <canvas> HTML element.
"},{"location":"guiappsoddocker/#replace-x11-server-from-xorg-by-a-xvnc","title":"Replace X11 Server from X.org, by a Xvnc.","text":"
Xvnc is the X VNC (Virtual Network Computing) server. It is based on a standard X server, but it has a virtual screen rather than a physical one. X applications display themselves on it as if they were using a normal X display, but they can only be accessed via a VNC. So Xvnc is really two servers in one. To the applications it is an X server, and to the remote VNC users it is a VNC server.
"},{"location":"guiappsoddocker/#convert-vnc-tcp-socket-in-to-a-websocket","title":"Convert VNC TCP socket in to a WebSocket","text":"
The web browser does not support VNC (RFB Protocol) and the TCP socket natively. We need to translate TCP socket, into a WebSocket. This can be done using :
websockify Websockify just translates WebSockets traffic to normal socket traffic. Websockify accepts the WebSockets handshake, parses it, and then begins forwarding traffic between the client and the target in both directions.
ws-tcp-bridge A websocket to tcp proxy server, using nodejs which bridges websockets and tcp servers in either direction.
"},{"location":"guiappsoddocker/#use-a-vnc-javascript-client","title":"Use a VNC Javascript client","text":"
The web browser receives the RFB protocol in the WebSocket and then paints the data into a canvas.
noVNC is VNC client JavaScript library. noVNC follows the standard VNC protocol, but unlike other VNC clients it requires WebSockets support.
abcdesktop is based on kubernetes, from the abcdesktop infrastructure to the user applications. At the login page, the user chooses a login provider and authenticates himself, then abcdesktop engine creates a pod for this user.
An application can run as ephemeral container or as pod, it MUST be a container.
An application can ask to start another container, like application helper for a web browser. By example, firefox container can ask to start videolan application. Then firefox is running inside a container, videolan is running inside another separated container.
abcdesktop manages a mimetype database for each application. The mimetype database is updated on the fly then new application is added.
Application resource limit is supported (CPU, memory) on pod.
The share memory /dev/shm between X.org and application is supported with the ephemeral container.
Application support ACL (Access Control List). Access to an application can be allowed for a user and denied for another one, using group membership for example.
Volumes can be mounted for an application or not for security reason.
Application can bind a dedicated network by using annotations.
Application can use GPU by using labels.
"},{"location":"rdgp/","title":"Rdgp","text":"
Privacy Notice: protecting your personal data
The changes to the French and European regulation on the protection of personal data come into force on 25 May 2018.
If you want to interact with abcdesktop via www.abcdesktop.io and other corporate sites, personal data will be collected about you in order to process your request and/or send you the desired information.
In this case, abcdesktop is committed to the protection, confidentiality and security of personal data.
This Privacy Notice provides information on how abcdesktop, and its potential subcontractors or partners, process your personal data in this context.
This document may be supplemented by specific information in the case of a specific service where appropriate (e.g. shareholders club) or in a commercial context. If you are an abcdesktop customer, you will also find a dedicated personal data protection policy on the website demo.abcdesktop.io.
Why does abcdesktop process your personal data collected on abcdesktop.io and on its corporate websites? On demo.abcdesktop.io, you can ask a question or receive specific abcdesktop information (for example a press release). abcdesktop processes the personal data collected via the contact forms in place for these purposes. Some websites may require additional information which is processed specifically to enable access to a private or dedicated space, such as shareholders club.
We only process your personal data once we have your consent in the context of you request.
Your data is only kept for the length of time needed to fulfil your request. This takes into account your unsubscription to certain newsletters or sending out press releases.
What types of data are processed? abcdesktop may be required to process your personal data which we collect directly via the online form. It includes identity data, such as your name, surname, email address and sometimes your telephone number and postal address if necessary.
Who can see your data? Data collected about you is intended for abcdesktop\u2019s internal services and if any, service providers. In the case of a legal procedure, processed data may also be communicated to the relevant authorities.
Is your data processed outside the European Union? The data collected may be processed outside the European Union if deemed necessary and according to the nature of your request. In this case, abcdesktop will take all necessary steps to protect your data.
What are your rights? You have the right to withdraw your consent and stop any future use of your data. You can exercise your right to obtain information and access to the data, to rectify them in case of inaccurate data related to you and to delete the data when conditions are fulfilled.
How can you contact the Data Protection Officer? If you wish to exercise your rights over your data, you can write to the following address along with proof of identity:
Orange Sa Attention: Data Protection Officer (DPO) 78 rue Olivier de Serres 75505 Paris Cedex 15
Possibility to make a request to the Data protection authority, the CNIL in France: If your interaction with abcdesktop is not satisfactory, you can also lodge a complaint with the Commission Nationale de l\u2019Informatique et des Libert\u00e9s (CNIL), which is the regulatory authority in charge of personal data protection in France.
How is your data secured? Orange ensures your data remains secure and confidential, including certain processing carried out by subprocessor.
For this purpose, the appropriate technical and organisational measures are in place to prevent the loss, misuse, alteration and deletion of your personal data. These measures are adapted according to the level of sensitivity of this processed data and the level of risk that the processing or implementation of it presents.
Modification of the personal data protection notice This Privacy Notice is subject to change.
"},{"location":"requirements/","title":"Requirements","text":""},{"location":"requirements/#prerequisites-for-setup-abcdesktop","title":"Prerequisites for setup abcdesktop","text":"
Architecture x86-64 ( arm-64 is not yet available)
15 GB of free space to store sample applications ( gimp, libreoffice writer, libreoffice calc, libreoffice math, libreoffice impress, firefox ) and core image services
a kubernetes cluster ready to run greater or equal to 1.24
Use Docker Desktop with kubernetes, https://www.docker.com/products/docker-desktop/
"},{"location":"runapplications.wine/","title":"Run docker image for Windows using Wine","text":""},{"location":"runapplications.wine/#requirements","title":"Requirements","text":"
Read the previous chapter Build abcdesktop docker image
Read the Chapter Authentification explicit for LDAP Directory Services is recommended but not mandatory.
Wine (originally an acronym for \"Wine Is Not an Emulator\") is a compatibility layer capable of running Windows applications on several POSIX-compliant operating systems, such as Linux, macOS, & BSD. Instead of simulating internal Windows logic like a virtual machine or emulator, Wine translates Windows API calls into POSIX calls on-the-fly, eliminating the performance and memory penalties of other methods and allowing you to cleanly integrate Windows applications into your desktop.
To run Windows applications abcdesktop.io use WineHQ. A dedicated image template source is ready to use as source of others Windows applications. This image template is named abcdesktopio/oc.template.gtk.wine.50
Start pulling this template image :
docker pull abcdesktopio/oc.template.gtk.wine\n
Look at the Dockerfile to build the abcdesktopio/oc.template.gtk.wine on the https://hub.docker.com/ web site.
For a better support, we are using the 32 bits library, as i386 libs on GNU/Linux. Your can read in the Dockerfile, how the abcdesktopio/oc.template.gtk.wine is created.
"},{"location":"runapplications.wine/#run-notepadexe-for-windows-in-a-docker-container","title":"Run notepad.exe for Windows in a Docker container","text":"
In this chapter we are going to run notepad.exe for Windows inside a docker container for abcdesktop.io.
Start an abcdesktop session. You can use an authenticated session using an authentication provider external or explicit, or you can do this exercice using Anonymous Authentification also know as the authentication provider implicit.
In this chapter we choose an Anonymous, DO NOT CLOSE YOUR WEB BROWSER, you should not be able de reconnect with the same user context, and have to restart this exercice at the begining, else you can choose to configure abcdesktop with ldap authentification.
Login using the Anonymous authentification provider.
Keep your web browser open, then on your host, open a terminal shell window and run the command
The option --filter ancestor=abcdesktopio/oc.user.18.04 ask to filter only container with the image ancestor set with value abcdesktopio/oc.user.18.04 You should read the container with the image named abcdesktopio/oc.user.18.04
docker ps --filter ancestor=abcdesktopio/oc.user.18.04\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n86df3ff126ac abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 3 minutes ago Up 3 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp g-5f4300d2-7c8e-43c6-89ab-f85bd8b68138\n
Read the values CONTAINER ID and NAMES
In this example, the CONTAINER ID is 86df3ff126ac and the NAME is g-5f4300d2-7c8e-43c6-89ab-f85bd8b68138.
We are using the /tmp volume of this CONTAINER ID 86df3ff126ac
Using an anonymous authnetification, the name of your container id is an UUID, for example 57be1e5b-0b14-4c05-ae79-75e9a03c77be. The name of the tmp volume is tmp-57be1e5b-0b14-4c05-ae79-75e9a03c77be
Run a docker inspect -f \"{{ .HostConfig.Binds }}\" and add your CONTAINER ID as parameter.
Note: if your are using an LDAP authentification, the name of your container id is the username, for example hermes. The name of the tmp volume is tmp-hermes
Now, start a new docker container with the same HostConfig.Bings as your oc.user container. The -v parameter is the first entry of the result in the previous command docker inspect -f \"{{ .HostConfig.Binds }}\"
docker run -it -v TMP_VOLUMENAME:/tmp --user balloon abcdesktopio/oc.template.gtk.wine bash\n
For example with an Anonymous user:
docker run -it -v tmp-5f4300d2-7c8e-43c6-89ab-f85bd8b68138:/tmp --user balloon abcdesktopio/oc.template.gtk.wine bash \n
Great, you have started a new docker container. The oc.user containter and your new container are sharing the same volume mounted as /tmp. You get a prompt inside the new docker container.
To run a command as administrator (user \"root\"), use \"sudo <command>\".\nSee \"man sudo_root\" for details.\n\nballoon@8684ae888f74:~$\n
And now start the notepad.exe with wine
balloon@8684ae888f74:/$ wine notepad\n
After few seconds you should read on the standard error
balloon@8684ae888f74:/$ wine notepad\n0015:err:clipboard:convert_selection Timed out waiting for SelectionNotify event\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0014:err:ole:get_local_server_stream Failed: 80004002\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}\n0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}\n0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002\n0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002\n0012:err:ole:get_local_server_stream Failed: 80004002\nCould not find Wine Gecko. HTML rendering will be disabled.\nwine: configuration in L\"/composer/.wine\" has been updated.\n
And the notepad window should be open inside your Web browser
This Windows application is running inside a docker container on abcdesktop.io desktop.
In the Terminal shell press CTRL+C to stop the wine notepad process, then type exit to quit your shell in container.
^C0032:fixme:console:CONSOLE_DefaultHandler Terminating process 8 on event 0\nballoon@4c4d806557dc:~$ exit\nexit\n
It's time to build your own abcdesktop application image. Read the next chapter Build abcdesktop.io docker image for Windows using Wine.
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"1.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"1.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"1.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"1.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
The authentification configuration is set in the od.config file. In this chapter you will need to update the od.config configuration file. This update differs depending on the configuration docker mode or kubernetes mode.
Read the Update your configuration file and apply the new configuration file section to make change in od.config file for docker, or edit the abcdesktop.yaml file for kubernetes cluster.
Edit your od.config pyos configuration file, and set the value to the authmanagers dictionnay with empty values for implicit, explicit, and external, as describe :
The config file od.config has changed and od.py running inside the container should restart. If it doesn't, restart your docker-compose to ake sure that the od.py the your new od.config file.
docker-compose restart
Start your web browser and open the URL http://localhost
The Web home page should only show the title abcdesktop.io. There is no authmanagers available.
Great you can now add some value to authenticate your users.
In the authmanagers implicit section, authmanagers explicit section, and authmanagers external section, you have learned how to defined the providers. You can set a complete authmanagers dictionnary as described for example :
"},{"location":"1.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"1.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"1.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"1.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"1.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"1.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"1.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string not used by ldap, only used by Active Directory providers dictionnary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"1.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set with the same value in providers configuration and config_ref.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
"},{"location":"1.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this domain as default domain True ldap_protocol string protocol type. ldap or ldaps for LDAP directory services ldaptls_require_cert boolean The default value is False. tls_require_cert apply only if ldap_protocol is set to ldaps. Allow LDAPS connection if the ldaps server hostname does not match CommonName peer certificate. In production, set this value to True This will disable the ldap option call : ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) False basedn string LDAP Base Distinguished Names ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. [ '192.168.1.12', '192.168.1.13' ] IP Address or FQDN values scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos auth credentials. the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))"},{"location":"1.0/config/authexplicit-ldap/#hands-on-configure-auth-using-an-openldap-for-docker","title":"Hands-on : Configure Auth using an OpenLDAP for Docker","text":""},{"location":"1.0/config/authexplicit-ldap/#requirements","title":"Requirements","text":"
You should have all read and done the hands-on :
Setup abcdesktop.io in docker mode
Edit your configuration file in docker mode
"},{"location":"1.0/config/authexplicit-ldap/#openldap-docker-image-for-testing","title":"OpenLDAP Docker Image for testing","text":"
To configure abcdesktop.io to use an explicit authentification, we need a directory service. We use an OpenLDAP Docker Image for testing with provioned values.
Read the OpenLDAP Docker Image for testing documentation on the url abcdesktop OpenLDAP Docker Image for testing
"},{"location":"1.0/config/authexplicit-ldap/#update-the-docker-composeyml-file","title":"Update the docker-compose.yml file","text":"
Update the docker-compose.yml file to add an ldap as directory server
The specific openldap section is describe as a service. The new complete docker-compose.yml file is now :
Add a new dictionnary object named ldapconfig to the configuration file. These values come from the LDAP structure of OpenLDAP Docker Image for testing
Note: the server name is the name of the service entry
Save your new od.config file.
The config file od.config has changed and od.py running inside the container should restart. If it doesn't, restart your docker-compose to make sure that the od.py the your new od.config file.
docker-compose restart
Open the URL:http://localhost
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
"},{"location":"1.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-docker-image-for-testing","title":"The LDAP structure of OpenLDAP Docker Image for testing","text":""},{"location":"1.0/config/authexplicit-ldap/#basedn","title":"BaseDN","text":"
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"1.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"1.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"1.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"1.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"1.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"1.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"1.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"1.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"1.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"1.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
The explicit authentification support the directory services ldap, ldaps, and Microsoft Active Directory.
Configuration sample for Microsoft Active Directory
Read the specific chapter on LDAP LDAP and LDAPS explicit authmanagers
"},{"location":"1.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
implicit is the easyest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionnary object and contains an anononymous provider.
anononymous provider always permit authentification, and create a uuid as userid. anononymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Press the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command docker ps -a
docker ps -a\n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
abcdesktop.io use a Model\u2013view\u2013controller (usually known as MVC) is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
Controller Description AccountingController accounting data json and ebnf format AuthController authenticate user ComposerController CRUD main services (like createDesktop, runApplication) CoreController get configuration and user message info ManagerController manage pyos PrinterController CRUD printer object StoreController CRUD key value data UserController retrieve user information"},{"location":"1.0/config/controllers/#access-permission","title":"Access Permission","text":"
The AccountingController and ManagerController access is protected with a source ip address filter. The access control filter is defined in a dictionary. Each dictionary entry use the controller name and with an entry permitip. The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or the controller name is not set, all ip source address are allowed the send a request to the controller.
The controllers dictionnary is defined in the od.config file. By default the configuration permit private network defined in rfc1918 and rfc4193. Get more information about the private network.
By default others controllers access is enabled, without ip restriction.
If the source ip address is not allowed, the response is a HTTP status code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"1.0/config/editconfig/","title":"Edit pyos core service configuration file","text":"
Update the Pyos core service configuration file depends, if your are running abcdesktop.io on native Docker (Non-Cluster Host) or in Kubernetes mode.
In Kubenetes Mode: Read the setup guide, to make change in the abcdesktop yaml file. Setup and configuration guide for kubernetes abcdesktop
In Docker Mode : Read the following chapter
This chapter 'Edit Pyos configuration file', apply only for native Docker (Non-Cluster Host), read the dedicated chapter if you are running abcdesktop.io with a kubernetes cluster.
"},{"location":"1.0/config/editconfig/#edit-pyos-code-service-configuration-file-in-docker-mode","title":"Edit Pyos code service configuration file in docker mode","text":""},{"location":"1.0/config/editconfig/#requirements","title":"Requirements","text":"
Create a directotry named abcdesktop in your home directory.
cd\nmkdir -p abcdesktop\n
To edit you configuration file in abcdesktop.io docker mode, download the sample configuration file and save it as od.config where docker-compose.yml file is located.
Download sample configuration file od.config then rename the od.config.reference file as od.config
"},{"location":"1.0/config/editconfig/#stop-your-docker-compose","title":"Stop your docker-compose","text":"
"},{"location":"1.0/config/editconfig/#check-that-the-new-colors-are-painted-in-front","title":"Check that the new colors are painted in front :","text":"
Open the url http://localhost, in your web browser, to start a simple abcdesktop.io container.
http://localhost\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colors and you should have it as background color :
Great, you can easily update your configuration file od.config. We will make some changes during the next exercices.
"},{"location":"1.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"1.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"1.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"1.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"1.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"1.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"1.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"1.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"1.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"1.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"1.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"1.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"1.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
"},{"location":"1.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"1.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"1.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"1.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"1.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"1.0/config/webrtc/","title":"Sound server configuration","text":"
By default abcdesktop use the module-http-protocol-tcp from pulseaudio sound server to send wav data to the web browser
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"1.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"1.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"1.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
"},{"location":"1.0/setup/k8smacosinstallation/","title":"MacOS/X Kubernetes","text":""},{"location":"1.0/setup/k8smacosinstallation/#enable-kubernetes-on-macosx","title":"Enable Kubernetes on MacOS/X","text":"
Click on the Docker icon in MacOS/X menu bar.
Then choose Preferences...
The following window should appear :
Choose Kubernetes, then check the Enable Kubernetes
Kubernetes stay in Starting state during few minutes. Please wait to download all container images and for kubernetes installation process.
On the bottom you should read next Docker RunningKubernetes Running
Great, you have installed Kubernetes on MacOS/X.
"},{"location":"1.0/setup/k8smacosinstallation/#run-the-new-kubectl-command","title":"Run the new kubectl command","text":"
Open a Terminal, then run the command kubectl version
Great, the kubectl command works. It's time to deploy abcdesktop.io
"},{"location":"1.0/setup/k8swindows10installation/","title":"Windows 10 Kubernetes Installation","text":""},{"location":"1.0/setup/k8swindows10installation/#enable-kubernetes-on-windows-10","title":"Enable Kubernetes on Windows 10","text":"
Click on the Docker Desktop icon in the windows tray.
The following menu should appear, choose Settings :
The following window should appear :
Choose Kubernetes, then check the Enable Kubernetes
Press the Apply and Restart button. Please wait to download all container images and for kubernetes installation process.
On the bottom you should read next Docker Running and Kubernetes Running.
Great, you have installed Kubernetes on Windows 10.
"},{"location":"1.0/setup/k8swindows10installation/#run-the-new-kubectl-command","title":"Run the new kubectl command","text":"
Open a Terminal cmd.exe, then run the command kubectl version
This chapter is optional you can skip it if you think that's your kubernetes etcd database access is secured.
Etcd secrets database is the place where all k8s secrets are stored. By default secrets are stored in plain text. If an attacker can access Etcd database, he know then all your secrets.
To secure secrets, we will crypt them at API server level. All secrets will be stored encrypted in Etcd and then be uncrypted at API server level when accessed by Kubernetes.
Here are officials available encryption providers (Kubernetes Official page ):
Providers for Kubernetes encryption at restNameEncryptionStrengthSpeedKey LengthOther ConsiderationsidentityNoneN/AN/AN/AResources written as-is without encryption. When set as the first provider, the resource will be decrypted as new values are written.aescbcAES-CBC with PKCS#7 paddingStrongestFast32-byteThe recommended choice for encryption at rest but may be slightly slower than secretbox.secretboxXSalsa20 and Poly1305StrongFaster32-byteA newer standard and may not be considered acceptable in environments that require high levels of review.aesgcmAES-GCM with random nonceMust be rotated every 200k writesFastest16, 24, or 32-byteIs not recommended for use except when an automated key rotation scheme is implemented.kmsUses envelope encryption scheme: Data is encrypted by data encryption keys (DEKs) using AES-CBC with PKCS#7 padding, DEKs are encrypted by key encryption keys (KEKs) according to configuration in Key Management Service (KMS)StrongestFast32-bytesThe recommended choice for using a third party tool for key management. Simplifies key rotation, with a new DEK generated for each encryption, and KEK rotation controlled by the user.
aesgcm provider seem's a bit complex to be used. kms provider needs to use a dedicated container and will not work out of the box. For abcdesktop we will use aescbc provider
At this state, all created secrets will be crypted in etcd
"},{"location":"1.0/setup/kubernetes_secure_etcd/#verify-secrets-encryption","title":"Verify secrets encryption","text":""},{"location":"1.0/setup/kubernetes_secure_etcd/#create-a-secret","title":"Create a secret","text":"
To verify secret encryption we will install etcd client package
apt-get install etcd-client\n
Run the following command:
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \\\n--cert=/etc/kubernetes/pki/etcd/ca.crt --key=/etc/kubernetes/pki/etcd/ca.key \\\n--endpoints=https://localhost:2379 get /registry/secrets/default/secret1\n
Output will appear with the following text k8s:enc:aescbc:v1:key1: followed by binary values.
Secrets are now encoded with aescbc v1 provider using key1
"},{"location":"1.0/setup/novnc/","title":"Use noVNC as VNC Client","text":""},{"location":"1.0/setup/novnc/#requirements","title":"Requirements","text":"
A running dockerd last version
An access to the docker public registry
An access to the ubuntu repository
An access to the github website to run git clone command
An access to the bintray.com website to download a file
AbcDeskopio use the amazing projet noVNC. noVNC is a VNC client JavaScript library. Before you start using noVNC get some information about it:
noVNC is an open source VNC client. noVNC is both a VNC client JavaScript library as well as an application built on top of that library. noVNC runs well in any modern browser including mobile browsers (iOS and Android). Many companies, projects and products have integrated noVNC including OpenStack, OpenNebula, LibVNCServer, and ThinLinc. See the Projects and Companies wiki page for a more complete list with additional info and links.
noVNC uses many modern web technologies so a formal requirement list is not available. However these are the minimum versions we are currently aware of:
Xvnc TigerVNC 1.10.0 - built Dec 20 2019 07:12:07\nCopyright (C) 1999-2019 TigerVNC Team and many others (see README.rst)\nSee https://www.tigervnc.org for information on TigerVNC.\nUnderlying X server release 12001000, The X.Org Foundation\n\n\nTue Mar 3 11:05:48 2020\n vncext: VNC extension running!\n vncext: Listening for VNC connections on /tmp/.x11vnc (mode 0600)\n vncext: created VNC server for screen 0\n
Check that the Xvnc TigerVNC release is 1.10.0.
Great, you have installed an X11 server inside a docker container, and the Xvnc server is listening for VNC connections on /tmp/.x11vnc.
"},{"location":"1.0/setup/novnc/#install-the-ws-tcp-bridge","title":"Install the ws-tcp-bridge","text":"
ws-tcp-bridge translate websocket to tcp and have to listen on websocket tcp port 6081 and forward to local unix socket unix:/tmp/.x11vnc.
ws-tcp-bridge is a nodejs server, then we need to install nodejs and npm.
proxy mode ws -> tcp\nforwarding port 6081 to unix:/tmp/.x11vnc\n
Great, ws-tcp-bridge is running and forward websocket to Xvnc unix socket
"},{"location":"1.0/setup/novnc/#get-the-ip-address-on-your-first-container-myx11server","title":"Get the ip address on your first container myx11server","text":"
On the container myx11server, to get the container local IP Address, install the package net-tools package
Great, nginx web server is running, now we need to configure the proxy pass rule with the myx11server container's ip address.
"},{"location":"1.0/setup/novnc/#check-that-the-container-webserver-can-ping-the-container-myx11server","title":"Check that the container webserver can ping the container myx11server","text":"
Install the ping command, run the command
apt-get install -y iputils-ping\n
Get the myx11server container's ip address write before and replace xxx.xxx.xxx.xxx with the myx11server container's ip address
ping -c 5 xxx.xxx.xxx.xxx\n
In this example, i replace xxx.xxx.xxx.xxx by 172.17.0.2
ping -c 5 172.17.0.2\nPING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.\n64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.108 ms\n64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.365 ms\n64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.206 ms\n64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.181 ms\n64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.206 ms\n\n--- 172.17.0.2 ping statistics ---\n5 packets transmitted, 5 received, 0% packet loss, time 4074ms\nrtt min/avg/max/mdev = 0.108/0.213/0.365/0.084 ms\n
The container webserver should receive package from the myx11server container
"},{"location":"1.0/setup/novnc/#edit-the-nginx-configuration-file","title":"Edit the nginx configuration file","text":"
Edit the nginx configuration file /etc/nginx/sites-enabled/default with the vim editor.
vim /etc/nginx/sites-enabled/default\n
In the server section, after the line location you should found :
location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n
Add a /websockify route to proxyfied the websocket http request to your myx11server container.
by the ip address of your myx11server container, for example replace http://XXX.XXX.XXX.XXX:6081/ with http://172.17.0.2:6081/
proxy_pass http://172.17.0.2:6081/;\n
The complete server section in the nginx file is for example
server {\n listen 80 default_server;\n listen [::]:80 default_server;\n\n # SSL configuration\n #\n # listen 443 ssl default_server;\n # listen [::]:443 ssl default_server;\n #\n # Note: You should disable gzip for SSL traffic.\n # See: https://bugs.debian.org/773332\n #\n # Read up on ssl_ciphers to ensure a secure configuration.\n # See: https://bugs.debian.org/765782\n #\n # Self signed certs generated by the ssl-cert package\n # Don't use them in a production server!\n #\n # include snippets/snakeoil.conf;\n\n root /var/www/html;\n\n # Add index.php to the list if you are using PHP\n index index.html index.htm index.nginx-debian.html;\n\n server_name _;\n\n location / {\n # First attempt to serve request as file, then\n # as directory, then fall back to displaying a 404.\n try_files $uri $uri/ =404;\n }\n\n location = /websockify {\n proxy_buffering off;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n proxy_pass http://172.17.0.2:6081/; # change this line \n }\n\n\n # pass PHP scripts to FastCGI server\n #\n #location ~ \\.php$ {\n # include snippets/fastcgi-php.conf;\n #\n # # With php-fpm (or other unix sockets):\n # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;\n # # With php-cgi (or other tcp sockets):\n # fastcgi_pass 127.0.0.1:9000;\n #}\n\n # deny access to .htaccess files, if Apache's document root\n # concurs with nginx's one\n #\n #location ~ /\\.ht {\n # deny all;\n #}\n}\n
Now, it's time to reload your nginx configuration, by running the command
nginx -s reload\n
"},{"location":"1.0/setup/novnc/#connect-to-your-nginx-website","title":"Connect to your nginx website","text":"
Run a web browser like Google Chrome or Firefox and go to your nginx website. If you run the nginx website on a separated host replace the name with your hostname or his ip address.
Go to the URL http://localhost or the ip address of your own server
In this exercice in use localhost in the screenshot because all containers are running on my desktop, you may have to replace localhost by ip address, or the fully qualified domain name of your own server.
http://localhost\n
or
http://YOUR_SERVER_IP_ADDRESS\n
You should read the Welcome to nginx! message in your web browser
Go to the noVNC URL http://localhost/noVNC/vnc.html
http://localhost/noVNC/vnc.html\n
Remember, remplace localhost by your fully qualified domain name if need
You should read the Welcome to nginx! message in your web browser
To change the connection settings, click on the settings icon and choose Advanced You have to fill the WebSocket properties as follow:
The Encrypt is not checked
Set the Host as localhost (or your host ip address where your contianers are running )
Set the Port to 80
Set the Path to /websockify
Then, press the Connect Button
"},{"location":"1.0/setup/novnc/#install-libreoffice-as-a-docker-application","title":"Install libreoffice as a docker application","text":"
On your host, where your container myx11server is running. Open a new shell window and start a new docker container named mylibreoffice.
docker run -it -v myshared:/tmp --name mylibreoffice ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install libreoffice application, run the install libreoffice command in your mylibreoffice container.
apt-get update\napt-get install -y libreoffice\n
Run the soffice command to start Libreoffice
export DISPLAY=:0.0\nsoffice --writer\n
You should read the output
(soffice:7412): dbind-WARNING **: 16:32:03.928: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-HN3KrNpoAq: Connection refused\n
On the web browser, the application Libreoffice Writer should appear.
Type some text data like 'Hello, I am running inside a docker container'
"},{"location":"1.0/setup/novnc/#install-the-windows-manager-openbox-on-your-myx11server-container","title":"Install the windows manager openbox on your myx11server container","text":"
To move, resize, close, the windows applications, we need a windows manager. abcdesktop is the windows manager. OpenBox is a lightweight, powerful, and highly configurable stacking window manager with extensive standards support.
Run the install openbox command in your myx11server container.
apt-get install -y openbox\n
Set the DISPLAY environment variable to :0.0 and start openbox in background
export DISPLAY=:0.0\nopenbox &\n
Now, you can move the Libreoffice windows. All windows are decorated.
Great you have installed the novnc gateway, and you just need a HTML Web browser to use a Libreoffice
"},{"location":"1.0/setup/retrieve_all_images/","title":"Get all applications for abcdesktop","text":"
Lot of application are ready to use for abcdesktop. All applications are opensource.
You can download the image list from the applist file, or run the command the pull command where $APP is the name of your application.
docker pull abcdesktopio/$APP.d\n
for example to download libreoffice calc, run the command
docker pull abcdesktopio/calc.d\n
Read the list of all applications on the application list page
"},{"location":"1.0/setup/uninstalldockermode/","title":"Uninstall abcdesktop.io for non-cluster hosts","text":""},{"location":"1.0/setup/uninstalldockermode/#commands-to-uninstall-abcdesktopio","title":"Commands to uninstall abcdesktop.io","text":"
Go to the abcdesktop directory (where the docker-compose.yml is located), and run the bash commands :
echo \"starting abcdesktop uninstall commands\"\ndocker-compose -p abcdesktop down\necho \"stop and remove abcdesktop services\"\ndocker-compose rm -s -v -f\necho \"remove all abcdesktop user container\"\ndocker ps --filter \"label=type=x11server\" -q | xargs docker stop\ndocker ps --filter \"label=type=x11server\" -q | xargs docker rm\necho \"remove all abcdesktop images\"\ndocker images --filter=reference='abcdesktopio/*:*' --format \"{{.Repository}}:{{.Tag}}\" | xargs docker rmi\necho \"remove all user volumes\"\ndocker volume ls -f label=type=x11server -q | xargs docker volume rm\necho \"abcdesktop is uninstalled\"\n
Great, you have uninstalled abcdesktop in non-cluster hosts.
"},{"location":"1.0/setup/vnc/","title":"abcdesktop.io from scratch","text":"
The goal of this chapter is to learn how abcdesktop.io works. You should not repeat the process in production, but prefer use a Dockerfile and the docker build command.
Xvnc TigerVNC 1.7.0 - built Dec 5 2017 09:25:01\nCopyright (C) 1999-2016 TigerVNC Team and many others (see README.txt)\nSee http://www.tigervnc.org for information on TigerVNC.\nUnderlying X server release 11905000, The X.Org Foundation\n\n\nMon Mar 2 11:43:56 2020\n vncext: VNC extension running!\n vncext: Listening for VNC connections on all interface(s), port 5900\n vncext: created VNC server for screen 0\n
Great, you have installed an X11 server inside a docker container, and the Xvnc server is listening for VNC connections on the tcp port 5900. Keep this container running.
We will use the host tcp port 5900 to connect VNC Client.
"},{"location":"1.0/setup/vnc/#use-vnc-client-to-connect-to-your-first-container-myx11server","title":"Use VNC client to connect to your first container myx11server","text":"
From your host or from another host, install a VNC client. You can use your prefered VNC Client for your operating system or the RealVNC's VNC Viewer. You can download the RealVNC's VNC Client, by following the link https://www.realvnc.com/fr/connect/download/viewer/
Run the VNC Viewer, and set the hostname where the container myx11server is running. In the following example.
Here I am using VNC Viewer on Mac OS/X and I did set the hostname to localhost.
This is a getting started guide to understand how abcdesktop works, so we did not set a password to protect the VNC access. This is not the best practices guide for production installations. As we did not set a password to protect the VNC access, you have to confirm the uncrypted connection warning dialog box and then press the Continue button.
This is just an example to understand how abcdesktop works, so we did not set a password to protect the VNC access.
You need to confirm the uncrypted connection warning dialog box. Press the Continue button.
A black screen should appear :
Keep this VNC Client running, we will use this display to show our applications later.
"},{"location":"1.0/setup/vnc/#install-an-x11-application-as-a-docker-application","title":"Install an x11 application as a docker application","text":"
On your host, where your container myx11server is running. Open a new shell window and start a new docker container named myapp. The myapp container access to the volume myshared and mount it to /tmp.
docker run -it -v myshared:/tmp --name myapp ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install standart application like xedit, xman or xeyes, install the package x11-apps.
Run those commands in your myx11server container.
apt-get update\napt-get install -y x11-apps\n
Set the DISPLAY environment variable to :0.0 and then start the xedit command.
export DISPLAY=:0.0\nxedit\n
On the VNC Viewer, the application xedit should appear.
Great, you can run a X11 application inside a dedicated docker container, and use your myx11server as DISPLAY. But you can't move, resize or close the xedit window.
"},{"location":"1.0/setup/vnc/#install-the-windows-manager-openbox-on-your-myx11server-container","title":"Install the windows manager openbox on your myx11server container","text":"
To move, resize, close, the windows applications, we need a windows manager. abcdesktop use the windows manager openbox. OpenBox is a lightweight, powerful, and highly configurable stacking window manager with extensive standards support.
Run the install openbox command in your myx11server container.
apt-get install -y openbox\n
Set the DISPLAY environment variable to :0.0 and then start openbox.
export DISPLAY=:0.0\nopenbox\n
The Openbox message appear to the sdterr
Openbox-Message: Unable to find a valid menu file \"/var/lib/openbox/debian-menu.xml\"\n
Now, you can move the window xedit. The windows are decorated.
"},{"location":"1.0/setup/vnc/#remove-the-myapp-container","title":"Remove the myapp container","text":"
Activate the window shell with your myapp running container, and press CTRL+C
You can remove your docker container, to clean up your environment
docker rm myapp\n
"},{"location":"1.0/setup/vnc/#install-another-x11-application-as-a-docker-application","title":"Install another x11 application as a docker application","text":"
On your host, where your container myx11server is running, open a new shell window and start a new docker container named myapp.
docker run -it -v myshared:/tmp --name myfirefox ubuntu:latest\n
You should see a prompt like :
root@96df62a73e4f:/# \n
To install firefox application, run the install firefox command in your myfirefox container.
apt-get update\napt-get install -y firefox\n
Run the firefox command
export DISPLAY=:0.0\nfirefox\n
You should read the output
\n(firefox:1831): LIBDBUSMENU-GLIB-WARNING **: 14:42:14.737: Unable to get session bus: Failed to execute child process ?dbus-launch? (No such file or directory)\n
On the VNC Viewer, the application firefox should appear.
Check that firefox works and go to your favorite web site.
"},{"location":"1.0/setup/vnc/#clean-your-setup","title":"Clean your setup","text":"
To clean your work space, stop the running containers myapp myfirefox myx11server, then remove them. We also need to remove the shared volume myshared
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"2.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"2.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"2.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"2.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
"},{"location":"2.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"2.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"2.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"2.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"2.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"2.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"2.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. A bind operation is used to authenticate clients to the directory server, to establish an authorisation identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description default_domain string set the default domain name, if user does not prefix the login by domain\\s. default_domain is only used by Active Directory provider providers dictionary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"2.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionary object and must contain a key name. The key name must be set with the same value in provider configuration and config_ref.
The provider is formatted as a dictionary. Example for a provider defined as planet
Variable name Type Description config_ref string For increased readability , the configuration is defined in a dedicated and separated dictionary as (key,value) 'config_ref': 'planet', where key is config_ref and value is the dictionary variable name. enable boolean True to enable or False to disable the provider configuration
"},{"location":"2.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this ldap configuration as default (if more than one ldap auth provider is defined) True auth_only boolean Do not run ldap queries, only use to run authentication False auth_type string authentification protocol to bind the ldap server. Values can be 'KERBEROS', 'NTLM' or 'SIMPLE' The default value is 'SIMPLE' basedn string LDAP base Distinguished Name ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. This entry must be prefixed by the protocol ldap or ldaps for each server [ 'ldap://192.168.1.12', 'ldaps://192.168.1.13' ] LDAP server address IP Address or FQDN value scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos keytab file the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))serviceaccount dictionary entries to defined service account credentials formatted like { 'login': 'cn=admin,dc=planetexpress,dc=com', 'password': 'GoodNewsEveryone' } or { 'login': 'file://config/serviceaccount/login', 'password': 'file://config/serviceaccount/passwd' }"},{"location":"2.0/config/authexplicit-ldap/#ldap-service-account","title":"ldap service account","text":"
Ldap service account permits service account binding. A service account can be defined using clear text login and password data, or as file reference login and password starting by file://.
If login starts by file://, then pyos open the defined file to read login data.
If password starts by file://, then pyos open the defined file to read password data.
The file reference file:// for login and password is used to read kubernetes secret file data.
"},{"location":"2.0/config/authexplicit-ldap/#configure-auth-using-the-openldap-container","title":"Configure Auth using the OpenLDAP container","text":""},{"location":"2.0/config/authexplicit-ldap/#openldap-container-for-testing","title":"OpenLDAP container for testing","text":"
To configure abcdesktop to use an explicit authentification, we need a directory service. We use an OpenLDAP container for testing with provisioned values. docker-test-openldap from rroemhild works fine ans id very useful.
Read the OpenLDAP container for testing documentation on the url abcdesktop OpenLDAP Docker Image for testing
"},{"location":"2.0/config/authexplicit-ldap/#update-the-odconfig-configuration-file","title":"Update the od.config configuration file","text":"
Update the od.config configuration file.
Add the explicit entry to the dictionary authmanagers.
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
"},{"location":"2.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-container-for-testing","title":"The LDAP structure of OpenLDAP container for testing","text":""},{"location":"2.0/config/authexplicit-ldap/#basedn","title":"BaseDN","text":"
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"2.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"2.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"2.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"2.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"2.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"2.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"2.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"2.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"2.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"2.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionary object and contains an explicit provider.
The explicit provider support the directory services ldap, ldaps, and Microsoft Active Directory, and SIMPLE, NTLM and KERBEROS protocols.
Configuration sample for Microsoft Active Directory with KERBEROS protocol :
Read the specific chapter on LDAP explicit authmanagers
"},{"location":"2.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
implicit is the easiest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionary object and contains an anonymous provider.
anonymous provider always permits authentification, and create a uuid as userid. anonymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Select the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command
kubectl get pods -n abcdesktop \n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
When an anonymous user close his session, the anonymous home directory is deleted.
Great, you have check how the implicit Authentification configuration works.
"},{"location":"2.0/config/authmetaexplicit/","title":"Authentification metaexplicit for Microsoft Active Directory services with trust relationships","text":""},{"location":"2.0/config/authmetaexplicit/#authmanagers-metaexplicit-object","title":"authmanagers metaexplicit object","text":"
The metaexplicit authentification manager contains only one provider. The provider must be defined as metadirectory.
Variable name Type Description providers dictionary { 'metadirectory': { 'config_ref': 'coporateconfig', 'enabled': True }}"},{"location":"2.0/config/authmetaexplicit/#metadirectory-provider-configuration","title":"metadirectory provider configuration","text":"
The metadirectory provider is defined as a dictionnary object and must contain key name. The key name must be set as the name of a dictionaryin the config_ref.
A metadirectory provider must contain a ldap attribut to describe the original DOMAIN and sAMaccountName. The ldap attribut is defined as join_key_ldapattribut.
coporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } } \n
Pyos binds the metadirectory ldap server with serviceaccount credentials Pyos read the ldap attribut description value to get the user's trusted domain.
For example :
description: AD\\john\n
Then pyos look for provider AD configuration and process authentification on domain AD
The metadirectory accounts can be disabled. The ldap attribut userAccountControl is not read on metaDirectory provider. The account can have the bit UF_ACCOUNT_DISABLE set or not.
A service account must defined for a metadirectory provider. The service account is used to bind the metadirectory.
"},{"location":"2.0/config/authmetaexplicit/#complete-example-with-a-metadirectory-provider-and-active-directory-user-domain","title":"Complete example with a metadirectory provider and active directory user domain","text":"
The user's domain mane is AD. The meta domain name is CORPORATE. The meta domain use a dedicated attribut join_key_ldapattribut
authmanagers: {\n #\n # define the meta explicit manager\n # This is the trusted external forest for the followed domain\n #\n 'metaexplicit': {\n 'providers': {\n # define the metadirectory provider\n # only one metadirectory provider is supported \n 'metadirectory': { \n 'config_ref': 'coporateconfig', \n 'enabled': True } \n }\n },\n\n # \n # define the Active Directory provider for each DOMAIN\n # define two domains in two disctinct forest with a trust relationship \n # \n 'explicit': { \n # define an Active Directory provider AD \n 'AD': { 'config_ref': 'adconfig', 'enabled': True },\n # define an Active Directory provider ANOTHER\n 'ANOTHER': { 'config_ref': 'anotherconfig', 'enabled': True } \n }\n} # end of authmanagers\n\n# In this example ldap attribut's description contains AD\\myuser or ANOTHER\\myuser \ncoporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } }\n\n\n# \n# define the first DOMAIN AD\n# The adconfig ref for domain AD\n#\nadconfig : { 'AD': { 'ldap_basedn' : 'DC=ad,DC=domain,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.ad.domain.local',\n 'domain' : 'AD',\n 'auth_type' : 'NTLM',\n 'domain_fqdn' : 'AD.DOMAIN.LOCAL',\n 'servers' : [ 'ldap://192.168.7.12' ] } }\n\n#\n# define the second DOMAIN ANOTHER\n# The anotherconfig ref for domain ANOTHER\n#\nanotherconfig : { 'ANOTHER': {\n 'ldap_basedn' : 'DC=another,DC=super,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.another.super.local',\n 'domain' : 'ANOTHER',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn' : 'ANOTHER.SUPER.LOCAL',\n 'servers' : [ 'ldap://192.168.10.12' ],\n 'kerberos_realm': 'AD.SUPER.LOCAL' } }\n
metadirectory support the foreign security principal (FSP) to query security principal in the trusted external forest. These objects are created in the foreign security principals container of the domain. metadirectory support isMemberOf on foreign security principal.
The user's SID of domain 'AD' or 'ANOTHER' is NOT read. A new ldap bind is done using the trusted domain on metadirectory provider and not unsing the service account.
The ldap query is build : ( \"search_base={q.basedn}, search_scope={q.scope}, search_filter={filter}\" )
To get more information about foreign security principal (FSP), read :
Foreign Security Principals Container
Active Directory: Foreign Security Principals and Special Identities
"},{"location":"2.0/config/balloon/","title":"balloon user entry in od.config","text":"
balloon is the default generic user.
The balloon user is created inside the oc.user container
abcdesktop.io use a Model\u2013view\u2013controller (usually known as MVC) is a software design pattern commonly used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
Controller Description AccountingController accounting data json and ebnf format AuthController authenticate user ComposerController CRUD main services (like createDesktop, runApplication) CoreController get configuration and user message info ManagerController manage pyos PrinterController CRUD printer object StoreController CRUD key value data UserController retrieve user information"},{"location":"2.0/config/controllers/#access-permission","title":"Access Permission","text":"
The AccountingController and ManagerController access is protected with a source ip address filter. The access control filter is defined in a dictionary. Each dictionary entry use the controller name and with an entry permitip. The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or the controller name is not set, all ip source address are allowed the send a request to the controller.
The controllers dictionnary is defined in the od.config file. By default the configuration permit private network defined in rfc1918 and rfc4193. Get more information about the private network.
By default others controllers access is enabled, without ip restriction.
If the source ip address is not allowed, the response is a HTTP status code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"2.0/config/desktop/","title":"desktop options in od.config","text":"
The od.config contains options to describe how the oc.user and applications containers have to be created. Options differ if abcdesktop.io is running in docker mode or in kubernetes mode.
The desktop.usex11unixsocket force the X11 server to use local unix socket. The name of the X11 unix socket is /tmp/.X11-unix/X0
If this feature is enable: A container application need a the DISPLAY. The DISPLAY is in this case :0.0. The container application and the oc.user container share the same volume /tmp, and share the X11 unix socket is /tmp/.X11-unix/X0.
If this feature is disable: A container application need a DISPLAY. The DISPLAY is :0.0 (don't think at IPADDRESS_OF_X11_SERVER:0.0 to protect X11 access control). The two containers share the same network stack by default. The X11 server NEED to listen to a TCP or UDP port.
You can disable this features, but you have to replace the default TigerVNC by another X11 Server and a VNC Server. You can choose (x.org + x11vnc) for example, but you need more CPU ressource than TigerVNC.
TigerVNC does not support to listen on TCP Port. TigerVNC is a X11 and a VNC Server.
Set the desktop.usex11unixsocket value to True in most case, and this should not be changed.
The type of desktop.shareipcnamespace is a string. The default value is 'shareable' This option permit user contain to share the ipc namespace with application
Value Description '' Use daemon\u2019s default. 'none' Own private IPC namespace, with /dev/shm not mounted. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system\u2019s IPC namespace.
If not specified, daemon default is used, which can either be 'private' or 'shareable', depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues.
Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built (typically C/OpenMPI, C++/using boost libraries) high performance applications for scientific computing and financial services industries.
If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using \"shareable\" mode for the main (i.e. \u201cdonor\u201d) container, and containers can access \"container:\".
Default value desktop.shareipcnamespace : 'shareable'
This option describes how the default home directory for user user ballon should be created :
None: no dedicated volume is created, the oc.user container use a directory inside the container. All user data will be removed at logout.
'volume': This value is only recommended in docker mode. 'volume'option create a dedicated volume, the oc.user container and applications may share this volume. User home data are persistent.
'persistentVolumeClaim': This value is only avalaible in kubernetes. PersistentVolumeClaim option use a persistentVolumeClaim to create the user home directory. The persistentVolumeClaim can be mapped to differents storage data (like NFS, iSCSI, RBD...). Read more about persistentVolumeClaim on the kubernetes.io website. You need the set the value of desktop.persistentvolumeclaim or create a default Persistent Volume Claim named 'abcdesktop-pvc'
desktop.persistentvolumeclaim is the name of the Persistent Volume Claim if the desktop.homedirectory is set to 'persistentVolumeClaim'. The PVC (Persistent Volume Claim) must exist.
Run the kubectl get pvc command to list the persistent volume claim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nabcdesktop-pvc Bound abcdesktop-pv 5Gi RWO abcdesktop-standard 170d\n
desktop.remotehomedirectorytype is a list of string. Each string describe if the remount access to a directory is allowed. example [ 'cifs', 'webdav' ]
For each entry in the desktop.remotehomedirectorytype list, abcdesktop.io try to mount the remote file system using data from the implicit auth provider.
If desktop.remotehomedirectorytype contains 'cifs' and if the authentification provider get homeDrive and homeDirectory attributs then abcdesktop request the kubernetes abcdesktop/CIFS Driver to mount the remote filesystem. The user find a mount point named homeDrive value, and mounted to homeDirectory.
The desktop.allowPrivilegeEscalation option allow a user to run a sudo command. The execve system call can grant a newly-started program privileges that its parent did not have, such as the setuid or setgid Linux flags.
The default value is False You should only set desktop.allowPrivilegeEscalation to run sudo command.
The desktop.imagePullSecret is the name of the secret used by Kubernetes to access to the private registry. The type of desktop.imagePullSecret is a string. This option is only available in Kubernetes mode, and anly used if you need to store the abcdesktop docker image on a private registry.
Example to build a registry Kubernetes secret named abcdesktopregistrysecret with the docker hub.
The desktop.useprintercontainer is boolean, to use printer cupsd service as an separated container. This value is only available in kubernetes mode. The default value is False.
The desktop.usesoundcontainer is boolean, to use pulseaudio service as a separated container. This value is only available in kubernetes mode. The default value is False.
This option is used when presistent volume data mount a nfs storage. The uid and gid of /home/balloon must be set to the default value of (balloon:balloon) (4096:4096).
Add 'CUPS_SERVER: '/tmp/.cups.sock' only if desktop.useprintercontainer is True. Add 'PULSE_SERVER: '/tmp/.pulse.sock' only if desktop.usesoundcontainer is True.
desktop.nodeselector is a dictionary. This option permits to assign user pods to nodes. It specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). The most common usage is one key-value pair.
desktop.username describes the balloon user created inside the oc.user container. The type of desktop.username is string. The default value is 'balloon'.
If you change this value, you have to rebuild your own oc.user file The script oc.user in Dockerfile oc.user :
desktop.userhomedirectory describes the homedirectory of the user created inside the oc.user container. The type of desktop.userhomedirectory is string. The default value is /home/balloon.
If you change this value, you have to rebuild your own oc.user file The script oc.user in Dockerfile oc.user :
The desktop.uselocaltime is boolean, to use host value of /etc/localtime. The default value is False. If desktop.uselocaltime is True, this add a volume mapping from host file /etc/localtime to container file /etc/localtime.
WARNING desktop.desktopuseinternalfqdn is an experimental feature, keep this value to False in production
desktop.desktopuseinternalfqdn describes the content of the payload data in the JWT Desktop Token. The default value is False.
Nginx front end act as a reverse proxy. This reverse proxy use the FQDN of the user's pod to route http request. If this value is set to False the payload data in the JWT Desktop Token contains the IP Address of the user Pod. If this value is set to True the payload data in the JWT Desktop Token contains the FQDN of the user Pod.
If you CAN NOT add endpoint_pod_names in the coredns configuration, you MUST set desktop.desktopuseinternalfqdn to False. This choice is less secure.
To set desktop.desktopuseinternalfqdn to True value, you have to update the coredns ConfigMap.
Or you can also use the replace command kubectl create -n abcdesktop configmap abcdesktop-config --from-file=od.config -o yaml --dry-run | kubectl replace -n abcdesktop -f -
"},{"location":"2.0/config/editconfig/#check-your-changes","title":"Check your changes","text":"
To check that the new colours are presents in front, open the url http://localhost:30443, in your web browser, to start a simple abcdesktop.io container.
http://localhost:30443\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colour and you should have it as background colour :
Great, you can easily update your configuration file od.config.
"},{"location":"2.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"2.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"2.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"2.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"2.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"2.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"2.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"2.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"2.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"2.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"2.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"2.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"2.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
"},{"location":"2.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"2.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"2.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"2.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"2.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"2.0/config/webrtc/","title":"Sound server configuration","text":"
By default abcdesktop use the module-http-protocol-tcp from pulseaudio sound server to send wav data to the web browser
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"2.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"2.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"2.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
"},{"location":"3.0/features/#volumes","title":"Volumes","text":""},{"location":"3.0/features/#users-home-directories","title":"User's home directories","text":"
Define volumes to retain user's home directory files. User's home directory can be mounted as hostPath on each worker node or as persistentVolumeClaim. Get more informations about the persistentVolume and persistentVolumeClaim to retain user datas.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/","title":"application runtime Ephemeral container and Pod","text":"
An abcdesktop application can run as a kubernetes ephemeral container or as a pod.
An ephemeral container can access to share memory shm with the X11 server. An ephemeral container run always on the same node as the user pod, where the graphical container 'X11 server' is running. An ephemeral container does not prevent cpu and memory resource limits.
A pod can't access to share memory with the X11 server. An kubernetes pod can run on separated node from the user's pod node. For a pod, you can specify resource limits.
To describe the difference between ephemeral-container and pod-application, we use the game 2048, one instance come from alpine based on gtk, the second one come from ubuntu based on qt
2048-alpine is a GTK application, and is defined to run as ephemeral-container
2048-ubuntu is a QT application, and is defined to run as a kubernetes pod
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#start-a-shell-to-your-abcdesktop-server","title":"Start a shell to your abcdesktop server","text":"
Get a shell to your abcdestkop server.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#download-2048-alpine-and-2048-ubuntu-json-files","title":"Download 2048-alpine and 2048-ubuntu json files","text":"
$ ls -la *.json\n-rw-r--r-- 1 root root 29183 Dec 28 16:24 2048-alpine.d.3.0.json\n-rw-r--r-- 1 root root 29099 Dec 28 16:24 2048-ubuntu.d.3.0.json\n
Look at the label oc.containerengine for each json file
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#read-the-label-occontainerengine-for-2048-alpine","title":"Read the label oc.containerengine for 2048-alpine","text":"
This application 2048-alpine will start as an ephemeral_container
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#read-the-label-occontainerengine-for-2048-alpine_1","title":"Read the label oc.containerengine for 2048-alpine","text":"
This application 2048-ubuntu will start as a pod_application, it's a pod.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#put-2048-alpine-and-2048-ubuntu-applications-to-your-abcdesktop-service","title":"PUT 2048-alpine and 2048-ubuntu applications to your abcdesktop service","text":"
curl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine.d.3.0.json\ncurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-ubuntu.d.3.0.json\n
Each curl command returns a complete json document.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Using a web browser, open the abcdesktop service url. If your are running abcdesktop on your local device, the url should be :
http://localhost:30443\n
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#choose-to-login-as-hermes","title":"Choose to login as hermes","text":"
Login in as the user Hermes Conrad
Login: Hermes Conrad
Password: hermes
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#your-desktop-is-created","title":"Your desktop is created","text":"
Your desktop is created. By default your dock is empty.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#look-for-2048","title":"Look for 2048","text":"
In the search text area, write the keyword 2048
The two applications appear in the search result applications area.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#start-each-2048-application","title":"Start each 2048 application","text":"
Start 2048-ubuntu and 2048-alpine application
2048-ubuntu and 2048-alpine applications start. The application 2048-alpine can start quickly than the application 2048-ubuntu.
2048-alpine is an ephemeral container attached to the graphical container.
2048-ubuntu is a complete kubernetes pod.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#lets-have-a-look-on-your-server-side","title":"Let's have a look on your server side","text":""},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#get-pod-application","title":"Get pod application","text":"
Get the running pod using kubectl get pods -n abcdesktop
The application 2048-ubuntu is listed as a pod. The application 2048-ubuntu is a pod. The prefix is the $userid-app for example hermes-app-2048-ubuntu-4dd6f, followed by the application name 2048-ubuntu and a uuid.
The application 2048-alpine is not a pod.
The application 2048-alpine is listed as an ephemeral container, inside the user pod hermes-db906
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#ephemeral-container-versus-pod-application","title":"Ephemeral container versus Pod application","text":"
An ephemeral container can access to share memory shm with the X11 server. An ephemeral container run always on the same node as the X11 server.
A pod can't access to share memory with the X11 server. An Kubernetes pod can run on a separated node from the X11 server.
If your application need to share memory with X11 server, when you have to set the oc.containerengine label to ephemeral_container.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#compare-kubernetes-ephemeral-container-and-pod","title":"Compare kubernetes ephemeral container and pod","text":""},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#kubernetes-ephemeral-container","title":"Kubernetes ephemeral container","text":"
Use an ephemeral container to start an application have some advantages and some disadvantages.
If you configure 2048-alpine with gtk to start as a pod and not as an ephemeral container, you will get the BadShmSeg error
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#install-the-application-2048-alpine-with-error","title":"Install the application 2048-alpine-with-error","text":"
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#put-2048-alpine-with-error-applications-to-your-abcdesktop-service","title":"PUT 2048-alpine-with-error applications to your abcdesktop service","text":"
curl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d @2048-alpine-with-error.d.3.0.json\n
Using a web browser, open the abcdesktop service url. If your are running abcdesktop on your local device, the url should be :
http://localhost:30443\n
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#choose-to-login-as-hermes_1","title":"Choose to login as hermes","text":"
Login in as the user Hermes Conrad
Login: Hermes Conrad
Password: hermes
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#your-desktop-is-created_1","title":"Your desktop is created","text":"
Your desktop is created. By default your dock is empty.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#look-for-2048_1","title":"Look for 2048","text":"
In the search text area, write the keyword 2048
The three applications appear in the search result applications area.
Start the 2048 (alpine gtk with error) application. It uses shared segment with X Window System, it must run as an ephemeral container, but as a pod it fails. The application starts but exit after few seconds, the content of the application does not appear.
In the abcdesktop menu, choose Settings |\u00a0Tasks.
Then select the Logs button. The error was 'BadShmSeg (invalid shared segment parameter)'.
(org.gnome.TwentyFortyEight:36): Gdk-WARNING **: 10:14:26.185: The program 'org.gnome.TwentyFortyEight' received an X Window System error.\nThis probably reflects a bug in the program.\nThe error was 'BadShmSeg (invalid shared segment parameter)'.\n(Details: serial 820 error_code 128 request_code 131 (MIT-SHM) minor_code 3)\n(Note to programmers: normally, X errors are reported asynchronously;\nthat is, you will receive the error a while after causing it.\nTo debug your program, run it with the GDK_SYNCHRONIZE environment\nvariable to change this behavior. You can then get a meaningful\nbacktrace from your debugger if you break on the gdk_x_error() function.)\n
If you are running QT application, you can disable the X11 MIT Shared Memory Extension support. The MIT-SHM is an extension to the X server which allows faster transactions by using shared memory. Container isolation blocks it. Qt applications can be forced not to use the extension, by setting the variable QT_X11_NO_MITSHM value to 1.
QT_X11_NO_MITSHM=1 \n
Note your can also use QT_XCB_NO_MITSHM value to 1
For chromium application disabled shm-usage with the parameters --disable-dev-shm-usage
disable-dev-shm-usage get more informations about the dev shm usage and all chromium parameters
no-sandbox: get more informations about the no-sandbox parameters.
"},{"location":"3.0/application/applicationruntime_ephemeralcontainer_pod/#troubleshooting-cannot-open-display-or-could-not-connect-to-display-error","title":"Troubleshooting cannot open display or could not connect to display error","text":"
When you start an application the log file write cannot open display error
qt.qpa.xcb: could not connect to display 172.17.0.10:0\nqt.qpa.plugin: Could not load the Qt platform plugin \"xcb\" in \"\" even though it was found.\nThis application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.\n\nAvailable platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.\n
Using the web shell inside an abcdesktop session, start netstat -a command line
The result should show that the process Xvnc is listening on tcp port number 6000
hermes:~$ netstat -anp\nActive Internet connections (servers and established)\nProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name \ntcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 82/Xvnc \n
If Xvnc is not listening on tcp port number 6000
Update od.config to make Xvnc listen on tcp port number 6000
Open your od.config file, and look at the desktop.envlocal option.
"},{"location":"3.0/application/createsampleapplication/","title":"Create a sample application in release 3.0","text":""},{"location":"3.0/application/createsampleapplication/#requirements","title":"Requirements","text":"
"},{"location":"3.0/application/createsampleapplication/#make-a-dockerfile-from-the-samplejson-file","title":"make a Dockerfile from the sample.json file","text":"
make.js is a command line for abcdesktop. make.js read a json file and create a Dockerfile
The make.js options are :
-r 3.0 : to build image in abcdesktop 3.0 format
-d True : to create a Dockerfile as output
-f sample.json: file to read as input
npm i argparse npm notice created a lockfile as package-lock.json. You should commit this file. + argparse@2.0.1 added 1 package and audited 1 package in 0.837s found 0 vulnerabilities
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=3.0\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update xterm\nENV BUSER balloon\nLABEL oc.icon=\"small.svg\"\nLABEL oc.icondata=\"PHN2ZyB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xterm,xterm,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"xterm.XTerm\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nLABEL oc.name=\"Xterm\"\nLABEL oc.displayname=\"Xterm\"\nLABEL oc.path=\"/usr/bin/xterm\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"Xterm\"\nENV APPBIN \"/usr/bin/xterm\"\nENV APP \"/usr/bin/xterm\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nUSER balloon\nCMD [\"/composer/appli-docker-entrypoint.sh\"]\nWORKDIR /home/balloon\n
"},{"location":"3.0/application/createsampleapplication/#build-the-abcsample30-from-dockerfile","title":"build the abcsample:3.0 from Dockerfile","text":"
docker build -t abcsample:3.0 .\n
Sending build context to Docker daemon 44.21MB\nStep 1/29 : ARG TAG=3.0\nStep 2/29 : FROM abcdesktopio/oc.template.alpine.minimal:$TAG\n ---> 8528ff0674c7\nStep 3/29 : USER root\n ---> Using cache\n ---> 10372fb6f76c\nStep 4/29 : RUN apk add --no-cache --update xterm\n ---> Using cache\n ---> f222db3926f1\nStep 5/29 : LABEL oc.icon=\"small.svg\"\n ---> Running in 3303dde31f46\nRemoving intermediate container 3303dde31f46\n ---> 2cb2fac76cbd\nStep 6/29 : LABEL oc.icondata=\"PHN2ZyB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJncmVlbiIvPjwvc3ZnPgo=\"\n ---> Running in 65170013c043\nRemoving intermediate container 65170013c043\n ---> 52af61054ac3\nStep 7/29 : LABEL oc.keyword=\"xterm,xterm,shell,cmd\"\n ---> Running in ad13bedc4b0a\nRemoving intermediate container ad13bedc4b0a\n ---> 5bde38f46888\nStep 8/29 : LABEL oc.cat=\"development\"\n ---> Running in 238c24528439\nRemoving intermediate container 238c24528439\n ---> 886ede105940\nStep 9/29 : LABEL oc.launch=\"xterm.XTerm\"\n ---> Running in 1b2c45e68c29\nRemoving intermediate container 1b2c45e68c29\n ---> cf827822a393\nStep 10/29 : LABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\n ---> Running in 8adfa795a837\nRemoving intermediate container 8adfa795a837\n ---> 5e17811c5290\nStep 11/29 : LABEL oc.name=\"Xterm\"\n ---> Running in e2ed34859ca2\nRemoving intermediate container e2ed34859ca2\n ---> e3ed08726ea1\nStep 12/29 : LABEL oc.displayname=\"Xterm\"\n ---> Running in 636fa338c00f\nRemoving intermediate container 636fa338c00f\n ---> 0c756bf8c322\nStep 13/29 : LABEL oc.path=\"/usr/bin/xterm\"\n ---> Running in 2a7355d27588\nRemoving intermediate container 2a7355d27588\n ---> 06ae4c2fdaa7\nStep 14/29 : LABEL oc.type=app\n ---> Running in 0c6f5f1c9d07\nRemoving intermediate container 0c6f5f1c9d07\n ---> 4bd3f1462669\nStep 15/29 : LABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\n ---> Running in 1d836f666a9e\nRemoving intermediate container 1d836f666a9e\n ---> 28ed74393046\nStep 16/29 : LABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\n ---> Running in 3489fb9b8571\nRemoving intermediate container 3489fb9b8571\n ---> 902caf61d44f\nStep 17/29 : RUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi\n ---> Running in 0de74bad43c7\nRemoving intermediate container 0de74bad43c7\n ---> 720830424aeb\nStep 18/29 : RUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi\n ---> Running in 47b9a1b745e1\nRemoving intermediate container 47b9a1b745e1\n ---> 9f63628f1cb5\nStep 19/29 : ENV APPNAME \"Xterm\"\n ---> Running in d175a1ece669\nRemoving intermediate container d175a1ece669\n ---> 150c4cfe4aa3\nStep 20/29 : ENV APPBIN \"/usr/bin/xterm\"\n ---> Running in 997fee55d34e\nRemoving intermediate container 997fee55d34e\n ---> 425ac1a6e205\nStep 21/29 : ENV APP \"/usr/bin/xterm\"\n ---> Running in 53dd44a513fd\nRemoving intermediate container 53dd44a513fd\n ---> 7df215f71bec\nStep 22/29 : USER root\n ---> Running in 003691cdc4f2\nRemoving intermediate container 003691cdc4f2\n ---> 0af1892ae7ad\nStep 23/29 : RUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\n ---> Running in 47d3dff0120d\nRemoving intermediate container 47d3dff0120d\n ---> bd4bc4ebf2cf\nStep 24/29 : RUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\n ---> Running in 91dfbff4d2d2\nRemoving intermediate container 91dfbff4d2d2\n ---> 230d75aceb20\nStep 25/29 : RUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\n ---> Running in 4e0d720f0cfd\nRemoving intermediate container 4e0d720f0cfd\n ---> 2545327438db\nStep 26/29 : RUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\n ---> Running in 37770cba900b\nRemoving intermediate container 37770cba900b\n ---> 06ba8e872dfb\nStep 27/29 : RUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\n ---> Running in 88f16a8cbe63\nRemoving intermediate container 88f16a8cbe63\n ---> 7464bca775cd\nStep 28/29 : USER balloon\n ---> Running in b7ac37070372\nRemoving intermediate container b7ac37070372\n ---> e476af17dfbd\nStep 29/29 : CMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n ---> Running in 05b3b17a1c8c\nRemoving intermediate container 05b3b17a1c8c\n ---> e96d24e8088e\nSuccessfully built e96d24e8088e\nSuccessfully tagged abcsample:3.0\n
"},{"location":"3.0/application/createsampleapplication/#export-and-import-abcsample30","title":"export and import abcsample:3.0","text":"
abcdesktop is designed to use a private or public image registry. A registry is a mandatory service to manage kubernetes cluster with some nodes.
In this case, we suppose we don't have a registry, and we use the same host to build and run application. We need to offer the registry service manually, and copy container image.
Export the image to OCI image format
docker save abcsample:3.0 -o abcsample.tar\n
Import abcsample into the namespace k8s.io using ctr
"},{"location":"3.0/application/createsampleapplication/#run-the-new-application","title":"Run the new application","text":"
Open a web browser and go to abcdesktop service url.
Open a new abcdesktop session.
Look for your new application xterm
Start your new application xterm
The icon of then new application xterm is a green rect. It appears in the dock.
Logoff to free ressources.
You have created your own abcdesktop application, import the image, and start it. To get more details, look at the applist.json it describe all json applications for abcdesktop.
"},{"location":"3.0/application/createsampleapplication/#rebuild-all-images","title":"Rebuild all images","text":"
To rebuild all application in applist.json, run node make.js -r 3.0
A rule take some parameters and set label to the auth user. All labels are stored inside the JWT Auth token. The labels are use to define a container execution context. For example to set a dedicated network for firefox application ( read the how-to )
Add the labels 'shipcrewandnet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#example-true-and-true-expected-false","title":"Example (TRUE and TRUE) expected FALSE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnonet80', if the 'expected' value is False
"},{"location":"3.0/config/authentification-rules/#example-true-and-false-expected-true","title":"Example (TRUE and FALSE) expected TRUE:","text":"
To test if the user source IP address is in the subnet to 80.0.0.0/8AND is NOT a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'noshipcrewandnet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#example-false-and-true-expected-true","title":"Example (FALSE and TRUE) expected TRUE:","text":"
To test if the user source IP address is NOT in the subnet to 80.0.0.0/8AND is a memberOf ldap group DN 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'
Add the labels 'shipcrewandnonet80', if the 'expected' value is True
"},{"location":"3.0/config/authentification-rules/#the-condition-value","title":"The condition value","text":"name description example boolean always true or false 'boolean' : 'true' httpheader test a HTTP header value 'httpheader': memberOf test if the LDAP user object is member of group 'memberOf': [ 'cn=ship_crew,ou=people,dc=planetexpress,dc=com'] network test if the client user IP Address is in a network subnet 'network': [ '1.2.3.4/24'] primarygroupid test if the LDAP user object has a attibute primaryGroupID and is equal to value 'primarygroupid': '513'"},{"location":"3.0/config/authentification-rules/#condition-boolean","title":"condition boolean","text":"
This condition is a dummy condition; Only use to force a label or to disable a test.
This condition is test if a HTTP Header value is equal to a string.
'httpheader': dict\n
example : if the 'User-Agent' is equal to 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' then add the label 'chromemaxosx112'
\n 'rule-httpheader': { \n 'conditions' : [ \n { 'httpheader': { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36' }, \n 'expected' : True } ],\n 'expected' : True,\n 'label': 'chromemaxosx112' }\n\n
"},{"location":"3.0/config/authentification-rules/#ipv4-and-ipv6-subnets-support","title":"IPv4 and IPv6 subnets support","text":"
To support private ip addresses subnet in the rfc 1918 and rfc 3927, write separated rules. Both IPv6 and IPv4 addresses are supported. You can share the same label privatenetwork a separated rule.
The authentification configuration is set in the od.config file. In this chapter you will need to update the od.config configuration file. This update differs depending on the configuration docker mode or kubernetes mode.
Read the Update your configuration file and apply the new configuration file section to make change in od.config file for kubernetes cluster.
The od.config defines four kinds of entries in the authmanagers object :
external: use for OAuth 2.0 Authentification
explicit: use for LDAP, LDAPS and ActiveDirectory Authentification
metaexplicit: use Microsoft Active Directory Trusted relationship, with support of FSP (Foreign Security Principals)
implicit: use for Anonymous Authentification and SSL-client certificat
"},{"location":"3.0/config/authentification/#related-authmanagers","title":"Related authmanagers","text":"authmanagers type Description external For OAuth 2.0 authentification metaexplicit For Microsoft Active Directory Trusted relationship, with support of Foreign Security Principals and Special Identities explicit For LDAP, LDAPS, Active Directory Authentification, and Kerberos authentification implicit For anonymous authentification, for an always True Authentification, and SSL-client certificat"},{"location":"3.0/config/authentification/#hands-on","title":"Hands-on","text":""},{"location":"3.0/config/authentification/#requirements","title":"Requirements","text":"
You should have read the hands-on :
Update your configuration file and apply the new configuration file section to make change in od.config file for kubernetes cluster.
Edit your od.config pyos configuration file, and set the value to the authmanagers dictionary with empty values for implicit, explicit, and external, as describe :
metaexplicit offers a support to Microsoft Active Directory Trusted relationship, with support of Foreign Security Principals and Special Identities. Read the authmanagers explicit Section.
"},{"location":"3.0/config/authexplicit-activedirectory/","title":"Authentification explicit for Microsoft Active Directory services","text":""},{"location":"3.0/config/authexplicit-activedirectory/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string Default domain name prefix if the user format does not containthe domain prefix like DOMAIN\\USER. If the user login value is USER, the login is prefixed with the default_domain\\USER providers dictionnary { 'AD': { 'config_ref': 'adconfig', 'enabled': True }}"},{"location":"3.0/config/authexplicit-activedirectory/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set as the USERDOMAIN and defined in the config_ref with the exact same value.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
If this example, the Microsoft Active Directory value are set to :
Variable name Value for example USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Type Description Example default boolean Use this domain as default domain True ldap_basedn string LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn string _ldap._tcp.Domain_Name _ldap._tcp.ad.domain.localdomain_fqdn string domain FQDN (also know as Domain_Name) AD.DOMAIN.LOCALservers list of string list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm string Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL
The explicit authentification is support LDAP and LDAPS bind.
The Microsoft Active Directory value are set to :
Variable name Value USERDOMAINADUSERDNSDOMAINAD.DOMAIN.LOCAL
For Active Directory authmanagers, replace the variable name with your own value.
Variable name Description Example ldap_basedn Replace ldap_basedn with your LDAP Base Distinguished Names DC=ad,DC=domain,DC=localldap_fqdn Replace ldap_fqdn with the _ldap._tcp fqdn _ldap._tcp.ad.domain.localdomain_fqdn Replace domain_fqdn with domain FQDN value AD.DOMAIN.LOCALservers Replace servers with list of the Active Director servers [ '192.168.1.12', '192.168.1.13' ]kerberos_realm Replace kerberos_realm wih your kerberos realm (in UPPER CASE) AD.DOMAIN.LOCAL"},{"location":"3.0/config/authexplicit-activedirectory/#service-account","title":"Service Account","text":"
The service account is use when od.py starts. It runs query to the Active Directory service to read the subnet and location from the sites in 'CN=Subnets,CN=Sites,CN=Configuration,' + BASE_DN , (for example CN=Subnets,CN=Sites,CN=Configuration,DC=example,DC=com)
This features is only available if a service account is defined. Site is used to locate a user from his ip adress. The attributs location and subnet are cached in memory.
Variable name Type Defautl value site_subnetdn string CN=Subnets,CN=Sites,CN=Configuration, + config.get('basedn') )site_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=subnet)site_attrs list ['cn', 'siteObject', 'location']"},{"location":"3.0/config/authexplicit-activedirectory/#printers","title":"Printers","text":"
This features is only available if a service account is defined. Printers are used to list printer available in the current user's site. The site is identified using the user's ip address. location is the join key to match local printer for the user.
Variable name Type Defautl value printer_printerdn string OU=Applications + config.get('basedn')printer_scope ldap python ldap.SCOPE_SUBTREE read Python ldap reference for more details site_filter string (objectClass=printQueue)site_attrs list [ 'cn', 'uNCName', 'location', 'driverName', 'driverVersion', 'name', 'portName', 'printColor', 'printerName', 'printLanguage', 'printSharename', 'serverName', 'shortServerName', 'url', 'printMediaReady', 'printBinNames', 'printMediaSupported', 'printOrientationsSupported' ]
Great, you have check how the explicit Authentification configuration works.
"},{"location":"3.0/config/authexplicit-ldap/","title":"Authentification explicit for LDAP Directory Services","text":""},{"location":"3.0/config/authexplicit-ldap/#authmanagers-explicit-object","title":"authmanagers explicit object","text":"
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
In this example, ldapconfig dict must have a key LDAP
Variable name Type Description show_domains boolean Permit the domain name to be listed in API getclientdata, the default value is False default_domain string not used by ldap, only used by Active Directory providers dictionnary { 'LDAP': { 'config_ref': 'ldapconfig', 'enabled': True }}"},{"location":"3.0/config/authexplicit-ldap/#providers-configuration","title":"providers configuration","text":"
The provider authentification configuration is defined as a dictionnary object and must contain a key name. The key name must be set with the same value in providers configuration and config_ref.
Variable name Type Description config_ref string For increased legibility, the USERDOMAIN configuration is defined in a dedicated dictionnary used the key:value 'config_ref': 'adconfig', where key is config_ref and value is the dictionnay variable name. enable boolean enable or disable the domain entry
"},{"location":"3.0/config/authexplicit-ldap/#ldap-configuration-reference","title":"ldap configuration reference","text":"Variable name Type Description Example default boolean Use this domain as default domain True tls_require_cert boolean The default value is False. tls_require_cert apply only if ldap server URI starts with ldaps. Allow LDAPS connection if the ldaps server hostname does not match CommonName peer certificate. In production, set this value to True This will disable the ldap option call : ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) False basedn string LDAP Base Distinguished Names ou=people,dc=planetexpress,dc=comservers list of string list of LDAP servers (IP Adress or FQDN), if entry does not respond, the next one is used. [ 'ldap://192.168.1.12', 'ldaps://myldap.domain.org' ] IP Address or FQDN values scope LDAP Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object\u2019s immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). ldap.SCOPE_SUBTREEtimeout integer ldap time out in second 10 exec_timeout integer execute time out in seconds, to obtain ntlm_auth credentials, or cntlm auth credentials, or kerberos auth credentials. the exec timeout is used to run external command line. 10 users_ou string Users Organisation Unit ou=people,dc=planetexpress,dc=comattrs list list of default attributs to read in user object. read the Definition of the inetOrgPerson LDAP Object Class filter string LDAP filter to find user object (&(objectClass=inetOrgPerson)(cn=%s))group_filter string LDAP filter to find group object (&(objectClass=Group)(cn=%s))group_attrs string LDAP filter to find group object (&(objectClass=Group)(cn=%s))"},{"location":"3.0/config/authexplicit-ldap/#the-ldap-structure-of-openldap-for-testing","title":"The LDAP structure of openldap for testing","text":"
The authmanagers explicit is enabled. The Web home page insert the new input values Login and Password to authenticate this user.
The User Orgnanistation Unit is ou=people,dc=planetexpress,dc=com
"},{"location":"3.0/config/authexplicit-ldap/#users","title":"Users","text":""},{"location":"3.0/config/authexplicit-ldap/#cnhubert-j-farnsworthoupeopledcplanetexpressdccom","title":"cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hubert J. Farnsworth sn Farnsworth description Human displayName Professor Farnsworth employeeType Owner employeeType Founder givenName Hubert jpegPhoto JPEG-Photo (630x507 Pixel, 26780 Bytes) mail professor@planetexpress.com mail hubert@planetexpress.com ou Office Management title Professor uid professor userPassword professor"},{"location":"3.0/config/authexplicit-ldap/#cnphilip-j-fryoupeopledcplanetexpressdccom","title":"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry"},{"location":"3.0/config/authexplicit-ldap/#cnjohn-a-zoidbergoupeopledcplanetexpressdccom","title":"cn=John A. Zoidberg,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn John A. Zoidberg sn Zoidberg description Decapodian displayName Zoidberg employeeType Doctor givenName John jpegPhoto JPEG-Photo (343x280 Pixel, 26438 Bytes) mail zoidberg@planetexpress.com ou Staff title Ph. D. uid zoidberg userPassword zoidberg"},{"location":"3.0/config/authexplicit-ldap/#cnhermes-conradoupeopledcplanetexpressdccom","title":"cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Hermes Conrad sn Conrad description Human employeeType Bureaucrat employeeType Accountant givenName Hermes mail hermes@planetexpress.com ou Office Management uid hermes userPassword hermes"},{"location":"3.0/config/authexplicit-ldap/#cnturanga-leelaoupeopledcplanetexpressdccom","title":"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass inetOrgPerson cn Turanga Leela sn Turanga description Mutant employeeType Captain employeeType Pilot givenName Leela jpegPhoto JPEG-Photo (429x350 Pixel, 26526 Bytes) mail leela@planetexpress.com ou Delivering Crew uid leela userPassword leela"},{"location":"3.0/config/authexplicit-ldap/#groups","title":"Groups","text":""},{"location":"3.0/config/authexplicit-ldap/#cnadmin_staffoupeopledcplanetexpressdccom","title":"cn=admin_staff,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn admin_staff member cn=Hubert J. Farnsworth,ou=people,dc=planetexpress,dc=com member cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com"},{"location":"3.0/config/authexplicit-ldap/#cnship_crewoupeopledcplanetexpressdccom","title":"cn=ship_crew,ou=people,dc=planetexpress,dc=com","text":"Attribute Value objectClass Group cn ship_crew member cn=Turanga Leela,ou=people,dc=planetexpress,dc=com member cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com member cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"},{"location":"3.0/config/authexplicit-ldap/#insert-the-user-credentials","title":"Insert the user credentials","text":"
Start your web browser and open the URL http://localhost
The Web home page contains the new input values Login and Password to authenticate this user.
You can use for example on user of the list above.
Credentials Value Login Turanga Leela Password leela
Insert the login credentials :
Turanga Leela as login and leela as password, then click on the Sign in button.
Look at the top of the sreen. The user name is Turanga Leela:
Start LibreOffice Writer, and start a new file for your instructor. Type few words for example :
I like this amazing project abcdesktop.io\n
Do not save your file and just close your web browser.
Start your web browser again, and open the same URL http://localhost, and log in with the same account: Turanga Leela as login and leela as password, then click on the Sign in button.
The application LibreOffice Writer is still running and the greeting message I like this amazing project abcdesktop.io
All applications are maintained.
Great, you have check how the explicit Authentification configuration works, install an openldap directory service, and check that all sessions are maintained.
explicit authentification use a directory service. The bind operation is used to authenticate clients to the directory server, to establish an authorization identity that will be used for subsequent operations processed on that connection.
The explicit authentification configuration is defined as a dictionnary object and contains an explicit provider.
The explicit authentification support the directory services ldap, ldaps, and Microsoft Active Directory.
Configuration sample for Microsoft Active Directory
Read the specific chapter on LDAP LDAP and LDAPS explicit authmanagers
"},{"location":"3.0/config/authexplicit/#microsoft-active-directory-authmanagers","title":"Microsoft Active Directory authmanagers :","text":"
Microsoft Active Directory is implemented as a LDAP Server, start reading the chapter on LDAP LDAP and LDAPS explicit authmanagers, then read the specific chapter for Microsoft Active Director Microsoft Active Directory explicit authmanagers
Great, you have check how the explicit Authentification configuration works.
abcdesktop uses requests_oauthlib python module. Requests-OAuthlib uses the Python Requests and OAuthlib libraries for building OAuth1 and OAuth2 clients.
The variable values client_id and client_secret have been set to obfuscate value 'xxxx'. The FQDN hostname.domain.local is referred to your public server FQDN.
Variable name Type Description Sample displayname string Display Name show in Web front Googleenabled boolean LDAP Base Distinguished Names Trueclient_id string client id XXX-YYY.apps.googleusercontent.comclient_secret string client secret XXXscope list of string scope [ 'https://www.googleapis.com/auth/userinfo.email', 'openid' ]userinfo_url string dialog URL `https://www.googleapis.com/oauth2/v1/userinfo' redirect_uri_prefix string redirect URL https://hostname.domain.local/API/auth/oauthredirect_uri_querystring string URL query string manager=external&provider=googleauthorization_base_url string callback URL https://accounts.google.com/o/oauth2/v2/authtoken_url string token URL https://oauth2.googleapis.com/token
The complete redirect url concats the two values redirect_uri_prefix and redirect_uri_querystring.
Create your Google credentials here : https://console.developers.google.com/apis/ and set the correct credentials for Google Authentification API in the section [gauth]
GitHub's OAuth implementation supports the standard authorization code grant type and the OAuth 2.0 Device Authorization Grant for apps that don't have access to a web browser.
Enable other users to authorize your OAuth App. Create your Github credentials here : authorizing-oauth-apps and set the correct credentials for Github Authentification API
implicit is the easyest configuration mode, and is used as 'Anonymous' authentification.
The provider is defined as a dictionnary object and contains an anononymous provider.
anononymous provider always permit authentification, and create a uuid as userid. anononymous provider is used to skip the authentification process in a demonstration mode.
Update your configuration file and apply the new configuration file
Open a new Web Browser and go to your abcdesktop URL. You should see the login HTML page with the Anonymous button :
Press the Sign-In Anonymously button.
Then, choose the settings in the menu at the upper right corner
Choose the System in the settings control panel.
Then choose User containers
This screen show you the hostname.
You can read the hostname. In the example the hostname is f097ab7aac57, from the container id.
Using a shell, run the command docker ps -a
docker ps -a\n
Find a running container with the containerid previously identified.
In this example the containerid is f097ab7aac57
f097ab7aac57 abcdesktopio/oc.user.18.04 \"/composer/docker-en\u2026\" 8 minutes ago Up 8 minutes 4714/tcp, 6081/tcp, 29780-29781/tcp, 29783-29784/tcp, 29786/tcp, 55556-55557/tcp g-06b686a5-c98d-4889-b73d-3455f692e6c2\n
Run the command docker inspect CONTAINERID, replace the string CONTAINERID with your container id value.
For example docker inspect f097ab7aac57
docker inspect f097ab7aac57\n
Locate the Mounts description. User's containers created with an implicit provider anonymous have only one volume type. Anonymous home directory DO NOT USE persistant volume data. Explicit and
When the anonymous container is removed, the anonymous home directory is deleted.
Great, you have check how the implicit Authentification configuration works.
"},{"location":"3.0/config/authmetaexplicit/","title":"Authentification metaexplicit for Microsoft Active Directory services with trust relationships","text":""},{"location":"3.0/config/authmetaexplicit/#authmanagers-metaexplicit-object","title":"authmanagers metaexplicit object","text":"
The metaexplicit authentification manager contains only one provider. The provider must be defined as metadirectory.
Variable name Type Description providers dictionary { 'metadirectory': { 'config_ref': 'coporateconfig', 'enabled': True }}"},{"location":"3.0/config/authmetaexplicit/#metadirectory-provider-configuration","title":"metadirectory provider configuration","text":"
The metadirectory provider is defined as a dictionnary object and must contain key name. The key name must be set as the name of a dictionaryin the config_ref.
A metadirectory provider must contain a ldap attribut to describe the original DOMAIN and sAMaccountName. The ldap attribut is defined as join_key_ldapattribut.
coporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } } \n
Pyos binds the metadirectory ldap server with serviceaccount credentials Pyos read the ldap attribut description value to get the user's trusted domain.
For example :
description: AD\\john\n
Then pyos look for provider AD configuration and process authentification on domain AD
The metadirectory accounts can be disabled. The ldap attribut userAccountControl is not read on metaDirectory provider. The account can have the bit UF_ACCOUNT_DISABLE set or not.
A service account must defined for a metadirectory provider. The service account is used to bind the metadirectory.
"},{"location":"3.0/config/authmetaexplicit/#complete-example-with-a-metadirectory-provider-and-active-directory-user-domain","title":"Complete example with a metadirectory provider and active directory user domain","text":"
The user's domain mane is AD. The meta domain name is CORPORATE. The meta domain use a dedicated attribut join_key_ldapattribut
authmanagers: {\n #\n # define the meta explicit manager\n # This is the trusted external forest for the followed domain\n #\n 'metaexplicit': {\n 'providers': {\n # define the metadirectory provider\n # only one metadirectory provider is supported \n 'metadirectory': { \n 'config_ref': 'coporateconfig', \n 'enabled': True } \n }\n },\n\n # \n # define the Active Directory provider for each DOMAIN\n # define two domains in two disctinct forest with a trust relationship \n # \n 'explicit': { \n # define an Active Directory provider AD \n 'AD': { 'config_ref': 'adconfig', 'enabled': True },\n # define an Active Directory provider ANOTHER\n 'ANOTHER': { 'config_ref': 'anotherconfig', 'enabled': True } \n }\n} # end of authmanagers\n\n# In this example ldap attribut's description contains AD\\myuser or ANOTHER\\myuser \ncoporateconfig : { 'metadirectory': { \n 'domain' : 'CORPORATE',\n 'ldap_basedn' : 'DC=foo,DC=corporate,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.foo.corporate.local',\n 'servers' : [ 'ldap://192.168.9.11', 'ldap://192.168.7.12', 'ldap://192.168.7.13' ],\n # join_key_ldapattribut must be defined for a metadirectory provider\n 'join_key_ldapattribut' : 'description',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn': 'foo.corporate.local',\n 'kerberos_realm': 'FOO.CORPORATE.LOCAL',\n # serviceaccount must be defined for a metadirectory provider\n 'serviceaccount': { 'login': 'svcaccount', 'password':'superpass' }\n } }\n\n\n# \n# define the first DOMAIN AD\n# The adconfig ref for domain AD\n#\nadconfig : { 'AD': { 'ldap_basedn' : 'DC=ad,DC=domain,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.ad.domain.local',\n 'domain' : 'AD',\n 'auth_type' : 'NTLM',\n 'domain_fqdn' : 'AD.DOMAIN.LOCAL',\n 'servers' : [ 'ldap://192.168.7.12' ] } }\n\n#\n# define the second DOMAIN ANOTHER\n# The anotherconfig ref for domain ANOTHER\n#\nanotherconfig : { 'ANOTHER': {\n 'ldap_basedn' : 'DC=another,DC=super,DC=local',\n 'ldap_fqdn' : '_ldap._tcp.another.super.local',\n 'domain' : 'ANOTHER',\n 'auth_type' : 'KERBEROS',\n 'domain_fqdn' : 'ANOTHER.SUPER.LOCAL',\n 'servers' : [ 'ldap://192.168.10.12' ],\n 'kerberos_realm': 'AD.SUPER.LOCAL' } }\n
metadirectory support the foreign security principal (FSP) to query security principal in the trusted external forest. These objects are created in the foreign security principals container of the domain. metadirectory support isMemberOf on foreign security principal.
The user's SID of domain 'AD' or 'ANOTHER' is NOT read. A new ldap bind is done using the trusted domain on metadirectory provider and not unsing the service account.
The ldap query is build : ( \"search_base={q.basedn}, search_scope={q.scope}, search_filter={filter}\" )
To get more information about foreign security principal (FSP), read :
Foreign Security Principals Container
Active Directory: Foreign Security Principals and Special Identities
"},{"location":"3.0/config/balloon/","title":"balloon user entry in od.config","text":"
balloon is the default generic user.
The balloon user is created inside the oc.user container
"},{"location":"3.0/config/cloudprovider.loadbalancing/#update-nginx-service-to-use-http-loadbalancer","title":"Update nginx service to use http LoadBalancer","text":"
Replace type: NodePortby type: LoadBalancer into the nginx service
Save this yaml as nginx.service.http.loadbalancer.yaml file name
# delete the previous nginx service\nkubectl delete service nginx -n abcdektop\n# create the new nginx service\nkubectl apply -f nginx.service.http.loadbalancer.yaml\n
Wait few minutes to obtain an ip address LoadBalancer from your cloud provider service
"},{"location":"3.0/config/cloudprovider.loadbalancing/#update-nginx-service-to-use-loadbalancer-service-with-https","title":"Update nginx service to use LoadBalancer service with https","text":"
This example works on digitalocean cloud provider.
First of all, you need to get your loadbalancer-certificate-id
To list available certificates and their IDs, install doctl and run the command
doctl compute certificate list\n
Then define annotations on the abcdesktop nginx service like
Create a loadbalancing.yaml file, to update the default abcdestkop service/nginx You need to replace service.beta.kubernetes.io/do-loadbalancer-certificate-id with your own certificate value.
abcdesktop is based on the Model View Controller (usually known as MVC). This MVC is used for developing user interfaces which divides the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
List of all abcdesktop's controllers and the description :
Controller Description AccountingController accounting data json format AuthController authenticate user ComposerController CRUD main services (like createDesktop, createApplication) CoreController get configuration and user message info ManagerController manage service (like add an application) UserController retrieve user information"},{"location":"3.0/config/controllers/#access-permission","title":"Access Permission","text":"
The controllers configuration is a dictionary, and is defined in the pyos's od.config file.
By default, AccountingController and ManagerController access are protected by ip source filters. The configuration permits private networks defined in rfc1918 and rfc4193. Get more information about the private network.
By default, others controllers access is enabled, without any restriction.
"},{"location":"3.0/config/controllers/#access-control-filter","title":"Access control filter","text":"
The access control filter configuration is defined in a json dictionary. Each dictionary entry use the controller name and with entries permitip and/or apikey.
The permitip is a list of subnet, for example [ '10.0.0.0/8', '172.16.0.0/12' ]. If permitip is not set or if the controller is not defined, filtering features is disabled.
The apikey is a list of string, for example [ 'fPCdPSSj8gZri1Ncmg', 'Z9pXCa2y6ccDeBBeeUc4' ]. If apikey is not set or the controller not defined, filtering features is disabled. The http header value is X-API-Key
If the source ip address is denied, the response is a HTTP status is 403 code 403 Forbidden
{\"status\": 403, \"status_message\": \"403 Forbidden\", \"message\": \"Request forbidden -- authorization will not help\"} \n
"},{"location":"3.0/config/controllers/#curl-http-requests-sample","title":"Curl http requests sample","text":""},{"location":"3.0/config/controllers/#curl-http-request-with-x-api-key","title":"Curl http request with X-API-Key","text":"
Add the http header X-API-Key: fQDbvjCafec4l to the curl command to list images
curl -X GET -H 'X-API-Key: fQDbvjCafec4l' -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/images\n
The command returns
{}\n
Add the http header X-API-Key: fQDbvjCafec4l to the curl command to add new application
This option describes how to create the home directory for the user. The value can be defined as :
'None': no dedicated volume is created, the oc.user container use an emptyDir': { 'medium': 'Memory'}. All user data will be removed at logout.
'hostPath': set a dedicated 'hostPath' volume, the user's container and applications share this volume. User home data are persistent.
'persistentVolumeClaim': set a dedicated 'persistentVolumeClaim' volume, the user's container and applications share this volume. User home data are persistent.
To get more information about user's home directory volume, read the volumes chapter
desktop.remotehomedirectorytype is a list of string. Each string describe if the remount access to a directory is allowed. example [ 'cifs', 'webdav' ]
For each entry in the desktop.remotehomedirectorytype list, abcdesktop.io try to mount the remote file system using data from the implicit auth provider.
If desktop.remotehomedirectorytype contains 'cifs' and if the authentification provider get homeDrive and homeDirectory attributs then abcdesktop request the kubernetes abcdesktop/CIFS Driver to mount the remote filesystem. The user find a mount point named homeDrive value, and mounted to homeDirectory.
desktop.envlocal is a dictionary. desktop.envlocal contains a (key,value) added as environment variables to oc.user.
The default value is :
{ \n 'X11LISTEN': 'tcp'\n}\n
"},{"location":"3.0/config/desktop/#reserved-variables","title":"Reserved variables","text":"Variable Values Description X11LISTENtcp permit X11 to listen on tcp port, default is udpABCDESKTOP_RUN_DIR/var/run/desktop directory to write pid services ABCDESKTOP_LOG_DIR/var/log/desktop directory to write log files services DISABLE_REMOTEIP_FILTERINGdisabled disabled remote ip filtering inside pod user, default is disabled, change to enabled to remove core ip filtering SET_DEFAULT_WALLPAPERmyfile.jpeg name of file to set the user wallpaper, this file must exist in ~/.wallpapersSET_DEFAULT_COLOR#6EC6F0 Value of default colour saved in file ~/.store/currentColorSENDCUTTEXTenabled \u00a0Send clipboard changes to user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_sendcuttext if exist SENDCUTTEXT=${ABCDESKTOP_LABEL_sendcuttext:-$SENDCUTTEXT}. The default value is enabledACCEPTCUTTEXTenabled \u00a0Accept clipboard updates from user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_acceptcuttext if exist ACCEPTCUTTEXT=${ABCDESKTOP_LABEL_acceptcuttext:-$ACCEPTCUTTEXT}. The default value is enabled"},{"location":"3.0/config/desktop/#desktopnodeselector","title":"desktop.nodeselector","text":"
desktop.nodeselector is a dictionary. This option permits to assign user pods to nodes.
It specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). The most common usage is one key-value pair.
The value must be a string, by example 'true', and matches the labels node value.
desktop.username is the name of the default username inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.username is string. The default value is 'balloon'.
desktop.userid describes the uid Number of the default user id number inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.userid is integer. The default value is 4096.
desktop.groupid describes the gid Number of the default group id number inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry The type of desktop.userid is integer. The default value is 4096.
desktop.userhomedirectory describes the homedirectory of the user created inside the user's pod. If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entrycontainer. The type of desktop.userhomedirectory is string. The default value is /home/balloon.
The desktop.uselocaltime is boolean, to use host value of /etc/localtime. The default value is False. If desktop.uselocaltime is True, this add a volume mapping from host file /etc/localtime to container file /etc/localtime.
WARNING desktop.desktopuseinternalfqdn is an experimental feature, keep this value to False in production
desktop.desktopuseinternalfqdn describes the content of the payload data in the JWT Desktop Token. The default value is False.
Nginx front end act as a reverse proxy. This reverse proxy use the FQDN of the user's pod to route http request. If this value is set to False the payload data in the JWT Desktop Token contains the IP Address of the user Pod. If this value is set to True the payload data in the JWT Desktop Token contains the FQDN of the user Pod.
If you CAN NOT add endpoint_pod_names in the coredns configuration, you MUST set desktop.desktopuseinternalfqdn to False. This choice is less secure.
To set desktop.desktopuseinternalfqdn to True value, you have to update the coredns ConfigMap.
The container is added to the user pod if acl matches. acl is based on tags and rules. Read the authentification-rules abcdesktop documentation to defined tags.
IfNotPresent the image is pulled only if it is not already present locally.
Always kubelet queries the container image registry to resolve the name to an image digest.
Never the kubelet does not try fetching the image. If the image is somehow already present locally, the kubelet attempts to start the container; otherwise, startup fails.
Read the pullpolicy kubernetes documentation to get more details.
The imagePullSecret entry is the list of the secret name used by kubernetes to access to the private registry. The type of imagePullSecret is a list. This option is used if you need to store the abcdesktop docker image on your a private registry.
spec entry defines the spec entry for a pod. All kubernetes entries are supported. Some of them are overwrited by abcdesktop.
{{ uidNumber }} is replaced by the user's uidNumber on ldap if the objectClass is posixAccount or if not set by the default user id set in option desktop.userid
{{ gidNumber }} is replaced by the user's gidNumber on ldap if the objectClass is posixAccount is replaced by the ldap gidNumber or if not set by the default group id set in option desktop.groupid
{{ supplementalGroups }} is replaced by the list of groups gidNumber is posixGroup
shareProcessNamespace When process namespace sharing is enabled, processes in a container are visible to all other containers in the same pod. Read the kubernetes shareProcessNamespace details, to get more details.
shareProcessMemory Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built (typically C/OpenMPI, C++/using boost libraries) high performance applications for scientific computing and financial services industries. POSIX shared memory requires that a tmpfs be mounted at /dev/shm. Containers in a pod do not share their mount namespaces so we use volumes to provide the same /dev/shm into each container in a pod. Read shared_memory to get more details. Shared memory is defined as an emptyDir volume { 'name': 'shm', { 'medium': 'Memory', 'sizeLimit': shareProcessMemorySize } } minted on /dev/shm. Only ephemeral container application can share memory with the X11 server. To get more details about POSIX and UNIX System V shared memory objects, read the podshmtest repository.
shareProcessMemorySize is the size of shareProcessMemory. The size is set to the shm volume 'sizeLimit': shareProcessMemorySize
init container run the init command. It changes access right to the user home directory. The init command runs as root by default with a securityContext 'securityContext': {'runAsUser':0, 'runAsGroup':0 }.
The command support {{ }} values. Values can be
'{{ uidNumber }}'
'{{ gidNumber }}'
'{{ uid }}'
Values are read from the previous ldap authentification.
'{{ uidNumber }}' is replaced by the ldap uidNumber or if not set by the default user id set in option desktop.userid
'{{ gidNumber }}' is replaced by the ldap gidNumber or if not set by the default group id set in option desktop.groupid
'{{ uid }}' is replaced by the ldap uid or if not set by the default user name set in option desktop.username
Or you can also use the replace command kubectl create -n abcdesktop configmap abcdesktop-config --from-file=od.config -o yaml --dry-run | kubectl replace -n abcdesktop -f -
"},{"location":"3.0/config/editconfig/#check-your-changes","title":"Check your changes","text":"
To check that the new colours are presents in front, open the url http://localhost:30443, in your web browser, to start a simple abcdesktop.io container.
http://localhost:30443\n
You should see the abcdesktop.io home page.
Press the Sign-in Anonymously, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
Choose your colour and you should have it as background colour :
Great, you can easily update your configuration file od.config.
"},{"location":"3.0/config/frontjs/","title":"dock configuration in od.config","text":""},{"location":"3.0/config/frontjs/#menu-setting","title":"Menu Setting","text":"
The menu can be changed using the dictionnary object menuconfig
"},{"location":"3.0/config/frontjs/#default-dock-config","title":"default dock config","text":"
The dock session in od.config file describe the default docker in abcdesktop.io. The default dock value contains the default applications. The dock option is a dictionnary read by the front web as a json object.
docker entry Descriptions filemanager FileManager application terminal Terminal application webshell HTML 5, terminal application based on xterm.js webshorcut Web browser url launch inside the container
host_config resource description allows to change the running context for docker application. host_config is a dictionary and uses the same format in applist.json file and od.config file.
The same host_config format is reused in a multiple configuration files. host_config is present in applist.json file to build application image, and in od.config to set default running values in desktop and in application.
For example you can set low cpu and memory values to an application like the great X11 xeyes.
"},{"location":"3.0/config/host_config/#host_config-entries","title":"host_config entries","text":"Key name Type Description auto_remove bool enable auto removal of the container on daemon side when the container\u2019s process exits. cpu_period int The length of a CPU period in microseconds. cpu_quota int Microseconds of CPU time that the container can get in a CPU period. cpu_shares int CPU shares relative weight. cpuset_cpus str CPUs in which to allow execution 0 3 0 1 . cpuset_mems str Memory nodes MEMs in which to allow execution 0 3 0 1. Only effective on NUMA systems. device_cgroup_rules list A list of cgroup rules to apply to the container. device_read_bps bytes per second Limit read rate from a device in the form of: [{\u201cPath\u201d: \u201cdevice_path\u201d \u201cRate\u201d: rate}] device_read_iops IO per second Limit read rate from a device. device_write_bps bytes per second Limit write rate from a device. device_write_iops IO per second Limit write rate from a device. devices list Expose host devices to the container as a list of strings in the form ::. For example /dev/sda:/dev/xvda:rwm allows the container to have read write access to the host\u2019s /dev/sda via a node named /dev/xvda inside the container. device_requests list Expose host resources such as GPUs to the container as a list of docker.types.DeviceRequest instances. ipc_mode str Set the IPC mode for the container. mem_limit float or str Memory limit. Accepts float values which represent the memory limit of the created container in bytes or a string with a units identification char 100000b 1000k 128m 1g. mem_reservation float or str Memory soft limit mem_swappiness int Tune a container s memory swappiness behavior. Accepts number between 0 and 100. memswap_limit str or int Maximum amount of memory + swap a container is allowed to consume. oom_kill_disable bool Whether to disable OOM killer. oom_score_adj int An integer value containing the score given to the container in order to tune OOM killer preferences. shm_size str or int Size of /dev/shm e.g. 1G. cap_add list of str Add kernel capabilities. { 'add': [ 'SYS_ADMIN', 'SYS_PTRACE' ]}for example to permit the call ptrace: SYS_PTRACE, trace arbitrary processes using ptrace, and SYS_ADMIN, perform a range of system administration operations. Read the docker run command informations https://docs.docker.com/engine/reference/run/ chapter Runtime privilege and Linux capabilities cap_drop list of str Drop kernel capabilities. dns list Set custom DNS servers. dns_opt list Additional options to be added to the container\u2019s resolv.conf file dns_search list DNS search domains. extra_hosts dict Additional hostnames to resolve inside the container as a mapping of hostname to IP address. group_add list List of additional group names and/or IDs that the container process will run as. isolation str Isolation technology to use. Default: None. pid_mode str or bool If set to hostuse the host PID namespace inside the container. If set to host, use the host PID namespace inside the container. pids_limit int Tune a container\u2019s pids limit. Set -1 for unlimited. privileged bool Give extended privileges to this container. security_opt list A list of string values to customize labels for MLS systems such as SELinux. storage_opt dict Storage driver options per container as a key value mapping. sysctls dict Kernel parameters to set in the container. ulimits list Ulimits to set inside the container as a list of docker.types.Ulimit instances. userns_mode str Sets the user namespace mode for the container when user namespace remapping option is enabled. Supported values are: host uts_mode str Sets the UTS namespace mode for the container. Supported values are: host runtime str Runtime to use with this container. network_mode str One of: bridge Create a new network stack for the container on the bridge network. none No networking for this container. container: Reuse another container\u2019s network stack. host Use the host network stack. This mode is incompatible with port_bindings."},{"location":"3.0/config/host_config/#main-host_config-entries-descriptions","title":"Main host_config entries descriptions","text":""},{"location":"3.0/config/host_config/#auto_remove","title":"auto_remove","text":"
The auto_remove is use to remove or not remove an abcdesktop container application or desktop.
For example, when an application container is exited, do we need to remove the container, by running the docker rm command ?
By default the auto_remove is True. But if you need to keep your application container to post-mortem debugging or to get some value, set this value to False. Set this value to False only to troubleshoot an application.
cpu_period Specify the CPU CFS scheduler period, which is used alongside --cpu-quota. Defaults to 100000 microseconds (100 milliseconds). Most users do not change this from the default.
cpu-quota impose a CPU CFS quota on the container. The number of microseconds per --cpu-period that the container is limited to before throttled. As such acting as the effective ceiling.
The privileged option runs a user container in privileged mode. When the operator executes docker run privileged, docker will enable access to all devices on the host as well as set some configuration in AppArmor or SELinux to allow the container nearly all the same access to the host as processes running outside containers on the host.allow a user to run a sudo command. The default value is False. You should only set privilege to True for troobleshooting. In production this value MUST be set to False.
The ipc_mode value is a string, the default value is 'shareable'. This option permits user's container to share the ipc namespace with application This option is used by pulseaudio service by default.
value description '' Use daemon default. 'none' Own private IPC namespace. 'private' Own private IPC namespace. 'shareable' Own private IPC namespace, with a possibility to share it with other containers. 'host' Use the host system IPC namespace.
If not specified, daemon default is used, which can either be \"private\" or \"shareable\", depending on the daemon version and configuration. IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. Shared memory segments are used to accelerate inter-process communication at memory speed, rather than through pipes or through the network stack. Shared memory is commonly used by databases and custom-built. If these types of applications are broken into multiple containers, you might need to share the IPC mechanisms of the containers, using shareable mode for the main (i.e. donor) container, and container: for other containers."},{"location":"3.0/config/host_config/#security_opt","title":"security_opt","text":"
The securityopt option allow to set the security_opt default value for a docker application container. security_opt is the docker parameter.
To run without the default seccomp profile seccomp=unconfined
To disable sudo command add no-new-privileges to the list. For example: [ 'no-new-privileges', 'seccomp=unconfined' ]
Docker's default seccomp profile is a whitelist which specifies the calls that are allowed. The table below lists the significant (but not all) syscalls that are effectively blocked because they are not on the whitelist. The table includes the reason each syscall is blocked rather than white-listed.
Syscall Description acct Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_PACCT. add_key Prevent containers from using the kernel keyring, which is not namespaced. bpf Deny loading potentially persistent bpf programs into kernel, already gated by CAP_SYS_ADMIN. clock_adjtime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clock_settime Time/date is not namespaced. Also gated by CAP_SYS_TIME. clone Deny cloning new namespaces. Also gated by CAP_SYS_ADMIN for CLONE_* flags, except CLONE_USERNS. create_module Deny manipulation and functions on kernel modules. Obsolete. Also gated by CAP_SYS_MODULE. delete_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. finit_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. get_kernel_syms Deny retrieval of exported kernel and module symbols. Obsolete. get_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. init_module Deny manipulation and functions on kernel modules. Also gated by CAP_SYS_MODULE. ioperm Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. iopl Prevent containers from modifying kernel I/O privilege levels. Already gated by CAP_SYS_RAWIO. kcmp Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. kexec_file_load Sister syscall of kexec_load that does the same thing, slightly different arguments. Also gated by CAP_SYS_BOOT. kexec_load Deny loading a new kernel for later execution. Also gated by CAP_SYS_BOOT. keyctl Prevent containers from using the kernel keyring, which is not namespaced. lookup_dcookie Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by CAP_SYS_ADMIN. mbind Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. mount Deny mounting, already gated by CAP_SYS_ADMIN. move_pages Syscall that modifies kernel memory and NUMA settings. name_to_handle_at Sister syscall to open_by_handle_at. Already gated by CAP_DAC_READ_SEARCH. nfsservctl Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. open_by_handle_at Cause of an old container breakout. Also gated by CAP_DAC_READ_SEARCH. perf_event_open Tracing/profiling syscall, which could leak a lot of information on the host. personality Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. pivot_root Deny pivot_root, should be privileged operation. process_vm_readv Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. process_vm_writev Restrict process inspection capabilities, already blocked by dropping CAP_SYS_PTRACE. ptrace Tracing/profiling syscall. Blocked in Linux kernel versions before 4.8 to avoid seccomp bypass. Tracing/profiling arbitrary processes is already blocked by dropping CAP_SYS_PTRACE, because it could leak a lot of information on the host. query_module Deny manipulation and functions on kernel modules. Obsolete. quotactl Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by CAP_SYS_ADMIN. reboot Don't let containers reboot the host. Also gated by CAP_SYS_BOOT. request_key Prevent containers from using the kernel keyring, which is not namespaced. set_mempolicy Syscall that modifies kernel memory and NUMA settings. Already gated by CAP_SYS_NICE. setns Deny associating a thread with a namespace. Also gated by CAP_SYS_ADMIN. settimeofday Time/date is not namespaced. Also gated by CAP_SYS_TIME. stime Time/date is not namespaced. Also gated by CAP_SYS_TIME. swapon Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. swapoff Deny start/stop swapping to file/device. Also gated by CAP_SYS_ADMIN. sysfs Obsolete syscall. _sysctl Obsolete, replaced by /proc/sys. umount Should be a privileged operation. Also gated by CAP_SYS_ADMIN. umount2 Should be a privileged operation. Also gated by CAP_SYS_ADMIN. unshare Deny cloning new namespaces for processes. Also gated by CAP_SYS_ADMIN, with the exception of unshare --user. uselib Older syscall related to shared libraries, unused for a long time. userfaultfd Userspace page fault handling, largely needed for process migration. ustat Obsolete syscall. vm86 In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN. vm86old In kernel x86 real mode virtual machine. Also gated by CAP_SYS_ADMIN.
\"SYS_PTRACE\": Trace arbitrary processes using ptrace
\"SYS_ADMIN\": Perform a range of system administration operations.
Read the docker run command informations Docker run reference
By default, Docker has a default list of capabilities that are kept. The following table lists the Linux capability options which can be added or dropped.
Capability Key Capability Description SETPCAP Modify process capabilities. SYS_MODULE Load and unload kernel modules. SYS_RAWIO Perform I/O port operations (iopl(2) and ioperm(2)). SYS_PACCT Use acct(2), switch process accounting on or off. SYS_ADMIN Perform a range of system administration operations. SYS_NICE Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes. SYS_RESOURCE Override resource Limits. SYS_TIME Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock. SYS_TTY_CONFIG Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals. MKNOD Create special files using mknod(2). AUDIT_WRITE Write records to kernel auditing log. AUDIT_CONTROL Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. MAC_OVERRIDE Allow MAC configuration or state changes. Implemented for the Smack LSM. MAC_ADMIN Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM). NET_ADMIN Perform various network-related operations. SYSLOG Perform privileged syslog(2) operations. CHOWN Make arbitrary changes to file UIDs and GIDs (see chown(2)). NET_RAW Use RAW and PACKET sockets. DAC_OVERRIDE Bypass file read, write, and execute permission checks. FOWNER Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file. DAC_READ_SEARCH Bypass file read permission checks and directory read and execute permission checks. FSETID Don't clear set-user-ID and set-group-ID permission bits when a file is modified. KILL Bypass permission checks for sending signals. SETGID Make arbitrary manipulations of process GIDs and supplementary GID list. SETUID Make arbitrary manipulations of process UIDs. LINUX_IMMUTABLE Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags. NET_BIND_SERVICE Bind a socket to internet domain privileged ports (port numbers less than 1024). NET_BROADCAST Make socket broadcasts, and listen to multicasts. IPC_LOCK Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)). IPC_OWNER Bypass permission checks for operations on System V IPC objects. SYS_CHROOT Use chroot(2), change root directory. SYS_PTRACE Trace arbitrary processes using ptrace(2). SYS_BOOT Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution. LEASE Establish leases on arbitrary files (see fcntl(2)). SETFCAP Set file capabilities. WAKE_ALARM Trigger something that will wake up the system. BLOCK_SUSPEND Employ features that can block system suspend.
Further reference information is available on the capabilities(7) - Linux man page
Set this value only to troubleshoot an application.
In production this value MUST be set to an empty dict {}
Then apply the new configuration file od.config by retrasting the daemon.
When jira option is set, a new icon issue appears at the top.
Click on the issue icon, a new window is appear.
Fill Summary and Your Report values
Then press the Send button. A notification message appears on the left top corner.
Log into your jira server, and check your backlog
Great you added a new issue tracking.
"},{"location":"3.0/config/language/","title":"Language entry in od.config","text":"
The language option is a list of string. Each string is formatted as a locale variable. The locale is simply the language/country combination en + US = en_US
"},{"location":"3.0/config/language/#language-in-abcdesktopio-ocuser","title":"Language in abcdesktop.io oc.user","text":"
The language list must match with the oc.user local packages all ready installed.
If the language is not found, the default value is set to en_US
The oc.user.18.04 is built-in with the default language package :
This list must match with the Accept-Language request HTTP header.
"},{"location":"3.0/config/language/#language-in-abcdesktopio-applications","title":"Language in abcdesktop.io Applications","text":"
abcdesktop.io use the web browser language property to set the application's language. This list must match with the Accept-Language request HTTP header. If the language is not found, the default value is set to en_US.
Hands-on:
Change your web browser language, and run LibreOffice applications. The language setting use the web browser value. During this exercice you can keep the same abcdesktop.io users session.
"},{"location":"3.0/config/language/#set-the-web-browsers-default-language-to-en_us","title":"Set the web browser's default language to en_US :","text":"
The launch LibreOffice Writer. The menu is set to en_US LibreOffice Writer use English/US en_US language.
"},{"location":"3.0/config/language/#set-the-web-browsers-default-language-to-fr_fr","title":"Set the web browser's default language to fr_FR :","text":"
You can keep the same abcdesktop.io users session, you do not need to logout.
The launch LibreOffice Writer. The menu is set to fr_FR LibreOffice Writer use French fr_FRlanguage.
Great you have change the language settings of applications running inside an abcdesktop docker container
By default syslog program is configured to log messages received over unix socket files. rsyslog configuration file need to be modified to accept messages over UDP.
Edit /etc/rsyslog.conf file with your prefered linux text editor as sudo ou root:
Now we have enabled rsyslog over UDP on 514 port in config file, we have to restart rsyslog to take new parameters into account. Execute the following command as sudo:
sudo systemctl restart rsyslog\n
"},{"location":"3.0/config/logging/","title":"Logging configuration in od.config","text":"
The logging configuration is a dictionnary object. The logging configuration describes where and how log message information have to been send.
logging dict use the python logging module logging module
The syslog and graylog protocol messaging are supported too.
The default features for each handlers are :
handler Features console log message using a logging.StreamHandler to the stream: ext://sys.stdout formated as standard cherrypy_console log message using a logging.StreamHandler to the stream: ext://sys.stdout formatted as access cherrypy_access log message using a logging.StreamHandler to the file stream logs/access.log formatted as access cherrypy_trace log message using a logging.StreamHandler to the stream: logs/trace.log formatted as standard
Sub modules used by od.py can log information too.
Sub module Default Values docker.utils.config{ 'level': 'INFO' },urllib3.connectionpool{ 'level': 'ERROR'},
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes.
Network policies are implemented by the network plugin. To use network policies, you must be using a networking solution which supports NetworkPolicy.
There are two sorts of isolation defined in abcdesktop : the NetworkPolicy rights and the NetworkPolicy permits.
The NetworkPolicy rights contains egress and ingress for pod selected by tag. rights means access (ingress) to this pod and access (egress) from this pod. To define ip filter for user's pod, you need to set egress NetworkPolicy.
The NetworkPolicy permits contains egress to a pod selected by tag. The NetworkPolicy permits means permit access to this pod.
The NetworkPolicy examples describe the network policies for the internal memcached pod and the user's pods.
"},{"location":"3.0/config/networkpolicy/#networkpolicy-rights-and-permits-for-the-memcached","title":"NetworkPolicy rights and permits for the memcached.","text":"
The memcached service is listening on TCP port 11211. The NetworkPolicy for memcached service rights, named memcached-rights, allows pods with label run: memcached-od to expose the TCP port 11211.
The NetworkPolicy for memcached service permits, named memcached-permits, allows all pods with label netpol/memcached: 'true' to reach the TCP port 11211 to pods with label run: memcached-od.
"},{"location":"3.0/config/networkpolicy/#networkpolicy-rights-and-permits-for-the-users-pods","title":"NetworkPolicy rights and permits for the user's pods.","text":"
The ocuser pod is listening on TCP ports :
4714
6081
29780
29781
29782
29783
29784
29785
29786
The network policy for ocuser's pods rights is named ocuser-rights. It allows pods with label type: 'x11server' to expose the previous TCP ports.
The network policy for ocuser's pods permits is named ocuser-permits. It allows pods with label netpol/ocuser: 'true' to reach the user's pods services.
You may need to update the netpol-default.yaml file with your own values.
"},{"location":"3.0/config/stack/","title":"stack entry in od.config","text":""},{"location":"3.0/config/stack/#stackmode","title":"stack.mode","text":"
stack.mode describes how abcdesktop.io can manage user's containers and application.
If you run a docker only daemon, set the value to standalone.
If you run a kubernetes cluster, set the value to kubernetes.
stack.mode Description standalone Use a dockerd only, this is for personal usage kubernetes Use a kubernetes services"},{"location":"3.0/config/stack/#stackkubernetesdefaultdomain","title":"stack.kubernetesdefaultdomain","text":"
stack.kubernetesdefaultdomain is the default domain name configured in kubernetes cluster. This value is type is string and only read if stack.mode is kubernetes.
The default value is abcdesktop.svc.cluster.local
If option value mongodb or memcached are set, the values are NOT overridden, and keep unchanged.
If option value mongodb or memcached are set to None (by default), then stack.kubernetesdefaultdomain is used to complete the FQDN of mongodb and memcached servers name. This value is concatenated to the server hostname.
"},{"location":"3.0/config/sudo-kubernetes/","title":"Sudo kubernetes","text":""},{"location":"3.0/config/sudo-kubernetes/#how-to-get-a-root-access-inside-a-container-running-kubernetes-abcdesktop","title":"How to get a root access inside a container running kubernetes abcdesktop ?","text":"
run the sudo command inside the user kubernetes pods
balloon@43c2ef50-a7b9-4e36-8a9d-8ac3ce80180e:~$ sudo bash\nsudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?\n
"},{"location":"3.0/config/sudo-kubernetes/#edit-the-odconfig-file","title":"Edit the od.config file","text":"
In the securityContext add the entry 'allowPrivilegeEscalation': True
"},{"location":"3.0/config/sudo-kubernetes/#update-the-kubernetes-config-with-the-new-abcdesktopyaml","title":"Update the kubernetes config with the new abcdesktop.yaml","text":"
After the sudo command, you get a root level inside the shell of the users's pod
In production this value should be set to False
"},{"location":"3.0/config/syslog/","title":"Syslog configuration in od.config","text":""},{"location":"3.0/config/syslog/#add-syslog-server-support","title":"Add syslog server support","text":"
'filters': [ 'odcontext' ],\n
syslog is a protocol for tracking and logging system messages in Linux. Applications use syslog to export all their error and status messages to the files in the /var/log directory.
syslog uses the client-server model; a client transmits a text message to the server (receiver). The server is commonly called syslogd, syslog daemon, or syslog server. syslog uses the User Datagram Protocol (UDP) port 514 for communication.
To let abcdesktop log events in syslog trought UDP, we will have to modify abcdesktop configuration file to add an handler and 'syslog' entry in general logger and cherrypy.error logger. (syslog formatter is already in sample file)
At this state, new abcdesktop logging configuration should be applied. We can now verify syslog logs:
tail /var/log/syslog\n
If you see some lines with 'INFO' Level, you probably see abcdesktop logs in syslog ! If not try to do actions in abcdesktop (open session, launch new application, close session) and apply the tail command again.
"},{"location":"3.0/config/volumes/","title":"Define volumes to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume using hostPath. The hostPath can also be a mount point.
PersistentVolumeClaim using storageClassName parameter. Two examples are described one using nfs, the second one using s3.
"},{"location":"3.0/config/volumes/#define-persistentvolume-using-hostpath","title":"Define persistentVolume using hostPath","text":"
In your od.config file, define the new entries desktop.homedirectorytypedesktop.persistentvolumespecdesktop.persistentvolumeclaimspec
desktop.persistentvolumespec: create a new volume for the user's homeDir, for persistentVolume hostPath.
desktop.persistentvolumeclaimspec: create a new volume claim for the user's homeDir
# set to persistentVolumeClaim\ndesktop.homedirectorytype: 'persistentVolumeClaim'\n\n# define how to create persistentvolume\ndesktop.persistentvolumespec: {\n 'storageClassName': '',\n 'capacity': { 'storage': '1Gi' },\n 'accessModes': [ 'ReadWriteOnce' ], \n 'hostPath': { 'path': '/mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}' } }\n\n# define how to create persistentvolumeclaim\ndesktop.persistentvolumeclaimspec: {\n 'storageClassName': '',\n 'resources': { \n 'requests': { \n 'storage': '1Gi'\n } \n },\n 'accessModes': [ 'ReadWriteOnce' ] }\n
desktop.persistentvolumespec support template values. For example '/mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}'.
{{ provider }} is the provider's name templated value.
{{ userid }} is the user's id templated value.
The list of all template values can be read at the end of this chapter
The user's home directory inside the pod is located on host to /mnt/abcdesktop_volumes/{{ provider }}/{{ userid }}. The directory is created automatically by kubernetes.
The /mnt/abcdesktop_volumes/ content lists the provider name.
On the host, the new directory is created, where each home directory is located.
Read the new path for 'hostPath' persistent volumes
ls -la /mnt/abcdesktop_volumes/\ntotal 20\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 .\ndrwxr-xr-x 106 root root 4096 mai 11 11:34 ..\ndrwxr-xr-x 3 root root 4096 mai 12 12:40 anonymous\ndrwxr-xr-x 3 root root 4096 mai 12 12:39 github\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 google\n
For provider google, all users are listed.
ls -la /mnt/abcdesktop_volumes/google/\ntotal 20\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 .\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 ..\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 103464335761332102620\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:40 112026272437223559761\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 114102844260599245242\n
For provider google, list the user home directory for the user 103464335761332102620
ls -la /mnt/abcdesktop_volumes/google/103464335761332102620/\ntotal 76\ndrwxr-x--- 16 2048 2048 4096 mai 12 12:39 .\ndrwxr-xr-x 5 root root 4096 mai 12 12:40 ..\n-rw------- 1 2048 2048 71 mai 12 12:39 .Xauthority\n-rw-rw-r-- 1 2048 2048 12 janv. 27 18:36 .Xresources\ndrwxr-x--- 3 2048 2048 4096 mai 12 12:39 .cache\ndrwxr-x--- 6 2048 2048 4096 mai 12 12:39 .config\ndrwxrwxr-x 3 2048 2048 4096 janv. 27 18:36 .gconf\n-rw-r----- 1 2048 2048 0 mai 12 12:39 .gtk-bookmarks\n-rw-rw-r-- 1 2048 2048 564 janv. 27 18:36 .gtkrc-2.0\ndrwxr-x--- 3 2048 2048 4096 mai 12 12:39 .local\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 .store\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 .wallpapers\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Desktop\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Documents\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Downloads\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Music\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Pictures\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Public\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Templates\ndrwxr-x--- 2 2048 2048 4096 mai 12 12:39 Videos\n
"},{"location":"3.0/config/volumes/#list-of-all-template-values","title":"list of all template values","text":"
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale template tag value tag value set by auth rules
Note: hostPath supports file permissions and the pod's init commands chown or chmod can be used. The hostPath can also be a mount point, using nfs.
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-storageclassname","title":"Define persistentVolumeClaim using storageClassName","text":"
To define a persistentVolumeClaim, update the od.config file and set
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-csi-driver-nfs","title":"Define persistentVolumeClaim using csi-driver-nfs","text":"
In this example, we use nfs to share user home directory with each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.0/config/volumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.0/config/volumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.0/config/volumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
kubectl get pvc -n abcdesktop \nNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nplanet-fry-9372f Bound pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32 25Mi RWO nfs-csi-sc-ds01 5m7s\n
Get the PersistentVolumeClaim's description
kubectl describe pvc planet-fry-9372f -n abcdesktop \nName: planet-fry-9372f\nNamespace: abcdesktop\nStorageClass: nfs-csi-sc-ds01\nStatus: Bound\nVolume: pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32\nLabels: access_provider=planet\n access_providertype=ldap\n access_userid=fry\nAnnotations: pv.kubernetes.io/bind-completed: yes\n pv.kubernetes.io/bound-by-controller: yes\n volume.beta.kubernetes.io/storage-provisioner: nfs.csi.k8s.io\n volume.kubernetes.io/storage-provisioner: nfs.csi.k8s.io\nFinalizers: [kubernetes.io/pvc-protection]\nCapacity: 25Mi\nAccess Modes: RWO\nVolumeMode: Filesystem\nUsed By: fry-87066\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal ExternalProvisioning 7m (x2 over 7m) persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.\n Normal Provisioning 7m nfs.csi.k8s.io_kadmin_1c28f3c9-91ee-4aa0-b991-8c17c46133d3 External provisioner is provisioning volume for claim \"abcdesktop/planet-fry-9372f\"\n Normal ProvisioningSucceeded 7m nfs.csi.k8s.io_kadmin_1c28f3c9-91ee-4aa0-b991-8c17c46133d3 Successfully provisioned volume pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32\n
"},{"location":"3.0/config/volumes/#set-quota-for-user-homedir","title":"Set quota for user homedir","text":"
Steps : - Define posixAccount in the ldap directory service - Define quota on the nfs server
The user fry has a posixAccount description in the embedded directory service cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com
Attribute Value objectClass inetOrgPerson cn Philip J. Fry sn Fry description Human displayName Fry employeeType Delivery boy givenName Philip jpegPhoto JPEG-Photo (429x350 Pixel, 22132 Bytes) mail fry@planetexpress.com ou Delivering Crew uid fry userPassword fry uidNumber 1049 gidNumber 2049 \u00a0homeDirectory: \u00a0/home/fry
On the nfs server, define a quota for uid fry. In this case, I use truenas as nfs server.
Create the fry user with the same attribute and value.
On the Storage |\u00a0Pools |\u00a0User Quotas, define a quota for the user fry
Set the quota value for fry
"},{"location":"3.0/config/volumes/#login-to-your-abcdesktop-service_1","title":"Login to your abcdesktop service","text":"
Delete previous pvc and pv for the fry user, if need.
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the dd commands
Run a dd command to reach the quota value (50 MiB is this case).
dd if=/dev/urandom of=quota-test-file\ndd: writing to 'quota-test-file': Disk quota exceeded\n1127945+0 records in\n1127944+0 records out\n577507328 bytes (578 MB, 551 MiB) copied, 14.6404 s, 39.4 MB/s\n
You should get the error Disk quota exceeded. The size of quota-test-file is over a the quota limit.
50 MB is 52,428,800 Bytes
ls -la quota-test-file \n-rw-r----- 1 fry fry 58720256 Aug 25 15:16 quota-test-file\n
The user should not be able to create new file
dd if=/dev/zero of=quota-test-file2\ndd: failed to open 'quota-test-file2': Disk quota exceeded\n
The nfs server has returned an error if the user tries to create more than 50 MiB.
"},{"location":"3.0/config/volumes/#define-persistentvolumeclaim-using-k8s-csi-s3","title":"Define persistentVolumeClaim using k8s-csi-s3","text":"
In this example, we use s3 to share user home directory with each worker node
Use the https://github.com/yandex-cloud/k8s-csi-s3 as a CSI for S3 with minio as backend.
Follow https://github.com/yandex-cloud/k8s-csi-s3 setup guide and test with the sample pod to make sure that fuse mounts the S3 file system.
"},{"location":"3.0/config/volumes/#init-command-options-has-no-file-permissions-support","title":"init command options has no file permissions support","text":"
By default the storageclass use mounter: geesefs. geesefs does not store file permissions and the init commands chown or chmod exit with no zero value, then the pod does not start. All files belongs to root, but with correct permissions options: \"--memory-limit 1000 --dir-mode 0777 --file-mode 0666 --setuid 0\".
To get a better sound quality, you can use a webrtc gateway and send a rtp stream to the webrtc gateway. abcdesktop plays sound using the web browser webrtc stack (good sound quality)
abcdesktop update the pulseaudio configuration, and add module-rtp-send. The module-rtp-send pusleaudio send to the destination_ip (in this example 1.2.3.4)
"},{"location":"3.0/config/webrtc/#install-a-janus-server","title":"Install a janus server","text":""},{"location":"3.0/config/webrtc/#install-janus","title":"Install janus","text":"
Install a janus service from meetecho.com on a server
Add X509 certificats in your janus.jcfg configuration. Certificate and key to use for DTLS (and passphrase if needed). If missing, Janus will autogenerate a self-signed certificate to use. Notice that self-signed certificates are fine for the purpose of WebRTC DTLS connectivity, for the time being, at least until Identity Providers are standardized and implemented in browsers.
webrtc.server is a dict. The default value is None. Set all dictionnary values to enable webrtc access for pulseaudio and for the web browser client.
The hostip value, is used by pluse audio to configure the rtp stream. This value must be an ip address (do not set the fqdn). This can be an internal ip address, and is only to configure pulseaudio module and describe how to send stream data to reach the webrtc gateway.
'hostip': '1.2.3.4'\n
The host value, is used by the browser to reach the webrtc gateway and get the rtp stream. This value must(should) be a fqdn. This fqdn is used by the web browser.
"},{"location":"3.0/config/controllers/manager/#garbagecollector","title":"garbagecollector","text":"Params Type Description expirein integer number in seconds since the container create date time force boolean garbage the container even if a user is connected
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.0/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204-step-by-step","title":"Install Kubernetes on Ubuntu 22.04 (Step by Step)","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04
"},{"location":"3.0/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.0 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.0 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.0/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
"},{"location":"3.0/setup/kubernetes_abcdesktop/#quick-installation-linux-or-macos","title":"Quick installation (Linux or macOS)","text":"
Quick installation can be run on Linux or macOS operation system.
Download and extract the latest release automatically (Linux or macOS):
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.0/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
Only if you use a private registry or if the abcdesktop registry is private Create Secret to allow kubernetes to download abcdesktop images from docker registry. For this part you need to change docker-username and docker-password by credentials provided by project owner. If you don't have this values, you will have to build abcdesktop images by yourself.
change docker.json path if need /root/.docker/config.json kubectl create secret generic abcdesktopregistrysecret --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n abcdesktop
"},{"location":"3.0/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main file for pyos control plane.
"},{"location":"3.0/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.0/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Great you have installed abcdesktop.io in Kubernetes mode. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the chapter add kubernetes contain
"},{"location":"3.0/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
This pod is created to ask Kubernetes for pulling the container image.
"},{"location":"3.0/setup/kubernetes_abcdesktop_applications/#connect-to-your-abcdesktop_1","title":"Connect to your abcdesktop","text":"
The API server receives a new image event from docker daemon. To run the new applications just refresh you web browser page.
Now reconnect to your abcdesktop.
Open your navigator to http://[your-ip-hostname]:30443/
http://localhost:30443/\n
The new applications are installed, and ready to run.
"},{"location":"3.0/setup/kubernetesmode/","title":"Setup kubernetes for GNU/Linux","text":"
This section apply only to configure kubernetes for GNU/Linux.
abcdesktop.io support docker mode and kubernetes mode. In this section we will study how abcdesktop.io is working in kubernetes mode. The abcdesktop.io kubernetes mode is recommended for enterprise use, all user containers can be distributed on different hosts.
The following commands will let you prepare kubernetes on one node. In this case, all applications run on a single node. It's recommended to start with a single node.
You need to disable swap memory on nodes as Kubernetes does not perform properly on a system that is using swap memory. Run the following command in order to disable swap memory.
swapoff -a\n
If you have some swaps in /etc/fstab, just comment them out. swapoff -a will disable all swaps temporarily.
Taints are Kubernetes flags to prevent Pod Scheduling.
Confirm that you now have a node in your cluster with the following command.
kubectl get nodes -o wide\n
It should return something like the following.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nhostname NotReady control-plane 3m17s v1.25.3 192.168.7.187 <none> Ubuntu 22.04.1 LTS 5.15.0-52-generic containerd://1.6.9\n
"},{"location":"3.0/setup/kubernetesmode/#step-4-deploy-flannel-through-the-master-node","title":"Step 4: Deploy flannel through the master node","text":"
A pod network is a medium of communication between the nodes of a network. We are deploying flannel network on our cluster through the following command:
Now when you see the status of the nodes, you will see that the master-node is ready :
kubectl get nodes -o wide\n
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nHostname Ready control-plane 4m12s v1.25.3 192.168.7.187 <none> Ubuntu 22.04.1 LTS 5.15.0-52-generic containerd://1.6.9\n
At this step, there is no more Taints and your node is Ready.
Next step, continue with the setup abcdesktop for kubernetes.
"},{"location":"3.0/setup/requirements/","title":"Requirements","text":""},{"location":"3.0/setup/requirements/#prerequisites-for-abcdesktop-setup-in-release-3x","title":"Prerequisites for abcdesktop setup in release 3.x","text":"
Architecture x86-64 (arm-64 is not yet available)
16 GB of free space to store sample applications (gimp, libreoffice writer, libreoffice calc, libreoffice math, libreoffice impress, firefox) and core image services.
"},{"location":"3.0/setup/requirements/#enable-dns-add-one-to-microk8s","title":"enable dns add one to microk8s","text":"
$ microk8s enable dns\n
You should ready on stdout
$ microk8s enable dns\nInfer repository core for addon dns\nEnabling DNS\nApplying manifest\nserviceaccount/coredns created\nconfigmap/coredns created\ndeployment.apps/coredns created\nservice/kube-dns created\nclusterrole.rbac.authorization.k8s.io/coredns created\nclusterrolebinding.rbac.authorization.k8s.io/coredns created\nRestarting kubelet\nDNS is enabled\n
Check microk8s status
$ microk8s status\nmicrok8s is running\nhigh-availability: no\n datastore master nodes: 127.0.0.1:19001\n datastore standby nodes: none\naddons:\n enabled:\n dns # (core) CoreDNS\n ha-cluster # (core) Configure high availability on the current node\n
The pod nginx-od-788c97cdc9-b4gbq has CrashLoopBackOff status. This is wrong.
"},{"location":"3.0/setup/troubleshooting_core_services/#read-the-pods-log","title":"Read the pod's log","text":"
kubectl logs -l run=nginx-od -n abcdesktop\n
"},{"location":"3.0/setup/troubleshooting_core_services/#issue-with-an-error-in-nginx-configuration-file","title":"Issue with an error in nginx configuration file","text":"
running standart configuration file\nstarting nginx web server in foreground\nnginx: [emerg] unexpected \"s\" in /etc/nginx/sites-enabled/default:10\n
Nginx has failed to start. There is an error in the configuration file.
We need to fix the nginx-config ConfigMap in the yaml file.
"},{"location":"3.0/setup/troubleshooting_core_services/#start-the-pod-by-hands","title":"Start the pod by hands","text":"
If the kubectl logs command doesn't return usable information. You can update the pod default command and then start the service by hands.
Update the container description to replace the default command by a sleep command
Check that nginx pod has been updated and that the status is Running
kubectl get pods -l run=nginx-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\nnginx-od-666df64f4-whtng 1/1 Running 0 2m30s\n
Nginx web service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the nginx web service by hands.
Run the command /usr/local/openresty/nginx/sbin/nginx -p /etc/nginx -c nginx.conf -e /var/log/nginx/error.log
kubectl get pods -l run=pyos-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npyos-od-6cd679d6b8-css9q 1/1 Running 0 5s\n
Pyos service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the pyos service by hands.
starting abcdesktop uninstall commands start at 1669824908 epoch seconds\nstop and remove abcdesktop user pods\npod \"anonymous-33c30478-5cc0-4e18-b128-735694c98f3c\" deleted\nremove all services, pods\nclusterrole.rbac.authorization.k8s.io \"pyos-role\" deleted\nclusterrolebinding.rbac.authorization.k8s.io \"pyos-rbac\" deleted\nserviceaccount \"pyos-serviceaccount\" deleted\nstorageclass.storage.k8s.io \"storage-local-abcdesktop\" deleted\nconfigmap \"nginx-config\" deleted\ndeployment.apps \"memcached-od\" deleted\nsecret \"mongodb-secret\" deleted\ndeployment.apps \"mongodb-od\" deleted\ndeployment.apps \"nginx-od\" deleted\ndeployment.apps \"speedtest-od\" deleted\ndeployment.apps \"pyos-od\" deleted\nendpoints \"desktop\" deleted\nservice \"desktop\" deleted\nservice \"memcached\" deleted\nservice \"mongodb\" deleted\nservice \"speedtest\" deleted\nservice \"nginx\" deleted\nservice \"pyos\" deleted\ndeployment.apps \"openldap-od\" deleted\nservice \"openldap\" deleted\nremove all secrets\nsecret \"abcdesktopjwtdesktoppayload\" deleted\nsecret \"abcdesktopjwtdesktopsigning\" deleted\nsecret \"abcdesktopjwtusersigning\" deleted\nremove all configmaps\nconfigmap \"abcdesktop-config\" deleted\nconfigmap \"kube-root-ca.crt\" deleted\nremove all pvc\nNo resources found\nremove all pv\nNo resources found\nremove namespace\nnamespace \"abcdesktop\" deleted\nabcdesktop is uninstalled, in 48 seconds\n
"},{"location":"3.0/setup/uninstall_kubernetes/#run-step-by-step-uninstall-commands","title":"Run step by step uninstall commands","text":"
Run the bash commands from the uninstall-3.0.sh main content :
echo \"stop and remove abcdesktop user pods\"\nkubectl delete pods --selector=\"type=x11server\" -n abcdesktop\necho \"remove all services, pods\"\nkubectl delete -f https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.0.yaml \necho \"remove all secrets\"\nkubectl delete secrets --all -n abcdesktop\necho \"remove all configmaps\"\nkubectl delete cm --all -n abcdesktop\necho \"remove all pvc\"\nkubectl delete pvc --all -n abcdesktop 2>/dev/null\necho \"remove namespace\"\nkubectl delete namespace abcdesktop\necho \"abcdesktop is uninstalled\"\n
The last command kubectl delete namespace can take few minutes.
Please wait for the output message:
abcdesktop is uninstalled\n
Great, you have uninstalled abcdesktop for kubernetes.
"},{"location":"3.1/config/persistentvolumes/","title":"Use PersistentVolume and PersistentVolumeClaim to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume
PersistentVolumeClaim
In most cases with managed providers, you do not need to create a Persistent Volume, just a Persistent Volume Claim. Even in a non-managed set up, the Persistent Volume is generally created by the cluster administrator while Persistent Volume Claim is used by the end-user. The Persistent Volume Claim is namespaced ressource.
abcdestkop has a Persistent Volume Claim support.
Optionally, if you need a cluster administrator role, then abcdestkop can create Persistent Volume and Persistent Volume Claim.
"},{"location":"3.1/config/persistentvolumes/#define-clusterrole-only-if-you-need-to-create-persistent-volume","title":"Define ClusterRole only if you need to create Persistent Volume","text":"
Persistent Volume is a non-namespaced resource, so you need to update the pyos-role to ClusterRole to allow methods [ \"get\", \"list\", \"create\", \"patch\", \"delete\" ]
"},{"location":"3.1/config/persistentvolumes/#define-persistent-volume-and-persistent-volume-claim","title":"Define persistent volume and persistent volume claim","text":"
To define Persistent Volume or Persistent Volume Claim, update the od.config file and set
desktop.homedirectorytype: 'persistentVolumeClaim'\ndesktop.persistentvolume: { YOUR PERSISTENT VOLUME DICT CONFIGURATION TEMPLATE - THIS CAN BE NONE }\ndesktop.persistentvolumeclaim: 'NAME OF AN EXISTING PVC' OR { YOUR PERSISTENT VOLUME CLAIM DICT CONFIGURATION TEMPLATE } \ndesktop.removepersistentvolume: False\ndesktop.removepersistentvolumeclaim: True\n
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolume-is-optional","title":"Define desktop.persistentvolume is optional","text":"
desktop.persistentvolume is optional and can be set to None, else the type of desktop.persistentvolume parameter must be a dict (dictionary).
If desktop.persistentvolume is None then abcdesktop does not create a persistent volume. The persistent volumes should already exist or created by another provisioning engine.
If desktop.persistentvolume is a dict then abcdesktop creates the persistent volume.
If you set desktop.persistentvolume to None, or if you create the persistent volume manualy, then you don't need to update the pyos role.
The type of desktop.persistentvolumeclaim is dictionary or a string.
If desktop.homedirectorytype is set to 'persistentVolumeClaim', then desktop.persistentvolumeclaim must be defined as a dict or a str.
Kubernetes persistent volume is a namespaced resource, so you can keep the default rbac-role for pyos-role.
if desktop.persistentvolume option is defined then abcdesktop sets the persistent volume claim specification attribut volumeName value to the created persistent volume.
Get more information about PersistentVolume and PersistentVolumeClaim.
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-string","title":"Define desktop.persistentvolumeclaim as a string","text":"
All pods will share the same persistent volume claim, and the same persistent volume. The access mode must be ReadWriteMany, else only one pod (the first one) will bound the pvc.
'subPath' is not supported for ephemeral container.
"},{"location":"3.1/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-dictionary","title":"Define desktop.persistentvolumeclaim as a dictionary","text":"
"},{"location":"3.1/config/persistentvolumes/#template-values-for-desktoppersistentvolumespec-and-desktoppersistentvolumeclaim","title":"Template values for desktop.persistentvolumespec and desktop.persistentvolumeclaim","text":"
Value defines inside {{ VALUE }} is replaced by the templated value keys:
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale uuid a uniqu uuid template tag value tag value set by auth rules
The uuid have the same value for the persistent volume and for the persistent volume claim. uuid can be use for naming the PVC or the PV, or on all string values.
During the remove desktop process, delete or not the persistent volume. The persistent volume can be delete only if the desktop.deletepersistentvolumeclaim is True.
The default value for desktop.removepersistentvolume is False.
During the remove desktop process, delete or not the persistent volume claim.
The default value for desktop.removepersistentvolumeclaim is False.
"},{"location":"3.1/config/persistentvolumes/#define-persistentvolume-using-csi-driver-nfs","title":"Define persistentVolume using csi-driver-nfs","text":"
In this example, we use nfs protocol to share user home directory on each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.1/config/persistentvolumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.1/config/persistentvolumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.1/config/persistentvolumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
"},{"location":"3.1/config/persistentvolumes/#define-persistentvolume-using-storage-class-do-block-storage-on-digitalocean","title":"Define persistentVolume using storage class do-block-storage on digitalocean","text":""},{"location":"3.1/config/persistentvolumes/#update-odconfig-file","title":"Update od.config file","text":"
Login to your abcdesktop service, you should read on the html page, the status
b.Reading your persistent volume claim planet-fry, status is Pending, using storage class do-block-storage ....\nb.Creating your desktop\nb.Successfully assigned abcdesktop/fry-0d805 to pool-g8u8ddr44-yhh3i.................\nb.Your pod gets event SuccessfulAttachVolume AttachVolume.Attach succeeded for volume \"pvc-38899590-c94a-4849-a111-31ae7de624e1\" ..\nb.Started container i-planet-fry\nb.pending: x-planet-fry is starting\nb.Created container x-planet-fry\nb.Your pod fry-0d805 is Pending..\nc.Waiting for desktop graphical service 1/42........\nc.Waiting for desktop spawner service 1/42\nc.Waiting for desktop graphical service 2/42\nRock and roll\n
"},{"location":"3.1/config/persistentvolumes/#known-issues","title":"known issues","text":""},{"location":"3.1/config/persistentvolumes/#bound-a-volume-if-desktopdeletepersistentvolumeclaim-is-false","title":"Bound a volume if desktop.deletepersistentvolumeclaim is False","text":"
When desktop.deletepersistentvolumeclaim is True and desktop.deletepersistentvolume is False, if you create manually the persistent volumes, you may have to patch the claimRef of the persistent volumes to make it Available again.
kubectl get pv \nNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nplanet-fry 10Gi RWO Retain Released abcdesktop/planet-fry nfs-csi 4m1 \n
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.1/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204","title":"Install Kubernetes on Ubuntu 22.04","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04. km is a command tools from https://github.com/jfv-opensource/kube-tools repository.
"},{"location":"3.1/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.0 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.0 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.1/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
"},{"location":"3.1/setup/kubernetes_abcdesktop/#quick-installation-linux-or-macos","title":"Quick installation (Linux or macOS)","text":"
Quick installation can be run on Linux or macOS operation system.
Download and extract the latest release automatically (Linux or macOS):
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] use local file poduser.yaml\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] updated poduser.yaml file with new superdesktop\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-b75fb Ready\n[OK] pod/memcached-od-5ff8844d56-b75fb condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-t8cv7 Ready\n[OK] pod/mongodb-od-77c945467d-t8cv7 condition met\n[INFO] waiting for pod/nginx-od-b8c8c7b95-lkjl6 Ready\n[OK] pod/nginx-od-b8c8c7b95-lkjl6 condition met\n[INFO] waiting for pod/openldap-od-56b6564c85-2npln Ready\n[OK] pod/openldap-od-56b6564c85-2npln condition met\n[INFO] waiting for pod/pyos-od-67dfc48d84-kww9n Ready\n[OK] pod/pyos-od-67dfc48d84-kww9n condition met\n[INFO] waiting for pod/speedtest-od-894b7c886-69vc4 Ready\n[OK] pod/speedtest-od-894b7c886-69vc4 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-b75fb 1/1 Running 0 20s\nmongodb-od-77c945467d-t8cv7 1/1 Running 0 20s\nnginx-od-b8c8c7b95-lkjl6 1/1 Running 0 20s\nopenldap-od-56b6564c85-2npln 1/1 Running 0 18s\npyos-od-67dfc48d84-kww9n 1/1 Running 0 20s\nspeedtest-od-894b7c886-69vc4 1/1 Running 0 20s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n superdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
"},{"location":"3.1/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
"},{"location":"3.1/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.1/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.1
"},{"location":"3.1/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
The pod nginx-od-788c97cdc9-b4gbq has CrashLoopBackOff status. This is wrong.
"},{"location":"3.1/setup/troubleshooting_core_services/#read-the-pods-log","title":"Read the pod's log","text":"
kubectl logs -l run=nginx-od -n abcdesktop\n
"},{"location":"3.1/setup/troubleshooting_core_services/#issue-with-an-error-in-nginx-configuration-file","title":"Issue with an error in nginx configuration file","text":"
running standart configuration file\nstarting nginx web server in foreground\nnginx: [emerg] unexpected \"s\" in /etc/nginx/sites-enabled/default:10\n
Nginx has failed to start. There is an error in the configuration file.
We need to fix the nginx-config ConfigMap in the yaml file.
"},{"location":"3.1/setup/troubleshooting_core_services/#start-the-pod-by-hands","title":"Start the pod by hands","text":"
If the kubectl logs command doesn't return usable information. You can update the pod default command and then start the service by hands.
Update the container description to replace the default command by a sleep command
kubectl get pods -l run=nginx-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\nnginx-od-666df64f4-whtng 1/1 Running 0 2m30s\n
Nginx web service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the nginx web service by hands.
Run the command /usr/local/openresty/nginx/sbin/nginx -p /etc/nginx -c nginx.conf -e /var/log/nginx/error.log
kubectl get pods -l run=pyos-od -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npyos-od-6cd679d6b8-css9q 1/1 Running 0 5s\n
Pyos service is not started inside the container, only the pod is started. We need to get a shell inside the container to start the pyos service by hands.
Great, you have uninstalled abcdesktop for kubernetes with a dedicated namespace.
"},{"location":"3.2/config/persistentvolumes/","title":"Use PersistentVolume and PersistentVolumeClaim to retain user's home directory files","text":"
To retain user's home directory files, you can define
PersistentVolume
PersistentVolumeClaim
In most cases with managed providers, you do not need to create a Persistent Volume, just a Persistent Volume Claim. Even in a non-managed set up, the Persistent Volume is generally created by the cluster administrator while Persistent Volume Claim is used by the end-user. The Persistent Volume Claim is namespaced ressource.
abcdestkop has a Persistent Volume Claim support.
Optionally, if you need a cluster administrator role, then abcdestkop can create Persistent Volume and Persistent Volume Claim.
"},{"location":"3.2/config/persistentvolumes/#define-clusterrole-only-if-you-need-to-create-persistent-volume","title":"Define ClusterRole only if you need to create Persistent Volume","text":"
Persistent Volume is a non-namespaced resource, so you need to update the pyos-role to ClusterRole to allow methods [ \"get\", \"list\", \"create\", \"patch\", \"delete\" ]
"},{"location":"3.2/config/persistentvolumes/#define-persistent-volume-and-persistent-volume-claim","title":"Define persistent volume and persistent volume claim","text":"
To define Persistent Volume or Persistent Volume Claim, update the od.config file and set
desktop.homedirectorytype: 'persistentVolumeClaim'\ndesktop.persistentvolume: { YOUR PERSISTENT VOLUME DICT CONFIGURATION TEMPLATE - THIS CAN BE NONE }\ndesktop.persistentvolumeclaim: 'NAME OF AN EXISTING PVC' OR { YOUR PERSISTENT VOLUME CLAIM DICT CONFIGURATION TEMPLATE } \ndesktop.removepersistentvolume: False\ndesktop.removepersistentvolumeclaim: True\n
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolume-is-optional","title":"Define desktop.persistentvolume is optional","text":"
desktop.persistentvolume is optional, the default value is None. desktop.persistentvolume can be None, or a string or a dict.
If desktop.persistentvolume is None then abcdesktop does not create a persistent volume. The persistent volumes should already exist or created by another provisioning engine.
If desktop.persistentvolume is a string, it must match the name of a persistentvolume. abcdesktop does not create the persistent volume. The persistent volumes should already exist.
If desktop.persistentvolume is a dict then abcdesktop creates the persistent volume. The dict values of persistent volume support template values.
desktop.persistentvolumeclaim is optional, the default value is None. The type of desktop.persistentvolumeclaim can be None, or a string or a dict.
If desktop.homedirectorytype is set to 'persistentVolumeClaim', then desktop.persistentvolumeclaim must be defined as a dict or a string.
Kubernetes persistent volume is a namespaced resource, so you can keep the default rbac-role for pyos-role.
if desktop.persistentvolume option is defined then abcdesktop sets the persistent volume claim specification attribut volumeName value to the created persistent volume.
Get more information about PersistentVolume and PersistentVolumeClaim.
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-string","title":"Define desktop.persistentvolumeclaim as a string","text":"
All pods will share the same persistent volume claim, and the same persistent volume. The access mode must be ReadWriteMany, else only one pod (the first one) will bound the pvc.
'subPath' is not supported for ephemeral container.
"},{"location":"3.2/config/persistentvolumes/#define-desktoppersistentvolumeclaim-as-a-dictionary","title":"Define desktop.persistentvolumeclaim as a dictionary","text":"
"},{"location":"3.2/config/persistentvolumes/#template-values-for-desktoppersistentvolumespec-and-desktoppersistentvolumeclaim","title":"Template values for desktop.persistentvolumespec and desktop.persistentvolumeclaim","text":"
Value defines inside {{ VALUE }} is replaced by the templated value keys:
The template values can be one of them :
var description cn Common Name uid user id gid group id uidNumber user id number gidNumber group id number homeDirectory homeDirectory loginShell loginShell description description groups groups gecos gecos provider provider protocol protocol providertype providertype name user name userid user id locale user's locale uuid a uniqu uuid template tag value tag value set by auth rules
The uuid have the same value for the persistent volume and for the persistent volume claim. uuid can be use for naming the PVC or the PV, or on all string values.
During the remove desktop process, delete or not the persistent volume. The persistent volume can be delete only if the desktop.deletepersistentvolumeclaim is True.
The default value for desktop.removepersistentvolume is False.
During the remove desktop process, delete or not the persistent volume claim.
The default value for desktop.removepersistentvolumeclaim is False.
"},{"location":"3.2/config/persistentvolumes/#define-persistentvolume-using-csi-driver-nfs","title":"Define persistentVolume using csi-driver-nfs","text":"
In this example, we use nfs protocol to share user home directory on each worker node
Use the https://github.com/kubernetes-csi/csi-driver-nfs as a csi-driver-nfs with a nfs server as backend.
"},{"location":"3.2/config/persistentvolumes/#on-the-nfs-server","title":"On the nfs server","text":"
On the nfs server, create an export with the no_root_squash option
"},{"location":"3.2/config/persistentvolumes/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Login as user (Philip J. Fry, fry)
The new desktop for Philip J. Fry is created.
Start the web shell command using the search bar
Using the web shell application start the df command
The fry home dir is mounted on 192.168.7.101:/volume1/pods/pvc-b8317d7b-dc35-4fc3-88e9-ad894ab11d32
"},{"location":"3.2/config/persistentvolumes/#list-the-persistentvolume-and-persistentvolumeclaim","title":"List the PersistentVolume and PersistentVolumeClaim","text":"
"},{"location":"3.2/config/persistentvolumes/#define-persistentvolume-using-storage-class-do-block-storage-on-digitalocean","title":"Define persistentVolume using storage class do-block-storage on digitalocean","text":""},{"location":"3.2/config/persistentvolumes/#update-odconfig-file","title":"Update od.config file","text":"
Login to your abcdesktop service, you should read on the html page, the status
b.Reading your persistent volume claim planet-fry, status is Pending, using storage class do-block-storage ....\nb.Creating your desktop\nb.Successfully assigned abcdesktop/fry-0d805 to pool-g8u8ddr44-yhh3i.................\nb.Your pod gets event SuccessfulAttachVolume AttachVolume.Attach succeeded for volume \"pvc-38899590-c94a-4849-a111-31ae7de624e1\" ..\nb.Started container i-planet-fry\nb.pending: x-planet-fry is starting\nb.Created container x-planet-fry\nb.Your pod fry-0d805 is Pending..\nc.Waiting for desktop graphical service 1/42........\nc.Waiting for desktop spawner service 1/42\nc.Waiting for desktop graphical service 2/42\nRock and roll\n
desktop.persistentvolumeclaimforcesubpath is a boolean. The default value of desktop.persistentvolumeclaimforcesubpath is False
If desktop.persistentvolumeclaimforcesubpath is set to True then persistentvolumeclaim is mounted with the subPath option.
Subpath mounts are not allowed for ephemeral containers. Subpath cannot be updated. So you can run only pod applications, if you set desktop.persistentvolumeclaimforcesubpath to True.
If you try to start an ephemeral container application, you get an error code 422 and the message
{ \n \"reason\":\"FieldValueForbidden\",\n \"message\":\"Forbidden: can not be set for an Ephemeral Container\",\n \"field\":\"spec.ephemeralContainers[8].volumeMounts[0].subPath\"\n}\n
"},{"location":"3.2/config/persistentvolumes/#use-case-for-the-desktoppersistentvolumeclaimforcesubpath-option","title":"Use case for the desktop.persistentvolumeclaimforcesubpath option","text":"
In this case :
User's home directory are hosted on a nfs server
The nfs server (192.168.7.101) exports /volume1/home
The nfs server allows user to access subfolders
We create the unique PersistentVolume named pv-nfs.
---\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n annotations:\n pv.kubernetes.io/provisioned-by: nfs.csi.k8s.io\n name: pv-nfs\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteMany\n persistentVolumeReclaimPolicy: Retain\n storageClassName: nfs-csi\n mountOptions:\n - nfsvers=3\n csi:\n driver: nfs.csi.k8s.io\n readOnly: false\n # volumeHandle format: {nfs-server-address}#{sub-dir-name}#{share-name}\n # make sure this value is unique for every share in the cluster\n volumeHandle: nfs-server.default.svc.cluster.local/share##\n volumeAttributes:\n server: 192.168.7.101\n share: /volume1/home\n---\n
accessModes is ReadWriteMany for the PersistentVolume
We create the unique PersistentVolumeClaim named pvc-nfs-homedir
All pods share the same PersistentVolumeClaim named pvc-nfs-homedir, the desktop.persistentvolumeclaimforcesubpath is set to True, the subPath value is set with the default of the current LDAP userid. So the user's home directory is /volume1/home/{{ userid }}. The nfs server allows user to access subfolders, the mount operation is permitted.
"},{"location":"3.2/config/persistentvolumes/#known-issues","title":"known issues","text":""},{"location":"3.2/config/persistentvolumes/#bound-a-volume-if-desktopdeletepersistentvolumeclaim-is-false","title":"Bound a volume if desktop.deletepersistentvolumeclaim is False","text":"
When desktop.deletepersistentvolumeclaim is True and desktop.deletepersistentvolume is False, if you create manually the persistent volumes, you may have to patch the claimRef of the persistent volumes to make it Available again.
kubectl get pv \nNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nplanet-fry 10Gi RWO Retain Released abcdesktop/planet-fry nfs-csi 4m1 \n
You need a STUN server. You can use any STUN server like stun.l.google.com:19302. Session Traversal Utilities for NAT (STUN) is a protocol to discover your public address and determine any restrictions in your router that would prevent a direct connection with a peer.
You need your own TURN server. We use COTURN server as describe in this chapter. Traversal Using Relays around NAT (TURN) is meant to bypass the Symmetric NAT restriction by opening a connection with a TURN server and relaying all information through that server.
STUN servers are used by both client and abcdesktop WebRTC to determine their IP address as visible by the global Internet.
The STUN server can to hosted on a dedicated droplets and on an external network. For a public Internet usage, the Google-hosted STUN servers is a good
The TURN server can to hosted on a dedicated droplets and on an external network. To reduce latency you should host your TURN server near your kubernetes network.
You can run coturn service on dedicated machines or virtual machines, to avoid any scenario where the port range is being restricted or set arbitrarily by the infrastructure or orchestration tools.
coturn is a free open source implementation of TURN and STUN Server. The TURN Server is a VoIP media traffic NAT traversal server and gateway.
Coturn installation
apt-get install coturn \n
use SSL certificates
You need a X509 certificates to use TURN over TLS. Let's Encrypt provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge.
Minimal COTURN configuration file
Default minimal configuration file /etc/turnserver.conf for abcdesktop.
The sound is available. The web browser has an access to local sound devices. The web browser has an access to local speaker. The web browser can get an access to local microphone only if the user allows the access.
"},{"location":"3.2/config/webrtc/#play-sound-with-paplay","title":"Play sound with paplay","text":"
Open a Terminal Web Shell application and run the command inside the web shell
paplay /usr/share/sounds/alsa/Rear_Center.wav \n
You should heard Rear Center on your local sound device
To install Kubernetes on your GNU/Linux, you can read the Kubernetes setup guide on the kubernetes.io web site.
"},{"location":"3.2/setup/k8slinuxinstallation/#install-kubernetes-on-ubuntu-2204","title":"Install Kubernetes on Ubuntu 22.04","text":"
These commands install the latest Kubernetes on a single node Ubuntu 22.04. km is a command tools from https://github.com/jfv-opensource/kube-tools repository.
"},{"location":"3.2/setup/kubernetes_abcdesktop/","title":"abcdesktop in kubernetes mode","text":"
abcdesktop release 3.x support only kubernetes mode. All applications containers can be distributed on different hosts.
The abcdesktop infrastructure is using the contianers :
Container Role Image From oc.pyos API Server abcdesktopio/oc.pyos:3.2 abcdesktopio oc.nginx web server proxy abcdesktopio/oc.nginx:3.2 abcdesktopio oc.speedtest http benchmarch abcdesktopio/oc.speedtest LibreSpeed oc.mongo json database server mongo MongoDB memcached cache server memcached Memcached"},{"location":"3.2/setup/kubernetes_abcdesktop/#requirements","title":"Requirements","text":"
You need to have a
kubernetes cluster ready to run
kubectl or microk8s command-line tool must be configured to communicate with your cluster.
openssl and curl command line must be installed too.
You can run the Quick installation process or choose the Manually installation step by step
Linux operating system is recommanded to run abcdesktop.io.
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys create\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.2.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.2\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/poduser-3.2.yaml\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-6dt28 Ready\n[OK] pod/memcached-od-5ff8844d56-6dt28 condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-r82kv Ready\n[OK] pod/mongodb-od-77c945467d-r82kv condition met\n[INFO] waiting for pod/nginx-od-7445969696-6z88w Ready\n[OK] pod/nginx-od-7445969696-6z88w condition met\n[INFO] waiting for pod/openldap-od-5bbdd75864-d5bpq Ready\n[OK] pod/openldap-od-5bbdd75864-d5bpq condition met\n[INFO] waiting for pod/pyos-od-7584db6787-vnp64 Ready\n[OK] pod/pyos-od-7584db6787-vnp64 condition met\n[INFO] waiting for pod/speedtest-od-7f5484966f-jsb2m Ready\n[OK] pod/speedtest-od-7f5484966f-jsb2m condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-6dt28 1/1 Running 0 40s\nmongodb-od-77c945467d-r82kv 1/1 Running 0 40s\nnginx-od-7445969696-6z88w 1/1 Running 0 40s\nopenldap-od-5bbdd75864-d5bpq 1/1 Running 0 38s\npyos-od-7584db6787-vnp64 1/1 Running 0 39s\nspeedtest-od-7f5484966f-jsb2m 1/1 Running 0 39s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.2/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] use local file poduser.yaml\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] updated poduser.yaml file with new superdesktop\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/memcached-od-5ff8844d56-b75fb Ready\n[OK] pod/memcached-od-5ff8844d56-b75fb condition met\n[INFO] waiting for pod/mongodb-od-77c945467d-t8cv7 Ready\n[OK] pod/mongodb-od-77c945467d-t8cv7 condition met\n[INFO] waiting for pod/nginx-od-b8c8c7b95-lkjl6 Ready\n[OK] pod/nginx-od-b8c8c7b95-lkjl6 condition met\n[INFO] waiting for pod/openldap-od-56b6564c85-2npln Ready\n[OK] pod/openldap-od-56b6564c85-2npln condition met\n[INFO] waiting for pod/pyos-od-67dfc48d84-kww9n Ready\n[OK] pod/pyos-od-67dfc48d84-kww9n condition met\n[INFO] waiting for pod/speedtest-od-894b7c886-69vc4 Ready\n[OK] pod/speedtest-od-894b7c886-69vc4 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-b75fb 1/1 Running 0 20s\nmongodb-od-77c945467d-t8cv7 1/1 Running 0 20s\nnginx-od-b8c8c7b95-lkjl6 1/1 Running 0 20s\nopenldap-od-56b6564c85-2npln 1/1 Running 0 18s\npyos-od-67dfc48d84-kww9n 1/1 Running 0 20s\nspeedtest-od-894b7c886-69vc4 1/1 Running 0 20s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free tcp port from 30443\n[OK] get a free tcp port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-b8c8c7b95-lkjl6 --address 0.0.0.0 30443:80 -n superdesktop'\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
"},{"location":"3.2/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
"},{"location":"3.2/setup/kubernetes_abcdesktop/#step-4-download-and-create-the-abcdesktop-config-file","title":"Step 4: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.2/setup/kubernetes_abcdesktop/#step-5-create-the-abcdesktop-pods-and-services","title":"Step 5: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.2/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.2.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.2\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/poduser-3.2.yaml\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[INFO] kubectl create -f poduser.yaml\n[OK] kubectl create -f poduser.yaml\n[INFO] waiting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 condition met\n[INFO] deleting for pod/anonymous-74bea267-8197-4b1d-acff-019b24e778c5 Ready\n[OK] pod \"anonymous-74bea267-8197-4b1d-acff-019b24e778c5\" deleted\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nconfigmap/nginx-config created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/nginx created\nservice/pyos created\ndeployment.apps/openldap-od created\nservice/openldap created\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nmemcached-od-5ff8844d56-x89kq 1/1 Running 0 11s\nmongodb-od-77c945467d-c5cw4 1/1 Running 0 11s\nnginx-od-86c5dfcc67-nfvbq 1/1 Running 0 11s\nopenldap-od-5bbdd75864-mzzmh 1/1 Running 0 11s\npyos-od-7646bf4786-c2hdm 1/1 Running 0 11s\nspeedtest-od-7f5484966f-6t4b2 1/1 Running 0 11s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-86c5dfcc67-nfvbq --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.2/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.2.ps1 PowerShell script allows you to set the new namespace as an option.
You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes.
Network policies are implemented by the network plugin. To use network policies, you must be using a networking solution which supports NetworkPolicy.
There are two sorts of isolation defined in abcdesktop : the NetworkPolicy rights and the NetworkPolicy permits.
The NetworkPolicy rights contains egress and ingress for pod selected by tag. rights means access (ingress) to this pod and access (egress) from this pod. To define ip filter for user's pod, you need to set egress NetworkPolicy.
The NetworkPolicy permits contains egress to a pod selected by tag. The NetworkPolicy permits means permit access to this pod.
"},{"location":"3.3/config/networkpolicy/#apply-the-default-netpol-default-33yaml-file","title":"Apply the default netpol-default-3.3.yaml file","text":"
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-vbbb7 1/1 Running 0 32s\nmemcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s\nmongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s\nnginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s\nopenldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s\npyos-od-8d4988b56-vcd7z 1/1 Running 0 32s\nrouter-od-f5458658-b52hj 1/1 Running 0 33s\nspeedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.3/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[OK] default account is created\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[OK] pyos-serviceaccount account is created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready\n[OK] pod/console-od-79bf9bf475-gbb62 condition met\n[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready\n[OK] pod/memcached-od-d4b6b6867-c8b4p condition met\n[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready\n[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met\n[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready\n[OK] pod/nginx-od-57dccb8cf9-txgzc condition met\n[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready\n[OK] pod/openldap-od-6955699d5-qhjzr condition met\n[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready\n[OK] pod/pyos-od-777747f64b-r87x5 condition met\n[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready\n[OK] pod/router-od-59d67d664f-f56m8 condition met\n[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready\n[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-79bf9bf475-gbb62 1/1 Running 0 12s\nmemcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s\nmongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s\nnginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s\nopenldap-od-6955699d5-qhjzr 1/1 Running 0 12s\npyos-od-777747f64b-r87x5 1/1 Running 0 13s\nrouter-od-59d67d664f-f56m8 1/1 Running 0 13s\nspeedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n\n[OK] Please open your web browser and connect to http://localhost:30443/\n
"},{"location":"3.3/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
You can verify secrets creation with the following command :
kubectl get secrets -n abcdesktop\n
You should read on the standard output :
NAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 68s\nabcdesktopjwtdesktopsigning Opaque 2 68s\nabcdesktopjwtusersigning Opaque 2 67s\n
"},{"location":"3.3/setup/kubernetes_abcdesktop/#step-3-download-and-create-the-abcdesktop-config-file","title":"Step 3: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.3/setup/kubernetes_abcdesktop/#step-4-create-the-abcdesktop-pods-and-services","title":"Step 4: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.3/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Also, you can run again the command
kubectl get pods -l type=x11server -n abcdesktop\n
You should see that the anonymous-XXXXX pod have been created and is Running
NAME READY STATUS RESTARTS AGE\nanonymous-c44fc 4/4 Running 0 116s\n
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.3/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-pghrs 1/1 Running 0 12s\nmemcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s\nmongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s\nnginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s\nopenldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s\npyos-od-8d4988b56-7bg5z 1/1 Running 0 12s\nrouter-od-f5458658-znwcg 1/1 Running 0 12s\nspeedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.3/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-vbbb7 1/1 Running 0 32s\nmemcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s\nmongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s\nnginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s\nopenldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s\npyos-od-8d4988b56-vcd7z 1/1 Running 0 32s\nrouter-od-f5458658-b52hj 1/1 Running 0 33s\nspeedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.4/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[OK] default account is created\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[OK] pyos-serviceaccount account is created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready\n[OK] pod/console-od-79bf9bf475-gbb62 condition met\n[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready\n[OK] pod/memcached-od-d4b6b6867-c8b4p condition met\n[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready\n[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met\n[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready\n[OK] pod/nginx-od-57dccb8cf9-txgzc condition met\n[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready\n[OK] pod/openldap-od-6955699d5-qhjzr condition met\n[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready\n[OK] pod/pyos-od-777747f64b-r87x5 condition met\n[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready\n[OK] pod/router-od-59d67d664f-f56m8 condition met\n[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready\n[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-79bf9bf475-gbb62 1/1 Running 0 12s\nmemcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s\nmongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s\nnginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s\nopenldap-od-6955699d5-qhjzr 1/1 Running 0 12s\npyos-od-777747f64b-r87x5 1/1 Running 0 13s\nrouter-od-59d67d664f-f56m8 1/1 Running 0 13s\nspeedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n\n[OK] Please open your web browser and connect to http://localhost:30443/\n
"},{"location":"3.4/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
You can verify secrets creation with the following command :
kubectl get secrets -n abcdesktop\n
You should read on the standard output :
NAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 68s\nabcdesktopjwtdesktopsigning Opaque 2 68s\nabcdesktopjwtusersigning Opaque 2 67s\n
"},{"location":"3.4/setup/kubernetes_abcdesktop/#step-3-download-and-create-the-abcdesktop-config-file","title":"Step 3: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.4/setup/kubernetes_abcdesktop/#step-4-create-the-abcdesktop-pods-and-services","title":"Step 4: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.4/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Also, you can run again the command
kubectl get pods -l type=x11server -n abcdesktop\n
You should see that the anonymous-XXXXX pod have been created and is Running
NAME READY STATUS RESTARTS AGE\nanonymous-c44fc 4/4 Running 0 116s\n
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.4/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-pghrs 1/1 Running 0 12s\nmemcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s\nmongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s\nnginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s\nopenldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s\npyos-od-8d4988b56-7bg5z 1/1 Running 0 12s\nrouter-od-f5458658-znwcg 1/1 Running 0 12s\nspeedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.4/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-vbbb7 1/1 Running 0 32s\nmemcached-od-d4b6b6867-tbfgf 1/1 Running 0 33s\nmongodb-od-5d996fd57b-tcn45 1/1 Running 0 33s\nnginx-od-796c7d7d6b-lgnjb 1/1 Running 0 33s\nopenldap-od-567dcf7bf6-h2nq9 1/1 Running 0 32s\npyos-od-8d4988b56-vcd7z 1/1 Running 0 32s\nrouter-od-f5458658-b52hj 1/1 Running 0 33s\nspeedtest-od-7fcc9649b4-qllr7 1/1 Running 0 32s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-lgnjb --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
The command above downloads the latest release (numerically) of abcdesktop.io. The quick installation process runs the all commands step by step:
create the abcdesktop namespace
create clusterRole and service account
build all rsa keys pairs for jwt signing and payload encryption
download the default configuration file od.config
create all services, deployments, secrets and configmaps
fetch pod user's container images
"},{"location":"3.5/setup/kubernetes_abcdesktop/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own during the install process. The install-3.2.sh bash script allow you to set the new namespace as an option.
[INFO] abcdesktop install script namespace=superdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace superdesktop\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] use local file abcdesktop.yaml\n[OK] use local file od.config\n[OK] updated abcdesktop.yaml file with new namespace superdesktop\n[OK] updated abcdesktop.yaml file with new fqdn superdesktop.svc.cluster.local\n[OK] updated od.config file with new namespace superdesktop\n[OK] updated od.config file with new fqdn superdesktop.svc.cluster.local\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n superdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\n[OK] default account is created\n[OK] role.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created\ndeployment.apps/mongodb-od created\ndeployment.apps/memcached-od created\ndeployment.apps/router-od created\ndeployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[OK] pyos-serviceaccount account is created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] waiting for pod/console-od-79bf9bf475-gbb62 Ready\n[OK] pod/console-od-79bf9bf475-gbb62 condition met\n[INFO] waiting for pod/memcached-od-d4b6b6867-c8b4p Ready\n[OK] pod/memcached-od-d4b6b6867-c8b4p condition met\n[INFO] waiting for pod/mongodb-od-5d996fd57b-z2pjl Ready\n[OK] pod/mongodb-od-5d996fd57b-z2pjl condition met\n[INFO] waiting for pod/nginx-od-57dccb8cf9-txgzc Ready\n[OK] pod/nginx-od-57dccb8cf9-txgzc condition met\n[INFO] waiting for pod/openldap-od-6955699d5-qhjzr Ready\n[OK] pod/openldap-od-6955699d5-qhjzr condition met\n[INFO] waiting for pod/pyos-od-777747f64b-r87x5 Ready\n[OK] pod/pyos-od-777747f64b-r87x5 condition met\n[INFO] waiting for pod/router-od-59d67d664f-f56m8 Ready\n[OK] pod/router-od-59d67d664f-f56m8 condition met\n[INFO] waiting for pod/speedtest-od-67db77f86f-wqkb7 Ready\n[OK] pod/speedtest-od-67db77f86f-wqkb7 condition met\n[INFO] list all pods in namespace superdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-79bf9bf475-gbb62 1/1 Running 0 12s\nmemcached-od-d4b6b6867-c8b4p 1/1 Running 0 13s\nmongodb-od-5d996fd57b-z2pjl 1/1 Running 0 13s\nnginx-od-57dccb8cf9-txgzc 1/1 Running 0 13s\nopenldap-od-6955699d5-qhjzr 1/1 Running 0 12s\npyos-od-777747f64b-r87x5 1/1 Running 0 13s\nrouter-od-59d67d664f-f56m8 1/1 Running 0 13s\nspeedtest-od-67db77f86f-wqkb7 1/1 Running 0 13s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n\n[OK] Please open your web browser and connect to http://localhost:30443/\n
"},{"location":"3.5/setup/kubernetes_abcdesktop/#manually-installation-step-by-step-linux-macos-or-windows","title":"Manually installation step by step (Linux, macOS or Windows)","text":"
The following commands will let you deploy an abcdesktop on the master node. All applications run on a single server.
User JWT is signed. So we need to define a (private, public) RSA keys for signing. Desktop JWT is encrypted AND signed. So we need to define a (private, public) RSA keys for signing, and a (private, public) RSA keys to encrypt data.
The JWT payload is encrypted with the abcdesktop jwt desktop payload private by pyos
The JWT payload is decrypted with the abcdesktop jwt desktop payload public keys by nginx.
Please use the payload private as private key, and the payload public as private key. Do not publish the public key. This public key must stay private, this is a special case, this is not stupid, it's only a more secure option.
The JSON Web Tokens payload is signed with the abcdesktop jwt desktop signing private keys
The JSON Web Tokens payload is verified with the abcdesktop jwt desktop signing public keys.
The JSON Web Tokens user is signed with the abcdesktop jwt user signing private keys by pyos.
The JSON Web Tokens user is verified with the abcdesktop jwt user signing public keys by pyos
As multiple pods of pyos can run simultaneously, the same private and public keys value are stored into kubernetes secret.
The abcdesktop jwt desktop payload public key is read by nginx lua script. The exported the public key need the RSAPublicKey_out option, to use the RSAPublicKey format. The RSAPublicKey format make key file format compatible between python 3.x jwt module and lua jwt lib.
The following commands will let you create all necessary keys :
You can verify secrets creation with the following command :
kubectl get secrets -n abcdesktop\n
You should read on the standard output :
NAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 68s\nabcdesktopjwtdesktopsigning Opaque 2 68s\nabcdesktopjwtusersigning Opaque 2 67s\n
"},{"location":"3.5/setup/kubernetes_abcdesktop/#step-3-download-and-create-the-abcdesktop-config-file","title":"Step 3: Download and create the abcdesktop config file","text":"
Download the od.config file. This is the main configuration file for pyos control plane.
"},{"location":"3.5/setup/kubernetes_abcdesktop/#step-4-create-the-abcdesktop-pods-and-services","title":"Step 4: Create the abcdesktop pods and services","text":"
abcdesktop.yaml file contains declarations for all roles, service account, pods, and services required for abcdesktop.
Once the pods are created, all pods should be in Running status. For the first time, please wait for downloading all container images. It can take a while.
"},{"location":"3.5/setup/kubernetes_abcdesktop/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your navigator to http://[your-ip-hostname]:30443/
abcdesktop homepage should be available :
Click on the Connect with Anonymous access button. abcdesktop service pyos is creating a new pod.
Few seconds later, processes are ready to run. You should see the abcdesktop main screen, with no application in the dock.
Also, you can run again the command
kubectl get pods -l type=x11server -n abcdesktop\n
You should see that the anonymous-XXXXX pod have been created and is Running
NAME READY STATUS RESTARTS AGE\nanonymous-c44fc 4/4 Running 0 116s\n
Great you have installed abcdesktop.io. You just need a web browser to reach your web workspace. It' now time to add some container applications. Read the next chapter to add applications
"},{"location":"3.5/setup/kubernetes_abcdesktop_applications/","title":"Setup applications for abcdesktop","text":""},{"location":"3.5/setup/kubernetes_abcdesktop_applications/#quick-application-install","title":"Quick application install","text":"
Quick installation can be run on Linux or macOS operation system.
Add new application, require to send an application json document to the control-plane pyos.
"},{"location":"3.5/setup/kubernetes_abcdesktop_applications/#download-a-json-application-document-format","title":"Download a json application document format","text":"
In this example, we install the application 2048 game, but you can choose another one from https://github.com/abcdesktopio/images/tree/main/artifact/3.2
"},{"location":"3.5/setup/kubernetes_abcdesktop_applications/#rest-api-methods-description-for-apimanagerimage","title":"REST API methods description for /API/manager/image","text":"Method Type GET http request list images in mongo db image collection PUT http request update or insert images in mongo db image collection, then create a pull pod to fetch images POST http request update or insert images in mongo db image collection. This method does not pull images. DELETE http request delete images in mongo db image collection Method Sample GETcurl -X GET -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/imagePUTcurl -X PUT -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonPOSTcurl -X POST -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image -d@xterm.d.jsonDELETEcurl -X DELETE -H 'Content-Type: text/javascript' http://localhost:30443/API/manager/image/efbb56e0c579d1945fd8f4a4d955e08d7801208c953e03fe6d4d274edd1904c9
The PUT method create a pull pod to fetch application images. Check that a new pull-2048-*-UUID pod exists
kubectl get pods -n abcdesktop\n
The pod pull-2048-abcinst-9fd80f22ad6b0750cb3d248bda04de25444bab2cf274 is ContainerCreating.
Quick installation can be run on Windows operation system.
"},{"location":"3.5/setup/kubernetes_abcdesktop_windows/#prerequisites","title":"Prerequisites","text":""},{"location":"3.5/setup/kubernetes_abcdesktop_windows/#install-and-configure-docker-desktop","title":"Install and configure Docker Desktop","text":"
To run abcdesktop on Microsoft Windows plateform you need to use docker desktop
Start Docker Desktop and wait for the docker engine to start.
Once started go to the Settings | Kubernetes and click on Enable Kubernetes, starting your cluster may take a while.
Now your cluster should be correctly initialized, you can check it by opening a new PowerShell and run the command kubectl version
[INFO] abcdesktop install script namespace=abcdesktop\n[OK] kubectl version\n[OK] openssl version\n[OK] kubectl create namespace abcdesktop\nwriting RSA key\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_payload keys created\nwriting RSA key\n[OK] abcdesktop_jwt_desktop_signing keys create\nwriting RSA key\n[OK] abcdesktop_jwt_user_signing keys create\n[OK] create secret generic abcdesktopjwtdesktoppayload\n[OK] create secret generic abcdesktopjwtdesktopsigning\n[OK] create secret generic abcdesktopjwtusersigning\n[OK] label secret abcdesktopjwtdesktoppayload\n[OK] label secret abcdesktopjwtdesktopsigning\n[OK] label secret abcdesktopjwtusersigning\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/kubernetes/abcdesktop-3.3.yaml\n[OK] downloaded source https://raw.githubusercontent.com/abcdesktopio/conf/main/reference/od.config.3.3\n[OK] kubectl create configmap abcdesktop-config --from-file=od.config -n abcdesktop\n[OK] label configmap abcdesktop-config abcdesktop/role=pyos.config\nrole.rbac.authorization.k8s.io/pyos-role created\nrolebinding.rbac.authorization.k8s.io/pyos-rbac created\nserviceaccount/pyos-serviceaccount created\nconfigmap/configmap-mongodb-scripts created\nsecret/secret-mongodb created deployment.apps/mongodb-od created deployment.apps/memcached-od created deployment.apps/router-od created deployment.apps/nginx-od created\ndeployment.apps/speedtest-od created\ndeployment.apps/pyos-od created\ndeployment.apps/console-od created\ndeployment.apps/openldap-od created\nendpoints/desktop created\nservice/desktop created\nservice/memcached created\nservice/mongodb created\nservice/speedtest created\nservice/pyos created\nservice/console created\nservice/http-router created\nservice/website created\nservice/openldap created\n[INFO] waiting for deployment/console-od available\n[OK] deployment.apps/console-od condition met\n[INFO] waiting for deployment/memcached-od available\n[OK] deployment.apps/memcached-od condition met\n[INFO] waiting for deployment/mongodb-od available\n[OK] deployment.apps/mongodb-od condition met\n[INFO] waiting for deployment/nginx-od available\n[OK] deployment.apps/nginx-od condition met\n[INFO] waiting for deployment/openldap-od available\n[OK] deployment.apps/openldap-od condition met\n[INFO] waiting for deployment/pyos-od available\n[OK] deployment.apps/pyos-od condition met\n[INFO] waiting for deployment/router-od available\n[OK] deployment.apps/router-od condition met\n[INFO] waiting for deployment/speedtest-od available\n[OK] deployment.apps/speedtest-od condition met\n[INFO] list all pods in namespace abcdesktop\nNAME READY STATUS RESTARTS AGE\nconsole-od-844c749f85-pghrs 1/1 Running 0 12s\nmemcached-od-d4b6b6867-wjvmz 1/1 Running 0 12s\nmongodb-od-5d996fd57b-2ncll 1/1 Running 0 12s\nnginx-od-796c7d7d6b-cxlzt 1/1 Running 0 12s\nopenldap-od-567dcf7bf6-77zv7 1/1 Running 0 12s\npyos-od-8d4988b56-7bg5z 1/1 Running 0 12s\nrouter-od-f5458658-znwcg 1/1 Running 0 12s\nspeedtest-od-7fcc9649b4-kxnsn 1/1 Running 0 12s\n[INFO] Setup done\n[INFO] Checking the service url on http://localhost:30443\n[INFO] service status is down\n[INFO] Looking for a free TCP port from 30443\n[OK] Get a free TCP port from 30443\n\n[INFO] If you're using a cloud provider\n[INFO] Forwarding abcdesktop service for you on port=30443\n[INFO] For you setup is running the command 'kubectl port-forward nginx-od-796c7d7d6b-cxlzt --address 0.0.0.0 30443:80 -n abcdesktop'\n[OK] Port-Forward successful\n[OK] Please open your web browser and connect to\n\n[INFO] http://localhost:30443/\n
You can open a web browser and go to the http://localhost:30443/
"},{"location":"3.5/setup/kubernetes_abcdesktop_windows/#change-the-default-namespace","title":"Change the default namespace","text":"
You may need to replace the default namespace abcdesktop by your own. The install-3.3.ps1 PowerShell script allows you to set the new namespace as an option.
"},{"location":"about/authors/","title":"Authors and Contributors","text":""},{"location":"about/authors/#primary-authors","title":"Primary Authors","text":"
Alexandre DEVELY : Project owner, architect, developer, containers and security design, all components, maintainer of the code and has written much of the current code base
Cedric HAUWEL : Control Plane PyOS and authentification, included a complete refactor of the control plane
Jeremy PETIT : HTML, CSS, Javascript, nodejs: Full Stack Javascript Developer
Kevin VOYER : HTML, CSS, Javascript, Firefox clipboard extension, nodejs : Full Stack Javascript Developer
Vincent PENVERN : Python, Ansible, Firefox clipboard extension, Pyos and embedded applications
Franck SEROT : Project owner, architect, developer, containers and security design, all components, maintainer of the code and has written much of the current code base
Jean-Philippe XAVIER: Architect, design and network policies with calico
The incomplete list of individuals below have provided patches or otherwise contribute to the project prior to the project being hosted on GitHub. See the GitHub commit log for a list of recent contributors. We would like to thank everyone who has contributed to the project in any way.
"},{"location":"about/gnu-gpl-v2.0/","title":"GNU General Public License","text":"
Version 2, June 1991 Copyright \u00a9 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.
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.
"},{"location":"about/gnu-gpl-v2.0/#terms-and-conditions-for-copying-distribution-and-modification","title":"TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION","text":"
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 \u201cProgram\u201d, below, refers to any such program or work, and a \u201cwork based on the Program\u201d 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 \u201cmodification\u201d.) Each licensee is addressed as \u201cyou\u201d.
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 \u201cany later version\u201d, 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.
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 \u201cAS IS\u201d 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
"},{"location":"about/gnu-gpl-v2.0/#how-to-apply-these-terms-to-your-new-programs","title":"How to Apply These Terms to Your New Programs","text":"
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 \u201ccopyright\u201d line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>\nCopyright (C) <year> <name of author>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n
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\nGnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions; type `show c' for details.\n
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 \u201ccopyright disclaimer\u201d for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n`Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n<signature of Ty Coon>, 1 April 1989\nTy Coon, President of Vice\n
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.
"},{"location":"about/howreadthisdoc/","title":"How to read the abcdesktop.io documentation","text":""},{"location":"about/howreadthisdoc/#abcdesktopio-documentation","title":"abcdesktop.io documentation","text":"
The abcdesktop.io documentation brings you labs and tutorials that help you get hands-on experience using abcdesktop.io. You will find a mix of labs and tutorials that will help abcdesktop.io users, including sysadmins, IT Pros, and developers. There is a mix of hands-on tutorials right in the browser, instructions on setting up and using abcdesktop.io in your own environment (docker and kubernetes), and resources about best practices for developing and deploying your own abcdesktop.io applications.
We recommend you to start in docker mode first with the Setup Guide in docker mode.
Then explore the individual labs that explore many advanced features of abcdesktop.io, in Configuration Guide
You can also, read the genesis chapters GUI apps on Docker.
Learn more about abcdesktop.io, how it can help you deploy secure, scalable applications and save money along the way.
"},{"location":"about/howreadthisdoc/#the-basics-of-abcdesktopio","title":"The Basics of abcdesktop.io","text":"
Learn more about the core concepts of abcdesktop.io and what it can do for your operations team, and help you understand the fundamental value proposition for abcdesktop.io.
Topics include:
Fundamentals of abcdesktop.io
Deploy abcdesktop.io using docker-composer
Defined docker image application
Build your own application
Use standard GNU/Linux Application
Use Microsoft Windows Application with Wine
"},{"location":"about/howreadthisdoc/#the-advanced-of-abcdesktopio","title":"The Advanced of abcdesktop.io","text":"
This stage will help you learn more about some of the advanced topics of abcdesktop.io using Kubernetes.
Topics include:
Deploy abcdesktop.io using Kubernetes
Storage and Kubernetes drivers
Legacy Files server (CIFS, NFS, WebDav)
Amazon/S3, Ceph
Roles
Security
Networking Policies
Orchestration
LoadBalancing
Logging with GrayLog
Garbage collector
"},{"location":"about/howtodolabsexercices/","title":"How to do the labs and exercices","text":"
abcdesktop labs and tutorials are written using a desktop host. The supported operating system are :
Operating System Recommended version GNU/Linux Ubuntu 18.04.4 LTS (Bionic Beaver) macOS/X Catalina version 10.15.3 (and above) Windows 10 Version 1703 (and above)"},{"location":"about/howtodolabsexercices/#choose-desktop-or-server","title":"Choose desktop or server","text":"
If you choose server, please translate the URL request http://localhost with the hostname of your server.
For example, if you are doing the exercice on a hostname 'server01.labs.domain.local', you have to translate the URL request http://localhost with http://server01.labs.domain.local
Your web browser (like Google Chrome) may refuse unsecure websocket (ws) connections to localhost or your FQDN (only wss, so you should setup a TLS certificate for your local web/websocket server). It should work without any issues in Mozilla Firefox on localhost.
If you choose desktop, the URL request http://localhost will reach your local services.
"},{"location":"about/opensource/","title":"Open Source","text":""},{"location":"about/opensource/#abcdesktopio-is-an-open-source-project","title":"abcdesktop.io is an open source project","text":"
abcdesktop.io is an open source project and is a volunteer effort. This means that it depends on people to give some of their free time to improve it and make it even better.
Follow the Fork me on github links, to get access to each repository.
If you are reading this, then you are probably curious or want to contribute in some way. Read on to see how you can do so.
abcdesktop.io deplend on a lot of open source diffrents projets.
"},{"location":"about/opensource/#webmodules","title":"WebModules","text":"Package Licence Authors Source novnc MPL-2.0 Joel Martin https://kanaka.github.io/noVNC/ os.js BSD license Anders Evenrud https://github.com/os-js/OS.js/ dropzone.js MIT license Matias Meno, www.colorglare.com https://github.com/enyo/dropzone/ hammer.js MIT license Jorik Tangelder http://hammerjs.github.io/ jquery MIT license jQuery Team https://jquery.com/ jqueryui MIT license jQuery Team https://jqueryui.com/ js-cookie MIT license Klaus Hartl & Fagner Brack https://github.com/js-cookie/ UAParser GPLv2 & MIT Faisal Salman https://github.com/faisalman/ua-parser-js Angular FileManager MIT license Jonas Sciangula Street https://github.com/joni2back/angular-filemanager Bootstrap MIT license Bootstrap team https://getbootstrap.com/ webaudio-wav-stream-player MIT license Julien Bouquillon https://github.com/revolunet/webaudio-wav-stream-player bootbox MIT license Nick Payne makeusabrew https://github.com/makeusabrew/bootbox"},{"location":"about/opensource/#container-components","title":"Container components","text":""},{"location":"about/opensource/#nginx","title":"nginx","text":"Package Licence Authors Source nginx BSD licence Igor Sysoev http://nginx.org/ lua GPL-Compatible Free Software Licenses team at PUC-Rio in Brazil https://www.lua.org/"},{"location":"about/opensource/#ocpyos","title":"oc.pyos","text":"Package Version License CherryPy 18.5.0 BSD License Jinja2 2.11.1 BSD-3-Clause PyJWT 1.7.1 MIT PyNaCl 1.3.0 Apache License 2.0 PyYAML 5.3 MIT bcrypt 3.1.7 Apache License, Version 2.0 certifi 2020.4.5.1 MPL-2.0 cffi 1.14.0 MIT chardet 3.0.4 LGPL cryptography 2.9 BSD or Apache License, Version 2.0 dnspython 1.16.0 BSD-like docker 4.2.0 Apache License 2.0 future 0.18.2 MIT google-auth 1.13.1 Apache 2.0 graypy 2.1.0 BSD License idna 2.9 BSD-like iso8601 0.1.12 MIT isort 4.3.21 MIT kubernetes 11.0.0 Apache License Version 2.0 netaddr 0.7.19 BSD License oauthlib 3.1.0 BSD paramiko 2.7.1 LGPL pyasn1 0.4.8 BSD pyasn1-modules 0.2.8 BSD-2-Clause pycrypto 2.6.1 Public Domain pymongo 3.10.1 Apache License, Version 2.0 python-dateutil 2.8.1 Dual License python-geoip 1.2 GNU LESSER GENERAL PUBLIC LICENSE python-ldap 3.2.0 Python style python-subprocess2 2.0.2 LGPLv3 pytz 2019.3 MIT requests 2.23.0 Apache 2.0 requests-oauthlib 1.3.0 ISC rsa 4.0 ASL 2 shellescape 3.8.1 MIT license urllib3 1.25.8 MIT Package Version License ntlm_auth 2.0 GNU Lesser General Public License kerberos 1.16-2 MIT cntlm 0.92.3 GNU General Public License version 2.0 (GPLv2)"},{"location":"about/opensource/#ocuser","title":"oc.user","text":"Package Licence Authors Source novnc MPL-2.0 Joel Martin (github@martintribe.org) https://kanaka.github.io/noVNC/ supervisor LICENCES.TXT Chris McDonough http://supervisord.org/ tigervnc MIT licence Tiger Dev Tea https://tigervnc.org/ openbox GNU license Mikael Magnusson http://openbox.org/ cupds GNU & LGPL Apple Inc. https://www.cups.org/ xsettingsd COPYING Daniel Erat https://github.com/derat/xsettingsd angular-filemanager AGPL-3.0 Maestro Alubia https://www.npmjs.com/package/angular-filemanager-nodejs-bridge"},{"location":"about/opensource/#daemons","title":"Daemons","text":""},{"location":"about/opensource/#spawner-service","title":"Spawner-Service","text":"Package Licence Authors Source accept-language-parser@1.5.0 MIT Andy Royle https://github.com/opentable/accept-language-parser accept-language@3.0.18 MIT Tingan Ho https://github.com/tinganho/node-accept-language accepts@1.3.7 MIT no Author https://github.com/jshttp/accepts create-symlink@1.0.0 MIT Shinnosuke Watanabe https://github.com/shinnn/create-symlink diacritics@1.3.0 MIT Andrew Kelley https://github.com/andrewrk/node-diacritics dominant-color@0.0.1 ISC Hrvoje Simic https://github.com/shime/dominant-color event-stream@4.0.1 MIT Dominic Tarr https://github.com/dominictarr/event-stream express-validator@6.4.0 MIT Christoph Tavan https://github.com/express-validator/express-validator express@4.17.1 MIT TJ Holowaychuk https://github.com/expressjs/express find-process@1.4.3 MIT zoujie https://github.com/yibn2008/find-process geoip-lite@1.4.1 Apache-2.0 Philip Tellis https://github.com/bluesmoon/node-geoip helmet@3.22.0 MIT Adam Baldwin https://github.com/helmetjs/helmet hex-rgb@4.1.0 MIT Sindre Sorhus https://github.com/sindresorhus/hex-rgb imagemagick@0.1.3 MIT Rasmus Andersson https://github.com/rsms/node-imagemagick ini@1.3.5 ISC Isaac Z. Schlueter https://github.com/isaacs/ini ipaddr.js@1.9.1 MIT whitequark https://github.com/whitequark/ipaddr.js jsonfile@6.0.1 MIT JP Richardson https://github.com/jprichardson/node-jsonfile mime-types@2.1.26 MIT no Author https://github.com/jshttp/mime-types mmmagic@0.5.3 MIT Brian White https://github.com/mscdex/mmmagic npid@0.4.0 MIT* Mathieu Turcotte https://github.com/MathieuTurcotte/node-pid ps-node@0.1.6 MIT no Author https://github.com/neekey/ps simple-parser@0.0.0 ISC no Author no Repository walk@2.3.14 (MIT OR Apache-2.0) AJ ONeal https://git.coolaj86.com/coolaj86/fs-walk.js which@2.0.2 ISC Isaac Z. Schlueter https://github.com/isaacs/node-which wmctrljs@1.1.9 ISC kevin.voyer.developpeur@gmail.com https://github.com/Kmynes/wmctrljs ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws xwininfo@0.0.0 ISC ashaffer https://github.com/ashaffer/node-xwininfo"},{"location":"about/opensource/#broadcast-service","title":"Broadcast-service","text":"Package Licence Authors Source http-proxy@1.18.0 MIT Charlie Robbins https://github.com/http-party/node-http-proxy ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws"},{"location":"about/opensource/#file-service","title":"File-Service","text":"Package Licence Authors Source busboy@0.3.1 MIT Brian White https://github.com/mscdex/busboy express@4.17.1 MIT TJ Holowaychuk https://github.com/expressjs/express fs-extra@9.0.0 MIT JP Richardson https://github.com/jprichardson/node-fs-extra helmet@3.22.0 MIT Adam Baldwin https://github.com/helmetjs/helmet mime-types@2.1.26 MIT no Author https://github.com/jshttp/mime-types mkdirp@1.0.4 MIT no Author https://github.com/isaacs/node-mkdirp urlencode@1.1.0 MIT fengmk2 https://github.com/node-modules/urlencode"},{"location":"about/opensource/#printer-service","title":"Printer-Service","text":"Package Licence Authors Source chokidar@3.3.1 MIT Paul Miller https://github.com/paulmillr/chokidar ws@7.2.3 MIT Einar Otto Stangvik https://github.com/websockets/ws"},{"location":"about/opensource/#xterm-service","title":"Xterm-Service","text":"Package Licence Authors Source xterm.js MIT xtermjs team https://github.com/xtermjs/xterm.js"},{"location":"about/opensource/#filemanager-service","title":"FileManager-Service","text":"Package Licence Authors Source angular-filemanager-nodejs-bridge@0.1.3 AGPL-3.0 Fabian K\u00f6ster no Repository"},{"location":"about/otherrelatedprojects/","title":"Others related projets","text":""},{"location":"about/otherrelatedprojects/#projects","title":"Projects","text":"
Welcome to the others related projects section, where you can find some projects related to use cloud application inside a web browser.
http://wiki.ros.org/docker/Tutorials/GUI
https://github.com/mviereck/x11docker x11docker allows to run graphical desktop applications (and entire desktops) in Docker Linux containers.
https://www.digitalocean.com/community/tutorials/how-to-remotely-access-gui-applications-using-docker-and-caddy-on-ubuntu-18-04 By using noVNC and TigerVNC, you can run native applications inside a Docker container and access them remotely using a web browser.
HW accelerated GUI apps on Docker Describe How to containerizing a GUI app. Really easy to understand, a good article.
https://www.kasmweb.com
https://github.com/fcwu/docker-ubuntu-vnc-desktop docker-ubuntu-vnc-desktop is a Docker image to provide web VNC interface to access Ubuntu LXDE/LxQT desktop environment.
Dockerize GUI app This project dockerize typical GUI app so that you can visit it in browser. Really good technical solutions.
kube-desktop
"},{"location":"about/play_sound_in_docker/","title":"Play sound inside a docker to a web browser","text":""},{"location":"about/play_sound_in_docker/#sound-in-docker-is-the-big-challenge","title":"Sound in docker is the big challenge","text":"
As VNC does not support sound, we have to forward a Pulseaudio null-sink output to the user browser, with no latency.
Release 1.0 : use the pulseaudio http stream and play wave data (poor sound quality but works in https only)
Release 2.0 : use janus webrtc gateway, send pulseaudio rtp stream to janus, and play sound using the web browser webrtc stack (good sound quality)
Release 3.0 : use virtual microphone using gstreamer and pulseaudio
Realy fun projets: use virtual microphone using gstreamer and pulseaudio and Get Pulseaduio sink from webrtc To be implemented
"},{"location":"about/play_sound_in_docker/#release-10-pulseaudio-with-a-simple-module-http-protocol-tcp-and-a-javascript-no-latency-wav-stream-player","title":"Release 1.0: Pulseaudio with a simple module-http-protocol-tcp and a javascript no latency wav stream player","text":"
webaudio-wav-stream-player No latency wav stream player using browser fetch streaming API and WebAudio
Pulseaudio with module-http-protocol-tcp A proof-of-concept HTTP module, which can be used to introspect the current status of the PulseAudio daemon using HTTP. Just load this module and point your browser to http://localhost:4714/. This module takes the same arguments as module-cli-protocol-tcp.
Create Pulseaudio null-sink
# defined with desktop 1.0\nload-module module-null-sink sink_name=u8_1_11025 format=u8 channels=1 rate=11025 sink_properties=\"device.description='default format=u8 c=1 ra\nte=11025'\"\n
Then use
load-module module-http-protocol-tcp\n
Read the http stream data, using fetch call :
$target is the container Ip Address
$pulseaudio_http_port is the pulseaudio http port ( by default, the http port vallue is
Pulseaudio module-http-protocol-tcp does not send wav formated header. We need to build a new wav header for each receved fragment. This is done in wavify.js file :
//\n// Write a proper WAVE header for the given buffer.\n// format ULAW or ALAW \n// Offset is hardcoded \nfunction wavify_law(data, numberOfChannels, sampleRate, bitsPerSample, format ) {\n\n // // total header : 4 + 26 + 12 + 8 = 50 \n // // and the data and size: 50 + 8 ( data + 32 bits for the size )\n var header_length = 58; // 4 + 26 + 12 + 8 + 8 = 58 \n var total_length = header_length + data.byteLength;\n\n // bitsPerSample MUST BE 8 bits\n\n // The default byte ordering assumed for WAVE data files is little-endian.\n var header = new ArrayBuffer(header_length); \n var d = new DataView(header);\n\n d.setUint8(0, \"R\".charCodeAt(0)); \n d.setUint8(1, \"I\".charCodeAt(0));\n d.setUint8(2, \"F\".charCodeAt(0));\n d.setUint8(3, \"F\".charCodeAt(0));\n\n // All integers MUST be set in bigEndian format\n // Wave chunks containing format information and sampled data\n // cksize 4 Chunk size: 4+n \n // 4: for sizeof( 'WAVE' ) + n \n // n: Wave chunks containing format information and sampled data\n //var data_length = d.setUint32(4, data.byteLength / 2 + 44, true);\n //bitsPerSample data.byteLength + 8+16+12\n d.setUint32(4, total_length, true); \n\n // write 4 bytes\n d.setUint8(8, \"W\".charCodeAt(0)); \n d.setUint8(9, \"A\".charCodeAt(0)); \n d.setUint8(10, \"V\".charCodeAt(0)); \n d.setUint8(11, \"E\".charCodeAt(0)); \n\n\n // write 4 bytes\n d.setUint8(12, \"f\".charCodeAt(0));\n d.setUint8(13, \"m\".charCodeAt(0));\n d.setUint8(14, \"t\".charCodeAt(0));\n d.setUint8(15, \" \".charCodeAt(0));\n\n\n // All integers MUST be set in bigEndian format\n\n\n // Subchunk1Size 16 for PCM. \n // Offset 16 \n // Size 4\n // This is the size of the rest of the Subchunk which follows this number.\n // The size of the rest of this subchunk.\n // All integers MUST be set in bigEndian format\n // d.setUint32(16, 16, true);\n // cksize 4 Chunk size: 16, 18 or 40 \n var chunksize = 18;\n d.setUint32(16, chunksize, true);\n\n // The format of the wave data, which will be 1 for uncompressed PCM data.\n // All integers MUST be set in bigEndian format\n // FORMAT must be WAVE_FORMAT_ULAW or WAVE_FORMAT_ALAW\n d.setUint16(20, format, true);\n\n // Indicates if the data is mono, stereo, or something else.\n // NumChannels Mono = 1, Stereo = 2, etc.\n // All integers MUST be set in bigEndian format\n d.setUint16(22, numberOfChannels, true);\n\n // The sample rate per second.\n // SampleRate 8000, 44100, etc.\n // All integers MUST be set in bigEndian format\n d.setUint32(24, sampleRate, true);\n\n // byteRate == SampleRate * NumChannels * BitsPerSample/8\n // All integers MUST be set in bigEndian format\n var byteRate = sampleRate * numberOfChannels * bitsPerSample/8;\n d.setUint32(28, byteRate, true ); \n\n // blockAlign == NumChannels * BitsPerSample/8\n // The number of bytes for one sample including all channels.\n var blockAlign = numberOfChannels * bitsPerSample / 8; \n // All integers MUST be set in bigEndian format\n d.setUint16(32, blockAlign, true ); \n\n // BitsPerSample 8 bits = 8, 16 bits = 16, etc.\n d.setUint16(34, bitsPerSample, true);\n\n // Wave files may include an additional field, usually reserved for non-PCM formats:\n // bits per Sample \n // Size of the extension \n // 2 bytes\n // Offset \n var cbSize = 0;\n d.setUint16(36, cbSize, true);\n\n d.setUint8(38, \"f\".charCodeAt(0));\n d.setUint8(39, \"a\".charCodeAt(0));\n d.setUint8(40, \"c\".charCodeAt(0));\n d.setUint8(41, \"t\".charCodeAt(0));\n var cksize = 4;\n d.setUint32(42, cksize, true);\n var dwSampleLength = data.byteLength; // Number of samples ( per channel )\n d.setUint32(46, dwSampleLength, true);\n\n// 50\n d.setUint8(50, \"d\".charCodeAt(0));\n d.setUint8(51, \"a\".charCodeAt(0));\n d.setUint8(52, \"t\".charCodeAt(0));\n d.setUint8(53, \"a\".charCodeAt(0));\n\n d.setUint32(54, data.byteLength, true);\n\n//58\n // data must pad byte 0 or 1 if n is odd\n return concat(header, data);\n}\n
Then use the WavPlayer.js from Julien Bouquillon https://github.com/revolunet/webaudio-wav-stream-player to read data and send to javascript AudioContext()
This Release is getting glitchy audio. In Chrome, the stream plays with a slight crackle. Read the issue https://github.com/revolunet/webaudio-wav-stream-player/issues/10
It works, uses only HTTP protocol but i can't fix the glitchy audio. We find another way to stream sound to web browser device, using the WebRTC stack and RTP pulseaudio.
"},{"location":"about/play_sound_in_docker/#release-20-pulseaudio-with-a-webrtc-gateway","title":"Release 2.0: Pulseaudio with a WebRTC gateway","text":""},{"location":"about/play_sound_in_docker/#architecture","title":"Architecture","text":"
Janus WebRTC Gateway with ICE server. Janus act as WebRTC gateway, listen for udp RTP stream from Pulseaudio and forward it to user web browser.
Pulseaudio with module-rtp-send Create a null-sink formated alaw and send it to the WebRTC gateway udp port on localhost.
### Load the RTP sender module (also configured via paprefs, see above)\nload-module module-null-sink sink_name=rtp_alaw format=alaw channels=1 rate=8000 sink_properties=\"device.description='RTP Multicast Sink alaw'\"\nload-module module-rtp-send source=rtp_alaw.monitor destination_ip=127.0.0.1 port=5000 channels=1 format=alaw\n
Make sure that the pip command is installed on you system.
"},{"location":"about/version/#how-to-build-the-documentation","title":"How to build the documentation","text":""},{"location":"about/version/#build-documentation-files","title":"Build documentation files","text":"
git clone https://github.com/abcdesktopio/docs\ncd docs\nmake docs\nINFO - Cleaning site directory \nINFO - Building documentation to directory: /home/alex/src/docs/opsdocs/site \n
All HTML files are located in the building documentation directory
"},{"location":"about/version/#how-to-view-the-documentation","title":"How to view the documentation","text":""},{"location":"about/version/#serve-documentation-files","title":"Serve documentation files","text":"
make serve\nINFO - Serving on http://127.0.0.1:8000\nINFO - Start watching changes\nINFO - Start detecting changes\n
Now connect http://127.0.0.1:8000 with any Web Navigator to browse through the documentation.
"},{"location":"applications/","title":"oc.apps","text":""},{"location":"applications/#to-get-more-informations","title":"To get more informations","text":"
Please, read the public documentation web site: * https://www.abcdesktop.io * https://abcdesktopio.github.io/
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.0\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-2048\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-alpine-error,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.TwentyFortyEight.desktop\"\nLABEL oc.launch=\"org.gnome.TwentyFortyEight.Gnome-2048\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"2048-alpine-error\"\nLABEL oc.displayname=\"2048 (alpine gtk) with error\"\nLABEL oc.path=\"/usr/bin/gnome-2048\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"2048-alpine-error\"\nENV APPBIN \"/usr/bin/gnome-2048\"\nENV APP \"/usr/bin/gnome-2048\"\nLABEL oc.containerengine=\"pod_application\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-alpine-error/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-alpine-error/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-alpine-error/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-alpine-error/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-2048\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-alpine,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.TwentyFortyEight.desktop\"\nLABEL oc.launch=\"org.gnome.TwentyFortyEight.Gnome-2048\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"2048-alpine\"\nLABEL oc.displayname=\"2048 (alpine gtk)\"\nLABEL oc.path=\"/usr/bin/gnome-2048\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"64M\\\",\\\"pid_mode\\\":false,\\\"network_mode\\\":\\\"none\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"2048-alpine\"\nENV APPBIN \"/usr/bin/gnome-2048\"\nENV APP \"/usr/bin/gnome-2048\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-alpine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-alpine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-alpine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-alpine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends 2048-qt && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_2048.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMTgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzI3NiAwIDAgMS4zMjc2IC01MTAuNjQgLTY2My41MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3AgaWQ9InN0b3AyIiBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A0IiBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMiIgc3RkRGV2aWF0aW9uPSIxMC41NjIzNzkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjE1IiBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTA1IiB4MT0iMjUuMDkzIiB4Mj0iMjUuMDM0IiB5MT0iNTkuMjMzIiB5Mj0iMi44MjYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODk5IiBzdG9wLWNvbG9yPSIjZmY1NDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDEiIHN0b3AtY29sb3I9IiNmYjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkxMyIgeDE9IjI2LjUwMiIgeDI9IjI2LjU5IiB5MT0iNTkuNjAyIiB5Mj0iMTguOTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTA3IiBzdG9wLWNvbG9yPSIjMzVlODcyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MDkiIHN0b3AtY29sb3I9IiMzNGU5ZDgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDkyMSIgeDE9IjQzLjA2NyIgeDI9IjQyLjU3OSIgeTE9IjU5LjQxIiB5Mj0iMjguMzQ2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wOTE1IiBzdG9wLWNvbG9yPSIjMzU1M2U0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A5MTciIHN0b3AtY29sb3I9IiM1NmNlZjMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTAyNSIgeD0iLS4xMjQ2MiIgeT0iLS4xMjQ2MiIgd2lkdGg9IjEuMjQ5MiIgaGVpZ2h0PSIxLjI0OTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMDI3IiBzdGREZXZpYXRpb249IjEuMzQ4NzMwNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEwMjkiIHg9Ii0uMTI0NjIiIHk9Ii0uMTI0NjIiIHdpZHRoPSIxLjI0OTIiIGhlaWdodD0iMS4yNDkyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzMSIgc3RkRGV2aWF0aW9uPSIxLjM0ODczMDUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMzIiB4PSItLjEyNDYyIiB5PSItLjEyNDYyIiB3aWR0aD0iMS4yNDkyIiBoZWlnaHQ9IjEuMjQ5MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjEwMzUiIHN0ZERldmlhdGlvbj0iMS4zNDg3MzA1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTEzOSIgeD0iLS4yNDk0IiB5PSItLjE4NjM0IiB3aWR0aD0iMS40OTg4IiBoZWlnaHQ9IjEuMzcyNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjExNDEiIHN0ZERldmlhdGlvbj0iMC43NzY0MjE3NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjExNDMiIHg9Ii0uMjM5NzIiIHk9Ii0uMTg2MzQiIHdpZHRoPSIxLjQ3OTQiIGhlaWdodD0iMS4zNzI3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTE0NSIgc3RkRGV2aWF0aW9uPSIwLjc3NjQyMTc2Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTE0NyIgeD0iLS4yMjM0MiIgeT0iLS4xODYzNCIgd2lkdGg9IjEuNDQ2OCIgaGVpZ2h0PSIxLjM3MjciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXIxMTQ5IiBzdGREZXZpYXRpb249IjAuNzc2NDIxNzYiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxyZWN0IGlkPSJyZWN0MjAiIHRyYW5zZm9ybT0ibWF0cml4KDEuMDExNSAwIDAgMS4wMTE1IC0zODkuMzIgLTQ4OS45MikiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KIDxyZWN0IGlkPSJyZWN0MjIiIHg9IjEuOTgyNiIgeT0iMS45Nzg0IiB3aWR0aD0iNTkuOTk3IiBoZWlnaHQ9IjU5Ljk5NyIgcnk9IjI5Ljk5OCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjAxMTUiLz4KIDxnIHN0cm9rZS13aWR0aD0iLjUzMDcyIj4KICA8cGF0aCBpZD0icGF0aDkyMyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMDI1KSIgb3BhY2l0eT0iLjE1Ii8+CiAgPHBhdGggaWQ9InBhdGgzODY3MyIgZD0ibTMxIDUuMDI1NGMtMTQuMTU4IDAuNTExMTMtMjUuNDYzIDExLjgxNi0yNS45NzUgMjUuOTc1aDI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MDUpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjUiIGQ9Im0zMyAzM3YyNS45NzVjMTQuMTU4LTAuNTExMTIgMjUuNDYzLTExLjgxNiAyNS45NzUtMjUuOTc1eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMjkpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBpZD0icGF0aDM4NjcxIiBkPSJtMzMgMzN2MjUuOTc1YzE0LjE1OC0wLjUxMTEyIDI1LjQ2My0xMS44MTYgMjUuOTc1LTI1Ljk3NXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIi8+CiAgPHBhdGggaWQ9InBhdGg5MjciIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTAzMykiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGlkPSJyZWN0MzgxMTUiIGQ9Im01LjAyNTQgMzNjMC41MTExMyAxNC4xNTggMTEuODE2IDI1LjQ2MyAyNS45NzUgMjUuOTc1di0yNS45NzV6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTEzKSIvPgogPC9nPgogPHBhdGggaWQ9InBhdGgxMDM3IiBkPSJtMjEuNjkgMjMuODY5YzEuOTMxOS0xLjM3NzkgMy4wMzk4LTIuOTY4OCAzLjAzOTgtNC43MDE2IDAtMS45ODg3LTEuNDIwNS0zLjE2NzctMy44MDY4LTMuMTY3Ny0xLjIwNzQgMC0yLjM3MjIgMC4yOTgzLTMuMzk1IDAuODUyMjlsMC41NTM5OCAxLjg2MDhjMC45Mzc1MS0wLjQyNjE0IDEuNjQ3OC0wLjYxMDgyIDIuMzI5Ni0wLjYxMDgyIDEuMTIyMiAwIDEuNzYxNCAwLjQ5NzE4IDEuNzYxNCAxLjM5MjEgMCAxLjEzNjQtMC45OTQzNSAyLjQwMDYtNC4yNzU1IDQuOTU3M3YxLjU0ODNoNy4xMDIzdi0yLjEzMDd6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWx0ZXI9InVybCgjZmlsdGVyMTEzOSkiIG9wYWNpdHk9Ii4xNSIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgzODcwOCIgZD0ibTIxLjY5IDIzLjg2OWMxLjkzMTktMS4zNzc5IDMuMDM5OC0yLjk2ODggMy4wMzk4LTQuNzAxNiAwLTEuOTg4Ny0xLjQyMDUtMy4xNjc3LTMuODA2OC0zLjE2NzctMS4yMDc0IDAtMi4zNzIyIDAuMjk4My0zLjM5NSAwLjg1MjI5bDAuNTUzOTggMS44NjA4YzAuOTM3NTEtMC40MjYxNCAxLjY0NzgtMC42MTA4MiAyLjMyOTYtMC42MTA4MiAxLjEyMjIgMCAxLjc2MTQgMC40OTcxOCAxLjc2MTQgMS4zOTIxIDAgMS4xMzY0LTAuOTk0MzUgMi40MDA2LTQuMjc1NSA0Ljk1NzN2MS41NDgzaDcuMTAyM3YtMi4xMzA3eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIuMzgwNDVweCIgc3R5bGU9ImZvbnQtZmVhdHVyZS1zZXR0aW5nczpub3JtYWw7Zm9udC12YXJpYW50LWNhcHM6bm9ybWFsO2ZvbnQtdmFyaWFudC1saWdhdHVyZXM6bm9ybWFsO2ZvbnQtdmFyaWFudC1udW1lcmljOm5vcm1hbCIvPgogPHBhdGggaWQ9InBhdGgxMDM5IiBkPSJtNDQuOTM4IDQyLjYwOGMwLjk4MDQtMC41MDQxOSAxLjUxMjYtMS4yNjA1IDEuNTEyNi0yLjE1NjggMC0xLjQ3MDYtMS40MTQ2LTIuNDUxLTMuNTAxNC0yLjQ1MS0yLjIxMjkgMC0zLjY4MzUgMS4xOTA1LTMuNjgzNSAyLjk2OTIgMCAxLjA3ODQgMC41NDYyMSAxLjcyMjcgMS4yODg1IDIuMTcwOS0wLjk5NDQgMC40MjAxNy0xLjU1NDYgMS4xNzY1LTEuNTU0NiAyLjEyODkgMCAxLjYzODcgMS41NDA2IDIuNzMxMSAzLjg1MTcgMi43MzExIDIuMzUzIDAgMy45MjE1LTEuMjA0NSAzLjkyMTUtMy4wMjUyIDAtMS4yNzQ1LTAuODQwMzQtMS45MzI4LTEuODM0Ny0yLjM2Njl6bS0yLjA3MjgtMi41MzVjMC42NTgyNSAwIDEuMDkyNSAwLjMyMjEzIDEuMDkyNSAwLjgyNjM0IDAgMC41MDQxOS0wLjM2NDE0IDAuOTEwMzctMC45MjQzNiAxLjA1MDQtMC43MjgyOS0wLjI2NjEtMS4yNzQ1LTAuNTQ2MjEtMS4yNzQ1LTEuMDY0NCAwLTAuNDkwMiAwLjQzNDE2LTAuODEyMzEgMS4xMDY0LTAuODEyMzF6bTAuMTEyMDQgNS44NTQ0Yy0wLjg5NjM0IDAtMS40ODQ2LTAuNDM0MTYtMS40ODQ2LTEuMDc4NCAwLTAuNDYyMTggMC4yOTQxMi0wLjgyNjM0IDAuNzk4MzItMC45OTQ0IDEuMDUwNCAwLjMzNjEzIDEuOTg4OCAwLjU4ODIyIDEuOTg4OCAxLjI0NjUgMCAwLjQ5MDItMC41MzIyMSAwLjgyNjM0LTEuMzAyNSAwLjgyNjM0eiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjExNDMpIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjM3NTEycHgiIHN0eWxlPSJmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWFudC1jYXBzOm5vcm1hbDtmb250LXZhcmlhbnQtbGlnYXR1cmVzOm5vcm1hbDtmb250LXZhcmlhbnQtbnVtZXJpYzpub3JtYWwiLz4KIDxwYXRoIGlkPSJwYXRoMzg3MTEiIGQ9Im00NC45MzggNDIuNjA4YzAuOTgwNC0wLjUwNDE5IDEuNTEyNi0xLjI2MDUgMS41MTI2LTIuMTU2OCAwLTEuNDcwNi0xLjQxNDYtMi40NTEtMy41MDE0LTIuNDUxLTIuMjEyOSAwLTMuNjgzNSAxLjE5MDUtMy42ODM1IDIuOTY5MiAwIDEuMDc4NCAwLjU0NjIxIDEuNzIyNyAxLjI4ODUgMi4xNzA5LTAuOTk0NCAwLjQyMDE3LTEuNTU0NiAxLjE3NjUtMS41NTQ2IDIuMTI4OSAwIDEuNjM4NyAxLjU0MDYgMi43MzExIDMuODUxNyAyLjczMTEgMi4zNTMgMCAzLjkyMTUtMS4yMDQ1IDMuOTIxNS0zLjAyNTIgMC0xLjI3NDUtMC44NDAzNC0xLjkzMjgtMS44MzQ3LTIuMzY2OXptLTIuMDcyOC0yLjUzNWMwLjY1ODI1IDAgMS4wOTI1IDAuMzIyMTMgMS4wOTI1IDAuODI2MzQgMCAwLjUwNDE5LTAuMzY0MTQgMC45MTAzNy0wLjkyNDM2IDEuMDUwNC0wLjcyODI5LTAuMjY2MS0xLjI3NDUtMC41NDYyMS0xLjI3NDUtMS4wNjQ0IDAtMC40OTAyIDAuNDM0MTYtMC44MTIzMSAxLjEwNjQtMC44MTIzMXptMC4xMTIwNCA1Ljg1NDRjLTAuODk2MzQgMC0xLjQ4NDYtMC40MzQxNi0xLjQ4NDYtMS4wNzg0IDAtMC40NjIxOCAwLjI5NDEyLTAuODI2MzQgMC43OTgzMi0wLjk5NDQgMS4wNTA0IDAuMzM2MTMgMS45ODg4IDAuNTg4MjIgMS45ODg4IDEuMjQ2NSAwIDAuNDkwMi0wLjUzMjIxIDAuODI2MzQtMS4zMDI1IDAuODI2MzR6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zNzUxMnB4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDEwNDEiIGQ9Im0yNSA0My45MDhoLTEuMzQ0OHYtNS45MDg0aC0yLjM3NDhsLTQuNjIxIDUuOTA4NHYyLjE0NTloNC41MDY0djEuOTQ1NmgyLjQ4OTN2LTEuOTQ1NmgxLjM0NDh6bS02LjA4MDEtMC4wMjg2MiAyLjI0NjEtMi45MzI4djIuOTQ3MXoiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbHRlcj0idXJsKCNmaWx0ZXIxMTQ3KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+CiA8cGF0aCBpZD0icGF0aDM4NzE0IiBkPSJtMjUgNDMuOTA4aC0xLjM0NDh2LTUuOTA4NGgtMi4zNzQ4bC00LjYyMSA1LjkwODR2Mi4xNDU5aDQuNTA2NHYxLjk0NTZoMi40ODkzdi0xLjk0NTZoMS4zNDQ4em0tNi4wODAxLTAuMDI4NjIgMi4yNDYxLTIuOTMyOHYyLjk0NzF6IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9Ii4zODMxN3B4IiBzdHlsZT0iZm9udC1mZWF0dXJlLXNldHRpbmdzOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"2048-ubuntu,2048\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"2048-qt.desktop\"\nLABEL oc.launch=\"2048-qt.2048-qt\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"2048-ubuntu\"\nLABEL oc.displayname=\"2048 (ubuntu qt)\"\nLABEL oc.path=\"/usr/games/2048-qt\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"2048-ubuntu\"\nENV APPBIN \"/usr/games/2048-qt\"\nENV APP \"/usr/games/2048-qt\"\nLABEL oc.containerengine=\"pod_application\"\nENV QT_X11_NO_MITSHM=1\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/2048-ubuntu/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/2048-ubuntu/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/2048-ubuntu/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/2048-ubuntu/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/apachedirectorystudio/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN curl -sL --output /tmp/ApacheDirectoryStudio.tar.gz https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz && cd /usr/local && tar -xvf /tmp/ApacheDirectoryStudio.tar.gz && rm -rf /tmp/ApacheDirectoryStudio.tar.gz\nRUN mkdir /.ApacheDirectoryStudio && chmod 777 /.ApacheDirectoryStudio\nCOPY composer/init.d/init.ApacheDirectoryStudio /composer/init.d/\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.22.04:$TAG\nUSER root\nRUN curl -sL --output /tmp/ApacheDirectoryStudio.tar.gz https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz && cd /usr/local && tar -xvf /tmp/ApacheDirectoryStudio.tar.gz && rm -rf /tmp/ApacheDirectoryStudio.tar.gz\nRUN mkdir /.ApacheDirectoryStudio && chmod 777 /.ApacheDirectoryStudio\nCOPY composer/init.d/init.ApacheDirectoryStudio /composer/init.d/\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y openjdk-11-jre libswt-gtk-4-jni libswt-webkit-gtk-4-jni libswt-cairo-gtk-4-jni libswt-gtk-4-java && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"account.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii00NjIgNDYzIDM1IDM1IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IC00NjIgNDYzIDM1IDM1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojMDA3OEQ2O30NCjwvc3R5bGU+DQo8dGl0bGU+XzwvdGl0bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTQ0MS4yLDQ4NGMwLjksMC4zLDEuOCwwLjgsMi42LDEuNGMwLjgsMC42LDEuNCwxLjMsMiwyLjFjMC41LDAuOCwxLDEuNywxLjMsMi42YzAuMywxLDAuNCwxLjksMC40LDIuOWgtMS4zDQoJYzAtMS4xLTAuMi0yLjItMC42LTMuMmMtMC44LTItMi40LTMuNS00LjMtNC4zYy0xLjctMC43LTMuNi0wLjgtNS40LTAuM2MtMC43LDAuMi0xLjQsMC41LTIsMC44Yy0xLjIsMC43LTIuMiwxLjctMi45LDIuOQ0KCWMtMC43LDEuMy0xLjEsMi43LTEuMSw0LjJoLTEuM2MwLTIsMC42LTMuOSwxLjctNS41YzAuNi0wLjgsMS4yLTEuNSwyLTIuMWMwLjgtMC42LDEuNy0xLjEsMi42LTEuNGMtMS4xLTAuNi0yLTEuNC0yLjYtMi41DQoJYy0wLjMtMC41LTAuNS0xLjEtMC43LTEuN2MtMC40LTEuNS0wLjMtMy4xLDAuMy00LjVjMC43LTEuNiwyLTIuOSwzLjYtMy42YzEuNy0wLjcsMy42LTAuNyw1LjMsMGMxLjYsMC43LDIuOSwyLDMuNiwzLjYNCgljMC42LDEuNCwwLjcsMywwLjMsNC41Yy0wLjIsMC42LTAuNCwxLjEtMC43LDEuN2MtMC4zLDAuNS0wLjcsMS0xLjEsMS40Qy00NDAuMiw0ODMuMy00NDAuNyw0ODMuNy00NDEuMiw0ODR6IE0tNDUwLDQ3OA0KCWMwLDAuNywwLjEsMS41LDAuNCwyLjFjMC42LDEuMywxLjYsMi4zLDIuOSwyLjljMS40LDAuNiwyLjksMC42LDQuMiwwYzEuMy0wLjYsMi4zLTEuNiwyLjktMi45YzAuNi0xLjQsMC42LTIuOSwwLTQuMg0KCWMtMC42LTEuMy0xLjYtMi4zLTIuOS0yLjljLTEuNC0wLjYtMi45LTAuNi00LjIsMGMtMS4zLDAuNi0yLjMsMS42LTIuOSwyLjlDLTQ0OS45LDQ3Ni41LTQ1MCw0NzcuMy00NTAsNDc4eiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS00MzQuNSw0OTMuNWgtMi4zVjQ5M2MwLTEtMC4yLTIuMS0wLjYtMy4xYy0wLjctMS44LTIuMi0zLjMtNC4xLTQuMWMtMS42LTAuNy0zLjQtMC44LTUuMS0wLjMNCgljLTAuNiwwLjItMS4zLDAuNC0xLjksMC44Yy0xLjEsMC43LTIuMSwxLjYtMi44LDIuOGMtMC43LDEuMi0xLDIuNi0xLDMuOXYwLjVoLTIuM1Y0OTNjMC0yLjEsMC42LTQuMSwxLjgtNS44DQoJYzAuNi0wLjgsMS4zLTEuNiwyLjEtMi4yYzAuNi0wLjQsMS4yLTAuOCwxLjktMS4xYy0wLjMtMC4yLTAuNi0wLjQtMC44LTAuN2MtMC41LTAuNS0wLjktMS0xLjItMS41Yy0wLjMtMC41LTAuNi0xLjEtMC44LTEuNw0KCWMtMC40LTEuNi0wLjMtMy4zLDAuMy00LjhjMS42LTMuNyw1LjgtNS40LDkuNi0zLjljMS43LDAuNywzLjEsMi4xLDMuOSwzLjljMC42LDEuNSwwLjcsMy4yLDAuMyw0LjhjLTAuMiwwLjYtMC40LDEuMi0wLjgsMS44DQoJYy0wLjMsMC42LTAuNywxLjEtMS4yLDEuNWMtMC4yLDAuMi0wLjUsMC41LTAuOCwwLjdjMC43LDAuMywxLjMsMC42LDEuOSwxLjFjMC44LDAuNiwxLjUsMS40LDIuMSwyLjJjMC42LDAuOCwxLDEuOCwxLjMsMi43DQoJYzAuMywxLDAuNSwyLDAuNSwzLjFWNDkzLjV6IE0tNDM1LjksNDkyLjVoMC40YzAtMC44LTAuMi0xLjYtMC40LTIuM2MtMC4zLTAuOS0wLjctMS43LTEuMi0yLjVjLTAuNS0wLjgtMS4yLTEuNC0xLjktMg0KCWMtMC43LTAuNi0xLjYtMS0yLjUtMS4zbC0xLTAuNGwwLjktMC41YzAuNS0wLjMsMS0wLjYsMS40LTFjMC40LTAuNCwwLjctMC44LDEtMS4zYzAuMy0wLjUsMC41LTEsMC43LTEuNWMwLjQtMS40LDAuMy0yLjgtMC4zLTQuMg0KCWMtMS40LTMuMi01LjEtNC43LTguMy0zLjRjLTEuNSwwLjYtMi43LDEuOS0zLjQsMy40Yy0wLjMsMC44LTAuNSwxLjYtMC41LDIuNWMwLDAuNiwwLjEsMS4xLDAuMiwxLjdjMC4xLDAuNSwwLjMsMS4xLDAuNiwxLjYNCgljMC42LDEsMS40LDEuOCwyLjQsMi4zbDAuOSwwLjVsLTEsMC40Yy0wLjksMC4zLTEuNywwLjgtMi41LDEuNGMtMC43LDAuNi0xLjQsMS4yLTEuOSwyYy0xLDEuNC0xLjUsMy4xLTEuNiw0LjhoMC40DQoJYzAuMS0xLjQsMC41LTIuOCwxLjItNGMwLjctMS4zLDEuOC0yLjMsMy4xLTMuMWMwLjctMC40LDEuNC0wLjcsMi4xLTAuOWMxLjktMC41LDMuOS0wLjQsNS43LDAuNGMyLjEsMC44LDMuNywyLjUsNC42LDQuNg0KCUMtNDM2LjEsNDkwLjUtNDM1LjksNDkxLjUtNDM1LjksNDkyLjV6IE0tNDQ0LjUsNDgzLjljLTAuOCwwLTEuNi0wLjItMi4zLTAuNWMtMS40LTAuNi0yLjYtMS43LTMuMi0zLjFjLTAuNi0xLjUtMC42LTMuMSwwLTQuNg0KCWMwLjYtMS40LDEuNy0yLjUsMy4xLTMuMmMxLjUtMC42LDMuMS0wLjYsNC42LDBjMS40LDAuNiwyLjYsMS43LDMuMiwzLjJjMC42LDEuNSwwLjYsMy4xLDAsNC42Yy0wLjYsMS40LTEuNywyLjUtMy4xLDMuMQ0KCUMtNDQyLjksNDgzLjgtNDQzLjcsNDgzLjktNDQ0LjUsNDgzLjl6IE0tNDQ0LjUsNDczYy0wLjcsMC0xLjMsMC4xLTEuOSwwLjRjLTEuMiwwLjUtMi4xLDEuNS0yLjcsMi43Yy0wLjUsMS4yLTAuNSwyLjYsMCwzLjkNCgljMC41LDEuMiwxLjUsMi4xLDIuNywyLjdjMS4yLDAuNSwyLjYsMC41LDMuOSwwYzEuMi0wLjUsMi4xLTEuNSwyLjctMi43YzAuNS0xLjIsMC41LTIuNiwwLTMuOWMtMC41LTEuMi0xLjUtMi4xLTIuNy0yLjcNCglDLTQ0My4yLDQ3My4xLTQ0My44LDQ3My00NDQuNSw0NzN6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTQ0NC41LDQ5N2MtOS4xLDAtMTYuNS03LjQtMTYuNi0xNi41YzAtOS4xLDcuNC0xNi41LDE2LjUtMTYuNmM5LjEsMCwxNi41LDcuNCwxNi42LDE2LjUNCglDLTQyOCw0ODkuNi00MzUuNCw0OTctNDQ0LjUsNDk3eiBNLTQ0NC41LDQ2NS44Yy04LjEsMC0xNC43LDYuNi0xNC43LDE0LjdzNi42LDE0LjcsMTQuNywxNC43czE0LjctNi42LDE0LjctMTQuN2MwLDAsMCwwLDAsMA0KCUMtNDI5LjksNDcyLjMtNDM2LjQsNDY1LjgtNDQ0LjUsNDY1LjhMLTQ0NC41LDQ2NS44eiIvPg0KPC9zdmc+DQo=\"\nLABEL oc.keyword=\"apachedirectorystudio,ldap\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"Apache Directory Studio.Apache Directory Studio\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.22.04\"\nENV ARGS=\"-configuration .eclipse/1988419495_linux_gtk_x86_64\"\nLABEL oc.name=\"apachedirectorystudio\"\nLABEL oc.displayname=\"Apache Directory Studio\"\nLABEL oc.path=\"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"apachedirectorystudio\"\nENV APPBIN \"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nLABEL oc.args=\"-configuration .eclipse/1988419495_linux_gtk_x86_64\"\nENV APP \"/usr/local/ApacheDirectoryStudio/ApacheDirectoryStudio\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/apachedirectorystudio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/apachedirectorystudio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/apachedirectorystudio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/apachedirectorystudio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y astromenace && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"astromenace.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmVyc2lvbj0iMS4xIj4KIDxyZWN0IHN0eWxlPSJvcGFjaXR5OjAuMiIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB4PSIyIiB5PSIzIiByeD0iMS40IiByeT0iMS40Ii8+CiA8cmVjdCBzdHlsZT0iZmlsbDojMzQ1Nzg0IiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHg9IjIiIHk9IjIiIHJ4PSIxLjQiIHJ5PSIxLjQiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0ibSAxNi44NzYxNDMsOS4wMDA4MTk3IGMgLTAuMDcyOTgsMC4wMDI0MSAtMC4xNDg0MDYsMC4wMDk4IC0wLjIyOTY4NywwLjAyMDc1NSAtMC45MTQxNjQsMC4xMjMyMTQ0IC0xLjE2NTA4OSwwLjM0NzAzNjEgLTEuNzI0MDIzLDEuNTM0MzEyMyAtMC4zNzY5OTksMC44MDA4MDcgLTAuNTY1NjAyLDAuODk4NTk4IC0xLjA1MTM2NywxLjAwNDI4OCAtMi4yNzA4OTksLTEuNjc0MDY3NiAtMi4yNzA4OTksMC44ODEyOTQgLTIuNzE3OTY5LDEuNTg5NjUgLTAuNjEyODEyLC0wLjU0NDA5NyAtMS40MDg2NjM4LC0xLjcyMDY0OCAtMi4xOTU2NDUxLC0yLjM3ODM5MiAtMC43MDM2MDg1LC0wLjU4ODA2MiAtMS40MDAxMjY3LC0wLjk0NDM1MDIgLTEuOTUyNDAyMiwtMC41NzMyIC0wLjQzNzY0MDgsMC4zMTA1NCAtMC44MDk0NzIsMC45NzY4MiAtMC45NDQ3MjY3LDIuNTA1NTM0IC0wLjE4NDc3OSwyLjA4ODQ1NCAwLjAwMTkzLDMuMjY0MjEzIDEuMzEyNTAwNCw0Ljk5Mzc5NSAxLjQ4MTk4NCwxLjk1NTc5NyAzLjY4OTk5MDYsMy45MTIyOTcgNy4xODU5MzY2LDYuMzY4MjkzIEMgMTYuMDczLDI1LjEyOTY0OCAxNy4zNDE5NjUsMjYgMTcuMzc5MjY4LDI2IGMgMC4yMDk2ODEsMCAtMi4wMjY2MzksLTIuOTM5NjMxIC0zLjM4MTA1NCwtNC40NDM4MzMgLTIuMDI0MTg1LC0yLjI0ODAzNyAtMi4zOTc3MDQsLTMuMDQ3NDMyIC0yLjQ0MTQ0NywtNC4wNTcwMDUgLTAuMDM5NSwtMC45MTIxMTYgMC4zNDYzNzksLTEuNTE2MzI0IDAuODYzNzEyLC0xLjUxNjMyNCAwLjE4Nzk4MywwIDEuMDM4NzksMC42NDYxOTQgMS45NzY5NTQsMS43MjMwMjMgMC43ODE4MjMsMC44NTQ5MDkgMS4yOTU4NjgsMi4wNTcxOCAxLjkyMDE2NSwyLjkzNzE3NSAxLjMyMjAzNCwxLjY3MDQ2NSAyLjg1NTE4MywxLjg4MzUxOCAzLjQyNDgwNCwwLjQ3NTkyOCAwLjU1MTc5NSwtMS4zNjk2NTYgMC4xOTE2NDMsLTMuNzc1MDg0IC0xLjA2OTc3NCwtNS40NTExNjkgLTAuMTQxOTE5LC0wLjYxMjk3MyAwLjEyNjM1MiwtMC43MDYyMzQgMC43NDY0ODQsLTAuNzA1NTg5IDAuNzg0MzksNy43OWUtNCAyLjI3NDA2NCwwLjUzOTY5MiAzLjE2OTE0MSwxLjMyNDE3NCAxLjEwNjExNCwwLjk2OTQ0MyAxLjI5MjUxLDAuOTY0ODgxIDIuNTIzODI4LDMuNDM2MTM2IDAuNzI2ODM0LDEuNDU4NzU2IDEuNDQ3NzM5LDIuODE5Mjg5IDEuNjAyMzQ0LDMuMDIyOTY4IDAuMjc1MzM2LDAuMzYyNzQ2IDAuMjgxMTIyLDAuMzYwNzM5IDAuMjg1NzQyLC0wLjA5MjY5IC0wLjIzMjM0NiwtMy43NzU3NjggLTEuNTI3MzYsLTcuMzY5MzY5IC00LjMyNzE0OSwtOS45NDgzMTcgQyAyMi4xOTk0MTksMTIuMjg1NTU1IDIwLjgwOTcxLDExLjI2MzY5IDE5LjU4NDU0MiwxMC40MzQxMzYgMTcuNzk5NTAzLDkuMjI1NDkyIDE3LjM4Njk4OSw4Ljk4Mzc1MTggMTYuODc2MTQzLDkuMDAwODE5NyBaIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojOGQ4MDY5IiBkPSJtIDE2Ljg3NjE0Myw4LjAwMDgxOTcgYyAtMC4wNzI5OCwwLjAwMjQxIC0wLjE0ODQwNiwwLjAwOTggLTAuMjI5Njg3LDAuMDIwNzU1IC0wLjkxNDE2NCwwLjEyMzIxNDQgLTEuMTY1MDg5LDAuMzQ3MDM2MSAtMS43MjQwMjMsMS41MzQzMTIyIC0wLjM3Njk5OSwwLjgwMDgwNzEgLTAuNTY1NjAyLDAuODk4NTk4MSAtMS4wNTEzNjcsMS4wMDQyODgxIC0yLjI3MDg5OSwtMS42NzQwNjc2IC0yLjI3MDg5OSwwLjg4MTI5NCAtMi43MTc5NjksMS41ODk2NSBDIDEwLjU0MDI4NSwxMS42MDU3MjggOS43NDQ0MzMyLDEwLjQyOTE3NyA4Ljk1NzQ1MTksOS43NzE0MzMzIDguMjUzODQzNCw5LjE4MzM3MDcgNy41NTczMjUyLDguODI3MDgyOCA3LjAwNTA0OTcsOS4xOTgyMzI3IDYuNTY3NDA4OSw5LjUwODc3MjggNi4xOTU1Nzc3LDEwLjE3NTA1MyA2LjA2MDMyMywxMS43MDM3NjcgYyAtMC4xODQ3NzksMi4wODg0NTQgMC4wMDE5MywzLjI2NDIxMyAxLjMxMjUwMDQsNC45OTM3OTUgMS40ODE5ODQsMS45NTU3OTcgMy42ODk5OTA2LDMuOTEyMjk3IDcuMTg1OTM2Niw2LjM2ODI5MyBDIDE2LjA3MywyNC4xMjk2NDggMTcuMzQxOTY1LDI1IDE3LjM3OTI2OCwyNSBjIDAuMjA5NjgxLDAgLTIuMDI2NjM5LC0yLjkzOTYzMSAtMy4zODEwNTQsLTQuNDQzODMzIC0yLjAyNDE4NSwtMi4yNDgwMzcgLTIuMzk3NzA0LC0zLjA0NzQzMiAtMi40NDE0NDcsLTQuMDU3MDA1IC0wLjAzOTUsLTAuOTEyMTE2IDAuMzQ2Mzc5LC0xLjUxNjMyNCAwLjg2MzcxMiwtMS41MTYzMjQgMC4xODc5ODMsMCAxLjAzODc5LDAuNjQ2MTk0IDEuOTc2OTU0LDEuNzIzMDIzIDAuNzgxODIzLDAuODU0OTA5IDEuMjk1ODY4LDIuMDU3MTggMS45MjAxNjUsMi45MzcxNzUgMS4zMjIwMzQsMS42NzA0NjUgMi44NTUxODMsMS44ODM1MTggMy40MjQ4MDQsMC40NzU5MjggMC41NTE3OTUsLTEuMzY5NjU2IDAuMTkxNjQzLC0zLjc3NTA4NCAtMS4wNjk3NzQsLTUuNDUxMTY5IC0wLjE0MTkxOSwtMC42MTI5NzMgMC4xMjYzNTIsLTAuNzA2MjM0IDAuNzQ2NDg0LC0wLjcwNTU4OSAwLjc4NDM5LDcuNzllLTQgMi4yNzQwNjQsMC41Mzk2OTIgMy4xNjkxNDEsMS4zMjQxNzQgMS4xMDYxMTQsMC45Njk0NDMgMS4yOTI1MSwwLjk2NDg4MSAyLjUyMzgyOCwzLjQzNjEzNiAwLjcyNjgzNCwxLjQ1ODc1NiAxLjQ0NzczOSwyLjgxOTI4OSAxLjYwMjM0NCwzLjAyMjk2OCAwLjI3NTMzNiwwLjM2Mjc0NiAwLjI4MTEyMiwwLjM2MDczOSAwLjI4NTc0MiwtMC4wOTI2OSAtMC4yMzIzNDYsLTMuNzc1NzY4IC0xLjUyNzM2LC03LjM2OTM2OSAtNC4zMjcxNDksLTkuOTQ4MzE3IEMgMjIuMTk5NDE5LDExLjI4NTU1NSAyMC44MDk3MSwxMC4yNjM2OSAxOS41ODQ1NDIsOS40MzQxMzU4IDE3Ljc5OTUwMyw4LjIyNTQ5MiAxNy4zODY5ODksNy45ODM3NTE4IDE2Ljg3NjE0Myw4LjAwMDgxOTcgWiIvPgogPGVsbGlwc2Ugc3R5bGU9Im9wYWNpdHk6MC4yIiBjeD0iMS4wMzciIGN5PSIyNS40OTciIHJ4PSIxLjQxOSIgcnk9IjIuMDU4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQxODAzMjg2LC0wLjkwODQzMTkxLDAuNjY5MzU4NDMsMC43NDI5Mzk2MywwLDApIi8+CiA8ZWxsaXBzZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iMS43NjYiIGN5PSIyNS4wNDEiIHJ4PSIxLjQxOSIgcnk9IjIuMDU4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQxODAzMjg2LC0wLjkwODQzMTkxLDAuNjY5MzU4NDMsMC43NDI5Mzk2MywwLDApIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmO29wYWNpdHk6MC4xIiBkPSJNIDMuNDAwMzkwNiAyIEMgMi42MjQ3OTA2IDIgMiAyLjYyNDc5MDYgMiAzLjQwMDM5MDYgTCAyIDQuNDAwMzkwNiBDIDIgMy42MjQ3OTA2IDIuNjI0NzkwNiAzIDMuNDAwMzkwNiAzIEwgMjguNTk5NjA5IDMgQyAyOS4zNzUyMDkgMyAzMCAzLjYyNDc5MDYgMzAgNC40MDAzOTA2IEwgMzAgMy40MDAzOTA2IEMgMzAgMi42MjQ3OTA2IDI5LjM3NTIwOSAyIDI4LjU5OTYwOSAyIEwgMy40MDAzOTA2IDIgeiIvPgogPHBhdGggc3R5bGU9ImZpbGw6I2ZmZmZmZjtvcGFjaXR5OjAuMSIgZD0iTSAxNi44NzY5NTMgOCBDIDE2LjgwMzk3MyA4LjAwMjQxIDE2LjcyNzc2NSA4LjAxMDUyOTQgMTYuNjQ2NDg0IDguMDIxNDg0NCBDIDE1LjczMjMyIDguMTQ0Njk4OCAxNS40ODA4MDkgOC4zNjkzNjQ1IDE0LjkyMTg3NSA5LjU1NjY0MDYgQyAxNC41NDQ4NzYgMTAuMzU3NDQ4IDE0LjM1Njg1OSAxMC40NTQ4NTcgMTMuODcxMDk0IDEwLjU2MDU0NyBDIDExLjYwMDE5NSA4Ljg4NjQ3OTMgMTEuNTk5NDE0IDExLjQ0MjAzNSAxMS4xNTIzNDQgMTIuMTUwMzkxIEMgMTAuNTM5NTMyIDExLjYwNjI5NCA5Ljc0NDAxMjYgMTAuNDI5MjI4IDguOTU3MDMxMiA5Ljc3MTQ4NDQgQyA4LjI1MzQyMjcgOS4xODM0MjE4IDcuNTU4MTM0OSA4LjgyNjExNTcgNy4wMDU4NTk0IDkuMTk3MjY1NiBDIDYuNTY4MjE4NiA5LjUwNzgwNTcgNi4xOTU4MDE2IDEwLjE3NDQxMSA2LjA2MDU0NjkgMTEuNzAzMTI1IEMgNi4wMDExNDQxIDEyLjM3NDUyMSA1Ljk4NjkxNiAxMi45NDcwNDggNi4wMjkyOTY5IDEzLjQ3ODUxNiBDIDYuMDM4NzQ5NyAxMy4yMjMzNzIgNi4wMzUyODU3IDEyLjk4ODYzNyA2LjA2MDU0NjkgMTIuNzAzMTI1IEMgNi4xOTU4MDE2IDExLjE3NDQxMSA2LjU2ODIxODYgMTAuNTA3ODA2IDcuMDA1ODU5NCAxMC4xOTcyNjYgQyA3LjU1ODEzNDkgOS44MjYxMTU0IDguMjUzNDIyOCAxMC4xODM0MjIgOC45NTcwMzEyIDEwLjc3MTQ4NCBDIDkuNzQ0MDEyNSAxMS40MjkyMjggMTAuNTM5NTMyIDEyLjYwNjI5NCAxMS4xNTIzNDQgMTMuMTUwMzkxIEMgMTEuNTk5NDE0IDEyLjQ0MjAzNSAxMS42MDAxOTUgOS44ODY0NzkzIDEzLjg3MTA5NCAxMS41NjA1NDcgQyAxNC4zNTY4NTkgMTEuNDU0ODU3IDE0LjU0NDg3NiAxMS4zNTc0NDggMTQuOTIxODc1IDEwLjU1NjY0MSBDIDE1LjQ4MDgwOSA5LjM2OTM2NDQgMTUuNzMyMzIgOS4xNDQ2OTg4IDE2LjY0NjQ4NCA5LjAyMTQ4NDQgQyAxNi43Mjc3NjUgOS4wMTA1Mjk0IDE2LjgwMzk3MyA5LjAwMjQxIDE2Ljg3Njk1MyA5IEMgMTcuMzg3Nzk5IDguOTgyOTMyMSAxNy43OTg5NDUgOS4yMjQ5NDk3IDE5LjU4Mzk4NCAxMC40MzM1OTQgQyAyMC44MDkxNTIgMTEuMjYzMTQ4IDIyLjIwMDIyOSAxMi4yODYxNTYgMjIuNjczODI4IDEyLjcwNTA3OCBDIDI1LjMwODgzNiAxNS4xMzIyNDIgMjYuNTk3NzEgMTguNDU5NTgzIDI2LjkzNTU0NyAyMS45OTAyMzQgQyAyNi45ODgzMDYgMjIuMDA4NDUxIDI2Ljk5NzM3MiAyMS45MTAyMzMgMjcgMjEuNjUyMzQ0IEMgMjYuNzY3NjU0IDE3Ljg3NjU3NiAyNS40NzM2MTcgMTQuMjg0MDI2IDIyLjY3MzgyOCAxMS43MDUwNzggQyAyMi4yMDAyMjkgMTEuMjg2MTU2IDIwLjgwOTE1MiAxMC4yNjMxNDggMTkuNTgzOTg0IDkuNDMzNTkzOCBDIDE3Ljc5ODk0NSA4LjIyNDk0OTkgMTcuMzg3Nzk5IDcuOTgyOTMyMSAxNi44NzY5NTMgOCB6IE0gMTguOTA4MjAzIDE1LjAyOTI5NyBDIDE4LjY3Njk3NyAxNS4xMDcxNjggMTguNTgwODI0IDE1LjI3NDcwMiAxOC42NzE4NzUgMTUuNjY3OTY5IEMgMTkuNDMzNTU1IDE2LjY4MDAzNyAxOS44NjA3ODIgMTcuOTU2MDIgMTkuOTYyODkxIDE5LjExMTMyOCBDIDIwLjA3OTg4NiAxNy44NjgyMTQgMTkuNzI1MDk2IDE2LjI5ODUzMiAxOC45MDgyMDMgMTUuMDI5Mjk3IHogTSAxMS42MTEzMjggMTYuODUxNTYyIEMgMTEuNTY4MTA2IDE3LjA0MzYzMyAxMS41NDYyMzkgMTcuMjU5ODE5IDExLjU1NjY0MSAxNy41IEMgMTEuNjAwMzg0IDE4LjUwOTU3MyAxMS45NzM4NjIgMTkuMzA4NjA0IDEzLjk5ODA0NyAyMS41NTY2NDEgQyAxNC42MjU0ODEgMjIuMjUzNDY0IDE1LjQzMjMxMyAyMy4yNDg5ODMgMTYuMTA3NDIyIDI0LjEyNjk1MyBDIDE2LjUzNDg4NiAyNC40MTg5NzYgMTcuMzYyMDgxIDI1IDE3LjM3ODkwNiAyNSBDIDE3LjU4ODU4NyAyNSAxNS4zNTI0NjIgMjIuMDYwODQzIDEzLjk5ODA0NyAyMC41NTY2NDEgQyAxMi4yMTM1NzkgMTguNTc0ODMgMTEuNzM1MDggMTcuNzE4MTk5IDExLjYxMTMyOCAxNi44NTE1NjIgeiIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"astromenace\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"astromenace.desktop\"\nLABEL oc.launch=\"Astromenace.Astromenace\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"astromenace\"\nLABEL oc.displayname=\"astromenace\"\nLABEL oc.path=\"/usr/games/AstroMenace\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"astromenace\"\nENV APPBIN \"/usr/games/AstroMenace\"\nENV APP \"/usr/games/AstroMenace\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/astromenace/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/astromenace/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/astromenace/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/astromenace/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_base.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzk1MGJhOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjNTU3YmMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjciIHkyPSI1NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjhkMmZjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0NS41MDEiIHgyPSI0NS41MDEiIHkxPSI3LjEwNTUiIHkyPSIyOS44OTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlZWJmNyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2U3ZjkiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzUiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSIzOC4wNjYiIGN5PSIyNi4xOTIiIHI9IjI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0uOCAzZS04IC0xLjkyNjVlLTggLS45NDAzNCA4MC40NTMgMzguNjI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWUzNTNjIiBzdG9wLW9wYWNpdHk9Ii40ODUzOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxOTE5MTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI1MjUuNDQiIHgyPSI1MTYuNjYiIHkxPSI4MzYuMTkiIHkyPSI4MjguNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc4OTMgMCAwIDEuMDAwNyAtMTcxLjQxIC03NDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZGM4NWU5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2YyY2JmOCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI1MjUuNDQiIHgyPSI1MTYuNjYiIHkxPSI4MzYuMTkiIHkyPSI4MjguNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc4OTMgMCAwIDEuMDAwNyA3NTUuNiAtMTY5OC43KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iNTI1LjQ0IiB4Mj0iNTE2LjY2IiB5MT0iODM2LjE5IiB5Mj0iODI4LjUiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEyNS41IC0xNzAyLjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSI1MjAuNTkiIHgyPSI1MTYuMTUiIHkxPSI3MzUuMDUiIHkyPSI3MjAuODYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDU4MTA4IiB5PSItLjA2MjAxNyIgd2lkdGg9IjEuMTE2MiIgaGVpZ2h0PSIxLjEyNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41NDYyMzg3NCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8ZyBzdHJva2Utd2lkdGg9Ii44MzM1MiI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyIDAgMCAxLjIwMDIgLTM4MC41MyAtNzEuNjU2KSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsdGVyPSJ1cmwoI20pIiBvcGFjaXR5PSIuMjUiIHN0cm9rZT0iIzAwMCI+CiAgIDxwYXRoIGQ9Im0zMzIuNzQgOTAuMTA1djQuMDAyOWMwIDEuOTM0NCA1LjA0MDIgMy41MDI2IDExLjI1OCAzLjUwMjYgNi4yMTc0IDAgMTEuMjU4LTEuNTY4MSAxMS4yNTgtMy41MDI2di00LjAwMjl6IiBjb2xvcj0iIzAwMDAwMCIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTI3IDk1My45OSkiPgogICAgPHBhdGggZD0ibTEyNTkuNy04NjguNTd2NC4wMDNjMCAxLjkzNDQgNS4wNDAyIDMuNTAyNSAxMS4yNTggMy41MDI1IDYuMjE3NCAwIDExLjI1OC0xLjU2ODEgMTEuMjU4LTMuNTAyNXYtNC4wMDN6IiBjb2xvcj0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIuODMzNTIiLz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC45Nzg5MyAwIDAgMS4wMDA3IDg3OC40NSAuMzc3NTQpIj4KICAgICA8cGF0aCBkPSJtMzg5LjUtODcyLjk2djRjMCAxLjkzMyA1LjE0ODcgMy41IDExLjUgMy41czExLjUtMS41NjcgMTEuNS0zLjV2LTR6IiBjb2xvcj0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIuODQyMTQiLz4KICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguNTEyNTQgMCAwIC42MTUzOCAxMzQuNjQgLTEzMjMuMikiIGN4PSI1MTkuNjkiIGN5PSI3MzAuMzEiIHJ4PSIyMi40MzgiIHJ5PSI1LjY4NzUiIGNvbG9yPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuNDk5NSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTk5MiAwIDAgMS4yMDAyIC0zODAuNTMgLTcxLjY1NikiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIHN0cm9rZT0iIzhlMDNhMyI+CiAgIDxwYXRoIGQ9Im0zMzIuNzQgOTAuMTA1djQuMDAyOWMwIDEuOTM0NCA1LjA0MDIgMy41MDI2IDExLjI1OCAzLjUwMjYgNi4yMTc0IDAgMTEuMjU4LTEuNTY4MSAxMS4yNTgtMy41MDI2di00LjAwMjl6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNsKSIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOTI3IDk1My45OSkiPgogICAgPHBhdGggZD0ibTEyNTkuNy04NjguNTd2NC4wMDNjMCAxLjkzNDQgNS4wNDAyIDMuNTAyNSAxMS4yNTggMy41MDI1IDYuMjE3NCAwIDExLjI1OC0xLjU2ODEgMTEuMjU4LTMuNTAyNXYtNC4wMDN6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNqKSIgc3Ryb2tlLXdpZHRoPSIuODMzNTIiLz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KC45Nzg5MyAwIDAgMS4wMDA3IDg3OC40NSAuMzc3NTQpIj4KICAgICA8cGF0aCBkPSJtMzg5LjUtODcyLjk2djRjMCAxLjkzMyA1LjE0ODcgMy41IDExLjUgMy41czExLjUtMS41NjcgMTEuNS0zLjV2LTR6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlLXdpZHRoPSIuODQyMTQiLz4KICAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguNTEyNTQgMCAwIC42MTUzOCAxMzQuNjQgLTEzMjMuMikiIGN4PSI1MTkuNjkiIGN5PSI3MzAuMzEiIHJ4PSIyMi40MzgiIHJ5PSI1LjY4NzUiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2gpIiBzdHJva2Utd2lkdGg9IjEuNDk5NSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"base,libreoffice,office\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"libreoffice-base.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-base\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--base\"\nLABEL oc.name=\"base\"\nLABEL oc.displayname=\"Base\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.database;application/vnd.sun.xml.base;\"\nLABEL oc.fileextensions=\"odb\"\nLABEL oc.legacyfileextensions=\"odb\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"base\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--base\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/base/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/base/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/base/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f base.d -t base .\n
"},{"location":"applications/base/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect base > base.json\ndocker image save base -o base.tar\nctr -n k8s.io images import base.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @base.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 && apt-get clean\nRUN curl -Ls https://deb.beekeeperstudio.io/beekeeper.key | apt-key add -\nRUN echo \"deb https://deb.beekeeperstudio.io stable main\" | tee /etc/apt/sources.list.d/beekeeper-studio-app.list\nRUN apt-get update && apt-get install --no-install-recommends --yes beekeeper-studio libxshmfence1 && apt-get clean\nRUN mv \"/opt/Beekeeper Studio/\" /opt/Beekeeper-Studio\nENV ELECTRON_ENABLE_LOGGING=true\nENV QT_X11_NO_MITSHM=1\nLABEL oc.icon=\"beekeeper-studio.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDEzMi44IDE0Ni4yIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMzIuOCAxNDYuMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiNGQUQ4M0I7fQo8L3N0eWxlPgo8Zz4KCTxnPgoJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjEuMywyOC4yTDc3LjcsMy4xQzcwLjYtMSw2MS45LTEsNTQuOSwzLjFMNDMuNSw5LjdWMzl2Ni43djI3LjVjMCw4LjEsNC4zLDE1LjcsMTEuNCwxOS44CgkJCWMzLjUsMiw3LjUsMy4xLDExLjQsMy4xczcuOS0xLDExLjQtMy4xbDAsMGM3LjEtNC4xLDExLjQtMTEuNiwxMS40LTE5LjhjMC04LjEtNC4zLTE1LjctMTEuNC0xOS44bDAsMGMtMy41LTItNy41LTMuMS0xMS40LTMuMQoJCQlWMzZjMy45LDAsNy45LDEsMTEuNCwzLjFsMTIuNCw3LjJjNy4xLDQuMSwxMS40LDExLjYsMTEuNCwxOS44djE0LjNjMCw4LjEtNC4zLDE1LjctMTEuNCwxOS44bC0xMi40LDcuMmMtMy41LDItNy41LDMuMS0xMS40LDMuMQoJCQlzLTcuOS0xLTExLjQtMy4xbC0xMi40LTcuMmMtNy4xLTQuMS0xMS40LTExLjYtMTEuNC0xOS44di03LjJWNjZWNDcuNVYxNi44TDExLjQsMjguMkM0LjMsMzIuMywwLDM5LjgsMCw0OHY1MC4zCgkJCWMwLDguMSw0LjMsMTUuNywxMS40LDE5LjhMNTUsMTQzLjJjNy4xLDQuMSwxNS44LDQuMSwyMi44LDBsNDMuNi0yNS4xYzcuMS00LjEsMTEuNC0xMS42LDExLjQtMTkuOFY0OAoJCQlDMTMyLjcsMzkuOCwxMjguMywzMi4zLDEyMS4zLDI4LjJ6IE01Mi4zLDU1LjJjLTEuMywxLTIuNCwyLjEtMy40LDMuM3YtMTZsMy40LTJWNTUuMnogTTYxLDUxYy0xLjIsMC4zLTIuMywwLjYtMy40LDEuMVYzNy43CgkJCWMxLjEtMC41LDIuMy0wLjgsMy40LTEuMVY1MXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"beekeeperstudio,database,sql,mysql,postgres,sqllite,db,sqlserver,query,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"beekeeper-studio.desktop\"\nLABEL oc.launch=\"beekeeper-studio.beekeeper-studio\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--no-sandbox\"\nLABEL oc.name=\"beekeeperstudio\"\nLABEL oc.displayname=\"Beekeeper-studio\"\nLABEL oc.path=\"/opt/Beekeeper-Studio/beekeeper-studio\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"sql\"\nLABEL oc.legacyfileextensions=\"sql\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"shm_size\\\":\\\"2G\\\",\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"beekeeperstudio\"\nENV APPBIN \"/opt/Beekeeper-Studio/beekeeper-studio\"\nLABEL oc.args=\"--no-sandbox\"\nENV APP \"/opt/Beekeeper-Studio/beekeeper-studio\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/beekeeperstudio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/beekeeperstudio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/beekeeperstudio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/beekeeperstudio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update blender mesa-dri-gallium\nLABEL oc.icon=\"circle_blender.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMDEuODEiIHgyPSIxMDEuODEiIHkxPSItMTYuNTc4IiB5Mj0iMjQyLjcyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQuNzgxMiAwIDAgNC43ODEyIDMzLjg3NSA2Mi4yMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYmI1MjEiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjE1ZjE5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjUyMCIgeDI9IjUyMCIgeTE9IjMyLjM2MiIgeTI9IjEwNTIuNCIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg1LjQzNzIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI1MjAiIHgyPSI1MjAiIHkxPSIyNTIuMzYiIHkyPSI3MTIuMzYiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTc1Ljk5MyAtMTIyLjk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTk3Y2YxIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIxYzlmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI2Ny4wMjQiIHgyPSIxMDIuOTEiIHkxPSIyODMuOTEiIHkyPSI1ODEuNzYiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQuNjQxIDIuNjc5NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlOGViZWMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmRmZWZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2MzI0IiB5PSItLjAzNTY4MiIgd2lkdGg9IjEuMDcyNiIgaGVpZ2h0PSIxLjA3MTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjExLjYyMzYzNyIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4zNDM3NDkiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjI3NDUgMCAwIC4wNjI3NDUgLS4xMjU0OSA5ODYuNDYpIiBzdHJva2Utd2lkdGg9IjE1LjkzOCI+CiAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU0MC4zNiIgcj0iNDc4LjEyIiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2YpIiBvcGFjaXR5PSIuMjUiLz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSI0NzguMTIiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMTApIiBmaWxsPSIjMTQxNDE0IiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9IjI1NCI+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSgtMzApIiBjeD0iMTY4LjU4IiBjeT0iNDYwLjI1IiByeD0iMTgzLjMxIiByeT0iMTYwLjE5IiBvcGFjaXR5PSIxIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICAgPGNpcmNsZSBjeD0iNTEyLjAxIiBjeT0iNTQ1Ljg1IiByPSIzODQiIG9wYWNpdHk9IjEiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiAgICA8Y2lyY2xlIGN4PSI0MDEuMzIiIGN5PSIzNDYuNzUiIHI9IjEyOCIgb3BhY2l0eT0iMSIgc3Ryb2tlPSIjZjBmMGYwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjE3LjY3NSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPC9nPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjkzOCI+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSgtMzApIiBjeD0iMTY4LjU4IiBjeT0iNDYwLjI1IiByeD0iMTgzLjMxIiByeT0iMTYwLjE5IiBmaWxsPSJ1cmwoI2MpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICAgPGNpcmNsZSBjeD0iNTEyLjAxIiBjeT0iNTQ1Ljg1IiByPSIzODQiIGZpbGw9InVybCgjZSkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiAgICA8Y2lyY2xlIGN4PSI0NDEuMzIiIGN5PSI0MjYuNzUiIHI9IjEyOCIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlPSIjZjBmMGYwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjE3LjY3NSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"blender,blender,modeler\"\nLABEL oc.cat=\"utilities,graphics\"\nLABEL oc.desktopfile=\"blender.desktop\"\nLABEL oc.launch=\"Blender.Blender\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"blender\"\nLABEL oc.displayname=\"Blender\"\nLABEL oc.path=\"/usr/bin/blender\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-blender\"\nLABEL oc.fileextensions=\"blend,obj,fbx,3ds,ply,stl\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"blender\"\nENV APPBIN \"/usr/bin/blender\"\nENV APP \"/usr/bin/blender\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/blender/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/blender/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/blender/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/blender/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends bless && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_bless.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYmciIHgxPSIyNS4wMDQiIHgyPSIyNS4wMDQiIHkxPSI1LjIxNTgiIHkyPSI0NS4xMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyAuNjk1NjUgLjY5NTY1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYzdjN2M3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y2ZjZmNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMTgyIiB4PSItLjEyMjczIiB5PSItLjA5NjQyOSIgd2lkdGg9IjEuMjQ1NSIgaGVpZ2h0PSIxLjE5MjkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTI1MDAwMSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjEzOTkiIHg9Ii0uMDI3IiB5PSItLjAyNyIgd2lkdGg9IjEuMDU0IiBoZWlnaHQ9IjEuMDU0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjUxNzUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50ODg4IiB4MT0iMjEuNTE3IiB4Mj0iNDkuMTUzIiB5MT0iMzguMjE2IiB5Mj0iMzguMjE2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMTNmNDciIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3NTUyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk3MCIgeD0iLS4wNTQ5NzIiIHk9Ii0uMTE3OTkiIHdpZHRoPSIxLjEwOTkiIGhlaWdodD0iMS4yMzYiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzI2MzkzNyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5ODAiIHgxPSIzNS41MzUiIHgyPSIyNS44NSIgeTE9IjIwLjgwMyIgeTI9IjE0Ljc0OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjODc4Nzg3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg3ODc4NyIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyAuNjk1NjUgLjY5NTY1KSIgY3g9IjI0IiBjeT0iMjQuNzY3IiByPSIyMyIgZmlsbD0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEzOTkpIiBvcGFjaXR5PSIuMTUiLz4KIDxjaXJjbGUgY3g9IjMxLjk5OSIgY3k9IjMxLjk5OSIgcj0iMjkuOTk5IiBmaWxsPSJ1cmwoI2JnKSIgc3Ryb2tlLXdpZHRoPSIxLjMwNDMiLz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuNDU0NSAwIDAgMS40NTQ1IC0zLjIxMDMgLTEuNzgzNCkiIGQ9Im0xOCAxMGMwIDUgMiA4IDYgMTFsLTkgMWMwIDIuMjE2IDEuNzg0IDQgNCA0aDF2LTNoM3YyaC0xdjFoM2wtNyA4LjVjLTAuMDAyMiAxLjkzMyAxLjU2NyAzLjUwMiAzLjUgMy41IDAuOTI3MDItOS43ZS00IDEuODQ2MS0wLjM0Mjg3IDIuNS0xbDEyLTEyYzAuNjU3MTItMC42NTM4NyAwLjk5ODk1LTEuNTczIDEtMi41IDAuMDAyMi0xLjkzMy0xLjU2Ny0zLjUwMi0zLjUtMy41LTAuNjE0OTcgNi40M2UtNCAtMS4yMjQ5IDAuMTU0MDUtMS43NTc4IDAuNDQ3Mjd6IiBmaWx0ZXI9InVybCgjZmlsdGVyMTE4MikiIG9wYWNpdHk9Ii4xIi8+CiA8cGF0aCBkPSJtMTcuMTUzIDI3LjMwN3YxLjQ1NDVjMCAzLjIyMzIgMi41OTQ5IDUuODE4MSA1LjgxODEgNS44MTgxaDEuNDU0NXYtNC4zNjM2aDQuMzYzNmMwLjgwNTgxIDAgMS40NTQ1IDAuNjQ4NzIgMS40NTQ1IDEuNDU0NXMtMC42NDg3MiAxLjQ1NDUtMS40NTQ1IDEuNDU0NWgtMS40NTQ1djEuNDU0NWgxMS42MzZsNS44MTgxLTcuMjcyNnoiIGZpbGw9IiNmMmYyZjIiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjkuODc3IDI3LjMwN2MwLjU3MzIgMC40ODc0MyAxLjE3NjQgMC45NzEwNiAxLjgyMTEgMS40NTQ1bDcuNzc4NCA1LjE4NDcgNC42NTA2LTYuNjM5MnoiIGZpbHRlcj0idXJsKCNmaWx0ZXI5NzApIiBvcGFjaXR5PSIuMSIgc3Ryb2tlLXdpZHRoPSIxLjQ1NDUiLz4KIDxwYXRoIGQ9Im0yMS41MTcgMTEuMzA3IDIzLjI3MiAxNi01LjgxODEgNS44MTgxLTguNzI3Mi01LjgxODFjLTUuODE4MS00LjM2MzYtOC43MjcyLTguNzI3Mi04LjcyNzItMTZ6IiBmaWxsPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjEuNDU0NSIvPgogPHBhdGggZD0ibTQ0LjA2MiAyNC4zOThjLTEuMzQ4NCAwLjAwMTQtMi42ODUyIDAuNDk4NzEtMy42MzYzIDEuNDU0NWwtMTcuNDU0IDE3LjQ1NGMtMC45NTU4IDAuOTUxMTQtMS40NTMgMi4yODgtMS40NTQ1IDMuNjM2My0wLjAwMzIgMi44MTE2IDIuMjc5MiA1LjA5MzggNS4wOTA4IDUuMDkwOCAxLjM0ODQtMC4wMDE0IDIuNjg1Mi0wLjQ5ODcxIDMuNjM2My0xLjQ1NDVsMTcuNDU0LTE3LjQ1NGMwLjk1NTgtMC45NTEwNyAxLjQ1My0yLjI4OCAxLjQ1NDUtMy42MzYzIDAuMDAzMi0yLjgxMTYtMi4yNzkyLTUuMDkzOC01LjA5MDgtNS4wOTA4eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg4OCkiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjcuMzM1IDQxLjg1Mi0wLjcyNzI2IDAuNzI3MjYgMS4wOTA5IDEuMDkwOS0wLjcyNzI2IDAuNzI3MjYtMS4wOTA5LTEuMDkwOS0wLjcyNzI2IDAuNzI3MjYgMS4wOTA5IDEuMDkwOS0xLjA5MDkgMS4wOTA5IDAuNzI3MjYgMC43MjcyNiAxLjA5MDktMS4wOTA5IDAuNzI3MjYgMC43MjcyNi0xLjA5MDkgMS4wOTA5IDAuNzI3MjYgMC43MjcyNiAxLjA5MDktMS4wOTA5IDEuMDkwOSAxLjA5MDkgMC43MjcyNi0wLjcyNzI2LTEuMDkwOS0xLjA5MDkgMC43MjcyNi0wLjcyNzI2IDEuMDkwOSAxLjA5MDkgMC43MjcyNi0wLjcyNzI2LTEuMDkwOS0xLjA5MDkgMS4wOTA5LTEuMDkwOS0wLjcyNzI2LTAuNzI3MjYtMS4wOTA5IDEuMDkwOS0wLjcyNzI2LTAuNzI3MjYgMS4wOTA5LTEuMDkwOS0wLjcyNzI2LTAuNzI3MjYtMS4wOTA5IDEuMDkwOXptMS4wOTA5IDIuNTQ1NCAwLjcyNzI2IDAuNzI3MjYtMC43MjcyNiAwLjcyNzI2LTAuNzI3MjYtMC43MjcyNnoiIGZpbGw9IiNmOWY5ZjkiIHN0cm9rZS13aWR0aD0iMS40NTQ1Ii8+CiA8cGF0aCBkPSJtMjUuODggMTUuNzYxdjEuNDU0NWw4LjcyNzIgNS45OTk5di0xLjQ1NDV6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTgwKSIgc3Ryb2tlLXdpZHRoPSIxLjQ1NDUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"bless,hexa,decimal\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"bless.desktop\"\nLABEL oc.launch=\"bless.Bless\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"Bless\"\nLABEL oc.displayname=\"Bless\"\nLABEL oc.path=\"/usr/bin/bless\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Bless\"\nENV APPBIN \"/usr/bin/bless\"\nENV APP \"/usr/bin/bless\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/bless/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/bless/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/bless/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/bless/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends blobby && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"blobby.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGZpbGw9IiNGRjAwNjYiIGQ9Ik0zNy45LDIyLjRDMjQuOCw0NC42LC0yNyw0NSwtMzkuNywyM0MtNTIuNCwxLC0yNi4yLC00My40LC0wLjQsLTQzLjZDMjUuNSwtNDMuOCw1MSwwLjIsMzcuOSwyMi40WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwIDEwMCkiIC8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"blobby,game\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"blobby.desktop\"\nLABEL oc.launch=\"blobby.blobby\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"blobby\"\nLABEL oc.displayname=\"blobby\"\nLABEL oc.path=\"/usr/games/blobby\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"blobby\"\nENV APPBIN \"/usr/games/blobby\"\nENV APP \"/usr/games/blobby\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/blobby/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/blobby/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/blobby/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/blobby/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-boxes sudo\nLABEL oc.icon=\"org.gnome.Boxes.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4wIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImEiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iLjQiIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmNmY1ZjQiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCB4bGluazpocmVmPSIjYSIgaWQ9ImkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQgMCAwIDQgLTQ5Mi43OTkgLTY0MS45NTIpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iaCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNCAwIDAgNCAtNDkyLjc5OSAtNjgxLjk1MikiIGN4PSIxMzQuMiIgY3k9IjIyMi45ODgiIGZ4PSIxMzQuMiIgZnk9IjIyMi45ODgiIHI9IjIiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJnIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2IDAgMCA2IC03ODUuMTk4IC0xMDY1LjkyOCkiIGN4PSIxMzQuMiIgY3k9IjIyMi45ODgiIGZ4PSIxMzQuMiIgZnk9IjIyMi45ODgiIHI9IjIiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJmIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2IDAgMCA2IC03ODUuMTk4IC0xMTUzLjkyOCkiLz48cmFkaWFsR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJlIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg0IDAgMCA0IC00NTIuNzk5IC02ODEuOTUyKSIgY3g9IjEzNC4yIiBjeT0iMjIyLjk4OCIgZng9IjEzNC4yIiBmeT0iMjIyLjk4OCIgcj0iMiIvPjxyYWRpYWxHcmFkaWVudCB4bGluazpocmVmPSIjYSIgaWQ9ImQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQgMCAwIDQgLTQ1Mi43OTkgLTY0MS45NTIpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iYyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNiAwIDAgNiAtNjk3LjE5OCAtMTA2NS45MjgpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PHJhZGlhbEdyYWRpZW50IHhsaW5rOmhyZWY9IiNhIiBpZD0iYiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNiAwIDAgNiAtNjk3LjE5OCAtMTE1My45MjgpIiBjeD0iMTM0LjIiIGN5PSIyMjIuOTg4IiBmeD0iMTM0LjIiIGZ5PSIyMjIuOTg4IiByPSIyIi8+PC9kZWZzPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTE3MikiPjxwYXRoIHN0eWxlPSJsaW5lLWhlaWdodDpub3JtYWw7Zm9udC12YXJpYW50LWxpZ2F0dXJlczpub3JtYWw7Zm9udC12YXJpYW50LXBvc2l0aW9uOm5vcm1hbDtmb250LXZhcmlhbnQtY2Fwczpub3JtYWw7Zm9udC12YXJpYW50LW51bWVyaWM6bm9ybWFsO2ZvbnQtdmFyaWFudC1hbHRlcm5hdGVzOm5vcm1hbDtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lO3RleHQtZGVjb3JhdGlvbi1zdHlsZTpzb2xpZDt0ZXh0LWRlY29yYXRpb24tY29sb3I6IzAwMDt0ZXh0LXRyYW5zZm9ybTpub25lO3RleHQtb3JpZW50YXRpb246bWl4ZWQ7d2hpdGUtc3BhY2U6bm9ybWFsO3NoYXBlLXBhZGRpbmc6MDtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjE7bWFya2VyOm5vbmUiIGQ9Ik0yMi4zNTIgMTk0LjM1Mmg4Mi42ODd2ODIuNjg3SDIyLjM1MnoiIGNvbG9yPSIjMDAwIiBmb250LXdlaWdodD0iNDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9Im5vbmUiLz48ZyBjb2xvcj0iIzAwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZjZmNWY0IiBzdHJva2Utd2lkdGg9IjgiPjxwYXRoIHN0eWxlPSJtYXJrZXI6bm9uZSIgZD0iTTg0IDI1NmwyNCAyNE04NCAyMTZsMjQtMjRNNDQgMjU2bC0yNCAyNE00NCAyMTZsLTI0LTI0TTQ0IDIxNmg0MHY0MEg0NHoiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgZD0iTTIwIDE5Mmg4OHY4OEgyMHoiLz48L2c+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNOTguNSAxOTR2MmgtNjl2LTJ6Ii8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBkPSJNMTIwIDE5MmMwIDYuNjI3LTUuMzczIDEyLTEyIDEyLTEuODUgMC0zLjIyMi0uMDk1LTUuMTY1LTEuMTY2LTEuMDkyLTEuNzI2LTMuNTUtNC41ODQtNS42NjgtNS42NjZDOTYuMDk2IDE5NS4yMjQgOTYgMTkzLjg1IDk2IDE5MmMwLTYuNjI3IDUuMzczLTEyIDEyLTEyczEyIDUuMzczIDEyIDEyeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNMTEwIDIwM2gydjY5aC0yeiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMTA4IiBjeT0iMjgwIiByPSIxMiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNzkgMjU4djJINDl2LTJ6TTk5LjYwNCAyNzQuNDI1bC0xLjQxNCAxLjQxNS0xNS0xNSAxLjQxNS0xLjQxNXpNMTAzLjA1OCAxOTkuNzkzbDEuNDE0IDEuNDE0LTE1IDE1LTEuNDE0LTEuNDE0eiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMTA4IiBjeT0iMTkwIiByPSIxMiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNODYgMjIyaDJ2MjZoLTJ6TTc5IDIxOHYySDQ5di0yeiIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iODQiIGN5PSIyMTYiIHI9IjgiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0iI2Q1ZDNjZiIvPjxwYXRoIHN0eWxlPSJtYXJrZXI6bm9uZSIgZmlsbD0iI2Q1ZDNjZiIgZD0iTTk4LjUgMjgydjJoLTY5di0yeiIvPjxjaXJjbGUgcj0iMTIiIGN5PSIyNzgiIGN4PSIxMDgiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBkPSJNOTIgMjU2YzAgLjY2NiAwIDEtLjIzNSAxLjkzMi0xLjE2NS41OS00Ljc2NSA0LjU0Mi01Ljc4NyA1LjgyMi0uNTAyLjI0Ni0xLjI5NS4yNDYtMS45NzguMjQ2YTggOCAwIDEgMSA4LTh6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNkNWQzY2YiLz48Y2lyY2xlIHN0eWxlPSJtYXJrZXI6bm9uZSIgY3g9Ijg0IiBjeT0iMjU0IiByPSI4IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZCkiLz48Y2lyY2xlIHI9IjgiIGN5PSIyMTQiIGN4PSI4NCIgc3R5bGU9Im1hcmtlcjpub25lIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZSkiLz48cGF0aCBzdHlsZT0ibWFya2VyOm5vbmUiIGZpbGw9IiNkNWQzY2YiIGQ9Ik0yMiAyMDNoMnY2OWgtMnoiLz48Y2lyY2xlIHI9IjEyIiBjeT0iMjgwIiBjeD0iMjAiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNDYgMjIyaDJ2MjZoLTJ6Ii8+PGNpcmNsZSByPSI4IiBjeT0iMjE2IiBjeD0iNDQiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PHBhdGggc3R5bGU9Im1hcmtlcjpub25lIiBmaWxsPSIjZDVkM2NmIiBkPSJNNDMuNTg2IDI1OS41ODZMNDUgMjYxbC0xNSAxNS0xLjQxNC0xLjQxNHoiLz48cGF0aCBkPSJNNy45MTIgMTkyYzAgNi42MjcgNS4zNzIgMTIgMTIgMTIgMS44NDkgMCAzLjIyMi0uMDk1IDUuMTY1LTEuMTY2IDEuMDkyLTEuNzI2IDMuNTUtNC41ODQgNS42NjgtNS42NjYgMS4wNzEtMS45NDQgMS4xNjctMy4zMTggMS4xNjctNS4xNjggMC02LjYyNy01LjM3My0xMi0xMi0xMi02LjYyOCAwLTEyIDUuMzczLTEyIDEyeiIgc3R5bGU9Im1hcmtlcjpub25lIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9IiNkNWQzY2YiLz48cGF0aCBzdHlsZT0ibWFya2VyOm5vbmUiIGZpbGw9IiNkNWQzY2YiIGQ9Ik00MC4wNzcgMjE0Ljk1M2wtMS40MTQgMS40MTUtMTUtMTUgMS40MTUtMS40MTR6Ii8+PGNpcmNsZSByPSIxMiIgY3k9IjE5MCIgY3g9IjIwIiBzdHlsZT0ibWFya2VyOm5vbmUiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZmlsbD0idXJsKCNmKSIvPjxjaXJjbGUgc3R5bGU9Im1hcmtlcjpub25lIiBjeD0iMjAiIGN5PSIyNzgiIHI9IjEyIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjZykiLz48Y2lyY2xlIHN0eWxlPSJtYXJrZXI6bm9uZSIgY3g9IjQ0IiBjeT0iMjE0IiByPSI4IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGZpbGw9InVybCgjaCkiLz48cGF0aCBkPSJNMzYgMjU2YzAgLjY2NiAwIDEgLjIzNSAxLjkzMiAxLjE2NS41OSA0Ljc2NSA0LjU0MiA1Ljc4NyA1LjgyMi41MDIuMjQ2IDEuMjk1LjI0NiAxLjk3OC4yNDZhOCA4IDAgMSAwLTgtOHoiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSIjZDVkM2NmIi8+PGNpcmNsZSByPSI4IiBjeT0iMjU0IiBjeD0iNDQiIHN0eWxlPSJtYXJrZXI6bm9uZSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmaWxsPSJ1cmwoI2kpIi8+PC9nPjwvc3ZnPg==\"\nLABEL oc.keyword=\"boxes,boxes,vm\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Boxes.desktop\"\nLABEL oc.launch=\"gnome-boxes.Gnome-boxes\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"boxes\"\nLABEL oc.displayname=\"Gnome-boxes\"\nLABEL oc.path=\"/usr/bin/gnome-boxes\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application-x-cd-image;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"boxes\"\nENV APPBIN \"/usr/bin/gnome-boxes\"\nENV APP \"/usr/bin/gnome-boxes\"\nLABEL oc.securitycontext={\"allowPrivilegeEscalation\":true,\"capabilities\":{\"add\":[\"NET_ADMIN\",\"CAP_SYS_ADMIN\"]}}\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/boxes/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/boxes/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/boxes/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/boxes/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN curl -Ls -o /tmp/bracket.deb https://github.com/adobe/brackets/releases/download/release-1.14.1/Brackets.Release.1.14.1.64-bit.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libatk-bridge2.0-0 libx11-6 libxi6 libxxf86vm1 libxfixes3 libxrender1 libgl1 libnss3 qt5dxcb-plugin libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin libcurl3 libxss1 && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/bracket.deb && rm /tmp/bracket.deb && apt-get clean && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"circle_brackets.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI0MDguNTciIHgyPSI0MDguNTciIHkxPSI1MzUuMiIgeTI9IjUxMi40IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjI4IDAgMCAxLjIyOCAtNDY5LjcxIC02MTEuMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzJlMzQzNiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NTU3NTMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMzIuMDIiIHgyPSIzMi4wMiIgeTE9IjIuMDQzIiB5Mj0iNjIuMDQ1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMDY0ZDMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTRjNmZkIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNyIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2EpIi8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMjQiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMjQiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8L2c+CiA8cGF0aCBkPSJtMTggMTh2MjhoMTIuNzI3di02LjM2MzZoLTYuMzYzNnYtMTUuMjczaDYuMzYzNnYtNi4zNjM2aC02LjUwNXptMTUuMjczIDB2Ni4zNjM2aDYuMzYzNnYxNS4yNzNoLTYuMzYzNnY2LjM2MzZoMTIuNzI3di0yOGgtMTIuNzI3eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0xOCAxOHYyOGgxMi43Mjd2LTYuMzYzNmgtNi4zNjM2di0xNS4yNzNoNi4zNjM2di02LjM2MzZoLTYuNTA1em0xNS4yNzMgMHY2LjM2MzZoNi4zNjM2djE1LjI3M2gtNi4zNjM2djYuMzYzNmgxMi43Mjd2LTI4aC0xMi43Mjd6IiBmaWxsPSJ1cmwoI2QpIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"brackets,html,brackets\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"brackets.desktop\"\nLABEL oc.launch=\"brackets.Brackets\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nENV ARGS=\"--no-sandbox --disable-gpu\"\nLABEL oc.name=\"Brackets\"\nLABEL oc.displayname=\"Brackets\"\nLABEL oc.path=\"/opt/brackets/Brackets\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Brackets\"\nENV APPBIN \"/opt/brackets/Brackets\"\nLABEL oc.args=\"--no-sandbox --disable-gpu\"\nENV APP \"/opt/brackets/Brackets\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/brackets/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/brackets/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/brackets/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/brackets/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-calculator\nLABEL oc.icon=\"gnome_calculator.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjEyOHB4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgd2lkdGg9IjEyOHB4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjE5MjM1MSAwIDAgMC4yNSAyMi4wMDUyMTMgNTcuMDAwMDMxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMC4yNzYxNTYiIHgyPSI0MjYuMjc2MjE1IiB5MT0iMjU5Ljk5OTg3OCIgeTI9IjI1OS45OTk4NzgiPgogICAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzlhOTk5NiIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC4wNTAyMTU2IiBzdG9wLWNvbG9yPSIjYzBiZmJjIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIwLjEwMDIwNCIgc3RvcC1jb2xvcj0iIzlhOTk5NiIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC45MDAwMjMiIHN0b3AtY29sb3I9IiM5YTk5OTYiLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuOTUwMDExIiBzdG9wLWNvbG9yPSIjYzBiZmJjIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOWE5OTk2Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHBhdGggZD0ibSAzMiAzNiBoIDY0IGMgNC40MTc5NjkgMCA4IDMuNTgyMDMxIDggOCB2IDY4IGMgMCA0LjQxNzk2OSAtMy41ODIwMzEgOCAtOCA4IGggLTY0IGMgLTQuNDE3OTY5IDAgLTggLTMuNTgyMDMxIC04IC04IHYgLTY4IGMgMCAtNC40MTc5NjkgMy41ODIwMzEgLTggOCAtOCB6IG0gMCAwIiBmaWxsPSJ1cmwoI2EpIi8+CiAgICA8cGF0aCBkPSJtIDMyIDggaCA2NCBjIDQuNDE3OTY5IDAgOCAzLjU4MjAzMSA4IDggdiA5MCBjIDAgNC40MTc5NjkgLTMuNTgyMDMxIDggLTggOCBoIC02NCBjIC00LjQxNzk2OSAwIC04IC0zLjU4MjAzMSAtOCAtOCB2IC05MCBjIDAgLTQuNDE3OTY5IDMuNTgyMDMxIC04IDggLTggeiBtIDAgMCIgZmlsbD0iI2RlZGRkYSIvPgogICAgPHBhdGggZD0ibSAzOCAxOCBoIDUyLjAzOTA2MiBjIDIuMjEwOTM4IDAgNCAxLjc4OTA2MiA0IDQgdiA2IGMgMCAyLjIxMDkzOCAtMS43ODkwNjIgNCAtNCA0IGggLTUyLjAzOTA2MiBjIC0yLjIxMDkzOCAwIC00IC0xLjc4OTA2MiAtNCAtNCB2IC02IGMgMCAtMi4yMTA5MzggMS43ODkwNjIgLTQgNCAtNCB6IG0gMCAwIiBmaWxsPSIjNzc3NjdiIi8+CiAgICA8cGF0aCBkPSJtIDM4IDM2IGggNTIuMDM5MDYyIGMgMi4yMTA5MzggMCA0IC0xLjc4OTA2MiA0IC00IHYgLTggYyAwIC0yLjIxMDkzOCAtMS43ODkwNjIgLTQgLTQgLTQgaCAtNTIuMDM5MDYyIGMgLTIuMjEwOTM4IDAgLTQgMS43ODkwNjIgLTQgNCB2IDggYyAwIDIuMjEwOTM4IDEuNzg5MDYyIDQgNCA0IHogbSAwIDAiIGZpbGw9IiM2ZmIxODIiLz4KICAgIDxwYXRoIGQ9Im0gMzQgNTEgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDQxIDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gNTcuMDExNzE5IDUxIHYgMiBjIDAgMy44Nzg5MDYgMy4xMjEwOTMgNyA3IDcgYyAzLjg3NSAwIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gODAgNTEgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDg3IDQ0IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM5YTk5OTYiLz4KICAgIDxwYXRoIGQ9Im0gMzQgNzMgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDU3LjAxMTcxOSA3MyB2IDIgYyAwIDMuODc4OTA2IDMuMTIxMDkzIDcgNyA3IGMgMy44NzUgMCA3IC0zLjEyMTA5NCA3IC03IHYgLTIgeiBtIDAgMCIgZmlsbD0iIzNkMzg0NiIvPgogICAgPHBhdGggZD0ibSA0MSA2NiBjIDMuODY3MTg4IDAgNyAzLjEzMjgxMiA3IDcgcyAtMy4xMzI4MTIgNyAtNyA3IHMgLTcgLTMuMTMyODEyIC03IC03IHMgMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjNWU1YzY0Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDY2IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gMzQgOTUgdiAyIGMgMCAzLjg3ODkwNiAzLjEyMTA5NCA3IDcgNyBzIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDQxIDg4IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gNTcuMDExNzE5IDk1IHYgMiBjIDAgMy44Nzg5MDYgMy4xMjEwOTMgNyA3IDcgYyAzLjg3NSAwIDcgLTMuMTIxMDk0IDcgLTcgdiAtMiB6IG0gMCAwIiBmaWxsPSIjM2QzODQ2Ii8+CiAgICA8cGF0aCBkPSJtIDY0IDg4IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyBzIC0zLjEzMjgxMiA3IC03IDcgcyAtNyAtMy4xMzI4MTIgLTcgLTcgcyAzLjEzMjgxMiAtNyA3IC03IHogbSAwIDAiIGZpbGw9IiM1ZTVjNjQiLz4KICAgIDxwYXRoIGQ9Im0gODcgODYgYyAzLjg2NzE4OCAwIDcgMy4xMzI4MTIgNyA3IHYgNCBjIDAgMy44NjcxODggLTMuMTMyODEyIDcgLTcgNyBzIC03IC0zLjEzMjgxMiAtNyAtNyB2IC00IGMgMCAtMy44NjcxODggMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjYzY0NjAwIi8+CiAgICA8cGF0aCBkPSJtIDg3IDY2IGMgMy44NjcxODggMCA3IDMuMTMyODEyIDcgNyB2IDIyIGMgMCAzLjg2NzE4OCAtMy4xMzI4MTIgNyAtNyA3IHMgLTcgLTMuMTMyODEyIC03IC03IHYgLTIyIGMgMCAtMy44NjcxODggMy4xMzI4MTIgLTcgNyAtNyB6IG0gMCAwIiBmaWxsPSIjZmY3ODAwIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"calculator,calculator\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Calculator.desktop\"\nLABEL oc.launch=\"gnome-calculator.gnome-calculator\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"calculator\"\nLABEL oc.displayname=\"calculator\"\nLABEL oc.path=\"/usr/bin/gnome-calculator\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"calculator\"\nENV APPBIN \"/usr/bin/gnome-calculator\"\nENV APP \"/usr/bin/gnome-calculator\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/calculator/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/calculator/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/calculator/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/calculator/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnuchess gnome-chess\nLABEL oc.icon=\"circle_chess.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnNDciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMjUiPgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMiIgc3RkRGV2aWF0aW9uPSIxNC4zNDM3NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMiIgeDI9IjMyIiB5MT0iMiIgeTI9IjYyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wNSIgc3RvcC1jb2xvcj0iIzFkMjEyMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wNyIgc3RvcC1jb2xvcj0iIzNlNDU0YSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MTQiIHg9Ii0uMDY2IiB5PSItLjA1NSIgd2lkdGg9IjEuMTMyIiBoZWlnaHQ9IjEuMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI5MTYiIHN0ZERldmlhdGlvbj0iMC42NDE2NjY2OCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlMjciIHRyYW5zZm9ybT0ibWF0cml4KC4wNjI3NDUgMCAwIC4wNjI3NDUgLS4xMjU0OSAtLjEyNTQ5KSIgY3g9IjUxMiIgY3k9IjUxMiIgcj0iNDc4LjEyIiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS45MzgiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiA8Y2lyY2xlIGlkPSJjaXJjbGUyOSIgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPHBhdGggaWQ9InBhdGg4NjQiIGQ9Im0yNC40OSAxOGMtMC4zNjUxNyAwLTAuNjYwMzMgMC4yODctMC42NjAzMyAwLjY1NTY3djUuNjg3NWMwIDAuMzY1MTcgMC4yOTE2NyAwLjY1NjgzIDAuNjYwMzMgMC42NTY4M2gwLjUwNjMzbC0xLjE2NjcgMS4xNjY3IDEuMTY2NyAxLjE2NjctMS4xNjMyIDEyLjgzM2MtMS4yOTM4IDAtMi4zMzIyIDEuMDM5NS0yLjMzMjIgMi4zMjg3IDAgMC40MjM1IDAuMTI3MTcgMC44MjAxNyAwLjMyMzE3IDEuMTY2N2wtMC4zMjQzMyAwLjAwNDYtMS4xNjY3IDIuMzMzNGgyMy4zMzNsLTEuMTY2Ny0yLjMzMzMtMC4zMjY2Ny0wLjAwNDZjMC4yMDA2Ny0wLjM0NjUgMC4zMjc4My0wLjc0MzE3IDAuMzI3ODMtMS4xNjY3IDAtMS4yOTM4LTEuMDQ1My0yLjMyODctMi4zMzQ1LTIuMzI4N2wtMS4xNjU1LTEyLjgzMyAxLjE2NjctMS4xNjY3LTEuMTY2Ny0xLjE2NjdoMC41MTFjMC4zNjg2NyAwIDAuNjYwMzMtMC4yODcgMC42NjAzMy0wLjY1Njgzdi01LjY4NzVjMC0wLjM2NTE3LTAuMjg3LTAuNjU1NjctMC42NjAzMy0wLjY1NTY3aC0xLjY3ODh2Mi4zMzMzaC0yLjMzMzN2LTIuMzMzM2gtMi4zMzMzdjIuMzMzM2gtMi4zMzMzdi0yLjMzMzRoLTIuMzMzM3YyLjMzMzNoLTIuMzMzM3YtMi4zMzMzIiBmaWx0ZXI9InVybCgjZmlsdGVyOTE0KSIgb3BhY2l0eT0iLjUiIHN0cm9rZS13aWR0aD0iMS4xNjY3Ii8+CiA8cGF0aCBpZD0icGF0aDI5IiBkPSJtMjQuNDkgMThjLTAuMzY1MTcgMC0wLjY2MDMzIDAuMjg3LTAuNjYwMzMgMC42NTU2N3Y1LjY4NzVjMCAwLjM2NTE3IDAuMjkxNjcgMC42NTY4MyAwLjY2MDMzIDAuNjU2ODNoMC41MDYzM2wtMS4xNjY3IDEuMTY2NyAxLjE2NjcgMS4xNjY3LTEuMTYzMiAxMi44MzNjLTEuMjkzOCAwLTIuMzMyMiAxLjAzOTUtMi4zMzIyIDIuMzI4NyAwIDAuNDIzNSAwLjEyNzE3IDAuODIwMTcgMC4zMjMxNyAxLjE2NjdsLTAuMzI0MzMgMC4wMDQ2LTEuMTY2NyAyLjMzMzRoMjMuMzMzbC0xLjE2NjctMi4zMzMzLTAuMzI2NjctMC4wMDQ2YzAuMjAwNjctMC4zNDY1IDAuMzI3ODMtMC43NDMxNyAwLjMyNzgzLTEuMTY2NyAwLTEuMjkzOC0xLjA0NTMtMi4zMjg3LTIuMzM0NS0yLjMyODdsLTEuMTY1NS0xMi44MzMgMS4xNjY3LTEuMTY2Ny0xLjE2NjctMS4xNjY3aDAuNTExYzAuMzY4NjcgMCAwLjY2MDMzLTAuMjg3IDAuNjYwMzMtMC42NTY4M3YtNS42ODc1YzAtMC4zNjUxNy0wLjI4Ny0wLjY1NTY3LTAuNjYwMzMtMC42NTU2N2gtMS42Nzg4djIuMzMzM2gtMi4zMzMzdi0yLjMzMzNoLTIuMzMzM3YyLjMzMzNoLTIuMzMzM3YtMi4zMzM0aC0yLjMzMzN2Mi4zMzMzaC0yLjMzMzN2LTIuMzMzMyIgZmlsbD0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjE2NjciLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"chess,chess gnuchess\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Chess.desktop\"\nLABEL oc.launch=\"gnome-chess.gnome-chess\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"chess\"\nLABEL oc.displayname=\"chess\"\nLABEL oc.path=\"/usr/bin/gnome-chess\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-chess-pgn\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chess\"\nENV APPBIN \"/usr/bin/gnome-chess\"\nENV APP \"/usr/bin/gnome-chess\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chess/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chess/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chess/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chess/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl -Ls https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -\nRUN echo \"deb [arch=$(dpkg --print-architecture)] http://dl.google.com/linux/chrome/deb/ stable main\" | tee /etc/apt/sources.list.d/google-chrome.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y krb5-user fonts-noto fonts-roboto xfonts-100dpi fonts-ubuntu fonts-freefont-ttf dbus-x11 fonts-wine fonts-recommended google-chrome-stable && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_google-chrome.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSIxNy4xODciIHgyPSIxNy4xODciIHkxPSI0Ni43MzciIHkyPSIxOTkuOTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC43MDUgMCAwIDQuNzA1IDQxIDcwLjM2MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM1QzEzMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNEJEMzAiIG9mZnNldD0iLjM0ODMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMxQjIzMSIgb2Zmc2V0PSIuNjgwOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMkM5RjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9Ijk1Ljk3IiB4Mj0iOTUuOTciIHkxPSIyLjI5MjIiIHkyPSIxOTguNDQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS43MTkxIDAgMCAxLjcxOTEgMzQwLjA5IDM2OC40NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQ3QjlGRiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzRDhBRkYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTE0Ljc1IiB4Mj0iMTE0Ljc1IiB5MT0iNTYuNjgxIiB5Mj0iMTg4LjkzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuMSAwIDAgNS4xIDIgMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmY2UwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlNmJjMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMTAzLjY3IiB4Mj0iMTAzLjY3IiB5MT0iLTQuNjYyMyIgeTI9IjIwNi41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTY5OSAwIDAgMi4xNjk5IDI5NS4wMSAzMjMuMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImciIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI2LjUwOTc3ODkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI5Ny40MjUiIHgyPSI5Ny40MjUiIHkxPSItOS4wMDcxIiB5Mj0iMjA5Ljg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDQuNzA1IDAgMCA0LjcwNSA0MSA0MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI0Y2NTAzQiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNGMjQ3MzUiIG9mZnNldD0iLjIxNzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI0U2MkYyNSIgb2Zmc2V0PSIuNTcxOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjRDQwOTBEIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xMTUiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCA5ODUuODgpIiBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1Ii8+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtODEzLjQxIDE1MS43NGMtOTYuNzI2IDIzLjAzMi01NTQuMTcgMTM2LjQ1LTMwMC4xNCAxNjMuOTEgMjgzLjA1IDMwLjYgMTc1LjMxIDMxNy40NyAxNzUuMzEgMzE3LjQ3bC0yMDcuMjYgMzQ4LjM3YTQ3MC41IDQ3MC41IDAgMCAwIDMwLjE2OCAxLjUwOTggNDcwLjUgNDcwLjUgMCAwIDAgNDcwLjUtNDcwLjUgNDcwLjUgNDcwLjUgMCAwIDAtMTY4LjU5LTM2MC43NnoiIGZpbGw9InVybCgjYykiLz4KICAgPGc+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDI4LjM2MikiIGQ9Im01MTEuNSA0MmE0NzAuNSA0NzAuNSAwIDAgMC0zOTQuNDUgMjE0LjgybDIxMC4zNSAzNTMuODRzLTUuNjMzOC0xNzAuNDUgOC40NTMxLTE4Ny4zNmMxNC4wODctMTYuOTA0IDgzLjExMy04MS43MDMgODMuMTEzLTgxLjcwM2w5NC4zODEtMjguMTc0LTUuMTA1NS0xOC4zMTIgNDE4LjcxLTIuNzUzOWE0NzAuNSA0NzAuNSAwIDAgMC00MTUuNDYtMjUwLjM2eiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYSkiLz4KICAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU1MC4zNiIgcj0iMjE2Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iIzExMSIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMiIvPgogICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSIyMTYuOTkiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1NDAuMzYiIHI9IjE3MS45MSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZCkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"chrome,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"google-chrome.desktop\"\nLABEL oc.launch=\"google-chrome.Google-chrome\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"chrome\"\nLABEL oc.displayname=\"Chrome\"\nLABEL oc.path=\"/usr/bin/google-chrome-stable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;video/webm;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chrome\"\nENV APPBIN \"/usr/bin/google-chrome-stable\"\nENV APP \"/usr/bin/google-chrome-stable\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chrome/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chrome/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chrome/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chrome/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update chromium\nLABEL oc.icon=\"circle_chromium.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI5NS45NyIgeDI9Ijk1Ljk3IiB5MT0iMi4yOTIyIiB5Mj0iMTk4LjQ0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNzE5MSAwIDAgMS43MTkxIDM0MC4wOSAzNjguNDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4ZGI2ZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNTlmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjExNC43NSIgeDI9IjExNC43NSIgeTE9IjU2LjY4MSIgeTI9IjE4OC45MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1LjEgMCAwIDUuMSAyIDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM3NmE3ZjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTJjMmY4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjEwMy42NyIgeDI9IjEwMy42NyIgeTE9Ii00LjY2MjMiIHkyPSIyMDYuNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjE2OTkgMCAwIDIuMTY5OSAyOTUuMDEgMzIzLjM3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi41MDk3Nzg5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZiIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjExNSIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQxIiB4Mj0iOTgyIiB5MT0iNTQwLjg2IiB5Mj0iNTQwLjg2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2NDlhZjUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGI4YWY1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjExNy4wNSIgeDI9IjkyNi45NSIgeTE9IjMyNi4zMyIgeTI9IjMyNi4zMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjM2I2YmQ0IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2OGJkZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTk4OC4zNikiPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCA5ODUuODgpIiBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1Ii8+CiAgIDxjaXJjbGUgY3g9IjUxMS41IiBjeT0iNTQwLjg2IiByPSI0NzAuNSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjZSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtODEzLjQxIDE1MS43NGMtOTYuNzI2IDIzLjAzMi01NTQuMTcgMTM2LjQ1LTMwMC4xNCAxNjMuOTEgMjgzLjA1IDMwLjYgMTc1LjMxIDMxNy40NyAxNzUuMzEgMzE3LjQ3bC0yMDcuMjYgMzQ4LjM3YTQ3MC41IDQ3MC41IDAgMCAwIDMwLjE2OCAxLjUwOTggNDcwLjUgNDcwLjUgMCAwIDAgNDcwLjUtNDcwLjUgNDcwLjUgNDcwLjUgMCAwIDAtMTY4LjU5LTM2MC43NnoiIGZpbGw9InVybCgjYykiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyOC4zNjIpIiBkPSJtNTExLjUgNDJhNDcwLjUgNDcwLjUgMCAwIDAtMzk0LjQ1IDIxNC44MmwyMTAuMzUgMzUzLjg0cy01LjYzMzgtMTcwLjQ1IDguNDUzMS0xODcuMzZjMTQuMDg3LTE2LjkwNCA4My4xMTMtODEuNzAzIDgzLjExMy04MS43MDNsOTQuMzgxLTI4LjE3NC01LjEwNTUtMTguMzEyIDQxOC43MS0yLjc1MzlhNDcwLjUgNDcwLjUgMCAwIDAtNDE1LjQ2LTI1MC4zNnoiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjU1MC4zNiIgcj0iMjE2Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iIzExMSIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMiIvPgogICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1NDAuMzYiIHI9IjIxNi45OSIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYikiLz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTQwLjM2IiByPSIxNzEuOTEiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2QpIi8+CiAgPC9nPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"chromium,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"chromium-browser.desktop\"\nLABEL oc.launch=\"chromium.Chromium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"chromium\"\nLABEL oc.displayname=\"chromium (alpine)\"\nLABEL oc.path=\"/usr/bin/chromium-browser\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;video/webm;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"chromium\"\nENV APPBIN \"/usr/bin/chromium-browser\"\nENV APP \"/usr/bin/chromium-browser\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/chromium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/chromium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/chromium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/chromium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libsecret-1-0 libpcsclite1 x11-utils libjpeg-turbo8 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"icaclient.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMSI+CiA8cmVjdCBzdHlsZT0ib3BhY2l0eTouMiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiB4PSItNTkiIHk9Ii02MCIgcng9IjI4IiByeT0iMjgiIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCwwLDApIi8+CiA8cmVjdCBzdHlsZT0iZmlsbDojNGY0ZjRmIiB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIHg9Ii01OCIgeT0iLTYwIiByeD0iMjgiIHJ5PSIyOCIgdHJhbnNmb3JtPSJtYXRyaXgoMCwtMSwtMSwwLDAsMCkiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5Oi4yIiBkPSJtMzIgMTFhMiAyIDAgMCAwIC0wLjE5MTQgMC4wMTE3MmMtMTAuOTMzMjI0IDAuMTA0NTM5LTE5LjgwODYgOS4wMzA5Ny0xOS44MDg2IDE5Ljk4ODI4IDAgMTEuMDIyMDA2IDguOTc3OTk0IDIwIDIwIDIwIDEwLjk1NDY3OCAwIDE5Ljg3OTUyNC04Ljg3MTE4IDE5Ljk4ODI4Mi0xOS44MDA3ODJhMiAyIDAgMCAwIDAuMDExNzE4IC0wLjE5OTIxOCAyIDIgMCAwIDAgLTIgLTIgMiAyIDAgMCAwIC0yIDJjMCA4Ljg2MDI0Ni03LjEzOTc1NCAxNi0xNiAxNnMtMTYtNy4xMzk3NTQtMTYtMTYgNy4xMzk3NTQtMTYgMTYtMTZhMiAyIDAgMCAwIDIgLTIgMiAyIDAgMCAwIC0yIC0yem0wIDhhMiAyIDAgMCAwIC0wLjE5MTQgMC4wMDc4Yy02LjUxNTM3NCAwLjEwNDEyNi0xMS44MDg2IDUuNDUzMDUyLTExLjgwODYgMTEuOTkyMiAwIDYuNjAzNzI4IDUuMzk2MjcyIDEyIDEyIDEyIDYuNTM2NDUyIDAgMTEuODc5ODgtNS4yODkxMTIgMTEuOTg4MjgyLTExLjgwMDc4MmEyIDIgMCAwIDAgMC4wMTE3MTggLTAuMTk5MjE4IDIgMiAwIDAgMCAtMiAtMiAyIDIgMCAwIDAgLTIgMmMwIDQuNDQxOTY4LTMuNTU4MDMyIDgtOCA4cy04LTMuNTU4MDMyLTgtOCAzLjU1ODAzMi04IDgtOGEyIDIgMCAwIDAgMiAtMiAyIDIgMCAwIDAgLTIgLTJ6bTAgOGE0IDQgMCAwIDAgLTQgNCA0IDQgMCAwIDAgNCA0IDQgNCAwIDAgMCA0IC00IDQgNCAwIDAgMCAtNCAtNHoiLz4KIDxwYXRoIHN0eWxlPSJmaWxsOiNmZmZmZmYiIGQ9Im0zMiAxMGEyIDIgMCAwIDAgLTAuMTkxNCAwLjAxMTcyYy0xMC45MzMyMjQgMC4xMDQ1MzktMTkuODA4NiA5LjAzMDk3LTE5LjgwODYgMTkuOTg4MjggMCAxMS4wMjIwMDYgOC45Nzc5OTQgMjAgMjAgMjAgMTAuOTU0Njc4IDAgMTkuODc5NTI0LTguODcxMTggMTkuOTg4MjgyLTE5LjgwMDc4MmEyIDIgMCAwIDAgMC4wMTE3MTggLTAuMTk5MjE4IDIgMiAwIDAgMCAtMiAtMiAyIDIgMCAwIDAgLTIgMmMwIDguODYwMjQ2LTcuMTM5NzU0IDE2LTE2IDE2cy0xNi03LjEzOTc1NC0xNi0xNiA3LjEzOTc1NC0xNiAxNi0xNmEyIDIgMCAwIDAgMiAtMiAyIDIgMCAwIDAgLTIgLTJ6bTAgOGEyIDIgMCAwIDAgLTAuMTkxNCAwLjAwNzhjLTYuNTE1Mzc0IDAuMTA0MTI2LTExLjgwODYgNS40NTMwNTItMTEuODA4NiAxMS45OTIyIDAgNi42MDM3MjggNS4zOTYyNzIgMTIgMTIgMTIgNi41MzY0NTIgMCAxMS44Nzk4OC01LjI4OTExMiAxMS45ODgyODItMTEuODAwNzgyYTIgMiAwIDAgMCAwLjAxMTcxOCAtMC4xOTkyMTggMiAyIDAgMCAwIC0yIC0yIDIgMiAwIDAgMCAtMiAyYzAgNC40NDE5NjgtMy41NTgwMzIgOC04IDhzLTgtMy41NTgwMzItOC04IDMuNTU4MDMyLTggOC04YTIgMiAwIDAgMCAyIC0yIDIgMiAwIDAgMCAtMiAtMnptMCA4YTQgNCAwIDAgMCAtNCA0IDQgNCAwIDAgMCA0IDQgNCA0IDAgMCAwIDQgLTQgNCA0IDAgMCAwIC00IC00eiIvPgogPHBhdGggc3R5bGU9Im9wYWNpdHk6LjE7ZmlsbDojZmZmZmZmIiBkPSJtMzIgMmMtMTUuNTEyIDAtMjggMTIuNDg4LTI4IDI4IDAgMC4xMTM0NSAwLjAxMTI4MDUgMC4yMjQxMTMgMC4wMTc1NzgxIDAuMzM1OTM4IDAuMzUxNTQzMi0xNS4yMDE3NTcgMTIuNjkzMTQ5OS0yNy4zMzU5MzggMjcuOTgyNDIxOS0yNy4zMzU5MzhzMjcuNjMwODc5IDEyLjEzNDE4MSAyNy45ODI0MjIgMjcuMzM1OTM4YzAuMDA2Mjk4LTAuMTExODI1IDAuMDE3NTc4LTAuMjIyNDg4IDAuMDE3NTc4LTAuMzM1OTM4IDAtMTUuNTEyLTEyLjQ4OC0yOC0yOC0yOHoiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"citrix,ica,icaclient,\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"wfica.desktop\"\nLABEL oc.launch=\"Wfica.Wfica\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nENV ARGS=\"-icaroot /opt/Citrix/ICAClient\"\nLABEL oc.name=\"citrix\"\nLABEL oc.displayname=\"citrix-client\"\nLABEL oc.path=\"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"application/x-ica;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"512M\\\",\\\"pid_mode\\\":true,\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nLABEL oc.secrets_requirement=\"\\\"citrix\\\"\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"citrix\"\nENV APPBIN \"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.args=\"-icaroot /opt/Citrix/ICAClient\"\nENV APP \"/opt/Citrix/ICAClient/wfica\"\nLABEL oc.usedefaultapplication=true\nCOPY icaclientWeb_13.10.0.20_amd64.deb /tmp/icaclient_amd64.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/icaclient_amd64.deb && apt-get clean && rm /tmp/icaclient_amd64.deb && rm -rf /var/lib/apt/lists/*\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/citrix/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/citrix/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/citrix/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/citrix/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cloudfoundry/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN curl https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | apt-key add -\nRUN echo \"deb https://packages.cloudfoundry.org/debian stable main\" | tee /etc/apt/sources.list.d/cloudfoundry-cli.list\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | apt-key add -\nRUN echo \"deb https://packages.cloudfoundry.org/debian stable main\" | tee /etc/apt/sources.list.d/cloudfoundry-cli.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends cf8-cli && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pivotalio-icon.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI+PHBhdGggZD0iTTI3LjY2IDBIMTAuNXY2NGgxMC42NjdWOS42Mmg1LjQzOGMxLjM2IDAgMi4zIDAgMy40NS4yMSA4Ljc4NC4yMSAxMy4wNzIgMi44MjQgMTMuMDcyIDkuODN2LjgzN2MwIDYuNDg0LTMuNDUgMTAuNjY3LTEyLjg2MyAxMC42NjctLjk0IDAtMi4zLS4yMS0yLjMtLjIxdjguNzg0aDIuM0M0My44NyAzOS43NCA1My41IDM0LjMgNTMuNSAyMC4zOTJ2LS44MzdDNTMuNSA1LjEyNCA0Mi44MjQgMCAyNy42NiAweiIgZmlsbD0iIzAwN2Q2OCIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"cloudfoundry,cf,pivotal.io,cloud,foundry,cloud foundry\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.pivotalio.cf\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--disable-factory --class pivotalio.cf\"\nLABEL oc.name=\"cloudFoundry\"\nLABEL oc.displayname=\"Cloud Foundry cli\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cloudFoundry\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class pivotalio.cf\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cloudfoundry/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cloudfoundry/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cloudfoundry/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cloudfoundry/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cmd.exe/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"cmd.svg\"\nLABEL oc.icondata=\"PHN2ZyBoZWlnaHQ9IjEwMjQiIHdpZHRoPSI4OTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTgzMSAxMjdINjNjLTM1LjM1IDAtNjQgMjguNjUtNjQgNjR2NjQwYzAgMzUuMzUgMjguNjUgNjQgNjQgNjRoNzY4YzM1LjM1IDAgNjQtMjguNjUgNjQtNjRWMTkxQzg5NSAxNTUuNjQ5OTk5OTk5OTk5OTggODY2LjM1IDEyNyA4MzEgMTI3ek0xMjcgNTc1bDEyOC0xMjhMMTI3IDMxOWw2NC02NCAxOTIgMTkyTDE5MSA2MzkgMTI3IDU3NXpNNjM5IDYzOUgzODN2LTY0aDI1NlY2Mzl6IiAvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"cmd.exe,wine,command,cmd.exe\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"conhost.exe.conhost.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"cmd.exe\"\nLABEL oc.displayname=\"cmd.exe wine (alpine)\"\nLABEL oc.path=\"/usr/bin/wineconsole\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cmd.exe\"\nENV APPBIN \"/usr/bin/wineconsole\"\nENV APP \"/usr/bin/wineconsole\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cmd.exe/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cmd.exe/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cmd.exe/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cmd.exe/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/cntlm/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nCOPY cntlm/cntlm.mustache cntlm/init.cntlm.sh /composer/\nCOPY composer/init.d/init.gnome-terminal /composer/init.d/\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends ruby-mustache gnome-terminal dbus-x11 cntlm net-tools vim curl wget && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"cntlm.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDQ3MC4xMDcgNDcwLjEwNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDcwLjEwNyA0NzAuMTA3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNNDIzLjQ4OSwxNjkuNzg1YzQuMzY0LTEyLjMzOCw2Ljg2My0yNS41NTUsNi44NjMtMzkuMzkxYzAtNjUuMzE2LTUyLjk1Ni0xMTguMjcyLTExOC4yNzItMTE4LjI3Mg0KCQljLTQ0LjQ0NSwwLTgzLjEyOSwyNC41NTMtMTAzLjMzMiw2MC43OTljLTE1LjM5LTkuNjc1LTMzLjU2LTE1LjM2LTUzLjA4LTE1LjM2Yy01NS4yMzksMC0xMDAuMDEsNDQuNzczLTEwMC4wMSwxMDAuMDAyDQoJCWMwLDMuODI4LDAuMjY0LDcuNTkzLDAuNjg0LDExLjMxM2gtMC42ODRDMjQuOTI1LDE2OC44NzUsMCwxOTMuNzkyLDAsMjI0LjUzM2MwLDMwLjc0LDI0LjkyNSw1NS42NTgsNTUuNjU4LDU1LjY1OGgyMC4yMDQNCgkJYy0yLjQwOC0zLjg2Ni0zLjc0Mi04LjI5OS0zLjc0Mi0xMi45NTljMC02LjU2MSwyLjU0Ni0xMi43NDIsNy4yMDUtMTcuNDE2bDE0LjA4NS0xNC4wN2w4LjMyNS04LjMyMw0KCQljNC42NDMtNC42MzUsMTAuODIzLTcuMTgzLDE3LjM5Mi03LjE4M2M2LjU2OSwwLDEyLjc2NSwyLjU1NiwxNy40MjQsNy4yMTNsMC4wNDYsMC4wNDh2LTAuMDdjMC0xMy41OCwxMS4wNDItMjQuNjMxLDI0LjYzMS0yNC42MzENCgkJaDMxLjYzM2MxMy41NzIsMCwyNC42MTUsMTEuMDUsMjQuNjE1LDI0LjYzMXYwLjA4NGwwLjA2Mi0wLjA2MmMxMS4wNjQtMTEuMDY0LDI2Ljk3Mi03Ljg5LDM0Ljg0OC0wLjAxNGwxMC4zMjcsMTAuMzI3DQoJCWwxMi4wMzUsMTIuMDM1YzQuNjU5LDQuNjUxLDcuMjIxLDEwLjgzOSw3LjIyMSwxNy40MjRjMCw0LjY3NS0xLjM1LDkuMTE1LTMuNzU4LDEyLjk2N2gzMy40MDQNCgkJYzIzLjAzLTM2LjA1Miw5MS40NjktNTIuNTA0LDExMC41MjMtNi42ODVjMC43NzYsMS44NjQsMC45MzIsMy44MzYsMS4xOCw1Ljc5M2MyNi40OTMtNC4yNzEsNDYuNzktMjcuMDYxLDQ2Ljc5LTU0Ljc2NQ0KCQlDNDcwLjEwNywxOTYuODkyLDQ0OS45MDQsMTc0LjEyNSw0MjMuNDg5LDE2OS43ODV6Ii8+DQoJPHBhdGggZD0iTTE0Ni4xOTUsMzcyLjExYy0xNS4yODItMTAuMDcxLTI1LjQwNy0yNy4zMzEtMjUuNDA3LTQ2Ljk1M2MwLTMxLjAyLDI1LjIzNS01Ni4yNTUsNTYuMjQ3LTU2LjI1NQ0KCQljMzEuMDI4LDAsNTYuMjYzLDI1LjIzNSw1Ni4yNjMsNTYuMjU1YzAsMy44MDQtMC40MDQsNy41MjMtMS4xMTgsMTEuMTE5bDUxLjMyNC0yMS40di01LjU0M2MwLTQuODIzLTMuOTEzLTguNzM3LTguNzI3LTguNzM3DQoJCWgtMTcuOTM2Yy0xLjU1NC01LjA1NC0zLjYwNC05Ljg5OS02LjA0MS0xNC40OTZsMTIuNzAzLTEyLjcwM2MxLjY0Ni0xLjYzOCwyLjU2Mi0zLjg1OSwyLjU2Mi02LjE3Mw0KCQljMC0yLjMxNC0wLjkxNi00LjUzNC0yLjU2Mi02LjE4MWwtMjIuMzYyLTIyLjM2MmMtMS43MS0xLjcwOC0zLjk0NS0yLjU1Ni02LjE4MS0yLjU1NmMtMi4yMzYsMC00LjQ1NywwLjg0OC02LjE2NSwyLjU1Ng0KCQlsLTEyLjcxOSwxMi43MTFjLTQuNTk3LTIuNDM4LTkuNDI3LTQuNDgtMTQuNTA0LTYuMDI1VjIyNy40M2MwLTQuODIzLTMuODk4LTguNzI5LTguNzEzLTguNzI5aC0zMS42MzMNCgkJYy00LjgxNSwwLTguNzI5LDMuOTA2LTguNzI5LDguNzI5djE3LjkzNmMtNS4wNjIsMS41NDYtOS45MDcsMy41ODgtMTQuNTA0LDYuMDI1bC0xMi42ODctMTIuNjk1DQoJCWMtMS43MDgtMS43MS0zLjk0NS0yLjU1Ni02LjE4MS0yLjU1NmMtMi4yMzYsMC00LjQ3MiwwLjg0Ni02LjE4MSwyLjU0OGwtMjIuMzc4LDIyLjM3Yy0xLjYzLDEuNjM4LTIuNTQ2LDMuODU5LTIuNTQ2LDYuMTczDQoJCWMwLDIuMzIyLDAuOTE2LDQuNTQyLDIuNTQ2LDYuMTgxbDEyLjcwMywxMi42OTVjLTIuNDM4LDQuNTk3LTQuNDcyLDkuNDM1LTYuMDI1LDE0LjQ4OEg3OS4zMDljLTQuODEzLDAtOC43MjcsMy45MTQtOC43MjcsOC43MzcNCgkJdjMxLjY0MWMwLDQuODE0LDMuOTE0LDguNzI3LDguNzI3LDguNzI3SDk3LjIzYzEuNTY4LDUuMDU1LDMuNjAyLDkuOTAxLDYuMDQsMTQuNDk4bC0xMi43MDMsMTIuNzAzDQoJCWMtMy40MDEsMy40LTMuNDAxLDguOTM3LDAsMTIuMzQ1bDcuNTE3LDcuNTA5YzQuMzMyLTQuNjksOS42MjctOC42MDMsMTUuOTAyLTExLjIyMUwxNDYuMTk1LDM3Mi4xMXoiLz4NCgk8cGF0aCBkPSJNMTc3LjAzNSwyODQuODA0Yy0yMi4yNTMsMC00MC4zNDUsMTguMS00MC4zNDUsNDAuMzUzYzAsMTguNDM0LDEyLjQ4NiwzMy44NTQsMjkuMzk3LDM4LjY2bDQ2LjA5Mi0xOS4yMQ0KCQljMy4yMTQtNS43OTEsNS4yMTctMTIuMzYxLDUuMjE3LTE5LjQ1QzIxNy4zOTcsMzAyLjkwNCwxOTkuMjg5LDI4NC44MDQsMTc3LjAzNSwyODQuODA0eiIvPg0KCTxwYXRoIGQ9Ik00MjUuMzA1LDMzMi41NzJjLTAuODIyLDAtMS42NjIsMC4xNjItMi40NywwLjQ5NmwtMzIuOTg0LDEzLjczNmMtMS40MjgsMC41OTgtMi45MDQsMC44NzgtNC4zNjQsMC44NzgNCgkJYy00LjQ0MiwwLTguNjY1LTIuNjMzLTEwLjQ4My03LjAwNWwtMTAuMDYzLTI0LjEyNGMtMS4xNDgtMi43ODgtMS4xOC01LjkwOS0wLjAxNi04LjY5N2MxLjEzNC0yLjc5NiwzLjM0LTUuMDA5LDYuMTE5LTYuMTY1DQoJCWwzMi45ODQtMTMuNzQ0YzMuMjYyLTEuMzU4LDQuNzgzLTUuMDc4LDMuNDMyLTguMzE1Yy01LjY1Mi0xMy41OC0yMC4yNS0yMC43NjMtMzQuMTAyLTE3LjU2NGwtMTYuMzY4LDMuNzM1DQoJCWMtMTUuNTc2LDMuNTU2LTI4LjY1MSwxNC4wNDYtMzUuNTE2LDI4LjQ1N0wzMDguNCwzMjEuNzMyTDEyMC4xMDQsNDAwLjIxYy0xNS4zMTIsNi4zODMtMjIuNTQ4LDIzLjk1My0xNi4xNjYsMzkuMjgxDQoJCWM2LjMyMSwxNS4xNSwyMy44MDcsMjIuNjExLDM5LjI4OSwxNi4xNzRsMTg4LjMxLTc4LjQ3MWwyOC42ODMsMTAuMDQ5YzUuNjIzLDEuOTcyLDExLjQ2MSwyLjk0MiwxNy4yNywyLjk0Mg0KCQljOS43ODMsMCwxOS40OS0yLjc0OCwyNy45NTMtOC4xMTNsMTQuMTk0LTguOTk5YzEyLjIzNy03Ljc2NSwxNy4wOTgtMjMuMjAxLDExLjUyMy0zNi41OA0KCQlDNDMwLjE1LDMzNC4wNDgsNDI3Ljc5LDMzMi41NzIsNDI1LjMwNSwzMzIuNTcyeiIvPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo=\"\nLABEL oc.keyword=\"cntlm,cntlm,proxy,ntlm\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.cntlm\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--class cntlm -- bash -c '/usr/sbin/cntlm -f -v; exec bash'\"\nLABEL oc.name=\"cntlm\"\nLABEL oc.displayname=\"cntlm\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"network_mode\\\":\\\"container\\\"}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"cntlm\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--class cntlm -- bash -c '/usr/sbin/cntlm -f -v; exec bash'\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN chown balloon:root /etc/cntlm.conf\nRUN chmod 755 /composer/cntlm.mustache\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cntlm/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cntlm/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cntlm/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cntlm/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes unzip && apt-get clean\nRUN cd /composer && curl -Ls https://th.corsix.org/Demo.zip -o Demo.zip && unzip Demo.zip && rm -rf Demo.zip\nCOPY corsix-th.config.txt /composer/corsix-th.config.txt\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libgl1 corsix-th && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"games.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgeD0iMHB4IgogICB5PSIwcHgiCiAgIHdpZHRoPSIyNDguNTcxcHgiCiAgIGhlaWdodD0iMjQ4LjU3MXB4IgogICB2aWV3Qm94PSIwIDAgMjQ4LjU3MSAyNDguNTcxIgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNDguNTcxIDI0OC41NzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJWaWRlby1HYW1lLUNvbnRyb2xsZXItSWNvbi1JRFYtZ3JlZW4uc3ZnIj48bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1NyI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczU1IiAvPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzAwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjQ4MCIKICAgICBpZD0ibmFtZWR2aWV3NTMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuOTQ5NDI2OTMiCiAgICAgaW5rc2NhcGU6Y3g9IjEyNC4yODU1IgogICAgIGlua3NjYXBlOmN5PSIxMjQuMjg1NSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgLz48cGF0aAogICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgZD0iTTg3LjQyMyw4OC45NjhjMC41NjIsMy4xMjYtMS41MTcsNi4xMTUtNC42NDIsNi42NzZsLTMzLjk1Niw2LjEwMmMtMy4xMjYsMC41NjItNi4xMTUtMS41MTctNi42NzYtNC42NDIgIGwwLDBjLTAuNTYyLTMuMTI2LDEuNTE3LTYuMTE1LDQuNjQyLTYuNjc2bDMzLjk1Ni02LjEwMkM4My44NzMsODMuNzY0LDg2Ljg2MSw4NS44NDIsODcuNDIzLDg4Ljk2OEw4Ny40MjMsODguOTY4eiIKICAgICBpZD0icGF0aDMiIC8+PGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yODUuNzE0MjksLTM2NS4yMTkzMikiPjxwYXRoCiAgICAgICBpZD0icGF0aDI5ODUiCiAgICAgICBmaWxsPSIjRUEzRDRFIgogICAgICAgZD0iTTUzNC4yODUsNDg5LjUwNWMwLjAyNCw2OC42NDEtNTUuNjAxLDEyNC4zMDUtMTI0LjI0MiwxMjQuMzI5ICAgcy0xMjQuMzA1LTU1LjYwMi0xMjQuMzI5LTEyNC4yNDNjMC0wLjAyOSwwLTAuMDU4LDAtMC4wODZjLTAuMDI0LTY4LjY0MSw1NS42MDItMTI0LjMwNSwxMjQuMjQzLTEyNC4zMjkgICBjNjguNjQxLTAuMDIzLDEyNC4zMDUsNTUuNjAyLDEyNC4zMjgsMTI0LjI0M0M1MzQuMjg1LDQ4OS40NDcsNTM0LjI4NSw0ODkuNDc2LDUzNC4yODUsNDg5LjUwNXoiCiAgICAgICBzdHlsZT0iZmlsbDojNzZjMmFmO2ZpbGwtb3BhY2l0eToxIiAvPjxwYXRoCiAgICAgICBpZD0icGF0aDMwOTkiCiAgICAgICBmaWxsPSIjMjMxRjIwIgogICAgICAgc3Ryb2tlPSIjMjMxRjIwIgogICAgICAgc3Ryb2tlLXdpZHRoPSI2IgogICAgICAgZD0iTTQxMC45NTEsMzY2LjcyNiAgIGMtMi41ODMsMjcuMzY0LTguNjUsNDAuMDUxLTExLjA1OSw1MC45MjJjLTEuMjA0LDUuNDM2LTEuNDY4LDEwLjQzMiwwLjA5NCwxNi40NjZzNC45NDMsMTMuMTA3LDExLjAyNywyMi44MDhsMC44NDYtMC41MTggICBjLTYuMDU3LTkuNjU5LTkuMzc4LTE2LjY0OS0xMC45MDEtMjIuNTM0Yy0xLjUyMy01Ljg4NS0xLjI0Ny0xMC42NjItMC4wNjMtMTYuMDA4YzIuMzY5LTEwLjY5NCw4LjQ2NS0yMy41NjksMTEuMDU4LTUxLjA0NCAgIEw0MTAuOTUxLDM2Ni43MjZMNDEwLjk1MSwzNjYuNzI2eiIgLz48ZwogICAgICAgaWQ9ImczOTE1Ij48ZwogICAgICAgICBpZD0iZzkiPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzXzFfIgogICAgICAgICAgIGZpbGw9IiNDMUJDOUQiCiAgICAgICAgICAgZD0iTTM5OS4yNjUsNTA0Ljk0YzAsMjIuMDkyLTE3LjkwOSw0MC00MCw0MGMtMjIuMDkyLDAtNDAtMTcuOTA4LTQwLTQwbDAsMCAgICAgYzAtMjIuMDkxLDE3LjkwOC00MCw0MC00MEMzODEuMzU2LDQ2NC45NCwzOTkuMjY1LDQ4Mi44NDksMzk5LjI2NSw1MDQuOTR6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzLTdfMV8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNTAxLjI2NCw1MDQuOTRjMCwyMi4wOTItMTcuOTA4LDQwLTQwLDQwcy00MC0xNy45MDgtNDAtNDBsMCwwICAgICBjMC0yMi4wOTEsMTcuOTA4LTQwLDQwLTQwUzUwMS4yNjQsNDgyLjg0OSw1MDEuMjY0LDUwNC45NHoiIC8+PHJlY3QKICAgICAgICAgICBpZD0icmVjdDMwMzFfMV8iCiAgICAgICAgICAgeD0iMzU2LjA1IgogICAgICAgICAgIHk9IjQ2NC45NCIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIHdpZHRoPSIxMDUuNzEzIgogICAgICAgICAgIGhlaWdodD0iNjAiIC8+PC9nPjxnCiAgICAgICAgIGlkPSJnMTQiPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzIgogICAgICAgICAgIGZpbGw9IiNGMkYyRjIiCiAgICAgICAgICAgZD0iTTM5OS41OTgsNDk2LjI3M2MwLDIyLjA5Mi0xNy45MDksNDAtNDAsNDBjLTIyLjA5MiwwLTQwLTE3LjkwOC00MC00MGwwLDAgICAgIGMwLTIyLjA5MSwxNy45MDgtNDAsNDAtNDBDMzgxLjY4OSw0NTYuMjczLDM5OS41OTgsNDc0LjE4MiwzOTkuNTk4LDQ5Ni4yNzN6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgyOTkzLTciCiAgICAgICAgICAgZmlsbD0iI0YyRjJGMiIKICAgICAgICAgICBkPSJNNTAxLjU5OCw0OTYuMjczYzAsMjIuMDkyLTE3LjkwOCw0MC00MCw0MHMtNDAtMTcuOTA4LTQwLTQwbDAsMCAgICAgYzAtMjIuMDkxLDE3LjkwOC00MCw0MC00MFM1MDEuNTk4LDQ3NC4xODIsNTAxLjU5OCw0OTYuMjczeiIgLz48cmVjdAogICAgICAgICAgIGlkPSJyZWN0MzAzMSIKICAgICAgICAgICB4PSIzNTYuMzg0IgogICAgICAgICAgIHk9IjQ1Ni4yNzMiCiAgICAgICAgICAgZmlsbD0iI0YyRjJGMiIKICAgICAgICAgICB3aWR0aD0iMTA1LjcxNCIKICAgICAgICAgICBoZWlnaHQ9IjYwIiAvPjwvZz48ZwogICAgICAgICBpZD0iZzE5Ij48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NV8yXyIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik00NzIuMzg3LDQ3OC40NzFjMCw1LjA2MS00LjEwNCw5LjE2My05LjE2NCw5LjE2M3MtOS4xNjMtNC4xMDItOS4xNjMtOS4xNjMgICAgIGMwLTUuMDYxLDQuMTAzLTkuMTYzLDkuMTYzLTkuMTYzUzQ3Mi4zODcsNDczLjQxLDQ3Mi4zODcsNDc4LjQ3MUw0NzIuMzg3LDQ3OC40NzF6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTBfMl8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNDcyLjUzMSw1MTYuMDA1YzAsNS4wNjEtNC4xMDMsOS4xNjMtOS4xNjIsOS4xNjNjLTUuMDYyLDAtOS4xNjQtNC4xMDMtOS4xNjQtOS4xNjMgICAgIGMwLTUuMDYyLDQuMTAzLTkuMTY0LDkuMTY0LTkuMTY0QzQ2OC40MjksNTA2Ljg0MSw0NzIuNTMxLDUxMC45NDMsNDcyLjUzMSw1MTYuMDA1TDQ3Mi41MzEsNTE2LjAwNXoiIC8+PHBhdGgKICAgICAgICAgICBpZD0icGF0aDMwNTUtOV8yXyIKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik00OTEuMTI1LDQ5Ny4zNzZjMCw1LjA2LTQuMTA0LDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MywwLTkuMTY0LTQuMTA0LTkuMTY0LTkuMTYzICAgICBjMC01LjA2Miw0LjEwMi05LjE2NCw5LjE2NC05LjE2NEM0ODcuMDIxLDQ4OC4yMTIsNDkxLjEyNSw0OTIuMzE1LDQ5MS4xMjUsNDk3LjM3Nkw0OTEuMTI1LDQ5Ny4zNzZ6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTRfMl8iCiAgICAgICAgICAgZmlsbD0iI0MxQkM5RCIKICAgICAgICAgICBkPSJNNDUzLjcyNCw0OTcuMzU2YzAsNS4wNjMtNC4xMDMsOS4xNjQtOS4xNjMsOS4xNjRjLTUuMDYyLDAtOS4xNjMtNC4xMDItOS4xNjMtOS4xNjQgICAgIGMwLTUuMDYsNC4xMDItOS4xNjMsOS4xNjMtOS4xNjNDNDQ5LjYyMSw0ODguMTkzLDQ1My43MjQsNDkyLjI5Niw0NTMuNzI0LDQ5Ny4zNTZMNDUzLjcyNCw0OTcuMzU2eiIgLz48L2c+PGcKICAgICAgICAgaWQ9ImcyNSI+PHBhdGgKICAgICAgICAgICBpZD0icGF0aDMwNTVfMV8iCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNNDcyLjM4Nyw0NzcuMjIxYzAsNS4wNjEtNC4xMDQsOS4xNjMtOS4xNjQsOS4xNjNzLTkuMTYzLTQuMTAyLTkuMTYzLTkuMTYzICAgICBjMC01LjA2MSw0LjEwMy05LjE2Myw5LjE2My05LjE2M1M0NzIuMzg3LDQ3Mi4xNiw0NzIuMzg3LDQ3Ny4yMjFMNDcyLjM4Nyw0NzcuMjIxeiIgLz48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NS0wXzFfIgogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTQ3Mi41MzEsNTE0Ljc1NWMwLDUuMDYxLTQuMTAzLDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MiwwLTkuMTY0LTQuMTAzLTkuMTY0LTkuMTYzICAgICBjMC01LjA2Miw0LjEwMy05LjE2NCw5LjE2NC05LjE2NEM0NjguNDI5LDUwNS41OTEsNDcyLjUzMSw1MDkuNjkzLDQ3Mi41MzEsNTE0Ljc1NUw0NzIuNTMxLDUxNC43NTV6IiAvPjxwYXRoCiAgICAgICAgICAgaWQ9InBhdGgzMDU1LTlfMV8iCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNNDkxLjEyNSw0OTYuMTI2YzAsNS4wNi00LjEwNCw5LjE2My05LjE2Miw5LjE2M2MtNS4wNjMsMC05LjE2NC00LjEwNC05LjE2NC05LjE2MyAgICAgYzAtNS4wNjIsNC4xMDItOS4xNjQsOS4xNjQtOS4xNjRDNDg3LjAyMSw0ODYuOTYyLDQ5MS4xMjUsNDkxLjA2NSw0OTEuMTI1LDQ5Ni4xMjZMNDkxLjEyNSw0OTYuMTI2eiIgLz48cGF0aAogICAgICAgICAgIGlkPSJwYXRoMzA1NS00XzFfIgogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTQ1My43MjQsNDk2LjEwNmMwLDUuMDYzLTQuMTAzLDkuMTY0LTkuMTYzLDkuMTY0Yy01LjA2MiwwLTkuMTYzLTQuMTAyLTkuMTYzLTkuMTY0ICAgICBjMC01LjA2LDQuMTAyLTkuMTYzLDkuMTYzLTkuMTYzQzQ0OS42MjEsNDg2Ljk0Myw0NTMuNzI0LDQ5MS4wNDYsNDUzLjcyNCw0OTYuMTA2TDQ1My43MjQsNDk2LjEwNnoiIC8+PC9nPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzA1NSIKICAgICAgICAgZmlsbD0iIzMzMzMzMyIKICAgICAgICAgZD0iTTQ3Mi4zODcsNDc0Ljg0NmMwLDUuMDYxLTQuMTA0LDkuMTYzLTkuMTY0LDkuMTYzcy05LjE2My00LjEwMy05LjE2My05LjE2MyAgICBjMC01LjA2MSw0LjEwMy05LjE2Myw5LjE2My05LjE2M1M0NzIuMzg3LDQ2OS43ODUsNDcyLjM4Nyw0NzQuODQ2TDQ3Mi4zODcsNDc0Ljg0NnoiIC8+PHBhdGgKICAgICAgICAgaWQ9InBhdGgzMDU1LTAiCiAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgIGQ9Ik00NzIuNTMxLDUxMi4zOGMwLDUuMDYxLTQuMTAzLDkuMTYzLTkuMTYyLDkuMTYzYy01LjA2MiwwLTkuMTY0LTQuMTAzLTkuMTY0LTkuMTYzICAgIGMwLTUuMDYyLDQuMTAzLTkuMTY0LDkuMTY0LTkuMTY0QzQ2OC40MjksNTAzLjIxNiw0NzIuNTMxLDUwNy4zMTgsNDcyLjUzMSw1MTIuMzhMNDcyLjUzMSw1MTIuMzh6IiAvPjxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzA1NS05IgogICAgICAgICBmaWxsPSIjMzMzMzMzIgogICAgICAgICBkPSJNNDkxLjEyNSw0OTMuNzUxYzAsNS4wNi00LjEwNCw5LjE2My05LjE2Miw5LjE2M2MtNS4wNjMsMC05LjE2NC00LjEwNC05LjE2NC05LjE2MyAgICBjMC01LjA2Miw0LjEwMi05LjE2NCw5LjE2NC05LjE2NEM0ODcuMDIxLDQ4NC41ODgsNDkxLjEyNSw0ODguNjksNDkxLjEyNSw0OTMuNzUxTDQ5MS4xMjUsNDkzLjc1MXoiIC8+PHBhdGgKICAgICAgICAgaWQ9InBhdGgzMDU1LTQiCiAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgIGQ9Ik00NTMuNzI0LDQ5My43MzFjMCw1LjA2My00LjEwMyw5LjE2NC05LjE2Myw5LjE2NGMtNS4wNjIsMC05LjE2My00LjEwMi05LjE2My05LjE2NCAgICBjMC01LjA2LDQuMTAyLTkuMTYzLDkuMTYzLTkuMTYzQzQ0OS42MjEsNDg0LjU2OCw0NTMuNzI0LDQ4OC42NzEsNDUzLjcyNCw0OTMuNzMxTDQ1My43MjQsNDkzLjczMXoiIC8+PGcKICAgICAgICAgaWQ9ImczNSI+PHBhdGgKICAgICAgICAgICBmaWxsPSIjQzFCQzlEIgogICAgICAgICAgIGQ9Ik0zODMuNzUsNTAyLjEzYzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVoLTM2LjI1Yy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1bDAsMCAgICAgYzAtMy43OTcsMy4wNzgtNi44NzUsNi44NzUtNi44NzVoMzYuMjVDMzgwLjY3Miw0OTUuMjU1LDM4My43NSw0OTguMzMzLDM4My43NSw1MDIuMTNMMzgzLjc1LDUwMi4xM3oiCiAgICAgICAgICAgaWQ9InBhdGgzNyIgLz48cGF0aAogICAgICAgICAgIGZpbGw9IiNDMUJDOUQiCiAgICAgICAgICAgZD0iTTM1OC42MjUsNDc3LjEzYzMuNzk3LDAsNi44NzUsMy4wNzgsNi44NzUsNi44NzV2MzYuMjVjMCwzLjc5Ny0zLjA3OCw2Ljg3NS02Ljg3NSw2Ljg3NWwwLDAgICAgIGMtMy43OTcsMC02Ljg3NS0zLjA3OC02Ljg3NS02Ljg3NXYtMzYuMjVDMzUxLjc1LDQ4MC4yMDgsMzU0LjgyOCw0NzcuMTMsMzU4LjYyNSw0NzcuMTNMMzU4LjYyNSw0NzcuMTN6IgogICAgICAgICAgIGlkPSJwYXRoMzkiIC8+PC9nPjxnCiAgICAgICAgIGlkPSJnNDEiPjxwYXRoCiAgICAgICAgICAgZmlsbD0iIzE0MTIxMiIKICAgICAgICAgICBkPSJNMzgzLjc1LDQ5OS4yNTVjMCwzLjc5Ny0zLjA3OCw2Ljg3NS02Ljg3NSw2Ljg3NWgtMzYuMjVjLTMuNzk3LDAtNi44NzUtMy4wNzgtNi44NzUtNi44NzVsMCwwICAgICBjMC0zLjc5NywzLjA3OC02Ljg3NSw2Ljg3NS02Ljg3NWgzNi4yNUMzODAuNjcyLDQ5Mi4zOCwzODMuNzUsNDk1LjQ1OCwzODMuNzUsNDk5LjI1NUwzODMuNzUsNDk5LjI1NXoiCiAgICAgICAgICAgaWQ9InBhdGg0MyIgLz48cGF0aAogICAgICAgICAgIGZpbGw9IiMxNDEyMTIiCiAgICAgICAgICAgZD0iTTM1OC42MjUsNDc0LjI1NWMzLjc5NywwLDYuODc1LDMuMDc4LDYuODc1LDYuODc1djM2LjI1YzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVsMCwwICAgICBjLTMuNzk3LDAtNi44NzUtMy4wNzgtNi44NzUtNi44NzV2LTM2LjI1QzM1MS43NSw0NzcuMzMzLDM1NC44MjgsNDc0LjI1NSwzNTguNjI1LDQ3NC4yNTVMMzU4LjYyNSw0NzQuMjU1eiIKICAgICAgICAgICBpZD0icGF0aDQ1IiAvPjwvZz48ZwogICAgICAgICBpZD0iZzQ3Ij48cGF0aAogICAgICAgICAgIGZpbGw9IiMzMzMzMzMiCiAgICAgICAgICAgZD0iTTM4My43NSw0OTUuNzU1YzAsMy43OTctMy4wNzgsNi44NzUtNi44NzUsNi44NzVoLTM2LjI1Yy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1bDAsMCAgICAgYzAtMy43OTcsMy4wNzgtNi44NzUsNi44NzUtNi44NzVoMzYuMjVDMzgwLjY3Miw0ODguODgsMzgzLjc1LDQ5MS45NTgsMzgzLjc1LDQ5NS43NTVMMzgzLjc1LDQ5NS43NTV6IgogICAgICAgICAgIGlkPSJwYXRoNDkiIC8+PHBhdGgKICAgICAgICAgICBmaWxsPSIjMzMzMzMzIgogICAgICAgICAgIGQ9Ik0zNTguNjI1LDQ3MC43NTVjMy43OTcsMCw2Ljg3NSwzLjA3OCw2Ljg3NSw2Ljg3NXYzNi4yNWMwLDMuNzk3LTMuMDc4LDYuODc1LTYuODc1LDYuODc1bDAsMCAgICAgYy0zLjc5NywwLTYuODc1LTMuMDc4LTYuODc1LTYuODc1di0zNi4yNUMzNTEuNzUsNDczLjgzMywzNTQuODI4LDQ3MC43NTUsMzU4LjYyNSw0NzAuNzU1TDM1OC42MjUsNDcwLjc1NXoiCiAgICAgICAgICAgaWQ9InBhdGg1MSIgLz48L2c+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"corsix-th,hospital,role,playing\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"com.corsixth.CorsixTH.desktop\"\nLABEL oc.launch=\"corsix-th.corsix-th\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"corsix-th\"\nLABEL oc.displayname=\"corsix-th\"\nLABEL oc.path=\"/usr/games/corsix-th\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"corsix-th\"\nENV APPBIN \"/usr/games/corsix-th\"\nENV APP \"/usr/games/corsix-th\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/corsix-th/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/corsix-th/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/corsix-th/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/corsix-th/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cuda,cuda nvidia\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cuda\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cuda\"\nLABEL oc.name=\"cuda\"\nLABEL oc.displayname=\"cuda\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cuda\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cuda\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cuda/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cuda/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cuda/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f cuda.d -t cuda .\n
"},{"location":"applications/cuda/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect cuda > cuda.json\ndocker image save cuda -o cuda.tar\nctr -n k8s.io images import cuda.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @cuda.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git cuda-demo-suite-12-0 libglu1-mesa libxi6 libxinerama1 libxmu6 libglu1-mesa mesa-utils freeglut3 x11-xserver-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cudademo,cuda nvidia\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cudademo\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cudademo -- cd /usr/local/cuda/extras/demo_suite\"\nLABEL oc.name=\"cudademo\"\nLABEL oc.displayname=\"cuda demo\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cudademo\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cudademo -- cd /usr/local/cuda/extras/demo_suite\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cudademo/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cudademo/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cudademo/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cudademo/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal dbus-x11 git cuda libnvidia-cfg1-525 libnvidia-common-525 libnvidia-compute-525 libnvidia-decode-525 libnvidia-encode-525 libnvidia-extra-525 libnvidia-fbc1-525 git libglu1-mesa libxi6 libxinerama1 libxmu6 libglu1-mesa mesa-utils freeglut3 x11-xserver-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"nvidia.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9InN2ZzIiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMzUxLjQ2cHgiDQoJIGhlaWdodD0iMjU4Ljc4NXB4IiB2aWV3Qm94PSIzNS4xODggMzEuNTEyIDM1MS40NiAyNTguNzg1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDM1LjE4OCAzMS41MTIgMzUxLjQ2IDI1OC43ODUiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHRpdGxlICBpZD0idGl0bGU0Ij5nZW5lcmF0ZWQgYnkgcHN0b2VkaXQgdmVyc2lvbjozLjQ0IGZyb20gTlZCYWRnZV8yRC5lcHM8L3RpdGxlPg0KPHBhdGggaWQ9InBhdGgxNyIgZD0iTTM4NC4xOTUsMjgyLjEwOWMwLDMuNzcxLTIuNzY5LDYuMzAyLTYuMDQ3LDYuMzAydi0wLjAyM2MtMy4zNzEsMC4wMjMtNi4wODktMi41MDgtNi4wODktNi4yNzgNCgljMC0zLjc2OSwyLjcxOC02LjI5Myw2LjA4OS02LjI5M0MzODEuNDI3LDI3NS44MTYsMzg0LjE5NSwyNzguMzQsMzg0LjE5NSwyODIuMTA5eiBNMzg2LjY0OCwyODIuMTA5YzAtNS4xNzUtNC4wMi04LjE3OS04LjUtOC4xNzkNCgljLTQuNTExLDAtOC41MzEsMy4wMDQtOC41MzEsOC4xNzljMCw1LjE3Miw0LjAyMSw4LjE4OCw4LjUzMSw4LjE4OEMzODIuNjI5LDI5MC4yOTcsMzg2LjY0OCwyODcuMjgxLDM4Ni42NDgsMjgyLjEwOQ0KCSBNMzc2LjczOCwyODIuODAxaDAuOTFsMi4xMDksMy43MDNoMi4zMTZsLTIuMzM2LTMuODU5YzEuMjA3LTAuMDg2LDIuMi0wLjY2MSwyLjItMi4yODZjMC0yLjAxOS0xLjM5Mi0yLjY2OC0zLjc1LTIuNjY4aC0zLjQxMQ0KCXY4LjgxM2gxLjk2MVYyODIuODAxIE0zNzYuNzM4LDI4MS4zMDl2LTIuMTIyaDEuMzY0YzAuNzQyLDAsMS43NTMsMC4wNiwxLjc1MywwLjk2NWMwLDAuOTg1LTAuNTIzLDEuMTU3LTEuMzk4LDEuMTU3SDM3Ni43MzgiLz4NCjxwYXRoIGlkPSJwYXRoMTkiIGQ9Ik0zMjkuNDA2LDIzNy4wMjdsMTAuNTk4LDI4Ljk5M0gzMTguNDhMMzI5LjQwNiwyMzcuMDI3eiBNMzE4LjA1NiwyMjUuNzM4bC0yNC40MjMsNjEuODhoMTcuMjQ2bDMuODYzLTEwLjkzNA0KCWgyOC45MDNsMy42NTYsMTAuOTM0aDE4LjcyMmwtMjQuNjA1LTYxLjg4OEwzMTguMDU2LDIyNS43Mzh6IE0yNjkuMDIzLDI4Ny42NDFoMTcuNDk3di02MS45MjJsLTE3LjUtMC4wMDRMMjY5LjAyMywyODcuNjQxeg0KCSBNMTQ3LjU1NiwyMjUuNzE1bC0xNC41OTgsNDkuMDc4bC0xMy45ODQtNDkuMDc0bC0xOC44NzktMC4wMDRsMTkuOTcyLDYxLjkyNmgyNS4yMDdsMjAuMTMzLTYxLjkyNkgxNDcuNTU2eiBNMjE4LjI4MSwyMzkuMTk5aDcuNTINCgljMTAuOTEsMCwxNy45NjYsNC44OTgsMTcuOTY2LDE3LjYwOWMwLDEyLjcxNC03LjA1NiwxNy42MTMtMTcuOTY2LDE3LjYxM2gtNy41MlYyMzkuMTk5eiBNMjAwLjkzMSwyMjUuNzE1djYxLjkyNmgyOC4zNjYNCgljMTUuMTEzLDAsMjAuMDQ4LTIuNTEyLDI1LjM4NC04LjE0OGMzLjc2OS0zLjk1Nyw2LjIwNy0xMi42NDEsNi4yMDctMjIuMTM0YzAtOC43MDctMi4wNjMtMTYuNDY4LTUuNjYtMjEuMzA0DQoJYy02LjQ4MS04LjY0OS0xNS44MTctMTAuMzQtMjkuNzUtMTAuMzRIMjAwLjkzMXogTTM1LjE4OCwyMjUuNjI5djYyLjAxMmgxNy42NDV2LTQ3LjA4NmwxMy42NzIsMC4wMDQNCgljNC41MjcsMCw3Ljc1NCwxLjEyOCw5LjkzNCwzLjQ1N2MyLjc2NSwyLjk0NSwzLjg5NCw3LjY5OSwzLjg5NCwxNi4zOTV2MjcuMjNoMTcuMDk4di0zNC4yNjJjMC0yNC40NTMtMTUuNTg2LTI3Ljc1LTMwLjgzNi0yNy43NQ0KCUgzNS4xODh6IE0xNzIuNzcxLDIyNS43MTVsMC4wMDcsNjEuOTI2aDE3LjQ4OXYtNjEuOTI2SDE3Mi43NzF6Ii8+DQo8cGF0aCBpZD0icGF0aDIxIiBmaWxsPSIjNzdCOTAwIiBkPSJNODIuMjExLDEwMi40MTRjMCwwLDIyLjUwNC0zMy4yMDMsNjcuNDM3LTM2LjYzOFY1My43Mw0KCWMtNDkuNzY5LDMuOTk3LTkyLjg2Nyw0Ni4xNDktOTIuODY3LDQ2LjE0OXMyNC40MSw3MC41NjUsOTIuODY3LDc3LjAyNnYtMTIuODA0Qzk5LjQxMSwxNTcuNzgxLDgyLjIxMSwxMDIuNDE0LDgyLjIxMSwxMDIuNDE0eg0KCSBNMTQ5LjY0OCwxMzguNjM3djExLjcyNmMtMzcuOTY4LTYuNzY5LTQ4LjUwNy00Ni4yMzctNDguNTA3LTQ2LjIzN3MxOC4yMy0yMC4xOTUsNDguNTA3LTIzLjQ3djEyLjg2Nw0KCWMtMC4wMjMsMC0wLjAzOS0wLjAwNy0wLjA1OC0wLjAwN2MtMTUuODkxLTEuOTA3LTI4LjMwNSwxMi45MzgtMjguMzA1LDEyLjkzOFMxMjguMjQzLDEzMS40NDUsMTQ5LjY0OCwxMzguNjM3IE0xNDkuNjQ4LDMxLjUxMg0KCVY1My43M2MxLjQ2MS0wLjExMiwyLjkyMi0wLjIwNyw0LjM5MS0wLjI1N2M1Ni41ODItMS45MDcsOTMuNDQ5LDQ2LjQwNiw5My40NDksNDYuNDA2cy00Mi4zNDMsNTEuNDg4LTg2LjQ1Nyw1MS40ODgNCgljLTQuMDQzLDAtNy44MjgtMC4zNzUtMTEuMzgzLTEuMDA1djEzLjczOWMzLjA0LDAuMzg2LDYuMTkyLDAuNjEzLDkuNDgxLDAuNjEzYzQxLjA1MSwwLDcwLjczOC0yMC45NjUsOTkuNDg0LTQ1Ljc3OA0KCWM0Ljc2NiwzLjgxNywyNC4yNzgsMTMuMTAzLDI4LjI4OSwxNy4xNjhjLTI3LjMzMiwyMi44ODMtOTEuMDMxLDQxLjMyOS0xMjcuMTQ0LDQxLjMyOWMtMy40ODEsMC02LjgyNC0wLjIxMS0xMC4xMS0wLjUyOHYxOS4zMDYNCgloMTU2LjAzMlYzMS41MTJIMTQ5LjY0OHogTTE0OS42NDgsODAuNjU2VjY1Ljc3N2MxLjQ0Ni0wLjEwMSwyLjkwMy0wLjE3OSw0LjM5MS0wLjIyNmM0MC42ODgtMS4yNzgsNjcuMzgyLDM0Ljk2NSw2Ny4zODIsMzQuOTY1DQoJcy0yOC44MzIsNDAuMDQzLTU5Ljc0Niw0MC4wNDNjLTQuNDQ5LDAtOC40MzgtMC43MTUtMTIuMDI4LTEuOTIyVjkzLjUyM2MxNS44NCwxLjkxNCwxOS4wMjgsOC45MTEsMjguNTUxLDI0Ljc4NmwyMS4xOC0xNy44NTkNCgljMCwwLTE1LjQ2MS0yMC4yNzctNDEuNTI0LTIwLjI3N0MxNTUuMDIxLDgwLjE3MiwxNTIuMzEsODAuMzcxLDE0OS42NDgsODAuNjU2Ii8+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"cudadev,cuda nvidia dev\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.cudadev\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=cudadev\"\nLABEL oc.name=\"cudadev\"\nLABEL oc.displayname=\"cuda developper\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"cudadev\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=cudadev\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nRUN cd /usr/local/cuda && git clone https://github.com/NVIDIA/cuda-samples.git && chmod 777 cuda-samples && cd cuda-samples && chmod -R 777 * \nRUN echo \"export PATH=/usr/local/cuda-12.0/bin${PATH:+:${PATH}}\" > /cuda.sh\nRUN echo \"export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}\" >> /cuda.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/cudadev/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/cudadev/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/cudadev/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/cudadev/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update dia dia-lang\nLABEL oc.icon=\"circle_dia.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk0MyIgeD0iLS4xMTk3NCIgeT0iLS4wOTgzNTciIHdpZHRoPSIxLjIzOTUiIGhlaWdodD0iMS4xOTY3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjE0NzUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTE3NCIgeDE9IjMwLjA1NSIgeDI9IjMwLjA1NSIgeTE9IjU3Ljg2MyIgeTI9IjYuNjI0IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjIwMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFmMWYxZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1MjUyNTIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyMTM3NSIgeD0iLS4wMzA3MiIgeT0iLS4wMzA3MiIgd2lkdGg9IjEuMDYxNCIgaGVpZ2h0PSIxLjA2MTQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzY4Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEzNzUpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgZmlsbCBtYXJrZXJzIi8+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDExNzQpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zMDQzIDAgMCAxLjMwNDMgMiAyKSI+CiAgPGcgb3BhY2l0eT0iLjEiPgogICA8cGF0aCBkPSJtMTYuNSAxMWgydjEuOTk2aC0yIiBmaWxsPSIjMDAwMDAwIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zMDQzIDAgMCAxLjMwNDMgMiAuNjk1NjUpIj4KICA8cGF0aCBkPSJtMTUgMTF2M2gxdjFoLTJ2M2gydjE0aC0ydjNoMnYwLjg3N2gtMWwyIDMuMTIzIDItMy4xMjNoLTF2LTAuODc3aDljNS41NCAwIDEwLTQuNDYgMTAtMTBzLTQuNDYtMTAtMTAtMTBoLTl2LTFoMXYtM3ptMyA3aDljMy44NzggMCA3IDMuMTIyIDcgN3MtMy4xMjIgNy03IDdoLTl6bTcgMi01IDloMTB6bTAgMy42IDEuODAxIDMuNGgtMy42MDIiIGZpbGw9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmaWx0ZXI5NDMpIiBvcGFjaXR5PSIuNSIvPgogIDxwYXRoIGQ9Im0yNCAxOS01IDloMTBtLTMuMi0yaC0zLjZsMS44LTMuNCIgZmlsbD0iI2ZmOTQwOSIvPgogPC9nPgogPHBhdGggZD0ibTIwLjI2MSAxMy43Mzl2My45MTNoMS4zMDQzdjEuMzA0M2gtMi42MDg3djMuOTEzaDIuNjA4N3YxOC4yNjFoLTIuNjA4N3YzLjkxM2gyLjYwODd2MS4xNDM5aC0xLjMwNDNsMi42MDg3IDQuMDczNSAyLjYwODctNC4wNzM1aC0xLjMwNDN2LTEuMTQzOWgxMS43MzljNy4yMjYxIDAgMTMuMDQzLTUuODE3NCAxMy4wNDMtMTMuMDQzcy01LjgxNzQtMTMuMDQzLTEzLjA0My0xMy4wNDNoLTExLjczOXYtMS4zMDQzaDEuMzA0M3YtMy45MTN6bTMuOTEzIDkuMTMwNGgxMS43MzljNS4wNTgzIDAgOS4xMzA0IDQuMDcyMiA5LjEzMDQgOS4xMzA0cy00LjA3MjIgOS4xMzA0LTkuMTMwNCA5LjEzMDRoLTExLjczOXoiIGZpbGw9IiNmOWY5ZjkiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"dia\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"dia.desktop\"\nLABEL oc.launch=\"dia-gnome.Dia-gnome\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Dia\"\nLABEL oc.displayname=\"Dia\"\nLABEL oc.path=\"/usr/bin/dia\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-dia-diagram;\"\nLABEL oc.fileextensions=\"dia\"\nLABEL oc.legacyfileextensions=\"dia\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Dia\"\nENV APPBIN \"/usr/bin/dia\"\nENV APP \"/usr/bin/dia\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/dia/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/dia/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/dia/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f Dia.d -t Dia .\n
"},{"location":"applications/dia/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect Dia > Dia.json\ndocker image save Dia -o Dia.tar\nctr -n k8s.io images import Dia.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @Dia.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends chocolate-doom doom-wad-shareware prboom-plus freedoom prboom-plus && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"doom.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzgyMzA1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzhhMjgwNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0yNCA5Yy04LjI4NCAwLTE1IDYuNzE2LTE1IDE1czYuNzE2IDE1IDE1IDE1IDE1LTYuNzE2IDE1LTE1LTYuNzE2LTE1LTE1LTE1em0wIDJjMi4zMDggMCA0LjQ2NSAwLjYwMiA2LjM0NCAxLjY1NmwtNi4zNDQgNC40MDYtNi4zNDQtNC40MDZjMS44NzktMS4wNTUgNC4wNC0xLjY1NiA2LjM0NC0xLjY1NnptLTcuMDk0IDIuMTI1Yy0wLjI0NCAwLjE1OS0wLjQ4NiAwLjMyNS0wLjcxOSAwLjUgMC4yMzMtMC4xNzUgMC40NzQtMC4zNCAwLjcxOS0wLjV6bTE0LjE4OCAwYzAuMjQ0IDAuMTYgMC40ODYgMC4zMjUgMC43MTkgMC41LTAuMjMzLTAuMTc1LTAuNDc1LTAuMzQxLTAuNzE5LTAuNXptLTE0LjIxOSAxLjM3NSA1LjQwNiAzLjc1LTMuMzc1IDIuMzQ0em0xNC4yNSAwLTIuMDMxIDYuMDk0LTMuMzc1LTIuMzQ0em0tMTYuMjUgMC4yNSAyLjM0NCA3LjAzLTYuMDYgNC4yMTljLTAuMS0wLjY1LTAuMTU2LTEuMzIyLTAuMTU2LTIgMC0zLjYyMiAxLjQ4NS02Ljg5MyAzLjg3NS05LjI1em0xOC4yNSAwYzIuMzkgMi4zNTcgMy44NzUgNS42MjggMy44NzUgOS4yNSAwIDAuNjc4LTAuMDU2IDEuMzUtMC4xNTYgMmwtNi4wNi00LjIxOSAyLjM0NC03LjAzem0tOS4xMjUgNC43MTlsNC40MzggMy4wOTQtMS40NjkgNC40MzhoLTUuOTM4bC0xLjQ2OS00LjQzOHptLTYuMTI1IDQuMjUgMS4wOTQgMy4yODFoLTUuODEzem0xMi4yNSAwIDQuNzE5IDMuMjgxaC01LjgxM3ptLTE4Ljk2OSAyLjMxM2MwLjA4IDAuNTEzIDAuMjA1IDEuMDEgMC4zNDQgMS41IDAuMTE0IDAuNDA1IDAuMjU1IDAuOCAwLjQwNiAxLjE4OC0wLjE1Mi0wLjM4OS0wLjI5Mi0wLjc4Mi0wLjQwNi0xLjE4OC0wLjEzOC0wLjQ5LTAuMjY0LTAuOTg5LTAuMzQ0LTEuNXptMjUuNjg4IDBjLTAuMDggMC41MTEtMC4yMDYgMS4wMS0wLjM0NCAxLjUtMC4xMTQgMC40MDYtMC4yNTUgMC43OTktMC40MDYgMS4xODggMC4xNTEtMC4zODggMC4yOTItMC43ODMgMC40MDYtMS4xODggMC4xMzktMC40OTEgMC4yNjQtMC45ODcgMC4zNDQtMS41em0tMjQuODQ0IDIuOTY5aDcuNjI1bDIuNjI1IDcuODc1YzAuMjM0IDAuMDMxIDAuNDggMC4wNDIgMC43MTkgMC4wNjMtMC4yNDItMC4wMTktMC40ODEtMC4wMzEtMC43MTktMC4wNjMtNC42NDgtMC42MjMtOC41MDYtMy42ODktMTAuMjUtNy44NzV6bTkuNzE5IDBoNC41NjNsLTIuMjgxIDYuODc1LTIuMjgxLTYuODc1em02LjY1NiAwaDcuNjI1Yy0xLjc0NCA0LjE4Ni01LjYwMiA3LjI1Mi0xMC4yNSA3Ljg3NS0wLjIzOCAwLjAzMi0wLjQ3NyAwLjA0NC0wLjcxOSAwLjA2MyAwLjIzOS0wLjAyMSAwLjQ4NS0wLjAzMSAwLjcxOS0wLjA2M3oiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8cGF0aCBkPSJtMjQgOGMtOC4yODQgMC0xNSA2LjcxNi0xNSAxNXM2LjcxNiAxNSAxNSAxNSAxNS02LjcxNiAxNS0xNS02LjcxNi0xNS0xNS0xNXptMCAyYzIuMzA4IDAgNC40NjUgMC42MDIgNi4zNDQgMS42NTZsLTYuMzQ0IDQuNDA2LTYuMzQ0LTQuNDA2YzEuODc5LTEuMDU1IDQuMDQtMS42NTYgNi4zNDQtMS42NTZ6bS03LjA5NCAyLjEyNWMtMC4yNDQgMC4xNTktMC40ODYgMC4zMjUtMC43MTkgMC41IDAuMjMzLTAuMTc1IDAuNDc0LTAuMzQgMC43MTktMC41em0xNC4xODggMGMwLjI0NCAwLjE2IDAuNDg2IDAuMzI1IDAuNzE5IDAuNS0wLjIzMy0wLjE3NS0wLjQ3NS0wLjM0MS0wLjcxOS0wLjV6bS0xNC4yMTkgMS4zNzUgNS40MDYgMy43NS0zLjM3NSAyLjM0NHptMTQuMjUgMC0yLjAzMSA2LjA5NC0zLjM3NS0yLjM0NHptLTE2LjI1IDAuMjUgMi4zNDQgNy4wMy02LjA2IDQuMjE5Yy0wLjEtMC42NS0wLjE1Ni0xLjMyMi0wLjE1Ni0yIDAtMy42MjIgMS40ODUtNi44OTMgMy44NzUtOS4yNXptMTguMjUgMGMyLjM5IDIuMzU3IDMuODc1IDUuNjI4IDMuODc1IDkuMjUgMCAwLjY3OC0wLjA1NiAxLjM1LTAuMTU2IDJsLTYuMDYtNC4yMTkgMi4zNDQtNy4wM3ptLTkuMTI1IDQuNzE5bDQuNDM4IDMuMDk0LTEuNDY5IDQuNDM4aC01LjkzOGwtMS40NjktNC40Mzh6bS02LjEyNSA0LjI1IDEuMDk0IDMuMjgxaC01LjgxM3ptMTIuMjUgMCA0LjcxOSAzLjI4MWgtNS44MTN6bS0xOC45NjkgMi4zMTNjMC4wOCAwLjUxMyAwLjIwNSAxLjAxIDAuMzQ0IDEuNSAwLjExNCAwLjQwNSAwLjI1NSAwLjggMC40MDYgMS4xODgtMC4xNTItMC4zODktMC4yOTItMC43ODItMC40MDYtMS4xODgtMC4xMzgtMC40OS0wLjI2NC0wLjk4OS0wLjM0NC0xLjV6bTI1LjY4OCAwYy0wLjA4IDAuNTExLTAuMjA2IDEuMDEtMC4zNDQgMS41LTAuMTE0IDAuNDA2LTAuMjU1IDAuNzk5LTAuNDA2IDEuMTg4IDAuMTUxLTAuMzg4IDAuMjkyLTAuNzgzIDAuNDA2LTEuMTg4IDAuMTM5LTAuNDkxIDAuMjY0LTAuOTg3IDAuMzQ0LTEuNXptLTI0Ljg0NCAyLjk2OWg3LjYyNWwyLjYyNSA3Ljg3NWMwLjIzNCAwLjAzMSAwLjQ4IDAuMDQyIDAuNzE5IDAuMDYzLTAuMjQyLTAuMDE5LTAuNDgxLTAuMDMxLTAuNzE5LTAuMDYzLTQuNjQ4LTAuNjIzLTguNTA2LTMuNjg5LTEwLjI1LTcuODc1em05LjcxOSAwaDQuNTYzbC0yLjI4MSA2Ljg3NS0yLjI4MS02Ljg3NXptNi42NTYgMGg3LjYyNWMtMS43NDQgNC4xODYtNS42MDIgNy4yNTItMTAuMjUgNy44NzUtMC4yMzggMC4wMzItMC40NzcgMC4wNDQtMC43MTkgMC4wNjMgMC4yMzktMC4wMjEgMC40ODUtMC4wMzEgMC43MTktMC4wNjN6IiBzdHlsZT0iZmlsbDojZGM3ZDQxIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"doom,doom\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"chocolate-doom.chocolate-doom\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"doom\"\nLABEL oc.displayname=\"Doom\"\nLABEL oc.path=\"/usr/games/doom\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"doom\"\nENV APPBIN \"/usr/games/doom\"\nENV APP \"/usr/games/doom\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/doom/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/doom/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/doom/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/doom/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_draw.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5LDAsMCwyLjE0MjksLTgyNi4zNiwtMTEwNy41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzg4OWU5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVlYTVmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC40MTk5OTg3NCIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjMyLjAyIiB4Mj0iMzIuMDIiIHkxPSIyLjA0MyIgeTI9IjYyLjA0NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmU4MDAyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZDAwNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIzMiIgeDI9IjMyIiB5MT0iNyIgeTI9IjU3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2Y1ZDIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQ1LjUwMSIgeDI9IjQ1LjUwMSIgeTE9IjcuMTA1NSIgeTI9IjI5Ljg5NiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmVmY2ViIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZjZjllNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NSIvPgogIDwvZmlsdGVyPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjM4LjA2NiIgY3k9IjI2LjE5MiIgcj0iMjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLS44IDNlLTggLTEuOTI2NWUtOCAtLjk0MDM0IDgwLjQ1MyAzOC42MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTM1M2MiIHN0b3Atb3BhY2l0eT0iLjQ4NTM4IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5MTkxOSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjExODAuMiIgeDI9IjExODAuMiIgeTE9IjY4OC41MyIgeTI9IjY1OC4xMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNjA2MDUgMCAwIC42MDY2OCAtNjkwLjg3IC0zODIuOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmN2IzZCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMTRlNGUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMTA1NyIgeDI9IjEwNTciIHkxPSItMTA3My42IiB5Mj0iLTExMjEuNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNDk5OTkgMCAwIC0uNSAtNDkxLjk5IC01MTMuODIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkMDQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWM0YTAwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjExNjIuNiIgeDI9IjExNjIuNiIgeTE9IjkwMS4xNiIgeTI9Ijg4Ny40MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMzNDksMCwwLDEuMjU2OSwtMTUyMy43LC0xMDg3LjcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMWI4MTgiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYTY0IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImoiIHg9Ii0uMDc5NzUzIiB5PSItLjA5NzQ3NiIgd2lkdGg9IjEuMTU5NSIgaGVpZ2h0PSIxLjE5NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43MzEwNjYyNSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9Im0iIHg9Ii0uMDYiIHk9Ii0uMDYiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzk5OTk5OTkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJsIiB4PSItLjA2MDAzMSIgeT0iLS4wNTk5NjkiIHdpZHRoPSIxLjEyMDEiIGhlaWdodD0iMS4xMTk5IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjUwMDI1NTI1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9InVybCgjZykiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbC1vcGFjaXR5PSIwIi8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZikiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zNyAyNy4wMWExMCAxMC4wMSAwIDAgMS0xMCAxMC4wMSAxMCAxMC4wMSAwIDAgMS0xMC0xMC4wMSAxMCAxMC4wMSAwIDAgMSAxMC0xMC4wMSAxMCAxMC4wMSAwIDAgMSAxMCAxMC4wMXoiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCBkPSJtMzcgMjcuMDFhMTAgMTAuMDEgMCAwIDEtMTAgMTAuMDEgMTAgMTAuMDEgMCAwIDEtMTAtMTAuMDEgMTAgMTAuMDEgMCAwIDEgMTAtMTAuMDEgMTAgMTAuMDEgMCAwIDEgMTAgMTAuMDF6IiBmaWxsPSJ1cmwoI2kpIi8+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICA8cGF0aCBkPSJtMzIgMzloMTZ2LTE2aC0xNnoiIGZpbHRlcj0idXJsKCNtKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPHBhdGggZD0ibTMyIDM5aDE2di0xNmgtMTZ6IiBmaWxsPSJ1cmwoI2gpIi8+CiAgPHBhdGggZD0ibTM5IDQ1aC0yMmwxMS0xOHoiIGZpbHRlcj0idXJsKCNqKSIgb3BhY2l0eT0iLjI1IiBzdHJva2U9IiNjOTljMDAiLz4KICA8cGF0aCBkPSJtMzkgNDVoLTIybDExLTE4eiIgZmlsbD0idXJsKCNhKSIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMSkiIGZpbGw9IiM5MmUyODUiIHN0cm9rZT0iIzE4YTMwMyI+CiAgPHJlY3QgeD0iMTUuNSIgeT0iNDMuNSIgd2lkdGg9IjMiIGhlaWdodD0iMyIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgeD0iMzcuNSIgeT0iNDMuNDk3IiB3aWR0aD0iMyIgaGVpZ2h0PSIzLjAwMyIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgeD0iMjYuNSIgeT0iMjUuNSIgd2lkdGg9IjMiIGhlaWdodD0iMy4wMDMiIG9wYWNpdHk9Ii43NSIvPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"draw,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-draw.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-draw\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--draw\"\nLABEL oc.name=\"draw\"\nLABEL oc.displayname=\"Draw\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opendocument.graphics-flat-xml;application/vnd.oasis.opendocument.graphics-template;application/vnd.sun.xml.draw;application/vnd.sun.xml.draw.template;application/vnd.visio;application/x-wpg;application/vnd.ms-publisher;image/x-freehand;application/x-pagemaker;\"\nLABEL oc.fileextensions=\"odp;otg\"\nLABEL oc.legacyfileextensions=\"odp;otg\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"draw\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--draw\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/draw/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/draw/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/draw/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/draw/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_drawio.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iQ2FsY3VsYXRvciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTQzNSIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjUyMC4zMiIgeDI9IjUyMC4zMiIgeTE9Ii0xMzguNDYiIHkyPSIxNDg0LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2MzYzMyAwIDAgLjA2MzYzMyAtLjU2NzYxIC0uNTM4OTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRhNjQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmI3YzM4IiBvZmZzZXQ9Ii4zNTE1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmI3YzM4IiBvZmZzZXQ9Ii40NDk3NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZjM0ZjE3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzYzMyAwIDAgLjA2MzYzMyAtLjU2NzYxIC0uNTM4OTcpIiBkPSJtOTgzLjI1IDUxMS4zNWMwLTcuOTUtMC4yLTE1Ljg1LTAuNS0yMy41NXEtOC0xODAuMTUtMTM3LjU1LTMwOS44NWMtOTIuMDUtOTItMjAzLjItMTM4LjA1LTMzMy40LTEzOC4wNS0xMzAuMTUgMC0yNDEuMzUgNDYuMDUtMzMzLjM1IDEzOC4wNS05Mi4wNSA5Mi0xMzguMSAyMDMuMi0xMzguMSAzMzMuNCAwIDEzMC4xNSA0Ni4wNSAyNDEuMzUgMTM4LjEgMzMzLjM1IDg2LjE1IDg2LjMgMTg5LjM1IDEzMi4xNSAzMDkuMTUgMTM3LjYgOCAwLjMgMTYgMC41IDI0LjIgMC41IDEzMC4yIDAgMjQxLjM1LTQ2LjEgMzMzLjQtMTM4LjEgOTItOTIgMTM4LjA1LTIwMy4yIDEzOC4wNS0zMzMuMzV6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiLz4KIDxwYXRoIGQ9Im02MiAzMmMwLTAuNTA1ODgtMC4wMTI3My0xLjAwODYtMC4wMzE4Mi0xLjQ5ODZxLTAuNTA5MDYtMTEuNDY0LTguNzUyNy0xOS43MTdjLTUuODU3NC01Ljg1NDMtMTIuOTMtOC43ODQ2LTIxLjIxNS04Ljc4NDYtOC4yODE5IDAtMTUuMzU4IDIuOTMwMy0yMS4yMTIgOC43ODQ2LTUuODU3NCA1Ljg1NDMtOC43ODc3IDEyLjkzLTguNzg3NyAyMS4yMTUgMCA4LjI4MTkgMi45MzAzIDE1LjM1OCA4Ljc4NzcgMjEuMjEyIDUuNDgyIDUuNDkxNSAxMi4wNDkgOC40MDkxIDE5LjY3MiA4Ljc1NTkgMC41MDkwNyAwLjAxOTA5IDEuMDE4MSAwLjAzMTgyIDEuNTM5OSAwLjAzMTgyIDguMjg1IDAgMTUuMzU4LTIuOTMzNSAyMS4yMTUtOC43ODc3IDUuODU0My01Ljg1NDMgOC43ODQ2LTEyLjkzIDguNzg0Ni0yMS4yMTJ6IiBmaWxsPSJ1cmwoI2EpIiBzdHJva2Utd2lkdGg9Ii45OTc5NiIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNTg4IDAgMCAxLjA1ODggLTEuODgyNCAtLjMzNTkyKSIgZmlsbD0iI2ZmZiI+CiAgPHJlY3QgeD0iMjUiIHk9IjE1IiB3aWR0aD0iMTQiIGhlaWdodD0iMTEuOCIgcng9IjMiIHJ5PSIzIi8+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxLjU5OTUpIj4KICAgPHJlY3QgeD0iMTUiIHk9IjMyLjY2NCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjExLjgiIHJ4PSIzIiByeT0iMyIvPgogICA8cmVjdCB4PSIzNSIgeT0iMzIuNjc5IiB3aWR0aD0iMTQiIGhlaWdodD0iMTEuOCIgcng9IjMiIHJ5PSIzIi8+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KC41OTgxMyAwIDAgLjgxMjMyIDEzLjM2IDQuNTQ1NSkiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyLjg2OTMiPgogICA8cGF0aCBkPSJtMjYuNDUxIDI1Ljc3NC05LjU4ODYgMTIuNDUyIi8+CiAgIDxwYXRoIGQ9Im0zNS44NzcgMjUuNzc0IDkuNTg4NiAxMi40NTIiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"drawio\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"drawio.desktop\"\nLABEL oc.launch=\"draw.io.draw.io\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"drawio\"\nLABEL oc.displayname=\"draw.io\"\nLABEL oc.path=\"/opt/drawio/drawio\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.jgraph.mxfile;application/vnd.visio;\"\nLABEL oc.fileextensions=\"drawio\"\nLABEL oc.legacyfileextensions=\"drawio\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"drawio\"\nENV APPBIN \"/opt/drawio/drawio\"\nENV APP \"/opt/drawio/drawio\"\nRUN apt-get update && curl -Ls 'https://github.com/jgraph/drawio-desktop/releases/download/v20.3.0/drawio-amd64-20.3.0.deb' -o /tmp/drawio-amd64.deb && apt-get install --yes --no-install-recommends /tmp/drawio-amd64.deb && rm /tmp/drawio-amd64.deb && rm -rf /var/lib/apt/lists/*\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/drawio/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/drawio/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/drawio/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/drawio/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN # curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -\nRUN echo \"deb [arch=$(dpkg --print-architecture)] https://packages.microsoft.com/repos/edge stable main\" > /etc/apt/sources.list.d/edge.list\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends microsoft-edge-stable && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_microsoft-edge.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MzIiIHgxPSIxMS43ODgiIHgyPSI1Mi43NDkiIHkxPSIyNS4xMDYiIHkyPSIyNS4xMDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMjAyIDAgMCAxLjAyMDIgLS45MjE0NiAtLjY2MzU1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDBiZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVmZGU1NiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTQwIiB4MT0iMTEuODA0IiB4Mj0iMzAuNzQzIiB5MT0iMzYuMjU0IiB5Mj0iMzYuMjU0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDIwMiAwIDAgMS4wMjAyIC0uOTIxNDYgLS42NjM1NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAwNzhkNCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMDhkZGMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0OCIgeDE9IjIxLjE4MiIgeDI9IjQ5LjcxMiIgeTE9IjQwLjI0MyIgeTI9IjQwLjI0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAyMDIgMCAwIDEuMDIwMiAtLjkyMTQ2IC0uNjYzNTUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwYjRlOTAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMGQ1NTlkIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk4MC02IiB4PSItLjE1NzE3IiB5PSItLjA4MjI2NSIgd2lkdGg9IjEuMzE0MyIgaGVpZ2h0PSIxLjE2NDUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTUxNTE0OCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjk2OS03IiB4PSItLjA3OTQyMSIgeT0iLS4xNjg3IiB3aWR0aD0iMS4xNTg4IiBoZWlnaHQ9IjEuMzM3NCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44NjA1MzI0NyIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjkwOC01IiB4PSItLjEwOCIgeT0iLS4xMDgiIHdpZHRoPSIxLjIxNiIgaGVpZ2h0PSIxLjIxNiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS44ODA1MTkyIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDA4LjI1IiB4Mj0iNDA3Ljk0IiB5MT0iNTQ3LjYiIHkyPSI0OTguODkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4zMjc2LDAsMCwxLjMyNzYsLTUxMC42NCwtNjYzLjUyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44ODk3MjQ0OSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPHBhdGggZD0ibTMxLjk5OCAxMi4yNDhjLTExLjQyNi0wLjAwMTEtMjAuNzMyIDkuMTcyOC0yMC44OTMgMjAuNTk2IDAuMDA2My0wLjQ4MzIyIDAuMDYzODgtMC45NjA3IDAuMTQ0NTMtMS40MzU1LTAuMDc0NjggMC40ODk0NC0wLjEyNjk1IDAuOTc4MzctMC4xMjY5NSAxLjQ2MDktMC4wMjgyNiAzLjE1NTYgMC42NDY4MiA2LjI3NjcgMS45NzY2IDkuMTM4NyA0LjQ5ODMgOS41OTY1IDE1LjQ3MiAxNC4zMDUgMjUuNTI3IDEwLjk1My0wLjE4MTY4IDAuMDU3MjgtMC4zNzU5NyAwLjA5MjA0LTAuNTYyNSAwLjE0MDYyIDAuMTgyOTgtMC4wNDkxNyAwLjM4Mjk3LTAuMDk2NiAwLjU0MTAyLTAuMTQ2NDhsMC4yMTQ4NC0wLjA3MjI3YzQuNDk3NS0xLjU1NDYgOC4zMzE0LTQuNTkzNSAxMC44NzEtOC42MTcyIDAuMzYyNzMtMC41NzE0Mi0wLjI3NzQ2LTEuMjQ4Ni0wLjg2OTE0LTAuOTE5OTItMi4wMDI0IDEuOTcwMS01LjEwOCAyLjQzNzEtNy41ODAxIDIuNDQ5Mi03LjcyNDIgMC0xNC40NTMtNS45Mzg1LTE0LjQ1My0xMi43NTYgMC4wMjAxNC0xLjg2MTkgMS4wNDc5LTMuNTY2OSAyLjY4MzYtNC40NTcgMC41MDkyOS0wLjIzOTkyIDEuMzc3OC0wLjY3NTUyIDIuNTM1Mi0wLjY1NDMgMS42NTI5IDAuMDEyMDkgMy4yMDQ3IDAuNzk4NTQgNC4xOTM0IDIuMTIzIDAuNDQ5MTMgMC41OTk2IDAuNzUwMTYgMS4yODc3IDAuOTA4MiAyLjAxMTcgMC4wNDQxNyAxLjI4MDktMC4zMTMwMyAyLjQ3NjctMS4xMzg3IDMuNTU0Ny0wLjEzMjIyIDAuMTcxMzctMC41MzkwNiAwLjQwODA4LTAuNTM5MDYgMC45MjM4MyAwIDAuNDI1OTggMC4yNzY1NyAwLjgzNTMxIDAuNzY5NTMgMS4xNzk3IDIuMzQ3MyAxLjYzMjEgNi43NzM3IDEuNDE4IDYuNzg1MiAxLjQxOCAxLjczOTMtMC4wMDQyIDMuNDQ2LTAuNDc1MjcgNC45NDE0LTEuMzYzMyAzLjA2OTctMS43OTIyIDQuOTU5NS00LjE1MDkgNC45NjY4LTcuNzA1MSAwLjA0MjQzLTMuNjU3Ni0xLjMwNjQtNi4wOTA4LTEuODUxNi03LjE2OC0zLjQ1ODktNi43NjUxLTEwLjkyNi0xMC42NTQtMTkuMDQ1LTEwLjY1NHptNS4zOTQ1IDQxLjAyMWMtMC4wNTM2NyAwLjAxMDczLTAuMTA2MiAwLjAyMzE2LTAuMTYwMTYgMC4wMzMyIDAuMDUyODgtMC4wMTE0OCAwLjEwODA2LTAuMDIxNDUgMC4xNjAxNi0wLjAzMzJ6IiBmaWx0ZXI9InVybCgjZmlsdGVyOTA4LTUpIiBvcGFjaXR5PSIuMiIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0ibTQ4LjgyMyA0Mi41OTljLTIuMDAyNCAxLjk3MDEtNS4xMDg1IDIuNDM3Ny03LjU4MDYgMi40NDk5LTcuNzI0MiAwLTE0LjQ1My01LjkzOTMtMTQuNDUzLTEyLjc1NyAwLjAyMDE0LTEuODYxOSAxLjA0NjItMy41NjcyIDIuNjgxOS00LjQ1NzMtNi45ODY0IDAuMjkzNzgtOC43ODIgNy41NzMtOC43ODIgMTEuODM4IDAgMTIuMDU4IDExLjExNSAxMy4yODEgMTMuNTA5IDEzLjI4MSAxLjI5MTIgMCAzLjIzODYtMC4zNzUzOSA0LjQwNzMtMC43NDQyNGwwLjIxMzg0LTAuMDcxODFjNC40OTc1LTEuNTU0NiA4LjMzMTYtNC41OTM5IDEwLjg3MS04LjYxNzYgMC4zNjI3My0wLjU3MTQxLTAuMjc2NzItMS4yNDkyLTAuODY4NC0wLjkyMDUxeiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDk0OCkiIHN0cm9rZS13aWR0aD0iLjc0NjI4Ii8+CiA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Im0yNy43MzcgNTAuOTAzYy0xLjQ1NTktMC45MDM1NC0yLjcxNzctMi4wODc1LTMuNzExOS0zLjQ4MjktNC44MjQzLTYuNjA4Ny0xLjg5MzYtMTUuOTcgNS40NDctMTkuNTg1IDAuNTA5MjktMC4yMzk5MiAxLjM3OTMtMC42NzQwNiAyLjUzNjctMC42NTI4NCAxLjY1MjkgMC4wMTIwOSAzLjIwNDggMC43OTcyNCA0LjE5MzUgMi4xMjE3IDAuNjU5MTggMC44ODAwMSAxLjAyMjYgMS45NDYyIDEuMDM4MiAzLjA0NTUgMC0wLjAzNDI3IDMuOTkyNy0xMi45OTItMTMuMDU5LTEyLjk5Mi03LjE2NiAwLTEzLjA1OSA2Ljc5OTQtMTMuMDU5IDEyLjc2NS0wLjAyODI2IDMuMTU1NiAwLjY0NzAxIDYuMjc3OSAxLjk3NjggOS4xMzk4IDQuNDk4MyA5LjU5NjUgMTUuNDcxIDE0LjMwNSAyNS41MjYgMTAuOTUzLTMuNDQyNCAxLjA4NTItNy44MTQzIDAuNjA4MDYtMTAuODc1LTEuMzA1N3oiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5NDApIiBzdHJva2Utd2lkdGg9Ii43NDYyOCIvPgogPHBhdGggZD0ibTI0LjE2NCAyMC42MDJjLTYuNDgxMSAwLTEyIDQuNjc2MS0xMi45MTQgMTAuMDYyLTAuMDg0NiAwLjcxNjI5LTAuMTM0MTcgMS40NDI4LTAuMTQ0NTMgMi4xNzk3IDAuMDc4MzYtNS45NjM3IDYuMDA2OS0xMS40OTYgMTMuMDU5LTExLjQ5NiAwLjU3MTMyIDAgMy44MjkxIDAuMDU0NTMgNi44NTU1IDEuNjQyNiAyLjY2NzIgMS40MDA0IDQuMDY1OSAzLjgwODIgNS4wMzcxIDUuNDg0NCAwLjYyNzI0IDEuMTgzNCAwLjk3MDYyIDIuMzE5OSAxLjA0MSAzLjQwMDQgMC4wODE0NS0xLjI5NjUtMC4yNjk2MS0yLjY4NzQtMS4wNDMtNC4xNDY1LTAuOTcxMjQtMS42NzYyLTIuMzY3OS00LjA4NC01LjAzNTItNS40ODQ0LTMuMDI2NC0xLjU4ODEtNi4yODQyLTEuNjQyNi02Ljg1NTUtMS42NDI2eiIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjk2OS03KSIgb3BhY2l0eT0iLjM1IiBzdHJva2Utd2lkdGg9Ii43NDYyOCIvPgogPHBhdGggZD0ibTI0Ljc5NSAxOS4xOTFjLTEuMDgyOSAwLTIuMTMxOCAwLjE3MDg2LTMuMTQwNiAwLjQ1NTA4IDAuODE4ODItMC4xODQyOCAxLjY2MzQtMC4yODkwNiAyLjUyNzMtMC4yODkwNiAxMy4xMTEgMCAxMy43NzYgNy42NDI5IDEzLjM4NSAxMS4xOTkgMC4xODAxIDAuNTIwNiAwLjI3OTIyIDEuMDY5MyAwLjI4NzExIDEuNjI3IDAtMC4wMzQyNyAzLjk5MjgtMTIuOTkyLTEzLjA1OS0xMi45OTJ6bTYuMTc5NyA4LjEwMzVjLTAuNjQ0MjUgMC4xMzk2NC0xLjE2MDMgMC4zODAwNS0xLjUwMiAwLjU0MTAyLTcuMzQwNiAzLjYxNTUtMTAuMjcyIDEyLjk3NS01LjQ0NzMgMTkuNTg0IDAuOTk0MjMgMS4zOTU1IDIuMjU1IDIuNTgwOCAzLjcxMDkgMy40ODQ0bDAuMDE1NjMgMC4wMDU5YzMuMDYwMiAxLjkxMzcgNy40MzI2IDIuMzg5OSAxMC44NzUgMS4zMDQ3LTAuNDQ4MjggMC4xNDk0MS0wLjkwMDI5IDAuMjYzMi0xLjM1MTYgMC4zODA4NiAwLjY1NjY3LTAuMTUwMjggMS4zMTE5LTAuMzI5OSAxLjk2MjktMC41NDY4OC0zLjQ0MjQgMS4wODUyLTcuODEyOCAwLjYwOTA2LTEwLjg3My0xLjMwNDdsLTAuMDE1NjMtMC4wMDc4Yy0xLjQ1NTktMC45MDM1NC0yLjcxNjctMi4wODY5LTMuNzEwOS0zLjQ4MjQtNC44MjQzLTYuNjA4Ny0xLjg5NTMtMTUuOTcgNS40NDUzLTE5LjU4NiAwLjIyNDg5LTAuMTA1OTQgMC41MzEzNy0wLjI0NzI5IDAuODkwNjItMC4zNzMwNXoiIGZpbHRlcj0idXJsKCNmaWx0ZXI5ODAtNikiIG9wYWNpdHk9Ii4zNSIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KIDxwYXRoIGNsYXNzPSJjbHMtNSIgZD0ibTM1Ljk3IDM0Ljg3MmMtMC4xMzIyMiAwLjE3MTM3LTAuNTM4NjcgMC40MDgwMy0wLjUzODY3IDAuOTIzNzggMCAwLjQyNTk4IDAuMjc3NSAwLjgzNTY0IDAuNzcwNDYgMS4xOCAyLjM0NzMgMS42MzIxIDYuNzcyNiAxLjQxNjcgNi43ODQgMS40MTY3IDEuNzM5My0wLjAwNDIgMy40NDU2LTAuNDc0OCA0Ljk0MTEtMS4zNjI4IDMuMDY5Ny0xLjc5MjIgNC45NTk5LTQuMTUxNSA0Ljk2NzItNy43MDU3IDAuMDQyNDQtMy42NTc2LTEuMzA1OS02LjA4OTQtMS44NTExLTcuMTY2Ni0zLjQ1ODktNi43NjUxLTEwLjkyNS0xMC42NTYtMTkuMDQ0LTEwLjY1Ni0xMS40MjYtMC4wMDExLTIwLjczMyA5LjE3NDQtMjAuODk0IDIwLjU5NyAwLjA3ODM2LTUuOTYzNyA2LjAwNy0xMS40OTcgMTMuMDU5LTExLjQ5NyAwLjU3MTMyIDAgMy44Mjk1IDAuMDU1NDkgNi44NTU4IDEuNjQzNSAyLjY2NzIgMS40MDA0IDQuMDY0NSAzLjgwNzkgNS4wMzU4IDUuNDg0MSAxLjQxMTcgMi42NjMzIDEuNDcyNCA1LjEwOTQtMC4wODQ4OCA3LjE0MjZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50OTMyKSIgc3Ryb2tlLXdpZHRoPSIuNzQ2MjgiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"edge,web,browser,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"microsoft-edge.desktop\"\nLABEL oc.launch=\"microsoft-edge.Microsoft-edge\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"edge\"\nLABEL oc.displayname=\"Microsoft Edge\"\nLABEL oc.path=\"/usr/bin/microsoft-edge-stable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"edge\"\nENV APPBIN \"/usr/bin/microsoft-edge-stable\"\nENV APP \"/usr/bin/microsoft-edge-stable\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/edge/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/edge/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/edge/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/edge/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.elementary:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends io.elementary.terminal io.elementary.stylesheet && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"elementary.terminal,terminal,bash,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"io.elementary.terminal.desktop\"\nLABEL oc.launch=\"io.elementary.terminal.Io.elementary.terminal\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.elementary\"\nLABEL oc.name=\"elementary.terminal\"\nLABEL oc.displayname=\"elementary.terminal\"\nLABEL oc.path=\"/usr/bin/io.elementary.terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"elementary.terminal\"\nENV APPBIN \"/usr/bin/io.elementary.terminal\"\nENV APP \"/usr/bin/io.elementary.terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/elementary.terminal/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/elementary.terminal/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/elementary.terminal/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/elementary.terminal/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update eog\nLABEL oc.icon=\"circle_eog.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iUHJldmlldyIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkN2Q3ZDciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4wMzE4IiB5PSItLjA0MTQ3OCIgd2lkdGg9IjEuMDYzNiIgaGVpZ2h0PSIxLjA4MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNy4yMjIxNTUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzMTQ2NSIgeT0iLS4wNDIwNjMiIHdpZHRoPSIxLjA2MjkiIGhlaWdodD0iMS4wODQxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI2LjQyNjIxIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iNTE5LjIiIHgyPSI1MTkuMiIgeTE9IjEwMjQuOCIgeTI9IjQuOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk3MjQgMCAwIC45OTcxOSAuOTEwNzcgMS45NjI4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGQ0ZDRkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQxNDE0MSIgb2Zmc2V0PSIuMDE5NTUxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMTEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iNTM4LjU2IiB4Mj0iNTM4LjU2IiB5MT0iLTIxLjEzIiB5Mj0iOTY0LjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0NzkuMSIgeDI9IjQ4MC41OSIgeTE9Ii0yOC44NDEiIHkyPSI5NjQuMzciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xMTUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImkiIHgxPSI0NDguNzciIHgyPSI0ODEuNTgiIHkxPSI0MTguNCIgeTI9Ijc2NS44NCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMmM1YmUwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYzYTVmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI1MzguMDQiIHgyPSI1MzguMDQiIHkxPSIyNzguNjIiIHkyPSI2MDIuNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMmQ1N2NkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzUyOTRlZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCAtLjY3OCkiPgogIDxwYXRoIGQ9Im03OTcuNzEgMTM5LjEzcS02MC41MzMtNDYuNjE5LTEzMi40My03MS40NDktNzQuMjk1LTI1LjY3OC0xNTMuNzMtMjUuNjc4Yy0yNTkuODggMC00NzAuNTUgMjEwLjY2LTQ3MC41NSA0NzAuNTIgMCAyMzcuNzMgMTc2LjM2IDQzNC4xOCA0MDUuMzMgNDY1Ljk0IDExLjE2OSAxLjU0NTYgMjIuNDg4IDIuNzQyMyAzMy44NTYgMy40NDAzIDEwLjM3MSAwLjY0ODE3IDIwLjc5MyAxLjA5NjkgMzEuMzYzIDEuMDk2OSAyNTkuODMgMCA0NzAuNDUtMjEwLjY2IDQ3MC40NS00NzAuNDggMC0yMC41NDItMS4yOTY0LTQwLjgzNS0zLjgzOTQtNjAuNjI5LTIuOTQxOS0yMy4xMzUtNy43Mjg2LTQ1LjYyMi0xMy44NjItNjcuNTFxLTIwLjg0Mi03My41NDMtNjQuMDIzLTEzNi44Ni00Mi42ODItNjIuMzc0LTEwMi41Ny0xMDguMzl6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIxNS42NCIvPgogIDxwYXRoIGQ9Im03OTcuNzEgMTM5LjEzcS02MC41MzMtNDYuNjE5LTEzMi40My03MS40NDktNzQuMjk1LTI1LjY3OC0xNTMuNzMtMjUuNjc4Yy0yNTkuODggMC00NzAuNTUgMjEwLjY2LTQ3MC41NSA0NzAuNTIgMCAyMzcuNzMgMTc2LjM2IDQzNC4xOCA0MDUuMzMgNDY1Ljk0IDExLjE2OSAxLjU0NTYgMjIuNDg4IDIuNzQyMyAzMy44NTYgMy40NDAzIDEwLjM3MSAwLjY0ODE3IDIwLjc5MyAxLjA5NjkgMzEuMzYzIDEuMDk2OSAyNTkuODMgMCA0NzAuNDUtMjEwLjY2IDQ3MC40NS00NzAuNDggMC0yMC41NDItMS4yOTY0LTQwLjgzNS0zLjgzOTQtNjAuNjI5LTIuOTQxOS0yMy4xMzUtNy43Mjg2LTQ1LjYyMi0xMy44NjItNjcuNTFxLTIwLjg0Mi03My41NDMtNjQuMDIzLTEzNi44Ni00Mi42ODItNjIuMzc0LTEwMi41Ny0xMDguMzl6IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjE1LjY0Ii8+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjkzNTcxIDAgMCAuOTM1NzEgNDQuMTE2IDg3LjczMSkiIGZpbHRlcj0idXJsKCNnKSIgb3ZlcmZsb3c9InZpc2libGUiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgIDxnIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgICAgPHBhdGggZD0ibTc4OC4zMiA1ODAuNjZ2LTM2Ni41N2wtNDkwLjE3LTAuMDkydjM2Ni41N3oiIGZpbGw9IiMxZDFkMWIiIGZpbGwtb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgICAgPC9nPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im03NTcuNjggNjAyLjQgMC4wODYtMzIzLjY5LTQzOS4zNi0wLjA4NjEtMC4wODYxIDMyMy43N3oiIGZpbGw9InVybCgjZCkiIHN0cm9rZS13aWR0aD0iMTQuNjc1Ii8+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjkzNTcxIDAgMCAuOTM1NzEgNDQuMTE2IDg3LjczMSkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTc3Mi45OCA1NjAuNDJ2LTM2Ni42MmwtNDkwLjI0LTAuMDkydjM2Ni42MnptLTIwLjY5NS0yMC42OTQtNDQ4Ljg1LTAuMDkydi0zMjUuMjNsNDQ4Ljg1IDAuMDkyeiIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiLz4KICAgPC9nPgogIDwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTM1NzEgMCAwIC45MzU3MSA0NC4xMTYgODcuNzMxKSIgZmlsdGVyPSJ1cmwoI2gpIiBvdmVyZmxvdz0idmlzaWJsZSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgICA8cGF0aCBkPSJtNzYxLjI3IDY5Ny43OS0zOC4yNTctMzY0LjY0LTUwNi44MSA1My4yNDcgMzguMzQ5IDM2NC42NHoiIGZpbGw9IiMxZDFkMWIiIGZpbGwtb3BhY2l0eT0iLjMiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgICAgPC9nPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im0yMzcuMTYgNDQzLjg3IDMzLjgyMyAzMjEuOTcgNDU1LjAyLTQ3Ljc2NS0zMy45MDktMzIxLjk3eiIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlLXdpZHRoPSIxNC42NzUiLz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTM1NzEgMCAwIC45MzU3MSA0NC4xMTYgODcuNzMxKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8cGF0aCBkPSJtNzQwLjA1IDY4Mi44NC0zOC4yNjMtMzY0LjY5LTUwNi44OCA1My4yNTUgMzguMjYzIDM2NC42OXptLTU2Ljc1LTM0MS44OCAzNC4wMzEgMzIzLjM5LTQ2NS42OCA0OC45MzItMzQuMDMxLTMyMy4zOXoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiAgIDwvZz4KICA8L2c+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMTUuNjgzIDAgMCAxNS42ODMgOS42MzMzIDEwLjYzMykiIGQ9Im00NCAzNS40MzUtNC4yMDMxIDQuNjI3My0yLjc5My0wLjQzMzU5LTEuOTA4MiAyLjIzMjQtMy42MTcyLTAuNDA2MjUtMy40OTgtMi41OTU3LTQuNTkzOCAzLjc4NzEtMi4wMDk4LTIuMDQzLTQuNjM3MSAyLjM5NjUgMC40NzMgNC40NzIzIDI3Ljc4NC0yLjkxOTR6IiBmaWxsPSIjM2M2OGQ5IiBzdHJva2Utd2lkdGg9Ii45MzU3MSIvPgogPC9nPgogPGNpcmNsZSBjeD0iMzgiIGN5PSIzMS41IiByPSIyLjUiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgb3BhY2l0eT0iLjc1IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiA8cGF0aCBkPSJtNDQgMzUuNDM2LTQuMjAzMSA0LjYyNy0yLjc5My0wLjQzMzU5IDIuOTk2MSAxLjY0MjYgMy00LjI3MTV2MS43MTA5bDEtMy4yNzU0em0tNi45OTYxIDQuMTkzNC0xLjkwODIgMi4yMzI0LTMuNjE3Mi0wLjQwNjI1LTMuNDc4NS0yLjQ1NTEgMyA1IDItMiAyIDEgMi4wMDM5LTMuMzcxMXptLTkuMDIzNC0wLjc2OTUzLTQuNTkzOCAzLjc4NzEtMi4wMDk4LTIuMDQzIDEuOTc4NSA0LjM5NjUgNC42MjUtNi4xNDA2em0tNi42MDM1IDEuNzQ0MS00LjYzNjcgMi4zOTY1IDAuMTU4MiAxLjQ4NDQgMC4xMDE1Ni0wLjA2MDU0NyAxLjY0NDUtMS44NDc3IDAuMTAxNTYgMS4xMzQ4IDIuNjMwOS0zLjEwNzR6IiBvcGFjaXR5PSIuMDUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"eog,eog,image,gif,tiff,png,jpeg,bmp,tga,pcx,bitmap,jpg,pixmap\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.gnome.eog.desktop\"\nLABEL oc.launch=\"eog.Eog\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"eog\"\nLABEL oc.displayname=\"eog\"\nLABEL oc.path=\"/usr/bin/eog\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/gif;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-tga;image/x-xbitmap;image/jpeg;image/png;image/x-icon;image/x-xpixmap;image/x-xcursor;\"\nLABEL oc.fileextensions=\"ani;bmp;gif;ico;jpg;jpeg;pcx;png;pnm;ras;svg;tga;tif;tiff;wbmp;xbm;xpm\"\nLABEL oc.legacyfileextensions=\"ani;bmp;gif;ico;jpg;jpeg;pcx;png;pnm;ras;svg;tga;tif;tiff;wbmp;xbm;xpm\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"eog\"\nENV APPBIN \"/usr/bin/eog\"\nENV APP \"/usr/bin/eog\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/eog/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/eog/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/eog/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/eog/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update evince\nLABEL oc.icon=\"circle_acroread.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMjkuOTY0IiB4Mj0iMjkuOTY0IiB5MT0iMi42OTE0IiB5Mj0iNjEuOTk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC00LjczNTEgMCAwIDQuNzQxIDkzLjYxMSAtNDkwNC41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYzYxNDIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RjMmI0MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMiIgeDI9IjMyIiB5MT0iMiIgeTI9IjYyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNzE1OSA5LjIxOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYmU1ZTUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMTkuMjg5IiB4Mj0iMTkuMjg5IiB5MT0iMi43OTg4IiB5Mj0iMjcuNDQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNSAwIDAgMS41IC01NzUuNTcgLTc1My43NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5N2NmMSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMGJjZmEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZSIgeD0iLS4wMzcwOTYiIHk9Ii0uMDM0OTY2IiB3aWR0aD0iMS4wNzQyIiBoZWlnaHQ9IjEuMDY5OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC44NjQwNzc2MiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU0OTY0IiB5PSItLjAyNjc2NSIgd2lkdGg9IjEuMTA5OSIgaGVpZ2h0PSIxLjA1MzUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMjc0ODE5MzMiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mjc0NSAwIDAgLjA2Mjc0NSAtLjEyNTQ5IC0uMTI1NDkpIiBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzguMTIiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjkzOCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPHBhdGggZD0ibTM4LjU4OCAyLjY5MTRjLTE4LjIzMyAxNC45NTktMzAuMTE2IDE4Ljk5OS0zNS4xMzkgMTkuODUtMC42NDQzMiAxLjk4NDMtMS4wNzkzIDQuMDU1My0xLjI5MSA2LjIxODggMy4wMjA1LTAuNDE2OSAxMC4yNjctMS44MDY2IDE4LTYuNDU3IDEwLjA2OC02LjA1NTIgMjIuMTA1LTE3LjU1MSAyMi4xMDUtMTcuNTUxLTMuMjgyNyA2LjE4MjgtNC4zMDY3IDI4LjU4NS00LjM4MDkgNTYuNzEzIDAuMDY2NjEtMC4wMTI0NSAwLjEzNjg3LTAuMDIwMzQgMC4yMDMxMy0wLjAzMzIgMC41MDUyOS0wLjA5ODUxIDEuMDAzMy0wLjIxMDU0IDEuNDg2My0wLjMyODEyIDUuMTM1Ni0xLjI5MDMgOS42Njk5LTMuOTE2MyAxMy42NDMtNy44ODg3IDEuODY1Ny0xLjg2NTcgMy40Mjk3LTMuODU1OSA0LjcwMTItNS45Njg4LTEuNzY0Mi01Ljg1Ny0zLjE1MzctMTIuMjc1LTQuMzA0Ny0xOC4yNzMtMC45MjA0Ni02LjcwNjgtMC41NTAwMy0xMi44ODYgMC4xMDE1Ni0xNy42NTYtMC4xNjc5Mi0wLjE3NTE4LTAuMzIzMDYtMC4zNTYyNy0wLjQ5NjA5LTAuNTI5My00LjIzNC00LjIzNC05LjExNTUtNi45MjIyLTE0LjYyOS04LjA5NTd6bS0zNi41NzQgMjkuOTA0YzAuMDQwMzczIDIuMzQyOSAwLjMxMDU3IDQuNTkwMSAwLjgyNjE3IDYuNzM2MyA4LjQ2NTUgMC41Njc3MSAyMS4xNTcgOS41MTE1IDI3LjE5NyAyMi42MDcgMC4wNjM3MiAwLjAwMzcgMC4xMjU1OCAwLjAxMjI3IDAuMTg5NDUgMC4wMTU2M2gwLjAyNTM5YzAuNTQwMjUgMC4wMjg2IDEuMDU0NSAwLjA0NDkyIDEuNTU2NiAwLjA0NDkyaDAuMTkxNDFjMC42NTQ2OSAwIDEuMzAxOS0wLjAxOSAxLjkxMjEtMC4wNTA3OCAwLjE1ODktMC4wMDk1IDAuMzAxNTgtMC4wMTk3NyAwLjQ0MTQxLTAuMDI5MyAwLjQxMjM2LTAuMDI5NiAwLjgxNTc1LTAuMDc4NTggMS4yMjA3LTAuMTIzMDUtNC43MTMyLTEzLjc0MS0yNy4xMTQtMjkuMTgxLTMzLjU2MS0yOS4yMDF6IiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0zOC41ODggMi42OTE0Yy0xOC4yMzMgMTQuOTU5LTMwLjExNiAxOC45OTktMzUuMTM5IDE5Ljg1LTAuNjQ0MzIgMS45ODQzLTEuMDc5MyA0LjA1NTMtMS4yOTEgNi4yMTg4IDMuMDIwNS0wLjQxNjkgMTAuMjY3LTEuODA2NiAxOC02LjQ1NyAxMC4wNjgtNi4wNTUyIDIyLjEwNS0xNy41NTEgMjIuMTA1LTE3LjU1MS0zLjI4MjcgNi4xODI4LTQuMzA2NyAyOC41ODUtNC4zODA5IDU2LjcxMyAwLjA2NjYxLTAuMDEyNDUgMC4xMzY4Ny0wLjAyMDM0IDAuMjAzMTMtMC4wMzMyIDAuNTA1MjktMC4wOTg1MSAxLjAwMzMtMC4yMTA1NCAxLjQ4NjMtMC4zMjgxMiA1LjEzNTYtMS4yOTAzIDkuNjY5OS0zLjkxNjMgMTMuNjQzLTcuODg4NyAxLjg2NTctMS44NjU3IDMuNDI5Ny0zLjg1NTkgNC43MDEyLTUuOTY4OC0xLjc2NDItNS44NTctMy4xNTM3LTEyLjI3NS00LjMwNDctMTguMjczLTAuOTIwNDYtNi43MDY4LTAuNTUwMDMtMTIuODg2IDAuMTAxNTYtMTcuNjU2LTAuMTY3OTItMC4xNzUxOC0wLjMyMzA2LTAuMzU2MjctMC40OTYwOS0wLjUyOTMtNC4yMzQtNC4yMzQtOS4xMTU1LTYuOTIyMi0xNC42MjktOC4wOTU3em0tMzYuNTc0IDI5LjkwNGMwLjA0MDM3MyAyLjM0MjkgMC4zMTA1NyA0LjU5MDEgMC44MjYxNyA2LjczNjMgOC40NjU1IDAuNTY3NzEgMjEuMTU3IDkuNTExNSAyNy4xOTcgMjIuNjA3IDAuMDYzNzIgMC4wMDM3IDAuMTI1NTggMC4wMTIyNyAwLjE4OTQ1IDAuMDE1NjNoMC4wMjUzOWMwLjU0MDI1IDAuMDI4NiAxLjA1NDUgMC4wNDQ5MiAxLjU1NjYgMC4wNDQ5MmgwLjE5MTQxYzAuNjU0NjkgMCAxLjMwMTktMC4wMTkgMS45MTIxLTAuMDUwNzggMC4xNTg5LTAuMDA5NSAwLjMwMTU4LTAuMDE5NzcgMC40NDE0MS0wLjAyOTMgMC40MTIzNi0wLjAyOTYgMC44MTU3NS0wLjA3ODU4IDEuMjIwNy0wLjEyMzA1LTQuNzEzMi0xMy43NDEtMjcuMTE0LTI5LjE4MS0zMy41NjEtMjkuMjAxeiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYykiLz4KIDxwYXRoIGQ9Im0yNS4yODkgMi43OTg4YTMwIDMwIDAgMCAwLTEyIDUuNzU1OXYxOC44ODdsNi0zLjQ2NDggNiAzLjQ2NDh2LTI0LjY0M3oiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCBkPSJtMjUuMjg5IDIuNzk4OGEzMCAzMCAwIDAgMC0xMiA1Ljc1NTl2MTguODg3bDYtMy40NjQ4IDYgMy40NjQ4di0yNC42NDN6IiBmaWxsPSJ1cmwoI2EpIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"evince,evince,pdf,viewer\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Evince.desktop\"\nLABEL oc.launch=\"evince.Evince\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Evince\"\nLABEL oc.displayname=\"Evince\"\nLABEL oc.path=\"/usr/bin/evince\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/pdf;application/x-bzpdf;application/x-gzpdf;application/x-xzpdf;application/x-ext-pdf;application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps;application/x-ext-ps;application/x-ext-eps;application/x-dvi;application/x-bzdvi;application/x-gzdvi;application/x-ext-dvi;image/vnd.djvu;application/x-ext-djv;application/x-ext-djvu;image/tiff;application/x-cbr;application/x-cbz;application/x-cb7;application/x-cbt;application/x-ext-cbr;application/x-ext-cbz;application/x-ext-cb7;application/x-ext-cbt;application/oxps;application/vnd.ms-xpsdocument;\"\nLABEL oc.fileextensions=\"pdf;ps;dvi;eps;cbt;cbr;cb7;xps\"\nLABEL oc.legacyfileextensions=\"pdf;ps;dvi\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Evince\"\nENV APPBIN \"/usr/bin/evince\"\nENV APP \"/usr/bin/evince\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/evince/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/evince/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/evince/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/evince/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends evolution dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"evolution.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzlhYTI5YSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiNWJlYjUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSI2LjcwMyIgY3k9IjczLjYxNiIgcj0iNy4yMjgiIGdyYWRpZW50VHJhbnNmb3JtPSJzY2FsZSgxLjkwMjIgLjUyNTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgPC9yYWRpYWxHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjguNzgiIHgyPSI5Ljc2MiIgeTE9IjM3Ljc4NSIgeTI9IjMyLjIwMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjM5NDkgMCAwIC43ODEwNiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1vcGFjaXR5PSIuMTI5Ii8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMTEuMjMzIiB4Mj0iMjEuMTEyIiB5MT0iMTMuNjg2IiB5Mj0iMjQuMTMzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzcwOSAwIDAgMS40NDM4IDIuNDMxIC0uMTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlZGVkZWQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSI4LjkxNiIgeDI9IjkuODg2IiB5MT0iMzcuMTk3IiB5Mj0iNTIuMDkxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNDU0OCAwIDAgLjc2MiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjEwLjE4NCIgeDI9IjE1LjMxMSIgeTE9IjE1LjE0OCIgeTI9IjI5LjU2OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjgxOTMgMCAwIDEuMDI4MiAyLjg4IC4zNDMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkY2RjZGMiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI1LjgyNyIgeDI9IjEzLjQ2NyIgeTE9IjcuMjMxIiB5Mj0iMTcuODc3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTcwNiAwIDAgMS4xOTEgMi44OCAuMzQzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlZGVkZWQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzhjOGM4Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTEuNTczIiB4Mj0iMTguNDc1IiB5MT0iNC43NDYiIHkyPSIyNi4wMjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4zNDM1IDAgMCAxLjQxNzkgMi44OCAuMzE1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZTJlMmUyIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMi4wNjIiIHgyPSIzMC42IiB5MT0iMTUuMjU3IiB5Mj0iMTUuMjU3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzQzNSAwIDAgMS40MTc5IDIuODggLjMxNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjOTg5NjkwIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzY1NjQ2MCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTI2LjUgMzguN2ExMy43NSAzLjggMCAxIDEtMjcuNSAwIDEzLjc1IDMuOCAwIDEgMSAyNy41IDB6IiBjb2xvcj0iIzAwMCIgb3BhY2l0eT0iLjQ1NiIgdHJhbnNmb3JtPSJtYXRyaXgoMS44MDA2IDAgMCAxLjk3NDggMS4wODQgLTM4LjAxMykiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2MpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0idXJsKCNkKSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuODU3IiBkPSJNNi4zMzMgMTYuOTcydjI0LjUxaDM2Ljk3M2wtLjA2Mi0yNC4zOTJjLS4wMDMtMS4zNzgtMTEuODQ4LTE0LjY3OC0xNC4wMzMtMTQuNjc4SDIwLjY2Yy0yLjI5NyAwLTE0LjMyNiAxMy4yNjItMTQuMzI2IDE0LjU2eiIvPgogIDxwYXRoIGZpbGw9InVybCgjZSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuOTIzIDE2Ljc4N2MtLjM5OC0uNDMgMTEuODg3LTEzLjY5NCAxMy43NDQtMTMuNjk0aDguMzc2YzEuNzQ3IDAgMTQuMDM3IDEzLjEyOCAxMy40MjcgMTMuODg2TDMxLjYxIDMwLjQ3NGwtMTIuMzE1LS4zMTgtMTIuMzcyLTEzLjM3eiIvPgogIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjE0NiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTkuMDc4IDMwLjAxOGwtNy4zMzMtOC43NDYgMjQuODE4LTYuOTM2IDMuMDI5IDYuMjE2LTcuNDE2IDkuNDQiLz4KICA8cGF0aCBmaWxsLW9wYWNpdHk9Ii4xNDYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE4LjI5MiAyOS44MzZsLTcuNDgzLTguODEgMjQuNjQ4LTYuODkzIDMuMTc0IDYuMjcxLTcuMjQxIDkuNDA3Ii8+CiAgPHBhdGggZmlsbC1vcGFjaXR5PSIuMTQ2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOC43NzUgMjkuOTU3bC03LjY3NS04LjY2IDI0Ljk2OC03LjA2NSAzLjI4NiA2LjU5My03LjQ4IDkuMTA3Ii8+CiAgPHBhdGggZmlsbD0idXJsKCNmKSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTguNTk0IDMwLjQ0MWwtNy4zMzMtOC43NDYgMjQuNzEyLTYuODk0IDMuMTEgNi4zODgtNy4xMiA4Ljk4NiIvPgogIDxwYXRoIGZpbGw9InVybCgjZykiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwLjQ4OCAyOS4wNjRMNy4wOTIgNDAuMDM2bDEzLjkwOS05LjYwNGg5LjAxOGwxMi40MiA5LjQ4Mi0xMS44NjQtMTAuODVIMjAuNDg4eiIvPgogIDxwYXRoIGZpbGw9InVybCgjZykiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYuOTYzIDE2Ljg4NUwxOC40OCAzMS4yMDFsMS4wNjgtLjg1NEw2Ljk2NCAxNi44ODV6IiBjb2xvcj0iIzAwMCIvPgogIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNoKSIgc3Ryb2tlLXdpZHRoPSIuODU3IiBkPSJNNy4zMDggMTcuMTMxbC4wMyAyMy4yMTFoMzQuOTQ2bC0uMDYzLTIzLjA4NGMtLjAwMi0uNzUtMTEuMjE2LTEzLjc5OS0xMy4zODQtMTMuNzk5aC03Ljg5NWMtMi4yNTMgMC0xMy42MzUgMTIuODkyLTEzLjYzNCAxMy42NzJ6Ii8+CiAgPHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMjAuOTU3IDMwLjQ1M0w5LjAxNiAzOC43MjRsMi4yMTkuMDA2IDkuOTk4LTYuODY5IDguODIyLTEuNDIzLTkuMDk4LjAxNXptLTkuNTI5LTguNzgzbDEuMzI0IDEuNDExIDIyLjc5MS02Ljg4NCAyLjkxNSA1LjY4Mi42MTQtLjcxMi0zLjA2OS02LjM3OC0yNC41NzUgNi44ODF6Ii8+CiAgPHBhdGggZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTMuMzA4IDIzLjYzNmw2LjAyNiA2LjQ1NCAxLjE5Ny0xLjAyNiAxMC4wODcuMDQzLjgxMi43MjcgMy45NzUtNC43NDRjLTEuMTU0LTEuNDExLTIyLjA5Ny0xLjQ1NC0yMi4wOTctMS40NTR6Ii8+CiAgPHBhdGggZmlsbD0iI2IxYjFiMSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNDEuODEzIDE3Ljg0OGwtOS45NTIgMTIuNjMxLTEuMDY4LS44NTUgMTEuMDItMTEuNzc2eiIgY29sb3I9IiMwMDAiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"evolution,evolution,mail\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Evolution.desktop\"\nLABEL oc.launch=\"evolution.Evolution\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"evolution\"\nLABEL oc.displayname=\"Evolution\"\nLABEL oc.path=\"/usr/bin/evolution\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/calendar;text/x-vcard;text/directory;application/mbox;message/rfc822;x-scheme-handler/mailto;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"evolution\"\nENV APPBIN \"/usr/bin/evolution\"\nENV APP \"/usr/bin/evolution\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/evolution/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/evolution/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/evolution/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/evolution/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends file-roller && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_file-roller.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9Ijk5LjAzNiIgeDI9Ijk5LjAzNiIgeTE9Ii0uNTA0NzIiIHkyPSIxOTkuODQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC42ODY2IDAgMCA0LjY4NjYgNDIuODQgNzIuMTk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWNkNWI5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UyY2E4NyIgb2Zmc2V0PSIuNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDZhYTM3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjUwMCIgeDI9IjUwMCIgeTE9IjI1Mi4zNiIgeTI9IjgwNi4wMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAtNC44Mjk0IDExLjUxOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYmViZWIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wNTgyNTEiIHk9Ii0uMDI2MDUiIHdpZHRoPSIxLjExNjUiIGhlaWdodD0iMS4wNTIxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1LjU1NzI0MjIiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMDU5ODYzIi8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC05ODguMzYpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDY0MDEyIDAgMCAuMDY0MDEyIC0uNzQyMjYgOTg1Ljc0KSIgc3Ryb2tlLXdpZHRoPSIxNS42MjIiPgogICA8Y2lyY2xlIGN4PSI1MTEuNSIgY3k9IjU0MC44NiIgcj0iNDY4LjY2IiBjb2xvcj0iIzAwMDAwMCIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiLz4KICAgPGNpcmNsZSBjeD0iNTExLjUiIGN5PSI1NDAuODYiIHI9IjQ2OC42NiIgY29sb3I9IiMwMDAwMDAiIGZpbGw9InVybCgjYSkiLz4KICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgLTQuODI5NCAxMS41MTgpIiBkPSJtNjAyLjgzIDU3Mi42MmgtMi43NjU0di00OS43MzhoLTMxLjA4NnYtNDkuNzM4aC00OS43Mzh2LTQ5LjczOGg0OS43Mzh2LTQ5LjczOGgtNDkuNzM4di00OS43MzhoNDkuNzM4di00OS43MzhoLTYyLjE3MnY0OS43MzhoLTQ5LjczOHY0OS43MzhoNDkuNzM4djQ5LjczOGgtNDkuNzM4djQ5LjczOGg0OS43Mzh2NDkuNzM4aC04MC44MjR2NDkuNzM4aC0yLjc2NTRsLTI0LjY3NiAxNjQuNTEgMTE0LjQ4IDQ5LjA2NCAxMTQuNDgtNDkuMDY0em0tODkuODA1IDE1OS40Ni01OS42LTI1LjU0MyAxMi42MjYtODQuMThoOTMuOTQ2bDEyLjYyNiA4NC4xOHoiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iMTkuNDI1Ii8+CiAgIDxwYXRoIGlkPSJYTUxJRF8xMDczXyIgZD0ibTU5NS42NSA1NzEuOTRoLTIuNzU0NnYtNDkuNTQ0aC0zMC45NjV2LTQ5LjU0NGgtNDkuNTQ0di00OS41NDRoNDkuNTQ0di00OS41NDRoLTQ5LjU0NHYtNDkuNTQ0aDQ5LjU0NHYtNDkuNTQ0aC02MS45Mjl2NDkuNTQ0aC00OS41NDR2NDkuNTQ0aDQ5LjU0NHY0OS41NDRoLTQ5LjU0NHY0OS41NDRoNDkuNTQ0djQ5LjU0NGgtODAuNTA4djQ5LjU0NGgtMi43NTQ2bC0yNC41OCAxNjMuODcgMTE0LjA0IDQ4Ljg3MiAxMTQuMDQtNDguODcyem0tODkuNDU1IDE1OC44NC01OS4zNjctMjUuNDQzIDEyLjU3Ny04My44NTFoOTMuNTc5bDEyLjU3NyA4My44NTF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjE5LjM0OSIvPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"file-roller,zip,tar,gz,tgz,unzip,compress,7zip,7z,iso\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.gnome.FileRoller.desktop\"\nLABEL oc.launch=\"file-roller.File-roller\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"file-roller\"\nLABEL oc.displayname=\"file-roller\"\nLABEL oc.path=\"/usr/bin/file-roller\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-7z-compressed;application/gzip;application/gtar;application/tar;application/zip;application/x-compress;application/x-compressed;application/x-zip-compressed;multipart/x-zip;application/gnutar;application/x-lzx;application/lzx;application/x-gzip;application/x-gtar;application/x-bzip2;application/x-bzip;application/x-bzip2;\"\nLABEL oc.fileextensions=\"7z;7zip;Z;unzip;zip;tar;tgz;war;tar.gz;ar;bcz;cpio;ear;jar;iso;tar.Z;tar.gz;tar.lz;tar.lzma;tar.lzo;tar.xz\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"file-roller\"\nENV APPBIN \"/usr/bin/file-roller\"\nENV APP \"/usr/bin/file-roller\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/file-roller/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/file-roller/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/file-roller/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/file-roller/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends filelight && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"filelight.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnIGlkPSJzdmc0MzQwIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgd2lkdGg9IjQ4IiB2ZXJzaW9uPSIxLjEiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogPGRlZnMgaWQ9ImRlZnM0MzQyIj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NDIzMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQ4IC4wMDIyMSkiIHgyPSI0NyIgeDE9IjEiPgogICA8c3RvcCBpZD0ic3RvcDctNTAiIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU0ZTQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDktOTYiIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNDM0NSI+CiAgPHJkZjpSREY+CiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPgogICAgPGRjOnRpdGxlLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZyBpZD0iZzIxIj4KICA8cGF0aCBpZD0icGF0aDIzIiBzdHlsZT0ib3BhY2l0eTowLjAyIiBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIvPgogIDxwYXRoIGlkPSJwYXRoMjUiIHN0eWxlPSJvcGFjaXR5Oi4wNSIgZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6Ii8+CiAgPHBhdGggaWQ9InBhdGgyNyIgc3R5bGU9Im9wYWNpdHk6LjEiIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIvPgogPC9nPgogPHJlY3QgaWQ9InJlY3Q0MjI5IiBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDIzMSkiIHJ4PSI0IiB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiBoZWlnaHQ9IjQ2IiB3aWR0aD0iNDYiIHk9IjEiIHg9Ii00NyIvPgogPGcgaWQ9Imc1NyI+CiAgPGcgaWQ9Imc1OSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMTAwNC40KSI+CiAgIDxwYXRoIGlkPSJwYXRoNjEiIHN0eWxlPSJvcGFjaXR5Oi4xIiBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6Ii8+CiAgPC9nPgogPC9nPgogPHBhdGggaWQ9InBhdGgzNyIgc3R5bGU9ImZpbGwtb3BhY2l0eTowLjA5ODtmaWxsLXJ1bGU6ZXZlbm9kZCIgZD0ibTM5IDI0LjIwNWExNCAxNCAwIDAgMCAtNC4xIC0xMC4xMWwtOS45IDkuODk4IDEzLjE1NiA0Ljc4OWExNCAxNCAwIDAgMCAwLjg0MiAtNC41ODR6bS0xLjc4MSA2LjI0LTEyLjIxNy00LjQ0NXYxM2ExMyAxMyAwIDAgMCAxMi4yMTUgLTguNTU5bS00LjMxNi0xNy4zNDZhMTQgMTQgMCAwIDAgLTE2LjkgLTIuMjI1IDE0IDE0IDAgMCAwIC02LjUyMyAxNS43NDggMTQgMTQgMCAwIDAgMTMuNTIzIDEwLjM3N3YtMTRsOS45LTkuOXoiLz4KIDxwYXRoIGlkPSJwYXRoMzkiIHN0eWxlPSJmaWxsOiNlMzhjNTM7ZmlsbC1ydWxlOmV2ZW5vZGQiIGQ9Im0yMyAzNS45OTVhMTQgMTQgMCAwIDEgLTEzLjUyMyAtMTAuMzc3IDE0IDE0IDAgMCAxIDYuNTIzIC0xNS43NDcgMTQgMTQgMCAwIDEgMTYuOSAyLjIyNGwtOS45IDkuOSIvPgogPHBhdGggaWQ9InBhdGg0MSIgc3R5bGU9ImZpbGw6IzU5YTNjODtmaWxsLXJ1bGU6ZXZlbm9kZCIgZD0ibTM0LjkgMTMuMDk1YTE0IDE0IDAgMCAxIDMuMjU1IDE0LjY4OWwtMTMuMTU1LTQuNzg5Ii8+CiA8cGF0aCBpZD0icGF0aDQzIiBzdHlsZT0iZmlsbDojYThjZjM2O2ZpbGwtcnVsZTpldmVub2RkIiBkPSJtMzcuMjE1IDI5LjQ0MWExMyAxMyAwIDAgMSAtMTIuMjE1IDguNTU0di0xM3oiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"filelight,disk,space,file,system,usage,volume,storage\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.kde.filelight.desktop\"\nLABEL oc.launch=\"filelight.filelight\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"filelight\"\nLABEL oc.displayname=\"Filelight\"\nLABEL oc.path=\"/usr/bin/filelight\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"inode/directory;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"filelight\"\nENV APPBIN \"/usr/bin/filelight\"\nENV APP \"/usr/bin/filelight\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/filelight/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/filelight/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/filelight/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/filelight/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update filezilla\nLABEL oc.icon=\"circle_filezilla.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjQyIi8+PC9maWx0ZXI+PGZpbHRlciBpZD0iYyIgeD0iLS4wNiIgeT0iLS4wNiIgd2lkdGg9IjEuMTIiIGhlaWdodD0iMS4xMiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuNiIvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQwMC41NyIgeDI9IjQwMC41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE2My42NyAtMjM1LjkxKSBzY2FsZSgxLjQyODYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2UwMmQyZCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2Y3NTE1MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODI2LjM2IC0xMTA3LjUpIHNjYWxlKDIuMTQyOSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PHJlY3QgeD0iMzg4LjU3IiB5PSI1MDMuOCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeT0iMjAiIGZpbGw9InVybCgjYikiIHRyYW5zZm9ybT0ibWF0cml4KDEuNTAwMDggMCAwIDEuNTAwMDggLTU4MC44NSAtNzUzLjY5MykiIHN0cm9rZS13aWR0aD0iLjk2NiIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNCkgc2NhbGUoMS4xNjY3KSIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMTUiPjxwYXRoIGQ9Im0xNyAxMi01IDIxaDQuMWwyLjE1LTlIMjlsLTEwLjA3MSA4Ljk2MkwyMS41NjIgMzZsMS4zNDgtLjcwM2MyLjU1MS0xLjMwOSAzLjYyMS0uNTQzIDUuNTU1LS4wMDggMS44ODMuNTIgMy42NTYgMS4wNzggNy4zMjgtMS4wMzVsLS43My0zLjczNGMtNCAyLjg0OC01LjI3My4zMDktOC4xMjkuMjAzTDM1IDI0bDEtNEgxOS4ybC45OC00SDMxbDEtNCIvPjwvZz48cGF0aCBkPSJNMjMuODM0IDE4IDE4IDQyLjUwMWg0Ljc4NGwyLjUwOC0xMC41aDEyLjU0MmwtMTEuNzUgMTAuNDU2TDI5LjE1NiA0NmwxLjU3My0uODJjMi45NzYtMS41MjcgNC4yMjUtLjYzNCA2LjQ4MS0uMDEgMi4xOTcuNjA3IDQuMjY2IDEuMjU4IDguNTUtMS4yMDdsLS44NTItNC4zNTZjLTQuNjY3IDMuMzIyLTYuMTUyLjM2LTkuNDg0LjIzN0w0NC44MzQgMzJsMS4xNjctNC42NjdoLTE5LjZsMS4xNDMtNC42NjdoMTIuNjI0TDQxLjMzNCAxOCIgZmlsbD0iI2Y5ZjlmOSIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"filezilla,ftp,client\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"filezilla.desktop\"\nLABEL oc.launch=\"filezilla.Filezilla\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"filezilla\"\nLABEL oc.displayname=\"filezilla (alpine)\"\nLABEL oc.path=\"/usr/bin/filezilla\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"filezilla\"\nENV APPBIN \"/usr/bin/filezilla\"\nENV APP \"/usr/bin/filezilla\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/filezilla/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/filezilla/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/filezilla/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/filezilla/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.firefox-esr /composer/init.d/init.firefox-esr\nCOPY policies.json /usr/lib/firefox/distribution\nCOPY /ntlm_auth /usr/bin/ntlm_auth.desktop\nRUN chown root:root /usr/bin/ntlm_auth.desktop && chmod 111 /usr/bin/ntlm_auth.desktop\nRUN apk add --no-cache --update firefox-esr\nLABEL oc.icon=\"circle_firefox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IHgxPSIyODAiIHgyPSIyODAiIHkxPSIxNzIiIHkyPSIyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmFiZGI2IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JhYmRiNiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjbGlwUGF0aD4KICAgPGNpcmNsZSBjeD0iNjQiIGN5PSIyMzYiIHI9IjUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjMzU4NGU0IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiAgPC9jbGlwUGF0aD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI3MC43ODYiIHgyPSI2LjQ0NyIgeTE9IjEyLjM5MyIgeTI9Ijc0LjQ2OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAtLjAwNTQ2MTUgMjgwLjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4wNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZTg0NyIgb2Zmc2V0PSIuMTExIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjIyNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zNjgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuNDAxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ2MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41MzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UzMTU4NyIgb2Zmc2V0PSIuNzA1Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItNzkwNy4yIiBjeT0iLTg1MTUuMSIgcj0iODAuNzk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkNGYiIG9mZnNldD0iLjEyOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhYzMxIiBvZmZzZXQ9Ii4xODYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOWQxNyIgb2Zmc2V0PSIuMjQ3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjI4MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjNiIiBvZmZzZXQ9Ii40MDMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgb2Zmc2V0PSIuNDY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNTE1NmMiIG9mZnNldD0iLjcxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYjA4NzgiIG9mZnNldD0iLjc4MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTUwMDgwIiBvZmZzZXQ9Ii44NiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iLTc5MzYuNyIgY3k9Ii04NDgyLjEiIHI9IjgwLjc5NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOTYwZTE4IiBvZmZzZXQ9Ii4zIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNiMTE5MjciIHN0b3Atb3BhY2l0eT0iLjc0IiBvZmZzZXQ9Ii4zNTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RiMjkzZCIgc3RvcC1vcGFjaXR5PSIuMzQzIiBvZmZzZXQ9Ii40MzUiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1MzM0YiIgc3RvcC1vcGFjaXR5PSIuMDk0IiBvZmZzZXQ9Ii40OTciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9Ii41MyIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iLTc5MjciIGN5PSItODUzMy41IiByPSI1OC41MzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTMyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRjM2UiIG9mZnNldD0iLjI1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ZDEyIiBvZmZzZXQ9Ii41MDYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNTI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSItNzkzNy43IiBjeT0iLTg1MTguNCIgcj0iMjcuNjc2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUyMjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYjI3IiBvZmZzZXQ9Ii4xMjEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmYzgyYSIgb2Zmc2V0PSIuMjk1Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE5MzAiIG9mZnNldD0iLjUwMiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3ZTM3IiBvZmZzZXQ9Ii43MzIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNzEzOSIgb2Zmc2V0PSIuNzkyIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImgiIGN4PSItNzkxNiIgY3k9Ii04NTM2IiByPSIxMTguMDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTEzIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjQ1NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjM0IiBvZmZzZXQ9Ii42MjIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzY0NyIgb2Zmc2V0PSIuNzE2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlMzE1ODciIG9mZnNldD0iLjkwNCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iLTc5MjcuMiIgY3k9Ii04NTIyLjkiIHI9Ijg2LjQ5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDIyMjM0IC4yMTA3IC0uMTM4MjggLjAxNDYxMSAtOTkxLjg2IDIwNzMuNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmU4NDciIG9mZnNldD0iLjA2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjE2OCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zMDQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuMzU2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41NyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii43MzciLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iaiIgY3g9Ii03OTM4LjQiIGN5PSItODUwOC4yIiByPSI3My43MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4xMzciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTYzNCIgb2Zmc2V0PSIuNTkyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjM2NDciIG9mZnNldD0iLjY1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii45MDQiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iayIgY3g9Ii03OTE4LjkiIGN5PSItODUwMy45IiByPSI4MC42ODYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMDk0Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUxNDEiIG9mZnNldD0iLjIzMSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhZjFlIiBvZmZzZXQ9Ii41MDkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNjI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI3MC4wMTMiIHgyPSIxNS4yNjciIHkxPSIxMi4wNjEiIHkyPSI2Ni44MDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgLS4wMDU0NjE1IDI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgc3RvcC1vcGFjaXR5PSIuOCIgb2Zmc2V0PSIuMTY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjYzNCIgb2Zmc2V0PSIuMjY2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjIxNyIgb2Zmc2V0PSIuNDg5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIuNiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iOC40OTM3IiBjeT0iMjg3LjM0IiByPSIzLjY0NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOTYyIDAgLTI3Ljc1NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYyYTBlYSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNTg0ZTQiIG9mZnNldD0iLjU1MTY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxYTVmYjQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0yODAuMDcpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTY4MzYgMCAwIC45NjgzNiAuMjY3ODkgOC44Njc4KSI+CiAgIDxjaXJjbGUgY3g9IjMzOS4xMyIgY3k9IjI4NS42OSIgcj0iMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2Q1ZDNjZiIvPgogICA8ZyBzdHJva2Utd2lkdGg9Ii4yMTE3NSI+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTFsMC4wMDE1IDAuMDEzOGMtMC45Mjc5MS0yLjMxMzQtMi41MDE1LTMuMjQ2Mi0zLjc4NjYtNS4yNzczLTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zbDAuMDAzMi02ZS0zYy0yLjA2MTQgMS4yMDctMi43NjA5IDMuNDQxNC0yLjgyNTIgNC41NTkxYTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTIgMi40NTM2IDIuNDUzNiAwIDAgMC0wLjIxMTc1LTAuMTYwNTEgMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhoLTAuMDAzODFjLTAuMzI1MzUtMC40MTEzMS0wLjMwMjQ4LTEuNzcwOC0wLjI4Mzg1LTIuMDU0N2ExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDcxMTQ5IDAuNDMzODgtMC4wODA2NzggMC41MTI0NCAwIDZlLTMgLTAuMDAxMjcxIDAuMDExOS0wLjAwMTkwNiAwLjAxOGE3LjgyMTYgNy44MjE2IDAgMCAwLTAuMTMzMTkgMS4xMzE0djAuMDQyM2E4LjIwNzQgOC4yMDc0IDAgMCAwIDE2LjI5NSAxLjM4NzhjMC4wMTM3Ni0wLjEwNTg4IDAuMDI0OTktMC4yMTA3IDAuMDM3MjctMC4zMTc2M2E4LjQzOTkgOC40Mzk5IDAgMCAwLTAuNTMyMzUtNC4xMjI2em0tOS40NTkxIDYuNDI0MmMwLjAzODMyNyAwLjAxODQgMC4wNzQzMjYgMC4wMzgzIDAuMTEzNzEgMC4wNTU5bDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1em0xLjg4LTQuOTVtNi43NjYtMS4wNDQ4di04ZS0zbDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNhKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExdjhlLTNsMC4wMDE1IDllLTNhNy40MzI2IDcuNDMyNiAwIDAgMS0wLjI1NTM4IDUuNTM5MWMtMC45NDA2MSAyLjAxODItMy4yMTc0IDQuMDg2OC02Ljc4MTIgMy45ODYzLTMuODUwNy0wLjEwOTA2LTcuMjQyLTIuOTY2NS03Ljg3Ni02LjcwOS0wLjExNTQxLTAuNTkwMTYgMC0wLjg4OTM3IDAuMDU4MDIxLTEuMzY5YTYuMTE0NiA2LjExNDYgMCAwIDAtMC4xMzE5MiAxLjEzMjV2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6IiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTF2OGUtM2wwLjAwMTUgOWUtM2E3LjQzMjYgNy40MzI2IDAgMCAxLTAuMjU1MzggNS41MzkxYy0wLjk0MDYxIDIuMDE4Mi0zLjIxNzQgNC4wODY4LTYuNzgxMiAzLjk4NjMtMy44NTA3LTAuMTA5MDYtNy4yNDItMi45NjY1LTcuODc2LTYuNzA5LTAuMTE1NDEtMC41OTAxNiAwLTAuODg5MzcgMC4wNTgwMjEtMS4zNjlhNi4xMTQ2IDYuMTE0NiAwIDAgMC0wLjEzMTkyIDEuMTMyNXYwLjA0MjNhOC4yMDc0IDguMjA3NCAwIDAgMCAxNi4yOTUgMS4zODc4YzAuMDEzNzYtMC4xMDU4OCAwLjAyNDk5LTAuMjEwNyAwLjAzNzI3LTAuMzE3NjNhOC40Mzk5IDguNDM5OSAwIDAgMC0wLjUzMjM1LTQuMTIyNnoiIGZpbGw9InVybCgjYykiLz4KICAgIDxwYXRoIGQ9Im0xMi4wODIgMjg2LjcxYzAuMDE3NzkgMC4wMTI1IDAuMDM0MyAwLjAyNSAwLjA1MTAzIDAuMDM3NWE0LjQ2OCA0LjQ2OCAwIDAgMC0wLjc2MjMyLTAuOTk0MThjLTIuNTUwOC0yLjU1MTItMC42Njg1MS01LjUzMTctMC4zNTEwOS01LjY4MzFsMC4wMDMyLTVlLTNjLTIuMDYxNCAxLjIwNy0yLjc2MDkgMy40NDE0LTIuODI1MiA0LjU1OTEgMC4wOTU3MTMtN2UtMyAwLjE5MDU4LTAuMDE0NiAwLjI4ODQxLTAuMDE0NmE0LjE0MTkgNC4xNDE5IDAgMCAxIDMuNTk2IDIuMXoiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im04LjQ5MTIgMjg3LjIyYy0wLjAxMzU1MiAwLjIwNDEzLTAuNzM0NzkgMC45MDgyMS0wLjk4Njk5IDAuOTA4MjEtMi4zMzM3IDAtMi43MTI2IDEuNDExOC0yLjcxMjYgMS40MTE4IDAuMTAzMzQgMS4xODg4IDAuOTMxNzIgMi4xNjc5IDEuOTMzMSAyLjY4NTkgMC4wNDU3MzkgMC4wMjM3IDAuMDkyMTEzIDAuMDQ1MSAwLjEzODQ5IDAuMDY2MXEwLjEyMDQ5IDAuMDUzNCAwLjI0MDk4IDAuMDk4N2EzLjY0OTYgMy42NDk2IDAgMCAwIDEuMDY3OSAwLjIwNjA0YzQuMDkwNSAwLjE5MTg1IDQuODgyOC00Ljg5MTUgMS45MzEtNi4zNjY2YTIuODMzMyAyLjgzMzMgMCAwIDEgMS45Nzg4IDAuNDgwNDcgNC4xNDE5IDQuMTQxOSAwIDAgMC0zLjU5Ni0yLjFjLTAuMDk3NDA3IDAtMC4xOTI3IDhlLTMgLTAuMjg4NDEgMC4wMTQ2YTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTJjMC4xMjUxNSAwLjEwNTg3IDAuMjY2MzkgMC4yNDczMyAwLjU2MzkgMC41NDA2MSAwLjU1NjkxIDAuNTQ4NjUgMS45ODUyIDEuMTE3IDEuOTg4NCAxLjE4Mzd6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCBkPSJtNS41NTYzIDI4NS4yMmMwLjA2NjQ5MSAwLjA0MjMgMC4xMjEzNCAwLjA3OTIgMC4xNjk0IDAuMTEyNDRhMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhjMC4wNDAwMjItMWUtMyAxLjIzMDUtMC4wMjI0IDEuODI5MSAwLjM2Njc2eiIgZmlsbD0idXJsKCNnKSIvPgogICAgPHBhdGggZD0ibTAuMzQ0NzggMjg4Ljk5YzAuNjMzMzYgMy43NDI1IDQuMDI1MiA2LjYgNy44NzYgNi43MDkgMy41NjM4IDAuMTAwNzkgNS44NDA2LTEuOTY4IDYuNzgxMi0zLjk4NjNhNy40MzI2IDcuNDMyNiAwIDAgMCAwLjI1NTM4LTUuNTM5MXYtOGUtM2MwLTZlLTMgLTAuMDAxMy0wLjAxIDAtOGUtM2wwLjAwMTUgMC4wMTM4YzAuMjkxMTYgMS45MDA5LTAuNjc1NzEgMy43NDI1LTIuMTg3MiA0Ljk4NzlsLTAuMDA0NyAwLjAxMDZjLTIuOTQ1MSAyLjM5ODUtNS43NjM1IDEuNDQ3MS02LjMzNCAxLjA1ODhxLTAuMDU5NzE1LTAuMDI4Ni0wLjExOTQzLTAuMDU5NWMtMS43MTcxLTAuODIwNzYtMi40MjY1LTIuMzg1Mi0yLjI3NDUtMy43MjY5YTIuMTA3NiAyLjEwNzYgMCAwIDEtMS45NDQxLTEuMjIyOSAzLjA5NTQgMy4wOTU0IDAgMCAxIDMuMDE3My0wLjEyMTEzIDQuMDg2OSA0LjA4NjkgMCAwIDAgMy4wODE0IDAuMTIxMTNjLTAuMDAzMTgtMC4wNjY3LTEuNDMxNS0wLjYzNTI2LTEuOTg4NC0xLjE4MzctMC4yOTc1MS0wLjI5MzI4LTAuNDM4NzUtMC40MzQ1Mi0wLjU2MzktMC41NDA2MWEyLjQ1MzYgMi40NTM2IDAgMCAwLTAuMjExNzUtMC4xNjA1MWMtMC4wNDg3MDQtMC4wMzMyLTAuMTAzNTUtMC4wNjkyLTAuMTY5NC0wLjExMjQ0LTAuNTk4NjMtMC4zODkyLTEuNzg5MS0wLjM2NzgxLTEuODI4NS0wLjM2Njc1aC0wLjAwMzgxYy0wLjMyNTIzLTAuNDEyLTAuMzAyMzYtMS43NzE1LTAuMjgzNzMtMi4wNTU0YTEuNDY3IDEuNDY3IDAgMCAwLTAuMjc0MDEgMC4xNDU0NyA1Ljk3NjggNS45NzY4IDAgMCAwLTAuODAyMTIgMC42ODcxNCA3LjE2NjggNy4xNjY4IDAgMCAwLTAuNzcwMzYgMC45MTgzOHYxZS0zIC0xZS0zYTYuOTMxMyA2LjkzMTMgMCAwIDAtMS4xMDExIDIuNDg2NmMtMC4wMDQwMjMgMC4wMTY3LTAuMjk1NjEgMS4yOTE1LTAuMTUxODMgMS45NTI2eiIgZmlsbD0idXJsKCNoKSIvPgogICAgPHBhdGggZD0ibTExLjM3MSAyODUuNzZhNC40NjggNC40NjggMCAwIDEgMC43NjIzMiAwLjk5NTI0YzAuMDQ1MSAwLjAzNDEgMC4wODcyNCAwLjA2OCAwLjEyMzAzIDAuMTAwNzkgMS44NjA3IDEuNzE1MiAwLjg4NTc3IDQuMTM5OCAwLjgxMzE0IDQuMzEyNCAxLjUxMTUtMS4yNDUzIDIuNDc3NS0zLjA4NyAyLjE4NzItNC45ODc5LTAuOTI4MzMtMi4zMTQ1LTIuNTAxOS0zLjI0NzItMy43ODctNS4yNzg0LTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zIC0wLjMxNzQyIDAuMTUwNTUtMi4xOTk3IDMuMTMxIDAuMzUxNTEgNS42ODIyeiIgZmlsbD0idXJsKCNpKSIvPgogICAgPHBhdGggZD0ibTEyLjI1NSAyODYuODVjLTAuMDM1NzktMC4wMzI4LTAuMDc3OTItMC4wNjY3LTAuMTIzMDMtMC4xMDA4LTAuMDE2NzMtMC4wMTI1LTAuMDMzMjUtMC4wMjUtMC4wNTEwMy0wLjAzNzVhMi44MzMzIDIuODMzMyAwIDAgMC0xLjk3ODgtMC40ODA0N2MyLjk1MTkgMS40NzU5IDIuMTU5OSA2LjU1ODQtMS45MzEgNi4zNjY2YTMuNjQ5NiAzLjY0OTYgMCAwIDEtMS4wNjc5LTAuMjA2MDJxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM2MwLjU3MDQ3IDAuMzg5NDEgMy4zODgxIDEuMzQwOCA2LjMzNC0xLjA1ODhsMC4wMDQ3LTAuMDEwNmMwLjA3MzQ4LTAuMTcxNTIgMS4wNDg0LTIuNTk2Ny0wLjgxMzE0LTQuMzExM3oiIGZpbGw9InVybCgjaikiLz4KICAgIDxwYXRoIGQ9Im00Ljc5MTYgMjg5LjU0czAuMzc4ODMtMS40MTE4IDIuNzEyNi0xLjQxMThjMC4yNTIyIDAgMC45NzQwNy0wLjcwNDA4IDAuOTg2OTktMC45MDgyMWE0LjA4NjkgNC4wODY5IDAgMCAxLTMuMDgxNC0wLjEyMTEyIDMuMDk1NCAzLjA5NTQgMCAwIDAtMy4wMTczIDAuMTIxMTIgMi4xMDc2IDIuMTA3NiAwIDAgMCAxLjk0NDEgMS4yMjI5Yy0wLjE1MjA0IDEuMzQxOSAwLjU1NzM0IDIuOTA2MyAyLjI3NDUgMy43MjY5IDAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3NzMtMS44Mjk4LTEuNDk2OS0xLjkzMzEtMi42ODU3eiIgZmlsbD0idXJsKCNrKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExbDAuMDAxNSAwLjAxMzhjLTAuOTI3OTEtMi4zMTM0LTIuNTAxNS0zLjI0NjItMy43ODY2LTUuMjc3My0wLjA2NTAxLTAuMTAyNy0wLjEzMDAyLTAuMjA1NjEtMC4xOTMzMy0wLjMxNDI0LTAuMDM2MjEtMC4wNjItMC4wNjUyMi0wLjExNzk1LTAuMDkwNDItMC4xNjk0YTEuNDkzNSAxLjQ5MzUgMCAwIDEtMC4xMjIzOS0wLjMyNTA0IDAuMDIxMTc1IDAuMDIxMTc1IDAgMCAwLTAuMDE4NjMtMC4wMjEyIDAuMDI5MjIyIDAuMDI5MjIyIDAgMCAwLTAuMDE1NDYgMGMtMC4wMDExIDAtMC4wMDI4IDJlLTMgLTRlLTMgMmUtMyAtMC4wMDEzIDQuMmUtNCAtNGUtMyAyZS0zIC0wLjAwNTkgM2UtM2wwLjAwMzItNmUtM2MtMi4wNjE0IDEuMjA3LTIuNzYwOSAzLjQ0MTQtMi44MjUyIDQuNTU5MSAwLjA5NTcxMy03ZS0zIDAuMTkwNTgtMC4wMTQ2IDAuMjg4NDEtMC4wMTQ2YTQuMTQxOSA0LjE0MTkgMCAwIDEgMy41OTYgMi4xIDIuODMzMyAyLjgzMzMgMCAwIDAtMS45Nzg4LTAuNDgwNDdjMi45NTE5IDEuNDc1OSAyLjE1OTkgNi41NTg0LTEuOTMxIDYuMzY2NmEzLjY0OTYgMy42NDk2IDAgMCAxLTEuMDY4LTAuMjA1MDhxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1YzAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3OTUtMS44Mjk4LTEuNDk3MS0xLjkzMzEtMi42ODU5IDAgMCAwLjM3ODgzLTEuNDExOCAyLjcxMjYtMS40MTE4IDAuMjUyMiAwIDAuOTc0MDctMC43MDQwOCAwLjk4Njk5LTAuOTA4MjEtMC4wMDMxOC0wLjA2NjctMS40MzE1LTAuNjM1MjYtMS45ODg0LTEuMTgzNy0wLjI5NzUxLTAuMjkzMjgtMC40Mzg3NS0wLjQzNDUyLTAuNTYzOS0wLjU0MDYxYTIuNDUzNiAyLjQ1MzYgMCAwIDAtMC4yMTE3NS0wLjE2MDUxIDMuODA0OCAzLjgwNDggMCAwIDEtMC4wMjMwODEtMi4wMDYgNi4wNzg0IDYuMDc4NCAwIDAgMC0xLjk3NTUgMS41MjY4aC0wLjAwMzgxYy0wLjMyNTI2LTAuNDEyNjMtMC4zMDIzOS0xLjc3MjEtMC4yODM3NS0yLjA1NmExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDg0NzAyIDAuNDM4OTYtMC4wOTQ2NTQgMC41MTc3NHYwYTkuNTQ4OCA5LjU0ODggMCAwIDAtMC4xMjExMiAxLjE0NDF2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6bS0wLjgxNDIgMC40MjE2IDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNsKSIvPgogICA8L2c+CiAgIDxjaXJjbGUgY3g9Ii0xOS4zNDciIGN5PSIyOTQuNTMiIHI9IjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9IiNkNWQzY2YiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"firefox-esr,firefox,mozilla,web,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"firefox-esr.desktop\"\nLABEL oc.launch=\"Navigator.firefox-esr\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"firefox-esr\"\nLABEL oc.displayname=\"Firefox (esr alpine)\"\nLABEL oc.path=\"/usr/bin/firefox-esr\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"htm;html;xml;gif\"\nLABEL oc.legacyfileextensions=\"htm;html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"firefox-esr\"\nENV APPBIN \"/usr/bin/firefox-esr\"\nENV APP \"/usr/bin/firefox-esr\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/firefox-esr/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/firefox-esr/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/firefox-esr/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/firefox-esr/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update firefox krb5\nLABEL oc.icon=\"circle_firefox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IHgxPSIyODAiIHgyPSIyODAiIHkxPSIxNzIiIHkyPSIyMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmFiZGI2IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2JhYmRiNiIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjbGlwUGF0aD4KICAgPGNpcmNsZSBjeD0iNjQiIGN5PSIyMzYiIHI9IjUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSIjMzU4NGU0IiBzdHlsZT0icGFpbnQtb3JkZXI6bm9ybWFsIi8+CiAgPC9jbGlwUGF0aD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI3MC43ODYiIHgyPSI2LjQ0NyIgeTE9IjEyLjM5MyIgeTI9Ijc0LjQ2OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAtLjAwNTQ2MTUgMjgwLjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4wNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZTg0NyIgb2Zmc2V0PSIuMTExIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjIyNSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zNjgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuNDAxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ2MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41MzQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2UzMTU4NyIgb2Zmc2V0PSIuNzA1Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItNzkwNy4yIiBjeT0iLTg1MTUuMSIgcj0iODAuNzk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmJkNGYiIG9mZnNldD0iLjEyOSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhYzMxIiBvZmZzZXQ9Ii4xODYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOWQxNyIgb2Zmc2V0PSIuMjQ3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjI4MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjNiIiBvZmZzZXQ9Ii40MDMiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgb2Zmc2V0PSIuNDY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNTE1NmMiIG9mZnNldD0iLjcxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYjA4NzgiIG9mZnNldD0iLjc4MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTUwMDgwIiBvZmZzZXQ9Ii44NiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iLTc5MzYuNyIgY3k9Ii04NDgyLjEiIHI9IjgwLjc5NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOTYwZTE4IiBvZmZzZXQ9Ii4zIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNiMTE5MjciIHN0b3Atb3BhY2l0eT0iLjc0IiBvZmZzZXQ9Ii4zNTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2RiMjkzZCIgc3RvcC1vcGFjaXR5PSIuMzQzIiBvZmZzZXQ9Ii40MzUiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1MzM0YiIgc3RvcC1vcGFjaXR5PSIuMDk0IiBvZmZzZXQ9Ii40OTciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzc1MCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9Ii41MyIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iLTc5MjciIGN5PSItODUzMy41IiByPSI1OC41MzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTMyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRjM2UiIG9mZnNldD0iLjI1MiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ZDEyIiBvZmZzZXQ9Ii41MDYiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNTI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSItNzkzNy43IiBjeT0iLTg1MTguNCIgcj0iMjcuNjc2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4yMTE3NSAwIDAgLjIxMTc1IDE2ODguNyAyMDg1LjEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUyMjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZkYjI3IiBvZmZzZXQ9Ii4xMjEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmYzgyYSIgb2Zmc2V0PSIuMjk1Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE5MzAiIG9mZnNldD0iLjUwMiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY3ZTM3IiBvZmZzZXQ9Ii43MzIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNzEzOSIgb2Zmc2V0PSIuNzkyIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImgiIGN4PSItNzkxNiIgY3k9Ii04NTM2IiByPSIxMTguMDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMTEzIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjk4MGUiIG9mZnNldD0iLjQ1NiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY1NjM0IiBvZmZzZXQ9Ii42MjIiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmMzY0NyIgb2Zmc2V0PSIuNzE2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlMzE1ODciIG9mZnNldD0iLjkwNCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iLTc5MjcuMiIgY3k9Ii04NTIyLjkiIHI9Ijg2LjQ5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDIyMjM0IC4yMTA3IC0uMTM4MjggLjAxNDYxMSAtOTkxLjg2IDIwNzMuNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmU4NDciIG9mZnNldD0iLjA2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmM4MzAiIG9mZnNldD0iLjE2OCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmY5ODBlIiBvZmZzZXQ9Ii4zMDQiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOGIxNiIgb2Zmc2V0PSIuMzU2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjY3MmEiIG9mZnNldD0iLjQ1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmYzNjQ3IiBvZmZzZXQ9Ii41NyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii43MzciLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iaiIgY3g9Ii03OTM4LjQiIGN5PSItODUwOC4yIiByPSI3My43MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjExNzUgMCAwIC4yMTE3NSAxNjg4LjcgMjA4NS4xKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmNDRmIiBvZmZzZXQ9Ii4xMzciLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNDgiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTYzNCIgb2Zmc2V0PSIuNTkyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZjM2NDciIG9mZnNldD0iLjY1NSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTMxNTg3IiBvZmZzZXQ9Ii45MDQiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iayIgY3g9Ii03OTE4LjkiIGN5PSItODUwMy45IiByPSI4MC42ODYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgMTY4OC43IDIwODUuMSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgb2Zmc2V0PSIuMDk0Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmUxNDEiIG9mZnNldD0iLjIzMSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZhZjFlIiBvZmZzZXQ9Ii41MDkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTgwZSIgb2Zmc2V0PSIuNjI2Ii8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI3MC4wMTMiIHgyPSIxNS4yNjciIHkxPSIxMi4wNjEiIHkyPSI2Ni44MDYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjIxMTc1IDAgMCAuMjExNzUgLS4wMDU0NjE1IDI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZjQ0ZiIgc3RvcC1vcGFjaXR5PSIuOCIgb2Zmc2V0PSIuMTY3Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjYzNCIgb2Zmc2V0PSIuMjY2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iLjIxNyIgb2Zmc2V0PSIuNDg5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmY0NGYiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIuNiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iOC40OTM3IiBjeT0iMjg3LjM0IiByPSIzLjY0NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOTYyIDAgLTI3Ljc1NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzYyYTBlYSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzNTg0ZTQiIG9mZnNldD0iLjU1MTY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxYTVmYjQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0yODAuMDcpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTY4MzYgMCAwIC45NjgzNiAuMjY3ODkgOC44Njc4KSI+CiAgIDxjaXJjbGUgY3g9IjMzOS4xMyIgY3k9IjI4NS42OSIgcj0iMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgZmlsbD0iI2Q1ZDNjZiIvPgogICA8ZyBzdHJva2Utd2lkdGg9Ii4yMTE3NSI+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTFsMC4wMDE1IDAuMDEzOGMtMC45Mjc5MS0yLjMxMzQtMi41MDE1LTMuMjQ2Mi0zLjc4NjYtNS4yNzczLTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zbDAuMDAzMi02ZS0zYy0yLjA2MTQgMS4yMDctMi43NjA5IDMuNDQxNC0yLjgyNTIgNC41NTkxYTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTIgMi40NTM2IDIuNDUzNiAwIDAgMC0wLjIxMTc1LTAuMTYwNTEgMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhoLTAuMDAzODFjLTAuMzI1MzUtMC40MTEzMS0wLjMwMjQ4LTEuNzcwOC0wLjI4Mzg1LTIuMDU0N2ExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDcxMTQ5IDAuNDMzODgtMC4wODA2NzggMC41MTI0NCAwIDZlLTMgLTAuMDAxMjcxIDAuMDExOS0wLjAwMTkwNiAwLjAxOGE3LjgyMTYgNy44MjE2IDAgMCAwLTAuMTMzMTkgMS4xMzE0djAuMDQyM2E4LjIwNzQgOC4yMDc0IDAgMCAwIDE2LjI5NSAxLjM4NzhjMC4wMTM3Ni0wLjEwNTg4IDAuMDI0OTktMC4yMTA3IDAuMDM3MjctMC4zMTc2M2E4LjQzOTkgOC40Mzk5IDAgMCAwLTAuNTMyMzUtNC4xMjI2em0tOS40NTkxIDYuNDI0MmMwLjAzODMyNyAwLjAxODQgMC4wNzQzMjYgMC4wMzgzIDAuMTEzNzEgMC4wNTU5bDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1em0xLjg4LTQuOTVtNi43NjYtMS4wNDQ4di04ZS0zbDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNhKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExdjhlLTNsMC4wMDE1IDllLTNhNy40MzI2IDcuNDMyNiAwIDAgMS0wLjI1NTM4IDUuNTM5MWMtMC45NDA2MSAyLjAxODItMy4yMTc0IDQuMDg2OC02Ljc4MTIgMy45ODYzLTMuODUwNy0wLjEwOTA2LTcuMjQyLTIuOTY2NS03Ljg3Ni02LjcwOS0wLjExNTQxLTAuNTkwMTYgMC0wLjg4OTM3IDAuMDU4MDIxLTEuMzY5YTYuMTE0NiA2LjExNDYgMCAwIDAtMC4xMzE5MiAxLjEzMjV2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6IiBmaWxsPSJ1cmwoI2IpIi8+CiAgICA8cGF0aCBkPSJtMTYuMDcgMjg1Ljc1Yy0wLjM1NjU5LTAuODU4MDMtMS4wNzk5LTEuNzg0NC0xLjY0NjQtMi4wNzczYTguNTI2NSA4LjUyNjUgMCAwIDEgMC44MzExMyAyLjQ5MTF2OGUtM2wwLjAwMTUgOWUtM2E3LjQzMjYgNy40MzI2IDAgMCAxLTAuMjU1MzggNS41MzkxYy0wLjk0MDYxIDIuMDE4Mi0zLjIxNzQgNC4wODY4LTYuNzgxMiAzLjk4NjMtMy44NTA3LTAuMTA5MDYtNy4yNDItMi45NjY1LTcuODc2LTYuNzA5LTAuMTE1NDEtMC41OTAxNiAwLTAuODg5MzcgMC4wNTgwMjEtMS4zNjlhNi4xMTQ2IDYuMTE0NiAwIDAgMC0wLjEzMTkyIDEuMTMyNXYwLjA0MjNhOC4yMDc0IDguMjA3NCAwIDAgMCAxNi4yOTUgMS4zODc4YzAuMDEzNzYtMC4xMDU4OCAwLjAyNDk5LTAuMjEwNyAwLjAzNzI3LTAuMzE3NjNhOC40Mzk5IDguNDM5OSAwIDAgMC0wLjUzMjM1LTQuMTIyNnoiIGZpbGw9InVybCgjYykiLz4KICAgIDxwYXRoIGQ9Im0xMi4wODIgMjg2LjcxYzAuMDE3NzkgMC4wMTI1IDAuMDM0MyAwLjAyNSAwLjA1MTAzIDAuMDM3NWE0LjQ2OCA0LjQ2OCAwIDAgMC0wLjc2MjMyLTAuOTk0MThjLTIuNTUwOC0yLjU1MTItMC42Njg1MS01LjUzMTctMC4zNTEwOS01LjY4MzFsMC4wMDMyLTVlLTNjLTIuMDYxNCAxLjIwNy0yLjc2MDkgMy40NDE0LTIuODI1MiA0LjU1OTEgMC4wOTU3MTMtN2UtMyAwLjE5MDU4LTAuMDE0NiAwLjI4ODQxLTAuMDE0NmE0LjE0MTkgNC4xNDE5IDAgMCAxIDMuNTk2IDIuMXoiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im04LjQ5MTIgMjg3LjIyYy0wLjAxMzU1MiAwLjIwNDEzLTAuNzM0NzkgMC45MDgyMS0wLjk4Njk5IDAuOTA4MjEtMi4zMzM3IDAtMi43MTI2IDEuNDExOC0yLjcxMjYgMS40MTE4IDAuMTAzMzQgMS4xODg4IDAuOTMxNzIgMi4xNjc5IDEuOTMzMSAyLjY4NTkgMC4wNDU3MzkgMC4wMjM3IDAuMDkyMTEzIDAuMDQ1MSAwLjEzODQ5IDAuMDY2MXEwLjEyMDQ5IDAuMDUzNCAwLjI0MDk4IDAuMDk4N2EzLjY0OTYgMy42NDk2IDAgMCAwIDEuMDY3OSAwLjIwNjA0YzQuMDkwNSAwLjE5MTg1IDQuODgyOC00Ljg5MTUgMS45MzEtNi4zNjY2YTIuODMzMyAyLjgzMzMgMCAwIDEgMS45Nzg4IDAuNDgwNDcgNC4xNDE5IDQuMTQxOSAwIDAgMC0zLjU5Ni0yLjFjLTAuMDk3NDA3IDAtMC4xOTI3IDhlLTMgLTAuMjg4NDEgMC4wMTQ2YTQuMTA1MyA0LjEwNTMgMCAwIDAtMi4yNTg2IDAuODcwNTJjMC4xMjUxNSAwLjEwNTg3IDAuMjY2MzkgMC4yNDczMyAwLjU2MzkgMC41NDA2MSAwLjU1NjkxIDAuNTQ4NjUgMS45ODUyIDEuMTE3IDEuOTg4NCAxLjE4Mzd6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCBkPSJtNS41NTYzIDI4NS4yMmMwLjA2NjQ5MSAwLjA0MjMgMC4xMjEzNCAwLjA3OTIgMC4xNjk0IDAuMTEyNDRhMy44MDQ4IDMuODA0OCAwIDAgMS0wLjAyMzA4MS0yLjAwNiA2LjA3ODQgNi4wNzg0IDAgMCAwLTEuOTc1NSAxLjUyNjhjMC4wNDAwMjItMWUtMyAxLjIzMDUtMC4wMjI0IDEuODI5MSAwLjM2Njc2eiIgZmlsbD0idXJsKCNnKSIvPgogICAgPHBhdGggZD0ibTAuMzQ0NzggMjg4Ljk5YzAuNjMzMzYgMy43NDI1IDQuMDI1MiA2LjYgNy44NzYgNi43MDkgMy41NjM4IDAuMTAwNzkgNS44NDA2LTEuOTY4IDYuNzgxMi0zLjk4NjNhNy40MzI2IDcuNDMyNiAwIDAgMCAwLjI1NTM4LTUuNTM5MXYtOGUtM2MwLTZlLTMgLTAuMDAxMy0wLjAxIDAtOGUtM2wwLjAwMTUgMC4wMTM4YzAuMjkxMTYgMS45MDA5LTAuNjc1NzEgMy43NDI1LTIuMTg3MiA0Ljk4NzlsLTAuMDA0NyAwLjAxMDZjLTIuOTQ1MSAyLjM5ODUtNS43NjM1IDEuNDQ3MS02LjMzNCAxLjA1ODhxLTAuMDU5NzE1LTAuMDI4Ni0wLjExOTQzLTAuMDU5NWMtMS43MTcxLTAuODIwNzYtMi40MjY1LTIuMzg1Mi0yLjI3NDUtMy43MjY5YTIuMTA3NiAyLjEwNzYgMCAwIDEtMS45NDQxLTEuMjIyOSAzLjA5NTQgMy4wOTU0IDAgMCAxIDMuMDE3My0wLjEyMTEzIDQuMDg2OSA0LjA4NjkgMCAwIDAgMy4wODE0IDAuMTIxMTNjLTAuMDAzMTgtMC4wNjY3LTEuNDMxNS0wLjYzNTI2LTEuOTg4NC0xLjE4MzctMC4yOTc1MS0wLjI5MzI4LTAuNDM4NzUtMC40MzQ1Mi0wLjU2MzktMC41NDA2MWEyLjQ1MzYgMi40NTM2IDAgMCAwLTAuMjExNzUtMC4xNjA1MWMtMC4wNDg3MDQtMC4wMzMyLTAuMTAzNTUtMC4wNjkyLTAuMTY5NC0wLjExMjQ0LTAuNTk4NjMtMC4zODkyLTEuNzg5MS0wLjM2NzgxLTEuODI4NS0wLjM2Njc1aC0wLjAwMzgxYy0wLjMyNTIzLTAuNDEyLTAuMzAyMzYtMS43NzE1LTAuMjgzNzMtMi4wNTU0YTEuNDY3IDEuNDY3IDAgMCAwLTAuMjc0MDEgMC4xNDU0NyA1Ljk3NjggNS45NzY4IDAgMCAwLTAuODAyMTIgMC42ODcxNCA3LjE2NjggNy4xNjY4IDAgMCAwLTAuNzcwMzYgMC45MTgzOHYxZS0zIC0xZS0zYTYuOTMxMyA2LjkzMTMgMCAwIDAtMS4xMDExIDIuNDg2NmMtMC4wMDQwMjMgMC4wMTY3LTAuMjk1NjEgMS4yOTE1LTAuMTUxODMgMS45NTI2eiIgZmlsbD0idXJsKCNoKSIvPgogICAgPHBhdGggZD0ibTExLjM3MSAyODUuNzZhNC40NjggNC40NjggMCAwIDEgMC43NjIzMiAwLjk5NTI0YzAuMDQ1MSAwLjAzNDEgMC4wODcyNCAwLjA2OCAwLjEyMzAzIDAuMTAwNzkgMS44NjA3IDEuNzE1MiAwLjg4NTc3IDQuMTM5OCAwLjgxMzE0IDQuMzEyNCAxLjUxMTUtMS4yNDUzIDIuNDc3NS0zLjA4NyAyLjE4NzItNC45ODc5LTAuOTI4MzMtMi4zMTQ1LTIuNTAxOS0zLjI0NzItMy43ODctNS4yNzg0LTAuMDY1MDEtMC4xMDI3LTAuMTMwMDItMC4yMDU2MS0wLjE5MzMzLTAuMzE0MjQtMC4wMzYyMS0wLjA2Mi0wLjA2NTIyLTAuMTE3OTUtMC4wOTA0Mi0wLjE2OTRhMS40OTM1IDEuNDkzNSAwIDAgMS0wLjEyMjM5LTAuMzI1MDQgMC4wMjExNzUgMC4wMjExNzUgMCAwIDAtMC4wMTg2My0wLjAyMTIgMC4wMjkyMjIgMC4wMjkyMjIgMCAwIDAtMC4wMTU0NiAwYy0wLjAwMTEgMC0wLjAwMjggMmUtMyAtNGUtMyAyZS0zIC0wLjAwMTMgNC4yZS00IC00ZS0zIDJlLTMgLTAuMDA1OSAzZS0zIC0wLjMxNzQyIDAuMTUwNTUtMi4xOTk3IDMuMTMxIDAuMzUxNTEgNS42ODIyeiIgZmlsbD0idXJsKCNpKSIvPgogICAgPHBhdGggZD0ibTEyLjI1NSAyODYuODVjLTAuMDM1NzktMC4wMzI4LTAuMDc3OTItMC4wNjY3LTAuMTIzMDMtMC4xMDA4LTAuMDE2NzMtMC4wMTI1LTAuMDMzMjUtMC4wMjUtMC4wNTEwMy0wLjAzNzVhMi44MzMzIDIuODMzMyAwIDAgMC0xLjk3ODgtMC40ODA0N2MyLjk1MTkgMS40NzU5IDIuMTU5OSA2LjU1ODQtMS45MzEgNi4zNjY2YTMuNjQ5NiAzLjY0OTYgMCAwIDEtMS4wNjc5LTAuMjA2MDJxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM2MwLjU3MDQ3IDAuMzg5NDEgMy4zODgxIDEuMzQwOCA2LjMzNC0xLjA1ODhsMC4wMDQ3LTAuMDEwNmMwLjA3MzQ4LTAuMTcxNTIgMS4wNDg0LTIuNTk2Ny0wLjgxMzE0LTQuMzExM3oiIGZpbGw9InVybCgjaikiLz4KICAgIDxwYXRoIGQ9Im00Ljc5MTYgMjg5LjU0czAuMzc4ODMtMS40MTE4IDIuNzEyNi0xLjQxMThjMC4yNTIyIDAgMC45NzQwNy0wLjcwNDA4IDAuOTg2OTktMC45MDgyMWE0LjA4NjkgNC4wODY5IDAgMCAxLTMuMDgxNC0wLjEyMTEyIDMuMDk1NCAzLjA5NTQgMCAwIDAtMy4wMTczIDAuMTIxMTIgMi4xMDc2IDIuMTA3NiAwIDAgMCAxLjk0NDEgMS4yMjI5Yy0wLjE1MjA0IDEuMzQxOSAwLjU1NzM0IDIuOTA2MyAyLjI3NDUgMy43MjY5IDAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3NzMtMS44Mjk4LTEuNDk2OS0xLjkzMzEtMi42ODU3eiIgZmlsbD0idXJsKCNrKSIvPgogICAgPHBhdGggZD0ibTE2LjA3IDI4NS43NWMtMC4zNTY1OS0wLjg1ODAzLTEuMDc5OS0xLjc4NDQtMS42NDY0LTIuMDc3M2E4LjUyNjUgOC41MjY1IDAgMCAxIDAuODMxMTMgMi40OTExbDAuMDAxNSAwLjAxMzhjLTAuOTI3OTEtMi4zMTM0LTIuNTAxNS0zLjI0NjItMy43ODY2LTUuMjc3My0wLjA2NTAxLTAuMTAyNy0wLjEzMDAyLTAuMjA1NjEtMC4xOTMzMy0wLjMxNDI0LTAuMDM2MjEtMC4wNjItMC4wNjUyMi0wLjExNzk1LTAuMDkwNDItMC4xNjk0YTEuNDkzNSAxLjQ5MzUgMCAwIDEtMC4xMjIzOS0wLjMyNTA0IDAuMDIxMTc1IDAuMDIxMTc1IDAgMCAwLTAuMDE4NjMtMC4wMjEyIDAuMDI5MjIyIDAuMDI5MjIyIDAgMCAwLTAuMDE1NDYgMGMtMC4wMDExIDAtMC4wMDI4IDJlLTMgLTRlLTMgMmUtMyAtMC4wMDEzIDQuMmUtNCAtNGUtMyAyZS0zIC0wLjAwNTkgM2UtM2wwLjAwMzItNmUtM2MtMi4wNjE0IDEuMjA3LTIuNzYwOSAzLjQ0MTQtMi44MjUyIDQuNTU5MSAwLjA5NTcxMy03ZS0zIDAuMTkwNTgtMC4wMTQ2IDAuMjg4NDEtMC4wMTQ2YTQuMTQxOSA0LjE0MTkgMCAwIDEgMy41OTYgMi4xIDIuODMzMyAyLjgzMzMgMCAwIDAtMS45Nzg4LTAuNDgwNDdjMi45NTE5IDEuNDc1OSAyLjE1OTkgNi41NTg0LTEuOTMxIDYuMzY2NmEzLjY0OTYgMy42NDk2IDAgMCAxLTEuMDY4LTAuMjA1MDhxLTAuMTIwNDktMC4wNDUxLTAuMjQwOTgtMC4wOTg3Yy0wLjA0NjM3NC0wLjAyMTItMC4wOTI3NDgtMC4wNDIzLTAuMTM4NDktMC4wNjYxbDAuMDA1NzIgNGUtM3EtMC4wNTk3MTUtMC4wMjg2LTAuMTE5NDMtMC4wNTk1YzAuMDM4MzI3IDAuMDE4NCAwLjA3NDMyNiAwLjAzODMgMC4xMTM3MSAwLjA1NTktMS4wMDIyLTAuNTE3OTUtMS44Mjk4LTEuNDk3MS0xLjkzMzEtMi42ODU5IDAgMCAwLjM3ODgzLTEuNDExOCAyLjcxMjYtMS40MTE4IDAuMjUyMiAwIDAuOTc0MDctMC43MDQwOCAwLjk4Njk5LTAuOTA4MjEtMC4wMDMxOC0wLjA2NjctMS40MzE1LTAuNjM1MjYtMS45ODg0LTEuMTgzNy0wLjI5NzUxLTAuMjkzMjgtMC40Mzg3NS0wLjQzNDUyLTAuNTYzOS0wLjU0MDYxYTIuNDUzNiAyLjQ1MzYgMCAwIDAtMC4yMTE3NS0wLjE2MDUxIDMuODA0OCAzLjgwNDggMCAwIDEtMC4wMjMwODEtMi4wMDYgNi4wNzg0IDYuMDc4NCAwIDAgMC0xLjk3NTUgMS41MjY4aC0wLjAwMzgxYy0wLjMyNTI2LTAuNDEyNjMtMC4zMDIzOS0xLjc3MjEtMC4yODM3NS0yLjA1NmExLjQ2NyAxLjQ2NyAwIDAgMC0wLjI3NDAxIDAuMTQ1NDcgNS45NzY4IDUuOTc2OCAwIDAgMC0wLjgwMjEyIDAuNjg3MTUgNy4xNjY4IDcuMTY2OCAwIDAgMC0wLjc2NzE4IDAuOTIwNDl2MWUtMyAtMWUtM2E2LjkzMTMgNi45MzEzIDAgMCAwLTEuMTAxMSAyLjQ4NjZsLTAuMDExMDExIDAuMDU0MmMtMC4wMTU0NTggMC4wNzIyLTAuMDg0NzAyIDAuNDM4OTYtMC4wOTQ2NTQgMC41MTc3NHYwYTkuNTQ4OCA5LjU0ODggMCAwIDAtMC4xMjExMiAxLjE0NDF2MC4wNDIzYTguMjA3NCA4LjIwNzQgMCAwIDAgMTYuMjk1IDEuMzg3OGMwLjAxMzc2LTAuMTA1ODggMC4wMjQ5OS0wLjIxMDcgMC4wMzcyNy0wLjMxNzYzYTguNDM5OSA4LjQzOTkgMCAwIDAtMC41MzIzNS00LjEyMjZ6bS0wLjgxNDIgMC40MjE2IDAuMDAxNSA5ZS0zeiIgZmlsbD0idXJsKCNsKSIvPgogICA8L2c+CiAgIDxjaXJjbGUgY3g9Ii0xOS4zNDciIGN5PSIyOTQuNTMiIHI9IjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9IiNkNWQzY2YiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"firefox,firefox,mozilla,web,internet\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"firefox.desktop\"\nLABEL oc.launch=\"Navigator.firefox\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Firefox\"\nLABEL oc.displayname=\"Firefox (alpine)\"\nLABEL oc.path=\"/usr/bin/firefox\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"htm;html;xml;gif\"\nLABEL oc.legacyfileextensions=\"htm;html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Firefox\"\nENV APPBIN \"/usr/bin/firefox\"\nENV APP \"/usr/bin/firefox\"\nLABEL oc.usedefaultapplication=true\nCOPY composer/init.d/init.firefox /composer/init.d/init.firefox\nCOPY policies.json /usr/lib/firefox/distribution\nCOPY /ntlm_auth /usr/bin/ntlm_auth.desktop\nRUN chown root:root /usr/bin/ntlm_auth.desktop && chmod 111 /usr/bin/ntlm_auth.desktop\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/firefox/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/firefox/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/firefox/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/firefox/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends flare-game && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"flare.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNzQ0LjA5NDQ4ODE5IgogICBoZWlnaHQ9IjEwNTIuMzYyMjA0NyIKICAgaWQ9InN2ZzIiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL1VzZXJzL2NsaW50YmVsbGFuZ2VyL0Rlc2t0b3AvZmxhcmUucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMTUwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTUwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJmbGFyZV9sb2dvLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzE2MyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmM2NDE7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzE2NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmN2YwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMTY3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMTAiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMxNjMiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMTk3IgogICAgICAgY3g9IjM4MS44ODg5MiIKICAgICAgIGN5PSI0MTcuNTIxODIiCiAgICAgICBmeD0iMzgxLjg4ODkyIgogICAgICAgZnk9IjQxNy41MjE4MiIKICAgICAgIHI9IjE2Ni45NjU1MiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA1MjY1LDAsMCwxLjU4Nzk5NjIsLTE5LjQxNzYzNywtMTM2LjQ1OTc5KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC40OCIKICAgICBpbmtzY2FwZTpjeD0iNDk1LjM3ODAyIgogICAgIGlua3NjYXBlOmN5PSI2MjIuNjcwNjUiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6c25hcC1nbG9iYWw9ImZhbHNlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzU2IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjcxMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNDQ1IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDIzODUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzMTk3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDM1OS4xNzIxNiwyMzIuODMzOTcgQyAzNTkuMTcyMTYsMjMyLjgzMzk3IDM3Ny42ODAyMiwzMTQuNTg3MzkgMzcyLjkyNjkzLDM0Mi4xNTczNyBDIDM2OC4yNTIxNCwzNjkuMjcxOTkgMzUzLjM3NzgsNDAzLjUxNzI3IDMyNy40MzUzOCw0MTQuMDA0MjggQyAzMTkuMzUyNDQsNDE3LjI3MTc0IDI5NC40ODQ5Niw0MDAuNjk5ODEgMjg1LjQzMDM0LDM5MC4zNzMxIEMgMjc2LjM3NTczLDM4MC4wNDYzOSAyNzAuMTQ0ODQsMzUxLjA0NzQ0IDI3MC4xNDQ4NCwzNTEuMDQ3NDQgQyAyNzAuMTQ0ODQsMzUxLjA0NzQ0IDI2NC4zNTQwMiwzNzYuMzM5NTIgMjY3LjAxODYzLDQwMC43NDAyNyBDIDI2OS42ODMyMyw0MjUuMTQxMDIgMjgwLjgyNTMxLDQ2MC44OTMxMiAyNzkuOTc0NTUsNDc5LjYzNTU1IEMgMjc5LjA1NDU5LDQ5OS45MDIxNSAyNjUuMjE1MTYsNTIyLjExOTk1IDI2NS4yMTUxNiw1MjIuMTE5OTUgQyAyNjUuMjE1MTYsNTIyLjExOTk1IDI1Ni43MTY5OCw0OTguNDU1NzMgMjQ4LjM3MTY5LDQ4Mi42NjIxMiBDIDI0MC4wMjY0LDQ2Ni44Njg1MSAyMTcuOTcxMTUsNDQ1LjU2MDU0IDIxNy45NzExNSw0NDUuNTYwNTQgQyAyMTcuOTcxMTUsNDQ1LjU2MDU0IDIyOS40MTg0Niw0NzEuNjg3MzMgMjI5LjgzOTU0LDQ5Ni4xMDg5OSBDIDIzMC4yNjA2Miw1MjAuNTMwNjUgMTg2LjI0NDM0LDU3Mi4xNzYyNCAyMzEuMDMyNTUsNjM5LjMxMzkxIEMgMjc2LjMwNzE5LDcwNy4xODA3NiAzNDQuMDgxMTQsNjk5LjI2ODQzIDM0NC4wODExNCw2OTkuMjY4NDMgTCAzNjAuNTY5MDMsNjkzLjIwNTkzIEwgMjk3LjI5NjM4LDY2Mi4yMDU5MyBMIDM3OC45Mzg1LDYyMi4yMDU5MyBMIDI5Ny4yOTYzOCw1ODIuMjA1OTMgTCAzNzguOTM4NSw1NDIuMjA1OTMgTCA0NjAuNTgwNjIsNTgyLjIwNTkzIEwgNTMxLjY2NjY3LDU0Ny4zNjIxOCBMIDUyOS42ODk0LDUzNi4wODA5MyBMIDQ2MC41ODA2Miw1MDIuMjA1OTMgTCA1MjAuNzU5NzksNDcyLjczNzE4IEwgNTE4LjMzNjA0LDQ1Mi45MjQ2OCBMIDUwOC4zODU5MSwzNzkuNzY4NDMgQyA1MDguMzg1OTEsMzc5Ljc2ODQzIDQ5Ni45MzY2MSw0MDQuMTI0OTggNDg0LjI1NDgyLDQxMi42Nzk0MSBDIDQ3NS45MDg1Nyw0MTguMzA5MzEgNDU1LjM0ODg1LDQyMC4zMjMxNiA0NTUuMzQ4ODUsNDIwLjMyMzE2IEMgNDU1LjM0ODg1LDQyMC4zMjMxNiA0NDQuMDkyOTcsMzYwLjI5MTYzIDQzMi4yNDUwOSwzMjkuMDU3NSBDIDQxMS4wOTE2NCwyNzMuMjkxNCAzNTkuMTcyMTYsMjMyLjgzMzk3IDM1OS4xNzIxNiwyMzIuODMzOTcgeiBNIDQ2MC41ODA2Miw1ODIuMjA1OTMgTCAzNzguOTM4NSw2MjIuMjA1OTMgTCA0NTMuODgzNDIsNjU4LjkyNDY4IEwgNDgzLjQ3ODY4LDY0OC4wNDk2OCBMIDUxNi42MTM5LDYwOS42NzQ2OCBMIDQ2MC41ODA2Miw1ODIuMjA1OTMgeiIKICAgICAgIGlkPSJwYXRoMjM4MyIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NzemN6c2N6Y3p6Y2NjY2NjY2NjY2NjY3Njc2NjY2NjY2MiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"flare,flare-game,role,playing\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"flare.desktop\"\nLABEL oc.launch=\"flare.flare\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--game=flare-game\"\nLABEL oc.name=\"flare\"\nLABEL oc.displayname=\"flare\"\nLABEL oc.path=\"/usr/games/flare\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"flare\"\nENV APPBIN \"/usr/games/flare\"\nLABEL oc.args=\"--game=flare-game\"\nENV APP \"/usr/games/flare\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/flare/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/flare/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/flare/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/flare/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends frozen-bubble && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"frozen-bubble.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDQ2NDgiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojN2QzMjlhIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FjNWNjZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NDY1MiIgeDE9IjMwLjU3NyIgeDI9IjQ1IiB5MT0iMTkuMTI5IiB5Mj0iMjcuNDU2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzA1ODgyMzcsMCwwLDAuNjY2NjY2NywtMC43NjQ3MDU1MSwtNWUtNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NjQ4Ii8+CiA8L2RlZnM+CiA8cGF0aCBzdHlsZT0ib3BhY2l0eTowLjIiIGQ9Ik0gMTEuNzk5OTU3LDE2LjQ0NjA2IEMgMTAuMzc3MTY1LDIwLjg0NjE2MiA3LjY1ODQ0ODMsMjUuNzI3NjI5IDIsMjQuOTA5NDkyIDIuMzc0MTYxOCwyMS4yMjkyMjQgMy45MDIwMDg0LDE3LjUyMzc5OSA2LjA2MDI1NTEsMTQuNTUwNTAxIDYuNTE1MjE3NSwxMy45MjM3MjggNy40NTM5NzIyLDEzLjY0NTg1NCA3Ljg0MjI4MTUsMTMuMTAwMDUyIFoiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0iTSAxNC4wMTg4MDUsMy4wMDAwMDA1IEMgMTAuNjU2ODE2LDMuMDQ5NTYyNSAzLjkyNTEyMjcsOC41Mzc4ODYzIDMuMDkwNjc2LDE1LjEzNzgzOCBjIC0wLjI0MDI4NzUsMS45MDA1MjQgMC4wMDYzNiwzLjkyNDEwNCAwLjYyODcwNzQsNS44MTQ2MjIgMC4zNDM5NDI2LDUuOTMyODk0IDguMTM0NTY5Niw5LjcyMzE2MiAxMy4wMDAyMjU2LDEwLjA0NDY4MyA1Ljk1MjYzOCwwLjE0MDI0OCAxMS41MTIxNDQsLTQuOTI0MjUxIDEyLjYwNDY4MiwtNi4yODM1NjYgMS45OTgxLC0yLjk1NTA1MyAtMC44Mjk5OTcsLTkuMzI1MTIxIC0zLjM1MzEwNiwtMTMuMDM0NzA4IC0yLjc2ODkwMSwtNC4wNzA5NjU3IC03LjkzMDU2LC03LjAzNTIwNzUgLTExLjk1MjM4LC04LjY3ODg2ODUgeiIvPgogPHBhdGggc3R5bGU9ImZpbGw6IzY1MzU3OCIgZD0iTSAxMS43OTk5NTcsMTUuNDQ2MDYgQyAxMC4zNzcxNjUsMTkuODQ2MTYyIDcuNjU4NDQ4MywyNC43Mjc2MjkgMiwyMy45MDk0OTIgMi4zNzQxNjE4LDIwLjIyOTIyNCAzLjkwMjAwODQsMTYuNTIzNzk5IDYuMDYwMjU1MSwxMy41NTA1MDEgNi41MTUyMTc1LDEyLjkyMzcyOCA3LjQ1Mzk3MjIsMTIuNjQ1ODU0IDcuODQyMjgxNSwxMi4xMDAwNTIgWiIvPgogPHBhdGggc3R5bGU9ImZpbGw6IzdkMzI5YSIgZD0iTSAxNC4wMTg4MDUsMiBDIDEwLjY1NjgxNiwyLjA0OTU2MiAzLjkyNTEyMjcsNy41Mzc4ODU4IDMuMDkwNjc2LDE0LjEzNzgzOCBjIC0wLjI0MDI4NzUsMS45MDA1MjQgMC4wMDYzNiwzLjkyNDEwNCAwLjYyODcwNzQsNS44MTQ2MjIgMC4zNDM5NDI2LDUuOTMyODk0IDguMTM0NTY5Niw5LjcyMzE2MiAxMy4wMDAyMjU2LDEwLjA0NDY4MyA1Ljk1MjYzOCwwLjE0MDI0OCAxMS41MTIxNDQsLTQuOTI0MjUxIDEyLjYwNDY4MiwtNi4yODM1NjYgMS45OTgxLC0yLjk1NTA1MyAtMC44Mjk5OTcsLTkuMzI1MTIxIC0zLjM1MzEwNiwtMTMuMDM0NzA4IEMgMjMuMjAyMjg0LDYuNjA3OTAyOCAxOC4wNDA2MjUsMy42NDM2NjEgMTQuMDE4ODA1LDIgWiIvPgogPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4xO2ZpbGw6I2ZmZmZmZiIgZD0iTSAxNC4wMTk1MzEgMiBDIDEwLjY1NzU0MiAyLjA0OTU2MiAzLjkyNDI5MDQgNy41Mzg3MTk3IDMuMDg5ODQzOCAxNC4xMzg2NzIgQyAzLjAwODE3NTIgMTQuNzg0NjE5IDMuMDAyODMzOSAxNS40NDUwNTQgMy4wMjkyOTY5IDE2LjEwOTM3NSBDIDMuMDQyNjk1NyAxNS43ODQwOTIgMy4wNDk0NDMzIDE1LjQ1ODIxNCAzLjA4OTg0MzggMTUuMTM4NjcyIEMgMy45MjQyOTA0IDguNTM4NzIwMiAxMC42NTc1NDIgMy4wNDk1NjIgMTQuMDE5NTMxIDMgQyAxOC4wNDEzNTEgNC42NDM2NjEgMjMuMjAxODAyIDcuNjA4NzIxOCAyNS45NzA3MDMgMTEuNjc5Njg4IEMgMjcuODAyNzQyIDE0LjM3MzIzMiAyOS43ODcyNTQgMTguNDYzNjUgMjkuOTc2NTYyIDIxLjYzNjcxOSBDIDMwLjIyNjc3OSAxOC4zNzE3MzkgMjguMDAxNzUzIDEzLjY2NTgyNyAyNS45NzA3MDMgMTAuNjc5Njg4IEMgMjMuMjAxODAyIDYuNjA4NzIxMyAxOC4wNDEzNTEgMy42NDM2NjEgMTQuMDE5NTMxIDIgeiIvPgogPGVsbGlwc2Ugc3R5bGU9ImZpbGw6I2ZjZjhmZCIgY3g9Ii05LjAyMiIgY3k9IjIxLjU2NSIgcng9IjQuNzk0IiByeT0iNi4xMjUiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjc4MTYyNDUsLTAuNzM0OTEyMDMsMC43MjQyNjM0OSwwLjY4OTUyMzMxLDAsMCkiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0ibSAyMi4zNzQxNCwxMSBjIDQuNDM3MDk2LDEuNDUxODM1IDkuMzU5NjA3LDQuMjI2MDQ4IDguNTM0NTkxLDEwIEMgMjcuMTk3NTIyLDIwLjYxODIgMjMuNDYwOTQyLDE5LjA1OTE2NSAyMC40NjI2NDQsMTYuODU2ODY0IDE5LjgzMDYsMTYuMzkyNjE2IDE5LjU1MDM5MSwxNS40MzQ2OTcgMTksMTUuMDM4NDYxIFoiLz4KIDxwYXRoIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NjUyKSIgZD0ibSAyMi4zNzQxNCwxMCBjIDQuNDM3MDk2LDEuNDUxODM1IDkuMzU5NjA3LDQuMjI2MDQ4IDguNTM0NTkxLDEwIEMgMjcuMTk3NTIyLDE5LjYxODIgMjMuNDYwOTQyLDE4LjA1OTE2NSAyMC40NjI2NDQsMTUuODU2ODY0IDE5LjgzMDYsMTUuMzkyNjE2IDE5LjU1MDM5MSwxNC40MzQ2OTcgMTksMTQuMDM4NDYxIFoiLz4KIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMiIgZD0iTSAxMiwxNiBDIDEyLjY5NDgxMywxOS4wMTY4MTEgNi43MDI3NjcsMjIuMTI4MDAzIDMuNjk2NTI3OCwyMC45MTk4MTEgMi4yNDk1NDMzLDIwLjMzODI3NSAyLjAwMjk2NjQsMTguMTI0MTgyIDIuMDYzOTI2MywxNi4zOTE5NyAyLjEyNTM3NDMsMTQuODU3NjUgMS45NzE0NjEzLDE0LjM5MDQ3MSAzLjUwNzQ4NDIsMTQuMjQ0MDUyIDYuNDE2NTMxOSwxMy45NzQ1NDkgMTEuNjk0Njg3LDE0LjY3NDM0NyAxMiwxNiBaIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZjMTAyIiBkPSJtIDExLjk0NDQxNCwxNC44MTMxMzcgYyAwLjY5NDgxMywzLjAxNjgxMSAtNS4yOTcyMzMsNi4xMjgwMDMgLTguMzAzNDcyMiw0LjkxOTgxMSAtMS40NDY5ODQ1LC0wLjU4MTUzNiAtMS42OTM1NjE0LC0yLjc5NTYyOSAtMS42MzI2MDE1LC00LjUyNzg0MSAwLjA2MTQ0OCwtMS41MzQzMiAtMC4wOTI0NjUsLTIuMDAxNDk5IDEuNDQzNTU3OSwtMi4xNDc5MTggMi45MDkwNDc3LC0wLjI2OTUwMyA4LjE4NzIwMjgsMC40MzAyOTUgOC40OTI1MTU4LDEuNzU1OTQ4IHoiLz4KIDxjaXJjbGUgc3R5bGU9Im9wYWNpdHk6MC4yIiBjeD0iLTQiIGN5PSIxMiIgcj0iMyIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0ib3BhY2l0eTowLjIiIGN4PSItMTAuNSIgY3k9IjExLjUiIHI9IjQuNSIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iLTQiIGN5PSIxMSIgcj0iMyIgdHJhbnNmb3JtPSJzY2FsZSgtMSwxKSIvPgogPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iLTEwLjUiIGN5PSIxMC41IiByPSI0LjUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KIDxjaXJjbGUgc3R5bGU9ImZpbGw6IzNmM2YzZiIgY3g9Ii05IiBjeT0iMTEiIHI9IjIiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KIDxjaXJjbGUgc3R5bGU9ImZpbGw6IzNmM2YzZiIgY3g9Ii0zLjUiIGN5PSIxMS41IiByPSIxLjUiIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiLz4KPC9zdmc+Cgo=\"\nLABEL oc.keyword=\"frozen-bubble,frozen,bubble\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"perl.perl\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"frozen-bubble\"\nLABEL oc.displayname=\"frozen-bubble\"\nLABEL oc.path=\"/usr/games/frozen-bubble\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"frozen-bubble\"\nENV APPBIN \"/usr/games/frozen-bubble\"\nENV APP \"/usr/games/frozen-bubble\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/frozen-bubble/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/frozen-bubble/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/frozen-bubble/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/frozen-bubble/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.20.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y qt5-default qml-module-qtquick-controls libqt5svg5 libqt5xmlpatterns5 libqt5sensors5 qml-module-qtquick-particles2 qml-module-qtmultimedia libqt5multimedia5-plugins gcompris-qt && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gcompris.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0IgogICBoZWlnaHQ9IjY0IgogICB2aWV3Qm94PSIwIDAgNjQgNjQiCiAgIGlkPSJzdmc0MjUwIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJnY29tcHJpcy1pY29uLnN2ZyIKICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS90aW1vL2Rlc3Npbi9HQ29tcHJpei9nY29tcHJpcy1pY29uMDctMjU2LnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjM2MCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjM2MCI+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2I4YjhiOCIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSIxNS45ODA2NzYiCiAgICAgaW5rc2NhcGU6Y3k9IjU1Ljk0NzE3MiIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICB1bml0cz0icHgiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxODc4IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwNTEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBzaG93Z3VpZGVzPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgZW1wc3BhY2luZz0iNCIKICAgICAgIGlkPSJncmlkNTU3MyIKICAgICAgIHR5cGU9Inh5Z3JpZCIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDI1MiI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDkxMzgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjI1MTIwNzc0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wOTE0MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A5MTQyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50ODk4OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzJhNDM7c3RvcC1vcGFjaXR5OjAuNTAxOTYwODEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A4OTkwIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTMzZTZiO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wODk5MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQyNDMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDQyNDUiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2NmNWUxOTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0MjQ3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlNzc5MzY7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iNTYzLjQ1MjM5IgogICAgICAgeDI9IjQ0OC4xNTc4NyIKICAgICAgIHkxPSI2MTUuMTU5NTUiCiAgICAgICB4MT0iNDQ4LjE1Nzg3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDI0OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQyNDMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDY5MDI4NDUsMC4yOTc3MzEwMSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDg5ODgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4OTk0IgogICAgICAgeDE9IjQ1LjI4OTA1MSIKICAgICAgIHkxPSI5NS43NDU4NTciCiAgICAgICB4Mj0iNDUuMjg5MDUxIgogICAgICAgeTI9IjQ4Ljc2ODk0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzY5ODYyNDYsMCwwLDAuMzY5ODYyNDYsNDUyLjEzMzksNTc3LjM2MSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDkxMzgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ5MTQ0IgogICAgICAgeDE9IjMzLjAxMDQ0OCIKICAgICAgIHkxPSI2My42NDM2MTYiCiAgICAgICB4Mj0iMzMuMDEwNDQ4IgogICAgICAgeTI9IjEuNDE4MjE4OSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0MTkuNzQzNzEsNTUzLjAzMTcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5MTM4IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50OTE2NyIKICAgICAgIHgxPSI0NTEuMDc0NTgiCiAgICAgICB5MT0iNjE0LjQxNTEiCiAgICAgICB4Mj0iNDUxLjA3NDU4IgogICAgICAgeTI9IjU1NS4yODMzMyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMC45NTg3NTg3OSwtMy45MjI5ODM4ZS00KSIgLz4KICA8L2RlZnM+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDI1NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyMC43MDI0NywtNTUzLjAzMjA5KSIKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhbHF1ZSAxIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjEwNTU2OTIxLDEuMjUwMzA1NWUtNCwtMS4yNTA2NzJlLTQsMC4xMDU1MzgyOCw0MTkuMTY0NzMsNTc3LjEwNTcyKSIKICAgICAgIGlkPSJnMzY5Mi0xLTAtMC03LTQtMyIKICAgICAgIHN0eWxlPSJzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjQuMzg2NjkzO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0iZzU0NTMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjQ1NTkyNDI4LDAsMCwwLjQ1NTkyNDMzLDIzNS4yNDEzOSwzODAuOTgyNzQpIj4KICAgICAgPGcKICAgICAgICAgaW5rc2NhcGU6bGFiZWw9ImJhbGwiCiAgICAgICAgIGlkPSJsYXllcjMtMiIKICAgICAgICAgc3R5bGU9InN0cm9rZTpub25lO3N0cm9rZS13aWR0aDo0LjM4NjY5MztzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMTg5NjEtMS05IgogICAgICAgZD0ibSA0NzQuMzU4OTQsNTg2Ljc3Nzc5IGMgLTAuNTU2ODEsLTAuMDE4NSAtMy4wOTgyNiwwLjAxMjIgLTMuNjE1MjMsMC4wMzMyIGwgLTAuNSwyNi4yNDgwNCBjIDEuNTY4MDgsLTAuMjc4OTQgNS42Mjk4MSwtMC44Mjg3NyA3LjE3NzczLC0xLjEyMzA0IDIuNjQ5MDQsLTEuMDc4ODYgMi44NjgzMywtNC4zOTk2MyA0LjQwNjI1LC02LjQ1NzAzIDEuMTM5MjMsLTIuMzcyNzcgMi41ODk3NywtNC44ODQxNiAyLjczNjMzLC03LjQ5NDE0IC0xLjkxNTAyLC0zLjkzOTAzIC00Ljk2MTk2LC03LjIxMTQzIC03LjgwNDY5LC0xMC40NzY1NyAtMC42OTEwMSwtMC41MjU2NSAtMS41NDYxMSwtMC42OTUzNyAtMi40MDAzOSwtMC43MzA0NyB6IgogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNDE4Mi0zIgogICAgICAgZD0ibSA0MjguNjgyMzEsNTU3LjMzODc1IGMgLTEyLjA2NDcsMTMuMDIwMzggLTkuODk0MjgsMzUuNjczMTggNC4zNTU0Nyw0Ni4yMTI4OSAxMi4xODUzNyw5Ljk5OTkxIDMxLjQwMjIzLDguNjc2OTMgNDIuNDA4MiwtMi40OTYxIC0zLjMyODAxLC0zLjI3Mjk3IC02LjMzNTg5LC0yLjUzNzMzIC0xMC4yNSwyLjY4OTQ2IC0xMi4yNTA2Niw4LjY1Mjc5IC0zNS4xNzk3MSwtNC44MzcyOSAtMzguNTk1NywtMTkuMTA1NDcgLTIuMzQwNzMsLTcuODk4MDUgMC4xMzU1NiwtMTYuNzM3NzQgNS43ODcxMSwtMjIuNjQyNTggLTIuMzI1MDYsLTAuNDQ2ODMgLTEuMjQwMzUsLTUuNjQ3MTkgLTMuNzA1MDgsLTQuNjU4MiB6IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaWQ9InJlY3Q1Mjk3LTUiCiAgICAgICBkPSJtIDQ1MC45NTQ1OSw2MDcuNTM2NjcgYyAtNi4zNTc0OCwwLjYyOTgxIC0xNC44OTYzNywwLjA5ODcgLTE5LjAyMTk0LDUuNjIyOTggLTIuNjg4NzksNS4wOTg2OCA0LjEyOTcsMy4zNDAyNyA3LjU2NTI3LDMuNTQ5MTQgMTEuNTU4OTMsMCAyMy4xMTc4OCwwIDM0LjY3NjgxLDAgMC43MTc5MSwtNy4xNTgxMSAtOC42NDY4MiwtOC4yMDc4MSAtMTQuMTQyMTksLTguODQ0NDggLTMuMDE0MDksLTAuMjk5MjYgLTYuMDQ4NywtMC4zOTE0NCAtOS4wNzc5NSwtMC4zMjc2NCB6IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxyZWN0CiAgICAgICByeD0iMS42NDczOTMyZS0wNyIKICAgICAgIHk9IjYwNy4zOTM3NCIKICAgICAgIHg9IjQ1MC44NDQ3IgogICAgICAgaGVpZ2h0PSI0Ljg0MDIwNjYiCiAgICAgICB3aWR0aD0iMy44NzIxNjUyIgogICAgICAgaWQ9InJlY3Q1MzAwIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNlNzc5MzY7ZmlsbC1vcGFjaXR5OjAuOTcyNTQ5MDI7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxlbGxpcHNlCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGlkPSJwYXRoNDg0OC02IgogICAgICAgY3g9IjQ1Mi42NTE3MyIKICAgICAgIGN5PSI1NzguMzUyNTQiCiAgICAgICByeD0iMjMuMTExOTE3IgogICAgICAgcnk9IjIzLjExMTkyMSIgLz4KICAgIDxyZWN0CiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LC0wLjcwNzEwNjc4LDAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2lzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtjb2xvci1pbnRlcnBvbGF0aW9uOnNSR0I7Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOmxpbmVhclJHQjtzb2xpZC1jb2xvcjojMDAwMDAwO3NvbGlkLW9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGlkPSJyZWN0NDE4MC0zLTciCiAgICAgICB3aWR0aD0iNy42Mzg5Njg1IgogICAgICAgaGVpZ2h0PSI2NC40OTQ1OTgiCiAgICAgICB4PSItOTIuOTY4NTc1IgogICAgICAgeT0iNjk3LjA0ODIyIgogICAgICAgcng9IjMuMjQ5OTY5OWUtMDciCiAgICAgICByeT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50OTE0NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSA0MzIuNTUwMzUsNTUzLjIyNTA2IC01LjQwMjM0LDUuNDAwMzkgMC4yMzQzOCwwLjIzNDM4IGMgLTEwLjU3NTgxLDEzLjE5OTAyIC04LjA1NDc0LDM0LjU1MDE4IDUuNjU2MjUsNDQuNjkxNCAyLjU2MTY0LDIuMTAyMjIgNS40MzUwMiwzLjY5OTM2IDguNDc2NTYsNC44MTQ0NSAtMy43OTEzNSwwLjU4MzQ4IC03LjMzOTUxLDEuNzkyMTEgLTkuNTgyMDMsNC43OTQ5MyAtMi42ODg3OSw1LjA5ODY3IDQuMTI4ODgsMy4zMzk5NiA3LjU2NDQ1LDMuNTQ4ODIgbCAzNC42Nzc3MywwIGMgMC4xNjg3MSwtMS42ODIxNSAtMC4yMjQ0MywtMy4wMjQwNyAtMC45ODgyOCwtNC4xMDU0NiAxLjYzNjU5LC0wLjI0MzY3IDMuMzE5OTgsLTAuNDk0MTQgNC4yMzQzOCwtMC42Njc5NyAyLjY0OTA0LC0xLjA3ODg2IDIuODY4MzMsLTQuMzk5NjIgNC40MDYyNSwtNi40NTcwMyAxLjEzOTIzLC0yLjM3Mjc2IDIuNTg5NzcsLTQuODg0MTUgMi43MzYzMywtNy40OTQxNCAtMS45MTUwMiwtMy45MzkwMyAtNC45NjE5NiwtNy4yMTE0MyAtNy44MDQ2OSwtMTAuNDc2NTcgLTAuNjkxMDEsLTAuNTI1NjUgLTEuNTQ2MTEsLTAuNjk1MzYgLTIuNDAwMzksLTAuNzMwNDcgLTAuMDMyNSwtMTBlLTQgLTAuMTY1NzMsMC4wMDMgLTAuMjEwOTQsMC4wMDIgMS4wNTk3OCwtMi42ODM3OSAxLjYwNzYzLC01LjU0MjMgMS42MTUyMywtOC40Mjc3NCAtMy4zZS00LC0xMi43NjM5IC0xMC4zNDc0MiwtMjMuMTExIC0yMy4xMTEzMiwtMjMuMTExMzMgLTQuODk3NDYsMC4wMSAtOS42NjUxMywxLjU3NTU2IC0xMy42MTUyNCw0LjQ3MDcxIGwgLTYuNDg2MzMsLTYuNDg2MzMgeiBtIC0xLjA0Njg3LDkuNzU1ODYgMi4xNzk2OSwyLjE3OTY5IGMgLTIuNjk0NiwzLjg3MTM5IC00LjE0MDE3LDguNDc0NTYgLTQuMTQyNTgsMTMuMTkxNCAtNy41ZS00LDEyLjc2NDY2IDEwLjM0NjY3LDIzLjExMjk2IDIzLjExMTMzLDIzLjExMzI4IDQuNzEzODQsLTAuMDEgOS4zMTE5OCwtMS40NjA3MiAxMy4xNzc3MywtNC4xNTgyIGwgMi44MjYxNywyLjgyNjE3IGMgLTEuMDg5MDIsMC43NzA0NyAtMi4yMjkwNCwxLjk2ODkxIC0zLjQ1ODk4LDMuNjExMzMgLTEyLjI1MDY2LDguNjUyOCAtMzUuMTc5NzEsLTQuODM3MjkgLTM4LjU5NTcsLTE5LjEwNTQ3IC0yLjIxNDM4LC03LjQ3MTcyIC0wLjExNTMyLC0xNS43ODMwNiA0LjkwMjM0LC0yMS42NTgyIHogbSAzOC44OTA2Miw0Mi4xNjYwMSAtMC4wOTc2LDUuMTAzNTIgYyAtMS45MDUwNCwtMC45NzIxNiAtNC4yNDQwNiwtMS41MTM0NyAtNi40ODQzOCwtMS44NzUgMi4zMDY4NSwtMC44MTk1NCA0LjUyMDM0LC0xLjg5NzM3IDYuNTgyMDMsLTMuMjI4NTIgeiIKICAgICAgIGlkPSJwYXRoMTg5NjEtMS05LTMiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoNDE4MiIKICAgICAgIGQ9Im0gNDMwLjIwMTk4LDU1OC42NCBjIC00Ljc3NzU5LDUuNDU3IC03LjQxNzE3LDEyLjQ1OTYzIC03LjQzMDQ4LDE5LjcxMjUgMCwxNi41NzM2NiAxMy40MzU2MSwzMC4wMDkyNyAzMC4wMDkyOCwzMC4wMDkyNyA3LjI1NTI5LC0wLjAwOCAxNC4yNjIyNCwtMi42NDMwOSAxOS43MjM4NCwtNy40MTkxMyBsIC0zLjUyMjM3LC0zLjUyMjM3IGMgLTQuNTIwOCwzLjg1MSAtMTAuMjYyOCw1Ljk3MDUgLTE2LjIwMTQ3LDUuOTgwMjkgLTEzLjgzMzY2LDAgLTI1LjA0ODA4LC0xMS4yMTQzOSAtMjUuMDQ4MDgsLTI1LjA0ODA2IDEwZS00LC01Ljk0MTk2IDIuMTE2MjYsLTExLjY4OTcxIDUuOTY1MTksLTE2LjIxNjU5IHoiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHJlY3QKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAsMCkiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgaWQ9InJlY3Q0MTgwLTMiCiAgICAgICB3aWR0aD0iNC43Mjc4MDEzIgogICAgICAgaGVpZ2h0PSI2MC43NDQ1OTUiCiAgICAgICB4PSItOTEuMjQ3Nzk1IgogICAgICAgeT0iNjk4LjY1ODA4IgogICAgICAgcng9IjIuMDExNDI1ZS0wNyIKICAgICAgIHJ5PSIwIiAvPgogICAgPGVsbGlwc2UKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2NsaXAtcnVsZTpub256ZXJvO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7Y29sb3ItaW50ZXJwb2xhdGlvbjpzUkdCO2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpsaW5lYXJSR0I7c29saWQtY29sb3I6IzAwMDAwMDtzb2xpZC1vcGFjaXR5OjE7ZmlsbDojZTc3OTM1O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxOC45NDc2Nzk1MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgaWQ9InBhdGg0ODQ4IgogICAgICAgY3g9IjQ1Mi42NTE3MyIKICAgICAgIGN5PSI1NzguMzUyNTQiCiAgICAgICByeD0iMjEuMjM2OTE3IgogICAgICAgcnk9IjIxLjIzNjkyMSIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY3NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJyZWN0NTI5NyIKICAgICAgIGQ9Im0gNDcyLjE0MTYxLDYxNS4wNzQxNSAtMTkuMzYwODIsMCAtMTkuMzYwODIsMCBjIDAsLTMuODcyMTcgOS42ODA0MSwtNS44MDgyNSAxOS4zNjA4MiwtNS44MDgyNSA5LjY4MDQxLDAgMTkuMzYwODIsMS45MzYwOCAxOS4zNjA4Miw1LjgwODI1IHoiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtjbGlwLXJ1bGU6bm9uemVybztkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2U3NzkzNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2NsaXAtcnVsZTpub256ZXJvO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7Y29sb3ItaW50ZXJwb2xhdGlvbjpzUkdCO2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpsaW5lYXJSR0I7c29saWQtY29sb3I6IzAwMDAwMDtzb2xpZC1vcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDI0OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2NvbG9yLXJlbmRlcmluZzphdXRvO2ltYWdlLXJlbmRlcmluZzphdXRvO3NoYXBlLXJlbmRlcmluZzphdXRvO3RleHQtcmVuZGVyaW5nOmF1dG87ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGQ9Im0gNDMyLjg0NzIzLDU1NS4yMDU1MyAtMy4zNDM3NSwzLjM0MTc5IDAuNDIxODcsMC40MjE4OCBjIC00LjU5OTM2LDUuNDA4MzIgLTcuMTQxMjUsMTIuMjczOTIgLTcuMTU0MywxOS4zODI4MSAwLDE1LjkyMjk0IDEyLjQwMzI3LDI4Ljk0MzA1IDI4LjA3NDIyLDI5Ljk0MTQxIGwgMCwxLjAyMTQ4IGMgLTguOTkxMzIsMC4yNDIwNCAtMTcuNDI1NzgsMi4xNDcwMiAtMTcuNDI1NzgsNS43NTk3NyBsIDE5LjM2MTMzLDAgMTkuMzYxMzMsMCBjIDAsLTMuNjEyNzUgLTguNDM0NDYsLTUuNTE3NzMgLTE3LjQyNTc4LC01Ljc1OTc3IGwgMCwtMS4wMjUzOSBjIDYuNDE0OTksLTAuNDIxNTcgMTIuNTM5MTIsLTIuODkxMTcgMTcuNDU4OTgsLTcuMDcwMzEgbCAwLjI4MTI1LDAuMjgxMjUgMy4zNDM3NSwtMy4zNDM3NSAtNi41NjgzNiwtNi41NjgzNiBhIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgNC42NTYyNSwtMTMuMjM2MzMgMjEuMjM2OTE3LDIxLjIzNjkyMSAwIDAgMCAtMjEuMjM2MzMsLTIxLjIzNjMzIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgLTEzLjI1LDQuNjQ0NTQgbCAtNi41NTQ2OCwtNi41NTQ2OSB6IG0gMC41ODU5Myw3LjI3MTQ4IDIuNjM4NjgsMi42Mzg2NyBhIDIxLjIzNjkxNywyMS4yMzY5MjEgMCAwIDAgLTQuNjU2MjUsMTMuMjM2MzMgMjEuMjM2OTE3LDIxLjIzNjkyMSAwIDAgMCAyMS4yMzYzMiwyMS4yMzgyOCAyMS4yMzY5MTcsMjEuMjM2OTIxIDAgMCAwIDEzLjI1LC00LjY0NDUzIGwgMi43NDAyNCwyLjc0MDI0IGMgLTQuNDY4MjIsMy42NzQ5NiAtMTAuMDY3MDgsNS43MDUyOSAtMTUuODYxMzMsNS43MTQ4NCAtMTMuODMzNjYsMCAtMjUuMDQ4ODMsLTExLjIxNTE2IC0yNS4wNDg4MywtMjUuMDQ4ODMgOS44ZS00LC01Ljc5NzE1IDIuMDI4NzEsLTExLjQwMDk4IDUuNzAxMTcsLTE1Ljg3NSB6IgogICAgICAgaWQ9InJlY3Q1MzAwLTMiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2NjY2Nzc2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gNDYwLjk2MDM1LDU2OS4yMzU2NyBjIDAsMCAtMy4yNDkyNSwtMy4xNTA5NyAtOC44MTA3OSwtMy4xNTc1NSAtNS41NjE1MywtMC4wMDcgLTExLjEzMTAxLDYuNzAwNjggLTExLjEzNzc0LDEyLjM2NTQ5IC0wLjAwNyw1LjY2NDggMy4yMzg1NywxMi4xNzI2OSAxMS44NDMyLDEyLjE4Mjg3IDguNjA0NjUsMC4wMDkgMTIuNTk3NSwtNC40OTU5NSAxMS4xNDA4NSwtMTQuOTg4MDYgbCAtMTAuNjAyNCwzLjM0NDM4IDEuOTkxMjksMi4xMDA0MSAxLjI1OTYxLC0wLjMxMzIgYyAwLDAgMi4wOTU1OCwyLjYyNTA4IC0xLjA1Mjk2LDMuMDQwOTcgLTMuMTQ4NTMsMC40MTU4NyAtNS45ODA4LC0wLjQyNjcgLTYuMzk1NzksLTQuNDEzNTUgLTAuNDE1MDMsLTMuOTg2ODUgMi43MzYzOCwtNi44MTU1MiA2LjQwNzIzLC01LjIzNzYzIHoiCiAgICAgICBpZD0icGF0aDg4MTAtNi03LTAtNC05LTgiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTguOTQ3Njc5NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxnCiAgICAgICBpZD0iZzkxNjkiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC45NTg3NTg3OSwtMy45MjI5ODM4ZS00KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMxYTU2OTQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDQ1Ny4xMzY2NSw2MDIuMDY0MzYgYyAwLjEwNjY0LDAuODk0NTggNi4zOTMzOCw5LjcxNDI5IDcuMzEwOTYsMTAuMTQxNDcgMC45MTc1NywwLjQyNzE4IDEzLjI2NjAxLC0xLjI3MzkyIDE0LjAwNDA3LC0xLjkwNzggMC43MzgwNiwtMC42MzM4OCA1LjgzNzAyLC0xMC45MDc4OSA1LjY2MzQyLC0xMS45NDg4NiAtMC4xNzM2LC0xLjA0MDk3IC02Ljc0MjI0LC05LjQ4NjgxIC03LjcyMjg0LC05Ljk0MDY0IC0wLjk4MDYsLTAuNDUzODQgLTEzLjI5NTQ0LDAuMzQ3MTIgLTE0LjIxMDAyLDAuODAzMjggLTEuMDM0OTksMC41MTYyMiAtNS4xNTIyMywxMS45NTc5NyAtNS4wNDU1OSwxMi44NTI1NSB6IgogICAgICAgICBpZD0icGF0aDE4OTYxIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6enp6c3oiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMzZjhjZGY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJtIDQ1OC43ODQxOSw2MDIuMDg5NTcgYyAwLjExMjc1LDAuOTMyNTkgNS43NDkyMyw4LjMzODg2IDYuNTkwNTQsOC43NjA3MiAwLjg0MTMyLDAuNDIxODYgMTEuMjk0OTgsLTEuMTE1ODcgMTEuOTUwODUsLTEuNjk4NTEgMC42NTU4NywtMC41ODI2NCA1LjU0MDM2LC0xMC4yNjA3NiA1LjEyNzE5LC0xMS4zNzMzMiAtMC40MTMxNywtMS4xMTI1NyAtNS44NzE2OCwtNy43NDkwNCAtNi44ODQ2NywtOC4xMTQ4IC0xLjAxMjk4LC0wLjM2NTc2IC0xMS4wOTA5NSwwLjAxNjQgLTEyLjEyNjU5LDAuNzE1MTYgLTEuMDM1NjUsMC42OTg3IC00Ljc3MDA3LDEwLjc3ODE2IC00LjY1NzMyLDExLjcxMDc1IHoiCiAgICAgICAgIGlkPSJwYXRoMTk4NDgiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ienp6enp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enp6eiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzJlNjZhNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNDY1LjE5Njc5LDYxMS4yNDI4NyBjIC0wLjkxNCwtMC4wNDU4IDQuOTQyMDEsLTExLjk1NDkgNS40OTg1MiwtMTIuNTA1OCAwLjU1NjUxLC0wLjU1MDg5IDExLjcxNDksLTEuMjY0ODQgMTIuMzUxMzgsLTAuNjI4NTQgMC42MzY0OCwwLjYzNjMgLTUuMDA3ODcsMTEuMTU2MTYgLTUuNTg2NzksMTEuNTk3MzMgLTAuNTc4OTEsMC40NDExNyAtMTEuMzQ5MTEsMS41ODI3OCAtMTIuMjYzMTEsMS41MzcwMSB6IgogICAgICAgICBpZD0icGF0aDIyNTUxIiAvPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzdHlsZT0iZmlsbDojMWE1Njk0O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA0NjIuODAwMDcsNTkwLjgxODM4IGMgMi4xMjIzMiwyLjk5NDk5IDYuNjY2Nyw3LjQ2NjE5IDYuODk5MDYsOC41MzQ5IDAuMjMyMzcsMS4wNjg3MSAtMy40MzIwMiw3Ljc2NTQxIC01LjQwOTU0LDExLjcxMzkzIGwgMS44MDU1NSwwLjUzOTc0IGMgMS4yOTU2OCwtNC4zMTY2IDMuOTQxNTEsLTExLjI1MzU4IDQuODM5NjUsLTExLjk1MjQ0IDAuODk4MTQsLTAuNjk4ODYgMTEuODYzNSwtMS40MTE4NCAxMi42NDgyMiwtMC44NjU5NiAwLjc4NDcyLDAuNTQ1ODggLTEuMDg2MTUsLTEuNjE3NDMgLTEuMDg2MTUsLTEuNjE3NDMgLTMuODUwMiwwLjc5OTg4IC0xMS4xNzAzOCwxLjI0MjU1IC0xMi4wNzY5MywwLjk3NzIzIC0wLjkwNjU1LC0wLjI2NTMyIC00LjU4MjE1LC01Ljg2OTg1IC02LjU5MDE1LC04LjMzNDA4IHoiCiAgICAgICAgIGlkPSJwYXRoMTk4NTAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjY3p6Y3pjYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDczLjg5MjAzLDU5NC44NDg5MSBjIC0xLjkzMzIsLTAuMTU4MjggLTMuMDYwNTEsLTIuNTA5MjIgLTEuMTI3MSwtMi4zNTM2MyAxLjkzMzQxLDAuMTU1NTggMy4wNjAzLDIuNTExOTEgMS4xMjcxLDIuMzUzNjMgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDY0LjQ0MTM3LDU5NS42Mjc1MiBjIDAuMTYwMDcsMS45MzMwNSAtMS45NzQ4MiwzLjQyOTcyIC0yLjEzNzU3LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MSAxLjk3NzUxLC0zLjQyOTk1IDIuMTM3NTcsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtmaWxsOiNjMGQ1ZWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBkPSJtIDQ2Mi4yNTc4Niw2MDAuMzU5MDUgYyAwLjE2MDA2LDEuOTMzMDUgLTEuOTc0ODIsMy40Mjk3MiAtMi4xMzc1OCwxLjQ5NjkgLTAuMTYyNzYsLTEuOTMyODIgMS45Nzc1MSwtMy40Mjk5NiAyLjEzNzU4LC0xLjQ5NjkgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtmaWxsOiNjMGQ1ZWI7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBkPSJtIDQ2Ny40NTczLDU5OS43MzUxMSBjIDAuMTYwMDcsMS45MzMwNSAtMS45NzQ4MSwzLjQyOTcyIC0yLjEzNzU3LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MSAxLjk3NzUxLC0zLjQyOTk1IDIuMTM3NTcsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMy03IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6I2MwZDVlYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDY1LjIyMTU0LDYwNC41MTg2MSBjIDAuMTYwMDYsMS45MzMwNSAtMS45NzQ4MiwzLjQyOTcyIC0yLjEzNzU4LDEuNDk2OSAtMC4xNjI3NiwtMS45MzI4MiAxLjk3NzUyLC0zLjQyOTk2IDIuMTM3NTgsLTEuNDk2OSB6IgogICAgICAgICBpZD0icGF0aDQxNDYtMy01IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9Inp6eiIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO2ZpbGw6Izk3YmJkZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNDc3LjI5MTc5LDYwNi42ODY2NiBjIC0wLjE3MDM0LDEuOTMyMTggLTIuNTI4MjcsMy4wNDQ3OSAtMi4zNjA2MiwxLjExMjM5IDAuMTY3NjQsLTEuOTMyNCAyLjUzMDk2LC0zLjA0NDU2IDIuMzYwNjIsLTEuMTEyMzkgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNTYiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ienp6IiAvPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjE7ZmlsbDojOTdiYmRmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgICAgZD0ibSA0NzMuODY3NjksNjAyLjA0ODM2IGMgLTAuMjgyMDksMS45MTkwNCAtMi43MDA1NywyLjg5MzA1IC0yLjQyMTE1LDAuOTczNjMgMC4yNzk0MiwtMS45MTk0MyAyLjcwMzI1LC0yLjg5MjY3IDIuNDIxMTUsLTAuOTczNjMgeiIKICAgICAgICAgaWQ9InBhdGg0MTQ2LTMtNTYtOSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4OTk0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNDU3LjEzNjY2LDYwMi4wNjQzNiBjIDAuMTA2NjMsMC44OTQ1OCA2LjM5MzM3LDkuNzE0MjkgNy4zMTA5NSwxMC4xNDE0NyAwLjkxNzU4LDAuNDI3MTggMTMuMjY2MDEsLTEuMjczOTIgMTQuMDA0MDcsLTEuOTA3OCAwLjczODA2LC0wLjYzMzg4IDUuODM3MDIsLTEwLjkwNzg5IDUuNjYzNDIsLTExLjk0ODg2IC0wLjE3MzYsLTEuMDQwOTcgLTYuNzQyMjQsLTkuNDg2ODEgLTcuNzIyODQsLTkuOTQwNjQgLTAuOTgwNiwtMC40NTM4NCAtMTMuMjk1NDQsMC4zNDcxMiAtMTQuMjEwMDIsMC44MDMyOCAtMS4wMzQ5OSwwLjUxNjIyIC01LjE1MjIzLDExLjk1Nzk4IC01LjA0NTU4LDEyLjg1MjU1IHoiCiAgICAgICAgIGlkPSJwYXRoMTg5NjEtMSIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJ6enp6enN6IiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2NjY2Nzc2NjIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gNDYwLjk2MDM1LDU2OS4yMzU2NyBjIDAsMCAtMy4yNDkyNSwtMy4xNTA5NyAtOC44MTA3OSwtMy4xNTc1NSAtNS41NjE1MywtMC4wMDcgLTExLjEzMTAxLDYuNzAwNjggLTExLjEzNzc0LDEyLjM2NTQ5IC0wLjAwNyw1LjY2NDggMy4yMzg1NywxMi4xNzI2OSAxMS44NDMyLDEyLjE4Mjg3IDguNjA0NjUsMC4wMDkgMTIuNTk3NSwtNC40OTU5NSAxMS4xNDA4NSwtMTQuOTg4MDYgbCAtMTAuNjAyNCwzLjM0NDM3IDEuOTkxMjksMi4xMDA0MiAxLjI1OTYxLC0wLjMxMzIgYyAwLDAgMi4wOTU1OCwyLjYyNTA3IC0xLjA1Mjk2LDMuMDQwOTYgLTMuMTQ4NTMsMC40MTU4OCAtNS45ODA4LC0wLjQyNjcgLTYuMzk1NzksLTQuNDEzNTUgLTAuNDE1MDMsLTMuOTg2ODQgMi43MzYzOCwtNi44MTU1MSA2LjQwNzIzLC01LjIzNzYyIHoiCiAgICAgICBpZD0icGF0aDg4MTAtNi03LTAtNC05LTgtNiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50OTE2Nyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE4Ljk0NzY3OTUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPC9nPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaWQ9ImxheWVyMyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIgLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"gcompris,gcompris\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"gcompris-qt.gcompris-qt\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.20.04\"\nLABEL oc.name=\"GCompris\"\nLABEL oc.displayname=\"GCompris\"\nLABEL oc.path=\"/usr/games/gcompris-qt\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"GCompris\"\nENV APPBIN \"/usr/games/gcompris-qt\"\nENV APP \"/usr/games/gcompris-qt\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gcompris/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gcompris/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gcompris/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gcompris/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update geany vte3 geany-plugins-commander geany-plugins-spellcheck geany-plugins-lang geany-plugins-pretty-printer geany-plugins-overview geany-plugins-scope\nLABEL oc.icon=\"geany.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgdmVyc2lvbj0iMS4wIgogICB3aWR0aD0iMjU2IgogICBoZWlnaHQ9IjI1NiIKICAgaWQ9InN2ZzIiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIzNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzIzNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMyMzkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC41IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMyNDEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC43NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMjQzIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxOTc0NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTk3NDYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxOTc0OCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VkZDQwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjc4NTk3Mjk1IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDE5NzUwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNDY2NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTQ2NjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxNDY2OCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTIyOTQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDEyMjk2IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmVmOGM0O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTIyOTgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDExODUzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMTg1NSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDExODU3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ4Mjg1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A4Mjg3IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY2YzZjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wODI4OSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2NjMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzQ5OSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzUwMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZjVhYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDc1MDMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcxMDYiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxMDgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTEwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MzI4Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MzMwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjMzMiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTUzOSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTU0MSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU1NDMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM1NzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTc0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzkwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyNzkyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjc5NCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjE4OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjE5MCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM2MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZGQ0MDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4yMDU1MjkyNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODQ4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODUwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWRkNDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjE5MiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIzLjA3ODQwOSIKICAgICAgIGN5PSIxMi43NDM1OSIKICAgICAgIHI9IjMuNSIKICAgICAgIGZ4PSIyMy4wNzg0MDkiCiAgICAgICBmeT0iMTIuNzQzNTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMTg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mjc5MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1Ljg2NDkyNjQsLTE0LjA3NTgyMSwtMTAuMDAwMDAzLC0xMC42NjY2NjYsMTAzLjYzODMxLDMxNi43NzkyKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIxIgogICAgICAgeTE9IjM3LjY3ODIiCiAgICAgICB4Mj0iNDIuMjMwNzY2IgogICAgICAgeTI9IjU0LjE3OTYyNiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ3NTEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjI5NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxMiwwLDAsNi43ODcyOTE3LC0xNjUuMzMzMzQsLTI1NS43MzI5MykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyMy41IgogICAgICAgY3k9IjE5LjUiCiAgICAgICByPSIxNC41IgogICAgICAgZng9IjIzLjUiCiAgICAgICBmeT0iMTkuNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDU1NDUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1NTM5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNjU1MTcyMywwLDAsMC43MzU2MzIsODYuNDM2Nzg5LC0xMjYuMzQ0ODEpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMjEuNjI0OTk4IgogICAgICAgY3k9IjE2Ljc0OTk5OCIKICAgICAgIHI9IjUuNSIKICAgICAgIGZ4PSIyMS42MjQ5OTgiCiAgICAgICBmeT0iMTYuNzQ5OTk4IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NTkzNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc0OTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMy43MzMzMzM4LDAsMCwtMy44Nzg3ODc3LDM0LjkzMzMzNiwtNzMuNjk2OTYyKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEwLjQ1MDU4NSIKICAgICAgIGN5PSIyNy4zMzEzOTgiCiAgICAgICByPSI3IgogICAgICAgZng9IjEwLjQ1MDU4NSIKICAgICAgIGZ5PSIyNy4zMzEzOTgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ2NzE3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjMyOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxMy45OTk5OTgsMTQuNjM2NTg2LC0yLjMwODgzMTUsMTEuNzE3MzYyLC0yNi41Mzc5MTIsLTU1NC4zMzU1MykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyNCIKICAgICAgIGN5PSIzOC41IgogICAgICAgcj0iNiIKICAgICAgIGZ4PSIyNCIKICAgICAgIGZ5PSIzOC41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzExMiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxMDYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTUuNTU1NTU2LDAsMCw1Ljc3Nzc3NjUsLTI0OC4wMDAwMSwtMjA5LjExMTA3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIzLjUiCiAgICAgICBjeT0iMTkuNSIKICAgICAgIHI9IjE0LjUiCiAgICAgICBmeD0iMjMuNSIKICAgICAgIGZ5PSIxOS41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzExNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDU1MzkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi45NDI1Mjg1LDAsMCwxLjI4NzM1NjMsNTguODUwNTc2LC0xNy4xMDM0NDIpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMjIuOTk5OTk4IgogICAgICAgY3k9IjI4LjUiCiAgICAgICByPSIzIgogICAgICAgZng9IjIyLjk5OTk5OCIKICAgICAgIGZ5PSIyOC41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTE4NjUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ4Mjg1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDMuMTk5OTk4OSwwLDAsNi4yMjIyMjI5LDEuMDY2Njg1MiwtMjM5LjE1NTYzKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIxIgogICAgICAgeTE9IjI2IgogICAgICAgeDI9IjI1IgogICAgICAgeTI9IjMxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTE4NjciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMTg1MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjc3Nzc3NzEsMCwwLDQuNDQ0NDQ0MywzMy43Nzc3OCwtMTg2LjI2NjcxKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjIyLjk5OTk5OCIKICAgICAgIGN5PSIyOC41IgogICAgICAgcj0iMyIKICAgICAgIGZ4PSIyMi45OTk5OTgiCiAgICAgICBmeT0iMjguNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE0MjU5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50ODI4NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgzLjIsMCwwLDYuMjIyMjIyOSw5Ny4wNjY2NjEsLTIzOC42NjY2OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMSIKICAgICAgIHkxPSIyNiIKICAgICAgIHgyPSIyNSIKICAgICAgIHkyPSIzMSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE0MjYxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTE4NTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS43Nzc3NzcxLDAsMCw0LjQ0NDQ0NDMsMTI5Ljc3Nzc4LC0xODUuNzc3NzcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iMTIiCiAgICAgICB5MT0iMTQiCiAgICAgICB4Mj0iNDQuNTY1MjE2IgogICAgICAgeTI9IjQ3LjY4NzUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNzEwOSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM1NzAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC45MDY2NjY2LDAsMCw0Ljc0MDc0MDgsNC42MjIzNzE1ZS02LC0xOTkuNDA3NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIyMi45OTk5OTgiCiAgICAgICBjeT0iMjguNSIKICAgICAgIHI9IjMiCiAgICAgICBmeD0iMjIuOTk5OTk4IgogICAgICAgZnk9IjI4LjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxNzE3MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDgyODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNS4zMzMzMzA2LDAsMCw4LjI5NjI5NDksNS4wODU1NDE0ZS01LC0yODEuNzc3NzUpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iMjEiCiAgICAgICB5MT0iMjYiCiAgICAgICB4Mj0iMjUiCiAgICAgICB5Mj0iMzEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxNzE3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDExODUzIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuOTYyOTYxNiwwLDAsNS45MjU5MjM3LDU0LjUxODU0NCwtMjExLjI1OTIxKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEzLjA3MTQ1NyIKICAgICAgIGN5PSIyMS4wOTQ0ODIiCiAgICAgICByPSIxNS41IgogICAgICAgZng9IjEzLjA3MTQ1NyIKICAgICAgIGZ5PSIyMS4wOTQ0ODIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxNzcwNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3OTAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNy42MTkwNDE2LDEyLjA0NjIyNywtOS44ODI3MTc4LDguNjIyNTg2MSwxNzcuODQ5NzQsLTQ0Ni4wMzQwNykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODA5OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSIzLjUiCiAgICAgICBjeT0iMTYuOTY5MTIyIgogICAgICAgcj0iMy4wNDc3MjI2IgogICAgICAgZng9IjMuNSIKICAgICAgIGZ5PSIxNi45NjkxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODEyOCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE0NjY0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTI5MDY3NywxLjI2OTc2MjMsLTEuMzEyNDU1NSwwLjc4NzQ3MzIsMjMuOTE5NDgsLTEuMDA2ODk3OCkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSI0MC4wMzU3MTciCiAgICAgICB5MT0iMTIuMzU4ODUzIgogICAgICAgeDI9IjQxLjY2MDcxMyIKICAgICAgIHkyPSIzNS4zOTQ1NjkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxOTc0MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE5NzQ0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDUuMzMzMzMzMywwLDAsNS4zMzMzMzMzLC0xLjI5MTQzNGUtNywtMjA3Ljk5OTk5KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjEzLjgxOTM0MiIKICAgICAgIGN5PSI4Ljg3OTg1MDQiCiAgICAgICByPSIxNC41IgogICAgICAgZng9IjEzLjgxOTM0MiIKICAgICAgIGZ5PSI4Ljg3OTg1MDQiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxOTc3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM1NzAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MDI0OTY1LDIuNDUyMTA3MiwtMy4wMTY0NTYsMy44ODc4NzY4LDg2Ljc0NzMwNywtMTgzLjk2NTgxKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjMiCiAgICAgICB5MT0iMjciCiAgICAgICB4Mj0iMzkiCiAgICAgICB5Mj0iMjgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODQ2IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjE4OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDUuMzMzMzMzMywtMS4yOTE0MzRlLTcsLTIwNy45OTk5OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSI4IgogICAgICAgeTE9IjM5IgogICAgICAgeDI9IjM4IgogICAgICAgeTI9IjM5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzIzMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMyMzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNS4zMzMzMzMzLDAsMCw1LjMzMzMzMzMsLTEuMjkxNDM0ZS03LC0yMDcuOTk5OTkpIiAvPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlPjI5LTA2LTA3PC9kYzpkYXRlPgogICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+U2ViYXN0aWFuIEtyYWZ0PC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+YXBwbGljYXRpb248L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5nZWFueTwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPmVkaXRvcjwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnByb2dyYW1taW5nPC9yZGY6bGk+CiAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyMDgpIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjE4LjY2NjY4LDEzLjMzMzMzNyBjIDAsMTkuMTM2IC00MS44MTMzNCwzNC42NjY2NjEgLTkzLjMzMzM0LDM0LjY2NjY2MSBDIDczLjgxMzMzMyw0Ny45OTk5OTggMzIsMzIuNDY5MzM3IDMyLDEzLjMzMzMzNyBjIDAsLTE5LjEzNTk5NTEgNDEuODEzMzMzLC0zNC42NjY2NjIgOTMuMzMzMzQsLTM0LjY2NjY2MiA1MS41MiwwIDkzLjMzMzM0LDE1LjUzMDY2NjkgOTMuMzMzMzQsMzQuNjY2NjYyIHoiCiAgICAgICBpZD0icGF0aDY3MjEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3MTEyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC40ODMwNDU4OHB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxOTkuOTk5OTksOC4wMDAwMDg2IGMgMCwxNC43MjAwMDA0IC0zNC42NDUzMywyNi42NjY2NjY0IC03Ny4zMzMzMywyNi42NjY2NjY0IC00Mi42ODc5OTMsMCAtNzcuMzMzMzMsLTExLjk0NjY2NiAtNzcuMzMzMzMsLTI2LjY2NjY2NjQgMCwtMTQuNzIgMzQuNjQ1MzM3LC0yNi42NjY2NjY2IDc3LjMzMzMzLC0yNi42NjY2NjY2IDQyLjY4OCwwIDc3LjMzMzMzLDExLjk0NjY2NjYgNzcuMzMzMzMsMjYuNjY2NjY2NiB6IgogICAgICAgaWQ9InBhdGgzNTgwIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzIzMyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMxNThweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTcwLjY2NjY2LDguMDAwMDA4NiBjIDAsMTAuMzA0MDAwNCAtMTkuMTE0NjcsMTguNjY2NjY2NCAtNDIuNjY2NjcsMTguNjY2NjY2NCAtMjMuNTUyLDAgLTQyLjY2NjY1NywtOC4zNjI2NjYgLTQyLjY2NjY1NywtMTguNjY2NjY2NCAwLC0xMC4zMDQgMTkuMTE0NjU3LC0xOC42NjY2NjY2IDQyLjY2NjY1NywtMTguNjY2NjY2NiAyMy41NTIsMCA0Mi42NjY2Nyw4LjM2MjY2NjYgNDIuNjY2NjcsMTguNjY2NjY2NiB6IgogICAgICAgaWQ9InBhdGg3MTE0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzExNik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTk0LjY2NjY3LDUuNTc3ODE2NiBjIDAsMTMuMTEzMDUwNCAtMzIuMjU2LDIzLjc1NTUxNDQgLTcxLjk5OTk5LDIzLjc1NTUxNDQgLTM5Ljc0NDAwOCwwIC03Mi4wMDAwMTYsLTEwLjY0MjQ2NCAtNzIuMDAwMDE2LC0yMy43NTU1MTQ0IDAsLTEzLjExMzA1MDcgMzIuMjU2MDA4LC0yMy43NTU1MjU2IDcyLjAwMDAxNiwtMjMuNzU1NTI1NiAzOS43NDM5OSwwIDcxLjk5OTk5LDEwLjY0MjQ3NDkgNzEuOTk5OTksMjMuNzU1NTI1NiB6IgogICAgICAgaWQ9InBhdGg0MzYyIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NDc1MSk7c3Ryb2tlLXdpZHRoOjUuMzMzMzMyNTRweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMTYwLDMuMjQzOTI2NGUtNiBDIDE2MCw4LjgzMjAwODYgMTQzLjI3NDY3LDE2LjAwMDAwOSAxMjIuNjY2NjcsMTYuMDAwMDA5IDEwMi4wNTg2NywxNi4wMDAwMDkgODUuMzMzMzMzLDguODMyMDA4NiA4NS4zMzMzMzMsMy4yNDM5MjY0ZS02IDg1LjMzMzMzMywtOC44MzE5OTE0IDEwMi4wNTg2NywtMTUuOTk5OTkxIDEyMi42NjY2NywtMTUuOTk5OTkxIDE0My4yNzQ2NywtMTUuOTk5OTkxIDE2MCwtOC44MzE5OTE0IDE2MCwzLjI0MzkyNjRlLTYgeiIKICAgICAgIGlkPSJwYXRoMzU3OCIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2M0YTAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4zODE2OTg3M3B4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjAuOTQwMjksLTEzNS45OTk5OSBjIC00MC41MzkxODYsMCAtNzMuNDM0ODQsMTYuNjkxNSAtNzMuNDM0ODQyLDM3LjMwMTE2MSAwLDUuNDE5OTUyIC0wLjgxNDY1MiwxNi45NDEwMjQgMC41OTQ2MTQsMzAuNDQzMTA0IEMgMzQuODI4OTAxLC03My4zNjk2MTggMzQuODQzNTA4LC04NC44NjU0MSAzMy42ODA2NzEsLTk4LjUzMTU2IGwgLTE0Ljg2NTM1MiwwIGMgLTAuMDQxNiwwLjkzMTE0NyAtMC4xNDg2NTMsMS45MDE0ODggLTAuMTQ4NjUzLDIuODQzNTkgNC44OTQyOTQsNTkuOTgwMzM2IDUxLjg2ODUxMyw5Ni4wODY2MTg1OCAxMDIuMjczNjI0LDk4LjM1NDYzOTkgMjAuMjY5NTgsMCA0NS40NTM2NywtNS41MDAwMTYgNjEuMDk2NTksLTMyLjI4MzA3MTkgMTUuNjQyOTQsLTI2Ljc4MzA0NiAxMi4zMzgyNCwtNTguNzc3NjExIDEyLjMzODI1LC02OS4wODI0MjcgMCwtMjAuNjA5NjUxIC0zMi44OTU2NywtMzcuMzAxMTYxIC03My40MzQ4NCwtMzcuMzAxMTYxIHoiCiAgICAgICBpZD0icGF0aDIxOTYiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyODQ2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2M0YTAwMDtzdHJva2Utd2lkdGg6NS4zMzMzMzE1OHB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAyNiwxNy41IGEgMy41LDAuNSAwIDEgMSAtNywwIDMuNSwwLjUgMCAxIDEgNywwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgzLjgwOTUyMzcsMCwwLDE2LjAwMDAwMiwzNi45NTIzODcsLTM5Mi4wMDAwMykiCiAgICAgICBpZD0icGF0aDM2MjgiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNjNGEwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNlZGQ0MDA7c3Ryb2tlLXdpZHRoOjAuNjgzMTMwMDNweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDEwMS4zMzMzMywtMTA2LjY2NjY2IGMgMCwxNC43MjAwMDcgNjAuOCwyNi42NjY2NjggMjQsMjYuNjY2NjY4IC0zNi43OTk5OTcsMCAtNjYuNjY2NjYzLC0xMS45NDY2NjEgLTY2LjY2NjY2MywtMjYuNjY2NjY4IDAsLTE0LjcyIDI5Ljg2NjY2NiwtMjYuNjY2NjcgNjYuNjY2NjYzLC0yNi42NjY2NyAzNi44LDAgLTI0LDExLjk0NjY3IC0yNCwyNi42NjY2NyB6IgogICAgICAgaWQ9InBhdGgzMTg3IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC42O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTk3NzQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkxMzQ1OTM2cHg7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE4My45OTk5OSwtMTA5LjMzMzMyIGMgMCwxMS43NzU5OSAtMjcuNDc3MzIsMjEuMzMzMzI4IC02MS4zMzMzMiwyMS4zMzMzMjggLTMzLjg1NjAwMywwIC02MS4zMzMzNDIsLTkuNTU3MzM4IC02MS4zMzMzNDIsLTIxLjMzMzMyOCAwLC0xMS43NzYwMSAyNy40NzczMzksLTIxLjMzMzM0IDYxLjMzMzM0MiwtMjEuMzMzMzQgMzMuODU2LDAgNjEuMzMzMzIsOS41NTczMyA2MS4zMzMzMiwyMS4zMzMzNCB6IgogICAgICAgaWQ9InBhdGgxNjMzOSIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6bm9uZTtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDE3MTA5KTtzdHJva2Utd2lkdGg6NS4zMzMzMzMwMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDU2LjY2NjY2NywtMTA2LjY2NjY2IGMgMCw0Ljg4Mjg1IC00LjA5MDczMSwzMC43MTc4NjMgLTMuMzMzMzM0LDQyLjY2NjY2OCAwLjM3ODY5OSw1Ljk3NDQwNiAtMjYuMTA1MjI0LC0yMS45MzIyMDggLTIxLjY2NjY2NiwtMjYuNjY2NjY2IDEwLC0xMC42NjY2NjIgLTUsMCAtNSw1LjMzMzMzMyAwLDQyLjk5ODcwOSA1MC43NzE4NzcsNjkuNzE3NjQzIDU4LjA5Mjc4NCw3NC4yMDI2NzIgNy4zMjA5MTcsNC40ODUwMjQyIDE1LjAzNDAzNyw1Ljc5NzMyODIgMjEuOTA3MjE5LDUuNzk3MzI4MiAwLDAgMjEuMzMzMzMsLTgwLjAwMDAwMDIgMjEuMzMzMzMsLTgwLjAwMDAwMDIgLTIzLjcyMTY0LDAgLTY1LjI3MTYyNywtOC42MjczNjUgLTcxLjMzMzMzMywtMjEuMzMzMzM1IHoiCiAgICAgICBpZD0icGF0aDU5MzkiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ2NzE3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxODkuMzMzMzMsLTEwNi43ODIwNCBjIDAsMTMuMzExNjkxIC0yOS44NjY2NiwyNC4xMTUzODIgLTY2LjY2NjY2LDI0LjExNTM4MiAtMzYuNzk5OTkzLDAgLTY2LjY2NjY2NSwtMTAuODAzNjkxIC02Ni42NjY2NjUsLTI0LjExNTM4MiAwLC0xMy4zMTE3IDI5Ljg2NjY3MiwtMjQuMTE1MzkgNjYuNjY2NjY1LC0yNC4xMTUzOSAzNi44LDAgNjYuNjY2NjYsMTAuODAzNjkgNjYuNjY2NjYsMjQuMTE1MzkgeiIKICAgICAgIGlkPSJwYXRoMTU5NDgiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxNDkuMzMzMzMsLTExMS45OTk5OSBjIDAsNS44ODggLTEwLjc1MiwxMC42NjY2NyAtMjQsMTAuNjY2NjcgLTEzLjI0Nzk5LDAgLTIzLjk5OTk5LC00Ljc3ODY3IC0yMy45OTk5OSwtMTAuNjY2NjcgMCwtNS44ODggMTAuNzUyLC0xMC42NjY2NiAyMy45OTk5OSwtMTAuNjY2NjYgMTMuMjQ4LDAgMjQsNC43Nzg2NiAyNCwxMC42NjY2NiB6IgogICAgICAgaWQ9InBhdGg1MTU0IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4xO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTU0NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTIxLjIwNTMsLTEzMC42NjY2NiBjIC0zNy40NjAwMiwwIC02OC4yNTk5MiwxNC45OTU5NSAtNjguMjU5OTIsMzQuMDIzODE1IDAsMCAwLjk2MDQyOCwzMy45NzYxOTIgMC45NjA0MjgsMzMuOTc2MTkyIC0xMy44NDQ1MiwtMi4yNjE5MDQgLTIxLjk3NjY3NiwtMTEuNSAtMjIuNzEwODU1LC0zMC4wMDAwMDUgLTQuNzc1NzI5LC0xLjcxMDcyNiAtNS4yMDM1NDUsMC41OTQ2NSAtNy4xOTQ5NTQsMS41MDAwMDUgOC42Nzc1ODksNTQuNzc3ODgzIDUwLjQyNTYxNyw4Ni4yODQ0NDgyIDk3LjIwNTMwMSw4OC41MDAwMDU2IDE4LjczMDAxLDAgNDIuMDc2OTksLTUuMTA1ODg4IDU2LjUzMTc4LC0yOS44MzMzMzM2IDE0LjQ1NDc3LC0yNC43Mjc0MzUgMTEuMzA2MzYsLTU0LjE1Mjc1NyAxMS4zMDYzNSwtNjMuNjY2NjcyIDAsLTE5LjAyNzg1NyAtMzAuMzc4MTEsLTM0LjUwMDAwNyAtNjcuODM4MTMsLTM0LjUwMDAwNyB6IgogICAgICAgaWQ9InBhdGgyMjA2IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTp1cmwoI3JhZGlhbEdyYWRpZW50MTc3MDYpO3N0cm9rZS13aWR0aDo1LjMzMzMzMjU0cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE0MS4zMzMzNCwtMTMzLjMzMzMxIGMgMCwtNy4zNjAwMSAtOC4zNjI2OCwtMTMuMzMzMzQgLTE4LjY2NjY3LC0xMy4zMzMzNCAtMTAuMzA0LDAgLTE4LjY2NjY2LDUuOTczMzMgLTE4LjY2NjY2LDEzLjMzMzM0IDAsNy4zNTk5OSA4LjM2MjY2LDI0IDE4LjY2NjY2LDI0IDEwLjMwMzk5LDAgMTguNjY2NjcsLTE2LjY0MDAxIDE4LjY2NjY3LC0yNCB6IgogICAgICAgaWQ9InBhdGgyMjAxIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTkzNCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDlweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTM2LjAwMDAxLC0xMzEuODA5NTEgYyAwLC01LjI1NzE0IC01Ljk3MzM0LC05LjUyMzgxIC0xMy4zMzMzNCwtOS41MjM4MSAtNy4zNTk5OSwwIC0xMy4zMzMzMyw0LjI2NjY3IC0xMy4zMzMzMyw5LjUyMzgxIDAsNS4yNTcxNCA1Ljk3MzM0LDE3LjE0Mjg2IDEzLjMzMzMzLDE3LjE0Mjg2IDcuMzYsMCAxMy4zMzMzNCwtMTEuODg1NzIgMTMuMzMzMzQsLTE3LjE0Mjg2IHoiCiAgICAgICBpZD0icGF0aDIyMDQiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjcmFkaWFsR3JhZGllbnQzMTg1KTtzdHJva2Utd2lkdGg6NS4zMzMzMzMwMnB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3NC42NjY2NjEsLTc3LjgyMjI2OSAtNy45OTk5OTQsMTYuMDAwMDA1IDcuOTk5OTk0LDE2IDguMDAwMDA2LC0xNiAtOC4wMDAwMDYsLTE2LjAwMDAwNSB6IgogICAgICAgaWQ9InBhdGgxMTg2MSIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTg2NSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNhNDAwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzMDI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNzQuNjY2NjY3LC03NS4xNTU2MDIgLTUuMzMzMzM0LDEzLjMzMzMzOCA1LjMzMzMzNCwxMy4zMzMzMjggMCwtMjYuNjY2NjY2IHoiCiAgICAgICBpZD0icGF0aDExODYzIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDExODY3KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE3MC42NjY2NywtNzcuMzMzMzMgLTgsMTYuMDAwMDA1IDgsMTYgOCwtMTYgLTgsLTE2LjAwMDAwNSB6IgogICAgICAgaWQ9InBhdGgxNDI1NSIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxNDI1OSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNhNDAwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzMDI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTcwLjY2NjY3LC03NC42NjY2NjQgLTUuMzMzMzQsMTMuMzMzMzM5IDUuMzMzMzQsMTMuMzMzMzI4IDAsLTI2LjY2NjY2NyB6IgogICAgICAgaWQ9InBhdGgxNDI1NyIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxNDI2MSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjIuNjY2NjYsLTY2LjY2NjY1MyAtMTMuMzMzMzIsMjEuMzMzMzI4IDEzLjMzMzMyLDIxLjMzMzMzNCBMIDEzNiwtNDUuMzMzMzI1IDEyMi42NjY2NiwtNjYuNjY2NjUzIHoiCiAgICAgICBpZD0icGF0aDE3MTY4IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE3MTcyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2E0MDAwMDtzdHJva2Utd2lkdGg6NS4zMzMzMzI1NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMjIuNjY2NjcsLTYzLjExMTEwNiAtOC44ODg4OCwxNy43Nzc3ODYgOC44ODg4OCwxNy43Nzc3NjYgMCwtMzUuNTU1NTUyIHoiCiAgICAgICBpZD0icGF0aDE3MTcwIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDE3MTc0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDUsMjAuNSBhIDIsMS41IDAgMSAxIC00LDAgMiwxLjUgMCAxIDEgNCwwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDMuNTU1NTU2OCw3Ljk5OTk5OTksLTE3MS41NTU1NykiCiAgICAgICBpZD0icGF0aDE3MjAzIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojMmUzNDM2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojYzRhMDAwO3N0cm9rZS13aWR0aDoxLjIyNDc0NDY4cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3LDE4IGEgMi41LDMgMCAxIDEgLTUsMCAyLjUsMyAwIDEgMSA1LDAgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDkuNiwwLDAsOCwtOC41MzMzMzM1LC0zMjIuNjY2NjYpIgogICAgICAgaWQ9InBhdGgxODEwOSIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE4MTI0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41NDc3MjI0NnB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3LDE4IGEgMi41LDMgMCAxIDEgLTUsMCAyLjUsMyAwIDEgMSA1LDAgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDcuNDY2NjY2NywwLDAsNi4yMjIyMjE5LC05LjYwMDAwMDEsLTI2My45OTk5OCkiCiAgICAgICBpZD0icGF0aDE4MTA1IgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTgxMjYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjY4NDY1MzFweDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNywxOCBhIDIuNSwzIDAgMSAxIC01LDAgMi41LDMgMCAxIDEgNSwwIHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg1LjMzMzMzMzMsMCwwLDQuNDQ0NDQ0OCw1LjMzMzMzMzIsLTIxMC42NjY2NykiCiAgICAgICBpZD0icGF0aDE4MTAxIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTgxMjgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjkxMjg3MDc2cHg7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDcsMTggYSAyLjUsMyAwIDEgMSAtNSwwIDIuNSwzIDAgMSAxIDUsMCB6IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC4yNjY2NjY3LDAsMCwzLjU1NTU1NTcsMi4xMzMzMzMyLC0xNzYpIgogICAgICAgaWQ9InBhdGgxNzcwOCIKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE4MDk5KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wOTU0NDQ5MnB4O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAzNC42NjY2NjcsLTIwNS4zMzMzMyBjIC0xNC43MiwwIC0yNi42NjY2NjcxLDExLjk0NjY3IC0yNi42NjY2NjcxLDI2LjY2NjY3IDAsMy43NjE1NiAwLjkyNjE1MTUsNy4yNTM3MiAyLjMzMzMzMzEsMTAuNSAtNC42MzU3MTA3LDMuOTE0MzEgLTcuNjY2NjY2NSw5LjYyODk2IC03LjY2NjY2NjUsMTYuMTY2NjcgMCw4LjAxNjMgNC40NTczMDMsMTQuODU0OTIgMTEuMDAwMDAwNSwxOC41IC0wLjE3MjA1OCwwLjkzOTU5IC0wLjMzMzMzNCwxLjg0NDI3IC0wLjMzMzMzNCwyLjgzMzMzIDAsMi41MjM4OCAwLjYyNDQwOCw0Ljg3NjM0IDEuNjY2NjY3LDcgLTQuMTU2MjI0LDIuMjU4NzMgLTcuMDAwMDAwMSw2LjYwNjY2IC03LjAwMDAwMDEsMTEuNjY2NjcgMCw3LjM2IDUuOTczMzMzMSwxMy4zMzMzMzIgMTMuMzMzMzMzMSwxMy4zMzMzMzIgNy4zNiwwIDEzLjMzMzMzNCwtNS45NzMzMzIgMTMuMzMzMzM0LC0xMy4zMzMzMzIgMCwtMS4yMjE1OCAtMC4xOTE4NjgsLTIuMzc1NzkgLTAuNSwtMy41IDYuNDM0MzQ2LC0yLjA3Mjg2IDExLjE2NjY2NiwtOC4wNDU4NiAxMS4xNjY2NjYsLTE1LjE2NjY3IDAsLTMuNjk1MTUgLTEuMjI2OTkyLC03LjEyMzgxIC0zLjMzMzMzMywtOS44MzMzMyAyLjEwMzE3MywtMy4zMDUxIDMuMzMzMzMzLC03LjI5NDk2IDMuMzMzMzMzLC0xMS41IDAsLTAuNzM5MjIgLTAuMjU5ODI2LC0xLjQ0Njc1IC0wLjMzMzMzMywtMi4xNjY2NyA5LjU3LC00LjA1IDE2LjMzMzMzMywtMTMuNDYgMTYuMzMzMzMzLC0yNC41IDAsLTE0LjcyIC0xMS45NDY2NjcsLTI2LjY2NjY3IC0yNi42NjY2NjYsLTI2LjY2NjY3IHoiCiAgICAgICBpZD0icGF0aDE4MTEzIgogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTojYmFiZGI2O3N0cm9rZS13aWR0aDo1LjMzMzMzMzAycHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAzNC42NjY2NjcsLTIwMC4zMzMzMyBjIC0xMS45MjMyLDAgLTIxLjY2NjY2Nyw5Ljc0MzQ3IC0yMS42NjY2NjcsMjEuNjY2NjcgMCw0LjQ3MTIgMS41MDM1NzEsOC41NTI0NCAzLjgzMzMzMywxMiAtNS40MzAzMzUsMi42NTQ5NyAtOS4xNjY2NjY0LDguMjE4NCAtOS4xNjY2NjY0LDE0LjY2NjY3IDAsNy41Njk2OCA1LjE3NTk0MDQsMTMuODE3MDIgMTIuMTY2NjY2NCwxNS42NjY2NiAtMC45OTYxMywxLjY2NTI2IC0xLjY2NjY2NiwzLjU4NjQyIC0xLjY2NjY2Niw1LjY2NjY3IDAsNi4xMzMzNCA1LjAzMzMzMywxMS4xNjY2NyAxMS4xNjY2NjYsMTEuMTY2NjcgNi4xMzMzMzQsMCAxMS4xNjY2NjgsLTUuMDMzMzMgMTEuMTY2NjY3LC0xMS4xNjY2NyAwLC00LjA1MzA4IC0yLjI1NTQ4NiwtNy41NTkxOCAtNS41LC05LjUgMy4yMTI3NjIsLTIuOTgzMzcgNS4zMzMzMzMsLTcuMTA2NTYgNS4zMzMzMzMsLTExLjgzMzMzIDAsLTEuOTkxMDQgLTAuMzQ2ODE2LC0zLjkwMTgyIC0xLC01LjY2NjY3IDkuNjU2MDMxLC0yLjE1NDYgMTcsLTEwLjY5NzYxIDE3LC0yMSAwLC0xMS45MjMyIC05Ljc0MzQ2NywtMjEuNjY2NjcgLTIxLjY2NjY2NiwtMjEuNjY2NjcgeiBtIC0xMy4zMzMzMzQsNzkuODMzMzQgYyAtNC43MTA0LDAgLTguNSwzLjc4OTU5IC04LjUsOC41IDAsNC43MTA0IDMuNzg5Niw4LjUgOC41LDguNSA0LjcxMDQsMCA4LjUsLTMuNzg5NjEgOC41LC04LjUgMCwtNC43MTA0IC0zLjc4OTYsLTguNSAtOC41LC04LjUgeiIKICAgICAgIGlkPSJwYXRoMTgxMzAiCiAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjQuNDQ0NDQzN3B4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjE4LjY2NjY3LC0xNTEuOTk5OTkgYyAtMTkuMjA1MzQsMCAtMzIsMTUuNDYxMzMgLTMyLDM0LjY2NjY3IEwgMTkyLC0xMDYuNjY2NjYgYyAtMWUtNSwtMTUuODE2MTUgNS4wODI2NywtMjkuMzMzMzMgMjEuMzMzMzMsLTI5LjMzMzMzIDE2LjI1MDY2LDAgMjkuMzMzMzQsMTIuNjgzODQgMjkuMzMzMzQsMjguNSBsIDAsNDguMzMzMzMyIGMgLTIuMDE2OTQsMjUuMTIwNTQ5IC0zOS4zODg4NCwzMC4wODAxNDkgLTU5LDMzLjgzMzMzMyAtMi4zODc0MywzLjQ5Mzg0IC00Ljk0NDU1LDYuNTUyMTk4IC03LjY2NjY3LDkuMzMzMzM0IDI1Ljk5MDc3LC03LjA0MjQ0MyA3NC41NzcyMywtNy4zOTY4ODYgNzcuMzMzMzMsLTQyLjY2NjY2NyBsIDAsLTU4LjY2NjY2MiBjIDAsLTE5LjIwNTM0IC0xNS40NjEzMywtMzQuNjY2NjcgLTM0LjY2NjY2LC0zNC42NjY2NyB6IgogICAgICAgaWQ9InJlY3QxOTMzNSIKICAgICAgIHN0eWxlPSJmaWxsOiNlZGQ0MDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNjNGEwMDA7c3Ryb2tlLXdpZHRoOjUuMzMzMzMyNTQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTkyLC0xMjIuNjY2NjYgYyAxNiwtNDIuNjY2NjcgNTQuMTkwNDcsLTE4Ljg1NzE0IDU1LjYxOTA1LDAuNjY2NjcgbCAtMC40NzYxOSw2Ni42NjY2NjUgYyAwLDE2LjE5MDQ4IC0yOC40NzYxOSwyOC42NjY2NjcgLTY1LjgwOTUzLDM0IgogICAgICAgaWQ9InBhdGgxOTM1MyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQxOTc0Mik7c3Ryb2tlLXdpZHRoOjUuMzMzMzMzNDk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"geany,text,editor,geany,ide\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"geany.desktop\"\nLABEL oc.launch=\"geany.Geany\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"geany\"\nLABEL oc.displayname=\"Geany\"\nLABEL oc.path=\"/usr/bin/geany\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;text/x-java;text/x-dsrc;text/x-pascal;text/x-perl;text/x-python;application/x-php;application/x-httpd-php3;application/x-httpd-php4;application/x-httpd-php5;application/xml;text/html;text/css;text/x-sql;text/x-diff;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"geany\"\nENV APPBIN \"/usr/bin/geany\"\nENV APP \"/usr/bin/geany\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/geany/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/geany/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/geany/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/geany/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gedit\nLABEL oc.icon=\"gedit.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZpZXdCb3g9IjAgMCAxMjggMTI4IgogICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJzdmcxMTMwMCIKICAgaGVpZ2h0PSIxMjgiCiAgIHdpZHRoPSIxMjgiPgogIDx0aXRsZQogICAgIGlkPSJ0aXRsZTQxNjIiPkFkd2FpdGEgSWNvbiBUZW1wbGF0ZTwvdGl0bGU+CiAgPGRlZnMKICAgICBpZD0iZGVmczMiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMDM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MwYmZiYztzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEwMjYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTAyOCIKICAgICAgICAgb2Zmc2V0PSIwLjA0NTQ1NDU0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDEwMzAiCiAgICAgICAgIG9mZnNldD0iMC4wOTA5MDkwOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RlZGRkYTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMDMyIgogICAgICAgICBvZmZzZXQ9IjAuOTA5MDkwODgiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkZWRkZGE7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC45NTQ1NDU0NCIKICAgICAgICAgaWQ9InN0b3AxMDM0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzBiZmJjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMTAzNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDIyMTMiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxyZWN0CiAgICAgICAgIHJ5PSI4IgogICAgICAgICByeD0iOCIKICAgICAgICAgeT0iLTE4OCIKICAgICAgICAgeD0iMTYwIgogICAgICAgICBoZWlnaHQ9IjU2IgogICAgICAgICB3aWR0aD0iMTYiCiAgICAgICAgIGlkPSJyZWN0MjIxNSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMDA1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QwYmI4ZTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEwMDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMDAzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTM1MS0zIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AxMzQ3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNWQzY2Y7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTM0OS02IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMzUuOTk5OTkpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iLTI3NiIKICAgICAgIHgyPSIxMTUuOTk5OTkiCiAgICAgICB5MT0iLTI3NiIKICAgICAgIHgxPSIyNy45OTk5OSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDExNTkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMDM4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDc2MjEyMjQsLTAuNDQ0MTk3MjMsMC40NDQxOTcyNSwtMC4wNzYyMTIyMyw3Ny43MjU3OTQsMzMxLjgzODA3KSIKICAgICAgIHkyPSItMTI3LjM5OTE1IgogICAgICAgeDI9IjE1OC41MTgwMiIKICAgICAgIHkxPSItOTcuNjk4Mjg4IgogICAgICAgeDE9IjEyOC44MTcxNyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTEwMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwMDUiIC8+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDE2MDktNyIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6I2U3NDc0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4yNXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMjUyLDExNiAyOCwtMjggdiAtOCBoIC0zNiB2IDM2IHoiCiAgICAgICAgIGlkPSJwYXRoMTYxMS01IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjcyIgogICAgICAgeDI9IjM0MCIKICAgICAgIHkxPSI3NiIKICAgICAgIHgxPSIzNDQiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsMTgwLDgzKSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTEzMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEzNTEtMyIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMTA2MiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSkiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Y2ZjVmNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBpZD0icmVjdDEwNjQiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaGVpZ2h0PSIxMDgiCiAgICAgICAgIHg9Ii0xMDgiCiAgICAgICAgIHk9Ii0xMTYiCiAgICAgICAgIHJ4PSI4IgogICAgICAgICByeT0iOCIKICAgICAgICAgY2xpcC1wYXRoPSJub25lIiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkdOT01FIERlc2lnbiBUZWFtPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpzb3VyY2UgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyIgLz4KICAgICAgICA8ZGM6dGl0bGU+QWR3YWl0YSBJY29uIFRlbXBsYXRlPC9kYzp0aXRsZT4KICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgIDxyZGY6QmFnIC8+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxkYzpkYXRlIC8+CiAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxkYzpwdWJsaXNoZXI+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZSAvPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnB1Ymxpc2hlcj4KICAgICAgICA8ZGM6aWRlbnRpZmllciAvPgogICAgICAgIDxkYzpyZWxhdGlvbiAvPgogICAgICAgIDxkYzpsYW5ndWFnZSAvPgogICAgICAgIDxkYzpjb3ZlcmFnZSAvPgogICAgICAgIDxkYzpkZXNjcmlwdGlvbiAvPgogICAgICAgIDxkYzpjb250cmlidXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y29udHJpYnV0b3I+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIj4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjUmVwcm9kdWN0aW9uIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEaXN0cmlidXRpb24iIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNOb3RpY2UiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNBdHRyaWJ1dGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjRGVyaXZhdGl2ZVdvcmtzIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjU2hhcmVBbGlrZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0xNzIpIgogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTpub25lIgogICAgICAgaWQ9ImxheWVyMiI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnOTIxMSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyI+CiAgICAgICAgPHJlY3QKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7ZmlsbDojZjBmMGYwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjU7bWFya2VyOm5vbmU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgICAgICBpZD0icmVjdDEzODA1IgogICAgICAgICAgIHdpZHRoPSIxMjgiCiAgICAgICAgICAgaGVpZ2h0PSIxMjgiCiAgICAgICAgICAgeD0iOS4yNjUxMzYyZS0wOCIKICAgICAgICAgICB5PSIxNzIiIC8+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgIGN4PSI2NC4wMDAwMzEiCiAgICAgICAgICAgY3k9IjIzNiIKICAgICAgICAgICByPSI1OS41MDQxMzEiCiAgICAgICAgICAgaWQ9ImNpcmNsZTI4OTIiCiAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MC4xO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTkwMDAwMDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjAuOTkwMDAwMDEsIDAuOTkwMDAwMDE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHJ5PSI3LjkyOTI4ODkiCiAgICAgICAgICAgcng9IjguNzAxMDA0IgogICAgICAgICAgIHk9IjE4MC40OTQ5NiIKICAgICAgICAgICB4PSIyMC40OTUwMDciCiAgICAgICAgICAgaGVpZ2h0PSIxMTEuMDEwMDUiCiAgICAgICAgICAgd2lkdGg9Ijg3LjAwOTk4NyIKICAgICAgICAgICBpZD0icmVjdDI4OTQiCiAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MC4xO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuOTkwMDAwMDE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5OjAuOTkwMDAwMDEsIDAuOTkwMDAwMDE7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHJ5PSI3LjkyMzgwOTUiCiAgICAgICAgICAgcng9IjcuOTIzODA5NSIKICAgICAgICAgICB5PSIxODQuNDk1MjQiCiAgICAgICAgICAgeD0iMTIuNDk1MjY2IgogICAgICAgICAgIGhlaWdodD0iMTAzLjAwOTUyIgogICAgICAgICAgIHdpZHRoPSIxMDMuMDA5NTIiCiAgICAgICAgICAgaWQ9InJlY3QyODk2IgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjAuMTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjk5MDAwMDAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTowLjk5MDAwMDAxLCAwLjk5MDAwMDAxO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgICAgPHJlY3QKICAgICAgICAgICByeT0iOC43MDEwMDUiCiAgICAgICAgICAgcng9IjcuOTI5Mjg4OSIKICAgICAgICAgICB5PSIyMDAuNDk0OTYiCiAgICAgICAgICAgeD0iOC40OTUwMDY2IgogICAgICAgICAgIGhlaWdodD0iODcuMDEwMDQ4IgogICAgICAgICAgIHdpZHRoPSIxMTEuMDEwMDQiCiAgICAgICAgICAgaWQ9InJlY3QyODk4IgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjAuMTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjk5MDAwMDAxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTowLjk5MDAwMDAxLCAwLjk5MDAwMDAxO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpZD0icGF0aDI5MDAiCiAgICAgICAgICAgZD0iTSAyLjYyMDMwMTVlLTUsMjg4Ljk5OTk5IEggMTI4LjAwMDAzIgogICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOm5vbmU7c3Ryb2tlOiM2MmEwZWE7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI5Ij4KICAgICAgPHJlY3QKICAgICAgICAgY2xpcC1wYXRoPSJub25lIgogICAgICAgICByeT0iOCIKICAgICAgICAgcng9IjgiCiAgICAgICAgIHk9Ii0yOTQiCiAgICAgICAgIHg9Ii0xMDgiCiAgICAgICAgIGhlaWdodD0iMzAuMjUiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaWQ9InJlY3QxMTY3IgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiMxYTVmYjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEzLjcxODc2NTI2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbCIKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsLTM3NCwyMDIuMDQ4MDgpIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMjEzKSIKICAgICAgICAgaWQ9Imc4MDA1IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI1LDAsMCwwLjI1LC00MjQsMjAyLjA0ODA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjIxMykiCiAgICAgICAgIGlkPSJnODAxNSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNSwwLDAsMC4yNSwtNDE0LDIwMi4wNDgwOCkiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIyMTMpIgogICAgICAgICBpZD0iZzgwMjUiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMjUsMCwwLDAuMjUsLTQwNCwyMDIuMDQ4MDgpIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgyMjEzKSIKICAgICAgICAgaWQ9Imc4MDM1IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiAvPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjI1LDAsMCwwLjI1LC0zOTQsMjAyLjA0ODA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMjIxMykiCiAgICAgICAgIGlkPSJnODA0NSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4yNSwwLDAsMC4yNSwtMzg0LDIwMi4wNDgwOCkiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDIyMTMpIgogICAgICAgICBpZD0iZzgwNTUiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEpIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMTU5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBpZD0icmVjdDExNTEiCiAgICAgICAgIHdpZHRoPSI4OCIKICAgICAgICAgaGVpZ2h0PSI0MCIKICAgICAgICAgeD0iLTEwOCIKICAgICAgICAgeT0iLTI5MiIKICAgICAgICAgcng9IjgiCiAgICAgICAgIHJ5PSI4IgogICAgICAgICBjbGlwLXBhdGg9Im5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGNsaXAtcGF0aD0ibm9uZSIKICAgICAgICAgcnk9IjgiCiAgICAgICAgIHJ4PSI4IgogICAgICAgICB5PSItMjg4IgogICAgICAgICB4PSItMTA4IgogICAgICAgICBoZWlnaHQ9IjEwOCIKICAgICAgICAgd2lkdGg9Ijg4IgogICAgICAgICBpZD0icmVjdDExNjEiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Y2ZjVmNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTMuNzE4NzY1MjY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKC0xKSIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQsMikiCiAgICAgICAgIGlkPSJnMTE1MyI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2Q1ZDNjZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgICAgZD0ibSAzMiwxODggYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHogbSA4LDAgYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHogbSA4LDAgYyAtMS4xMDQ1NywwIC0yLDAuODk1NDMgLTIsMiAwLDEuMTA0NTcgMC44OTU0MywyIDIsMiAxLjEwNDU3LDAgMiwtMC44OTU0MyAyLC0yIDAsLTEuMTA0NTcgLTAuODk1NDMsLTIgLTIsLTIgeiBtIDgsMCBjIC0xLjEwNDU3LDAgLTIsMC44OTU0MyAtMiwyIDAsMS4xMDQ1NyAwLjg5NTQzLDIgMiwyIDEuMTA0NTcsMCAyLC0wLjg5NTQzIDIsLTIgMCwtMS4xMDQ1NyAtMC44OTU0MywtMiAtMiwtMiB6IG0gOCwwIGMgLTEuMTA0NTcsMCAtMiwwLjg5NTQzIC0yLDIgMCwxLjEwNDU3IDAuODk1NDMsMiAyLDIgMS4xMDQ1NywwIDIsLTAuODk1NDMgMiwtMiAwLC0xLjEwNDU3IC0wLjg5NTQzLC0yIC0yLC0yIHoiCiAgICAgICAgICAgaWQ9InBhdGg5NTAtMy03IiAvPgogICAgICAgIDxjaXJjbGUKICAgICAgICAgICByPSIyIgogICAgICAgICAgIGN5PSIxOTAiCiAgICAgICAgICAgY3g9Ii0xMDQiCiAgICAgICAgICAgaWQ9InBhdGgxMTQ4IgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2Q1ZDNjZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJtIDExMiwxOTIgYSAyLDIgMCAwIDEgLTEuNzMyMDUsLTEgMiwyIDAgMCAxIDAsLTIgQSAyLDIgMCAwIDEgMTEyLDE4OCIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNkNWQzY2Y7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgICBpZD0iY2lyY2xlMTY3NzAiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICB0cmFuc2Zvcm09InNjYWxlKC0xLDEpIgogICAgICAgICAgIGQ9Im0gLTI0LDE5MiBhIDIsMiAwIDAgMSAtMS43MzIwNTEsLTEgMiwyIDAgMCAxIDAsLTIgQSAyLDIgMCAwIDEgLTI0LDE4OCIKICAgICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNkNWQzY2Y7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE2O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgICAgaWQ9ImNpcmNsZTE2NzcwLTMiIC8+CiAgICAgIDwvZz4KICAgICAgPHJlY3QKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMTMwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3BhaW50LW9yZGVyOm5vcm1hbDtlbmFibGUtYmFja2dyb3VuZDpuZXciCiAgICAgICAgIGlkPSJyZWN0MTA1Ni0zIgogICAgICAgICB3aWR0aD0iMzYiCiAgICAgICAgIGhlaWdodD0iMzYiCiAgICAgICAgIHg9IjI1MiIKICAgICAgICAgeT0iODgiCiAgICAgICAgIHJ4PSIxMS4yIgogICAgICAgICByeT0iMTEuMiIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwwLjcxNDI4NTcxLDAuNzE0Mjg1NzEsMCwyNS4xNDI4NTgsODguMDAwMDA4KSIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTYwOS03KSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTA2MikiCiAgICAgICAgIGlkPSJwYXRoMTA0NyIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxNzIpIgogICAgICAgICBkPSJNIDEwMCwxNiAzMiw4NCB2IDIwIGggMjIgbCA2OCwtNjggLTcuODY3MTksLTUuNzYxNzE5IC0wLjA3NDIsLTAuMDcyMjcgLTguMjI0NjEsLTguMjI0NjEgeiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEyLjQ4OTgyNzE2O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtwYWludC1vcmRlcjpub3JtYWwiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDExMDMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxMi40ODk4MjcxNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsIgogICAgICAgICBkPSJtIDMyLDI3NiB2IC0yMCBsIDIwLDIwIHoiCiAgICAgICAgIGlkPSJwYXRoMTAzOCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMDQyIgogICAgICAgICBkPSJtIDMxLjk5OTk5NiwyNzYgNGUtNiwtOCA4LDggeiIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojNDI0MDQ4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxMi40ODk4MjcxNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7cGFpbnQtb3JkZXI6bm9ybWFsO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaWQ9InBhdGgxMDQ0IgogICAgICAgICBkPSJtIDUwLDI3NCAtMTYsLTE2IDY3Ljk0Njk2LC02Ny45NDY5NSAxNiwxNiB6IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7ZmlsbDojZjZkMzJkO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjUwNjQzNzg0cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTA0NiIKICAgICAgICAgZD0iTSAzNy44ODc3NzIsMjYxLjg4Nzc2IDMyLDI1NiBsIDY4LjAwMDAxLC02Ny45OTk5OSA1LjgzNDcyLDUuOTQwOCB6IgogICAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmU7b3BhY2l0eToxO2ZpbGw6I2Y5ZjA2YjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zNTgxMDU2cHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDpuZXciIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMTA0OCIKICAgICAgICAgZD0iTSA0Ni4xMTIyNDYsMjcwLjExMjIzIDUyLDI3NiBsIDY4LC02OCAtNS45NDA4LC01LjgzNDcyIHoiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjE7ZmlsbDojZTVhNTBhO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjM1ODEwNTZweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gedit,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"gedit.desktop\"\nLABEL oc.launch=\"gedit.Gedit\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Gedit\"\nLABEL oc.displayname=\"Gedit\"\nLABEL oc.path=\"/usr/bin/gedit\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/plain;\"\nLABEL oc.fileextensions=\"txt\"\nLABEL oc.legacyfileextensions=\"txt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gedit\"\nENV APPBIN \"/usr/bin/gedit\"\nENV APP \"/usr/bin/gedit\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gedit/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gedit/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gedit/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gedit/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gelemental && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gelemental.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiBpZD0ic3ZnMiIgdmlld0JveD0iMCAwIDQ4IDQ4Ij4KICA8ZGVmcyBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0NDciPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZjdiOTVkO3N0b3Atb3BhY2l0eToxIiBvZmZzZXQ9IjAiIGlkPSJzdG9wOTQ0OSIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZjdiOTVkO3N0b3Atb3BhY2l0eTowLjQwMDAwMDAxIiBvZmZzZXQ9IjEiIGlkPSJzdG9wOTQ1MSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5NDQxIj4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2I0NTkwMDtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDk0NDMiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2YyOGIyNjtzdG9wLW9wYWNpdHk6MC42NTg4MjM1NSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDk0NDUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MjAyMTAiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjUxNTQ2Mzg5IiBvZmZzZXQ9IjAiIGlkPSJzdG9wMjAyMTIiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MC4xNDQzMjk4OSIgb2Zmc2V0PSIwLjY5OTk5OTk5IiBpZD0ic3RvcDIwMjE4Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAiIG9mZnNldD0iMSIgaWQ9InN0b3AyMDIxNCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3NjI3Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2VlZjFmNTtzdG9wLW9wYWNpdHk6MC43NjQ3MDU5IiBvZmZzZXQ9IjAiIGlkPSJzdG9wNzYyOSIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZWZmMmY2O3N0b3Atb3BhY2l0eTowIiBvZmZzZXQ9IjEiIGlkPSJzdG9wNzYzNSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3NjE5Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FkN2ZhODtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDc2MjEiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6I2FkN2ZhODtzdG9wLW9wYWNpdHk6MC40MDIwNjE4NSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDc2MjMiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50NzU5NSI+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU1ZTg7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMCIgaWQ9InN0b3A3NTk3Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNlNGU1ZTg7c3RvcC1vcGFjaXR5OjAuNTQ1MDk4MDciIG9mZnNldD0iMSIgaWQ9InN0b3A3NTk5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDc1ODUiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNjUzNjZjO3N0b3Atb3BhY2l0eToxIiBvZmZzZXQ9IjAiIGlkPSJzdG9wNzU4NyIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzY1MDdjO3N0b3Atb3BhY2l0eTowLjc5MzgxNDQyIiBvZmZzZXQ9IjEiIGlkPSJzdG9wNzU4OSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ3Mzk3Ij4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzBmMjM0MTtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIwIiBpZD0ic3RvcDczOTkiLz4KICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzBmMjI0MTtzdG9wLW9wYWNpdHk6MC41MDE5NjA4MSIgb2Zmc2V0PSIxIiBpZD0ic3RvcDc0MDEiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Njg4NSI+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiNmMWYzZmY7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMCIgaWQ9InN0b3A2ODg3Ii8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiM2MTY0NzE7c3RvcC1vcGFjaXR5OjAiIG9mZnNldD0iMSIgaWQ9InN0b3A2ODg5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDY2NTAiPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjE3MjU0OTAyIiBvZmZzZXQ9IjAiIGlkPSJzdG9wNjY1MiIvPgogICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojNzA5YWM4O3N0b3Atb3BhY2l0eTowLjYyNzQ1MSIgb2Zmc2V0PSIwLjY2NyIgaWQ9InN0b3A3NDEyIi8+CiAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiM2Zjk2ZGQ7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMSIgaWQ9InN0b3A2NjU0Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIxNy44MzQyNzgiIHkxPSI4LjkzODIwMTkiIHgyPSIzMy45ODI0MTQiIHkyPSIzOS4wMDE4NzMiIGlkPSJsaW5lYXJHcmFkaWVudDc2NjEiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzcHJlYWRNZXRob2Q9InBhZCIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNC4yMzk3IiB5MT0iMzcuNjkyODg2IiB4Mj0iMjQuMjM5NyIgeTI9IjMzLjU1ODA1MiIgaWQ9ImxpbmVhckdyYWRpZW50NzY2MyIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzM5NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjUuNDY5NDA0IiB5MT0iNDAuNDcwNzQxIiB4Mj0iMjEuNTE5NTQzIiB5Mj0iMjEuODM0MDU1IiBpZD0ibGluZWFyR3JhZGllbnQ3NjY1IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTg1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNS40NDM4NTciIHkxPSIzNy42OTI4ODYiIHgyPSIyMy4wODcwMjciIHkyPSIzMy41NTgwNTIiIGlkPSJsaW5lYXJHcmFkaWVudDc2NjciIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc2MTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjI2LjMwNTE3OCIgeTE9IjI0LjkxMzA2OSIgeDI9IjEyLjA1NTMzMSIgeTI9IjE0LjcyNTgwNCIgaWQ9ImxpbmVhckdyYWRpZW50NzY2OSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njg4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjYuOTgzNTk3IiB5MT0iMjYuNTA1MjEzIiB4Mj0iMzAuMjgwODk5IiB5Mj0iMjYuNTA1MjEzIiBpZD0ibGluZWFyR3JhZGllbnQ3NjcxIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkyNzMwNCwwLDAsMC44MzI4MTYsMS41NDIxMjIsNC42NzA5NTgpIi8+CiAgICA8cmFkaWFsR3JhZGllbnQgY3g9IjIxLjc0NTUyNSIgY3k9IjIxLjk2NTQ5OCIgcj0iMi4zMjUxMzI2IiBmeD0iMjEuNzQ1NTI1IiBmeT0iMjEuOTY1NDk4IiBpZD0icmFkaWFsR3JhZGllbnQ3NjczIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NjI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwNCwwLjIyOTE0OCwtMC42MjQ2NjksMi43MjYwNTUsMTMuNzIxMDUsLTQxLjI3NTk5KSIvPgogICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxNC43NzIzMzQiIGN5PSI3NC4yMDk5MyIgcj0iNy44Mjg5ODI4IiBmeD0iMTQuNzcyMzM0IiBmeT0iNzQuMjA5OTMiIGlkPSJyYWRpYWxHcmFkaWVudDc2NzUiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMjEwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuNzY0Mjc4LDAuNTY2ODA0KSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIxNy44MzQyNzgiIHkxPSI4LjkzODIwMTkiIHgyPSIzMy45ODI0MTQiIHkyPSIzOS4wNjE3OTgiIGlkPSJsaW5lYXJHcmFkaWVudDg1NTIiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzcHJlYWRNZXRob2Q9InBhZCIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNC4yMzk3IiB5MT0iMzcuNjkyODg2IiB4Mj0iMjQuMjM5NyIgeTI9IjMzLjU1ODA1MiIgaWQ9ImxpbmVhckdyYWRpZW50ODU1NCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzM5NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjUuNDY5NDA0IiB5MT0iNDAuNDcwNzQxIiB4Mj0iMjEuNTE5NTQzIiB5Mj0iMjEuODM0MDU1IiBpZD0ibGluZWFyR3JhZGllbnQ4NTU2IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5NDQxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIvPgogICAgPGxpbmVhckdyYWRpZW50IHgxPSIyNS40NDM4NTciIHkxPSIzNy42OTI4ODYiIHgyPSIyMy4wODcwMjciIHkyPSIzMy41NTgwNTIiIGlkPSJsaW5lYXJHcmFkaWVudDg1NTgiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk0NDciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjI2LjMwNTE3OCIgeTE9IjI0LjkxMzA2OSIgeDI9IjEyLjA1NTMzMSIgeTI9IjE0LjcyNTgwNCIgaWQ9ImxpbmVhckdyYWRpZW50ODU2MCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njg4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiLz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjYuOTgzNTk3IiB5MT0iMjYuNTA1MjEzIiB4Mj0iMzAuMjgwODk5IiB5Mj0iMjYuNTA1MjEzIiBpZD0ibGluZWFyR3JhZGllbnQ4NTYyIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NTk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkyNzMwNCwwLDAsMC44MzI4MTYsMS41NDIxMjIsNC42NzA5NTgpIi8+CiAgICA8cmFkaWFsR3JhZGllbnQgY3g9IjIxLjc0NTUyNSIgY3k9IjIxLjk2NTQ5OCIgcj0iMi4zMjUxMzI2IiBmeD0iMjEuNzQ1NTI1IiBmeT0iMjEuOTY1NDk4IiBpZD0icmFkaWFsR3JhZGllbnQ4NTY0IiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3NjI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwNCwwLjIyOTE0OCwtMC42MjQ2NjksMi43MjYwNTUsMTMuNzIxMDUsLTQxLjI3NTk5KSIvPgogICAgPHJhZGlhbEdyYWRpZW50IGN4PSIxNC43NzIzMzQiIGN5PSI3NC4yMDk5MyIgcj0iNy44Mjg5ODI4IiBmeD0iMTQuNzcyMzM0IiBmeT0iNzQuMjA5OTMiIGlkPSJyYWRpYWxHcmFkaWVudDg1NjYiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMjEwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuNzY0Mjc4LDAuNTY2ODA0KSIvPgogIDwvZGVmcz4KICA8ZyBpZD0ibGF5ZXIxIj4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk3LDAsMCwxLDUuOTc5NWUtMiwwLjMzNjQpIiBpZD0iaWNvbiI+CiAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTgwMDk5LDAsMCwxLjE4MDA5OSwtMTUuMDU4NTEsLTkuMDI5Mjg1KSIgaWQ9InJvdW5kIj4KICAgICAgICA8cGF0aCBkPSJNIDE5LjkxMDEwMiwyMi4wMjcyNTIgQyAxOS45MTAxMDIsMjUuMDI3MjUyIDE1LjkxMDEwMiwyOC4wMjcyNTIgMTUuOTEwMTAyLDMzLjAyNzI1MiBDIDE1LjkxMDEwMiwzOC4wMjcyNTIgMTguOTEwMTAyLDQxLjAyNzI1MiAyNCw0MSBDIDI5LjA4OTg5OCw0MC45NzI3NDggMzEuOTEwMTAyLDM4LjAyNzI1MiAzMS45MTAxMDIsMzMuMDI3MjUyIEMgMzEuOTEwMTAyLDI4LjAyNzI1MiAyNy45MTAxMDIsMjUuMDI3MjUyIDI3LjkxMDEwMiwyMi4wMjcyNTIgQyAyNy45MTAxMDIsMTkuMDI3MjUyIDI4LDE1LjUwNDg2NCAyOCwxMiBDIDI4LDkgMzEsMTAgMzAsOSBDIDI5LDggMTksOCAxOCw5IEMgMTcsMTAgMjAsOC45OTk5OTk3IDIwLDEyIEMgMjAsMTUuNDUzNjA4IDE5LjkxMDEwMiwxOS4wMjcyNTIgMTkuOTEwMTAyLDIyLjAyNzI1MiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTUyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzhlOTE5ZTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtb3V0bGluZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwMjM4NCwwLDAsMS4wMTYwNCw2Ljk2Mzg1NywxLjg4Mzg4NikiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzBmMjM0MTtzdHJva2Utd2lkdGg6MC40MjU5ODkzOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO292ZXJmbG93OnZpc2libGUiIGlkPSJyb3VuZC1ib3R0b20iLz4KICAgICAgICA8cGF0aCBkPSJNIDMyIDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDE2LjQ3OTQwMSwzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAzMiAzNS42MjU0NjkgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMC40MzI3MDIsMCwwLDAuMzUwMTk5LDEzLjQ2NDI3LDkuMTkzMzcpIiBzdHlsZT0ib3BhY2l0eTowLjgzOTk5OTk5O2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojYmU1NTAwO3N0cm9rZS13aWR0aDoxLjYzMjY0NDM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiBpZD0icm91bmQtbGlxdWlkLXJpbSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMjAuMzIzNTA0LDIyLjQ3MTc3NiBDIDIwLjQ4NDM5MiwyNC4yNTUwMTcgMTUuOTYzMzM4LDI5LjAxMzEyMSAxNi4zNzIwNjYsMzMuNDY0MTc3IEMgMTYuNzgwNTA1LDM3LjkxMjA5MyAxOC44MTY0ODEsNDAuNjUwNTE1IDI0LjAwNjU0OCw0MC40NzA3NCBDIDI5LjI1NjU0LDQwLjI5MDk2NSAzMC42OTg4MTQsMzguODY5NzE0IDMxLjM4Mjg3MywzMy40OTk3MDYgQyAzMi4wNjc5MywyOC4xMjE4NjMgMjguMTU0NzMxLDI1LjY4NzgyMyAyNy43NjExODIsMjMuNDUzOTA5IEMgMjcuMzY4NzY3LDIxLjIyNjQzMSAyNy44NTg4MDEsMjEuODI1MDg2IDI2Ljk4MTI2LDIyLjA5NDU1MSBDIDI0Ljk3NDIxNiwyMi43MTA4NTIgMjIuMjg2NTAxLDIyLjcyNTk1NCAyMS4wNTY3NjYsMjIuMTQyODEgQyAyMC45MjY0NTMsMjIuMDgxMDE1IDIwLjE1OTk1NywyMC42NTkwNzQgMjAuMzIzNTA0LDIyLjQ3MTc3NiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC44NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC43NTYwOTc1MyIgaWQ9InJvdW5kLWxpcXVpZCIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQwNzkxLDAsMCwwLjI2MzUzMiwxNC4wOTU4MiwxMi4yODA5NSkiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ4NTU4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wMjU4NTk3MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJyb3VuZC1saXF1aWQtc3VyZmFjZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMjAuNzYyNTk5LDIyLjE1MDA2NiBDIDIwLjc0NjM1OCwyNS4zNDY5ODcgMTYuNjg4MjU0LDI4LjUzNTE3OSAxNi44MDgxMDQsMzMuMDc4MjUxIEMgMTYuOTI3OTU0LDM3LjU2MTM5OCAxOS4yNjIzNDMsNDAuNDUyMTQ4IDI0LjA4NDM1LDQwLjA1OTkyNSBDIDI4Ljk2NjI4MiwzOS42Njc3MDIgMzAuNTUwNTkyLDM4LjY0NzU1OSAzMC45NzAwMjcsMzMuMTQ3MTAzIEMgMzEuMzkzNjg3LDI3LjU5MTI0IDI3LjcxODIzOSwyNi41ODQ4ODUgMjcuMTc5ODA4LDIyLjgwMzM5NCBDIDI2LjY1MDg4MywxOS4wODg2NTkgMjcuMTA2NzksMTYuMDY3NzEyIDI3LjEwNjc5LDEyLjc3NzY5NiBDIDI3LjEwNjc5LDkuOTYxNTk2MiAyNy42NDYxMTYsMTAuNDUwNjY5IDI3LjY0NjExNiw5Ljk4MTMxOSBDIDI3LjY0NjExNiw5LjA0MjYxOTEgMjkuMTMwMTEsOS43ODU4MDkyIDI5LjAyNzI4LDkuNDU1NDE2NCBDIDI4LjkyNzg5NCw5LjEzNjA5MTUgMTguODg4NDU4LDkuMDI3NjczMiAxOC42ODE2NDgsOS4zNjk5OTIgQyAxOC40ODE5NjUsOS43MDA1MTQ3IDIwLjQwMjczNCw5LjIyMjM5NDMgMjAuNDAyNzM0LDEwLjE2MTA5NSBDIDIwLjQwMjczNCwxMC42MzA0NDUgMjEuMDI5OTUzLDkuNzg1NzAyOCAyMC44ODIxMzUsMTIuNTk3OTIxIEMgMjAuNjQyNDM1LDE3LjE1ODE3NSAyMC43Nzg4NCwxOC45NTMxNzMgMjAuNzYyNTk5LDIyLjE1MDA2NiB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ4NTYwKTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjc1NjA5NzUzIiBpZD0icm91bmQtaW5saW5lIi8+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuMjk5NjI1LDAuNTk5MjUpIiBpZD0icm91bmQtbWFyay0xIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0gMjkuMzQzNTMyLDI2LjA5OTIyMSBDIDI5LjM0MzUzMiwyNi4wOTkyMjEgMjguNTQ1MzkxLDI3LjExOTQ0MSAyNi44NDIzMTMsMjcuMzkwNjA0IiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDg1NjIpO3N0cm9rZS13aWR0aDowLjQzNzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJyb3VuZC1pbm1hcmstMSIvPgogICAgICAgICAgPHBhdGggZD0iTSAyOS40Mjk0OTksMjUuMjM4NDI3IEMgMjkuNDI5NDk5LDI1LjIzODQyNyAyOC41Njg3ODcsMjYuNDYzNDUyIDI2LjczMjE5NywyNi43ODkwNSIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiM2ODY4NzQ7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJyb3VuZC1vdXRtYXJrLTEiLz4KICAgICAgICA8L2c+CiAgICAgICAgPHBhdGggZD0iTSAxNy45MjM3MDEsOS40NzQ1NTYyIEMgMTcuOTIzNzAxLDkuNDc0NTU2MiAyMS43ODgxMzMsMTAuMzg1NTg1IDI0LjEyNzEyMSwxMC4zNjQzOTggQyAyNi40NjYxMDgsMTAuMzQzMjExIDI5Ljk5MTU1Miw5LjQ3NDU1NjIgMjkuOTkxNTUyLDkuNDc0NTU2MiIgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzhlOTE5ZTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtbGlwIi8+CiAgICAgICAgPHVzZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjYyMjc4NywzLjI5ODU2MSkiIGlkPSJyb3VuZC1tYXJrLTIiIHg9IjAiIHk9IjAiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeGxpbms6aHJlZj0iI3JvdW5kLW1hcmstMSIvPgogICAgICAgIDx1c2UgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMi41MTUyOTcsNy4wMjAwNjUpIiBpZD0icm91bmQtbWFyay0zIiB4PSIwIiB5PSIwIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHhsaW5rOmhyZWY9IiNyb3VuZC1tYXJrLTEiLz4KICAgICAgICA8cGF0aCBkPSJNIDE5LjkwNTMzNSwyNC4wMDQ0NjUgQyAxOC44ODYzNDYsMjcuMTA4NjQ5IDE4LjI5MjEzNCwyNy41NTA1NjIgMTkuNTk1NTA1LDI5LjA2MzY3MSBDIDIwLjUyODEwOSwzMC4xNDYzNDkgMjMuMjMyODQ3LDI4LjczOTQyNCAyNC4wMjk5NjIsMjQuMjA5NzM5IEMgMjQuOTExOTksMTkuMTk3NTMxIDIyLjkzMTE0MSwxNC4zNzI1ODggMjEuODEyNzM0LDEzLjQ4MzE0NiBDIDE5LjkxMDExMiwxMS45NzAwMzggMjEuNzY2MDI4LDE4LjMzNjE2NyAxOS45MDUzMzUsMjQuMDA0NDY1IHogIiBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50ODU2NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiBpZD0icm91bmQtZ2xvc3MiLz4KICAgICAgICA8cGF0aCBkPSJNIDM5Ljg3NSA0Mi4wNjI1IEEgMTMuODEyNSA0LjQzNzUgMCAxIDEgIDEyLjI1LDQyLjA2MjUgQSAxMy44MTI1IDQuNDM3NSAwIDEgMSAgMzkuODc1IDQyLjA2MjUgeiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMSkgbWF0cml4KDAuNzc1Nzc0LDAsMCwwLjcxMTg4NywzLjU3MTYzNCwxMS4xNjQ4NykiIHN0eWxlPSJvcGFjaXR5OjAuODtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDg1NjYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiBpZD0icm91bmQtc2hhZG93Ii8+CiAgICAgIDwvZz4KICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xODAwOTksMCwwLDEuMTgwMDk5LDMuODIzMDYzLC00LjcwMTAzKSIgaWQ9ImZsYXNrIj4KICAgICAgICA8cGF0aCBkPSJNIDE4LDI2IEMgMTYsMjkgMTIuNSwzNy41IDE0LDM5IEMgMTUuNSw0MC41IDIzLDQxIDI0LDQxIEMgMjUsNDEgMzIuNSw0MC41IDM0LDM5IEMgMzUuNSwzNy41IDMyLDI5IDMwLDI2IEMgMjgsMjMgMjgsMTUuNTA0ODY0IDI4LDEyIEMgMjgsOSAzMSwxMCAzMCw5IEMgMjksOCAxOSw4IDE4LDkgQyAxNywxMCAyMCw4Ljk5OTk5OTcgMjAsMTIgQyAyMCwxNS40NTM2MDggMjAsMjMgMTgsMjYgeiAiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzY2MSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiM4ZTkwOWY7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLW91dGxpbmUiLz4KICAgICAgICA8cGF0aCBkPSJNIDMyIDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDE2LjQ3OTQwMSwzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAzMiAzNS42MjU0NjkgeiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4yMzY0NTIsMCwwLDEuMDE2MDQsLTUuOTIxODQ2LDEuODgzODg2KSIgc3R5bGU9Im9wYWNpdHk6MTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc2NjMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMGYyMzQxO3N0cm9rZS13aWR0aDowLjQyNTk4OTM5O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgaWQ9ImZsYXNrLWJvdHRvbSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzIgMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMTYuNDc5NDAxLDM1LjYyNTQ2OSBBIDcuNzYwMjk5NyAyLjA2NzQxNTcgMCAxIDEgIDMyIDM1LjYyNTQ2OSB6IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjQ5NTMxMywwLDAsMC40NTEwNjIsMTEuOTU5MzUsNS4xNDEwODkpIiBzdHlsZT0ib3BhY2l0eTowLjgzOTk5OTk5O2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojNWMzNTY2O3N0cm9rZS13aWR0aDoxLjAyNTg1OTcxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgaWQ9ImZsYXNrLWxpcXVpZC1yaW0iLz4KICAgICAgICA8cGF0aCBkPSJNIDE4LjAzNDY4NiwyNi44MDk3MTQgQyAxNi4zOTk3MjcsMjkuMzU5MDY3IDEzLjA5OTY0NSwzNy40MjQ5OSAxNC4zMjI5NDgsMzguODMzMDQgQyAxNS41NDYyNTEsNDAuMjQxMDkgMjMuMTkxMDEzLDQwLjQ3MDc0IDI0LjAwNjU0OCw0MC40NzA3NCBDIDI0LjgyMjA4Myw0MC40NzA3NCAzMi4zNzY3OTgsNDAuMzAxMDE1IDMzLjYwMDEwMSwzOC44OTI5NjUgQyAzNC44MjM0MDMsMzcuNDg0OTE1IDMxLjY2MzYxNywyOS4zNzM0NTEgMjkuODU4NTYsMjYuNjg5ODY0IEMgMjguMDQ5NzYsMjQuMDAwNzEzIDI4LjQwMjExMSwyMC44NDkyNzggMjcuODE3ODE2LDIxLjI5NzY0IEMgMjUuNzYzMzM3LDIyLjg3NDE1OSAyMC42OTY4NDgsMjEuOTg5OTM1IDIwLjEzNDA3NiwyMS4zNDgzMSBDIDE5LjY1NTMxOSwyMC44MDI0NzMgMTkuNjczNjczLDI0LjI1NDA3OSAxOC4wMzQ2ODYsMjYuODA5NzE0IHogIiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDc2NjUpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjg3NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjc1NjA5NzUzIiBpZD0iZmxhc2stbGlxdWlkIi8+CiAgICAgICAgPHBhdGggZD0iTSAzMiAzNS42MjU0NjkgQSA3Ljc2MDI5OTcgMi4wNjc0MTU3IDAgMSAxICAxNi40Nzk0MDEsMzUuNjI1NDY5IEEgNy43NjAyOTk3IDIuMDY3NDE1NyAwIDEgMSAgMzIgMzUuNjI1NDY5IHoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNDYyNTM5LDAsMCwwLjMzNzUzNSwxMi43NjU4OSw5LjIxMTA0NCkiIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3NjY3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS4wMjU4NTk3MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJmbGFzay1saXF1aWQtc3VyZmFjZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMTguNDk0NDIxLDI2LjgwODE0MyBDIDE2LjczNjQwMSwyOS40OTcyOTQgMTMuNDU2OTkxLDM3LjQyMDE4OSAxNC43Njk0NDUsMzguNjA5MDk5IEMgMTYuMDQzNTI4LDM5Ljc2MzI1MSAyMy4yNjg4MTUsNDAuMDU5OTI1IDI0LjA4NDM1LDQwLjA1OTkyNSBDIDI0Ljg5OTg4NSw0MC4wNTk5MjUgMzEuODkxOTMsMzkuOTgyNjE0IDMzLjIxNjc5MiwzOC42MjUzNDQgQyAzNC41MTk2NzcsMzcuMjkwNTkgMzAuMzgwMTIyLDI3LjY2MjEyNiAyOS41MzYxNCwyNi45MDI2MDQgQyAyOS4xMjc5ODIsMjYuNTM1MjkyIDI3LjcwODE2NiwyMi41MzE2ODYgMjcuNTU4MzI3LDIwLjY5Njg2MyBDIDI3LjMwODQ0OSwxNy42MzcwMzMgMjcuMTA2NzksMTQuNDIyNzA0IDI3LjEwNjc5LDEyLjc3NzY5NiBDIDI3LjEwNjc5LDkuOTYxNTk2MiAyNy42NDYxMTYsMTAuNDUwNjY5IDI3LjY0NjExNiw5Ljk4MTMxOSBDIDI3LjY0NjExNiw5LjA0MjYxOTEgMjkuMjg5ODAyLDkuOTMxOTU2NSAyOS4xNTMyNDQsOS41MDU1MzkgQyAyOS4wMjQwODEsOS4xMDIyMTM0IDE4LjY1NjQ1Myw5LjAzNzcxMjMgMTguNTgwMDg4LDkuNTQ3MTczNCBDIDE4LjQ5OTk5OSwxMC4wODE0NzkgMjAuNDAyNzM0LDkuMjIyMzk0MyAyMC40MDI3MzQsMTAuMTYxMDk1IEMgMjAuNDAyNzM0LDEwLjYzMDQ0NSAyMC44ODIxMzUsOS43ODE4MjA2IDIwLjg4MjEzNSwxMi41OTc5MjEgQyAyMC44ODIxMzUsMTQuMjE4ODcyIDIwLjg1NTYyNiwxNy40NDg1MzQgMjAuNDgwNDMyLDIwLjI1NjY3NSBDIDIwLjEwNTIzOSwyMy4wNjQ4MTcgMTkuMzgxMzYsMjUuNDUxNDM5IDE4LjQ5NDQyMSwyNi44MDgxNDMgeiAiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzY2OSk7c3Ryb2tlLXdpZHRoOjAuODQ3Mzg3Nzk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlci1zdGFydDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC43NTYwOTc1MyIgaWQ9ImZsYXNrLWlubGluZSIvPgogICAgICAgIDxnIGlkPSJmbGFzay1tYXJrLTEiPgogICAgICAgICAgPHBhdGggZD0iTSAyOS4zNDM1MzIsMjYuMDk5MjIxIEMgMjkuMzQzNTMyLDI2LjA5OTIyMSAyOC41NDUzOTEsMjcuMTE5NDQxIDI2Ljg0MjMxMywyNy4zOTA2MDQiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzY3MSk7c3Ryb2tlLXdpZHRoOjAuNDM3NTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLWlubWFyay0xIi8+CiAgICAgICAgICA8cGF0aCBkPSJNIDI5LjQyOTQ5OSwyNS4yMzg0MjcgQyAyOS40Mjk0OTksMjUuMjM4NDI3IDI4LjU2ODc4NywyNi40NjM0NTIgMjYuNzMyMTk3LDI2Ljc4OTA1IiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzVmNWY2OTtzdHJva2Utd2lkdGg6MC44NDczODc3OTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyLXN0YXJ0Om5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9ImZsYXNrLW91dG1hcmstMSIvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aCBkPSJNIDE3LjkyMzcwMSw5LjQ3NDU1NjIgQyAxNy45MjM3MDEsOS40NzQ1NTYyIDIxLjc4ODEzMywxMC4zODU1ODUgMjQuMTI3MTIxLDEwLjM2NDM5OCBDIDI2LjQ2NjEwOCwxMC4zNDMyMTEgMjkuOTkxNTUyLDkuNDc0NTU2MiAyOS45OTE1NTIsOS40NzQ1NTYyIiBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojOGU5MTllO3N0cm9rZS13aWR0aDowLjg0NzM4Nzc5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJmbGFzay1saXAiLz4KICAgICAgICA8dXNlIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuODIwMjI1LDMuODIwMjI1KSIgaWQ9ImZsYXNrLW1hcmstMiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB4bGluazpocmVmPSIjZmxhc2stbWFyay0xIi8+CiAgICAgICAgPHVzZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjU2OTM0Nyw3LjUyNDA2NykiIGlkPSJmbGFzay1tYXJrLTMiIHg9IjAiIHk9IjAiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeGxpbms6aHJlZj0iI2ZsYXNrLW1hcmstMSIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMTkuMjY3ODQ4LDIzLjgyNTk2OSBDIDE4LjI0ODg1OSwyNi45MzAxNTMgMTguMjkyMTM0LDI3LjU1MDU2MiAxOS41OTU1MDUsMjkuMDYzNjcxIEMgMjAuNTI4MTA5LDMwLjE0NjM0OSAyMy4yMzI4NDcsMjguNzM5NDI0IDI0LjAyOTk2MiwyNC4yMDk3MzkgQyAyNC45MTE5OSwxOS4xOTc1MzEgMjIuOTMxMTQxLDE0LjM3MjU4OCAyMS44MTI3MzQsMTMuNDgzMTQ2IEMgMTkuOTEwMTEyLDExLjk3MDAzOCAyMS4xMjg1NDEsMTguMTU3NjcxIDE5LjI2Nzg0OCwyMy44MjU5NjkgeiAiIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ3NjczKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIGlkPSJmbGFzay1nbG9zcyIvPgogICAgICAgIDxwYXRoIGQ9Ik0gMzkuODc1IDQyLjA2MjUgQSAxMy44MTI1IDQuNDM3NSAwIDEgMSAgMTIuMjUsNDIuMDYyNSBBIDEzLjgxMjUgNC40Mzc1IDAgMSAxICAzOS44NzUgNDIuMDYyNSB6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0wLjcpIG1hdHJpeCgwLjk1Nzc0NiwwLDAsMC44Nzg4NzMsLTEuMTcxMDA0LDQuMTQxMDI4KSIgc3R5bGU9Im9wYWNpdHk6MC44O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NzY3NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIGlkPSJmbGFzay1zaGFkb3ciLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"gelemental,gelemental\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"gelemental.desktop\"\nLABEL oc.launch=\"gelemental.Gelemental\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"gElemental\"\nLABEL oc.displayname=\"gElemental\"\nLABEL oc.path=\"/usr/bin/gelemental\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"gElemental\"\nENV APPBIN \"/usr/bin/gelemental\"\nENV APP \"/usr/bin/gelemental\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gelemental/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gelemental/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gelemental/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gelemental/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y geogebra && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"geogebra.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHZlcnNpb249IjEuMCIKICAgd2lkdGg9IjI4IgogICBoZWlnaHQ9IjI4IgogICBpZD0ic3ZnMiIKICAgdmlld0JveD0iMCAwIDI4IDI4Ij4KICA8ZGVzYwogICAgIGlkPSJkZXNjNiI+Q3JlYXRvcjogRnJlZUhFUCBHcmFwaGljczJEIERyaXZlciBQcm9kdWNlcjogZ2VvZ2VicmEuZC5hIFJldmlzaW9uOiAxLjEwICBTb3VyY2U6ICBEYXRlOiBTYW1zdGFnLCA3LiBBdWd1c3QgMjAxMCAxNDowNiBVaHIgTUVTWjwvZGVzYz4KICA8ZGVmcwogICAgIGlkPSJkZWZzODUiIC8+CiAgPGcKICAgICBpZD0iZzI0OTgiPgogICAgPGcKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuNTA4ODg3NywwLDAsMS41MDg4ODc3LC0wLjQ1NTEwNDQsMC42NzA0MDU2KSIKICAgICAgIGlkPSJsYXllcjAiCiAgICAgICBzdHlsZT0ic3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC41NjY5MjkxLDAuNTY2OTI5MSkiCiAgICAgICAgIGlkPSJnMTgiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9ImcyMCIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjY2NjY2O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gNC42NTMwNDUsMjEuNzE1Mzk4IGMgMi41NTI4NzIzLDUuMzM3NzQ2IDkuOTk5OTMxLDcuMDkyOTM2IDE2LjYzMzQ3MSwzLjkyMDMyOCA2LjYzMzU0LC0zLjE3MjYwOSA5Ljk0MTU3NSwtMTAuMDcxNjE1IDcuMzg4NzAzLC0xNS40MDkzNjEgQyAyNi4xMjIzNDcsNC44ODg2MTg1IDE4LjY3NTI4OCwzLjEzMzQyODEgMTIuMDQxNzQ4LDYuMzA2MDM3MSA1LjQwODIwNzYsOS40Nzg2NDYxIDIuMTAwMTcyNywxNi4zNzc2NTIgNC42NTMwNDUsMjEuNzE1Mzk4IHoiCiAgICAgICAgICAgICBpZD0icGF0aDIyIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzI0Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMjYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxOSw1IGMgMCwxLjY1Njg1NDIgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDU4IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDI4IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzMwIj4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzIiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxOSw1IGMgMCwxLjY1Njg1NDIgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDU4IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDM0IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzM2Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnMzgiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSA4LDEzIGMgMCwxLjY1Njg1NCAtMS4zNDMxNDU4LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0MiwwIDMsMS4zNDMxNDYgMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDQwIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzQyIj4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnNDQiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSA4LDEzIGMgMCwxLjY1Njg1NCAtMS4zNDMxNDU4LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0MiwwIDMsMS4zNDMxNDYgMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDQ2IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzQ4Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnNTAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6Izk5OTlmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAxMiwyNiBjIDAsMS42NTY4NTQgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQyLDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ1OCwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NiAzLDMgeiIKICAgICAgICAgICAgIGlkPSJwYXRoNTIiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMC41NjY5MjkxLDAuNTY2OTI5MSkiCiAgICAgICAgIGlkPSJnNTQiPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Imc1NiIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utb3BhY2l0eToxIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJtIDEyLDI2IGMgMCwxLjY1Njg1NCAtMS4zNDMxNDYsMyAtMywzIC0xLjY1Njg1NDIsMCAtMywtMS4zNDMxNDYgLTMsLTMgMCwtMS42NTY4NTQgMS4zNDMxNDU4LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg1OCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc2MCI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzYyIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiM5OTk5ZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjcsMjQgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg2NCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc2NiI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzY4IgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1vcGFjaXR5OjEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMjcsMjQgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0IDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ2IDMsMyB6IgogICAgICAgICAgICAgaWQ9InBhdGg3MCIgLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjU2NjkyOTEsMC41NjY5MjkxKSIKICAgICAgICAgaWQ9Imc3MiI+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzc0IgogICAgICAgICAgIHN0eWxlPSJmaWxsOiM5OTk5ZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Im0gMzIsMTEgYyAwLDEuNjU2ODU0IC0xLjM0MzE0NiwzIC0zLDMgLTEuNjU2ODU0LDAgLTMsLTEuMzQzMTQ2IC0zLC0zIDAsLTEuNjU2ODU0MiAxLjM0MzE0NiwtMyAzLC0zIDEuNjU2ODU0LDAgMywxLjM0MzE0NTggMywzIHoiCiAgICAgICAgICAgICBpZD0icGF0aDc2IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09InNjYWxlKDAuNTY2OTI5MSwwLjU2NjkyOTEpIgogICAgICAgICBpZD0iZzc4Ij4KICAgICAgICA8ZwogICAgICAgICAgIGlkPSJnODAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0ibSAzMiwxMSBjIDAsMS42NTY4NTQgLTEuMzQzMTQ2LDMgLTMsMyAtMS42NTY4NTQsMCAtMywtMS4zNDMxNDYgLTMsLTMgMCwtMS42NTY4NTQyIDEuMzQzMTQ2LC0zIDMsLTMgMS42NTY4NTQsMCAzLDEuMzQzMTQ1OCAzLDMgeiIKICAgICAgICAgICAgIGlkPSJwYXRoODIiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"geogebra,geogebra,math\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"geogebra-GeoGebra.geogebra-GeoGebra\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Geogebra\"\nLABEL oc.displayname=\"Geogebra\"\nLABEL oc.path=\"/usr/bin/geogebra\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"ggb;ggt\"\nLABEL oc.legacyfileextensions=\"ggb;ggt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Geogebra\"\nENV APPBIN \"/usr/bin/geogebra\"\nENV APP \"/usr/bin/geogebra\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/geogebra/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/geogebra/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/geogebra/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/geogebra/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update gimp gimp-lang\nLABEL oc.icon=\"circle_gimp.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iR2ltcCIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iNTIwLjAzIiB4Mj0iNTIwLjAzIiB5MT0iMi4wMDc4IiB5Mj0iMTAyNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYzMzYgMCAwIC4wNjMzNjMgLS40NDM3OCAtLjQ0NDc1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI1MjIuNTMiIHgyPSI1MjIuNTMiIHkxPSIyNzUuMDMiIHkyPSI3NTUuMDMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS44NjU4IC0xLjEwNzEpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2YjRmMzUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzIzMjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDMxMzAzIiB5PSItLjA0MjM1NSIgd2lkdGg9IjEuMDYyNiIgaGVpZ2h0PSIxLjA4NDciIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguMzQ3NDgwOSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xNzAzNTMiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MDkiIHg9Ii0uMDkzOTExIiB5PSItLjEyNzA2IiB3aWR0aD0iMS4xODc4IiBoZWlnaHQ9IjEuMjU0MSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS41OTY3NDM0Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS4zODQxIC42NDk4NCkiIGQ9Im04MjMgMjk5Ljg3Yy00LjM0OC0xOS40NTMtOC42MDctMjQuMzczLTguNjA3LTI0LjM3M3MtOC42NDcgMTcuOTkyLTIxLjg2OCAzOS41OTRjLTEzLjIyMiAyMS42NDMtMzQuMzU3IDQ0LjYyNS01Mi42MTMgNTkuMDc0LTIzLjc1IDE4LjgzOC00Ny44NDYgMzAuOTQ1LTY5LjE3NCAzNy45NDEtMjEuMjkxIDcuMDMzLTM4LjY2NCAxMS4wNjYtMzguNjY0IDExLjA2NiA5LjM3NyA3LjYxMyAxOS40MDggMTcuMDY4IDI0Ljg2NCAyNy45MSA1LjQxNiAxMC44MDEgOC41MzMgMjIuOTgyIDguNTMzIDM2LjI0NCAwIDI1Ljk0NS05Ljk5NCA0OC4yNzctMjYuMjg1IDY0LjE1Mi0xNi4yOTkgMTUuODM2LTM4LjkzNCAyNS4yMTUtNjQuMjYgMjUuMjE1LTMwLjc0NiAwLTU1LjA2OS05LjE0OC03MS43MTEtMjQuNzkzLTE2LjY0MS0xNS42ODUtMjUuNTk4LTM3LjktMjUuNTk4LTY0LjAzOSAwLTkuOTUxIDEuNTAyLTE5LjA5OSA0LjIyNy0yNy40MDIgMi43MzItOC4yNjQgNi42ODktMTUuNzIzIDExLjY0OC0yMi4yNTggMCAwLTcuMzgxIDEtMjAuNTIxLTEuNzY0LTEzLjEwOC0yLjc3My0zMi4wNTMtOS4zNDUtNTUuMTQ5LTI0LjQ0Ny0xOS42NDItMTIuODM4LTM2Ljc3OS0zMC43ODctNDkuMDM5LTQ1LjUwOC0xMi4yMjQtMTQuNzIzLTE5LjU1OC0yNi4yNTgtMTkuNTU4LTI2LjI1OHMwLjcyOSA1OS4zODcgMC40NTcgOTIuMjU0Yy0wLjY4OCA5MS4wMi05LjkxNCA5MS41OTgtOS45MTQgOTEuNTk4LTExLjIyMy0xNS44NzktMjMuMzI3LTI5LjU2My0zNy43OC0zOS4yODUtMTQuNDg0LTkuNzI3LTMxLjMyLTE1LjQ0OS01Mi4wMzMtMTUuNDEyLTI1LjA1NyAwLjAzNy0zOS4wODQgOS4zMzYtNDcuMDc2IDIyLjI1NC03Ljk5NiAxMi45NTMtOS45NTUgMjkuNDgtMTAuNzYyIDQzLjk3Mi0xLjQ2MSAyNC45ODMgMTEuMTQ1IDU2LjI3MSAzMS45MzYgODEuMjU2IDIwLjgyNiAyNC45ODMgNDkuODgxIDQzLjcwNSA4MS40MzYgNDMuNjY4IDIuMjI5IDAgNC42MTItMC4xNTQgNy4wMzMtMC40NjMgMi40MTgtMC4zNDcgNC44ODEtMC44MDggNy40MTgtMS40NjEgMCAwIDcuMTA4IDYuODQgMjMuNDQgMTcuMzM2IDE2LjMzNCAxMC41MjggNDEuODkgMjQuNjc2IDc4Ljc4NSAzOS4zNTggMTkuMTM5IDcuNjA3IDM5LjU0NSAxNS42NDIgNjUuMDYzIDIxLjkwNCAyNS41MTggNi4yNjggNTYuMTA2IDEwLjc2OCA5NS42MTQgMTEuMjY4IDU0LjAzNSAwLjY1MiA5Mi41ODQtMTEuMjY4IDEyMS4zMy0yOC41NjMgMjguNzg3LTE3LjI5NyA0Ny44MTItNDAuMDEgNjIuODM4LTYwLjk5NCAyNy4xMzEtMzcuOTc5IDQzLjQ2NS04My41MjcgNTIuOTU3LTEyNy43NyA5LjQ5NC00NC4yMDMgMTIuMTg3LTg3LjEwMyAxMi4wMzEtMTE5LjczLTAuMjcxLTU4LjExNi00LjY5My05Mi4wOTUtOC45OTQtMTExLjU0em0tNTc4LjU0IDI0Mi44OGMtMTYuOTg2IDAtMzAuNzQ0LTEzLjc2LTMwLjc0NC0zMC43NSAwLTE2Ljk4OCAxMy43NTgtMzAuNzUgMzAuNzQ0LTMwLjc1IDE2Ljk1MSAwIDMwLjc0NCAxMy43NjIgMzAuNzQ0IDMwLjc1IDAgMTYuOTktMTMuNzkzIDMwLjc1LTMwLjc0NCAzMC43NXptMTY1LjkxIDE1LjkxNGMtNDIuMDA0LTAuMDQxLTU4LjkxOC0yNy40MDYtNTguNTctNTEuNzM2IDAuMzg3LTI2LjYgMTEuNTI5LTU5LjYxNiA1OS4wNy01OS4yNzEgMjguOTc1IDAuMTk1IDU2LjUzNSAyNS40ODQgNTYuMzc3IDU1LjkyNC0wLjE1IDI3LjU2My0yMy44NjcgNTUuMDgzLTU2Ljg3NyA1NS4wODN6bTI3Mi4xNyA5Ni4zNTljLTIuMDc2IDUuNjU1LTQuOTkyIDkuNjA4LTQuOTkyIDkuNjA4czEuMTEzLTYuMTg0IDEuMTg5LTEwLjY4NGMwLjAzNi00LjY0OC0xLjE4OS0xMC4zMzgtMS4xODktMTAuMzM4cy0zLjI2NiA2Ljk1NS0xNC43OTkgMTMuOTUxYy0xMS41MjcgNi45NTctMzEuNjY2IDE1LjY4Mi02NC43OTMgMTUuNjgyLTI4LjM2MyAwLTQzLjk2My00LjMwMy01Mi43NjctNi44MDEtOC44NC0yLjUzOS0xMC41NjUtNS4wMzUtMTAuNTY1LTUuMDM1czIyLjMyNiAyLjEwOSA0NS4zMTEgMC44NGMzMC44MTgtMS42NDggNDcuOTItNy45OTQgNjYuNTk3LTE1LjAyMyAxMC44MDMtNC4xMTIgMjMuNTYzLTE0LjY0NiAyMy41NjMtMTQuNjQ2cy00LjA3OC00LjM0Mi05LjcyNy04LjgwM2MtNS4zMDItNC4xMTEtMTIuMzczLTguNDk0LTEyLjM3My04LjQ5NHM2LjE4OCAwLjcyOSAxMy41MjQgMy42MTVjNy4zNDIgMi45MTggMTUuODc1IDcuOTU1IDIwLjU2IDE2LjUyNiAzLjY1MSA2LjY5IDIuNDk4IDEzLjk1NCAwLjQ2MSAxOS42MDJ6IiBmaWx0ZXI9InVybCgjZSkiIG9wYWNpdHk9Ii4yIi8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtMS4zODQxIC42NDk4NCkiIGQ9Im01ODguMyA0NjMuOTZjLTIyLjI1MiAwLTQwLjI3NiAxNy44MzQtNDAuMjc2IDM5LjgyIDAgMjEuOTQ2IDE4LjAyNCAzOS43OCA0MC4yNzYgMzkuNzhzNDAuMjczLTE3LjgzNCA0MC4yNzMtMzkuNzhjMC0yMS45ODYtMTguMDIxLTM5LjgyLTQwLjI3My0zOS44MnptMC45OTggNTYuMDc4Yy04LjQ5NCAwLTE1LjM3MS02Ljg3NS0xNS4zNzEtMTUuMzcxIDAtOC40NTcgNi44NzctMTUuMzc1IDE1LjM3MS0xNS4zNzUgOC40NTcgMCAxNS4zNzEgNi45MTggMTUuMzcxIDE1LjM3NSAwIDguNDk2LTYuOTE0IDE1LjM3MS0xNS4zNzEgMTUuMzcxeiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMiIvPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLTEuMzg0MSAuNjQ5ODQpIiBkPSJtNDIwLjQzIDQ4NS43NmMtMTQuMzcxIDAtMjYuMDE4IDExLjg3NS0yNi4wMTggMjYuNTIxIDAgMTQuNjg2IDExLjY0NiAyNi41NjMgMjYuMDE4IDI2LjU2MyAxNC4zMzQgMCAyNS45ODItMTEuODc3IDI1Ljk4Mi0yNi41NjMgMC0xNC42NDYtMTEuNjQ4LTI2LjUyMS0yNS45ODItMjYuNTIxem0wLjM4MiAzNi4wNTFjLTQuMjI4IDAtNy42ODctMy40Mi03LjY4Ny03LjY4NiAwLTQuMjI4IDMuNDU5LTcuNjg4IDcuNjg3LTcuNjg4IDQuMjY4IDAgNy42ODggMy40NjEgNy42ODggNy42ODggMCA0LjI2Ni0zLjQyIDcuNjg2LTcuNjg4IDcuNjg2eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMiIvPgogPC9nPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzUxMyAwIDAgLjA2MzUxMyAtLjQ4NjcyIC0uNTUwNDgpIiBkPSJtNzI2LjEzIDkzLjE5OGMtOC42NzkxLTQuMzM5OC0xNy44MDctOC42Mjk2LTI3LjE4NC0xMi42Ny04LjU3OTMtMy43NDEyLTE3LjEwOS03LjE4My0yNS44MzgtMTAuMzc2LTQxLjk5OS0xNS43MTMtODQuMDQ3LTI1LjI5LTEyNi4xNS0yOC41ODMtNjkuMjMzLTUuNTg2OC0xMzguNjIgNS4zODczLTIwOC40IDMyLjkyMi0yMy4zOTQgOS4yNzgxLTQ1LjU0IDE5Ljg1My02Ni40NCAzMS44MjUtNDEuMjAxIDIzLjY0NC03Ny40MTMgNTIuNTI2LTEwOC4yNCA4Ni40OTZxLTUxLjQ3NiA1Ni40NjctODQuMzQ3IDEzMi4yNGMtMjAuMjAxIDQ2LjU0LTMyLjc3MSA5My4yMy0zNy43NTkgMTM5LjMyLTAuNDQ4OTIgNC40Mzk1LTAuODQ3OTYgOC41Nzk3LTEuMTk3MSAxMi43Mi0zLjY5MTEgNDUuNDkzLTAuMTk5NTIgOTAuNTM2IDEwLjIyNSAxMzUuNjggNS42ODYzIDI0LjQ5MiAxMy4yMTggNDguNjM1IDIyLjY5NSA3Mi42NzggMjcuNjMzIDY5Ljc4NSA2Ny4wODggMTI4LjEgMTE4LjI2IDE3NC42OSAzMS4zNzQgMjguNTgzIDY3LjAzOCA1Mi43MjYgMTA3LjA0IDcyLjYyOSAwLjE0OTY0IDAuMDQ5OSAwLjI0OTQgMC4wOTk4IDAuMzQ5MTYgMC4xNDk2NCAzLjA5MjUgMS41NDY0IDYuMDg1MyAyLjk5MjkgOC42MjkyIDQuMTQwMiA0Ljg4ODIgMi4zNDQ1IDkuMjI3OCA0LjMzOTggMTMuNTY3IDYuMjM1MyAxLjA5NzQgMC40NDg5NSAxLjg5NTQgMC44NDgwMSAyLjc0MzQgMS4xOTcyIDkuNDI3MyA0LjA5MDQgMTguODU1IDcuODMxNSAyNy44MzMgMTEuMTc0IDIuMzQ0NCAwLjg0OCA0LjQ4OTIgMS42NDYxIDYuNTg0MSAyLjM5NDQgMTkuMDA0IDYuNjg0MiAzOC4xMDggMTIuMTIxIDU2Ljc2MyAxNi4yNjIgNy44ODEgMS42OTYgMTUuNzYyIDMuMjQyNCAyMy40NDMgNC41MzkzIDAuOTQ3NzEgMC4xOTk1MyAxLjk0NTMgMC4yOTkzIDIuNjkzNSAwLjQ0ODk0IDExLjYyMiAxLjg0NTYgMjMuMTQ0IDMuMjQyNCAzNC42NjYgNC4xOTAxIDY5LjYzMiA1LjQzNzIgMTM4Ljg3LTUuNTM2OSAyMDguMzUtMzIuOTcyIDI0LjI5MS05LjU3NzQgNDcuMTg2LTIwLjYwMSA2OC42MzQtMzMuMDcyIDM1LjAxNi0yMC4zMDIgNjYuMjktNDQuMzk1IDkzLjg3NC03Mi4zMjkgNC4xNC00LjE5MDEgOC4xODAzLTguNDggMTIuMjIxLTEyLjg3IDguMzc5OC05LjIyODIgMTYuNDYtMTguOTA1IDI0LjE5Mi0yOS4wMzEgMjAuMDAyLTI2LjA4OCAzNy40Ni01NC45NyA1Mi40NzMtODYuNDk2IDIuNTkzNy01LjQ4NyA1LjEzNzYtMTEuMDc0IDcuNjMxNi0xNi44MSAwLjI0OTM5LTAuNTk4NTkgMC41NDg2Ny0xLjI0NzEgMC43OTgwNy0xLjg0NTYgMC4xNDk2NC0wLjI5OTMgMC4yNDk0LTAuNTk4NTkgMC4zOTkwNC0wLjg5Nzg5IDIuNzkzMy02LjU4NDQgNS40MzY5LTEzLjIxOSA4LjA4MDUtMTkuOTUzIDExLjYyMi0zMC41NzggMjAuMTAyLTYxLjUwNSAyNS4yODktOTIuODMxIDAuNjk4MzItNC4zODk2IDEuMzk2Ni05LjEyODQgMi4wOTUtMTMuODY3IDAuODk3ODQtNy4zMzI3IDEuNzQ1OC0xNC44MTUgMi4zNDQ0LTIyLjU0NyAwLjA5OTgtMS40NDY2IDAuMjQ5NC0zLjE0MjYgMC4zOTkwNC00LjkzODMgMS4yOTY5LTE5LjI1NSAxLjI5NjktMzguNjA5IDAuMDk5OC01OC4yNjItMC40NDg5Mi02LjM4NDktMC45OTc2LTEyLjg3LTEuNjk1OS0xOS41NTQtMC4xOTk1Mi0xLjg0NTYtMC40NDg5Mi0zLjg0MDktMC42OTgzMi01LjgzNjItMS45OTUyLTE2LjM2MS00LjkzODEtMzIuNzczLTguOTI4NS00OS41ODMtNS40MzY5LTIzLjA5NS0xMi44MTktNDYuNjQtMjIuMTQ3LTcwLjIzNC0yNy40ODQtNjkuNTg2LTY2LjgzOS0xMjcuNzUtMTE4LjMxLTE3NC42OS0xOC43MDUtMTcuMDYtMzkuMjU1LTMyLjcyMy02MS40MDItNDYuODM5LTEzLjgxNy04Ljg3OS0yOC4yMzItMTcuMDYtNDMuNjQ1LTI0Ljg0MXoiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY0NiIvPgogPHBhdGggZD0ibTQ1LjYzMiA1LjM2ODhjLTAuNTUxMjMtMC4yNzU2My0xLjEzMS0wLjU0ODA5LTEuNzI2NS0wLjgwNDcxLTAuNTQ0OS0wLjIzNzYxLTEuMDg2Ni0wLjQ1NjIxLTEuNjQxLTAuNjU5MDEtMi42Njc1LTAuOTk3OTctNS4zMzgxLTEuNjA2Mi04LjAxMjEtMS44MTU0LTQuMzk3Mi0wLjM1NDgzLTguODA0MSAwLjM0MjE2LTEzLjIzNiAyLjA5MS0xLjQ4NTggMC41ODkyOC0yLjg5MjQgMS4yNjA5LTQuMjE5OCAyLjAyMTMtMi42MTY4IDEuNTAxNy00LjkxNjcgMy4zMzYxLTYuODc0NiA1LjQ5MzZxLTMuMjY5NCAzLjU4NjQtNS4zNTcxIDguMzk4OWMtMS4yODMgMi45NTU5LTIuMDgxNCA1LjkyMTMtMi4zOTgyIDguODQ4Ni0wLjAyODUxMiAwLjI4MTk2LTAuMDUzODU2IDAuNTQ0OTItMC4wNzYwMzEgMC44MDc4OC0wLjIzNDQzIDIuODg5NC0wLjAxMjY3MiA1Ljc1MDIgMC42NDk0MiA4LjYxNzQgMC4zNjExNSAxLjU1NTYgMC44Mzk1MSAzLjA4ODkgMS40NDE0IDQuNjE2IDEuNzU1IDQuNDMyMiA0LjI2MDkgOC4xMzYgNy41MTEgMTEuMDk1IDEuOTkyNiAxLjgxNTQgNC4yNTc4IDMuMzQ4OCA2Ljc5ODQgNC42MTI5IDAuMDA5NSAwLjAwMzIgMC4wMTU4NCAwLjAwNjMgMC4wMjIxOCAwLjAwOTUgMC4xOTY0MSAwLjA5ODIyIDAuMzg2NDkgMC4xOTAwOSAwLjU0ODA2IDAuMjYyOTYgMC4zMTA0NiAwLjE0ODkgMC41ODYwOCAwLjI3NTYzIDAuODYxNjggMC4zOTYwMiAwLjA2OTcgMC4wMjg1MSAwLjEyMDM4IDAuMDUzODYgMC4xNzQyNCAwLjA3NjA0IDAuNTk4NzUgMC4yNTk3OSAxLjE5NzUgMC40OTc0IDEuNzY3NyAwLjcwOTY5IDAuMTQ4OSAwLjA1Mzg2IDAuMjg1MTIgMC4xMDQ1NSAwLjQxODE3IDAuMTUyMDggMS4yMDcgMC40MjQ1MyAyLjQyMDMgMC43Njk4NCAzLjYwNTIgMS4wMzI4IDAuNTAwNTQgMC4xMDc3MiAxLjAwMTEgMC4yMDU5MyAxLjQ4ODkgMC4yODgzIDAuMDYwMTkgMC4wMTI2NyAwLjEyMzU1IDAuMDE5MDEgMC4xNzEwNyAwLjAyODUxIDAuNzM4MTQgMC4xMTcyMiAxLjQ2OTkgMC4yMDU5MyAyLjIwMTcgMC4yNjYxMiA0LjQyMjUgMC4zNDUzMyA4LjgyLTAuMzUxNjYgMTMuMjMzLTIuMDk0MSAxLjU0MjgtMC42MDgyOSAyLjk5NjktMS4zMDg0IDQuMzU5MS0yLjEwMDUgMi4yMjQtMS4yODk0IDQuMjEwMy0yLjgxOTYgNS45NjIyLTQuNTkzOCAwLjI2Mjk0LTAuMjY2MTIgMC41MTk1NS0wLjUzODU5IDAuNzc2MTktMC44MTc0MSAwLjUzMjIyLTAuNTg2MTEgMS4wNDU0LTEuMjAwNyAxLjUzNjUtMS44NDM4IDEuMjcwNC0xLjY1NjkgMi4zNzkyLTMuNDkxMyAzLjMzMjctNS40OTM2IDAuMTY0NzMtMC4zNDg0OSAwLjMyNjMtMC43MDMzNCAwLjQ4NDctMS4wNjc2IDAuMDE1ODQtMC4wMzgwMiAwLjAzNDg1LTAuMDc5MjEgMC4wNTA2OS0wLjExNzIyIDAuMDA5NS0wLjAxOTAxIDAuMDE1ODQtMC4wMzgwMiAwLjAyNTM0LTAuMDU3MDMgMC4xNzc0MS0wLjQxODE5IDAuMzQ1MzEtMC44Mzk1OCAwLjUxMzIxLTEuMjY3MyAwLjczODE0LTEuOTQyMSAxLjI3NjctMy45MDYzIDEuNjA2Mi01Ljg5NTkgMC4wNDQzNS0wLjI3ODggMC4wODg3LTAuNTc5NzcgMC4xMzMwNi0wLjg4MDczIDAuMDU3MDItMC40NjU3MiAwLjExMDg4LTAuOTQwOTQgMC4xNDg5LTEuNDMyIDAuMDA2My0wLjA5MTg4IDAuMDE1ODQtMC4xOTk2IDAuMDI1MzQtMC4zMTM2NCAwLjA4MjM3LTEuMjIyOSAwLjA4MjM3LTIuNDUyMiAwLjAwNjMtMy43MDA0LTAuMDI4NTEtMC40MDU1Mi0wLjA2MzM2LTAuODE3NDEtMC4xMDc3MS0xLjI0MTktMC4wMTI2MzItMC4xMTcyMS0wLjAyODQ3Mi0wLjI0Mzk0LTAuMDQ0MzEyLTAuMzcwNjYtMC4xMjY3Mi0xLjAzOTEtMC4zMTM2My0yLjA4MTUtMC41NjcwNy0zLjE0OTEtMC4zNDUzMS0xLjQ2NjgtMC44MTQxNy0yLjk2MjItMS40MDY2LTQuNDYwOC0xLjc0NTYtNC40MTk2LTQuMjQ1MS04LjExMzctNy41MTQyLTExLjA5NS0xLjE4OC0xLjA4MzUtMi40OTMyLTIuMDc4My0zLjg5OTgtMi45NzQ5LTAuODc3NTYtMC41NjM5My0xLjc5MzEtMS4wODM1LTIuNzcyLTEuNTc3N3oiIGZpbGw9InVybCgjYykiIHN0cm9rZS13aWR0aD0iLjk5MzcyIi8+CiA8cGF0aCBkPSJtNTAuMDYxIDE3LjE4OHMtMC41NDk1OCAxLjE0OC0xLjM5MjYgMi41MjU0Yy0wLjg0MzA2IDEuMzgtMi4xOTE0IDIuODQ0My0zLjM1NTUgMy43NjU2LTEuNTE0MyAxLjIwMTEtMy4wNTAyIDEuOTczOC00LjQxMDIgMi40MTk5LTEuMzU3NiAwLjQ0ODQ0LTIuNDY2OCAwLjcwNTA4LTIuNDY2OCAwLjcwNTA4IDAuNTk3OSAwLjQ4NTQyIDEuMjM4MSAxLjA4OCAxLjU4NTkgMS43NzkzIDAuMzQ1MzQgMC42ODg2OSAwLjU0NDkyIDEuNDY2OSAwLjU0NDkyIDIuMzEyNSAwIDEuNjU0My0wLjYzNzAzIDMuMDc3Ni0xLjY3NTggNC4wODk4LTEuMDM5MyAxLjAwOTctMi40ODI4IDEuNjA3NC00LjA5NzcgMS42MDc0LTEuOTYwNCAwLTMuNTExMS0wLjU4MjUyLTQuNTcyMy0xLjU4MDEtMS4wNjExLTEuMDAwMS0xLjYzMjgtMi40MTczLTEuNjMyOC00LjA4NCAwLTAuNjM0NSAwLjA5NTc4LTEuMjE4NiAwLjI2OTUzLTEuNzQ4IDAuMTc0Mi0wLjUyNjkzIDAuNDI1OTktMS4wMDEzIDAuNzQyMTktMS40MTggMCAwLTAuNDcwNzYgMC4wNjI5Ni0xLjMwODYtMC4xMTMyOC0wLjgzNTc5LTAuMTc2ODEtMi4wNDMtMC41OTU2Ni0zLjUxNTYtMS41NTg2LTEuMjUyNC0wLjgxODU4LTIuMzQ1Mi0xLjk2MzctMy4xMjctMi45MDIzLTAuNzc5NDMtMC45Mzg3Ny0xLjI0NjEtMS42NzM4LTEuMjQ2MS0xLjY3MzggMCAwIDAuMDQ0NjggMy43ODcxIDAuMDI3MzQgNS44ODI4LTAuMDQzODcgNS44MDM2LTAuNjMwODYgNS44Mzk4LTAuNjMwODYgNS44Mzk4LTAuNzE1Ni0xLjAxMjUtMS40ODg2LTEuODg0LTIuNDEwMi0yLjUwMzktMC45MjM1My0wLjYyMDIxLTEuOTk1Ny0wLjk4NDc4LTMuMzE2NC0wLjk4MjQyLTEuNTk3NyAwLjAwMjQtMi40OTI0IDAuNTk0MjktMy4wMDIgMS40MTgtMC41MDk4NCAwLjgyNTkxLTAuNjM0MDkgMS44ODA2LTAuNjg1NTUgMi44MDQ3LTAuMDkzMTYgMS41OTMgMC43MDk0OCAzLjU4NjYgMi4wMzUyIDUuMTc5NyAxLjMyNzkgMS41OTMgMy4xODEzIDIuNzg3NSA1LjE5MzQgMi43ODUyIDAuMTQyMTMgMCAwLjI5MjktMC4wMDk2IDAuNDQ3MjctMC4wMjkzIDAuMTU0MTgtMC4wMjIxMyAwLjMxMjg0LTAuMDUyMTEgMC40NzQ2MS0wLjA5Mzc1IDAgMCAwLjQ1Mjc4IDAuNDM2MjIgMS40OTQxIDEuMTA1NSAxLjA0MTUgMC42NzEyOSAyLjY3MDkgMS41NzM2IDUuMDIzNCAyLjUwOTggMS4yMjAzIDAuNDg1MDQgMi41MjE0IDAuOTk3MjEgNC4xNDg0IDEuMzk2NSAxLjYyNzEgMC4zOTk2NiAzLjU3NjYgMC42ODY4NyA2LjA5NTcgMC43MTg3NSAzLjQ0NTQgMC4wNDE1NyA1LjkwMzQtMC43MTk1IDcuNzM2My0xLjgyMjMgMS44MzU1LTEuMTAyOSAzLjA0OTctMi41NTA3IDQuMDA3OC0zLjg4ODcgMS43Mjk5LTIuNDIxNiAyLjc2OTgtNS4zMjU1IDMuMzc1LTguMTQ2NSAwLjYwNTM2LTIuODE4NSAwLjc3NzUyLTUuNTU0NCAwLjc2NzU4LTcuNjM0OC0wLjAxNzI4LTMuNzA1Ni0wLjI5ODAzLTUuODcxNS0wLjU3MjI3LTcuMTExM2gtMmUtM2MtMC4yNzcxOS0xLjI0MDQtMC41NDg3OC0xLjU1NDctMC41NDg3OC0xLjU1NDd6bS0yNS43MjkgMTAuOTc3YzEuODQ3NSAwLjAxMjQzIDMuNjA1OCAxLjYyNTUgMy41OTU3IDMuNTY2NC0wLjAwOTYgMS43NTc1LTEuNTIyMiAzLjUxMTctMy42MjcgMy41MTE3LTIuNjc4My0wLjAwMjYtMy43NTY2LTEuNzQ3NS0zLjczNDQtMy4yOTg4IDAuMDI0NjgtMS42OTYxIDAuNzM0MzItMy44MDEzIDMuNzY1Ni0zLjc3OTN6bTExLjMxMiAxLjA0MWMtMS40MTg4IDAtMi41NjY0IDEuMTM3Mi0yLjU2NjQgMi41MzkxIDAgMS4zOTkzIDEuMTQ3NiAyLjUzNTIgMi41NjY0IDIuNTM1MnMyLjU2ODQtMS4xMzU4IDIuNTY4NC0yLjUzNTJjMC0xLjQwMTktMS4xNDk1LTIuNTM5MS0yLjU2ODQtMi41Mzkxem0tMjEuOTI0IDEuMTAxNmMxLjA4MDggMCAxLjk2MDkgMC44Nzc3NSAxLjk2MDkgMS45NjA5IDAgMS4wODMzLTAuODgwMTEgMS45NjA5LTEuOTYwOSAxLjk2MDktMS4wODMxIDAtMS45NTktMC44Nzc2Mi0xLjk1OS0xLjk2MDkgMC0xLjA4MzIgMC44NzU5Mi0xLjk2MDkgMS45NTktMS45NjA5em0xMS4yMjEgMC4yODcxMWMtMC45MTYzMiAwLTEuNjU4MiAwLjc1NzU1LTEuNjU4MiAxLjY5MTQgMCAwLjkzNjQxIDAuNzQxODIgMS42OTM0IDEuNjU4MiAxLjY5MzQgMC45MTM5NiAwIDEuNjU2Mi0wLjc1Njk1IDEuNjU2Mi0xLjY5MzQgMC0wLjkzMzg2LTAuNzQyMjgtMS42OTE0LTEuNjU2Mi0xLjY5MTR6bTEwLjc2OCAwLjIyNjU2YzAuNTM5MjQgMCAwLjk4MDQ3IDAuNDQxMjMgMC45ODA0NyAwLjk4MDQ3IDAgMC41NDE3Mi0wLjQ0MTIzIDAuOTc4NTItMC45ODA0NyAwLjk3ODUyLTAuNTQxNiAwLTAuOTgwNDctMC40MzY3OS0wLjk4MDQ3LTAuOTc4NTIgMC0wLjUzOTI0IDAuNDM4ODctMC45ODA0NyAwLjk4MDQ3LTAuOTgwNDd6bS0xMC43NDIgMS4wOTE4YzAuMjcyMTQgMCAwLjQ5MDIzIDAuMjIwNzEgMC40OTAyMyAwLjQ5MDIzIDAgMC4yNzIwMS0wLjIxODEgMC40OTAyNC0wLjQ5MDIzIDAuNDkwMjMtMC4yNjk1OCAwLTAuNDkwMjQtMC4yMTgyMy0wLjQ5MDI0LTAuNDkwMjMgMC0wLjI2OTU5IDAuMjIwNjUtMC40OTAyMyAwLjQ5MDI0LTAuNDkwMjN6bTE0LjQ4NCA2Ljk0MTRzMC4zOTU1MiAwLjA0NjQ1IDAuODYzMjggMC4yMzA0N2MwLjQ2ODE0IDAuMTg2MDYgMS4wMTE4IDAuNTA2MjMgMS4zMTA1IDEuMDUyNyAwLjIzMjggMC40MjY1NyAwLjE1OTE4IDAuODg5ODcgMC4wMjkzIDEuMjUtMC4xMzIzNyAwLjM2MDU3LTAuMzE4MzYgMC42MTMyOC0wLjMxODM2IDAuNjEzMjhzMC4wNzEzMy0wLjM5NDcxIDAuMDc2MTctMC42ODE2NGMwLjAwMjMtMC4yOTYzNy0wLjA3NjE3LTAuNjU4Mi0wLjA3NjE3LTAuNjU4MnMtMC4yMDc5OSAwLjQ0MjU5LTAuOTQzMzYgMC44ODg2N2MtMC43MzQ5OCAwLjQ0MzU5LTIuMDE4NiAxLTQuMTMwOSAxLTEuODA4NSAwLTIuODAzOS0wLjI3NDMyLTMuMzY1Mi0wLjQzMzU5LTAuNTYzNjYtMC4xNjE4OS0wLjY3MzgzLTAuMzIwMzEtMC42NzM4My0wLjMyMDMxczEuNDIzMSAwLjEzMzY1IDIuODg4NyAwLjA1MjczYzEuOTY1LTAuMTA1MDggMy4wNTUyLTAuNTA4ODUgNC4yNDYxLTAuOTU3MDMgMC42ODg4Mi0wLjI2MjE5IDEuNTAzOS0wLjkzNTU1IDEuNTAzOS0wLjkzNTU1cy0wLjI2MDktMC4yNzYxLTAuNjIxMDktMC41NjA1NWMtMC4zMzgwNy0wLjI2MjEyLTAuNzg5MDYtMC41NDEwMi0wLjc4OTA2LTAuNTQxMDJ6IiBmaWx0ZXI9InVybCgjZmlsdGVyOTA5KSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9Ii45OTk5OCIvPgogPHBhdGggZD0ibTUwLjA2MSAxNi40NTlzLTAuNTQ5NTggMS4xNDgtMS4zOTI2IDIuNTI1NGMtMC44NDMwNiAxLjM4LTIuMTkxNCAyLjg0NDMtMy4zNTU1IDMuNzY1Ni0xLjUxNDMgMS4yMDExLTMuMDUwMiAxLjk3MzgtNC40MTAyIDIuNDE5OS0xLjM1NzYgMC40NDg0NC0yLjQ2NjggMC43MDUwOC0yLjQ2NjggMC43MDUwOCAwLjU5NzkgMC40ODU0MiAxLjIzODEgMS4wODggMS41ODU5IDEuNzc5MyAwLjM0NTM0IDAuNjg4NjkgMC41NDQ5MiAxLjQ2NjkgMC41NDQ5MiAyLjMxMjUgMCAxLjY1NDMtMC42MzcwMyAzLjA3NzYtMS42NzU4IDQuMDg5OC0xLjAzOTMgMS4wMDk3LTIuNDgyOCAxLjYwNzQtNC4wOTc3IDEuNjA3NC0xLjk2MDQgMC0zLjUxMTEtMC41ODI1Mi00LjU3MjMtMS41ODAxLTEuMDYxMS0xLjAwMDEtMS42MzI4LTIuNDE3My0xLjYzMjgtNC4wODQgMC0wLjYzNDUgMC4wOTU3NzktMS4yMTg2IDAuMjY5NTMtMS43NDggMC4xNzQyLTAuNTI2OTMgMC40MjU5OS0xLjAwMTMgMC43NDIxOS0xLjQxOCAwIDAtMC40NzA3NiAwLjA2Mjk1Ni0xLjMwODYtMC4xMTMyOC0wLjgzNTc5LTAuMTc2ODEtMi4wNDMtMC41OTU2Ni0zLjUxNTYtMS41NTg2LTEuMjUyNC0wLjgxODU4LTIuMzQ1Mi0xLjk2MzctMy4xMjctMi45MDIzLTAuNzc5NDMtMC45Mzg3Ny0xLjI0NjEtMS42NzM4LTEuMjQ2MS0xLjY3MzggMCAwIDAuMDQ0Njg0IDMuNzg3MSAwLjAyNzM0NCA1Ljg4MjgtMC4wNDM4NyA1LjgwMzYtMC42MzA4NiA1LjgzOTgtMC42MzA4NiA1LjgzOTgtMC43MTU2LTEuMDEyNS0xLjQ4ODYtMS44ODQtMi40MTAyLTIuNTAzOS0wLjkyMzUzLTAuNjIwMjEtMS45OTU3LTAuOTg0NzgtMy4zMTY0LTAuOTgyNDItMS41OTc3IDAuMDAyNC0yLjQ5MjQgMC41OTQyOS0zLjAwMiAxLjQxOC0wLjUwOTg0IDAuODI1OTEtMC42MzQwOSAxLjg4MDYtMC42ODU1NSAyLjgwNDctMC4wOTMxNiAxLjU5MyAwLjcwOTQ4IDMuNTg2NiAyLjAzNTIgNS4xNzk3IDEuMzI3OSAxLjU5MyAzLjE4MTMgMi43ODc1IDUuMTkzNCAyLjc4NTIgMC4xNDIxMyAwIDAuMjkyOS0wLjAwOTU3NyAwLjQ0NzI3LTAuMDI5Mjk3IDAuMTU0MTgtMC4wMjIxMyAwLjMxMjg0LTAuMDUyMTEgMC40NzQ2MS0wLjA5Mzc1IDAgMCAwLjQ1Mjc4IDAuNDM2MjIgMS40OTQxIDEuMTA1NSAxLjA0MTUgMC42NzEyOSAyLjY3MDkgMS41NzM2IDUuMDIzNCAyLjUwOTggMS4yMjAzIDAuNDg1MDQgMi41MjE0IDAuOTk3MjEgNC4xNDg0IDEuMzk2NSAxLjYyNzEgMC4zOTk2NiAzLjU3NjYgMC42ODY4NyA2LjA5NTcgMC43MTg3NSAzLjQ0NTQgMC4wNDE1NyA1LjkwMzQtMC43MTk1IDcuNzM2My0xLjgyMjMgMS44MzU1LTEuMTAyOSAzLjA0OTctMi41NTA3IDQuMDA3OC0zLjg4ODcgMS43Mjk5LTIuNDIxNiAyLjc2OTgtNS4zMjU1IDMuMzc1LTguMTQ2NSAwLjYwNTM2LTIuODE4NSAwLjc3NzUyLTUuNTU0NCAwLjc2NzU4LTcuNjM0OC0wLjAxNzI4LTMuNzA1Ni0wLjI5ODAzLTUuODcxNS0wLjU3MjI3LTcuMTExM2gtMC4wMDE5NTNjLTAuMjc3MjQtMS4yNDA0LTAuNTQ4ODMtMS41NTQ3LTAuNTQ4ODMtMS41NTQ3em0tMjUuNzI5IDEwLjk3N2MxLjg0NzUgMC4wMTI0MyAzLjYwNTggMS42MjU1IDMuNTk1NyAzLjU2NjQtMC4wMDk2IDEuNzU3NS0xLjUyMjIgMy41MTE3LTMuNjI3IDMuNTExNy0yLjY3ODMtMC4wMDI2LTMuNzU2Ni0xLjc0NzUtMy43MzQ0LTMuMjk4OCAwLjAyNDY4LTEuNjk2MSAwLjczNDMyLTMuODAxMyAzLjc2NTYtMy43Nzkzem0xMS4zMTIgMS4wNDFjLTEuNDE4OCAwLTIuNTY2NCAxLjEzNzItMi41NjY0IDIuNTM5MSAwIDEuMzk5MyAxLjE0NzYgMi41MzUyIDIuNTY2NCAyLjUzNTJzMi41Njg0LTEuMTM1OCAyLjU2ODQtMi41MzUyYzAtMS40MDE5LTEuMTQ5NS0yLjUzOTEtMi41Njg0LTIuNTM5MXptLTIxLjkyNCAxLjEwMTZjMS4wODA4IDAgMS45NjA5IDAuODc3NzUgMS45NjA5IDEuOTYwOSAwIDEuMDgzMy0wLjg4MDExIDEuOTYwOS0xLjk2MDkgMS45NjA5LTEuMDgzMSAwLTEuOTU5LTAuODc3NjItMS45NTktMS45NjA5IDAtMS4wODMyIDAuODc1OTItMS45NjA5IDEuOTU5LTEuOTYwOXptMTEuMjIxIDAuMjg3MTFjLTAuOTE2MzIgMC0xLjY1ODIgMC43NTc1NS0xLjY1ODIgMS42OTE0IDAgMC45MzY0MSAwLjc0MTgyIDEuNjkzNCAxLjY1ODIgMS42OTM0IDAuOTEzOTYgMCAxLjY1NjItMC43NTY5NSAxLjY1NjItMS42OTM0IDAtMC45MzM4Ni0wLjc0MjI4LTEuNjkxNC0xLjY1NjItMS42OTE0em0xMC43NjggMC4yMjY1NmMwLjUzOTI0IDAgMC45ODA0NyAwLjQ0MTIzIDAuOTgwNDcgMC45ODA0NyAwIDAuNTQxNzItMC40NDEyMyAwLjk3ODUyLTAuOTgwNDcgMC45Nzg1Mi0wLjU0MTYgMC0wLjk4MDQ3LTAuNDM2NzktMC45ODA0Ny0wLjk3ODUyIDAtMC41MzkyNCAwLjQzODg3LTAuOTgwNDcgMC45ODA0Ny0wLjk4MDQ3em0tMTAuNzQyIDEuMDkxOGMwLjI3MjE0IDAgMC40OTAyMyAwLjIyMDcxIDAuNDkwMjMgMC40OTAyMyAwIDAuMjcyMDEtMC4yMTgxIDAuNDkwMjQtMC40OTAyMyAwLjQ5MDIzLTAuMjY5NTggMC0wLjQ5MDI0LTAuMjE4MjMtMC40OTAyNC0wLjQ5MDIzIDAtMC4yNjk1OSAwLjIyMDY1LTAuNDkwMjMgMC40OTAyNC0wLjQ5MDIzem0xNC40ODQgNi45NDE0czAuMzk1NTIgMC4wNDY0NSAwLjg2MzI4IDAuMjMwNDdjMC40NjgxNCAwLjE4NjA2IDEuMDExOCAwLjUwNjIzIDEuMzEwNSAxLjA1MjcgMC4yMzI4IDAuNDI2NTcgMC4xNTkxOCAwLjg4OTg3IDAuMDI5Mjk3IDEuMjUtMC4xMzIzNyAwLjM2MDU3LTAuMzE4MzYgMC42MTMyOC0wLjMxODM2IDAuNjEzMjhzMC4wNzEzMzEtMC4zOTQ3MSAwLjA3NjE3MS0wLjY4MTY0YzAuMDAyMy0wLjI5NjM3LTAuMDc2MTcxLTAuNjU4Mi0wLjA3NjE3MS0wLjY1ODJzLTAuMjA3OTkgMC40NDI1OS0wLjk0MzM2IDAuODg4NjdjLTAuNzM0OTggMC40NDM1OS0yLjAxODYgMS00LjEzMDkgMS0xLjgwODUgMC0yLjgwMzktMC4yNzQzMi0zLjM2NTItMC40MzM1OS0wLjU2MzY2LTAuMTYxODktMC42NzM4My0wLjMyMDMxLTAuNjczODMtMC4zMjAzMXMxLjQyMzEgMC4xMzM2NSAyLjg4ODcgMC4wNTI3MzVjMS45NjUtMC4xMDUwOCAzLjA1NTItMC41MDg4NSA0LjI0NjEtMC45NTcwMyAwLjY4ODgyLTAuMjYyMTkgMS41MDM5LTAuOTM1NTUgMS41MDM5LTAuOTM1NTVzLTAuMjYwOS0wLjI3NjEtMC42MjEwOS0wLjU2MDU1Yy0wLjMzODA3LTAuMjYyMTItMC43ODkwNi0wLjU0MTAyLTAuNzg5MDYtMC41NDEwMnoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iLjk5OTk4Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gimp,gimp,image,gif,tiff,png,jpeg,bmp,tga,pcx,bitmap,jpg,pixmap\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"gimp.desktop\"\nLABEL oc.launch=\"gimp.Gimp\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Gimp\"\nLABEL oc.displayname=\"Gimp\"\nLABEL oc.path=\"/usr/bin/gimp\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;\"\nLABEL oc.fileextensions=\"dds\"\nLABEL oc.legacyfileextensions=\"dds\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gimp\"\nENV APPBIN \"/usr/bin/gimp\"\nENV APP \"/usr/bin/gimp\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gimp/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gimp/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gimp/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gimp/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnumeric glpk\nLABEL oc.icon=\"gnumeric.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL2lua3NjYXBlLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMiIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40MyIKICAgd2lkdGg9IjQ4IgogICBoZWlnaHQ9IjQ4IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL3ZpbmljaXVzL3RhbmdvLWljb24tdGhlbWUtY29kZS9hcHBzL3NjYWxhYmxlIgogICBzb2RpcG9kaTpkb2NuYW1lPSJnbnVtZXJpYy5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvdmluaWNpdXMvdGFuZ28taWNvbi10aGVtZS1jb2RlL2FwcHMvc2NhbGFibGUvZ251bWVyaWMucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTAiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI5MCIKICAgdmlld0JveD0iMCAwIDQ4IDQ4Ij4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzNSI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzOTAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjA2ODM3NjA3OyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMzOTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuMjEzNjc1MjI7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzM5NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5MDYwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0OTA2MiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A0OTA2NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3NjAyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RiZGJkNTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNzYwNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YxZjFmMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNzYwNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI1ODA1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNTgwNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNTgwOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI0MDQ3Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0ZjE5NztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDA0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izc0ZDIxODtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AyNDA1MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE4Nzg2Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzM0NjVhNDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxODc4OCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxODc5MCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE2MTQ3Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxNjE0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxNjE1MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDk5NDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY3MTcxO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDk5NTAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkYzI1MjU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wOTk1MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE1NjYyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wMTU2NjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOGY4Zjg7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDE1NjY2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjU5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZhZmFmYTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wMjYwIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYmJiYmJiO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AyNjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNjkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTNhM2EzO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AyNzAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0YzRjNGM7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDI3MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2OTkiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MDEiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY3MTcxO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MDMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2MwMDAwO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcxMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxMyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1YjhjY2I7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxNSIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzNDY1YTQ7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NzE5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NzIxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3M2QyMTY7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MjMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDVmN2IzO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTA0OCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTA1MCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwLjUiCiAgICAgICAgIGlkPSJzdG9wNTA1NiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1MDUyIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3NjAyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc2MDgiCiAgICAgICB4MT0iMTEuOTE4OTIiCiAgICAgICB5MT0iNDIuMDIwNDc3IgogICAgICAgeDI9IjExLjkxODkyIgogICAgICAgeTI9IjYuOTgyNzQ3NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NTgxNiwwLDAsMS4xNzE3MDIsLTgxLjc0NDU1LC00LjE4OTQ4MSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI3NjAyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzI5NjYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSIxMS45MTg5MiIKICAgICAgIHkxPSI0Mi4wMjA0NzciCiAgICAgICB4Mj0iMTEuOTE4OTIiCiAgICAgICB5Mj0iNi45ODI3NDc2IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLDgwKSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjU4MDUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzMjk2OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgY3g9Ii03NC4wMTEwOTMiCiAgICAgICBjeT0iMzguODkwOTQyIgogICAgICAgZng9Ii03NC4wMTEwOTMiCiAgICAgICBmeT0iMzguODkwOTQyIgogICAgICAgcj0iMTMuNjYzNTg2IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyOTcwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjk3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMyOTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTkuMjU2NjM3NiIKICAgICAgIHkxPSI1NS44MzI5NDMiCiAgICAgICB4Mj0iLTE2LjYwNTM5MiIKICAgICAgIHkyPSI0OC41ODk0NzQiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0MDQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzI5NzYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMjk3OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNTgwNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDM1NzA0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBjeD0iLTc0LjAxMTA5MyIKICAgICAgIGN5PSIzOC44OTA5NDIiCiAgICAgICBmeD0iLTc0LjAxMTA5MyIKICAgICAgIGZ5PSIzOC44OTA5NDIiCiAgICAgICByPSIxMy42NjM1ODYiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE2MTQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU3MDYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41Mzk0NDMsMCwwLDEuNTEwODcxLDEwMC45NjU2LC0xNS4xODMxOSkiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTcwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzEwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzg5MzY1LDAsMCwxLjM4OTM2NSw0OC45OTAyOSwtNDYuMjA0MDUpIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzEyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMzg5MzY1LDAsMCwxLjM4OTM2NSw0OC45OTAyOSwtNDYuMjA0MDUpIgogICAgICAgeDE9Ii0xOC4wNzk4ODIiCiAgICAgICB5MT0iNDguNjY1NjgiCiAgICAgICB4Mj0iLTE4LjUiCiAgICAgICB5Mj0iNTYuODI3Nzc4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1NzE0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI1ODA1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDEwNDkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGN4PSItNzQuMDExMDkzIgogICAgICAgY3k9IjM4Ljg5MDk0MiIKICAgICAgIGZ4PSItNzQuMDExMDkzIgogICAgICAgZnk9IjM4Ljg5MDk0MiIKICAgICAgIHI9IjEzLjY2MzU4NiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTA1MSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5OTQ4IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDEwNTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItNTQuMTAyNzgzIgogICAgICAgeTE9IjIwLjQ1Nzg3OCIKICAgICAgIHgyPSItNDkuOTk0MTQ4IgogICAgICAgeTI9IjMzLjU0MzM2NSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTg3ODYiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTA1NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMDU3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTE4LjA3OTg4MiIKICAgICAgIHkxPSI0OC42NjU2OCIKICAgICAgIHgyPSItMTguNSIKICAgICAgIHkyPSI1Ni44Mjc3NzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE2MTQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDEwNTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItNDkuOTk0MTQ4IgogICAgICAgeTE9IjM3LjAzNjQ5OSIKICAgICAgIHgyPSItNDkuOTk0MTQ4IgogICAgICAgeTI9IjE3Ljg1NzIwMyIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjU4MDUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTE0MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgY3g9Ii03NC4wMTEwOTMiCiAgICAgICBjeT0iMzguODkwOTQyIgogICAgICAgZng9Ii03NC4wMTEwOTMiCiAgICAgICBmeT0iMzguODkwOTQyIgogICAgICAgcj0iMTMuNjYzNTg2IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNjE0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMTQ1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTE0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii01NC4xMDI3ODMiCiAgICAgICB5MT0iMjAuNDU3ODc4IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMzMuNTQzMzY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxODc4NiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMTQ5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTkuMjU2NjM3NiIKICAgICAgIHkxPSI1NS44MzI5NDMiCiAgICAgICB4Mj0iLTE2LjYwNTM5MiIKICAgICAgIHkyPSI0OC41ODk0NzQiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0MDQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDExNTEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MTE1MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii00OS45OTQxNDgiCiAgICAgICB5MT0iMzcuMDM2NDk5IgogICAgICAgeDI9Ii00OS45OTQxNDgiCiAgICAgICB5Mj0iMTcuODU3MjAzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNzYwMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5MDY2IgogICAgICAgeDE9IjI0LjQ5NzAxNSIKICAgICAgIHkxPSI0My4wMTI5MDkiCiAgICAgICB4Mj0iMjQuNDk3MDE1IgogICAgICAgeTI9IjUuOTg3MDE3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA0NzAwNiwwLDAsMS4wNTM2OTYsLTEuMTU0MzY2LC0xLjMwODg1KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgcj0iMTcuNTc2NjU0IgogICAgICAgZnk9IjM1LjM3MzA5MyIKICAgICAgIGZ4PSIyMi45MzA0NjIiCiAgICAgICBjeT0iMzUuMzczMDkzIgogICAgICAgY3g9IjIyLjkzMDQ2MiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDAsMC4wMDAwMDAsMC4wMDAwMDAsMC4zMzMzMzMsMi42NTg0NjNlLTE2LDIzLjU4MjA2KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjI1MiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NDYiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxODIiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTM2ZDE4O3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MTg0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDc5MDIwO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MTg2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDE5MiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlOWI5NmU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDE5NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YxZDE5ZTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDE5NiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQyMTAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWFiYTZmO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjAuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MjEyIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjk3YTFiO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3A0MjE0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDIyMiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDIyNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC42ODYzOTA1MjsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDQyMjYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTQ2Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A0OTQ4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDQ5NTAiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTc5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZiZjBlMDtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIwLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDk4MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2YwY2U5OTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIGlkPSJzdG9wNDk4MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5OTUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGU5NTIzO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDQ5OTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhMzZkMTg7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDQ5OTkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODcxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4NzMiCiAgICAgICAgIG9mZnNldD0iMS4wMDAwMDAwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2NjY2NjO3N0b3Atb3BhY2l0eToxLjAwMDAwMDA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExNDIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDUxMTQ0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAuNSIKICAgICAgICAgaWQ9InN0b3A1MTE0NiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1MTE0OCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNzYwMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYwMzIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MTIyMTYsMCwwLDEuMDUzNjk2LC0wLjQ0OTQ5NSwtMS4zMDg4NSkiCiAgICAgICB4MT0iMjQuNDk3MDE1IgogICAgICAgeTE9IjQzLjAxMjkwOSIKICAgICAgIHgyPSIyNC40OTcwMTUiCiAgICAgICB5Mj0iNS45ODcwMTcyIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNTgwNSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDYwMzQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGN4PSItNzQuMDExMDkzIgogICAgICAgY3k9IjM4Ljg5MDk0MiIKICAgICAgIGZ4PSItNzQuMDExMDkzIgogICAgICAgZnk9IjM4Ljg5MDk0MiIKICAgICAgIHI9IjEzLjY2MzU4NiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDM2IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDk5NDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDM4IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTU0LjEwMjc4MyIKICAgICAgIHkxPSIyMC40NTc4NzgiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIzMy41NDMzNjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE4Nzg2IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjA0MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ii05LjI1NjYzNzYiCiAgICAgICB5MT0iNTUuODMyOTQzIgogICAgICAgeDI9Ii0xNi42MDUzOTIiCiAgICAgICB5Mj0iNDguNTg5NDc0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyNDA0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYwNDIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSItMTguMDc5ODgyIgogICAgICAgeTE9IjQ4LjY2NTY4IgogICAgICAgeDI9Ii0xOC41IgogICAgICAgeTI9IjU2LjgyNzc3OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTYxNDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MDQ0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTQ5Ljk5NDE0OCIKICAgICAgIHkxPSIzNy4wMzY0OTkiCiAgICAgICB4Mj0iLTQ5Ljk5NDE0OCIKICAgICAgIHkyPSIxNy44NTcyMDMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzOTAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMzk2IgogICAgICAgeDE9IjciCiAgICAgICB5MT0iLTE5LjUiCiAgICAgICB4Mj0iMTMiCiAgICAgICB5Mj0iLTE5LjUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDUuNTU5OTFlLTM1LDAuNzA5Njc4LDEuNjI2NDkzZS0xNiwtMTAuMTYxMjkpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzkwIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzQwNCIKICAgICAgIHgxPSItMy45OTY0NTA3IgogICAgICAgeTE9Ii0yOC41NTAxODYiCiAgICAgICB4Mj0iLTEzIgogICAgICAgeTI9Ii0yOC41NTAxODYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC44MjM1MjksMCwtNy4yMzUyOTQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzkwIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzQwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjYuOTk3MDA1NSIKICAgICAgIHkxPSItMjcuNjg2Njg0IgogICAgICAgeDI9IjEzLjY2OTE0NiIKICAgICAgIHkyPSItMjguNzIzODU2IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsLTIuMjQxOTAzZS0zNCwwLjI5MDMyMywxLjExMDcyMWUtMTYsLTIuODM4NzEpIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNzIwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTAyNCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBpZD0iYmFzZSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgc2hvd2d1aWRlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgogICAgIGZpbGw9IiM4ODhhODUiCiAgICAgaW5rc2NhcGU6em9vbT0iMSIKICAgICBpbmtzY2FwZTpjeD0iMzYiCiAgICAgaW5rc2NhcGU6Y3k9IjEyLjUiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIKICAgICBzaG93Ym9yZGVyPSJmYWxzZSIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiIC8+CiAgPHJlY3QKICAgICByeD0iMi44OTE0OTQiCiAgICAgcnk9IjIuODkxNDk0IgogICAgIHk9IjUuNTI2NDk0IgogICAgIHg9IjIuMzk0MzIxIgogICAgIGhlaWdodD0iMzcuOTYwMzM5IgogICAgIHdpZHRoPSIzNC4xMDYwNzkiCiAgICAgaWQ9InJlY3Q1OTc2IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NjAzMik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM1NTU3NTM7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMzY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHk9Ii0zNSIKICAgICB4PSI3IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzUiCiAgICAgaWQ9InJlY3Q1OTgwIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLDEsLTEsMCwwLDApIiAvPgogIDxyZWN0CiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q1OTgyIgogICAgIHdpZHRoPSIzNSIKICAgICBoZWlnaHQ9IjEiCiAgICAgeD0iNyIKICAgICB5PSItMjQiIC8+CiAgPHJlY3QKICAgICB5PSItMTMiCiAgICAgeD0iNyIKICAgICBoZWlnaHQ9IjEiCiAgICAgd2lkdGg9IjM1IgogICAgIGlkPSJyZWN0NTk4NCIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSIgLz4KICA8cmVjdAogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgIGlkPSJyZWN0NTk4NiIKICAgICB3aWR0aD0iMzUiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjciCiAgICAgeT0iLTUiIC8+CiAgPHJlY3QKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q1OTg4IgogICAgIHdpZHRoPSIzMSIKICAgICBoZWlnaHQ9IjEiCiAgICAgeD0iNCIKICAgICB5PSIyMCIgLz4KICA8cmVjdAogICAgIHk9IjI0IgogICAgIHg9IjQiCiAgICAgaGVpZ2h0PSIxIgogICAgIHdpZHRoPSIzMSIKICAgICBpZD0icmVjdDU5OTAiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiAvPgogIDxyZWN0CiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiM4ZDhlOGI7ZmlsbC1vcGFjaXR5OjAuNTYwMzQ0ODtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgIGlkPSJyZWN0NTk5MiIKICAgICB3aWR0aD0iMzEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjQiCiAgICAgeT0iMjgiIC8+CiAgPHJlY3QKICAgICB5PSIzMiIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q1OTk0IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDU5OTYiCiAgICAgd2lkdGg9IjMxIgogICAgIGhlaWdodD0iMSIKICAgICB4PSI0IgogICAgIHk9IjM2IiAvPgogIDxyZWN0CiAgICAgeT0iNDEiCiAgICAgeD0iNCIKICAgICBoZWlnaHQ9IjEiCiAgICAgd2lkdGg9IjMxIgogICAgIGlkPSJyZWN0NTk5OCIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzhkOGU4YjtmaWxsLW9wYWNpdHk6MC41NjAzNDQ4O2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPHJlY3QKICAgICB5PSIxNiIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q2MDAwIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDYwMDIiCiAgICAgd2lkdGg9IjMxIgogICAgIGhlaWdodD0iMSIKICAgICB4PSI0IgogICAgIHk9IjEyIiAvPgogIDxyZWN0CiAgICAgeT0iNyIKICAgICB4PSI0IgogICAgIGhlaWdodD0iMSIKICAgICB3aWR0aD0iMzEiCiAgICAgaWQ9InJlY3Q2MDA0IgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojOGQ4ZThiO2ZpbGwtb3BhY2l0eTowLjU2MDM0NDg7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8cmVjdAogICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjIzMzg5ZS0xNywxLC0xLDEuNjAwNjc3ZS0xNywwLDApIgogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzM5Nik7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eTowLjU5MzA3MzU5IgogICAgIGlkPSJyZWN0NjAwOCIKICAgICB3aWR0aD0iNiIKICAgICBoZWlnaHQ9IjIyIgogICAgIHg9IjciCiAgICAgeT0iLTM1IiAvPgogIDxyZWN0CiAgICAgeT0iLTEzIgogICAgIHg9IjciCiAgICAgaGVpZ2h0PSI5IgogICAgIHdpZHRoPSI2IgogICAgIGlkPSJyZWN0MzQwNiIKICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM0MDgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MC41OTMwNzM1OSIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCg5LjA5NTY4MmUtMTgsMSwtMSwzLjkxMjc2NmUtMTcsMCwwKSIgLz4KICA8cmVjdAogICAgIHk9Ii00MSIKICAgICB4PSItMTMiCiAgICAgaGVpZ2h0PSIyOCIKICAgICB3aWR0aD0iOSIKICAgICBpZD0icmVjdDYwMzAiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNDA0KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjAuNTkzMDczNTkiCiAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiIC8+CiAgPHJlY3QKICAgICByeD0iMS44OTU0OTUzIgogICAgIHJ5PSIxLjg5NTQ5NTMiCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjAuNDgyNzU4NTk7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICBpZD0icmVjdDU5NzgiCiAgICAgd2lkdGg9IjMyLjA2MjY2NCIKICAgICBoZWlnaHQ9IjM1Ljk1ODM0NyIKICAgICB4PSIzLjQwNTA3OTEiCiAgICAgeT0iNi41MTM4OTAzIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAuMDc4NiwtMTguMDkxNDgpIgogICAgIGlkPSJnNjAxMCI+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yMjA2NywwLDAsMC45NTgzMzMsNzIuMTI1MDMsMTUuODUzMzcpIgogICAgICAgZD0iTSAtNjAuMzQ3NTA3IDM4Ljg5MDk0MiBBIDEzLjY2MzU4NiAxMy42NjM1ODYgMCAxIDEgIC04Ny42NzQ2NzksMzguODkwOTQyIEEgMTMuNjYzNTg2IDEzLjY2MzU4NiAwIDEgMSAgLTYwLjM0NzUwNyAzOC44OTA5NDIgeiIKICAgICAgIHNvZGlwb2RpOnJ5PSIxMy42NjM1ODYiCiAgICAgICBzb2RpcG9kaTpyeD0iMTMuNjYzNTg2IgogICAgICAgc29kaXBvZGk6Y3k9IjM4Ljg5MDk0MiIKICAgICAgIHNvZGlwb2RpOmN4PSItNzQuMDExMDkzIgogICAgICAgaWQ9InBhdGg2MDEyIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDYwMzQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNhNDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2NzAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE4LjU0ODU5MiwzNy41OTM3NSBDIC0yNi4yOTQyNDksMzcuODA2MTY1IC0zMi40OTg0MzYsNDIuNDI4MzEzIC0zMi40OTg0MzksNDguMDYyNSBDIC0zMi40OTg0MzksNDguMzc4MDE1IC0zMi40OTg0MzksNTEuNzQ2OTg2IC0zMi40OTg0MzksNTIuMDYyNSBDIC0zMi40OTg0MzksNTcuODMxOTA4IC0yNS45ODkzMTgsNjIuNDk5OTk5IC0xNy45ODQzMjksNjIuNSBDIC05Ljk3OTMzOTgsNjIuNSAtMy41MDE1Njc3LDU3LjgzMTkwOSAtMy41MDE1Njc4LDUyLjA2MjUgQyAtMy41MDE1Njc4LDUxLjc0Njk4NSAtMy41MDE1Njc4LDQ4LjM3MTI1NCAtMy41MDE1Njc4LDQ4LjA2MjUgQyAtMy41MDE1Njc4LDQyLjI5MzA5MiAtOS45NzkzMzg4LDM3LjU5Mzc0OCAtMTcuOTg0MzI5LDM3LjU5Mzc1IEMgLTE4LjE3MTk0NiwzNy41OTM3NSAtMTguMzYyNjk2LDM3LjU4ODY1MiAtMTguNTQ4NTkyLDM3LjU5Mzc1IHogIgogICAgICAgaWQ9InBhdGg2MDE0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3Nzc3NzYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE1LDU3IEwgLTE1LDYxLjc5OTI0MyBDIC0xMC45MTIwNzksNjEuMTkxMzkgLTQuOTgwMzM4OSw1OC41Nzg4NzUgLTQsNTMgTCAtNCw0OCBMIC0xNSw1NyB6ICIKICAgICAgIGlkPSJwYXRoNjAxNiIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzRlOWEwNjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIC0yMyw1Ny4zNjk4MjIgTCAtMjMsNjEuMzM3MjIzIEMgLTIxLjAyOTIyMiw2MS44ODUxMzcgLTE3LjU3MjgxNCw2Mi4zMDE5NzUgLTE1LDYxLjc2NDY1OCBMIC0xNSw1Ny43NjQ2NTggTCAtMjMsNTcuMzY5ODIyIHogIgogICAgICAgaWQ9InBhdGg2MDE4IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2NjU5NSwwLDAsMS4wNDI1MjgsMzUuMzMxNTMsMjMuNDM0MDYpIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNTczODQ7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NjAzNik7c3Ryb2tlLXdpZHRoOjAuOTQ4MzIyNjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAtMzcuMzI4OTY0LDI3LjQ0Njg1IEMgLTM3LjMyODk2NCwzMi40NzU1OTQgLTQzLjAwMjk2NywzNi41NTY4OTQgLTQ5Ljk5NDE0OCwzNi41NTY4OTQgQyAtNTYuOTg1MzMsMzYuNTU2ODk0IC02Mi42NTkzMzIsMzIuNDc1NTk0IC02Mi42NTkzMzIsMjcuNDQ2ODUgQyAtNjIuNjU5MzMyLDI3LjIwNjAxNCAtNjIuNjQ2MzE4LDI1LjA0ODkzNyAtNjIuNjIwNzY4LDI0LjgxMjc5MSBDIC02Mi4xMTI4MzMsMjAuMTE4MTMgLTU2LjY1MDUwOSwxOC4zMzY4MDUgLTQ5Ljk5NDE0OCwxOC4zMzY4MDUgQyAtNDMuMzY5MTIsMTguMzM2ODA1IC0zNy45MjY5MTIsMjAuMDgzMzgyIC0zNy4zNzUwMjksMjQuNzQ2NTY0IEMgLTM3LjM0NDUyOCwyNS4wMDQyODkgLTM3LjMyODk2NCwyNy4xODM0NzcgLTM3LjMyODk2NCwyNy40NDY4NSB6ICIKICAgICAgIGlkPSJwYXRoNjAyMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3NzYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwMzgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZmY3MTcxO3N0cm9rZS13aWR0aDowLjk0ODMyMjY1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDYwMjIiCiAgICAgICBzb2RpcG9kaTpjeD0iLTQ5Ljk5NDE0OCIKICAgICAgIHNvZGlwb2RpOmN5PSIyNy40NDY4NSIKICAgICAgIHNvZGlwb2RpOnJ4PSIxMi42NjUxODQiCiAgICAgICBzb2RpcG9kaTpyeT0iOS4xMTAwNDQ1IgogICAgICAgZD0iTSAtMzcuMzI4OTY0IDI3LjQ0Njg1IEEgMTIuNjY1MTg0IDkuMTEwMDQ0NSAwIDEgMSAgLTYyLjY1OTMzMiwyNy40NDY4NSBBIDEyLjY2NTE4NCA5LjExMDA0NDUgMCAxIDEgIC0zNy4zMjg5NjQgMjcuNDQ2ODUgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY2NTk1LDAsMCwxLjA0MjUyOCwzNS4zMzE1MywxOS40MzQwNikiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE4LjAwNzg0Myw0Ny41MjU1NDUgTCAtNC44MzQ5MTE5LDQ0LjY0Mjk2OSBDIC0xLjY2MDI5ODIsNTEuNDQzMDI3IC04LjQ5MDk0OTcsNTcuMDk4MTI0IC0xNC45ODgwMjQsNTcuODIzMTI4IEwgLTE4LjAwNzg0Myw0Ny41MjU1NDUgeiAiCiAgICAgICBpZD0icGF0aDYwMjQiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDIpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gLTE3Ljk2MzAxOCw0Ny41NTYyMTMgTCAtMjMuMDAxOTE5LDU3LjM4MTU0MSBDIC0yMC4zODA4Myw1OC4xMTcwMTEgLTE3Ljc4MTA1Niw1OC4xNjMwNzEgLTE0Ljk2MzAxOCw1Ny44MTUzMTkgTCAtMTcuOTYzMDE4LDQ3LjU1NjIxMyB6ICIKICAgICAgIGlkPSJwYXRoNjAyNiIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2NjU5NSwwLDAsMS4wNDI1MjgsMzUuMzMxNTMsMTkuNDM0MDYpIgogICAgICAgZD0iTSAtMzcuMzI4OTY0IDI3LjQ0Njg1IEEgMTIuNjY1MTg0IDkuMTEwMDQ0NSAwIDEgMSAgLTYyLjY1OTMzMiwyNy40NDY4NSBBIDEyLjY2NTE4NCA5LjExMDA0NDUgMCAxIDEgIC0zNy4zMjg5NjQgMjcuNDQ2ODUgeiIKICAgICAgIHNvZGlwb2RpOnJ5PSI5LjExMDA0NDUiCiAgICAgICBzb2RpcG9kaTpyeD0iMTIuNjY1MTg0IgogICAgICAgc29kaXBvZGk6Y3k9IjI3LjQ0Njg1IgogICAgICAgc29kaXBvZGk6Y3g9Ii00OS45OTQxNDgiCiAgICAgICBpZD0icGF0aDYwMjgiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjUxNDc2NzkzO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDYwNDQpO3N0cm9rZS13aWR0aDowLjk0ODMyMjY1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"gnumeric,numeric\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"gnumeric.desktop\"\nLABEL oc.launch=\"gnumeric.Gnumeric\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Gnumeric\"\nLABEL oc.displayname=\"Gnumerix (alpine)\"\nLABEL oc.path=\"/usr/bin/gnumeric\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-gnumeric;application/x-oleo;application/x-planperfect;application/x-sc;application/x-sylk;application/x-xbase;\"\nLABEL oc.fileextensions=\"gnm\"\nLABEL oc.legacyfileextensions=\"gnm\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Gnumeric\"\nENV APPBIN \"/usr/bin/gnumeric\"\nENV APP \"/usr/bin/gnumeric\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gnumeric/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gnumeric/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gnumeric/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gnumeric/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends golly && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"golly.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUwOCA1MDgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwOCA1MDg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZEODQ2OTsiIGN4PSIyNTQiIGN5PSIyNTQiIHI9IjI1NCIvPg0KPGc+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzMyNEE1RTsiIGQ9Ik0yNTQuOCwyNTMuNmwtODUuNiwxMy4yYy0yLDAuNC00LjQtMC40LTUuNi0ybC01NC40LTY3LjZjLTEuMi0xLjYtMS42LTQtMC44LTZsMzEuMi04MC44DQoJCWMwLjgtMiwyLjQtMy42LDQuOC0zLjZMMjMwLDkzLjJjMi0wLjQsNC40LDAuNCw1LjYsMmw1NC40LDY4YzEuMiwxLjYsMS42LDQsMC44LDZMMjU5LjYsMjUwQzI1OC44LDI1MS42LDI1Ni44LDI1My4yLDI1NC44LDI1My42eg0KCQkgTTE3MC44LDI1NC40bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYyTDE0OS42LDExOGwtMjguOCw3NC40TDE3MC44LDI1NC40eiIvPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiMzMjRBNUU7IiBkPSJNMjc3LjYsNDAxLjZMMTkyLDQxNC44Yy0yLDAuNC00LjQtMC40LTUuNi0ybC01NC02Ny42Yy0xLjItMS42LTEuNi00LTAuOC02bDMxLjItODAuOA0KCQljMC44LTIsMi40LTMuNiw0LjgtMy42bDg1LjYtMTMuMmMyLTAuNCw0LjQsMC40LDUuNiwybDU0LjQsNjcuNmMxLjIsMS42LDEuNiw0LDAuOCw2TDI4Mi40LDM5OEMyODEuNiw0MDAsMjgwLDQwMS42LDI3Ny42LDQwMS42eg0KCQkgTTE5My42LDQwMi44bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYybC03OC44LDEyLjRsLTI4LjgsNzQuNEwxOTMuNiw0MDIuOHoiLz4NCgk8cGF0aCBzdHlsZT0iZmlsbDojMzI0QTVFOyIgZD0iTTM5NC44LDMwNy42bC04NS42LDEzLjJjLTIsMC40LTQuNC0wLjQtNS42LTJsLTU0LjQtNjcuNmMtMS4yLTEuNi0xLjYtNC0wLjgtNmwzMS4yLTgwLjgNCgkJYzAuOC0yLDIuNC0zLjYsNC44LTMuNmw4NS42LTEzLjJjMi0wLjQsNC40LDAuNCw1LjYsMmw1NC40LDY3LjZjMS4yLDEuNiwxLjYsNCwwLjgsNkwzOTkuNiwzMDRDMzk4LjgsMzA2LDM5Ni44LDMwNy4yLDM5NC44LDMwNy42DQoJCXogTTMxMC44LDMwOC44bDc4LjgtMTIuNGwyOC44LTc0LjRsLTUwLTYybC03OC44LDEyLjRsLTI4LjgsNzQuNEwzMTAuOCwzMDguOHoiLz4NCjwvZz4NCjxnPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIyODUuMiIgY3k9IjE2Ni44IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjM3MC44IiBjeT0iMTUzLjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iNDI1LjIiIGN5PSIyMjAuOCIgcj0iMjcuNiIvPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIzOTMuNiIgY3k9IjMwMC40IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjMwOCIgY3k9IjMxNS4yIiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjI1NCIgY3k9IjI0Ny42IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjE2OC40IiBjeT0iMjYwLjgiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTE0IiBjeT0iMTkzLjIiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTQ2IiBjeT0iMTE1LjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMjMzLjYiIGN5PSI5OC44IiByPSIyNy42Ii8+DQoJPGNpcmNsZSBzdHlsZT0iZmlsbDojRkZGRkZGOyIgY3g9IjEzNi44IiBjeT0iMzQxLjYiIHI9IjI3LjYiLz4NCgk8Y2lyY2xlIHN0eWxlPSJmaWxsOiNGRkZGRkY7IiBjeD0iMTkxLjIiIGN5PSI0MDkuMiIgcj0iMjcuNiIvPg0KCTxjaXJjbGUgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGN4PSIyNzYuNCIgY3k9IjM5Mi44IiByPSIyNy42Ii8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"golly,golly\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"golly.Golly\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"Golly\"\nLABEL oc.displayname=\"Golly\"\nLABEL oc.path=\"/usr/games/golly\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Golly\"\nENV APPBIN \"/usr/games/golly\"\nENV APP \"/usr/games/golly\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/golly/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/golly/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/golly/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/golly/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gretl && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gretl.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwODhwdCIgaGVpZ2h0PSI4MjBwdCIgdmlld0JveD0iMCAwIDEwODggODIwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGw9IiNmZGZkZmQiIGQ9IiBNIDAuMDAgMC4wMCBMIDEwODguMDAgMC4wMCBMIDEwODguMDAgODIwLjAwIEwgMC4wMCA4MjAuMDAgTCAwLjAwIDAuMDAgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gNjExLjk5IDE5LjA3IEMgNjE5LjM4IDE5LjM5IDYyNS44NSAxNS40MCA2MzIuNDYgMTIuNzMgQyA2MzEuMzEgMTYuNjIgNjMwLjcwIDIwLjcwIDYzMS4yNiAyNC43NSBDIDYzNC4wNiAyNy41NCA2MzguNDEgMjcuMjcgNjQxLjYzIDI5LjMyIEMgNjQ0LjYwIDMxLjQxIDY0NS44MCAzNS40OCA2NDkuMzkgMzYuNzcgQyA2NTEuNDYgMzcuNjEgNjUzLjQwIDM1LjkyIDY1NS4yNiAzNS4yMiBDIDY1NS4wMCAzOC43MCA2NTMuODIgNDIuMTMgNjU0LjE5IDQ1LjYzIEMgNjU2LjQ2IDQ5LjgyIDY2MS40NiA1MS4yMCA2NjUuOTIgNTEuMTMgQyA2NzAuNzYgNTEuMzkgNjc1LjU5IDUxLjg0IDY4MC40NCA1MS45MCBDIDY4MC44MCA0OS43OCA2ODEuMTEgNDcuNjUgNjgxLjQ3IDQ1LjU0IEMgNjgzLjc0IDQ5LjM2IDY4NS41NCA1My40NCA2ODcuNjYgNTcuMzQgQyA2ODkuMzAgNTkuMzYgNjkxLjAwIDYxLjM0IDY5Mi4yMiA2My42NyBDIDY5MC4wNiA2My44MyA2ODcuOTIgNjMuOTkgNjg1Ljc5IDY0LjMxIEMgNjg3LjY4IDY5LjU1IDY4OS44NSA3NS4wNiA2ODguNjcgODAuNzMgQyA2ODcuODQgODQuMTUgNjg5LjExIDg3LjUxIDY5MC4wNSA5MC43NiBDIDY5NC4xMCA5MS44MSA2OTcuNzYgOTQuMTAgNzAxLjg2IDk0Ljg4IEMgNzA1LjM0IDkzLjcxIDcwOC4zNCA5MS4zNiA3MTEuOTEgOTAuNDIgQyA3MTQuNzEgODkuOTQgNzE3LjU2IDg5Ljk3IDcyMC40MCA4OS44NSBDIDcyMS40NCA4OC4xNCA3MjIuMzYgODYuMjYgNzI0LjA0IDg1LjA1IEMgNzI4LjkzIDgxLjMxIDczMi44MCA3Ni40NSA3MzcuNTIgNzIuNTAgQyA3MzkuODMgNzAuNzUgNzQxLjI0IDY4LjE4IDc0My4xMSA2Ni4wMiBDIDc0NC45NyA2NS4xMCA3NDcuMDggNjUuNzUgNzQ5LjA2IDY1Ljc4IEMgNzU5LjQ1IDY2LjE3IDc3MC4wMiA2Ni43MCA3NzkuOTggNzAuMDAgQyA3ODMuOTYgNzEuNDAgNzg4LjMyIDcwLjQzIDc5Mi4yOSA3MS43NCBDIDc5OC43OSA3NC43OCA4MDYuMTggNzQuMDUgODEzLjAyIDc1LjkwIEMgODE2LjUyIDc1Ljk2IDgxOC40MyA3OS4xOCA4MjAuNjkgODEuMzUgQyA4MjIuMTQgODMuMDUgODI0LjMwIDgzLjgwIDgyNi4xNyA4NC45MyBDIDgzNC45NSA5MS43MCA4NDAuMTggMTAxLjY5IDg0Ni4zMCAxMTAuNzEgQyA4NDguNzQgMTE1LjA3IDg1MS4yMiAxMTkuNDYgODUyLjc3IDEyNC4yNCBDIDg1NS45MCAxMzMuNzUgODYxLjMzIDE0Mi42MSA4NjIuMzEgMTUyLjczIEMgODYzLjgyIDE1Ny42MyA4NjYuMzQgMTYyLjM2IDg2OS44MSAxNjYuMTYgQyA4NzMuNjEgMTY5LjM0IDg3Ny45MiAxNzIuNDEgODc5LjgyIDE3Ny4xOSBDIDg4MS42MiAxODIuMjggODgwLjQ5IDE4Ny44MCA4ODEuOTMgMTkyLjk3IEMgODg0LjQ2IDE5My4wMCA4ODcuMDAgMTkzLjAxIDg4OS41NSAxOTMuMDMgQyA4OTAuMTYgMTk1LjY4IDg5MC44MyAxOTguNDAgODkyLjM4IDIwMC42OCBDIDg5NS42MyAyMDIuODIgODk5LjcxIDIwMi44MyA5MDMuNDIgMjAzLjYwIEMgOTA4LjU4IDIwNC4zNyA5MTMuNTggMjA1Ljg5IDkxOC41NCAyMDcuNDggQyA5MjEuMTYgMjA4LjIzIDkyMi4zNCAyMTAuOTkgOTI0LjU2IDIxMi4zOCBDIDkzMS4wNSAyMTYuNjkgOTM5LjA5IDIxNy45OSA5NDUuMzkgMjIyLjY1IEMgOTQ5LjYxIDIyNS43OCA5NTQuMTYgMjI4LjQ1IDk1OC4zMyAyMzEuNjcgQyA5NjEuMTQgMjMzLjc5IDk2NC43NCAyMzQuNDIgOTY3LjY4IDIzNi4zNCBDIDk3My4xNCAyMzkuODUgOTc5LjE4IDI0Mi4yNiA5ODUuMDAgMjQ1LjA4IEMgOTg3LjgwIDI0Ni43NiA5OTEuMDggMjQ1LjM1IDk5NC4xMiAyNDUuODMgQyA5OTYuNzAgMjQ1Ljc5IDk5OS4wNSAyNDYuOTAgMTAwMS4zMSAyNDguMDYgQyAxMDAwLjcyIDI1MC4yOSA5OTkuNDAgMjUyLjQxIDk5OS4zOSAyNTQuNzQgQyAxMDAwLjIyIDI1Ni42NCAxMDAxLjY3IDI1OC4xOCAxMDAyLjk2IDI1OS43OSBDIDEwMDEuODUgMjYxLjE3IDEwMDAuNjggMjYyLjUyIDk5OS45MCAyNjQuMTIgQyAxMDAwLjU3IDI2OC41MSAxMDA3LjU1IDI2OS4yMSAxMDA2Ljk3IDI3My45NiBDIDEwMDYuODYgMjc1LjcwIDEwMDYuNDYgMjc3LjQxIDEwMDYuMTYgMjc5LjEzIEMgMTAwOC42NyAyNzkuMjAgMTAxMS4xOCAyNzkuMTUgMTAxMy43MSAyNzkuMjEgQyAxMDEzLjkwIDI4My4zMyAxMDEzLjk5IDI4Ny40NiAxMDE0LjA5IDI5MS41OSBDIDEwMTcuMzggMjkzLjQ5IDEwMTkuNjIgMjk2LjU2IDEwMjEuNDIgMjk5Ljg0IEMgMTAxOS4xNCAyOTkuNTAgMTAxNi44NyAyOTkuMTQgMTAxNC42MCAyOTguOTAgQyAxMDE1Ljk1IDMwNS4zMiAxMDIwLjUzIDMxMC40NCAxMDIyLjM3IDMxNi42OSBDIDEwMjUuNTIgMzI0LjQ2IDEwMjkuMzUgMzMyLjAyIDEwMzQuODEgMzM4LjQ1IEMgMTAzMS4zNCAzMzguMzcgMTAyNy44OCAzMzguNzUgMTAyNC43MCAzNDAuMjQgQyAxMDI3LjY3IDM0OC4zNyAxMDMxLjE2IDM1Ni4zMyAxMDMzLjI3IDM2NC43NCBDIDEwMzcuMzAgMzc2Ljg3IDEwMzcuNzYgMzg5Ljc2IDEwNDAuOTIgNDAyLjA5IEMgMTA0Mi40OSA0MDkuMzIgMTA0NC45MSA0MTYuNTMgMTA0NC43MyA0MjQuMDEgQyAxMDQ1LjEwIDQyNy4wOSAxMDQ2LjgyIDQyOS44NyAxMDQ2Ljk1IDQzMy4wMSBDIDEwNDcuMjcgNDM5LjAzIDEwNDYuMzggNDQ1LjE3IDEwNDcuODkgNDUxLjEwIEMgMTA0OS4yMCA0NTYuNDYgMTA0OS41MCA0NjIuMDEgMTA1MC43MyA0NjcuMzggQyAxMDUzLjcwIDQ3NC41MCAxMDUyLjk4IDQ4Mi4zNCAxMDU0LjAwIDQ4OS44MyBDIDEwNTQuMTAgNDk2LjQ2IDEwNTYuNTUgNTAyLjcwIDEwNTcuODggNTA5LjEzIEMgMTA1OC42OSA1MTIuOTUgMTA1OC41NSA1MTYuODYgMTA1OC43OCA1MjAuNzQgQyAxMDU4LjkxIDUyNC42NCAxMDYwLjg1IDUyOC4zNCAxMDYwLjI1IDUzMi4zMCBDIDEwNTkuMzYgNTM3LjkwIDEwNjMuMjggNTQzLjc5IDEwNTkuOTIgNTQ4Ljk4IEMgMTA2MC43MyA1NDkuODYgMTA2MS41OSA1NTAuNzIgMTA2Mi4zNyA1NTEuNjcgQyAxMDYyLjMwIDU1My40NiAxMDYxLjc3IDU1NS4yMCAxMDYxLjY5IDU1Ny4wMCBDIDEwNjIuMDcgNTU5Ljk0IDEwNjMuNTEgNTYzLjA3IDEwNjIuMDIgNTY1Ljk1IEMgMTA1OS42OSA1NzEuMzQgMTA2MS43MSA1NzcuMjAgMTA2Mi4zNSA1ODIuNzMgQyAxMDYzLjQyIDU4Ny40NiAxMDYxLjY2IDU5Mi4xOSAxMDYxLjk5IDU5Ni45NyBDIDEwNjIuMjAgNjAyLjMzIDEwNjEuODEgNjA3LjY4IDEwNjEuMTMgNjEzLjAwIEMgMTA2MS4xNSA2MTkuNjQgMTA1OS4yNyA2MjYuMjEgMTA2MC4xOSA2MzIuODYgQyAxMDYwLjcyIDYzNi4zMSAxMDYxLjQyIDYzOS43NiAxMDYxLjMyIDY0My4yOCBDIDEwNjEuMDcgNjQ2LjE4IDEwNjQuMDggNjQ4LjEwIDEwNjMuOTYgNjUxLjAwIEMgMTA2NC4yMyA2NTYuOTkgMTA2My43NyA2NjMuMDEgMTA2NC4wMyA2NjkuMDEgQyAxMDY0LjEzIDY3Mi4yMSAxMDY2LjE3IDY3NC44NyAxMDY3LjEyIDY3Ny44NSBDIDEwNjguNDIgNjgxLjA5IDEwNjcuNzkgNjg0LjYzIDEwNjcuOTggNjg4LjAzIEMgMTA2OC4wMyA2OTEuNDEgMTA2OS4zNSA2OTQuNTkgMTA3MC4yNCA2OTcuODIgQyAxMDY2LjQ3IDcwMC4wMiAxMDYyLjc1IDcwMi43MyAxMDU4LjMwIDcwMy4yNiBDIDEwNTUuMTIgNzAzLjkzIDEwNTEuNTkgNzAzLjgwIDEwNDguOTYgNzA2LjAwIEMgMTA0NS40NyA3MDguNjQgMTA0MS41NiA3MTAuNjIgMTAzNy43NSA3MTIuNzQgQyAxMDM1LjE4IDcxNS4zMSAxMDMzLjAzIDcxOC4yOCAxMDMwLjg5IDcyMS4yMiBDIDEwMjguOTIgNzIzLjY5IDEwMzEuMTMgNzI2Ljc4IDEwMzEuNDkgNzI5LjQ2IEMgMTAzMi40NyA3MzUuNzIgMTAzMi45MyA3NDIuNDUgMTAzMC41MCA3NDguNDcgQyAxMDI5LjY2IDc1MS40OSAxMDMwLjAxIDc1NC42OCAxMDI5Ljk0IDc1Ny43OSBDIDEwMjUuNDYgNzYxLjQxIDEwMjEuMTggNzY1LjQ3IDEwMTUuODUgNzY3Ljg1IEMgMTAxMi45NCA3NjkuMTYgMTAwOS42MSA3NjguNjYgMTAwNi42NSA3NjkuNjcgQyAxMDAwLjE3IDc3My41MSA5OTIuMjUgNzcyLjkyIDk4NS4wMCA3NzMuMDEgQyA5NzguMDYgNzczLjIyIDk3MC45NiA3NzIuMjAgOTY0LjIwIDc3NC4xOSBDIDk1Ni4yMSA3NzYuNDcgOTQ4LjA4IDc3My42OCA5NDAuMDEgNzczLjk3IEMgOTMyLjc1IDc3My44OCA5MjUuMzYgNzc0LjY2IDkxOC4yNiA3NzIuNzUgQyA5MTEuMTEgNzcwLjgxIDkwMy4wNyA3NzMuODYgODk2LjUyIDc2OS41NCBDIDg5MC4yNiA3NjcuMjcgODg1Ljg4IDc2Mi4xMyA4ODAuMzggNzU4LjYyIEMgODc2LjU0IDc1Ni4yMSA4NzMuNDggNzUyLjc1IDg2OS41MiA3NTAuNTMgQyA4NjIuODYgNzQ3LjYyIDg2MC41MCA3NDAuMTUgODU2LjAyIDczNC45OCBDIDg1NC43OSA3MzIuNjkgODUxLjU4IDczMS4wNiA4NTIuMDQgNzI4LjIxIEMgODUzLjQyIDcyNS4xMiA4NTUuNjEgNzIxLjg0IDg1OS4xNCA3MjEuMDYgQyA4NjEuMjggNzIxLjE2IDg2My40MiA3MjEuNzEgODY1LjQyIDcyMi41NCBDIDg2OC41NyA3MjQuMzcgODcwLjg3IDcyOC40MyA4NzQuOTggNzI4LjAxIEMgODgxLjE5IDcyNy4zMiA4ODcuMzkgNzI2LjQ2IDg5My41OSA3MjUuNjYgQyA4OTYuNTkgNzIxLjQ0IDg5OS4zNCA3MTYuNDQgODk5LjUxIDcxMS4xMCBDIDg5OS4xNCA3MDguNzQgODk2LjY1IDcwNy43MyA4OTUuMDAgNzA2LjM5IEMgODk1LjA2IDcwNC4wMSA4OTQuNjEgNzAxLjYzIDg5Mi40OSA3MDAuMjMgQyA4ODYuMDUgNjk4LjU3IDg4MC4zOSA3MDMuNTYgODczLjk4IDcwMy4xMCBDIDg3MS4wMyA3MDMuNjEgODY5LjE3IDcwMS4wMyA4NjYuNzYgNjk5Ljk2IEMgODY0LjA0IDY5OS43MSA4NjEuNjcgNzAxLjMxIDg1OS4yMyA3MDIuMjAgQyA4NTIuNDMgNzA0LjY5IDg0NC43NyA3MDYuNDAgODM3Ljc2IDcwMy43MiBDIDgzMi40OSA3MDQuNzkgODI1LjYzIDcwNy4wNCA4MjEuMzIgNzAyLjY2IEMgODE4LjE3IDY5OS42MiA4MTMuMzQgNzAxLjkxIDgwOS41OCA3MDAuMzggQyA4MDYuMDIgNjk5LjM5IDgwMy40NyA2OTUuMTQgNzk5LjQxIDY5Ni4zOSBDIDc5NS4yOSA2OTcuMzQgNzkxLjE1IDY5Ni4wOSA3ODcuMjkgNjk0Ljc1IEMgNzg0LjA3IDY5My41MSA3ODAuMjYgNjk0LjY5IDc3Ny4zMiA2OTIuNjcgQyA3NzQuMTUgNjkwLjI1IDc3MC4wMiA2OTEuMDkgNzY2LjMzIDY5MC45MyBDIDc2NS4yMCA2ODkuMzQgNzY0LjA3IDY4Ny43NyA3NjIuOTAgNjg2LjIzIEMgNzU5LjAyIDY4Ni4yMSA3NTUuMTQgNjg1Ljk2IDc1MS4yNyA2ODUuOTUgQyA3NTAuNDEgNjg0LjYzIDc0OS41NiA2ODMuMzIgNzQ4LjcxIDY4Mi4wMiBDIDc0NC4yMiA2ODEuNzEgNzM4LjcxIDY4My4yNyA3MzUuMTcgNjc5LjcxIEMgNzM0LjU0IDY3NC4zOSA3MzUuMzggNjY5LjA0IDczNS4yMiA2NjMuNzEgQyA3MzUuMDMgNjU4LjUzIDczNy42MCA2NTMuODQgNzM5LjA1IDY0OS4wMSBDIDc0MC4zMSA2NDQuOTQgNzQzLjQ5IDY0MS44MCA3NDQuODEgNjM3Ljc5IEMgNzQ1LjI4IDYzMy4xOSA3NDQuOTMgNjI4LjU1IDc0NS4wNCA2MjMuOTQgQyA3NDQuOTAgNjIxLjk5IDc0NS4zMiA2MTkuNzIgNzQzLjkwIDYxOC4xNSBDIDc0MS42OCA2MTUuMDggNzM5Ljc1IDYxMS41NiA3MzYuMjEgNjA5LjgxIEMgNzMxLjIyIDYwNy4yMCA3MjcuMDkgNjAzLjM0IDcyMi42NSA1OTkuOTQgQyA3MjYuNTEgNTk1LjY5IDczMC44MCA1OTEuODcgNzM1LjEyIDU4OC4xMSBDIDczOS4wNCA1ODEuNzUgNzQxLjM5IDU3NC41NiA3NDMuMjkgNTY3LjM3IEMgNzQ0LjE0IDU2NC42MiA3NDIuMzAgNTYxLjUzIDc0My44OSA1NTguOTcgQyA3NDYuMzEgNTU0LjYwIDc0OC4yOSA1NDkuODkgNzQ4Ljg4IDU0NC44OSBDIDc0OS4zMiA1NDIuMDIgNzQ4Ljk3IDUzOC45OCA3NTAuMjAgNTM2LjI3IEMgNzUyLjczIDUyOS45MyA3NTQuNDYgNTIzLjI5IDc1NS41OSA1MTYuNTYgQyA3NTYuMTIgNTEzLjQ1IDc1My44OSA1MTAuMzkgNzU1LjI1IDUwNy4zMyBDIDc1Ny42NCA1MDEuODMgNzU5Ljk0IDQ5Ni4xMSA3NjAuMDYgNDkwLjAxIEMgNzYwLjExIDQ4NS40OCA3NjIuMDkgNDgxLjA2IDc2MS4yMSA0NzYuNTIgQyA3NjAuNzMgNDczLjkwIDc2MS41MCA0NzEuMjggNzYxLjc2IDQ2OC42OSBDIDc2MS44MSA0NjUuNDUgNzY2LjAyIDQ2NC4yMCA3NjUuOTUgNDYwLjk0IEMgNzY2LjM3IDQ1Mi4yNyA3NjQuOTYgNDQzLjM5IDc2Ny43MiA0MzQuOTcgQyA3NjguMDEgNDMxLjIzIDc3MS4wMSA0MjguNzUgNzcyLjU5IDQyNS42MCBDIDc3NC4xOSA0MjEuMjEgNzczLjc0IDQxNi40MyA3NzQuOTggNDExLjk3IEMgNzc3Ljk2IDQwMS4wMiA3ODMuMDAgMzkwLjgxIDc4Ny42MiAzODAuNTAgQyA3ODkuMDggMzc3LjMyIDc4Ni4yOCAzNzQuNTYgNzg1LjIzIDM3MS43NyBDIDc4NS4zNCAzNjkuNDQgNzg2LjM5IDM2Ny4zMCA3ODcuMDcgMzY1LjExIEMgNzg5LjMzIDM1OS4wNyA3OTAuNzEgMzUyLjY0IDc5NC4wNSAzNDcuMDUgQyA3OTcuMjUgMzQxLjYyIDgwMC44MCAzMzYuMzQgODAzLjA2IDMzMC40MiBDIDgwNC44NSAzMjUuMzcgODA4LjExIDMyMS4wMiA4MTAuMDAgMzE2LjAyIEMgODExLjQzIDMxMi45MSA4MTEuNzMgMzA5LjQwIDgxMy4yOSAzMDYuMzYgQyA4MTUuNTAgMzA0LjMyIDgxOC4zMCAzMDMuMDUgODIwLjY0IDMwMS4xNyBDIDgxOC40MCAyOTguNjQgODE1Ljg2IDI5Ni4zNiA4MTIuNzUgMjk0Ljk3IEMgODEyLjkxIDI5OC4wOSA4MTIuODUgMzAyLjYyIDgwOS40MyAzMDMuOTcgQyA4MDUuNDIgMzA0LjQ1IDgwMS4zNCAzMDMuNDMgNzk3LjM1IDMwNC4xOSBDIDc5NC45MCAzMDUuNjggNzk0Ljg3IDMwOC43OCA3OTQuMjQgMzExLjI1IEMgNzkzLjU2IDMxNS4xOSA3OTIuMjQgMzE4Ljk5IDc5MC42MCAzMjIuNjMgQyA3ODkuMjQgMzI1LjcyIDc4Ni41MiAzMjcuODYgNzg0LjQ4IDMzMC40NyBDIDc3OS4zMSAzMzYuOTMgNzcyLjMzIDM0MS44NyA3NjguMDIgMzQ5LjAzIEMgNzY1Ljk3IDM1Mi40NiA3NjYuMTggMzU2LjczIDc2NC4wNyAzNjAuMTQgQyA3NjEuOTQgMzYzLjY1IDc1OC41MyAzNjcuMzEgNzU0LjA1IDM2Ny4wNSBDIDc0Ny4yNSAzNjcuMTQgNzQyLjgxIDM2MC44MyA3MzYuNDMgMzU5LjQ5IEMgNzMzLjYzIDM1OC40NyA3MzAuNzUgMzU5LjU5IDcyOC4wMSAzNjAuMTkgQyA3MjcuOTIgMzY0LjE0IDcyNy44NSAzNjguMTcgNzI5LjAxIDM3Mi4wMSBDIDczMC4zMSAzNzYuNDEgNzMwLjU1IDM4MS42OCA3MjcuNTYgMzg1LjQ5IEMgNzIzLjM0IDM4Ny40NSA3MTkuNjUgMzkwLjI2IDcxNS42NCAzOTIuNTggQyA3MDkuMzAgMzk0Ljk4IDcwNC4xMCAzOTkuOTEgNzAwLjcwIDQwNS43MCBDIDY5Ny43NyA0MTEuOTMgNzAwLjQ3IDQxOC41MCA3MDEuMjIgNDI0Ljg2IEMgNjk3LjY1IDQyMi44OCA2OTMuNzggNDIxLjU4IDY5MC4xMiA0MTkuNzkgQyA2ODguNDIgNDE4Ljg5IDY4Ni4zNCA0MTguNTkgNjg0LjU4IDQxOS40OCBDIDY4My40MyA0MjIuODYgNjg0LjAyIDQyNi41MCA2ODMuOTYgNDMwLjAwIEMgNjg0LjE4IDQzNy4yOCA2ODMuNjggNDQ0LjU4IDY4NC4yMiA0NTEuODUgQyA2ODUuMzAgNDU4LjAyIDY4NC45MCA0NjQuMjkgNjg1LjM0IDQ3MC41MiBDIDY4NS43MiA0NzUuNDAgNjg0LjM4IDQ4MC4zMyA2ODUuNjUgNDg1LjE2IEMgNjg2LjYzIDQ4OC43OCA2ODQuODEgNDkyLjM0IDY4NC45OSA0OTUuOTcgQyA2ODUuMDQgNDk4LjA4IDY4Ni4wMyA0OTkuOTkgNjg2LjQ0IDUwMi4wNCBDIDY4Ny4wMiA1MDcuMTMgNjg1LjQ2IDUxMi4yNCA2ODYuNjMgNTE3LjMwIEMgNjg3Ljg4IDUyNC4xMCA2ODguMDAgNTMwLjk4IDY4OC4yNSA1MzcuODYgQyA2ODkuNDUgNTQzLjI0IDY4Ny41MSA1NDguNjEgNjg3Ljk4IDU1NC4wMyBDIDY4Ny45OSA1NTcuMTIgNjg5LjYzIDU1OS45OCA2ODkuNDcgNTYzLjA3IEMgNjg5LjA3IDU2OC40OCA2OTAuMzAgNTczLjk0IDY4OC45NSA1NzkuMjggQyA2ODkuNjIgNTc4LjM4IDY5MC4zMSA1NzcuNDkgNjkxLjAxIDU3Ni42MSBDIDY4OS45NSA1ODIuMjkgNjkxLjYzIDU4OC4wMyA2OTAuNzAgNTkzLjczIEMgNjg5LjU0IDYwMC4wOSA2OTAuMTIgNjA2LjU3IDY5MC4xMiA2MTIuOTkgQyA2OTAuNDcgNjIxLjc1IDY4OS4xMSA2MzAuNjEgNjkwLjc3IDYzOS4zMCBDIDY5MS4zOSA2NDIuNjIgNjg5Ljc2IDY0NS45MyA2OTAuNjcgNjQ5LjI0IEMgNjkyLjAxIDY1NS42MyA2OTMuMTMgNjYyLjA3IDY5My41NiA2NjguNjAgQyA2OTQuMTAgNjczLjI4IDY5My44MCA2NzguNDMgNjk2LjY3IDY4Mi40NSBDIDY5OC4xNCA2ODQuNDMgNjk3LjUyIDY4Ny4wMiA2OTcuOTcgNjg5LjI5IEMgNjk4LjEzIDY5Mi4xNyA3MDAuOTUgNjk0LjA5IDcwMC45NiA2OTcuMDAgQyA3MDEuMTUgNzAwLjMxIDcwMS4wMCA3MDMuNjQgNzAwLjk3IDcwNi45NiBDIDY5Ni42NiA3MDcuMzMgNjkyLjI2IDcwNy40NSA2ODguMTUgNzA1Ljg3IEMgNjg0LjUwIDcwNS4xMiA2ODMuMjAgNzAxLjIzIDY4MS45MSA2OTguMjEgQyA2ODAuMDEgNjkxLjA1IDY4MC4yMCA2ODMuNTggNjc5LjY2IDY3Ni4yNiBDIDY3Ny41MSA2NjkuODAgNjc4LjI0IDY2Mi45MyA2NzYuOTUgNjU2LjMxIEMgNjc2LjY3IDY0OC41NSA2NzcuMzQgNjQwLjc3IDY3Ni45MSA2MzMuMDEgQyA2NzYuNTUgNjI5LjUxIDY3NC45NyA2MjYuMjUgNjc0Ljc2IDYyMi43MiBDIDY3NC4zNCA2MjAuMTcgNjc2LjEyIDYxNy44NCA2NzUuNzAgNjE1LjI5IEMgNjc0LjY3IDYwOC41NSA2NzIuNjIgNjAxLjg5IDY3My4wMCA1OTUuMDAgQyA2NzMuMzMgNTg5LjIwIDY3MS43MyA1ODMuNTcgNjcxLjI2IDU3Ny44NCBDIDY3MS40NyA1NzMuNjIgNjcyLjMzIDU2OS4zOSA2NzEuNDcgNTY1LjE4IEMgNjcxLjg1IDU2NS4zMCA2NzIuNjAgNTY1LjUzIDY3Mi45NyA1NjUuNjUgQyA2NzMuMDAgNTY1LjA4IDY3My4wNSA1NjMuOTUgNjczLjA3IDU2My4zOCBDIDY3Mi41NyA1NjMuNDggNjcxLjU3IDU2My42NyA2NzEuMDcgNTYzLjc3IEMgNjcyLjU2IDU1Ni45MiA2NzEuOTIgNTQ5Ljg5IDY3Mi4yMSA1NDIuOTYgQyA2NzEuNDQgNTM1LjY0IDY3Mi40MCA1MjguMzAgNjcyLjMxIDUyMC45OCBDIDY3Mi40OSA1MTguNjYgNjcxLjMzIDUxNi42NSA2NzAuMTkgNTE0Ljc0IEMgNjcyLjcyIDUxMC4xMyA2NzAuNTYgNTA0Ljk3IDY2OS4xMSA1MDAuMzkgQyA2NjguMDUgNDkzLjc5IDY2Ny45NCA0ODcuMDkgNjY3LjgyIDQ4MC40MiBDIDY2Ny43OCA0NzYuNDQgNjY2LjMzIDQ3Mi43MCA2NjUuNTkgNDY4Ljg0IEMgNjY1LjQ0IDQ2Mi4xOSA2NjQuMjkgNDU1LjYwIDY2My4wMSA0NDkuMDkgQyA2NjEuMDUgNDQ4LjcxIDY1OS4xMyA0NDguMTUgNjU3LjE0IDQ0OC4wMyBDIDY1My44NCA0NDguOTMgNjUxLjk1IDQ1Mi4wMiA2NDkuODAgNDU0LjQyIEMgNjQ4Ljc1IDQ0Ni42NCA2NDguNjQgNDM4LjQxIDY0NC41OCA0MzEuNDIgQyA2NDIuMjMgNDI4LjA5IDYzOC4yOSA0MjUuODkgNjM2Ljk5IDQyMS44NyBDIDYzNy4yMiA0MTcuMzcgNjM5Ljg2IDQxMy41MCA2NDEuMzEgNDA5LjM0IEMgNjQzLjUxIDQwMi43OSA2NDMuMTEgMzk1Ljc4IDY0Mi45MCAzODguOTggQyA2NDIuOTAgMzg2LjI0IDY0MS42OCAzODMuMTEgNjQzLjY3IDM4MC43NiBDIDY0OS4xOSAzNzIuNDMgNjU5LjkyIDM3MC4zNyA2NjkuMTUgMzY5LjI1IEMgNjc3Ljk4IDM2OS40MSA2ODYuNjIgMzY2LjY0IDY5NC4xOSAzNjIuMjEgQyA2OTcuNzcgMzYwLjQzIDY5OC41NiAzNTQuMDggNjk0LjUyIDM1Mi40NiBDIDY4OS40NiAzNTAuMTIgNjgzLjc2IDM1MC4zNCA2NzguMzcgMzQ5LjYxIEMgNjczLjI1IDM0OC44NCA2NzEuMjIgMzQzLjEzIDY2Ni42NiAzNDEuMjkgQyA2NjQuNTIgMzQxLjA4IDY2Mi40MiAzNDEuNzcgNjYwLjMyIDM0Mi4wNCBDIDY1OS4xMCAzMzkuOTEgNjU4LjQzIDMzNi45NyA2NTUuNzcgMzM2LjIxIEMgNjUyLjExIDMzNC44NSA2NDguMjIgMzM0LjI1IDY0NC40MSAzMzMuNDcgQyA2MzYuNzkgMzMxLjYyIDYyOS44OSAzMzcuMzUgNjIyLjI1IDMzNi4zMiBDIDYxOC4wOSAzMzQuNTMgNjE1LjcxIDMzMC4wOCA2MTEuMzAgMzI4Ljc1IEMgNjA3Ljc3IDMyNy43NyA2MDQuMTEgMzI3LjQwIDYwMC41OCAzMjYuNDUgQyA1OTUuNDggMzI1LjQ5IDU5MC43OSAzMjMuMDMgNTg1LjYxIDMyMi40MiBDIDU3NS44OSAzMjEuMTYgNTY2LjA5IDMyMC41NiA1NTYuMzQgMzE5LjcyIEMgNTUzLjg4IDMxNy45MyA1NTMuMDIgMzE0Ljg0IDU1MS43NyAzMTIuMjIgQyA1NDkuNzMgMzA3LjIzIDU0Ni44NiAzMDIuNjQgNTQzLjY3IDI5OC4zMyBDIDUzOS44MSAyOTMuODUgNTM1LjAyIDI5MC4yMiA1MzEuNTkgMjg1LjM2IEMgNTI5LjY3IDI4Mi42MiA1MjYuNjggMjgwLjcyIDUyNS4yNiAyNzcuNjQgQyA1MjUuMzkgMjY1LjE0IDUyOS41NSAyNTMuMjQgNTMyLjE5IDI0MS4xNCBDIDUzMi44OCAyMzcuOTkgNTM1LjMzIDIzNS4zNyA1MzguNDQgMjM0LjQ5IEMgNTQ0LjM1IDIzMi44MSA1NDkuNTUgMjI5LjQyIDU1NS4yOCAyMjcuMjggQyA1NjAuMjEgMjI1LjQyIDU2NC4xMiAyMjEuNzcgNTY4Ljg1IDIxOS41NSBDIDU2OC45MyAyMjEuMDAgNTY5LjAxIDIyMi40NiA1NjkuMDkgMjIzLjkyIEMgNTY1LjA2IDIyNy4zNCA1NjEuNzMgMjMxLjU2IDU1Ny4xOSAyMzQuMzkgQyA1NTMuMTAgMjM3LjgwIDU0Ny4yMyAyMzguODAgNTQ0LjE5IDI0My40NiBDIDU0Mi43NCAyNDcuNTUgNTQ2Ljc1IDI1MC4zNiA1NDguODkgMjUzLjI0IEMgNTQ2Ljg4IDI1Ni4yNyA1NDQuMTggMjU5LjIwIDU0NC4wMCAyNjMuMDIgQyA1NDMuODAgMjY1LjI3IDU0My40MSAyNjcuNTIgNTQzLjQ5IDI2OS43OSBDIDU0NC40NCAyNzMuNzIgNTQ5LjAxIDI3NS43NyA1NTIuNzcgMjc0Ljk0IEMgNTU0LjMxIDI3NC44MSA1NTUuMjYgMjczLjM5IDU1NS40NiAyNzEuOTggQyA1NTYuNDUgMjY2LjkzIDU1OC45MyAyNjIuMzcgNTYwLjU2IDI1Ny41MiBDIDU2MS41NCAyNTQuOTYgNTYzLjQ2IDI1MS4yMCA1NjYuNzggMjUyLjA2IEMgNTcxLjMxIDI1My44NiA1NzUuMzQgMjU2Ljc5IDU3OC43NyAyNjAuMjMgQyA1ODAuNjggMjYyLjYwIDU4NC42MSAyNjIuNzQgNTg2LjkyIDI2MC45NCBDIDU4OC45MSAyNTguODYgNTkwLjQ4IDI1Ni40MSA1OTIuNDkgMjU0LjMzIEMgNTkzLjQ1IDI1Ny4zNyA1OTQuNTMgMjYwLjY1IDU5My4zMCAyNjMuNzkgQyA1OTEuNjYgMjY4LjI0IDU5MS4wMyAyNzMuNzkgNTk0LjI5IDI3Ny42OCBDIDU5OC42NCAyODIuMzUgNjAyLjY2IDI4Ny4zMCA2MDcuMTUgMjkxLjg1IEMgNjExLjU3IDI5Ni40MiA2MTQuODcgMzAyLjI2IDYyMC41MSAzMDUuNDkgQyA2MjYuNjEgMzA4LjQ3IDYzMy4yMyAzMTAuNTMgNjQwLjAzIDMxMC45NiBDIDY0NS41OSAzMTEuMTcgNjUxLjE1IDMxMi43NyA2NTYuNzIgMzExLjc0IEMgNjU5LjUwIDMxMC4zNSA2NTYuOTggMzA3LjU2IDY1NS43NSAzMDYuMDMgQyA2NTUuMDAgMzA3LjQ1IDY1NC4yNCAzMDguODcgNjUzLjQ1IDMxMC4yNyBDIDY1My4xMCAzMDguMzEgNjUyLjc5IDMwNi4zNSA2NTIuNDMgMzA0LjM5IEMgNjU1Ljk2IDMwMy42MiA2NTkuMDkgMzAxLjc0IDY2Mi40NCAzMDAuNDcgQyA2NjYuNDIgMjk5LjY2IDY3MC42NSAzMDAuMTkgNjc0LjQ3IDI5OC41OCBDIDY3Ni45NCAyOTYuMDEgNjc5LjUxIDI5MS44OSA2ODMuNzIgMjkzLjE2IEMgNjk2LjA2IDI5Ni4yOCA3MDcuOTYgMzAxLjU2IDcyMC44MyAzMDIuMTkgQyA3MjIuMjMgMjk5LjIyIDcyMi45MyAyOTUuNjcgNzI1LjM1IDI5My4zNCBDIDcyOS44MCAyOTMuMzAgNzM0LjU2IDI5Mi4xMyA3MzYuODIgMjg3Ljg4IEMgNzM5LjAwIDI4Mi41NCA3NDIuMDYgMjc3LjY0IDc0NC43NSAyNzIuNTYgQyA3NDYuMTQgMjY3Ljg0IDc0MC45OSAyNjQuNTUgNzQwLjQzIDI2MC4wNiBDIDczNy40NCAyNjAuMDIgNzM0LjQ2IDI1OS45OSA3MzEuNDggMjU5Ljk2IEMgNzMwLjc2IDI1Ny43NiA3MzAuNzEgMjU0LjcyIDcyOC4zMiAyNTMuNjAgQyA3MjUuNDcgMjUyLjE2IDcyMi4xMSAyNTMuMjQgNzE5LjM0IDI1NC4zMiBDIDcxNi4zOSAyNTUuMTkgNzE2LjEyIDI1OC42NiA3MTQuODkgMjYxLjAxIEMgNzEyLjgwIDI1OS44OCA3MTAuNjggMjU4LjgwIDcwOC42MCAyNTcuNzAgQyA3MDguNTMgMjUyLjg2IDcxNC45MiAyNTEuMDMgNzE0LjA4IDI0Ni4xMSBDIDcxNC4zNiAyNDQuMDkgNzEyLjQ4IDI0Mi45MiA3MTEuMDcgMjQxLjkyIEMgNzA4LjM2IDIzOS45MiA3MDQuODggMjM5LjkxIDcwMS43NCAyMzkuMTQgQyA2OTguMTUgMjQyLjc1IDY5OS4yNCAyNDguMTIgNjk3LjU4IDI1Mi41NiBDIDY5Ni41MiAyNTUuMjcgNjk1LjQ2IDI1OC4xOSA2OTMuMjIgMjYwLjE3IEMgNjg5LjczIDI2Mi42NyA2ODkuMjIgMjY3LjY1IDY4NS4wMiAyNjkuNDMgQyA2ODYuMDkgMjY2LjUzIDY4Ny41NiAyNjMuNzggNjg4LjU0IDI2MC44NSBDIDY4OS45NSAyNTMuMzUgNjg3LjUzIDI0NS45NiA2ODYuNDIgMjM4LjU5IEMgNjg1Ljk0IDIzNC40NiA2ODIuNjMgMjMxLjY3IDY4MC4wOCAyMjguNzAgQyA2NzUuODcgMjMwLjQ5IDY3MS4wNCAyMzAuNTIgNjY3LjE2IDIzMy4xMCBDIDY2MS43MSAyMzYuMzEgNjU3Ljk4IDI0MS42MSA2NTIuOTggMjQ1LjQwIEMgNjU2Ljc0IDIzOS41NCA2NjEuNDcgMjMzLjk4IDY2My4wMiAyMjcuMDEgQyA2NjQuMzQgMjIyLjY1IDY2NS4zNCAyMTcuOTMgNjY4LjI4IDIxNC4zMSBDIDY3MS45NiAyMTAuNTggNjc1Ljk4IDIwNy4xNyA2ODAuMDUgMjAzLjg2IEMgNjgwLjAxIDIwMS45OCA2ODAuMDAgMjAwLjEwIDY4MC4wMCAxOTguMjIgQyA2NzYuMTggMTk1LjYwIDY3Mi42NCAxOTIuNTIgNjY4LjU3IDE5MC4zMCBDIDY2NC41NCAxODkuMzYgNjYwLjIzIDE5MC45MCA2NTYuNjYgMTkyLjczIEMgNjU0Ljc1IDE5Ni43MyA2NTUuNjcgMjAxLjUyIDY1My40MiAyMDUuMzggQyA2NTEuNzggMjA4LjI0IDY1MC42MiAyMTIuMzAgNjQ2LjgyIDIxMi43OCBDIDY0My41MSAyMTMuOTMgNjM5LjExIDIxMy42MyA2MzcuMTIgMjE3LjA1IEMgNjMzLjk4IDIyMS43MCA2MjkuMTIgMjI0LjYyIDYyNC4zMiAyMjcuMjkgQyA2MjEuMzAgMjI4Ljg0IDYxOS4yNCAyMzEuNjUgNjE2LjQ5IDIzMy41NyBDIDYxMy41MCAyMzUuMDEgNjA5LjI1IDIzNC45MyA2MDguMDIgMjM4LjY2IEMgNjA0LjMyIDIzOC44NiA2MDAuNzggMjM5LjkwIDU5Ny4zOCAyNDEuMzEgQyA1OTYuMjMgMjM4Ljg4IDU5NC43MSAyMzYuNTkgNTkzLjk4IDIzMy45OSBDIDU5NS4wNCAyMjkuOTIgNTk4LjQxIDIyNS45MyA1OTYuNjQgMjIxLjU1IEMgNTk0LjgwIDIxOS4yMiA1OTIuNjcgMjE3LjA5IDU5MS40MSAyMTQuMzYgQyA1OTUuOTAgMjEyLjg0IDYwMC41OCAyMTEuODIgNjA0LjkzIDIwOS45MSBDIDYwNy43NyAyMDguMTIgNjEwLjM1IDIwNS44OCA2MTIuNjkgMjAzLjQ4IEMgNjEzLjIzIDIwMS44MyA2MTMuMTQgMjAwLjA0IDYxMi45MSAxOTguMzQgQyA2MTAuOTQgMTk1Ljg0IDYwNy40OSAxOTUuNDYgNjA0LjY4IDE5Ni42MyBDIDU5OS45NyAxOTcuODcgNTk0LjE0IDIwMC44OCA1ODkuODAgMTk3LjIxIEMgNTg2LjIyIDE5My44NyA1ODEuMTQgMTkyLjY4IDU3Ni4zNyAxOTMuMDIgQyA1NzQuNTEgMTk3LjAyIDU3Mi43OSAyMDEuNjkgNTY4LjcxIDIwMy45MSBDIDU2NS41MCAyMDQuNDUgNTYzLjE5IDIwMS43OSA1NjAuNjIgMjAwLjM4IEMgNTU2LjIzIDE5OC4zMiA1NTcuMjMgMTkyLjY3IDU1NC44OCAxODkuMTAgQyA1NTIuMjggMTg1LjExIDU0Ny44NSAxODAuODAgNTQ5LjUwIDE3NS42MSBDIDU1MC43MiAxNzEuMjggNTUyLjE3IDE2Ni42OCA1NTUuNTIgMTYzLjUwIEMgNTU4LjA3IDE2MS4wNCA1NTguNjcgMTU3LjAxIDU1Ny4yMyAxNTMuODEgQyA1NTYuMjUgMTUwLjI3IDU1Mi41OCAxNDguNzkgNTQ5LjU4IDE0Ny4zNyBDIDU0Ni4xOSAxNDYuMzcgNTQ2LjA1IDE0Mi4xOSA1NDMuNjQgMTQwLjA3IEMgNTM5Ljg1IDEzOS4wMCA1MzYuNzkgMTQxLjYwIDUzMy43NyAxNDMuMzkgQyA1MzUuMzMgMTQwLjU0IDUzNy4yMyAxMzcuOTAgNTM5LjAzIDEzNS4yMCBDIDUzOC41NiAxMzMuODUgNTM4LjEzIDEzMi40OSA1MzcuNzEgMTMxLjE0IEMgNTM1LjE0IDEzMC40OSA1MzIuNTcgMTI5Ljg4IDUzMC4wMiAxMjkuMjAgQyA1MjcuMzcgMTMyLjQ2IDUyNC42MyAxMzUuNjggNTIyLjc0IDEzOS40NiBDIDUyMS4wNSAxMzguMzcgNTE5LjQwIDEzNi42MCA1MTcuMjEgMTM2Ljk1IEMgNTE1LjM1IDEzNy44OCA1MTMuOTggMTM5LjUyIDUxMi40OCAxNDAuOTAgQyA1MTEuMTcgMTQwLjcyIDUwOS44NyAxNDAuNTEgNTA4LjU3IDE0MC4zMSBDIDUwNy4xNiAxNDIuOTkgNTA1LjAwIDE0NS4xNiA1MDIuNDEgMTQ2LjcyIEMgNTAzLjA4IDE0My4zOSA1MDMuNTMgMTM5LjYzIDUwNi4zMSAxMzcuMzEgQyA1MDkuNjIgMTM0LjMxIDUxMS40NSAxMzAuMTQgNTE0LjI4IDEyNi43MyBDIDUxMi42NyAxMjUuNTcgNTEwLjY0IDEyNC44MiA1MDkuNjAgMTIzLjA0IEMgNTEzLjUyIDEyMC4wNCA1MTguMTAgMTE3Ljk1IDUyMS43MSAxMTQuNTQgQyA1MjQuNjYgMTEwLjEzIDUxOS4xMiAxMDUuOTQgNTIwLjMxIDEwMS4zMiBDIDUyMS43MyA5NS41OSA1MTguOTYgODguOTMgNTIyLjkxIDgzLjkxIEMgNTI1LjQ3IDgwLjQ4IDUyOC4zNiA3Ny4zMiA1MzAuODYgNzMuODUgQyA1MzQuMzggNjguOTggNTQwLjY0IDY3LjcwIDU0NS4xNyA2NC4xMyBDIDU0Ny4yMCA2Mi42MiA1NDcuMzggNTkuODEgNTQ2Ljc3IDU3LjU0IEMgNTQ1LjAxIDU2LjE5IDU0My4wMCA1NS4yMSA1NDAuOTkgNTQuMjkgQyA1MzYuMjIgNTcuOTAgNTMwLjI2IDU5LjY0IDUyNC4zNCA1OS45MiBDIDUyNy4wMiA1Ny44MiA1MzAuNTcgNTcuODUgNTMzLjYzIDU2LjYyIEMgNTM0LjgxIDU2LjEyIDUzNS4yOSA1NS4yMSA1MzUuMDYgNTMuOTAgQyA1MzUuMTYgNTEuMTcgNTM0LjU0IDQ4LjQ5IDUzMy45MyA0NS44NCBDIDUzNS4zMCA0Ni45MSA1MzYuNDIgNDguNDcgNTM4LjEzIDQ5LjAzIEMgNTQwLjQ1IDQ5LjQzIDU0MS42MCA0Ni44NSA1NDMuMjMgNDUuNjcgQyA1NDUuMDAgNDcuOTEgNTQ2LjU3IDUwLjM5IDU0OC44NCA1Mi4xOSBDIDU1Mi42NyA1NC41MSA1NTguMTggNTQuNzMgNTYwLjkzIDUwLjYxIEMgNTYxLjIyIDQ2LjYzIDU1OS4yNSA0Mi45NiA1NTguNjYgMzkuMDkgQyA1NjIuMDIgMzcuNDAgNTY1LjgyIDM2Ljg0IDU2OS4xOCAzNS4xOSBDIDU3MS42OCAzMy4wMCA1NzMuNDYgMzAuMTIgNTc1LjcyIDI3LjY5IEMgNTc4LjQ3IDI0LjYzIDU3Ny45MiAyMC4xNiA1NzkuNjcgMTYuNjIgQyA1ODIuOTMgMTUuMzcgNTg2LjYxIDE2LjMyIDU5MC4wNSAxNS45NyBDIDU5My40MCAxNi4xNiA1OTYuMzAgMTMuMzUgNTk5LjY2IDE0LjE0IEMgNjAzLjcwIDE1LjkwIDYwNy4zNCAxOS4xNyA2MTEuOTkgMTkuMDcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gODA4LjI1IDc3LjI1IEMgODA4Ljc4IDc3Ljc5IDgwOC43OCA3Ny43OSA4MDguMjUgNzcuMjUgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gOTc5LjI1IDEyMy4yNiBDIDk3OS43OSAxMjMuNzkgOTc5Ljc5IDEyMy43OSA5NzkuMjUgMTIzLjI2IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDI2Mi4yNSAxODkuMjAgQyAyNjYuNzYgMTgzLjM4IDI3My41MyAxODAuMTcgMjc5LjkzIDE3Ni45MSBDIDI3OS40MiAxNzkuNDcgMjc5LjA2IDE4Mi4wNiAyNzguODMgMTg0LjY2IEMgMjgyLjcyIDE4NS44OSAyODcuMDUgMTg2LjgzIDI5MC44OSAxODQuODYgQyAyOTcuNDUgMTgxLjY3IDMwNC41NyAxNzkuNTcgMzExLjg2IDE3OS4wNiBDIDMxNC42MCAxNzkuNTkgMzE2LjYwIDE4Mi4wMCAzMTkuMzYgMTgyLjY2IEMgMzI0LjQ2IDE4My44MCAzMjkuNjIgMTgyLjIxIDMzNC43MiAxODEuODEgQyAzMzYuODggMTg0LjQ1IDMzOS42NiAxODYuNDIgMzQyLjQ2IDE4OC4zMiBDIDM0MC43MiAxODguOTMgMzM4Ljk5IDE4OS41MyAzMzcuMjUgMTkwLjEzIEMgMzM3LjcxIDE5Mi4xNyAzMzcuOTQgMTk0LjI3IDMzOC42MiAxOTYuMjUgQyAzNDMuMTMgMTk5LjI3IDM0Ny40MyAyMDIuNjMgMzUyLjA4IDIwNS40NSBDIDM1MC4wMSAyMDYuMjQgMzQ3Ljk3IDIwNy4xMCAzNDUuOTYgMjA4LjAzIEMgMzQ2LjUzIDIxMy41NyAzNDYuMzMgMjE5LjE2IDM0Ny4xMCAyMjQuNjkgQyAzNDcuNDcgMjI3LjMwIDM0NS42NyAyMjkuODAgMzQ2LjQ4IDIzMi40MiBDIDM0Ny4wMCAyMzkuMTkgMzUyLjkzIDI0My4yOCAzNTcuMDMgMjQ3Ljk4IEMgMzU5LjU1IDI1MC4zOSAzNjEuNDUgMjUzLjMyIDM2My4xNiAyNTYuMzQgQyAzNjAuMzIgMjU4LjY4IDM1Ny4wNyAyNjAuNDMgMzUzLjg0IDI2Mi4xNSBDIDM1NC4zNCAyNjQuNjUgMzU0Ljg4IDI2Ny4xNSAzNTUuMjkgMjY5LjY3IEMgMzUxLjgyIDI3MS44NCAzNDkuMzcgMjc1Ljc4IDM0OS45MyAyNzkuOTggQyAzNDkuNDcgMjg0LjUwIDM1Mi42NyAyODkuNTYgMzQ5LjYyIDI5My42MSBDIDM0Ny40NCAyOTYuNDMgMzQ0LjkwIDI5OC45NyAzNDIuMTUgMzAxLjIzIEMgMzQwLjAyIDMwMy4xNSAzMzcuMDMgMzAyLjQyIDMzNC40MyAzMDIuNTcgQyAzMzAuNzUgMzAyLjg2IDMyNy4yOCAzMDAuNzMgMzIzLjYwIDMwMS41MCBDIDMyMC44MSAzMDEuODkgMzE3Ljk2IDMwMi4yNCAzMTUuMzUgMzAzLjM2IEMgMzEzLjUwIDMwNC4wNiAzMTQuMTIgMzA2LjMxIDMxNC4xMyAzMDcuODMgQyAzMTQuNjYgMzExLjQ0IDMxNC44NiAzMTUuMDkgMzE1LjMwIDMxOC43MiBDIDMxNi45MiAzMjMuMDEgMzE5Ljg5IDMyNi42NyAzMjIuOTEgMzMwLjA4IEMgMzI0LjgzIDMzMi4zMSAzMjQuOTIgMzM1LjgwIDMyNy42MSAzMzcuMzggQyAzMzAuMjkgMzM5LjMzIDMzMi45OSAzNDEuNDcgMzM0LjUwIDM0NC41MSBDIDMzNi41MyAzNDcuNDQgMzM1LjY4IDM1MS4yMCAzMzYuNjEgMzU0LjQ4IEMgMzM3LjMyIDM1OC4xMyAzNDAuOTUgMzYwLjA1IDM0Mi43NSAzNjMuMTQgQyAzNDkuMzIgMzcxLjMxIDM1Mi4yNCAzODEuNTcgMzU1Ljc3IDM5MS4yNiBDIDM1Ny45OCAzOTYuMTAgMzU1LjkzIDQwMS43NyAzNTguNTMgNDA2LjUwIEMgMzYyLjk3IDQxNS4yMyAzNjIuNzIgNDI1LjIzIDM2NS41MyA0MzQuNDUgQyAzNjYuNzMgNDQwLjQ2IDM2NS4wMSA0NDYuODIgMzY3LjMwIDQ1Mi42OCBDIDM2OS42NiA0NTkuMzAgMzY4LjQ4IDQ2Ni4zOSAzNjkuODEgNDczLjE4IEMgMzcyLjAyIDQ4NC45OSAzNzAuNjEgNDk3LjA2IDM3MS4wMCA1MDkuMDAgQyAzNzAuNTcgNTE3LjIxIDM3Mi40NSA1MjUuOTggMzY4LjY3IDUzMy42NiBDIDM2Ni43OCA1MzcuOTcgMzYzLjg0IDU0Mi4wOCAzNjMuOTYgNTQ2Ljk4IEMgMzYzLjkyIDU1MC4yOSAzNjIuNTIgNTUzLjM0IDM2MS40MiA1NTYuNDEgQyAzNTkuNDUgNTYwLjc3IDM2MC4yNiA1NjUuODEgMzU4LjE4IDU3MC4xNiBDIDM1NS45NCA1NzQuOTkgMzU0LjYxIDU4MC4xNCAzNTMuMzMgNTg1LjI5IEMgMzUyLjY0IDU4OS4wOSAzNTMuMzEgNTkyLjk4IDM1Mi44MiA1OTYuODAgQyAzNTEuODcgNTk5LjQzIDM1MC4wNCA2MDEuNzIgMzQ5LjYwIDYwNC41NSBDIDM0OC4yOCA2MTEuMTEgMzQ3LjczIDYxNy45MCAzNDUuMTcgNjI0LjE1IEMgMzQzLjIwIDYyOC41OSAzNDQuNzYgNjMzLjYyIDM0My4xMyA2MzguMTMgQyAzNDIuMjkgNjQwLjMyIDM0Mi4wNiA2NDIuNjUgMzQxLjk1IDY0NC45OCBDIDM0MS44MyA2NTAuMzEgMzM4LjM2IDY1NC42NyAzMzYuNDMgNjU5LjQzIEMgMzM1LjYyIDY2Mi41NyAzMzYuMTcgNjY1Ljg2IDMzNS45OSA2NjkuMDYgQyAzMzYuMTcgNjcyLjkwIDMzMy4wNiA2NzUuODEgMzMyLjYxIDY3OS41NCBDIDMzMS40MCA2ODkuMDEgMzI5LjExIDY5OC4zNyAzMjguOTggNzA3Ljk3IEMgMzI5LjAwIDcyMS4zMiAzMjkuMDIgNzM0LjY3IDMyOC45OCA3NDguMDIgQyAzMjguODYgNzUzLjY5IDMzMC4xNyA3NTkuMjcgMzMwLjA4IDc2NC45NSBDIDMzMC4wMiA3NjguODMgMzM1LjAxIDc2OS4zNiAzMzYuODYgNzcyLjExIEMgMzM5LjIwIDc3NS41NiAzNDIuMTggNzc4LjU2IDM0NC4xMCA3ODIuMjkgQyAzNDYuMjUgNzgyLjc2IDM0OC41MCA3ODMuMjMgMzUwLjIwIDc4NC43NiBDIDM1Mi42MSA3ODYuOTYgMzU1Ljg5IDc4Ny41MiAzNTguOTQgNzg4LjMyIEMgMzU5LjY2IDc5MS40MiAzNjAuMDUgNzk0LjU4IDM2MC4xNSA3OTcuNzggQyAzNTMuMTYgNzk4LjY5IDM0Ni40NSA4MDIuMjEgMzM5LjI4IDgwMC43MyBDIDMzNC45MSA3OTkuODQgMzMwLjMxIDgwMC40NSAzMjYuMDkgNzk4Ljg4IEMgMzIzLjkwIDc5OC4xNSAzMjEuODYgNzk3LjA1IDMxOS42NiA3OTYuMzggQyAzMTYuNzQgNzk1LjgyIDMxMy42NyA3OTYuMTMgMzEwLjgzIDc5NS4xNCBDIDMwNi4zOSA3OTMuODIgMzAyLjgzIDc5MC4wNCAyOTguMDAgNzkwLjAyIEMgMjkxLjM5IDc4OS44OSAyODQuNzcgNzkwLjA2IDI3OC4xNiA3OTAuMDAgQyAyNzcuMTQgNzg1LjQzIDI3Ny4wNSA3ODAuNzYgMjc2Ljc4IDc3Ni4xMyBDIDI3NS45NCA3NzIuMTAgMjc0LjM2IDc2OC4xOCAyNzQuMzIgNzY0LjAxIEMgMjc0LjU4IDc1OS42MCAyNzUuOTIgNzU0LjkyIDI3NC40MiA3NTAuNjUgQyAyNzAuMTEgNzQ1LjEyIDI3MS40MiA3MzcuNzcgMjcwLjY2IDczMS4yOCBDIDI2OS40NSA3MjQuNTIgMjcwLjU1IDcxNy41OSAyNjkuMjEgNzEwLjg0IEMgMjY4LjgwIDcwMi4yNiAyNjguOTQgNjkzLjY1IDI2OS4xMyA2ODUuMDYgQyAyNzAuNDQgNjc3LjQ0IDI2OS45MSA2NjkuNzAgMjcwLjAxIDY2Mi4wMCBDIDI3MC4wMCA2NTcuNTIgMjcwLjIxIDY1My4wMSAyNjkuNDMgNjQ4LjU3IEMgMjY4LjMwIDY0MS42NyAyNjkuODUgNjM0LjU4IDI2OC4yNSA2MjcuNzQgQyAyNjYuMDMgNjE4Ljk5IDI2Ny4zMyA2MDkuOTEgMjY3LjAwIDYwMS4wMCBDIDI2Ni42NiA1OTIuNTEgMjY4LjA2IDU4My43NyAyNjUuNDggNTc1LjUxIEMgMjY0LjIwIDU3MS42MyAyNjMuNzkgNTY3LjUxIDI2Mi4zMCA1NjMuNjkgQyAyNjAuMzIgNTU5LjAwIDI2MS4wMCA1NTMuNjYgMjU5LjA0IDU0OC45NiBDIDI1Ni45NyA1NDMuOTkgMjUwLjM4IDU0Mi4zMyAyNDkuMjYgNTM2Ljc3IEMgMjQ3Ljc3IDUzMC40OCAyNDQuMzcgNTI0Ljc1IDI0My42NyA1MTguMjggQyAyNDIuNjYgNTExLjQ2IDIzNy40MyA1MDYuMDkgMjM2LjgyIDQ5OS4xNyBDIDIzNS44NSA0OTAuODEgMjMwLjk2IDQ4My41NyAyMjkuNjkgNDc1LjI5IEMgMjI4Ljg0IDQ3MC44OSAyMjkuMTUgNDY2LjM1IDIyOC4wNiA0NjIuMDAgQyAyMjIuOTMgNDYyLjExIDIxNy40OCA0NjEuMjAgMjEyLjc0IDQ2My42NyBDIDIwOC4yNiA0NjQuODAgMjA1LjgxIDQ2OS45MSAyMDAuOTcgNDY5Ljk4IEMgMTk0LjM2IDQ3MC41NyAxODguMzMgNDc0LjAyIDE4My41NCA0NzguNDcgQyAxODEuNTQgNDc5Ljk2IDE3OS43MSA0ODIuMzcgMTc2Ljk0IDQ4Mi4xMCBDIDE3NC40NCA0ODIuMzYgMTcyLjQzIDQ4MC43MCAxNzAuNDEgNDc5LjUxIEMgMTY4LjQ3IDQ3OC4wMCAxNjUuOTEgNDc4LjM4IDE2My42MiA0NzguMDUgQyAxNjIuMzMgNDgxLjM0IDE2MC40OSA0ODQuNTEgMTU3LjQ0IDQ4Ni40NiBDIDE1My43NiA0ODguNTkgMTU0LjQzIDQ5My4zMiAxNTIuNjcgNDk2LjY1IEMgMTUxLjQyIDQ5OC4yMiAxNDkuNjUgNDk5LjIzIDE0OC4wNiA1MDAuNDAgQyAxNDcuOTQgNTA0LjE5IDE0Ny45MSA1MDcuOTkgMTQ3Ljk3IDUxMS44MCBDIDE0Ni4xOCA1MTIuNjcgMTQ0LjIzIDUxMy4zMSAxNDIuNjYgNTE0LjU5IEMgMTQwLjg4IDUxOC41NCAxMzkuMjYgNTIyLjU2IDEzNy40NCA1MjYuNTAgQyAxMzUuMDkgNTMwLjM3IDEzMi4xNiA1MzMuODQgMTI5LjQ3IDUzNy40NyBDIDEyNy4xOSA1NDEuNTEgMTI2LjI4IDU0Ni4xNiAxMjUuNjYgNTUwLjcyIEMgMTI1LjIwIDU1My43MyAxMjIuMzIgNTU2LjAzIDEyMi43NyA1NTkuMjEgQyAxMjMuMDggNTYzLjkyIDEyMi40MiA1NjguOTYgMTI0LjY0IDU3My4zMiBDIDEyNy41NSA1NzQuNDQgMTMwLjk3IDU3My41NCAxMzMuNzEgNTc1LjI4IEMgMTM2LjIyIDU3Ni42OCAxMzkuMDkgNTc3LjE5IDE0MS43MCA1NzguMzcgQyAxNDQuMzQgNTc5LjU0IDE0Ni4xNCA1ODEuODkgMTQ4LjQ3IDU4My41MyBDIDE1NC4yNyA1ODYuOTYgMTYwLjk3IDU4OC4zMSAxNjcuNTQgNTg5LjQwIEMgMTcxLjYxIDU5MS44MCAxNzQuMzkgNTk2LjA0IDE3OC41NCA1OTguNDIgQyAxODAuMzQgNTk5LjUzIDE4Mi42OSA2MDAuNDEgMTgzLjMwIDYwMi42OCBDIDE4NS43NiA2MDkuODMgMTg3LjMxIDYxNy4zOSAxODcuMDMgNjI1LjAwIEMgMTg2Ljg5IDYzMS45OCAxODcuMTcgNjM4Ljk3IDE4Ni45NSA2NDUuOTYgQyAxODcuMDggNjQ5LjgxIDE4Mi4yOSA2NTEuMzQgMTgyLjEzIDY1NS4wOCBDIDE4MS44NCA2NTcuOTkgMTgwLjczIDY2MC43MSAxNzkuMjYgNjYzLjIyIEMgMTc3LjA1IDY2Ni42NCAxNzguOTcgNjcxLjIwIDE3Ni41MyA2NzQuNTUgQyAxNzQuMjUgNjc3LjY5IDE3My40MiA2ODEuNTEgMTcxLjk5IDY4NS4wMyBDIDE2OS41MyA2ODcuNzUgMTY3Ljk4IDY5MS4wMiAxNjcuMzMgNjk0LjYzIEMgMTY1LjgzIDY5NS4xNCAxNjQuMjcgNjk1LjU0IDE2Mi44OSA2OTYuMzQgQyAxNTkuOTYgNzAwLjc5IDE2MC41MCA3MDYuNDMgMTU4LjE1IDcxMS4xMiBDIDE1Ny4xMyA3MTMuMzkgMTU2Ljc0IDcxNS44NiAxNTYuMjggNzE4LjMwIEMgMTU1LjgyIDcyNC4yOSAxNTAuNjkgNzI5LjQ3IDE1Mi44OSA3MzUuNjkgQyAxNTAuMTMgNzM4LjE5IDE0OS4xNyA3NDEuODggMTQ4LjQ0IDc0NS4zOSBDIDE0OC4yNCA3NDguMzAgMTQ5LjA2IDc1MS4yNSAxNDguMTMgNzU0LjExIEMgMTQ2Ljk1IDc1Ny45MCAxNDguOTAgNzYxLjcyIDE0OC4yMyA3NjUuNTggQyAxNDcuMDMgNzY1LjQzIDE0NS44MyA3NjUuMzAgMTQ0LjYzIDc2NS4xOSBDIDE0NS4xNCA3NjYuMTYgMTQ1LjY1IDc2Ny4xNSAxNDYuMTcgNzY4LjE0IEMgMTQ3LjQ0IDc2Ny41NCAxNDguNzEgNzY2LjkzIDE0OS45NyA3NjYuMzMgQyAxNTAuMTEgNzY4Ljk5IDE0OS41NiA3NzEuODQgMTUwLjUxIDc3NC4zOSBDIDE1My41OSA3NzguNjggMTU4LjM2IDc4MS4yNiAxNjEuOTIgNzg1LjEyIEMgMTY0LjUzIDc4OC4yNCAxNjguOTUgNzg3LjU5IDE3Mi41MiA3ODguNDYgQyAxNzQuMzkgNzg5LjU0IDE3NS44NiA3OTEuMTcgMTc3LjYwIDc5Mi40MyBDIDE4MC4wMCA3OTMuMjggMTgyLjU0IDc5My42NSAxODUuMDIgNzk0LjE5IEMgMTg2LjMzIDc5Ny41MiAxODYuNjEgODAxLjk5IDE4My4xOCA4MDQuMTYgQyAxNzIuODYgODA5LjEyIDE2MS4xMyA4MDguMDAgMTUwLjA0IDgwNy45MSBDIDE0My4zNSA4MDYuOTMgMTM2LjY2IDgwNS42NyAxMzAuMTYgODAzLjgxIEMgMTI0LjAwIDgwMS4zMyAxMTYuNzUgODAxLjA0IDExMS42NSA3OTYuMzggQyAxMTAuMDUgNzk0Ljk1IDEwNy43OSA3OTUuMDEgMTA1LjgzIDc5NC41MSBDIDEwNy43MyA3ODkuMzkgMTA4LjM5IDc4My44NSAxMTAuOTkgNzc4Ljk5IEMgMTEyLjk3IDc3NS4zNiAxMTMuNjUgNzcxLjI2IDExNC4zNCA3NjcuMjUgQyAxMTUuMDEgNzYzLjI2IDExNy44NCA3NTkuNTkgMTE2LjczIDc1NS40MSBDIDExNS4xNiA3NDcuODcgMTEyLjg3IDc0MC4zMiAxMTMuNTQgNzMyLjUyIEMgMTE0LjE3IDcyOC45MyAxMTIuMjAgNzI1LjY0IDExMS44NiA3MjIuMTMgQyAxMTAuNDEgNzE1LjgwIDExMi4xNyA3MDkuMzkgMTEyLjAwIDcwMy4wMiBDIDExMi4wMSA3MDAuMzMgMTExLjg5IDY5Ny42NSAxMTIuMDQgNjk0Ljk4IEMgMTEyLjAwIDY5MS42OSAxMTQuOTIgNjg5LjI3IDExNC45NSA2ODYuMDEgQyAxMTUuMTUgNjgxLjI2IDExNC43NSA2NzYuNDcgMTE1LjU0IDY3MS43NiBDIDExNC4xNCA2NzEuNDkgMTEyLjc0IDY3MS4xNSAxMTEuMzEgNjcxLjA5IEMgMTA3LjYwIDY3Mi45MiAxMDQuNDEgNjc2LjczIDk5LjkxIDY3Ni4xOSBDIDk1LjUzIDY3NS44MCA5MS44NCA2NzguNDcgODcuODAgNjc5LjYyIEMgODMuNDMgNjgwLjcxIDc4LjkwIDY4MS40MSA3NC40MCA2ODEuMTEgQyA3Mi4xMiA2NzkuOTYgNzAuMzkgNjc3Ljg0IDY3Ljg4IDY3Ny4xNiBDIDYzLjQ4IDY3NS45MCA1OS4xNyA2NzQuMTkgNTUuMzcgNjcxLjYxIEMgNTAuNTEgNjY3Ljg0IDQzLjk5IDY3MS4yMiAzOC42MiA2NjkuNTUgQyAzNS40MCA2NjYuMjkgMzIuODYgNjYyLjQ1IDMwLjI2IDY1OC43MSBDIDI4LjY2IDY1Ni4zMyAyNi4yMyA2NTQuNjggMjQuNTkgNjUyLjM0IEMgMjMuMDEgNjQ3LjYyIDIyLjUxIDY0Mi40NyAxOS44MyA2MzguMTggQyAxNy4xNSA2MzMuNTMgMTUuNDMgNjI4LjM1IDE0Ljk0IDYyMy4wMSBDIDE0LjY4IDYxOC43MyAxMC45OSA2MTUuNDggMTEuMTAgNjExLjEyIEMgMTAuOTggNjAyLjY4IDEwLjg4IDU5NC4yNCAxMS4yMCA1ODUuODEgQyAxMS4xNiA1ODEuMzQgMTAuNjcgNTc2Ljg1IDExLjQzIDU3Mi40MiBDIDEzLjMwIDU2MC41OSAxMC4xOCA1NDguMzMgMTMuNTcgNTM2LjcwIEMgMTQuNDMgNTMxLjU2IDE2LjE3IDUyNi42MyAxNi40NiA1MjEuMzkgQyAxNy4xMyA1MTYuMTkgMjAuMDEgNTExLjczIDIxLjk3IDUwNi45OCBDIDIzLjk0IDUwMi4wMCAyMy4xOCA0OTYuMzQgMjUuNDQgNDkxLjQ1IEMgMjguNDQgNDg0LjMyIDMwLjE0IDQ3Ni42OCAzMy42OCA0NjkuNzcgQyAzNS4zNSA0NjcuNDAgMzguNDkgNDY2LjM5IDM5LjYwIDQ2My41OSBDIDQxLjU3IDQ2MC42OSA0MS43MiA0NTcuMTEgNDIuOTggNDUzLjk2IEMgNDUuODYgNDQ4Ljk1IDQ4LjI4IDQ0My41NyA1Mi4zMCA0MzkuMzQgQyA1NC4zMyA0MzYuOTcgNTYuMjEgNDM0LjQ3IDU4LjAxIDQzMS45MyBDIDYwLjI1IDQyOC45NSA2MC41NyA0MjQuOTcgNjMuMTUgNDIyLjIxIEMgNjcuMDggNDE2LjQ1IDczLjQyIDQxMi42OCA3Ni4zMCA0MDYuMTYgQyA4MC40OCA0MDEuNDIgODUuMzQgMzk3LjI0IDkwLjI1IDM5My4yNSBDIDk1Ljg3IDM4Ni45MSAxMDYuNTMgMzg0LjI0IDEwNy42MyAzNzQuNjUgQyAxMTQuNTEgMzc0LjAwIDExNy42NCAzNjYuNzcgMTIzLjgwIDM2NC41MSBDIDEyNC4xNiAzNjIuNDEgMTI0LjkwIDM2MC4zMyAxMjQuODAgMzU4LjE5IEMgMTI0LjE4IDM1NS4yNCAxMjIuOTcgMzUyLjQ2IDEyMS44NyAzNDkuNjggQyAxMTcuODYgMzUzLjA0IDExMy4xNSAzNTUuODQgMTEwLjQ0IDM2MC40OCBDIDEwOC42NCAzNjMuNTYgMTAzLjk5IDM2Mi4xMiAxMDEuOTYgMzY0Ljk4IEMgOTcuNzYgMzY5LjYyIDkyLjUwIDM3My4yMCA4Ni44OCAzNzUuOTEgQyA4NC43MyAzNzYuOTcgODQuMTMgMzc5LjQxIDgzLjQwIDM4MS40OCBDIDc4Ljg5IDM4My4wMCA3NC41MiAzODQuOTggNzAuNDAgMzg3LjM3IEMgNjYuNjkgMzg5LjUwIDY0LjQ5IDM5My40NiA2MC43MiAzOTUuNDkgQyA1Ni45NCAzOTUuMzQgNTMuMTYgMzk0Ljg5IDQ5LjM3IDM5NC44OSBDIDQ4LjMwIDM5Mi4wMyA0NS44MyAzODkuNTEgNDUuOTkgMzg2LjMyIEMgNDcuOTMgMzg0LjE3IDQ5Ljg0IDM4MS44MCA1Mi40MCAzODAuMzcgQyA2MC4yMiAzNzkuMzkgNjguNzkgMzc5LjM5IDc1LjI3IDM3NC4yNiBDIDc4LjkxIDM3MC41MCA4MC45NiAzNjUuNDIgODQuOTUgMzYxLjk0IEMgODcuNjAgMzYwLjI2IDkxLjAxIDM1OS42NCA5Mi45OCAzNTcuMDIgQyA5NS4xMCAzNTQuNDAgOTcuNjUgMzUyLjE2IDk5LjY5IDM0OS40OCBDIDEwMS4wNiAzNDcuMjUgOTkuMTIgMzQ0LjUxIDk2Ljc3IDM0NC4xNiBDIDkzLjg1IDM0My44MCA5MC44OSAzNDMuODggODcuOTYgMzQ0LjAwIEMgODMuNDMgMzQ0LjE1IDc5LjE3IDM0Ni44OCA3NC41OCAzNDUuNTUgQyA2OC44MiAzNDUuMzMgNjMuODIgMzQyLjQ0IDU4LjYwIDM0MC4zOSBDIDU0LjczIDMzOS42OCA1MC43MCAzNDAuMjYgNDYuOTAgMzM5LjEwIEMgNDQuNTIgMzM4LjcyIDQzLjIwIDMzNi40NyA0MS40NyAzMzUuMDQgQyAzOC4xNyAzMzguNTQgMzMuNzUgMzM1LjQxIDMwLjU2IDMzMy40MyBDIDI3LjQzIDMzMC42MiAyOC4wMiAzMjYuMDUgMjcuOTMgMzIyLjI2IEMgMzEuNzIgMzIyLjM1IDM1LjIwIDMyMC45MSAzOC44MCAzMjAuMDkgQyA0MS43NiAzMjEuNTAgNDQuNTIgMzIzLjMzIDQ3LjYzIDMyNC40NCBDIDUxLjg3IDMyNS44OCA1NC4yMSAzMzEuMDQgNTkuMDYgMzMwLjkzIEMgNjIuNDMgMzMwLjc4IDY1LjI0IDMzMi42MiA2OC4yNCAzMzMuODEgQyA3MS40NCAzMzMuOTYgNzQuNTggMzMyLjY4IDc3Ljc5IDMzMy4xNyBDIDgxLjc1IDMzMy42NiA4Ni4xMCAzMzQuOTkgODkuODAgMzMyLjgxIEMgOTIuNTUgMzMxLjI4IDk1Ljg0IDMzMS4xMSA5OC41NCAzMjkuNTMgQyAxMDEuNzYgMzI1LjMwIDEwMy42NyAzMTkuODkgMTA4Ljg0IDMxNy41MyBDIDEwOC43MiAzMTAuNjEgMTEwLjc0IDMwMy45MiAxMTEuMDcgMjk3LjA0IEMgMTExLjMwIDI5MS45OSAxMTQuNDkgMjg3Ljc1IDExNS40OCAyODIuOTAgQyAxMTUuNTggMjc5LjMxIDExNS45NSAyNzUuNjkgMTE3LjQyIDI3Mi4zNyBDIDExOS4xNiAyNjguMjkgMTE1Ljc1IDI2My44NSAxMTcuODYgMjU5Ljg2IEMgMTE5LjEzIDI1Ni44MSAxMjEuODEgMjU0LjcyIDEyMy45OSAyNTIuMzUgQyAxMjUuNzQgMjUzLjAyIDEyNy41OCAyNTQuNTIgMTI5LjUzIDI1My42NiBDIDEzMi4yOCAyNTIuNzEgMTM0Ljg2IDI1MS4zNCAxMzcuMzQgMjQ5LjgzIEMgMTM2LjY0IDI0Ny43MCAxMzUuODMgMjQ1LjYxIDEzNS4wMCAyNDMuNTMgQyAxMzguMjQgMjQyLjQyIDE0MS4xOCAyNDAuNjQgMTQ0LjMyIDIzOS4zMiBDIDE0OC43NiAyMzguMzMgMTUzLjMxIDIzOS40NCAxNTcuNzggMjM5LjU3IEMgMTYzLjQ3IDIzNy45MSAxNjguNTYgMjMzLjc0IDE3NC44MCAyMzQuMjcgQyAxODAuMTcgMjM1LjMwIDE4NS40MiAyMzcuNDIgMTkwLjk5IDIzNi45OSBDIDE5My40OCAyMzcuMjQgMTk2LjY3IDIzNi4yMyAxOTguNTMgMjM4LjQzIEMgMjAxLjUyIDI0MS42OSAyMDUuODMgMjQzLjExIDIwOS4zNSAyNDUuNjQgQyAyMTQuNTAgMjQ5LjQyIDIyMC4zMiAyNTIuNTcgMjI0LjA4IDI1Ny45MCBDIDIyNi4zNCAyNjEuNTggMjI4Ljc4IDI2NS4zMyAyMjkuMzIgMjY5LjczIEMgMjMwLjEyIDI3NC41MyAyMzMuNTkgMjc4LjE3IDIzNS41NSAyODIuNDggQyAyMzcuNzMgMjg5LjQxIDIzNS4zNCAyOTYuNDggMjM0LjczIDMwMy40NCBDIDIzMi4wMiAzMDQuNzEgMjI5LjE2IDMwNi4wMSAyMjcuMjAgMzA4LjM2IEMgMjI2LjcxIDMxMi4wMSAyMjYuNDMgMzE2LjE1IDIyOC42OSAzMTkuMzIgQyAyMzAuMzMgMzIxLjcyIDIzMi40NiAzMjMuNzQgMjM0LjMwIDMyNS45OCBDIDIzMC44OSAzMjguNTIgMjI2LjU5IDMzMC42NSAyMjUuMTkgMzM1LjAwIEMgMjIzLjk3IDMzOC42NSAyMjEuODQgMzQyLjYyIDIyMy42MSAzNDYuNDcgQyAyMjMuOTIgMzQ3Ljc4IDIyNS4wNSAzNDkuMDcgMjI0LjY4IDM1MC40NiBDIDIyMy4yNSAzNTEuNDcgMjIxLjcwIDM1Mi4zMSAyMjAuMjAgMzUzLjIxIEMgMjIwLjQzIDM1OC4xMyAyMTguNTkgMzYyLjg1IDIxNS44MiAzNjYuODMgQyAyMTMuMjYgMzY4Ljg2IDIwOS44MSAzNjkuNzAgMjA2LjU3IDM2OS40NSBDIDIwMi4yNiAzNjkuMjIgMTk3Ljk0IDM2OS43NCAxOTMuNzQgMzcwLjY5IEMgMTg4Ljk5IDM3MS44NCAxODQuNDIgMzY5LjMzIDE3OS42OCAzNjkuNDkgQyAxNzYuMTAgMzcwLjIzIDE3NC40MCAzNzMuODIgMTcyLjM0IDM3Ni40NCBDIDE3MC40MiAzNzcuNjIgMTY4LjEyIDM3Ny45MCAxNjUuOTcgMzc4LjQyIEMgMTY2LjA0IDM4MS40NiAxNjUuNjkgMzg0LjU2IDE2Ni4zNSAzODcuNTUgQyAxNjguNzAgMzkxLjc0IDE3Mi45MCAzOTQuNDYgMTc1LjQyIDM5OC41NCBDIDE3Ny41MiA0MDEuNDMgMTc5LjE0IDQwNS4wMCAxODIuMzggNDA2LjgxIEMgMTg0LjYxIDQwNy4zOCAxODYuODggNDA2LjU3IDE4OS4wNCA0MDYuMDcgQyAxOTQuNTcgNDA0LjU1IDE5OS45OCA0MDIuMTMgMjA0LjI4IDM5OC4yOCBDIDIwNi42NSAzOTYuMDEgMjEwLjEzIDM5NS42NyAyMTIuNzEgMzkzLjcxIEMgMjE2Ljc0IDM5MC43MyAyMjAuODIgMzg3LjgxIDIyNC45NyAzODUuMDEgQyAyMjcuNDEgMzgzLjY5IDIzMC4yNSAzODMuMjAgMjMyLjUyIDM4MS41NSBDIDIzNS41MyAzNzcuMTkgMjM3LjIzIDM3Mi4xMyAyMzkuMzggMzY3LjM1IEMgMjQzLjM3IDM2MS43NSAyNDUuMzUgMzU1LjAyIDI0OS40OCAzNDkuNTAgQyAyNTIuMDAgMzQ1LjA4IDI1NC4xMSAzNDAuMzkgMjU3LjU4IDMzNi41OSBDIDI1OS44NyAzMzIuNTggMjYyLjI0IDMyOC42MSAyNjUuMTcgMzI1LjAzIEMgMjY2LjExIDMyNS4yNiAyNjcuMDYgMzI1LjUwIDI2OC4wMSAzMjUuNzQgQyAyNjYuMzcgMzIyLjUxIDI2Ni45MiAzMTguODcgMjY3LjA3IDMxNS40MSBDIDI3MC40MCAzMTMuNTQgMjcyLjYxIDMxMC40MyAyNzQuMzkgMzA3LjE2IEMgMjcyLjExIDMwNC43MiAyNjkuNzEgMzAyLjI5IDI2OC4zMiAyOTkuMjEgQyAyNjYuODYgMjk5LjExIDI2NS40MCAyOTkuMDMgMjYzLjk1IDI5OC45NSBDIDI2NC42NSAyOTguMzAgMjY1LjM1IDI5Ny42NiAyNjYuMDUgMjk3LjAyIEMgMjYzLjg3IDI5Ni44NCAyNjEuNjkgMjk2Ljc2IDI1OS41MSAyOTYuNzYgQyAyNTcuMzEgMjkyLjQyIDI1NC43NCAyODguMTQgMjUwLjg4IDI4NS4wOCBDIDI0Ny4zMiAyODIuMjAgMjQ3LjQ3IDI3Ny4yMSAyNDUuNTYgMjczLjM4IEMgMjQxLjU2IDI2Ni4xNiAyNDEuMDUgMjU3LjQ3IDIzNi40NyAyNTAuNTMgQyAyMzMuMzAgMjQ2LjEyIDIzNi4xNSAyNDAuMzYgMjM0LjUwIDIzNS41NSBDIDIzMy4zOSAyMzQuMDcgMjMxLjk1IDIzMi44OSAyMzAuNjYgMjMxLjU3IEMgMjMzLjcwIDIzMC4xOCAyMzguNDQgMjI5LjkwIDIzOC45NyAyMjUuNzkgQyAyMzkuOTEgMjIyLjg4IDIzNy41NCAyMjAuOTYgMjM1LjQ5IDIxOS40MSBDIDIzNS43MiAyMTguMDMgMjM1LjkyIDIxNi42NSAyMzYuMTMgMjE1LjI4IEMgMjQwLjg1IDIxMy4wNSAyNDUuODYgMjExLjU2IDI1MC43NCAyMDkuNzUgQyAyNTUuMjMgMjA3Ljc4IDI1OC4yOCAyMDMuNzYgMjYyLjE2IDIwMC45MiBDIDI2MS4yOCAxOTkuODkgMjYwLjQwIDE5OC44OCAyNTkuNTIgMTk3Ljg2IEMgMjYwLjY5IDE5NS4wNSAyNjAuODcgMTkxLjkxIDI2Mi4yNSAxODkuMjAgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gMzM1LjI3IDE5NS4yNiBDIDMzNS43OCAxOTUuNzkgMzM1Ljc4IDE5NS43OSAzMzUuMjcgMTk1LjI2IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDY1MS4yNSAyNDUuMjYgQyA2NTEuNzkgMjQ1LjgwIDY1MS43OSAyNDUuODAgNjUxLjI1IDI0NS4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjZmRmZGZkIiBkPSIgTSA5OTYuMjcgMjUwLjI2IEMgOTk2Ljc3IDI1MC43OCA5OTYuNzcgMjUwLjc4IDk5Ni4yNyAyNTAuMjYgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNTY3LjcyIDI2OS43NyBDIDU3MC40MCAyNjcuNDUgNTc0LjMyIDI2Ny43MCA1NzcuNjAgMjY4LjIzIEMgNTg0LjM5IDI3Mi41MiA1ODEuNDAgMjgxLjQxIDU4Mi4wMCAyODguMDMgQyA1NzcuODcgMjg4Ljc5IDU3Mi4yMiAyOTAuNzUgNTY5LjE4IDI4Ni43OSBDIDU2Ni44MiAyODQuMjYgNTY3LjAyIDI4MC41OCA1NjYuNDYgMjc3LjQwIEMgNTY1Ljk0IDI3NC44MiA1NjYuMjIgMjcxLjk4IDU2Ny43MiAyNjkuNzcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNzcwLjI2IDM0Mi4yNSBDIDc3MC43OSAzNDIuNzkgNzcwLjc5IDM0Mi43OSA3NzAuMjYgMzQyLjI1IFoiIC8+CjxwYXRoIGZpbGw9IiMwMzAzMDMiIGQ9IiBNIDc1Ny4yNiAzNjguMjYgQyA3NTcuNzcgMzY4Ljc4IDc1Ny43NyAzNjguNzggNzU3LjI2IDM2OC4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjZmRmZGZkIiBkPSIgTSA2ODUuMTQgMzg1Ljg3IEMgNjg4LjkwIDM4NS45MiA2OTMuNjAgMzg1Ljc3IDY5NS45MyAzODkuMzMgQyA2OTcuMTIgMzk0LjQ5IDY5Mi41OSAzOTguMjcgNjg5LjEzIDQwMS4yNyBDIDY4Ny40NyA0MDIuOTIgNjg0Ljk4IDQwMS43NCA2ODMuMzMgNDAwLjcxIEMgNjgwLjE2IDM5NS45NyA2ODIuNzAgMzkwLjI5IDY4NS4xNCAzODUuODcgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNjUyLjc0IDQxMy41OSBDIDY1My41NiA0MTAuMjcgNjU3LjY1IDQwOS4zNyA2NjAuNTggNDEwLjE1IEMgNjYyLjM5IDQxMS40NCA2NjQuMTUgNDEzLjA1IDY2NS4wNiA0MTUuMTQgQyA2NjQuNjIgNDE5LjkxIDY2Mi4xNiA0MjQuMjAgNjU5Ljc3IDQyOC4yNiBDIDY1OC4wOSA0MjcuNjAgNjU2LjM2IDQyNy4wNyA2NTQuNzggNDI2LjIxIEMgNjUxLjU2IDQyMi44NCA2NTEuOTQgNDE3LjgxIDY1Mi43NCA0MTMuNTkgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gNjk3LjI1IDQxOS4zMCBDIDY5Ny43OCA0MTkuODQgNjk3Ljc4IDQxOS44NCA2OTcuMjUgNDE5LjMwIFoiIC8+CjxwYXRoIGZpbGw9IiNmZGZkZmQiIGQ9IiBNIDIwNS45MyA0MjUuOTMgQyAyMTAuODUgNDIyLjU0IDIxNi43NCA0MjEuMjAgMjIyLjQ4IDQxOS45NSBDIDIxOS43OSA0MjQuMzAgMjE3LjEwIDQyOC44NiAyMTMuNDMgNDMyLjQyIEMgMjA1LjQ4IDQzNS44NSAxOTkuMTMgNDQyLjE0IDE5MC45MiA0NDQuOTcgQyAxODcuMDEgNDQ2LjYyIDE4My41NCA0NDkuODAgMTc5LjE3IDQ1MC4wMyBDIDE3NC44MSA0NDguMzIgMTcyLjMzIDQ0My45MCAxNjkuMjAgNDQwLjY1IEMgMTY4Ljc5IDQzNy43NiAxNjkuMDEgNDM0LjgzIDE2OS4wMCA0MzEuOTMgQyAxNzIuMDcgNDMyLjE3IDE3NS44NiA0MzEuMTMgMTc4LjExIDQzMy44OCBDIDE4MC4zNiA0MzYuMzggMTgzLjMxIDQzNy45OCAxODYuNjggNDM4LjM3IEMgMTkxLjMxIDQzMS44MCAxOTkuNjMgNDMwLjI3IDIwNS45MyA0MjUuOTMgWiIgLz4KPHBhdGggZmlsbD0iI2ZkZmRmZCIgZD0iIE0gMTA0NS4yNiA0NTEuMjYgQyAxMDQ1Ljc4IDQ1MS43OCAxMDQ1Ljc4IDQ1MS43OCAxMDQ1LjI2IDQ1MS4yNiBaIiAvPgo8cGF0aCBmaWxsPSIjMDMwMzAzIiBkPSIgTSAyMDEuMjcgNzIxLjI1IEMgMjAxLjc3IDcyMS43NyAyMDEuNzcgNzIxLjc3IDIwMS4yNyA3MjEuMjUgWiIgLz4KPHBhdGggZmlsbD0iIzAzMDMwMyIgZD0iIE0gMTY0LjI1IDc4My4yNSBDIDE2NC43OSA3ODMuNzkgMTY0Ljc5IDc4My43OSAxNjQuMjUgNzgzLjI1IFoiIC8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"gretl,gretl\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"gretl_x11.Gretl_x11\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Gretl\"\nLABEL oc.displayname=\"Gretl\"\nLABEL oc.path=\"/usr/bin/gretl\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"Gretl\"\nENV APPBIN \"/usr/bin/gretl\"\nENV APP \"/usr/bin/gretl\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/gretl/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/gretl/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/gretl/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/gretl/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libx11-xcb1 libasound2 && apt-get clean\nRUN curl -Ls -o /tmp/hyper.deb https://releases.hyper.is/download/deb && apt-get install --no-install-recommends --yes /tmp/hyper.deb && apt-get clean && rm -rf /tmp/hyper.deb\nLABEL oc.icon=\"hyper.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojM2QzZDNkIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzQ3NDc0NyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0yMyAxMi0xMSA5IDUgMy0zIDggMTAtOS01LTN6bTIgMTh2MmgxMHYtMnoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8cGF0aCBkPSJtMzUgMzF2LTJoLTEwdjJtMTAgMCIgc3R5bGU9ImZpbGw6I2Y0NjA5ZCIvPgogPHBhdGggZD0ibTEyIDIwIDExLTktNCA4IDUgMy0xMCA5IDMtOHoiIHN0eWxlPSJmaWxsOiNmMWFiNDUiLz4KIDxwYXRoIGQ9Im0xMiAyMCAxMS05LTQgOCA1IDMtMTAgOSAzLTh6IiBzdHlsZT0iZmlsbDojZjNiNjRkIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"hyper,terminal,remote\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"hyper.desktop\"\nLABEL oc.launch=\"hyper.Hyper\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"hyper\"\nLABEL oc.displayname=\"hyper\"\nLABEL oc.path=\"/opt/Hyper/hyper\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/ssh\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"hyper\"\nENV APPBIN \"/opt/Hyper/hyper\"\nENV APP \"/opt/Hyper/hyper\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/hyper/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/hyper/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/hyper/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/hyper/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_impress.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Y1NWEwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmE4MjgiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjciIHkyPSI1NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmNmNWQyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0NS41MDEiIHgyPSI0NS41MDEiIHkxPSI3LjEwNTUiIHkyPSIyOS44OTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlZmNlYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmY2Y5ZTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzUiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSIzOC4wNjYiIGN5PSIyNi4xOTIiIHI9IjI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0uOCAzZS04IC0xLjkyNjVlLTggLS45NDAzNCA4MC40NTMgMzguNjI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWUzNTNjIiBzdG9wLW9wYWNpdHk9Ii40ODUzOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxOTE5MTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI3NTYiIHgyPSI3NTYiIHkxPSItODYwLjY0IiB5Mj0iLTg3Ni42NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjM2MzYgMCAwIDEuMzYzNiAtOTg5LjM2IDEyMTUuNCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2QzNjExOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMDllNmYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJpIiBjeD0iMTUyLjMzIiBjeT0iLTc1NC42NCIgcj0iMTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMTU3ZS02IC4wOTAyNDcgLTEuMDY5MyAwIC03NzUgMzQuNTY2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9Ii41MDE5NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI4MTIiIHgyPSI4MTIiIHkxPSItMTA3NS42IiB5Mj0iLTExMTUuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguNSAwIDAgLjU0OTk4IC0zNjIgNjMzLjU5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJhZDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNjMzYSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9InAiIHgxPSI1MjMiIHgyPSI1MjMiIHkxPSItMTA2NC42IiB5Mj0iLTEwODguNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjg1NzEgMCAwIC40MTY2NyAtMTE1LjQzIDQ4MS42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYjNiM2IzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U2ZTZlNiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9InEiIHgxPSI3MTQiIHgyPSI3MTQiIHkxPSItMTA2My42IiB5Mj0iLTEwODMuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjU2NDEgMCAwIC41IC0xNDkuMDggNTY5LjgyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9Ii41ODgyNCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjg2Mjc0IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iciIgeDE9Ijg4OSIgeDI9Ijg4MS43NyIgeTE9Ii0xMDU0LjYiIHkyPSItMTA0NC42IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC42NDIzNyAwIDAgLjYzODc2IC01MzEuMDkgNzA0LjI0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMThhMzAzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzEwNjgwMiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJhIiB4PSItLjA1MiIgeT0iLS4wNzA5MDkiIHdpZHRoPSIxLjEwNCIgaGVpZ2h0PSIxLjE0MTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNjUwMDAyNSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8cGF0aCBkPSJtMzMuMDEyIDM5LTEuNDg0NCAxLjQ4NDQtMC41MzkwNi0wLjQ4NDM4aC0yLjU3MDNsMS43NjE3IDEuODMwMS0wLjE2OTkyIDAuMTY5OTJoLTEuMDA5OHYxLjAwOThsLTUuOTkyMiA1Ljk5MDJoMy45MDIzbDQuMzM1OS01aDEuMDI1NGw0LjgxODQgNWgzLjkwMjNsLTUuOTkyMi01LjM5MDZ2LTEuNjA5NGgtMS43ODkxbC0wLjEyODkxLTAuMTE3MTkgMi41LTIuODgyOGgtMi41NzAzeiIgb3BhY2l0eT0iLjUiLz4KIDxwYXRoIGQ9Im0xOC4zNjQgMjBoMjQuNzMyYzAuNzU1NDUgMCAzLjkwNDQgMy4yNDQ2IDMuOTA0NCA0djE2LjQ1NWMwIDAuNzU1NDUtMC42MDgxOSAxLjM2MzYtMS4zNjM2IDEuMzYzNmgtMjcuMjczYy0wLjc1NTQ1IDAtMS4zNjM2LTAuNjA4MTktMS4zNjM2LTEuMzYzNnYtMTkuMDkxYzAtMC43NTU0NSAwLjYwODE5LTEuMzYzNiAxLjM2MzYtMS4zNjM2eiIgZmlsbD0idXJsKCNqKSIvPgogPHBhdGggZD0ibTE4LjM2NCAyMGgyNC43MzJjMC43NTU0NSAwIDMuOTA0NCAzLjI3MTYgMy45MDQ0IDQuMDMzM3YxNi41OTJjMCAwLjc2MTczLTAuNjA4MTkgMS4zNzQ5LTEuMzYzNiAxLjM3NDloLTI3LjI3M2MtMC43NTU0NSAwLTEuMzYzNi0wLjYxMzIzLTEuMzYzNi0xLjM3NDl2LTE5LjI1YzAtMC43NjE3MyAwLjYwODE5LTEuMzc0OSAxLjM2MzYtMS4zNzQ5eiIgZmlsdGVyPSJ1cmwoI2EpIiBvcGFjaXR5PSIuMjUiLz4KIDxwYXRoIGQ9Im0xOC4zNjQgMjBoMjQuNzMyYzAuNzU1NDUgMCAzLjkwNDQgMy4yNzE2IDMuOTA0NCA0LjAzMzN2MTYuNTkyYzAgMC43NjE3My0wLjYwODE5IDEuMzc0OS0xLjM2MzYgMS4zNzQ5aC0yNy4yNzNjLTAuNzU1NDUgMC0xLjM2MzYtMC42MTMyMy0xLjM2MzYtMS4zNzQ5di0xOS4yNWMwLTAuNzYxNzMgMC42MDgxOS0xLjM3NDkgMS4zNjM2LTEuMzc0OXoiIGZpbGw9InVybCgjbCkiLz4KIDxwYXRoIGQ9Im0xNi45MTQgNDdoMzAuMTcxYzAuNTA2NDkgMCAwLjkxNDI3IDAuNDAyMTMgMC45MTQyNyAwLjkwMTh2MC44NjMwN2MwIDAuNDk5NjctMC40MDc3NyAwLjkwMTgtMC45MTQyNyAwLjkwMThoLTMwLjE3MWMtMC41MDY0OSAwLTAuOTE0MjctMC40MDIxMy0wLjkxNDI3LTAuOTAxOHYtMC44NjMwN2MwLTAuNDk5NjcgMC40MDc3Ny0wLjkwMTggMC45MTQyNy0wLjkwMTh6IiBmaWxsPSJ1cmwoI2kpIiBvcGFjaXR5PSIuNCIvPgogPGcgZmlsbD0iI2ZmZiI+CiAgPHJlY3QgeD0iMjAiIHk9IjIzIiB3aWR0aD0iMjQiIGhlaWdodD0iMyIgb3BhY2l0eT0iLjM1Ii8+CiAgPHJlY3QgeD0iMjQiIHk9IjI4IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBvcGFjaXR5PSIuMzUiLz4KICA8ZWxsaXBzZSBjeD0iMjEiIGN5PSIyOSIgcng9IjEiIHJ5PSIxIiBvcGFjaXR5PSIuMzUiLz4KICA8cmVjdCB4PSIyNCIgeT0iMzIiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIG9wYWNpdHk9Ii4zNSIvPgogIDxlbGxpcHNlIGN4PSIyMSIgY3k9IjMzIiByeD0iMSIgcnk9IjEiIG9wYWNpdHk9Ii4zNSIvPgogIDxyZWN0IHg9IjI0IiB5PSIzNiIgd2lkdGg9IjgiIGhlaWdodD0iMS45OTk5IiBvcGFjaXR5PSIuMzUiLz4KICA8ZWxsaXBzZSBjeD0iMjEiIGN5PSIzNyIgcng9IjEiIHJ5PSIxIiBvcGFjaXR5PSIuMzUiLz4KIDwvZz4KIDxyZWN0IHg9IjM0IiB5PSIyOCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiBmaWxsPSJ1cmwoI3ApIi8+CiA8cmVjdCB4PSIzNCIgeT0iMjgiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0idXJsKCNxKSIvPgogPHBhdGggZD0ibTM2IDM2LjM1MyAyLTQgMi42NjY3IDEuMzMzMyAyLTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNyKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZCkiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8cGF0aCBkPSJtNTYuODk2IDI5Ljg5Ni0yMi43OTEtMjIuNzkxYTI1IDI1IDAgMCAwIDIyLjc5MSAyMi43OTF6IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"impress,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-impress.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-impress\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--impress\"\nLABEL oc.name=\"impress\"\nLABEL oc.displayname=\"Impress\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroenabled.12;application/vnd.oasis.opendocument.presentation-flat-xml;application/x-iwork-keynote-sffkey;\"\nLABEL oc.fileextensions=\"odp;pot;potm;potx;pps;ppsx;ppt;pptx;pptm\"\nLABEL oc.legacyfileextensions=\"odp\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"impress\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--impress\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/impress/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/impress/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/impress/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/impress/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y inkscape inkscape-lang && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_inkscape.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iU2tldGNoIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMDEuNTMiIHgyPSIxMDEuNTMiIHkxPSIxOC44ODgiIHkyPSIxODMuNTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMy41MjIzIDAgMCAzLjUyMjMgMTYyLjM4IDE2Ny4wOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkN2Q3ZDciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzU3NjMiIHk9Ii0uMDM2MjQiIHdpZHRoPSIxLjA3MTUiIGhlaWdodD0iMS4wNzI1IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3LjYyOTQwMyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjU0MC4xMSIgeDI9IjU0MC4xMSIgeTE9IjIuMDA3OCIgeTI9IjEwMjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMi4wMDA0IDEuOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iLjUwNzY5Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0YTRhNGEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjEwNDY4OCIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mzc2MiAwIDAgLjA2Mzc2MiAtLjYxNDI0IC0uNjc4KSI+CiAgPGcgaWQ9InNoYWRvdyIgdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMiAyKSIgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPjwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjAwMDcgMCAwIDEuMDAwNyAtLjkyNDYzIC4xNzU5OCkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTk2Ny45NiAzOTIuNDJjLTEuMDk1Ny00LjMzMy0yLjM0MDgtOC45NjQ4LTMuNjM1Ny0xMy41NDctMC45OTYxLTMuMzg2Ny0xLjk5MjItNi44MjMyLTMuMTM3Ny0xMC40NTktMS41OTM4LTUuMTI5OS0zLjM4NjctMTAuNDU5LTUuMjc5My0xNS43ODgtNi40MjQ4LTE4LjE3OS0xNC4wOTUtMzUuOTA5LTIzLjA2LTUzLjQ0LTMuNzg1MS03LjM3MTEtNy45MTg5LTE0Ljg5Mi0xMi4yNTItMjIuMzEyLTIwLjIyMS0zNC4zNjUtNDUuNjIxLTY2LjkzNy03Ni4wNTItOTcuMzY4LTcyLjMxNi03Mi4zMTYtMTU2LjU0LTExNi4xOS0yNTIuNjYtMTMxLjUzLTE2LjE4Ny0yLjU4OTgtMzIuNjcyLTQuMzgyOC00OS44NTQtNS4zMjkxLTkuNjYyMS0wLjU0Nzg1LTE5Ljc3Mi0wLjg0NjY4LTI5Ljk4Mi0wLjg0NjY4LTkuMzEzNSAwLTE4LjUyNyAwLjI0OTAyLTI3Ljc5MSAwLjc0NzA3LTExNy44OSA2LjA3NjItMjE5LjQ0IDUxLjc0Ny0zMDQuNjYgMTM2Ljk2cS0xMzcuNzEgMTM3LjcxLTEzNy43MSAzMzIuNDVjMCAxMjkuODQgNDUuOTIgMjQwLjcxIDEzNy43MSAzMzIuNSA1Ni40NzkgNTYuNDI5IDEyMC4wOCA5NS41MjUgMTkwLjM1IDExNy4wOSAzNi42MDYgMTEuMjA2IDc0LjUwOCAxNy43OCAxMTQuMyAxOS44NzJoMC4zOTg0NGM4LjQ2NjggMC40NDgzIDE2LjUzNSAwLjY5NzMgMjQuNDA0IDAuNjk3M2gyLjk4ODNjMTAuMjYgMCAyMC40Mi0wLjI5ODggMjkuOTgyLTAuNzk2OSAyLjQ5MDItMC4xNDk0IDQuNzMxNC0wLjI5ODggNi45MjI4LTAuNDQ4MiAyMC4xMjEtMS40NDQzIDM5Ljc0NC00LjAzNDIgNTguNDcxLTcuNjY5OSA3LjkxODktMS41NDQgMTUuNzM4LTMuMjg3MiAyMy4zMDktNS4xMjk5IDgwLjQ4NC0yMC4yMjEgMTUxLjU2LTYxLjM1OSAyMTMuODEtMTIzLjYyIDQ4LjQxLTQ4LjQxIDg0LjA3LTEwMi4xIDEwNi45My0xNjEuMTcgMTguMzc4LTQ3LjQ2NCAyOC41MzgtOTguNDE0IDMwLjQzMS0xNTIuOSAwLjE5OTItNi4wMjY0IDAuMjk4OS0xMi4yMDIgMC4yOTg5LTE4LjQyOHYtMS45OTIyLTAuOTk2MDljLTAuMTk5My00MC40OTEtNC45MzA3LTc5LjE4OS0xNC4yNDQtMTE2LjU0eiIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiLz4KICAgIDxwYXRoIGQ9Im05NjcuOTYgMzkyLjQyYy0xLjA5NTctNC4zMzMtMi4zNDA4LTguOTY0OC0zLjYzNTctMTMuNTQ3LTAuOTk2MS0zLjM4NjctMS45OTIyLTYuODIzMi0zLjEzNzctMTAuNDU5LTEuNTkzOC01LjEyOTktMy4zODY3LTEwLjQ1OS01LjI3OTMtMTUuNzg4LTYuNDI0OC0xOC4xNzktMTQuMDk1LTM1LjkwOS0yMy4wNi01My40NC0zLjc4NTEtNy4zNzExLTcuOTE4OS0xNC44OTItMTIuMjUyLTIyLjMxMi0yMC4yMjEtMzQuMzY1LTQ1LjYyMS02Ni45MzctNzYuMDUyLTk3LjM2OC03Mi4zMTYtNzIuMzE2LTE1Ni41NC0xMTYuMTktMjUyLjY2LTEzMS41My0xNi4xODctMi41ODk4LTMyLjY3Mi00LjM4MjgtNDkuODU0LTUuMzI5MS05LjY2MjEtMC41NDc4NS0xOS43NzItMC44NDY2OC0yOS45ODItMC44NDY2OC05LjMxMzUgMC0xOC41MjcgMC4yNDkwMi0yNy43OTEgMC43NDcwNy0xMTcuODkgNi4wNzYyLTIxOS40NCA1MS43NDctMzA0LjY2IDEzNi45NnEtMTM3LjcxIDEzNy43MS0xMzcuNzEgMzMyLjQ1YzAgMTI5Ljg0IDQ1LjkyIDI0MC43MSAxMzcuNzEgMzMyLjUgNTYuNDc5IDU2LjQyOSAxMjAuMDggOTUuNTI1IDE5MC4zNSAxMTcuMDkgMzYuNjA2IDExLjIwNiA3NC41MDggMTcuNzggMTE0LjMgMTkuODcyaDAuMzk4NDRjOC40NjY4IDAuNDQ4MyAxNi41MzUgMC42OTczIDI0LjQwNCAwLjY5NzNoMi45ODgzYzEwLjI2IDAgMjAuNDItMC4yOTg4IDI5Ljk4Mi0wLjc5NjkgMi40OTAyLTAuMTQ5NCA0LjczMTQtMC4yOTg4IDYuOTIyOC0wLjQ0ODIgMjAuMTIxLTEuNDQ0MyAzOS43NDQtNC4wMzQyIDU4LjQ3MS03LjY2OTkgNy45MTg5LTEuNTQ0IDE1LjczOC0zLjI4NzIgMjMuMzA5LTUuMTI5OSA4MC40ODQtMjAuMjIxIDE1MS41Ni02MS4zNTkgMjEzLjgxLTEyMy42MiA0OC40MS00OC40MSA4NC4wNy0xMDIuMSAxMDYuOTMtMTYxLjE3IDE4LjM3OC00Ny40NjQgMjguNTM4LTk4LjQxNCAzMC40MzEtMTUyLjkgMC4xOTkyLTYuMDI2NCAwLjI5ODktMTIuMjAyIDAuMjk4OS0xOC40Mjh2LTEuOTkyMi0wLjk5NjA5Yy0wLjE5OTMtNDAuNDkxLTQuOTMwNy03OS4xODktMTQuMjQ0LTExNi41NHoiIGZpbGw9InVybCgjYSkiLz4KICAgPC9nPgogIDwvZz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjA5NzMgMCAwIDEuMDk3MyAtNTEuNTQ4IC01Ni4zOTYpIiBkPSJtNTA5Ljg1IDI4MS44OWMtMTUuODMzLTAuMDMyMS0zMS41NzIgNS43MjQ5LTQyLjkzNSAxNy4zNTRsLTE4OC45OSAxOTMuNDFjLTYzLjg2OCA3OS4wOTMgNDMuNDY5IDY5LjkxIDg5LjQ4MSA5Mi42OTEgMTYuNTA1IDE2Ljg3MS02My4yNTIgMjkuMjYtNDYuNzQ3IDQ2LjE0NSAxNi41MDUgMTYuODcxIDk5LjczMiAzMi40ODQgMTE2LjI2IDQ5LjM1NSAxNi41MDUgMTYuODcxLTMzLjc1OSAzNC43OTEtMTcuMjU0IDUxLjY2MiAxNi41MDUgMTYuODcxIDU0LjY0NiAwLjg3NjgzIDYxLjc5NCAzOS44MjUgNS4wOTM3IDI3LjgzMiA2OC44NjEgMTEuOTYxIDEwMC4wMS0xMC44MzQgMTYuNTA1LTE2Ljg4NS0zMS41NTItMTUuMjMtMTUuMDQ3LTMyLjEwMSA0MS4wNDUtNDEuOTc0IDc5LjI1LTE1LjMyMiA5My4yOTMtNTcuMzggNi45MzY5LTIwLjc4My02MC40NzEtMzEuOTgyLTQzLjkzOC00OC44NTMgNDcuNDg5LTI3LjczNCAyMTEuNi00NS44MDYgMTMzLjcyLTEyMy42OWwtMTk1LjkxLTIwMC4yM2MtMTEuOTgxLTExLjUwMy0yNy45MDQtMTcuMzIzLTQzLjczNy0xNy4zNTR6bTEuNjA1IDE4LjM1OGMxMS4zMDQgMC4wNTk3IDIyLjU4NCA0LjMyMTkgMzAuNjk2IDEyLjUzOWw3NC44MzUgNzUuOTM4YzcuMDkxNyA3LjI0NjUgNi45Nzc0IDIxLjI0MSAzLjAwOTQgMjUuMjc5bC0zNy4xMTYtMjkuNjkzLTcuMzIzIDQ0LjAzOC0zMC45OTctMTYuMzUxLTQ5Ljc1NiAzMS4yOTgtMTYuNDUyLTY2LjEwNy0yNi42ODQgNDYuMTQ1aC00MC43MjhjLTE2LjYzMiAwLTE4LjYyMy0yMS4xMDItMy41MTEtMzYuMjE0IDI2LjM5Ny0yOC40OTQgNTYuNjY3LTU3LjUwNCA3My4xMjktNzQuMzMzIDguMjczNy04LjQ1NjYgMTkuNTkzLTEyLjU5OSAzMC44OTctMTIuNTM5em0tODkuNzgyIDI5NS41M2M1LjA1MTUgMy4xMzc4IDgxLjQ0MiAxOC42NzMgMTAwLjExIDIxLjc2OCA2LjQ3MjYgMS4zNjQ5IDEuODk4OSA4LjAzNjctNy4wMjIgMTIuNTM5LTIwLjEyMSA1LjM0Ny0xMTcuNzItMzQuMzA4LTkzLjA5Mi0zNC4zMDh6bTI5Ny4xMyA1My4xNjdjLTE1LjM3MiAwLjUyOTQxLTMwLjUzIDguMzQ3Mi0zNC43MDkgMjMuMDcyIDAgOS41OTY0IDcwLjYyMiAxNS45NDUgNzAuNjIyLTIuMjA2OS01LjAzNzQtMTQuNTc3LTIwLjU0LTIxLjM5NS0zNS45MTMtMjAuODY1em0tMzI0LjIyIDQxLjUzYy0yMi4xNTktMC4yMDU0NC00OC4xMDUgMTYuMDQ3LTI4Ljk5MSAzMi42MDIgMTYuNzQ0IDE0LjQ3OSA0Mi42MDUtMy42NjkxIDUwLjM1OC0yMy44NzUtNC41NjI5LTYuMDYyOC0xMi42OTYtOC42NDctMjEuMzY3LTguNzI3NHptMjgwLjU4IDEuMzA0MWMtMjEuNTg1IDE5LjM2MiAyLjM5OTEgMzguOTkyIDIzLjY3NCAyNi40ODMgNC43NDE5LTQuODEyMi0wLjEwNTYxLTIxLjY3MS0yMy42NzQtMjYuNDgzeiIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMiIgc3Ryb2tlLXdpZHRoPSI1MC4zNDUiLz4KICA8cGF0aCBkPSJtNTA3LjkgMjQxLjk0Yy0xNy4zNzMtMC4wMzUyLTM0LjY0NCA2LjI4MTgtNDcuMTExIDE5LjA0M2wtMjA3LjM4IDIxMi4yMmMtNzAuMDgxIDg2Ljc4NiA0Ny42OTcgNzYuNzExIDk4LjE4NSAxMDEuNzEgMTguMTExIDE4LjUxMi02OS40MDUgMzIuMTA2LTUxLjI5NCA1MC42MzQgMTguMTExIDE4LjUxMiAxMDkuNDMgMzUuNjQ0IDEyNy41NyA1NC4xNTYgMTguMTExIDE4LjUxMi0zNy4wNDMgMzguMTc2LTE4LjkzMyA1Ni42ODggMTguMTExIDE4LjUxMiA1OS45NjIgMC45NjIxMiA2Ny44MDUgNDMuNjk5IDUuNTg5MiAzMC41NCA3NS41NTkgMTMuMTI0IDEwOS43NC0xMS44ODggMTguMTExLTE4LjUyNy0zNC42MjItMTYuNzExLTE2LjUxMS0zNS4yMjMgNDUuMDM3LTQ2LjA1NyA4Ni45NTktMTYuODEzIDEwMi4zNy02Mi45NjIgNy42MTE3LTIyLjgwNC02Ni4zNTQtMzUuMDkzLTQ4LjIxMi01My42MDYgNTIuMTA5LTMwLjQzMiAyMzIuMTktNTAuMjYxIDE0Ni43My0xMzUuNzJsLTIxNC45Ny0yMTkuNzFjLTEzLjE0Ny0xMi42MjItMzAuNjE4LTE5LjAwOC00Ny45OTItMTkuMDQzem0xLjc2MTIgMjAuMTQzYzEyLjQwNCAwLjA2NTUgMjQuNzgxIDQuNzQyNCAzMy42ODIgMTMuNzU5bDgyLjExNCA4My4zMjVjNy43ODE2IDcuOTUxNCA3LjY1NjIgMjMuMzA3IDMuMzAyMiAyNy43MzhsLTQwLjcyNy0zMi41ODItOC4wMzUzIDQ4LjMyMi0zNC4wMTMtMTcuOTQyLTU0LjU5NiAzNC4zNDMtMTguMDUyLTcyLjUzOC0yOS4yNzkgNTAuNjM0aC00NC42OWMtMTguMjUgMC0yMC40MzUtMjMuMTU0LTMuODUyNS0zOS43MzYgMjguOTY1LTMxLjI2NSA2Mi4xNzktNjMuMDk4IDgwLjI0My04MS41NjQgOS4wNzg1LTkuMjc5MiAyMS40OTktMTMuODI1IDMzLjkwMi0xMy43NTl6bS05OC41MTUgMzI0LjI3YzUuNTQyOCAzLjQ0MyA4OS4zNjQgMjAuNDg5IDEwOS44NSAyMy44ODYgNy4xMDIyIDEuNDk3NyAyLjA4MzYgOC44MTg0LTcuNzA1MSAxMy43NTktMjIuMDc5IDUuODY3MS0xMjkuMTctMzcuNjQ1LTEwMi4xNS0zNy42NDV6bTMyNi4wNCA1OC4zMzljLTE2Ljg2OCAwLjU4MDkxLTMzLjUgOS4xNTkyLTM4LjA4NSAyNS4zMTcgMCAxMC41MyA3Ny40OTEgMTcuNDk2IDc3LjQ5MS0yLjQyMTYtNS41Mjc0LTE1Ljk5NS0yMi41MzgtMjMuNDc2LTM5LjQwNi0yMi44OTV6bS0zNTUuNzYgNDUuNTdjLTI0LjMxNS0wLjIyNTQyLTUyLjc4NSAxNy42MDgtMzEuODExIDM1Ljc3NCAxOC4zNzMgMTUuODg3IDQ2Ljc0OS00LjAyNiA1NS4yNTctMjYuMTk3LTUuMDA2OC02LjY1MjYtMTMuOTMxLTkuNDg4MS0yMy40NDYtOS41NzY0em0zMDcuODcgMS40MzFjLTIzLjY4NCAyMS4yNDUgMi42MzI0IDQyLjc4NSAyNS45NzcgMjkuMDU5IDUuMjAzMi01LjI4MDMtMC4xMTU4OC0yMy43NzktMjUuOTc3LTI5LjA1OXoiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iNTUuMjQyIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"inkscape,inkscape\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.inkscape.Inkscape.desktop\"\nLABEL oc.launch=\"org.inkscape.Inkscape.Inkscape\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"inkscape\"\nLABEL oc.displayname=\"inkscape\"\nLABEL oc.path=\"/usr/bin/inkscape\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/svg+xml;image/svg+xml-compressed;application/vnd.corel-draw;application/pdf;application/postscript;image/x-eps;application/illustrator;image/cgm;image/x-wmf;application/x-xccx;application/x-xcgm;application/x-xcdt;application/x-xsk1;application/x-xcmx;image/x-xcdr;application/visio;application/x-visio;application/vnd.visio;application/visio.drawing;application/vsd;application/x-vsd;image/x-vsd;\"\nLABEL oc.fileextensions=\"ai;cdr\"\nLABEL oc.legacyfileextensions=\"ai;cdr\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"inkscape\"\nENV APPBIN \"/usr/bin/inkscape\"\nENV APP \"/usr/bin/inkscape\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/inkscape/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/inkscape/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/inkscape/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/inkscape/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.20.04:$TAG\nUSER root\nRUN add-apt-repository ppa:mozillateam/ppa\nCOPY etc/apt/preferences.d/mozilla-firefox /etc/apt/preferences.d/mozilla-firefox\nRUN apt-get update && apt-get install --no-install-recommends --yes firefox && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes sudo && apt-get clean\nRUN apt-get update && apt-get install --no-install-recommends --yes build-essential python3.9 python3-pip python-is-python3 curl libcurl4-openssl-dev libssl-dev firefox wget && apt-get clean\nRUN pip3 install torch\nRUN pip3 install jupyterlab\nRUN pip install jupyterlab-nvdashboard\nRUN # jupyter labextension install jupyterlab-nvdashboard\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"jupyter.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCA0NCA1MSIgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpmaWdtYT0iaHR0cDovL3d3dy5maWdtYS5jb20vZmlnbWEvbnMiPgo8dGl0bGU+R3JvdXAuc3ZnPC90aXRsZT4KPGRlc2M+Q3JlYXRlZCB1c2luZyBGaWdtYSAwLjkwPC9kZXNjPgo8ZyBpZD0iQ2FudmFzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY0MCAtMjQ1MykiIGZpZ21hOnR5cGU9ImNhbnZhcyI+CjxnIGlkPSJHcm91cCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9Ikdyb3VwIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0iR3JvdXAiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGg5IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQwLjU0IDI0NzQuMzYpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTAgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGgxX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDUuNjggMjQ3NC4zNykiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxMSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDJfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY1My4zOSAyNDc0LjI2KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDEyIGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoM19maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjYwLjQzIDI0NzQuMzkpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTMgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg0X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NjcuNTUgMjQ3Mi41NCkiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDVfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3Mi40NyAyNDc0LjI5KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE1IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoNl9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjc5Ljk4IDI0NzQuMjQpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNiBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDdfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3My40OCAyNDUzLjY5KSIgZmlsbD0iIzc2NzY3NyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE3IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoOF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQzLjIxIDI0ODQuMjcpIiBmaWxsPSIjRjM3NzI2IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTggZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg5X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjEgMjQ1Ny44OCkiIGZpbGw9IiNGMzc3MjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxOSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDEwX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjggMjQ5Ni4wOSkiIGZpbGw9IiM5RTlFOUUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgyMCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDExX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDEuODcgMjQ1OC40MykiIGZpbGw9IiM2MTYyNjIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxkZWZzPgo8cGF0aCBpZD0icGF0aDBfZmlsbCIgZD0iTSAxLjc0NDk4IDUuNDc1MzNDIDEuNzQ0OTggNy4wMzMzNSAxLjYyMDM0IDcuNTQwODIgMS4yOTk4MyA3LjkxNDc0QyAwLjk0MzExOSA4LjIzNTk1IDAuNDgwMDI0IDguNDEzNTggMCA4LjQxMzMxTCAwLjEyNDY0MiA5LjMwMzZDIDAuODY4ODQgOS4zMTM2NiAxLjU5MDk1IDkuMDUwNzggMi4xNTQ1MiA4LjU2NDY2QyAyLjQ1Nzc1IDguMTk0ODcgMi42ODM0IDcuNzY3ODEgMi44MTggNy4zMDg5M0MgMi45NTI2MSA2Ljg1MDA1IDIuOTkzNDEgNi4zNjg3NiAyLjkzNzk4IDUuODkzNzdMIDIuOTM3OTggMEwgMS43NDQ5OCAwTCAxLjc0NDk4IDUuNDM5NzJMIDEuNzQ0OTggNS40NzUzM1oiLz4KPHBhdGggaWQ9InBhdGgxX2ZpbGwiIGQ9Ik0gNS41MDIwNCA0Ljc2MzA5QyA1LjUwMjA0IDUuNDMwODEgNS41MDIwNCA2LjAyNzMxIDUuNTU1NDUgNi41NDM2OEwgNC40OTYgNi41NDM2OEwgNC40MjQ3OCA1LjQ4NDIzQyA0LjIwMzE4IDUuODU5MDkgMy44ODYyNyA2LjE2ODU4IDMuNTA2MjggNi4zODEyNUMgMy4xMjYyOCA2LjU5MzkyIDIuNjk2NzUgNi43MDIxOSAyLjI2MTM1IDYuNjk1MDNDIDEuMjI4NjEgNi42OTUwMyAwIDYuMTM0MTUgMCAzLjg0NjA4TCAwIDAuMDQ0NTE0OUwgMS4xOTMgMC4wNDQ1MTQ5TCAxLjE5MyAzLjYwNTdDIDEuMTkzIDQuODQzMjIgMS41NzU4MyA1LjY3MTE5IDIuNjUzMDkgNS42NzExOUMgMi44NzQ3MiA1LjY3MzU4IDMuMDk0NTkgNS42MzE2OCAzLjI5OTgyIDUuNTQ3OTZDIDMuNTA1MDUgNS40NjQyNCAzLjY5MTQ5IDUuMzQwMzkgMy44NDgyMiA1LjE4MzY2QyA0LjAwNDk0IDUuMDI2OTQgNC4xMjg4IDQuODQwNDkgNC4yMTI1MiA0LjYzNTI3QyA0LjI5NjIzIDQuNDMwMDQgNC4zMzgxMyA0LjIxMDE2IDQuMzM1NzUgMy45ODg1M0wgNC4zMzU3NSAwTCA1LjUyODc0IDBMIDUuNTI4NzQgNC43Mjc0OEwgNS41MDIwNCA0Ljc2MzA5WiIvPgo8cGF0aCBpZD0icGF0aDJfZmlsbCIgZD0iTSAwLjA1MzQxNzggMi4yNzI2NEMgMC4wNTM0MTc4IDEuNDQ0NjYgMC4wNTM0MTc4IDAuNzY4MDM2IDAgMC4xNTM3MzFMIDEuMDY4MzYgMC4xNTM3MzFMIDEuMTIxNzcgMS4yNjY2QyAxLjM1OTggMC44NjQ1MzUgMS43MDI0NyAwLjUzNDU5NCAyLjExMzI1IDAuMzExOTU0QyAyLjUyNDA0IDAuMDg5MzE0NSAyLjk4NzU0IC0wLjAxNzY3ODYgMy40NTQzNSAwLjAwMjM4MDk1QyA1LjAzOTA4IDAuMDAyMzgwOTUgNi4yMzIwOCAxLjMyODkyIDYuMjMyMDggMy4zMDUzOEMgNi4yMzIwOCA1LjYzNzk2IDQuNzk4NyA2Ljc5NTM1IDMuMjQ5NTggNi43OTUzNUMgMi44NTMwOSA2LjgxMzA0IDIuNDU4NzQgNi43MjgxIDIuMTA0NjkgNi41NDg3NEMgMS43NTA2NCA2LjM2OTM3IDEuNDQ4ODggNi4xMDE2NiAxLjIyODYxIDUuNzcxNTFMIDEuMjI4NjEgNS43NzE1MUwgMS4yMjg2MSA5LjMzMjY5TCAwLjA1MzQxNzggOS4zMzI2OUwgMC4wNTM0MTc4IDIuMjk5MzVMIDAuMDUzNDE3OCAyLjI3MjY0Wk0gMS4yMjg2MSA0LjAwODcyQyAxLjIzMTg0IDQuMTcwMjYgMS4yNDk3MiA0LjMzMTE3IDEuMjgyMDMgNC40ODk0OEMgMS4zODMwNCA0Ljg4NDc5IDEuNjEyOTkgNS4yMzUxMyAxLjkzNTQ4IDUuNDg1MDZDIDIuMjU3OTggNS43MzUgMi42NTQ2MSA1Ljg3MDI2IDMuMDYyNjIgNS44Njk0NEMgNC4zMTc5NCA1Ljg2OTQ0IDUuMDU2ODkgNC44NDU2IDUuMDU2ODkgMy4zNTg4QyA1LjA1Njg5IDIuMDU4OTcgNC4zNjI0NiAwLjk0NjA5NiAzLjEwNzE0IDAuOTQ2MDk2QyAyLjYxMDM2IDAuOTg2Nzc3IDIuMTQ1NDggMS4yMDcyNiAxLjc5OTY1IDEuNTY2MkMgMS40NTM4MiAxLjkyNTE0IDEuMjUwNzkgMi4zOTc5IDEuMjI4NjEgMi44OTU4NUwgMS4yMjg2MSA0LjAwODcyWiIvPgo8cGF0aCBpZD0icGF0aDNfZmlsbCIgZD0iTSAxLjMxNzY0IDAuMDE3ODA1OUwgMi43NTEwMiAzLjg1NDk5QyAyLjkwMjM3IDQuMjgyMzMgMy4wNjI2MiA0Ljc5ODcgMy4xNjk0NiA1LjE4MTUzQyAzLjI5NDEgNC43ODk4IDMuNDI3NjQgNC4yOTEyMyAzLjU4NzkgMy44MjgyOEwgNC44ODc3MyAwLjAxNzgwNTlMIDYuMTQzMDUgMC4wMTc4MDU5TCA0LjM2MjQ2IDQuNjQ3MzVDIDMuNDcyMTYgNi44NzMwOSAyLjkyOTA4IDguMDIxNTggMi4xMSA4LjcxNjAxQyAxLjY5NzQ1IDkuMDkyODMgMS4xOTQ0OCA5LjM1NjU4IDAuNjQ5OTE3IDkuNDgxNjZMIDAuMzU2MTE5IDguNDg0NTNDIDAuNzM2ODg2IDguMzU5NDIgMS4wOTAzOCA4LjE2MzA0IDEuMzk3NzcgNy45MDU4NEMgMS44MzIxIDcuNTUxODggMi4xNzY3OCA3LjEwMDQ0IDIuNDAzOCA2LjU4ODJDIDIuNDUyMzkgNi40OTk0OSAyLjQ4NTUxIDYuNDAzMTQgMi41MDE3MyA2LjMwMzNDIDIuNDkxNjEgNi4xOTU4NiAyLjQ2NDU3IDYuMDkwNyAyLjQyMTYxIDUuOTkxN0wgMCAwTCAxLjI5OTgzIDBMIDEuMzE3NjQgMC4wMTc4MDU5WiIvPgo8cGF0aCBpZD0icGF0aDRfZmlsbCIgZD0iTSAyLjE5MDEzIDBMIDIuMTkwMTMgMS44Njk2MkwgMy44OTk1IDEuODY5NjJMIDMuODk5NSAyLjc1OTkyTCAyLjE5MDEzIDIuNzU5OTJMIDIuMTkwMTMgNi4yNjc2OUMgMi4xOTAxMyA3LjA2ODk2IDIuNDIxNjEgNy41MzE5MSAzLjA4MDQzIDcuNTMxOTFDIDMuMzE0NDIgNy41MzU3NCAzLjU0Nzg5IDcuNTA4OCAzLjc3NDg2IDcuNDUxNzlMIDMuODI4MjggOC4zNDIwOEMgMy40ODc5NCA4LjQ1OTk5IDMuMTI4ODEgOC41MTQzMSAyLjc2ODgyIDguNTAyMzRDIDIuNTMwNDIgOC41MTcyNiAyLjI5MTYxIDguNDgwNDMgMi4wNjg3OCA4LjM5NDM3QyAxLjg0NTk1IDguMzA4MzEgMS42NDQzOCA4LjE3NTA2IDEuNDc3ODkgOC4wMDM3N0MgMS4xMTUyNSA3LjUxODczIDAuOTQ5ODI2IDYuOTE0MzEgMS4wMTQ5NCA2LjMxMjIxTCAxLjAxNDk0IDIuNzUxMDJMIDAgMi43NTEwMkwgMCAxLjg2MDcyTCAxLjAzMjc0IDEuODYwNzJMIDEuMDMyNzQgMC4yNzU5OTJMIDIuMTkwMTMgMFoiLz4KPHBhdGggaWQ9InBhdGg1X2ZpbGwiIGQ9Ik0gMS4xNzcxNiAzLjU3ODk5QyAxLjE1MyAzLjg4MDkzIDEuMTk0NjggNC4xODQ1MSAxLjI5OTMzIDQuNDY4NzZDIDEuNDAzOTggNC43NTMwMSAxLjU2OTEgNS4wMTExNCAxLjc4MzI5IDUuMjI1MzJDIDEuOTk3NDcgNS40Mzk1MSAyLjI1NTYgNS42MDQ2MyAyLjUzOTg1IDUuNzA5MjhDIDIuODI0MSA1LjgxMzkzIDMuMTI3NjggNS44NTU2MSAzLjQyOTYyIDUuODMxNDVDIDQuMDQwMzMgNS44NDUxMSA0LjY0NzA2IDUuNzI5ODMgNS4yMTAyMSA1LjQ5MzEzTCA1LjQxNDk4IDYuMzgzNDNDIDQuNzIzOTMgNi42NjgwOSAzLjk4MDg1IDYuODA0NTggMy4yMzM3NSA2Ljc4NDA2QyAyLjc5ODIxIDYuODEzODggMi4zNjEzOCA2Ljc0OTE0IDEuOTUzMjIgNi41OTQyN0MgMS41NDUwNSA2LjQzOTQxIDEuMTc1MjIgNi4xOTgwOSAwLjg2OTA3MSA1Ljg4Njg4QyAwLjU2MjkyOCA1LjU3NTY2IDAuMzI3NzIzIDUuMjAxOSAwLjE3OTU5MSA0Ljc5MTI1QyAwLjAzMTQ1ODQgNC4zODA1OSAtMC4wMjYwOTYyIDMuOTQyNzYgMC4wMTA4NzQ4IDMuNTA3NzdDIDAuMDEwODc0OCAxLjU0OTEyIDEuMTc3MTYgMCAzLjA4MjQgMEMgNS4yMTkxMSAwIDUuNzUzMjkgMS44Njk2MiA1Ljc1MzI5IDMuMDYyNjJDIDUuNzY0NzEgMy4yNDY0NCA1Ljc2NDcxIDMuNDMwNzkgNS43NTMyOSAzLjYxNDYxTCAxLjE1MDQ2IDMuNjE0NjFMIDEuMTc3MTYgMy41Nzg5OVpNIDQuNjY3MTMgMi42ODg3QyA0LjcwMTQ5IDIuNDUwNjcgNC42ODQ0MyAyLjIwODA1IDQuNjE3MDkgMS45NzcxOEMgNC41NDk3NiAxLjc0NjMxIDQuNDMzNzIgMS41MzI1NSA0LjI3NjggMS4zNTAzMUMgNC4xMTk4NyAxLjE2ODA4IDMuOTI1NzEgMS4wMjE2IDMuNzA3MzkgMC45MjA3NDRDIDMuNDg5MDcgMC44MTk4OSAzLjI1MTY2IDAuNzY3MDA2IDMuMDExMTggMC43NjU2NTZDIDIuNTIyMDEgMC44MDEwNjQgMi4wNjM3MSAxLjAxNzg4IDEuNzI2MDkgMS4zNzM2MkMgMS4zODg0NyAxLjcyOTM1IDEuMTk1ODggMi4xOTgzNSAxLjE4NjA3IDIuNjg4N0wgNC42NjcxMyAyLjY4ODdaIi8+CjxwYXRoIGlkPSJwYXRoNl9maWxsIiBkPSJNIDAuMDUzNDE3OCAyLjE5MjI4QyAwLjA1MzQxNzggMS40MjY2MyAwLjA1MzQxNzggMC43Njc4MDYgMCAwLjE2MjQwNEwgMS4wNjgzNiAwLjE2MjQwNEwgMS4wNjgzNiAxLjQzNTUzTCAxLjEyMTc3IDEuNDM1NTNDIDEuMjMzOTEgMS4wNDI1OSAxLjQ2NTYgMC42OTQzMTQgMS43ODQ2OCAwLjQzOTA0OUMgMi4xMDM3NiAwLjE4Mzc4MyAyLjQ5NDQgMC4wMzQxOTYgMi45MDIzNyAwLjAxMTA1MzhDIDMuMDE0NjYgLTAuMDAzNjg0NTkgMy4xMjgzOSAtMC4wMDM2ODQ1OSAzLjI0MDY4IDAuMDExMDUzOEwgMy4yNDA2OCAxLjEyMzkzQyAzLjEwNDYyIDEuMTA4MTcgMi45NjcyIDEuMTA4MTcgMi44MzExNCAxLjEyMzkzQyAyLjQyNyAxLjEzOTU4IDIuMDQyMzcgMS4zMDE4MiAxLjc0OTEgMS41ODAzNUMgMS40NTU4MyAxLjg1ODg3IDEuMjczOTggMi4yMzQ2MiAxLjIzNzUxIDIuNjM3NDNDIDEuMjA0MjIgMi44MTk2IDEuMTg2MzUgMy4wMDQyNSAxLjE4NDEgMy4xODk0MUwgMS4xODQxIDYuNjUyNjdMIDAuMDA4OTAyOTcgNi42NTI2N0wgMC4wMDg5MDI5NyAyLjIwMTE4TCAwLjA1MzQxNzggMi4xOTIyOFoiLz4KPHBhdGggaWQ9InBhdGg3X2ZpbGwiIGQ9Ik0gNi4wMzA1OSAyLjgzNTY1QyA2LjA2NzE1IDMuNDMzNzYgNS45MjQ4NSA0LjAyOTIxIDUuNjIxOCA0LjU0NjE1QyA1LjMxODc1IDUuMDYzMSA0Ljg2ODY5IDUuNDc4MTMgNC4zMjg5MyA1LjczODM5QyAzLjc4OTE3IDUuOTk4NjQgMy4xODQxNiA2LjA5MjMzIDIuNTkwOTcgNi4wMDc1M0MgMS45OTc3OCA1LjkyMjcyIDEuNDQzMjYgNS42NjMyNiAwLjk5ODA0OCA1LjI2MjE5QyAwLjU1MjgzNyA0Ljg2MTEzIDAuMjM3MDkgNC4zMzY2MSAwLjA5MTAzMDcgMy43NTU0NkMgLTAuMDU1MDI4NyAzLjE3NDMxIC0wLjAyNDc4OTEgMi41NjI4MyAwLjE3Nzg5NyAxLjk5ODkzQyAwLjM4MDU4MyAxLjQzNTAzIDAuNzQ2NTQxIDAuOTQ0MjIxIDEuMjI5MTUgMC41ODkwMzdDIDEuNzExNzYgMC4yMzM4NTMgMi4yODkxOCAwLjAzMDM2ODYgMi44ODc4NCAwLjAwNDUwNTQzQyAzLjI4MDM1IC0wLjAxNzA5MzIgMy42NzMyNiAwLjAzOTExNDQgNC4wNDM5NiAwLjE2OTg5NkMgNC40MTQ2NyAwLjMwMDY3NyA0Ljc1NTg3IDAuNTAzNDUzIDUuMDQ3OTQgMC43NjY1NjFDIDUuMzQgMS4wMjk2NyA1LjU3NzE4IDEuMzQ3OTIgNS43NDU4MiAxLjcwMzAxQyA1LjkxNDQ2IDIuMDU4MSA2LjAxMTI0IDIuNDQzMDMgNi4wMzA1OSAyLjgzNTY1TCA2LjAzMDU5IDIuODM1NjVaIi8+CjxwYXRoIGlkPSJwYXRoOF9maWxsIiBkPSJNIDE4LjY5NjIgNy4xMjIzOEMgMTAuNjgzNiA3LjEyMjM4IDMuNjQxMzEgNC4yNDY3MiAwIDBDIDEuNDEyODQgMy44MjA0MSAzLjk2MjE1IDcuMTE2MyA3LjMwNDc5IDkuNDQ0MDRDIDEwLjY0NzQgMTEuNzcxOCAxNC42MjMgMTMuMDE5NiAxOC42OTYyIDEzLjAxOTZDIDIyLjc2OTUgMTMuMDE5NiAyNi43NDUgMTEuNzcxOCAzMC4wODc3IDkuNDQ0MDRDIDMzLjQzMDMgNy4xMTYzIDM1Ljk3OTYgMy44MjA0MSAzNy4zOTI1IDQuMDQ4NmUtMTNDIDMzLjc2MDEgNC4yNDY3MiAyNi43NDQ1IDcuMTIyMzggMTguNjk2MiA3LjEyMjM4WiIvPgo8cGF0aCBpZD0icGF0aDlfZmlsbCIgZD0iTSAxOC42OTYyIDUuODk3MjVDIDI2LjcwODkgNS44OTcyNSAzMy43NTEyIDguNzcyOTEgMzcuMzkyNSAxMy4wMTk2QyAzNS45Nzk2IDkuMTk5MjIgMzMuNDMwMyA1LjkwMzMzIDMwLjA4NzcgMy41NzU1OUMgMjYuNzQ1IDEuMjQ3ODUgMjIuNzY5NSA0LjA0ODZlLTEzIDE4LjY5NjIgMEMgMTQuNjIzIDQuMDQ4NmUtMTMgMTAuNjQ3NCAxLjI0Nzg1IDcuMzA0NzkgMy41NzU1OUMgMy45NjIxNSA1LjkwMzMzIDEuNDEyODQgOS4xOTkyMiAwIDEzLjAxOTZDIDMuNjQxMzEgOC43NjQwMSAxMC42NDggNS44OTcyNSAxOC42OTYyIDUuODk3MjVaIi8+CjxwYXRoIGlkPSJwYXRoMTBfZmlsbCIgZD0iTSA3LjU5NTc2IDMuNTY2NTZDIDcuNjQyNzYgNC4zMTk5MiA3LjQ2NDQyIDUuMDcwMjIgNy4wODM0NyA1LjcyMTg2QyA2LjcwMjUxIDYuMzczNSA2LjEzNjE5IDYuODk2OTggNS40NTY2NiA3LjIyNTYxQyA0Ljc3NzEzIDcuNTU0MjQgNC4wMTUxNSA3LjY3MzE0IDMuMjY3ODEgNy41NjcxNkMgMi41MjA0NiA3LjQ2MTE3IDEuODIxNTggNy4xMzUxMSAxLjI2MDIxIDYuNjMwNTFDIDAuNjk4ODM5IDYuMTI1OTEgMC4zMDAzOTQgNS40NjU2MSAwLjExNTYzNyA0LjczMzc1QyAtMC4wNjkxMTkxIDQuMDAxODggLTAuMDMxODIxOSAzLjIzMTU5IDAuMjIyNzc3IDIuNTIwOTlDIDAuNDc3Mzc2IDEuODEwNCAwLjkzNzc1IDEuMTkxNjkgMS41NDUyNCAwLjc0MzY4NUMgMi4xNTI3NCAwLjI5NTY3OCAyLjg3OTg1IDAuMDM4NjU5NSAzLjYzMzk0IDAuMDA1Mzc1ODlDIDQuMTI3OTMgLTAuMDIxMDQ3MSA0LjYyMjI5IDAuMDUwMTE3MyA1LjA4ODc4IDAuMjE0ODAzQyA1LjU1NTI2IDAuMzc5NDkgNS45ODQ3MyAwLjYzNDQ3IDYuMzUyNjQgMC45NjUxNzlDIDYuNzIwNTUgMS4yOTU4OSA3LjAxOTcxIDEuNjk1ODQgNy4yMzMgMi4xNDIyQyA3LjQ0NjMgMi41ODg1NSA3LjU2OTU3IDMuMDcyNTYgNy41OTU3NiAzLjU2NjU2TCA3LjU5NTc2IDMuNTY2NTZaIi8+CjxwYXRoIGlkPSJwYXRoMTFfZmlsbCIgZD0iTSAyLjI1MDYxIDQuMzc5NDNDIDEuODE4ODYgNC4zOTEzNSAxLjM5MzIyIDQuMjc1MzUgMS4wMjcyMiA0LjA0NjAyQyAwLjY2MTIyNCAzLjgxNjY4IDAuMzcxMjA2IDMuNDg0MjQgMC4xOTM2NDEgMy4wOTA1MkMgMC4wMTYwNzYyIDIuNjk2NzkgLTAuMDQxMTA3OCAyLjI1OTM1IDAuMDI5MjgwNCAxLjgzMzIxQyAwLjA5OTY2ODYgMS40MDcwNyAwLjI5NDQ4NiAxLjAxMTI1IDAuNTg5MjMzIDAuNjk1NTQyQyAwLjg4Mzk4MSAwLjM3OTgzIDEuMjY1NSAwLjE1ODMxNiAxLjY4NTgxIDAuMDU4ODU3N0MgMi4xMDYxMSAtMC4wNDA2MDA1IDIuNTQ2NDQgLTAuMDEzNTYyMiAyLjk1MTQzIDAuMTM2NTcyQyAzLjM1NjQxIDAuMjg2NzA3IDMuNzA3OTYgMC41NTMyMzQgMy45NjE4NiAwLjkwMjYzNkMgNC4yMTU3NyAxLjI1MjA0IDQuMzYwNyAxLjY2ODcyIDQuMzc4NDIgMi4xMDAyN0MgNC4zOTUyOSAyLjY4MzggNC4xODEzMSAzLjI1MDQ0IDMuNzgyOTMgMy42NzcxNUMgMy4zODQ1NSA0LjEwMzg3IDIuODMzOTIgNC4zNTYyMyAyLjI1MDYxIDQuMzc5NDNaIi8+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"jupyter,jupyter\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.jupyter\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.20.04\"\nENV ARGS=\"--disable-factory --class=jupyter -- /usr/local/bin/startjupyter.sh\"\nLABEL oc.name=\"jupyter\"\nLABEL oc.displayname=\"jupyter\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"jupyter\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=jupyter -- /usr/local/bin/startjupyter.sh\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nCOPY startjupyter.sh /usr/local/bin/startjupyter.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/jupyter/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/jupyter/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/jupyter/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/jupyter/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.nvidia.22.04:$TAG\nUSER root\nRUN add-apt-repository ppa:mozillateam/ppa\nCOPY etc/apt/preferences.d/mozilla-firefox /etc/apt/preferences.d/mozilla-firefox\nRUN apt-get update && apt-get install --no-install-recommends --yes firefox wget sudo && apt-get clean\nCOPY cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb /tmp\nRUN apt-get update && apt-get install --no-install-recommends --yes -f /tmp/cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb && apt-get clean\nRUN cp /var/cudnn-local-repo-ubuntu2204-8.7.0.84/cudnn-local-BF23AD8A-keyring.gpg /usr/share/keyrings/\nENV PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nENV LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64\nRUN apt-get update && apt-get install --no-install-recommends --yes build-essential python3.9 python3-pip python-is-python3 libcurl4-openssl-dev libssl-dev wget && apt-get clean\nRUN # wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh -O /tmp/anaconda3.sh && bash /tmp/anaconda3.sh -b -p /usr/local/anaconda\nRUN pip3 install torch\nRUN pip3 install tensorflow-gpu\nRUN pip3 install jupyter notebook\nRUN pip3 install jupyterlab\nRUN pip3 install jupyterlab-nvdashboard\nRUN # jupyter labextension install jupyterlab-nvdashboard\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"jupyter.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCA0NCA1MSIgdmVyc2lvbj0iMi4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpmaWdtYT0iaHR0cDovL3d3dy5maWdtYS5jb20vZmlnbWEvbnMiPgo8dGl0bGU+R3JvdXAuc3ZnPC90aXRsZT4KPGRlc2M+Q3JlYXRlZCB1c2luZyBGaWdtYSAwLjkwPC9kZXNjPgo8ZyBpZD0iQ2FudmFzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY0MCAtMjQ1MykiIGZpZ21hOnR5cGU9ImNhbnZhcyI+CjxnIGlkPSJHcm91cCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9Ikdyb3VwIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0iR3JvdXAiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGg5IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoMF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQwLjU0IDI0NzQuMzYpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTAgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGgxX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDUuNjggMjQ3NC4zNykiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxMSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDJfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY1My4zOSAyNDc0LjI2KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDEyIGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoM19maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjYwLjQzIDI0NzQuMzkpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTMgZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg0X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NjcuNTUgMjQ3Mi41NCkiIGZpbGw9IiM0RTRFNEUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDVfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3Mi40NyAyNDc0LjI5KSIgZmlsbD0iIzRFNEU0RSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE1IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoNl9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjc5Ljk4IDI0NzQuMjQpIiBmaWxsPSIjNEU0RTRFIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxnIGlkPSJnIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxNiBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDdfZmlsbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY3My40OCAyNDUzLjY5KSIgZmlsbD0iIzc2NzY3NyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiLz4KPC9nPgo8L2c+CjxnIGlkPSJwYXRoIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0iZ3JvdXAiPgo8ZyBpZD0icGF0aDE3IGZpbGwiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJ2ZWN0b3IiPgo8dXNlIHhsaW5rOmhyZWY9IiNwYXRoOF9maWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjQzLjIxIDI0ODQuMjcpIiBmaWxsPSIjRjM3NzI2IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIvPgo8L2c+CjwvZz4KPGcgaWQ9InBhdGgiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7IiBmaWdtYTp0eXBlPSJncm91cCI+CjxnIGlkPSJwYXRoMTggZmlsbCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9InZlY3RvciI+Cjx1c2UgeGxpbms6aHJlZj0iI3BhdGg5X2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjEgMjQ1Ny44OCkiIGZpbGw9IiNGMzc3MjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgxOSBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDEwX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDMuMjggMjQ5Ni4wOSkiIGZpbGw9IiM5RTlFOUUiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8ZyBpZD0icGF0aCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbDsiIGZpZ21hOnR5cGU9Imdyb3VwIj4KPGcgaWQ9InBhdGgyMCBmaWxsIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bm9ybWFsOyIgZmlnbWE6dHlwZT0idmVjdG9yIj4KPHVzZSB4bGluazpocmVmPSIjcGF0aDExX2ZpbGwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2NDEuODcgMjQ1OC40MykiIGZpbGw9IiM2MTYyNjIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpub3JtYWw7Ii8+CjwvZz4KPC9nPgo8L2c+CjwvZz4KPC9nPgo8L2c+CjxkZWZzPgo8cGF0aCBpZD0icGF0aDBfZmlsbCIgZD0iTSAxLjc0NDk4IDUuNDc1MzNDIDEuNzQ0OTggNy4wMzMzNSAxLjYyMDM0IDcuNTQwODIgMS4yOTk4MyA3LjkxNDc0QyAwLjk0MzExOSA4LjIzNTk1IDAuNDgwMDI0IDguNDEzNTggMCA4LjQxMzMxTCAwLjEyNDY0MiA5LjMwMzZDIDAuODY4ODQgOS4zMTM2NiAxLjU5MDk1IDkuMDUwNzggMi4xNTQ1MiA4LjU2NDY2QyAyLjQ1Nzc1IDguMTk0ODcgMi42ODM0IDcuNzY3ODEgMi44MTggNy4zMDg5M0MgMi45NTI2MSA2Ljg1MDA1IDIuOTkzNDEgNi4zNjg3NiAyLjkzNzk4IDUuODkzNzdMIDIuOTM3OTggMEwgMS43NDQ5OCAwTCAxLjc0NDk4IDUuNDM5NzJMIDEuNzQ0OTggNS40NzUzM1oiLz4KPHBhdGggaWQ9InBhdGgxX2ZpbGwiIGQ9Ik0gNS41MDIwNCA0Ljc2MzA5QyA1LjUwMjA0IDUuNDMwODEgNS41MDIwNCA2LjAyNzMxIDUuNTU1NDUgNi41NDM2OEwgNC40OTYgNi41NDM2OEwgNC40MjQ3OCA1LjQ4NDIzQyA0LjIwMzE4IDUuODU5MDkgMy44ODYyNyA2LjE2ODU4IDMuNTA2MjggNi4zODEyNUMgMy4xMjYyOCA2LjU5MzkyIDIuNjk2NzUgNi43MDIxOSAyLjI2MTM1IDYuNjk1MDNDIDEuMjI4NjEgNi42OTUwMyAwIDYuMTM0MTUgMCAzLjg0NjA4TCAwIDAuMDQ0NTE0OUwgMS4xOTMgMC4wNDQ1MTQ5TCAxLjE5MyAzLjYwNTdDIDEuMTkzIDQuODQzMjIgMS41NzU4MyA1LjY3MTE5IDIuNjUzMDkgNS42NzExOUMgMi44NzQ3MiA1LjY3MzU4IDMuMDk0NTkgNS42MzE2OCAzLjI5OTgyIDUuNTQ3OTZDIDMuNTA1MDUgNS40NjQyNCAzLjY5MTQ5IDUuMzQwMzkgMy44NDgyMiA1LjE4MzY2QyA0LjAwNDk0IDUuMDI2OTQgNC4xMjg4IDQuODQwNDkgNC4yMTI1MiA0LjYzNTI3QyA0LjI5NjIzIDQuNDMwMDQgNC4zMzgxMyA0LjIxMDE2IDQuMzM1NzUgMy45ODg1M0wgNC4zMzU3NSAwTCA1LjUyODc0IDBMIDUuNTI4NzQgNC43Mjc0OEwgNS41MDIwNCA0Ljc2MzA5WiIvPgo8cGF0aCBpZD0icGF0aDJfZmlsbCIgZD0iTSAwLjA1MzQxNzggMi4yNzI2NEMgMC4wNTM0MTc4IDEuNDQ0NjYgMC4wNTM0MTc4IDAuNzY4MDM2IDAgMC4xNTM3MzFMIDEuMDY4MzYgMC4xNTM3MzFMIDEuMTIxNzcgMS4yNjY2QyAxLjM1OTggMC44NjQ1MzUgMS43MDI0NyAwLjUzNDU5NCAyLjExMzI1IDAuMzExOTU0QyAyLjUyNDA0IDAuMDg5MzE0NSAyLjk4NzU0IC0wLjAxNzY3ODYgMy40NTQzNSAwLjAwMjM4MDk1QyA1LjAzOTA4IDAuMDAyMzgwOTUgNi4yMzIwOCAxLjMyODkyIDYuMjMyMDggMy4zMDUzOEMgNi4yMzIwOCA1LjYzNzk2IDQuNzk4NyA2Ljc5NTM1IDMuMjQ5NTggNi43OTUzNUMgMi44NTMwOSA2LjgxMzA0IDIuNDU4NzQgNi43MjgxIDIuMTA0NjkgNi41NDg3NEMgMS43NTA2NCA2LjM2OTM3IDEuNDQ4ODggNi4xMDE2NiAxLjIyODYxIDUuNzcxNTFMIDEuMjI4NjEgNS43NzE1MUwgMS4yMjg2MSA5LjMzMjY5TCAwLjA1MzQxNzggOS4zMzI2OUwgMC4wNTM0MTc4IDIuMjk5MzVMIDAuMDUzNDE3OCAyLjI3MjY0Wk0gMS4yMjg2MSA0LjAwODcyQyAxLjIzMTg0IDQuMTcwMjYgMS4yNDk3MiA0LjMzMTE3IDEuMjgyMDMgNC40ODk0OEMgMS4zODMwNCA0Ljg4NDc5IDEuNjEyOTkgNS4yMzUxMyAxLjkzNTQ4IDUuNDg1MDZDIDIuMjU3OTggNS43MzUgMi42NTQ2MSA1Ljg3MDI2IDMuMDYyNjIgNS44Njk0NEMgNC4zMTc5NCA1Ljg2OTQ0IDUuMDU2ODkgNC44NDU2IDUuMDU2ODkgMy4zNTg4QyA1LjA1Njg5IDIuMDU4OTcgNC4zNjI0NiAwLjk0NjA5NiAzLjEwNzE0IDAuOTQ2MDk2QyAyLjYxMDM2IDAuOTg2Nzc3IDIuMTQ1NDggMS4yMDcyNiAxLjc5OTY1IDEuNTY2MkMgMS40NTM4MiAxLjkyNTE0IDEuMjUwNzkgMi4zOTc5IDEuMjI4NjEgMi44OTU4NUwgMS4yMjg2MSA0LjAwODcyWiIvPgo8cGF0aCBpZD0icGF0aDNfZmlsbCIgZD0iTSAxLjMxNzY0IDAuMDE3ODA1OUwgMi43NTEwMiAzLjg1NDk5QyAyLjkwMjM3IDQuMjgyMzMgMy4wNjI2MiA0Ljc5ODcgMy4xNjk0NiA1LjE4MTUzQyAzLjI5NDEgNC43ODk4IDMuNDI3NjQgNC4yOTEyMyAzLjU4NzkgMy44MjgyOEwgNC44ODc3MyAwLjAxNzgwNTlMIDYuMTQzMDUgMC4wMTc4MDU5TCA0LjM2MjQ2IDQuNjQ3MzVDIDMuNDcyMTYgNi44NzMwOSAyLjkyOTA4IDguMDIxNTggMi4xMSA4LjcxNjAxQyAxLjY5NzQ1IDkuMDkyODMgMS4xOTQ0OCA5LjM1NjU4IDAuNjQ5OTE3IDkuNDgxNjZMIDAuMzU2MTE5IDguNDg0NTNDIDAuNzM2ODg2IDguMzU5NDIgMS4wOTAzOCA4LjE2MzA0IDEuMzk3NzcgNy45MDU4NEMgMS44MzIxIDcuNTUxODggMi4xNzY3OCA3LjEwMDQ0IDIuNDAzOCA2LjU4ODJDIDIuNDUyMzkgNi40OTk0OSAyLjQ4NTUxIDYuNDAzMTQgMi41MDE3MyA2LjMwMzNDIDIuNDkxNjEgNi4xOTU4NiAyLjQ2NDU3IDYuMDkwNyAyLjQyMTYxIDUuOTkxN0wgMCAwTCAxLjI5OTgzIDBMIDEuMzE3NjQgMC4wMTc4MDU5WiIvPgo8cGF0aCBpZD0icGF0aDRfZmlsbCIgZD0iTSAyLjE5MDEzIDBMIDIuMTkwMTMgMS44Njk2MkwgMy44OTk1IDEuODY5NjJMIDMuODk5NSAyLjc1OTkyTCAyLjE5MDEzIDIuNzU5OTJMIDIuMTkwMTMgNi4yNjc2OUMgMi4xOTAxMyA3LjA2ODk2IDIuNDIxNjEgNy41MzE5MSAzLjA4MDQzIDcuNTMxOTFDIDMuMzE0NDIgNy41MzU3NCAzLjU0Nzg5IDcuNTA4OCAzLjc3NDg2IDcuNDUxNzlMIDMuODI4MjggOC4zNDIwOEMgMy40ODc5NCA4LjQ1OTk5IDMuMTI4ODEgOC41MTQzMSAyLjc2ODgyIDguNTAyMzRDIDIuNTMwNDIgOC41MTcyNiAyLjI5MTYxIDguNDgwNDMgMi4wNjg3OCA4LjM5NDM3QyAxLjg0NTk1IDguMzA4MzEgMS42NDQzOCA4LjE3NTA2IDEuNDc3ODkgOC4wMDM3N0MgMS4xMTUyNSA3LjUxODczIDAuOTQ5ODI2IDYuOTE0MzEgMS4wMTQ5NCA2LjMxMjIxTCAxLjAxNDk0IDIuNzUxMDJMIDAgMi43NTEwMkwgMCAxLjg2MDcyTCAxLjAzMjc0IDEuODYwNzJMIDEuMDMyNzQgMC4yNzU5OTJMIDIuMTkwMTMgMFoiLz4KPHBhdGggaWQ9InBhdGg1X2ZpbGwiIGQ9Ik0gMS4xNzcxNiAzLjU3ODk5QyAxLjE1MyAzLjg4MDkzIDEuMTk0NjggNC4xODQ1MSAxLjI5OTMzIDQuNDY4NzZDIDEuNDAzOTggNC43NTMwMSAxLjU2OTEgNS4wMTExNCAxLjc4MzI5IDUuMjI1MzJDIDEuOTk3NDcgNS40Mzk1MSAyLjI1NTYgNS42MDQ2MyAyLjUzOTg1IDUuNzA5MjhDIDIuODI0MSA1LjgxMzkzIDMuMTI3NjggNS44NTU2MSAzLjQyOTYyIDUuODMxNDVDIDQuMDQwMzMgNS44NDUxMSA0LjY0NzA2IDUuNzI5ODMgNS4yMTAyMSA1LjQ5MzEzTCA1LjQxNDk4IDYuMzgzNDNDIDQuNzIzOTMgNi42NjgwOSAzLjk4MDg1IDYuODA0NTggMy4yMzM3NSA2Ljc4NDA2QyAyLjc5ODIxIDYuODEzODggMi4zNjEzOCA2Ljc0OTE0IDEuOTUzMjIgNi41OTQyN0MgMS41NDUwNSA2LjQzOTQxIDEuMTc1MjIgNi4xOTgwOSAwLjg2OTA3MSA1Ljg4Njg4QyAwLjU2MjkyOCA1LjU3NTY2IDAuMzI3NzIzIDUuMjAxOSAwLjE3OTU5MSA0Ljc5MTI1QyAwLjAzMTQ1ODQgNC4zODA1OSAtMC4wMjYwOTYyIDMuOTQyNzYgMC4wMTA4NzQ4IDMuNTA3NzdDIDAuMDEwODc0OCAxLjU0OTEyIDEuMTc3MTYgMCAzLjA4MjQgMEMgNS4yMTkxMSAwIDUuNzUzMjkgMS44Njk2MiA1Ljc1MzI5IDMuMDYyNjJDIDUuNzY0NzEgMy4yNDY0NCA1Ljc2NDcxIDMuNDMwNzkgNS43NTMyOSAzLjYxNDYxTCAxLjE1MDQ2IDMuNjE0NjFMIDEuMTc3MTYgMy41Nzg5OVpNIDQuNjY3MTMgMi42ODg3QyA0LjcwMTQ5IDIuNDUwNjcgNC42ODQ0MyAyLjIwODA1IDQuNjE3MDkgMS45NzcxOEMgNC41NDk3NiAxLjc0NjMxIDQuNDMzNzIgMS41MzI1NSA0LjI3NjggMS4zNTAzMUMgNC4xMTk4NyAxLjE2ODA4IDMuOTI1NzEgMS4wMjE2IDMuNzA3MzkgMC45MjA3NDRDIDMuNDg5MDcgMC44MTk4OSAzLjI1MTY2IDAuNzY3MDA2IDMuMDExMTggMC43NjU2NTZDIDIuNTIyMDEgMC44MDEwNjQgMi4wNjM3MSAxLjAxNzg4IDEuNzI2MDkgMS4zNzM2MkMgMS4zODg0NyAxLjcyOTM1IDEuMTk1ODggMi4xOTgzNSAxLjE4NjA3IDIuNjg4N0wgNC42NjcxMyAyLjY4ODdaIi8+CjxwYXRoIGlkPSJwYXRoNl9maWxsIiBkPSJNIDAuMDUzNDE3OCAyLjE5MjI4QyAwLjA1MzQxNzggMS40MjY2MyAwLjA1MzQxNzggMC43Njc4MDYgMCAwLjE2MjQwNEwgMS4wNjgzNiAwLjE2MjQwNEwgMS4wNjgzNiAxLjQzNTUzTCAxLjEyMTc3IDEuNDM1NTNDIDEuMjMzOTEgMS4wNDI1OSAxLjQ2NTYgMC42OTQzMTQgMS43ODQ2OCAwLjQzOTA0OUMgMi4xMDM3NiAwLjE4Mzc4MyAyLjQ5NDQgMC4wMzQxOTYgMi45MDIzNyAwLjAxMTA1MzhDIDMuMDE0NjYgLTAuMDAzNjg0NTkgMy4xMjgzOSAtMC4wMDM2ODQ1OSAzLjI0MDY4IDAuMDExMDUzOEwgMy4yNDA2OCAxLjEyMzkzQyAzLjEwNDYyIDEuMTA4MTcgMi45NjcyIDEuMTA4MTcgMi44MzExNCAxLjEyMzkzQyAyLjQyNyAxLjEzOTU4IDIuMDQyMzcgMS4zMDE4MiAxLjc0OTEgMS41ODAzNUMgMS40NTU4MyAxLjg1ODg3IDEuMjczOTggMi4yMzQ2MiAxLjIzNzUxIDIuNjM3NDNDIDEuMjA0MjIgMi44MTk2IDEuMTg2MzUgMy4wMDQyNSAxLjE4NDEgMy4xODk0MUwgMS4xODQxIDYuNjUyNjdMIDAuMDA4OTAyOTcgNi42NTI2N0wgMC4wMDg5MDI5NyAyLjIwMTE4TCAwLjA1MzQxNzggMi4xOTIyOFoiLz4KPHBhdGggaWQ9InBhdGg3X2ZpbGwiIGQ9Ik0gNi4wMzA1OSAyLjgzNTY1QyA2LjA2NzE1IDMuNDMzNzYgNS45MjQ4NSA0LjAyOTIxIDUuNjIxOCA0LjU0NjE1QyA1LjMxODc1IDUuMDYzMSA0Ljg2ODY5IDUuNDc4MTMgNC4zMjg5MyA1LjczODM5QyAzLjc4OTE3IDUuOTk4NjQgMy4xODQxNiA2LjA5MjMzIDIuNTkwOTcgNi4wMDc1M0MgMS45OTc3OCA1LjkyMjcyIDEuNDQzMjYgNS42NjMyNiAwLjk5ODA0OCA1LjI2MjE5QyAwLjU1MjgzNyA0Ljg2MTEzIDAuMjM3MDkgNC4zMzY2MSAwLjA5MTAzMDcgMy43NTU0NkMgLTAuMDU1MDI4NyAzLjE3NDMxIC0wLjAyNDc4OTEgMi41NjI4MyAwLjE3Nzg5NyAxLjk5ODkzQyAwLjM4MDU4MyAxLjQzNTAzIDAuNzQ2NTQxIDAuOTQ0MjIxIDEuMjI5MTUgMC41ODkwMzdDIDEuNzExNzYgMC4yMzM4NTMgMi4yODkxOCAwLjAzMDM2ODYgMi44ODc4NCAwLjAwNDUwNTQzQyAzLjI4MDM1IC0wLjAxNzA5MzIgMy42NzMyNiAwLjAzOTExNDQgNC4wNDM5NiAwLjE2OTg5NkMgNC40MTQ2NyAwLjMwMDY3NyA0Ljc1NTg3IDAuNTAzNDUzIDUuMDQ3OTQgMC43NjY1NjFDIDUuMzQgMS4wMjk2NyA1LjU3NzE4IDEuMzQ3OTIgNS43NDU4MiAxLjcwMzAxQyA1LjkxNDQ2IDIuMDU4MSA2LjAxMTI0IDIuNDQzMDMgNi4wMzA1OSAyLjgzNTY1TCA2LjAzMDU5IDIuODM1NjVaIi8+CjxwYXRoIGlkPSJwYXRoOF9maWxsIiBkPSJNIDE4LjY5NjIgNy4xMjIzOEMgMTAuNjgzNiA3LjEyMjM4IDMuNjQxMzEgNC4yNDY3MiAwIDBDIDEuNDEyODQgMy44MjA0MSAzLjk2MjE1IDcuMTE2MyA3LjMwNDc5IDkuNDQ0MDRDIDEwLjY0NzQgMTEuNzcxOCAxNC42MjMgMTMuMDE5NiAxOC42OTYyIDEzLjAxOTZDIDIyLjc2OTUgMTMuMDE5NiAyNi43NDUgMTEuNzcxOCAzMC4wODc3IDkuNDQ0MDRDIDMzLjQzMDMgNy4xMTYzIDM1Ljk3OTYgMy44MjA0MSAzNy4zOTI1IDQuMDQ4NmUtMTNDIDMzLjc2MDEgNC4yNDY3MiAyNi43NDQ1IDcuMTIyMzggMTguNjk2MiA3LjEyMjM4WiIvPgo8cGF0aCBpZD0icGF0aDlfZmlsbCIgZD0iTSAxOC42OTYyIDUuODk3MjVDIDI2LjcwODkgNS44OTcyNSAzMy43NTEyIDguNzcyOTEgMzcuMzkyNSAxMy4wMTk2QyAzNS45Nzk2IDkuMTk5MjIgMzMuNDMwMyA1LjkwMzMzIDMwLjA4NzcgMy41NzU1OUMgMjYuNzQ1IDEuMjQ3ODUgMjIuNzY5NSA0LjA0ODZlLTEzIDE4LjY5NjIgMEMgMTQuNjIzIDQuMDQ4NmUtMTMgMTAuNjQ3NCAxLjI0Nzg1IDcuMzA0NzkgMy41NzU1OUMgMy45NjIxNSA1LjkwMzMzIDEuNDEyODQgOS4xOTkyMiAwIDEzLjAxOTZDIDMuNjQxMzEgOC43NjQwMSAxMC42NDggNS44OTcyNSAxOC42OTYyIDUuODk3MjVaIi8+CjxwYXRoIGlkPSJwYXRoMTBfZmlsbCIgZD0iTSA3LjU5NTc2IDMuNTY2NTZDIDcuNjQyNzYgNC4zMTk5MiA3LjQ2NDQyIDUuMDcwMjIgNy4wODM0NyA1LjcyMTg2QyA2LjcwMjUxIDYuMzczNSA2LjEzNjE5IDYuODk2OTggNS40NTY2NiA3LjIyNTYxQyA0Ljc3NzEzIDcuNTU0MjQgNC4wMTUxNSA3LjY3MzE0IDMuMjY3ODEgNy41NjcxNkMgMi41MjA0NiA3LjQ2MTE3IDEuODIxNTggNy4xMzUxMSAxLjI2MDIxIDYuNjMwNTFDIDAuNjk4ODM5IDYuMTI1OTEgMC4zMDAzOTQgNS40NjU2MSAwLjExNTYzNyA0LjczMzc1QyAtMC4wNjkxMTkxIDQuMDAxODggLTAuMDMxODIxOSAzLjIzMTU5IDAuMjIyNzc3IDIuNTIwOTlDIDAuNDc3Mzc2IDEuODEwNCAwLjkzNzc1IDEuMTkxNjkgMS41NDUyNCAwLjc0MzY4NUMgMi4xNTI3NCAwLjI5NTY3OCAyLjg3OTg1IDAuMDM4NjU5NSAzLjYzMzk0IDAuMDA1Mzc1ODlDIDQuMTI3OTMgLTAuMDIxMDQ3MSA0LjYyMjI5IDAuMDUwMTE3MyA1LjA4ODc4IDAuMjE0ODAzQyA1LjU1NTI2IDAuMzc5NDkgNS45ODQ3MyAwLjYzNDQ3IDYuMzUyNjQgMC45NjUxNzlDIDYuNzIwNTUgMS4yOTU4OSA3LjAxOTcxIDEuNjk1ODQgNy4yMzMgMi4xNDIyQyA3LjQ0NjMgMi41ODg1NSA3LjU2OTU3IDMuMDcyNTYgNy41OTU3NiAzLjU2NjU2TCA3LjU5NTc2IDMuNTY2NTZaIi8+CjxwYXRoIGlkPSJwYXRoMTFfZmlsbCIgZD0iTSAyLjI1MDYxIDQuMzc5NDNDIDEuODE4ODYgNC4zOTEzNSAxLjM5MzIyIDQuMjc1MzUgMS4wMjcyMiA0LjA0NjAyQyAwLjY2MTIyNCAzLjgxNjY4IDAuMzcxMjA2IDMuNDg0MjQgMC4xOTM2NDEgMy4wOTA1MkMgMC4wMTYwNzYyIDIuNjk2NzkgLTAuMDQxMTA3OCAyLjI1OTM1IDAuMDI5MjgwNCAxLjgzMzIxQyAwLjA5OTY2ODYgMS40MDcwNyAwLjI5NDQ4NiAxLjAxMTI1IDAuNTg5MjMzIDAuNjk1NTQyQyAwLjg4Mzk4MSAwLjM3OTgzIDEuMjY1NSAwLjE1ODMxNiAxLjY4NTgxIDAuMDU4ODU3N0MgMi4xMDYxMSAtMC4wNDA2MDA1IDIuNTQ2NDQgLTAuMDEzNTYyMiAyLjk1MTQzIDAuMTM2NTcyQyAzLjM1NjQxIDAuMjg2NzA3IDMuNzA3OTYgMC41NTMyMzQgMy45NjE4NiAwLjkwMjYzNkMgNC4yMTU3NyAxLjI1MjA0IDQuMzYwNyAxLjY2ODcyIDQuMzc4NDIgMi4xMDAyN0MgNC4zOTUyOSAyLjY4MzggNC4xODEzMSAzLjI1MDQ0IDMuNzgyOTMgMy42NzcxNUMgMy4zODQ1NSA0LjEwMzg3IDIuODMzOTIgNC4zNTYyMyAyLjI1MDYxIDQuMzc5NDNaIi8+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"jupyternvidia,jupyter\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.jupyternvidia\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.nvidia.22.04\"\nENV ARGS=\"--disable-factory --class=jupyternvidia -- /usr/local/bin/startjupyter.sh\"\nLABEL oc.name=\"jupyternvidia\"\nLABEL oc.displayname=\"jupyter nvidia\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"jupyternvidia\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=jupyternvidia -- /usr/local/bin/startjupyter.sh\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nCOPY startjupyter.sh /usr/local/bin/startjupyter.sh\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/jupyternvidia/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/jupyternvidia/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/jupyternvidia/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/jupyternvidia/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kalzium\nLABEL oc.icon=\"kalzium.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiCiAgIHdpZHRoPSIxMjgiCiAgIGhlaWdodD0iMTI4IgogICBpZD0ic3ZnMjQyNSIKICAgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyNDI4Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTk4NjEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMTk4NjMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNTAxOTYwODEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxOTg2NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDE1MDAyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQzYmFmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDE1MDA0IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjk4NGZmO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAuNTE4NTE4NTEiCiAgICAgICAgIGlkPSJzdG9wMjU3MDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwZjRmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxNTAwNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDEzMDU0Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEzMDU2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojM2MzYzNjO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMTMwNTgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjA3MyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AxMjA3NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzQ1NDU0NTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDEyMDc3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTAxMjUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzgzODM4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMTAxMjciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwZjBmMGY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMDEyOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyMDAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWVhZWFlO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNzIwMiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJmMmYyZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjkyNTkyNTkxIgogICAgICAgICBpZD0ic3RvcDcyMDQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2MTYxNjE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A3MjA2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzE4NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A3MTg3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmJmYmZiO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuMTUwMDAwMDEiCiAgICAgICAgIGlkPSJzdG9wNzE4OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2U5ZTllOTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjQ0OTk5OTk5IgogICAgICAgICBpZD0ic3RvcDcxOTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjOGM4Yzg7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC42NDk5OTk5OCIKICAgICAgICAgaWQ9InN0b3A3MTkzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojODA4MDgwO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNzE5NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTI5MjkyO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNjIxMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzRkNGQ0ZDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjY4NTE4NTE5IgogICAgICAgICBpZD0ic3RvcDYyMTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MjE0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE4NiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjY2RhZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1MTg4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTg4NWZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzIwNTYwOTciCiAgICAgICAgIGlkPSJzdG9wNTE5MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMGViMTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDUxOTIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTc0Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDUxNzYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmYmZiZmI7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4xOTgwNDUyNSIKICAgICAgICAgaWQ9InN0b3A1MTc4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDdlNWZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNDQiCiAgICAgICAgIGlkPSJzdG9wNTE4MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izk3YzZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjY5ODA0NTI1IgogICAgICAgICBpZD0ic3RvcDUxODIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2Mzk2ZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A1MTg0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE2NiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4OWMxZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1MTY4IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTM4MmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNTcyNjI1OTQiCiAgICAgICAgIGlkPSJzdG9wNTE3MCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzA4MDBkYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDUxNzIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MzM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDQzNDAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZhZjU7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC4yIgogICAgICAgICBpZD0ic3RvcDkwNjIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmM4YmQ7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC41IgogICAgICAgICBpZD0ic3RvcDQzNDgiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZjc0NjM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMC44MDAwMDAwMSIKICAgICAgICAgaWQ9InN0b3A5MDY5IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYyMTA5O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNDM0MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM0MzIiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZhNWExO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzQzNCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ExMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjk0NDQ0NDQyIgogICAgICAgICBpZD0ic3RvcDM0MzYiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMTAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzNDM4IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAyMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmNTZmNmE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMDIzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYxNzE2O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNTcyNjI1OTQiCiAgICAgICAgIGlkPSJzdG9wMzAzMSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzZjMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMwMjUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExNi43NTkyMiIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE2Ljc1OTIyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzAyNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMwMjEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS41NDk3MzA2LDAsMCwxLjU0OTQ5NDgsLTUyLjI4OTAzMSwtNjQuMTU4NTcxKSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iOTUuMTQ3NDM4IgogICAgICAgeTE9IjEyMS43ODY4IgogICAgICAgeDI9Ijk1LjE0NzQzOCIKICAgICAgIHkyPSI3MC4wMzc3MjciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNDE4IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzAyMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExOC4zMTY5NSIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE4LjMxNjk1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzQzMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM0MzIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi41NzM2OTIiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMyLjU3MzY5MiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDYyOTgiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0MzM4IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoODI0MCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODI5ODYwNSwwLDAsMC45NjEwOTI2LDE1LjQ0MDE0NywtMzkuMjg5NjUpIgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgaWQ9InBhdGg4MjQyIiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTYuNzU5MjIiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExNi43NTkyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDkyMTkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDIxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNzQxNDM2NiwwLDAsMS42NTQ4NTI5LC03MC41MjM2MzMsLTc2LjQ2MDExNikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi4yNDcwNyIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzAuMzAxMDE0IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50OTIyMSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNTY4MzI1LC0xLjk2MzU5MzllLTcsMS41OTk4MTE3ZS03LDEuMjY0MTc3NCwtMTQuODAwOTg1LC03LjU0MDkwOTkpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjIyNSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxNzQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjI0NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NzE5NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iODUuNzg4OTc5IgogICAgICAgeTE9IjU4LjA0MjQzNSIKICAgICAgIHgyPSIxMDEuMDgxNTUiCiAgICAgICB5Mj0iNTcuNTg0NjM3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTAxMzEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMDEyNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iNTcuMTg0MTEzIgogICAgICAgeTE9IjkzLjIwMDI0OSIKICAgICAgIHgyPSI2My4xNzU5NjEiCiAgICAgICB5Mj0iODAuMDE1NzAxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTIwNzkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjA3MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4MT0iNDIuMjEyNjAxIgogICAgICAgeTE9IjI3LjI0NzE3MSIKICAgICAgIHgyPSI2NS4wNDM4ODQiCiAgICAgICB5Mj0iNTEuNTY1NDc5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTMwNjAiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMzA1NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTIuMjczMDE4IgogICAgICAgY3k9IjQzLjE5MjY0NiIKICAgICAgIHI9IjguNDIzNjc3NCIKICAgICAgIGZ4PSI5Mi4yNzMwMTgiCiAgICAgICBmeT0iNDMuMTkyNjQ2IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTUwMDgiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxNTAwMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE5ODkzMjIsLTAuMzYxOTI5MSwwLjIxOTI2OTQsMC43MjYzNTUsLTI3LjU1NzA3Niw0NS45NDM2NTIpIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjE3OTE3Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjE3OTE5IgogICAgICAgICBzdGREZXZpYXRpb249IjAuMzk0ODkwMDUiCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDwvZmlsdGVyPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNDAuMjgzNDI0IgogICAgICAgY3k9IjgwLjcwOTgwOCIKICAgICAgIHI9IjguMTA5Nzg3OSIKICAgICAgIGZ4PSI0MC4yODM0MjQiCiAgICAgICBmeT0iODAuNzA5ODA4IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTk4NjciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxOTg2MSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMS40NzEzODEzLC0xLjMyNDgzNzQsMS40MDQzNTMzLC0xLjU1OTY5MjMsLTExLjgzMjE4NSwyNTIuMjI2MikiIC8+CiAgICA8ZmlsdGVyCiAgICAgICBpZD0iZmlsdGVyMjE4MDciPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMjE4MDkiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC4zOTE4ODQyNCIKICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPC9maWx0ZXI+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI2Ni4wMDQ5NzQiCiAgICAgICBjeT0iMzkuNDI0NTE1IgogICAgICAgcj0iNy4yNjg5NTc2IgogICAgICAgZng9IjY2LjAwNDk3NCIKICAgICAgIGZ5PSIzOS40MjQ1MTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNDcyNiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE1MDAyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzkwNjQ1MywtMS4wOTEyMjkxLDEuNjE2NjQ0MywwLjU3ODczNjUsLTIxLjM2NjE0OCw4OC45NzE3MDkpIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjI1Njk3Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjI1Njk5IgogICAgICAgICBzdGREZXZpYXRpb249IjAuMzc1NDAzMzUiCiAgICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDwvZmlsdGVyPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjcwNDkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMi41NzM2OTIiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMyLjU3MzY5MiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI3MDYwIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NjgyMzMsMCwwLDEuMDU2MzkxOCwtMTUuNzQzODYsLTAuNzk4NTY2NykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzIuNTczNjkyIgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMi41NzM2OTIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNzA3MSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xNjY4MjMzLDAsMCwxLjA1NjM5MTgsLTE1Ljc0Mzg2LC0wLjc5ODU2NjcpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMyLjU3MzY5MiIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzIuNTczNjkyIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MjcwOTIiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTY2ODIzMywwLDAsMS4wNTYzOTE4LC0xNS43NDM4NiwtMC43OTg1NjY3KSIgLz4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJmaWx0ZXI5MDY0Ij4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjkwNjYiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMC40NDYyOTY5MyIKICAgICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPC9maWx0ZXI+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MDcxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzIuNTczNjkyIgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMi41NzM2OTIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MDgzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE3NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE2NjgyMzMsMCwwLDEuMDU2MzkxOCwtMTUuNzQzODYsLTAuNzk4NTY2NykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ5MTAxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDMzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE2Ljc1OTIyIgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTYuNzU5MjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA2NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxNjYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTU3MTYsMCwwLDEuODIwNDY3MiwtODcuMTAwNjY5LC05NS43OTcxMTYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA2NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUxODYiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk0LjM3NDQ1OCIKICAgICAgIGN5PSIzMC45Mzc4NzQiCiAgICAgICByPSIxOC4zOTE4NzIiCiAgICAgICBmeD0iOTQuMzc0NDU4IgogICAgICAgZnk9IjMzLjQ1ODA5OSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDExMDY5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE3NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjExMTQyMDIsNC42OTQ0NDI1ZS04LC0zLjYyNTk4NzFlLTgsMS4xNTE0Mzg4LC0xMC41MTUyMjEsLTMuOTQ1NjU2NCkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA4MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTYuNzU5MjIiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExNi43NTkyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDExMDg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjIwOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjc3MzE3OTYsMCwwLDEuNjg1MDE3NiwtNzMuNTQyOTQ3LC03OS45ODIxMjYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMTA4NyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQzMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4xMTE0MjAyLDQuNjk0NDQyNWUtOCwtMy42MjU5ODcxZS04LDEuMTUxNDM4OCwtMTAuNTE1MjIxLC0zLjk0NTY1NjQpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTQuMzc0NDU4IgogICAgICAgY3k9IjMwLjkzNzg3NCIKICAgICAgIHI9IjE4LjM5MTg3MiIKICAgICAgIGZ4PSI5NC4zNzQ0NTgiCiAgICAgICBmeT0iMzMuNDU4MDk5IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTIwNzAiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MTg1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDY2MDA3OSwwLDAsMS4xMDQzOTE0LC02LjIyOTQ2NDUsLTIuNDkwMTA1MikiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NC4zNzQ0NTgiCiAgICAgICBjeT0iMzAuOTM3ODc0IgogICAgICAgcj0iMTguMzkxODcyIgogICAgICAgZng9Ijk0LjM3NDQ1OCIKICAgICAgIGZ5PSIzMy40NTgwOTkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODMwMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMDczOTY2LDAsMCwxLjA0MzY2OTcsLTAuNjk4MDUzNSwtMC42MTE1MDQ0KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTguMzE2OTUiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExOC4zMTY5NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE4NTY3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE4NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjYwMjE5NjYsLTIuNzk2NjQ0NWUtMiwyLjc5NjIxOWUtMiwxLjYwMTk1MjgsLTYwLjU4Nzg3MiwtNjcuNzA1MTQ2KSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iOTUuMTE3NTYxIgogICAgICAgY3k9IjExOC4zMTY5NSIKICAgICAgIHI9IjI2Ljc1MTgxNCIKICAgICAgIGZ4PSI5NS4xMTc1NjEiCiAgICAgICBmeT0iMTE4LjMxNjk1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTg1NzIiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNDMyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNjAyMTk2NiwtMi43OTY2NDQ1ZS0yLDIuNzk2MjE5ZS0yLDEuNjAxOTUyOCwtNjAuNTg3ODcyLC02Ny43MDUxNDYpIgogICAgICAgc3ByZWFkTWV0aG9kPSJwYWQiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI5NS4xMTc1NjEiCiAgICAgICBjeT0iMTE4LjMxNjk1IgogICAgICAgcj0iMjYuNzUxODE0IgogICAgICAgZng9Ijk1LjExNzU2MSIKICAgICAgIGZ5PSIxMTguMzE2OTUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxODU3NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS42MDIxOTY2LC0yLjc5NjY0NDVlLTIsMi43OTYyMTllLTIsMS42MDE5NTI4LC02MC41ODc4NzIsLTY3LjcwNTE0NikiCiAgICAgICBzcHJlYWRNZXRob2Q9InBhZCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9Ijk1LjExNzU2MSIKICAgICAgIGN5PSIxMTguMzE2OTUiCiAgICAgICByPSIyNi43NTE4MTQiCiAgICAgICBmeD0iOTUuMTE3NTYxIgogICAgICAgZnk9IjExOC4zMTY5NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDE4NTc5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTE4NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjY0OTYxNDksLTIuODc5NDEzNGUtMiwyLjg3ODk3NTNlLTIsMS42NDkzNjM5LC03My45MzkyMSwtMTM2LjY0MzY3KSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPGZpbHRlcgogICAgICAgaWQ9ImZpbHRlcjE5NTUxIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjE5NTUzIgogICAgICAgICBzdGREZXZpYXRpb249IjAuNTg2ODc1IgogICAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaWQ9ImxheWVyMiI+CiAgICA8ZwogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgaWQ9ImxheWVyOSI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02LjgxODI4OTIsLTYxLjM2NzY0NSkiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODM5OSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBkPSJNIDg2LjM3NSw1LjE4NzUgQyA3MS4xNzA5NTgsNS4xODc1IDU4Ljg0Mzc1LDE3LjUxNDcwOSA1OC44NDM3NSwzMi43MTg3NSBDIDU4Ljg0Mzc1LDM0LjQwMjU5NyA1OC45OTE0MTksMzYuMDU1NTQ0IDU5LjI4MTI1LDM3LjY1NjI1IEMgNTUuMDAyMzk3LDQxLjQ3NzQ3MiA1Mi4yNjQ3ODUsNDMuOTIyMjkxIDQ3LjU5Mzc1LDQ4LjA5Mzc1IEMgNDMuMjQ0NzU5LDQ1LjIzMjgwMiAzOC4wNTk5MTQsNDMuNTYyNSAzMi40Njg3NSw0My41NjI1IEMgMTcuMjMxMDI3LDQzLjU2MjUgNC44NDM3NDk5LDU1LjkxODUzIDQuODQzNzUsNzEuMTU2MjUgQyA0Ljg0Mzc1LDg2LjM5Mzk3MSAxNy4yMzEwMjYsOTguNzgxMjUxIDMyLjQ2ODc1LDk4Ljc4MTI1IEMgMzkuOTY2NDQ2LDk4Ljc4MTI1IDQ2Ljc0MjQ1Nyw5NS43NjMzMDMgNTEuNzE4NzUsOTAuOTA2MjUgQyA1OC41MzU4NDEsOTMuNjU1MDc3IDYwLjg3NTk5LDk0LjYxNzg0IDY3LjA5Mzc1LDk3LjEyNSBDIDY4LjA5OTE5NCwxMTEuNDEyNDQgODAuMDIwNTc1LDEyMi42ODc1IDk0LjU2MjUsMTIyLjY4NzUgQyAxMDkuNzYyODUsMTIyLjY4NzUgMTIyLjA5Mzc1LDExMC4zNTY0NiAxMjIuMDkzNzUsOTUuMTU2MjUgQyAxMjIuMDkzNzUsODIuMDc3ODUgMTEyLjk1MDUzLDcxLjE0ODI2OSAxMDAuNzE4NzUsNjguMzQzNzUgQyAxMDAuNTQ3Myw2My43MDk3NyAxMDAuNDkyNTYsNjIuMjExNTIxIDEwMC4yODEyNSw1Ni41IEMgMTA4LjQzNzk5LDUxLjcxNjU0NiAxMTMuOTA2MjUsNDIuODUxNTQgMTEzLjkwNjI1LDMyLjcxODc1IEMgMTEzLjkwNjI1LDE3LjUxNDcwOCAxMDEuNTc5MDQsNS4xODc1IDg2LjM3NSw1LjE4NzUgeiBNIDY1LjU5Mzc1LDUwLjgxMjUgQyA3MC42MDYwNTEsNTYuNTY5OTM2IDc3Ljk3MzI4NCw2MC4xOTQ0NzMgODYuMTg3NSw2MC4yNSBDIDg2LjI2OTI0MSw2NC41NTU4NjEgODYuMjc4NzMsNjUuNDQ5OTI1IDg2LjM0Mzc1LDY4Ljg3NSBDIDc5LjE4NzUyNSw3MS4xMTA4NDggNzMuMjk2NjQsNzYuMTgzMzA0IDY5Ljk2ODc1LDgyLjc4MTI1IEMgNjUuMTc2MTgsODAuODkxMjIyIDY0LjI2OTI0Miw4MC41NTMzNjMgNTkuMDYyNSw3OC41IEMgNTkuNzA1NTg1LDc2LjE2MzgzNSA2MC4wNjI1LDczLjY5NTg3MSA2MC4wNjI1LDcxLjE1NjI1IEMgNjAuMDYyNSw2Ni43MjE4OTkgNTkuMDE2ODYsNjIuNTI2NTY3IDU3LjE1NjI1LDU4LjgxMjUgQyA2MC4zODExMzYsNTUuNzU0MTE3IDYxLjU4MzgyMiw1NC42MTUzOTQgNjUuNTkzNzUsNTAuODEyNSB6ICIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LDYyLjU0OTM1NykiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC41ODgyMzUyOTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjE5NTUxKSIKICAgICAgICAgICBpZD0icGF0aDE4NDAxIiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MS44MTY4ODEsLTI0LjE4MzExOSkiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODQxNSIgLz4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDY3Mjg0LDAsMCwxLjAwNjcxOTIsLTAuNDUxODY4LC0wLjgyMzU0NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcxODQzNSIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI1Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgsLTYyLjU0OTM1NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9Imc5MDg1Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA4MzMzLDAsMCwxLjAyMDgzMzMsLTIuNzI0NzIxOSwtMy40NTkxMTk1KSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDY3KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICBpZD0icGF0aDkwODciIC8+CiAgICAgICAgPGcKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxNTUwMzksMCwwLDEuMDE1NTAzOSwtMS40NjMxNjk5LC0xLjQ3ODI0NjIpIgogICAgICAgICAgIGlkPSJnOTA4OSI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMjEuODY5MzggOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgNjguMzY1NzQ3LDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDEyMS44NjkzOCA5Ni43ODk1NTEgeiIKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk1ODMzMywwLDAsMC44OTU4MzMzLDkuMTY0OTczNCw4LjYzOTU3NDUpIgogICAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTA2NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTM1MjExMzI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuNTAxOTYwNzgiCiAgICAgICAgICAgICBpZD0icGF0aDkwOTEiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMTEuNzY0MDcsMzguNDU1NzM0IEMgMTExLjc2NDA3LDQ1LjgxMjIyMiAxMDYuMzEyMTMsNTEuNzgyNzA0IDk0LjM3NDQ1OCw1MS43ODI3MDQgQyA4Mi42MDM4MzEsNTEuNzgyNzA0IDc2Ljk4NDg0Niw0NS44MTIyMjIgNzYuOTg0ODQ2LDM4LjQ1NTczNCBDIDc2Ljk4NDg0NiwzMS4wOTkyNDcgODQuNzc1MzkyLDI1LjEyODc2NCA5NC4zNzQ0NTgsMjUuMTI4NzY0IEMgMTAzLjk3MzUyLDI1LjEyODc2NCAxMTEuNzY0MDcsMzEuMDk5MjQ3IDExMS43NjQwNywzOC40NTU3MzQgeiAiCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA3OTQ5ODcsMCwwLDAuOTMyMDk4OCwtNy41MDI2NDU2LDQ1LjI2MTQxKSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxMTA2OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDkwOTMiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxMjEuNjg3NTYgOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDY4LjU0NzU2Miw5Ni43ODk1NTEgQSAyNi41NyAyNi41NyAwIDEgMSAgMTIxLjY4NzU2IDk2Ljc4OTU1MSB6IgogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTkyNDU1LDAsMCwwLjk5MjQ1NSwyLjg5Mzk2NjdlLTIsLTAuODQ1NDgzNCkiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDA5OGY7c3Ryb2tlLXdpZHRoOjIuMjc4MTI5NTg7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg5MDk1IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgaWQ9ImxheWVyOCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gNzUuMDQ1NjcyLDMxLjMwNjk2NiBDIDY2LjI1NDAzMywyNS4wMDAxNTEgNjAuMDk5MzkxLDMzLjkxMDE5MiA2Ni4zMDgwMzcsNDEuMDI0NTIzIEMgNzQuOTY1OTA1LDUxLjY4MDM2MSA4Mi43NTU3OSwzNi44Mzc5MzYgNzUuMDQ1NjcyLDMxLjMwNjk2NiB6ICIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0NzI2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMjU2OTcpIgogICAgICAgICBpZD0icGF0aDIxODExIiAvPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDQwLjkxNzEwMyw1NC4wNjQzNDkgQyA0MC45MTcxMDMsNTQuMDY0MzQ5IDY1LjEzMDcwNSwzMi40NDA0MzYgNjUuMTMwNzA1LDMyLjQ0MDQzNiBDIDY1LjU5MzkxOSwzMS45MTEwNDggNjkuODYyMzYxLDMwLjIxMjgwNCA3My40MTc3MTQsMzQuNDQ3NDQ2IEMgNzYuNjkyNjczLDM4LjM0ODEyMiA3NS4zNzE0MzEsNDEuNDkyOTAyIDc0Ljg0MjA0Myw0Mi4wMjIyOSBDIDc0Ljg0MjA0Myw0Mi4wMjIyOSA1MS4wMTY4OTQsNjQuNjE3MzM1IDUxLjAxNjg5NCw2NC42MTczMzUgTCA0MC45MTcxMDMsNTQuMDY0MzQ5IHogIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MTMwNjApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaWQ9InBhdGgxMjA4MyIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI2Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTYxLjgxNjg4MSwtMjQuMTgzMTE5KSIKICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgICAgICBpZD0iZzExMDcxIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMjA4MzMzLDAsMCwxLjAyMDgzMzMsLTIuNzI0NzIxOSwtMy40NTkxMTk1KSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDgzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICBpZD0icGF0aDExMDczIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTU1MDM5LDAsMCwxLjAxNTUwMzksLTEuNDYzMTY5OSwtMS40NzgyNDYyKSIKICAgICAgICAgICBpZD0iZzExMDc1Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJNIDEyMS44NjkzOCA5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICA2OC4zNjU3NDcsOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgMTIxLjg2OTM4IDk2Ljc4OTU1MSB6IgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTU4MzMzLDAsMCwwLjg5NTgzMzMsOS4xNjQ5NzM0LDguNjM5NTc0NSkiCiAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDExMDg1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41MzUyMTEzMjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MC41MDE5NjA3OCIKICAgICAgICAgICAgIGlkPSJwYXRoMTEwNzciIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgZD0iTSAxMTEuNzY0MDcsMzguNDU1NzM0IEMgMTExLjc2NDA3LDQ1LjgxMjIyMiAxMDYuMzEyMTMsNTEuNzgyNzA0IDk0LjM3NDQ1OCw1MS43ODI3MDQgQyA4Mi42MDM4MzEsNTEuNzgyNzA0IDc2Ljk4NDg0Niw0NS44MTIyMjIgNzYuOTg0ODQ2LDM4LjQ1NTczNCBDIDc2Ljk4NDg0NiwzMS4wOTkyNDcgODQuNzc1MzkyLDI1LjEyODc2NCA5NC4zNzQ0NTgsMjUuMTI4NzY0IEMgMTAzLjk3MzUyLDI1LjEyODc2NCAxMTEuNzY0MDcsMzEuMDk5MjQ3IDExMS43NjQwNywzOC40NTU3MzQgeiAiCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA3OTQ5ODcsMCwwLDAuOTMyMDk4OCwtNy41MDI2NDU2LDQ1LjI2MTQxKSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxODMwMCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDExMDc5IiAvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjY4NzU2IDk2Ljc4OTU1MSBBIDI2LjU3IDI2LjU3IDAgMSAxICA2OC41NDc1NjIsOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDEyMS42ODc1NiA5Ni43ODk1NTEgeiIKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5MjQ1NDgsMCwwLDAuOTkyNDU0OCwtMi4xODQ0NDEyZS0yLC0wLjcxNjAwMDcpIgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjI3ODE0MjkzO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICAgIGlkPSJwYXRoMTEwODEiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI3Ij4KICAgICAgPHBhdGgKICAgICAgICAgZD0iTSA5My40Mzg2OTIsNDcuNTIxNzI3IEMgMTA0LjI4MDg3LDQ2LjI1NTcyOCAxMDIuNTg0NDgsMzIuODI4NjIyIDkyLjA0Mjc3MSwzMy41MjQyMTIgQyA4MS44MjA0NTcsMzQuMTk4NzI4IDgxLjExNTY1Nyw0OC45NjA2NDEgOTMuNDM4NjkyLDQ3LjUyMTcyNyB6ICIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE1MDA4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4xO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyMTc5MTcpIgogICAgICAgICBpZD0icGF0aDEzMDYyIiAvPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDg1Ljg1MTEzOSw0My4xMzQzODEgQyA4NS44NTExMzksNDMuMTM0MzgxIDg2LjUyMzYwNiw3OC41NTc5NCA4Ni41MjM2MDYsNzguNTU3OTQgTCAxMDEuMDgxNTUsNzguMDA4NTg0IEMgMTAxLjA4MTU1LDc4LjAwODU4NCA5OS43NDI3OTQsNDEuODIzNDQ0IDk5Ljc0Mjc5NCw0MS44MjM0NDQgQyA5OS4yMzk1MzIsMzkuMDE5MTY0IDk2LjE2MjAwNSwzNi4yMDQ1NyA5Mi42ODM0NTIsMzYuNDQzNzIgQyA4OC44MzcyNTUsMzYuNzA4MTQ2IDg1LjM5OTc4MSw0MC4wMzUwNDggODUuODUxMTM5LDQzLjEzNDM4MSB6ICIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMDEzMSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBpZD0icGF0aDkxNTQiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMzIuODk4NDc2LDczLjg3Njg4MyBDIDI3LjYyNjcwMyw4MC45Njg5NjggMzcuODk3OTE5LDkyLjU1NDI0NSA0NS4xMzYzODYsODMuMjQ2MjAxIEMgNTIuNjk3ODc4LDczLjUyMjc3NCAzOC44NjY0NjQsNjUuODQ4MTgyIDMyLjg5ODQ3Niw3My44NzY4ODMgeiAiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQxOTg2Nyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO2ZpbHRlcjp1cmwoI2ZpbHRlcjIxODA3KSIKICAgICAgICAgaWQ9InBhdGgxNzkyMSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgZD0iTSA0My42NzM4Miw3Mi40MjM0NjIgQyA0My42NzM4Miw3Mi40MjM0NjIgODIuNjc4MTExLDg3LjgwNTQzNiA4Mi42NzgxMTEsODcuODA1NDM2IEwgNzguMjgzMjYyLDEwMS42MzA5IEMgNzguMjgzMjYyLDEwMS42MzA5IDM4LjU0NjQ5NSw4NS42MDgwMTIgMzguNTQ2NDk1LDg1LjYwODAxMiBDIDM0LjQ3MjEwMyw4My4zNjQ4MDcgMzMuNDU2NzQ4LDgwLjI5NjMzMyAzNC43MDEwMDIsNzYuNzI2NzUyIEMgMzYuMDk3MjgyLDcyLjcyMTAzIDQxLjI3MDM4Niw3MS41MDc4NjggNDMuNjczODIsNzIuNDIzNDYyIHogIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MTIwNzkpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjE7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaWQ9InBhdGgxMDEzMyIgLz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgICBpZD0ibGF5ZXI0Ij4KICAgICAgPGcKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDY3Mjg0LDAsMCwxLjAwNjcxOTIsLTAuNDUxODY4LC0wLjgyMzU0NykiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9ImcyMTk5Ij4KICAgICAgICA8cGF0aAogICAgICAgICAgIGQ9Ik0gMTIxLjg2OTM4IDk2Ljc4OTU1MSBBIDI2Ljc1MTgxNCAyNi43NTE4MTQgMCAxIDEgIDY4LjM2NTc0Nyw5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICAxMjEuODY5MzggOTYuNzg5NTUxIHoiCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTM0NTI5LDAsMCwwLjk5MzQ1MjksLTAuMTIwMzY2NCwtMC44MDg5ODQzKSIKICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDM0MzApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjUzNTIxMTMyO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4IgogICAgICAgICAgIGlkPSJwYXRoMzQyOCIgLz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDA4NzA3OCwwLDAsMS4wMDg3MDc4LC0wLjgyODM0NDEsLTAuODIzNzAxMSkiCiAgICAgICAgICAgaWQ9Imc5MjE1Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBkPSJNIDEyMS44NjkzOCA5Ni43ODk1NTEgQSAyNi43NTE4MTQgMjYuNzUxODE0IDAgMSAxICA2OC4zNjU3NDcsOTYuNzg5NTUxIEEgMjYuNzUxODE0IDI2Ljc1MTgxNCAwIDEgMSAgMTIxLjg2OTM4IDk2Ljc4OTU1MSB6IgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTU4MzMzLDAsMCwwLjg5NTgzMzMsOS4xNjQ5NzM0LDguNjM5NTc0NSkiCiAgICAgICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDkyMTkpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjUzNTIxMTMyO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4IgogICAgICAgICAgICAgaWQ9InBhdGgyNDM0IiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMTExLjc2NDA3LDM4LjQ1NTczNCBDIDExMS43NjQwNyw0NS44MTIyMjIgMTA2LjMxMjEzLDUxLjc4MjcwNCA5NC4zNzQ0NTgsNTEuNzgyNzA0IEMgODIuNjAzODMxLDUxLjc4MjcwNCA3Ni45ODQ4NDYsNDUuODEyMjIyIDc2Ljk4NDg0NiwzOC40NTU3MzQgQyA3Ni45ODQ4NDYsMzEuMDk5MjQ3IDg0Ljc3NTM5MiwyNS4xMjg3NjQgOTQuMzc0NDU4LDI1LjEyODc2NCBDIDEwMy45NzM1MiwyNS4xMjg3NjQgMTExLjc2NDA3LDMxLjA5OTI0NyAxMTEuNzY0MDcsMzguNDU1NzM0IHogIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNzk0OTg3LDAsMCwwLjkzMjA5ODgsLTcuNTAyNjQ1Niw0NS4yNjE0MSkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50OTA3MSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eTowLjUwMTk2MDc4O2ZpbHRlcjp1cmwoI2ZpbHRlcjkwNjQpIgogICAgICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoODI0MCkiCiAgICAgICAgICAgICBpZD0icGF0aDUzMjEiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAxMjEuNjg3NTYgOTYuNzg5NTUxIEEgMjYuNTcgMjYuNTcgMCAxIDEgIDY4LjU0NzU2Miw5Ni43ODk1NTEgQSAyNi41NyAyNi41NyAwIDEgMSAgMTIxLjY4NzU2IDk2Ljc4OTU1MSB6IgogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTg1ODIyLDAsMCwwLjk4NTgyMiwwLjU4MTMzMTEsLTkuODg0MjY0MmUtMikiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2ODAwMDA7c3Ryb2tlLXdpZHRoOjIuMjc4MTM5NTk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgICAgaWQ9InBhdGg4MjQ0IiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"kalzium,kalzium\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kalzium.desktop\"\nLABEL oc.launch=\"kalzium.kalzium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Kalzium\"\nLABEL oc.displayname=\"Kalzium\"\nLABEL oc.path=\"/usr/bin/kalzium\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Kalzium\"\nENV APPBIN \"/usr/bin/kalzium\"\nENV APP \"/usr/bin/kalzium\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kalzium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kalzium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kalzium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kalzium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kdiamond\nLABEL oc.icon=\"kdiamond.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgaGVpZ2h0PSI0OCIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNiIgeDI9IjciIHkxPSIyMCIgeTI9IjciPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiZjQyMzEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZjU4MjczIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjM5IiB4Mj0iMzAiIHkxPSIyMCIgeTI9IjciPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmE5MmQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZjMTY5Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE3IiB4Mj0iMTAiIHkxPSI0MC4xMjQiIHkyPSIyOCI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzNiYjU2NiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM3Y2VjYTQiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzgiIHgyPSIzMCIgeTE9IjQyIiB5Mj0iMjkiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzYjg1YjUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjN2NiY2VjIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8Zz4KICAgIDxwYXRoIGQ9Im0xMi45OTkwNzQgNC4wMDAwMDQ4Yy0uMjQyNTE4IDAtLjQ4NDk2NS4wOTIxMTgtLjY3MDc5NC4yNzc5MzY5bC04LjA0OTUzMDUgOC4wNTA5MDgzYy0uMzcxNjU5Ny4zNzE2MzgtLjM3MTY1OTcuOTY5ODcxIDAgMS4zNDE1MDlsOC4wNDk1MzA1IDguMDUwOTA4Yy4zNzE2NTkuMzcxNjM4Ljk3MTc4MS4zNzE2MzggMS4zNDM0NCAwbDguMDQ5NTMtOC4wNTA5MDhjLjM3MTY2MS0uMzcxNjM4LjM3MTY2MS0uOTY5ODcxIDAtMS4zNDE1MDlsLTguMDQ5NTMtOC4wNTA5MDgzYy0uMTg1ODI5LS4xODU4MTg5LS40MzAxMjktLjI3NzkzNjktLjY3MjY0Ni0uMjc3OTM2OXoiIGZpbGw9InVybCgjYSkiLz4KICAgIDxwYXRoIGQ9Im0zNC45OTkwNzQgNC4wMDAwMDQ4Yy0uMjQyNTE4IDAtLjQ4NDk2NS4wOTIxMTgtLjY3MDc5NC4yNzc5MzY5bC04LjA0OTUzMSA4LjA1MDkwODNjLS4zNzE2NTkuMzcxNjM4LS4zNzE2NTkuOTY5ODcxIDAgMS4zNDE1MDlsOC4wNDk1MzEgOC4wNTA5MDhjLjM3MTY1OS4zNzE2MzguOTcxNzgxLjM3MTYzOCAxLjM0MzQ0IDBsOC4wNDk1My04LjA1MDkwOGMuMzcxNjYxLS4zNzE2MzguMzcxNjYxLS45Njk4NzEgMC0xLjM0MTUwOWwtOC4wNDk1My04LjA1MDkwODNjLS4xODU4MjktLjE4NTgxODktLjQzMDEyOS0uMjc3OTM2OS0uNjcyNjQ2LS4yNzc5MzY5eiIgZmlsbD0idXJsKCNiKSIvPgogICAgPHBhdGggZD0ibTEyLjk5OTA3NCAyNi4wMDAwMDVjLS4yNDI1MTggMC0uNDg0OTY1LjA5MjEyLS42NzA3OTQuMjc3OTM3bC04LjA0OTUzMDUgOC4wNTA5MDhjLS4zNzE2NTk3LjM3MTYzOC0uMzcxNjU5Ny45Njk4NzEgMCAxLjM0MTUwOWw4LjA0OTUzMDUgOC4wNTA5MDhjLjM3MTY1OS4zNzE2MzguOTcxNzgxLjM3MTYzOCAxLjM0MzQ0IDBsOC4wNDk1My04LjA1MDkwOGMuMzcxNjYxLS4zNzE2MzguMzcxNjYxLS45Njk4NzEgMC0xLjM0MTUwOWwtOC4wNDk1My04LjA1MDkwOGMtLjE4NTgyOS0uMTg1ODE5LS40MzAxMjktLjI3NzkzNy0uNjcyNjQ2LS4yNzc5Mzd6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCBkPSJtMzQuOTk5MDc0IDI2LjAwMDAwNWMtLjI0MjUxOCAwLS40ODQ5NjUuMDkyMTItLjY3MDc5NC4yNzc5MzdsLTguMDQ5NTMxIDguMDUwOTA4Yy0uMzcxNjU5LjM3MTYzOC0uMzcxNjU5Ljk2OTg3MSAwIDEuMzQxNTA5bDguMDQ5NTMxIDguMDUwOTA4Yy4zNzE2NTkuMzcxNjM4Ljk3MTc4MS4zNzE2MzggMS4zNDM0NCAwbDguMDQ5NTMtOC4wNTA5MDhjLjM3MTY2MS0uMzcxNjM4LjM3MTY2MS0uOTY5ODcxIDAtMS4zNDE1MDlsLTguMDQ5NTMtOC4wNTA5MDhjLS4xODU4MjktLjE4NTgxOS0uNDMwMTI5LS4yNzc5MzctLjY3MjY0Ni0uMjc3OTM3eiIgZmlsbD0idXJsKCNkKSIvPgogICAgPHBhdGggZD0ibTQuMTY2MDE1NiAxMi41Yy0uMjMzNDk3OS4zNjcxMjEtLjIwNzcyMTUuODQ4OTM4LjExMzI4MTMgMS4xNjk5MjJsOC4wNDg4MjgxIDguMDUwNzgxYy4zNzE2NTkuMzcxNjM4Ljk3MjA5MS4zNzE2MzggMS4zNDM3NSAwbDguMDQ4ODI4LTguMDUwNzgxYy4zMjEwMDQtLjMyMDk4NC4zNDY3OC0uODAyODAxLjExMzI4MS0xLjE2OTkyMi0uMDM2NjY1LjA1NzQyOS0uMDYzMDI0LjExOTY2OC0uMTEzMjgxLjE2OTkyMmwtOC4wNDg4MjggOC4wNTA3ODFjLS4zNzE2NTkuMzcxNjM4LS45NzIwOTEuMzcxNjM4LTEuMzQzNzUgMGwtOC4wNDg4MjgxLTguMDUwNzgxYy0uMDUwMjU2Ni0uMDUwMjU0LS4wNzY2MTYzLS4xMTI0OTMtLjExMzI4MTMtLjE2OTkyMnptMjIuMDAwMDAwNCAwYy0uMjMzNDk4LjM2NzEyMS0uMjA3NzIxLjg0ODkzOC4xMTMyODEgMS4xNjk5MjJsOC4wNDg4MjggOC4wNTA3ODFjLjM3MTY1OS4zNzE2MzguOTcyMDkxLjM3MTYzOCAxLjM0Mzc1IDBsOC4wNDg4MjgtOC4wNTA3ODFjLjMyMTAwNC0uMzIwOTg0LjM0Njc4LS44MDI4MDEuMTEzMjgxLTEuMTY5OTIyLS4wMzY2NjUuMDU3NDI5LS4wNjMwMjQuMTE5NjY4LS4xMTMyODEuMTY5OTIybC04LjA0ODgyOCA4LjA1MDc4MWMtLjM3MTY1OS4zNzE2MzgtLjk3MjA5MS4zNzE2MzgtMS4zNDM3NSAwbC04LjA0ODgyOC04LjA1MDc4MWMtLjA1MDI1Ny0uMDUwMjU0LS4wNzY2MTYtLjExMjQ5My0uMTEzMjgxLS4xNjk5MjJ6bS0yMi4wMDAwMDA0IDIyYy0uMjMzNDk3OS4zNjcxMjEtLjIwNzcyMTUuODQ4OTM4LjExMzI4MTMgMS4xNjk5MjJsOC4wNDg4MjgxIDguMDUwNzgxYy4zNzE2NTkuMzcxNjM4Ljk3MjA5MS4zNzE2MzggMS4zNDM3NSAwbDguMDQ4ODI4LTguMDUwNzgxYy4zMjEwMDQtLjMyMDk4NC4zNDY3OC0uODAyODAxLjExMzI4MS0xLjE2OTkyMi0uMDM2NjY1LjA1NzQyOS0uMDYzMDI0LjExOTY2OC0uMTEzMjgxLjE2OTkyMmwtOC4wNDg4MjggOC4wNTA3ODFjLS4zNzE2NTkuMzcxNjM4LS45NzIwOTEuMzcxNjM4LTEuMzQzNzUgMGwtOC4wNDg4MjgxLTguMDUwNzgxYy0uMDUwMjU2Ni0uMDUwMjU0LS4wNzY2MTYzLS4xMTI0OTMtLjExMzI4MTMtLjE2OTkyMnptMjIuMDAwMDAwNCAwYy0uMjMzNDk4LjM2NzEyMS0uMjA3NzIxLjg0ODkzOC4xMTMyODEgMS4xNjk5MjJsOC4wNDg4MjggOC4wNTA3ODFjLjM3MTY1OS4zNzE2MzguOTcyMDkxLjM3MTYzOCAxLjM0Mzc1IDBsOC4wNDg4MjgtOC4wNTA3ODFjLjMyMTAwNC0uMzIwOTg0LjM0Njc4LS44MDI4MDEuMTEzMjgxLTEuMTY5OTIyLS4wMzY2NjUuMDU3NDI5LS4wNjMwMjQuMTE5NjY4LS4xMTMyODEuMTY5OTIybC04LjA0ODgyOCA4LjA1MDc4MWMtLjM3MTY1OS4zNzE2MzgtLjk3MjA5MS4zNzE2MzgtMS4zNDM3NSAwbC04LjA0ODgyOC04LjA1MDc4MWMtLjA1MDI1Ny0uMDUwMjU0LS4wNzY2MTYtLjExMjQ5My0uMTEzMjgxLS4xNjk5MjJ6IiBvcGFjaXR5PSIuMTUiLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"kdiamond,kdiamond\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"kdiamond.kdiamond\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"kDiamond\"\nLABEL oc.displayname=\"kDiamond\"\nLABEL oc.path=\"/usr/games/kdiamond\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kDiamond\"\nENV APPBIN \"/usr/games/kdiamond\"\nENV APP \"/usr/games/kdiamond\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kdiamond/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kdiamond/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kdiamond/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kdiamond/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kgeography\nLABEL oc.icon=\"kgeography.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB5Mj0iMTUuODI3IiB4Mj0iMTAuNDY3IiB5MT0iNDIuNTI2IiB4MT0iMTAuNzk1IiBpZD0iMCI+PHN0b3Agc3RvcC1jb2xvcj0iIzE5N2NmMSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzIwYmNmYSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeTE9IjQyLjQ3NSIgeDI9IjAiIHkyPSIyOC44OTkiPjxzdG9wIHN0b3AtY29sb3I9IiNjNTI4MjgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZjU0NTQiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjAyMTIxIDAgMCAxLjAyMTIxLS4wNC0uMzY2KSI+PHBhdGggZD0ibS0xLjM0NiAxNS40NThoMjIuODA4Yy44OTYgMCAxLjYxOC43NDcgMS42MTggMS42NzR2MjMuNTk3YzAgLjkyNy0uNzIyIDEuNjc0LTEuNjE4IDEuNjc0aC0yMi44MDhjLS44OTYgMC0xLjYxOC0uNzQ3LTEuNjE4LTEuNjc0di0yMy41OTdjMC0uOTI3LjcyMi0xLjY3NCAxLjYxOC0xLjY3NCIgZmlsbD0idXJsKCMwKSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjc3MzU2IDAgMCAxLjcxNDI2IDYuMTA4LTI1Ljk4NikiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz48cGF0aCBkPSJtMTEuNDA2IDYuNDY5bC4zNS0uMzcxaDIuMDk2bC43NTkuNjcyLS4wNDYgMS4wNDYuNjQuNTg4LS41MzIuMzgxLjExOSAxLjM3NS0xLjkgMi4zMDN2Mi4xNjNsMS4wMTguNDkzdjEuOTQybC45ODcgMS42NjkuNzg3LjExOS4xMDEtLjU3NC0uOTMxLTEuNDQ1LS4xODUtMS40MDdoLjU1M2wuMjM0IDEuNDQ5IDEuMzU4IDEuOTgxLS4zNjQuNjMzLjg3MSAxLjMyNiAyLjE0OS41MzJ2LS4zNWwuODU3LjEyMi0uMDc3LjYxNmMuNzU2LjEyMi41MjUuMDczIDEuNzE1LjQwMmwxLjQ3IDEuNjc2IDEuODc2LjE0My4xODIgMS41MzMtMS4yODguOTAzLS4wNjMgMS4zNjEtLjE3OC44NCAxLjg1NSAyLjMyNC4xNDMuNzk4YzAgMCAuNjc1LjE4Mi43NDkuMTgyLjA4IDAgMS41MTUgMS4wOTIgMS41MTUgMS4wOTJ2NC4xOTJsLjUxMS4xNS0uMzU3IDEuOTI1Ljg2MSAxLjEzNy0uMTU0IDEuOTI1IDEuMTMgMS45OTEgMS40NTYgMS4yNjcgMS40NTYuMDMyLjE0Ny0uNDY5LTEuMDcxLS45MDZjLjA4LS41NTMuMDI1LS4zNDMuMjU5LTEuMDFsLjA0Mi0uNTQ5LS43MzEtLjAyNS0uMzc0LS40NTUuNjA1LS41ODQuMDg0LS40MzQtLjY3NS0uMTg5LjAzOC0uNDEzLjk1OS0uMTQzIDEuNDU5LS42OTZjLjY1NC0xLjIuOTc2LTEuNTIyIDIuMDIzLTIuODU5bC0uMzUtMS41MjkuNDY5LS44MTUgMS40MDcuMDM1Ljk0NS0uNzM4LjMwOC0yLjk2MSAxLjA1LTEuMzQ0LjE4OS0uODUtLjk2Mi0uMzExLS42My0xLjAzNi0yLjE2Ni0uMDI0LTEuNzE1LS42NTQtLjA4LTEuMjI4LS41NzQtLjk5Ny0xLjU0LS4wMjEtLjg5OS0xLjQxLS43OTgtLjM3OC0uMDQyLjQyLTEuNDQ1LjA5MS0uNTMyLS43MzUtMS41MTUtLjMwOC0xLjI0NiAxLjQzMS0xLjk1Ni0uMzI5LS4xNDMtMi4yMDgtMS40MzEtLjI0NS41NzQtMS4wODgtLjE2NC0uNjEyLTEuODcyIDEuMjU2LTEuMTc5LS4xNDMtLjQzLS45MzFjLjMyMi0xLjE3Mi4xMjktLjcxLjkxNy0yLjE1NmwxLjQ5OC0uNzYzaDIuODk4bC0uMDA3Ljg4MiAxLjA0My40OS0uMDg0LTEuNTA4Yy43OTgtLjgwMS41NTYtLjYyNiAyLjI2NC0xLjc1bC4wOTgtLjY5NiAxLjUxNS0xLjU3NSAxLjYxLS44ODUtLjE0My0uMTE1IDEuMDg1LTEuMDI1LjQwMi4xMDUuMTg1LjIzMS40MTMtLjQ2Mi4wOTQtLjA0OWMtLjU0Ni0uMDczLS4zNS0uMDI0LS45MDMtLjIxM3YtLjQ0NGwuMjQxLS4xOTloLjUzOWwuMjQ4LjEwOC4yMS40MjcuMjU5LS4wMzh2LS4wMjRsLjA3Ny4wMjEuNzQ5LS4xMTkuMTA1LS4zNjcuNDIuMTA1di4zOTVsLS4zOTUuMjc2LjA1OS40NDEgMS4zNjguNDJjMCAwIC4wMDMuMDA3LjAwMy4wMTRsLjMxMS0uMDI0LjAyMS0uNTg4LTEuMDgxLS40OTMtLjA2My0uMjkuODk2LS4zMDguMDM4LS44NS0uOTM0LS41NzQtLjA2My0xLjQ0NS0xLjI5NS42M2gtLjQ2OWwuMTI2LTEuMTAyLTEuNzQzLS40MTYtLjcyOC41NDZ2MS42NzZsLTEuMzAyLjQwNi0uNTI1IDEuMDkyLS41NjMuMDg3di0xLjM4OWwtMS4yMjEtLjE3NS0uNjEyLS4zOTUtLjI0OC0uODk5IDIuMTkxLTEuMjg0IDEuMDcxLS4zMjUuMTA1LjcxNy42MDItLjAyOC4wNDktLjM2NC42MjMtLjA4Ny4wMDctLjEyMi0uMjYyLS4xMTItLjA2My0uMzgxLjc2Ni0uMDY2LjQ2Mi0uNDgzLjAzNS0uMDM1di4wMDRsLjE0My0uMTQ3IDEuNjEzLS4yMDMuNzEuNjA1LTEuODc2Ljk5NyAyLjM4My41Ni4zMDQtLjc5OGgxLjA0NmwuMzY0LS42OTMtLjczMS0uMTgydi0uODc1bC0yLjMwNi0xLjAyMi0xLjU5Mi4xODItLjkwMy40NjkuMDcgMS4xNDQtLjk0MS0uMTQzLS4xNDMtLjYzLjg4OS0uODE1LTEuNjI0LS4wODQtLjQ2OS4xMzYtLjIxLjU1My42MTYuMTA1LS4xMjYuNjEyLTEuMDM2LjA2My0uMTY0LjQwMi0xLjUxOS4wNDJjMCAwLS4wMzUtLjg1Ny0uMDk0LS44NTctLjA2MyAwIDEuMTgzLS4wMTcgMS4xODMtLjAxN2wuODk5LS44NzgtLjQ5LS4yNDgtLjY1NC42MzctMS4wODUtLjA1OS0uNjQ3LS44OTloLTEuMzg5bC0xLjQ1MiAxLjA4NWgxLjMzbC4xMjIuMzg4LS4zNS4zMjUgMS40Ny4wNDIuMjI3LjUzMi0xLjY1NS0uMDY2LS4wOC0uNDA5LTEuMDM5LS4yMjctLjU1My0uMzAxLTIuNDUuMDI0LS43NTIuNzMxLS41MTQtLjA0Mi0uNTctLjMzMi0xLjY5NC0uNTA0aC0zLjEwMWwtMS43OTUgMS4yMjEtMS4yMDQuMTg1LS41NTMuNDMuODU3LjEyNnYuMzQzaC0xLjgzbC0uNzE3LjUxMS45MTcuNzc3IDIuNTA5LjAyMW0xNS40NjggNi4xMTdoLS43OGwuMTIyLS41MzIuMzY3LS4wMzkuMDg0LS4xODIuNTYtLjA3N3YuNDc2aC4wMDNsLS4zNTcuMzUzbS41NDMtMS4zMTZsLS4zNjcuMjM4LS40NjIuMDhjMCAwIDAtLjcyOCAwLS44MDVoLjgyOXYuNDg2bS42OTYtLjU2M2wuMzc4LjIzMS0uMzA0LjI0OC0uMjktLjI0OC4yMTctLjIzMW0tLjQ5Ny42MDloLjA1OWwuOTM4LjI3M3YuNDc5aC0uNzg3bC0uMjEtLjMwOGMwIDAgMC0uNDQ0IDAtLjQ0NG0tLjYwOS0xLjMxNmwuNTA3LjQ2Mi0uNTA3LjEyMnYtLjU4NG0tMi4xNDkuMDc3bC43MDctLjI5aC45Njl2LjI5aC4yMXYuNTA3aC0xLjQ3N2wtLjU0Ni0uMTUuMTM2LS4zNTdtLS4xMzMgMS4zMTZsLjU2LS42MDloLjgxMmwtMS4wMzkgMS40NTItLjQzNC0uMjMxLjEwMS0uNjEybS0uNzUyLTMuNDU4bC41NzcuMTMzLS4xOTkuNzg0LS42MjMuMjAzLS4zOTItLjgxNS42MzctLjMwNG0tMi45MDUtMy43MDN2LS4wNDVoLjUzNWwuMDQ5LS4xODVoLjg3OHYuMzg1bC0uMjU5LjMzMmgtMS4yMDR2LS40ODZ6bS44NSAxLjE5M2MwIDAgLjUzOS0uMDk0LjU4MS0uMDk0LjA0MiAwIDAgLjUzOSAwIC41MzlsLTEuMjA3LjA3Ny0uMjI3LS4yNzMuODU0LS4yNDgiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjg1MSIvPjxnIHRyYW5zZm9ybT0ibWF0cml4KDEuNTcyNjcgMCAwIDEuNTcyNjctMTQuMTQtMjEuMTQpIj48Y2lyY2xlIGN5PSIzNS44NTgiIGN4PSIxNi42MTQiIHI9IjcuNjAxIiBmaWxsPSJ1cmwoIzEpIi8+PHBhdGggZD0ibTE2LjQ5OCAzMS4zODhjLTEuODA5IDAtMy4yNzUgMS40NjYtMy4yNzUgMy4yNzUgMCAuMTM4LjAxMS4yNzMuMDI4LjQwNy4yOCAyLjU1OCAzLjAzNSA1LjUwNyAzLjAzNSA1LjUwNy4wNDkuMDU1LjA5Ni4wODkuMTQyLjExM2guMDAybC4wOTIuMDI5LjA5Mi0uMDI5aC4wMDJjLjA0Ni0uMDI1LjA5My0uMDYuMTQyLS4xMTMgMCAwIDIuNzE1LTIuOTU0IDIuOTg4LTUuNTEzLjAxNi0uMTMyLjAyNy0uMjY2LjAyNy0uNDAyIDAtMS44MDgtMS40NjYtMy4yNzUtMy4yNzUtMy4yNzVtMCA1LjM4MmMtMS4xNjEgMC0yLjEwNy0uOTQ1LTIuMTA3LTIuMTA3IDAtMS4xNjEuOTQ1LTIuMTA3IDIuMTA3LTIuMTA3IDEuMTYxIDAgMi4xMDYuOTQ1IDIuMTA2IDIuMTA3IDAgMS4xNjEtLjk0NSAyLjEwNy0yLjEwNiAyLjEwNyIgZmlsbD0iI2ZhZmFmYSIgZmlsbC1vcGFjaXR5PSIuOTAzIiBzdHJva2Utd2lkdGg9IjEuMzE3Ii8+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"kgeography,kgeography,geography\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kgeography.desktop\"\nLABEL oc.launch=\"kgeography.kgeography\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Kgeography\"\nLABEL oc.displayname=\"Kgeography\"\nLABEL oc.path=\"/usr/bin/kgeography\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Kgeography\"\nENV APPBIN \"/usr/bin/kgeography\"\nENV APP \"/usr/bin/kgeography\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kgeography/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kgeography/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kgeography/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kgeography/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.kigo /composer/init.d/init.kigo\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 dbus-user-session gnugo kigo && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"kigo.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQ4IDQ4LjAwMDAwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTAxIiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyLjg3NzllLTE1IiB5Mj0iNi4xMjMyZS0xNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjojODJiMzM5IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzhkYzEzZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMy45NDllLTUpIj4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHptMCAwLjV2MC41YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC41YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgc3R5bGU9Im9wYWNpdHk6LjAyIi8+CiAgPHBhdGggZD0ibTEgNDMuMjV2MC4yNWMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTAuMjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMDUiLz4KICA8cGF0aCBkPSJtMSA0M3YwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIHN0eWxlPSJvcGFjaXR5Oi4xIi8+CiA8L2c+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSgtOTApIiB4PSItNDciIHk9IjEiIHdpZHRoPSI0NiIgaGVpZ2h0PSI0NiIgcng9IjQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0NTAxKSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTEwMDQuNCkiPgogICA8cGF0aCBkPSJtMSAxMDQzLjR2NGMwIDIuMjE2IDEuNzg0IDQgNCA0aDM4YzIuMjE2IDAgNC0xLjc4NCA0LTR2LTRjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBzdHlsZT0ib3BhY2l0eTouMSIvPgogIDwvZz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSkiPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLDEpIj4KICAgIDxnIHN0eWxlPSJvcGFjaXR5Oi4xIj4KICAgICA8cGF0aCBkPSJtMjMgMzAuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIvPgogICAgIDxwYXRoIGQ9Im0zNiAzMC41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41Ii8+CiAgICAgPHBhdGggZD0ibTIzIDE3LjVjMCAzLjAzOS0yLjQ2MSA1LjUtNS41IDUuNXMtNS41LTIuNDYxLTUuNS01LjUgMi40NjEtNS41IDUuNS01LjUgNS41IDIuNDYxIDUuNSA1LjUiLz4KICAgICA8cGF0aCBkPSJtMzYgMTcuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogIDxwYXRoIGQ9Im0yMyAzMC41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41IiBzdHlsZT0iZmlsbDojMmQyZDJkIi8+CiAgPHBhdGggZD0ibTM2IDMwLjVjMCAzLjAzOS0yLjQ2MSA1LjUtNS41IDUuNXMtNS41LTIuNDYxLTUuNS01LjUgMi40NjEtNS41IDUuNS01LjUgNS41IDIuNDYxIDUuNSA1LjUiIHN0eWxlPSJmaWxsOiNmOWY5ZjkiLz4KICA8cGF0aCBkPSJtMjMgMTcuNWMwIDMuMDM5LTIuNDYxIDUuNS01LjUgNS41cy01LjUtMi40NjEtNS41LTUuNSAyLjQ2MS01LjUgNS41LTUuNSA1LjUgMi40NjEgNS41IDUuNSIgc3R5bGU9ImZpbGw6I2Y5ZjlmOSIvPgogIDxwYXRoIGQ9Im0zNiAxNy41YzAgMy4wMzktMi40NjEgNS41LTUuNSA1LjVzLTUuNS0yLjQ2MS01LjUtNS41IDIuNDYxLTUuNSA1LjUtNS41IDUuNSAyLjQ2MSA1LjUgNS41IiBzdHlsZT0iZmlsbDojMmQyZDJkIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"kigo,go,kigo,gnugo\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.kde.kigo.desktop\"\nLABEL oc.launch=\"kigo.kigo\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"kigo\"\nLABEL oc.displayname=\"kigo\"\nLABEL oc.path=\"/usr/games/kigo\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-go-sgf;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kigo\"\nENV APPBIN \"/usr/games/kigo\"\nENV APP \"/usr/games/kigo\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kigo/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kigo/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kigo/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kigo/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends breeze-icon-theme dbus-x11 dbus-user-session klickety && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"klickety.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6bnMxPSJodHRwOi8vc296aS5iYWllcm91Z2UuZnIiCiAgICB4bWxuczpjYz0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvIgogICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgICBpZD0ic3ZnMSIKICAgIHNvZGlwb2RpOmRvY25hbWU9ImtsaWNrZXR5LnN2ZyIKICAgIHZpZXdCb3g9IjAgMCA2MCA2MCIKICAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgICBfU1ZHRmlsZV9fZmlsZW5hbWU9Im9sZHNjYWxlL2FwcHMva2xpY2tldHkuc3ZnIgogICAgdmVyc2lvbj0iMS4wIgogICAgeT0iMCIKICAgIHg9IjAiCiAgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQwIgogICAgc29kaXBvZGk6ZG9jYmFzZT0iL2hvbWUvZGFubnkvd29yay9mbGF0L1NWRy9tb25vL3NjYWxhYmxlL2FwcHMiCiAgPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICAgaWQ9ImJhc2UiCiAgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI2OTkiCiAgICAgIGlua3NjYXBlOnpvb209IjUuMzE1Nzc5NSIKICAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMSIKICAgICAgaW5rc2NhcGU6Y3g9IjU0LjcwNjc3MSIKICAgICAgaW5rc2NhcGU6Y3k9IjIwLjY3MTY0MyIKICAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMDI0IgogICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogIC8+CiAgPHBhdGgKICAgICAgaWQ9InBhdGgxMTAwIgogICAgICBzdHlsZT0ic3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTojZmZmZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS13aWR0aDo4LjEyNTtmaWxsOm5vbmUiCiAgICAgIGQ9Im0xMC4wNTEgNC42ODcydjUwLjYyNmgzOS44OTh2LTUwLjYyNiIKICAvPgogIDxnCiAgICAgIGlkPSJnMTA4MSIKICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjkzMTU4IDAgMCAuOTMxNTggMi4xNzI2IDEuOTMyMykiCiAgICA+CiAgICA8cmVjdAogICAgICAgIGlkPSJyZWN0OTMxIgogICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6My4xMjU7ZmlsbDojZmZmZmZmIgogICAgICAgIHJ4PSIxLjYxMzQiCiAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS45MzgyIC0uMzU5ODkpIgogICAgICAgIGhlaWdodD0iNTQuNzA0IgogICAgICAgIHdpZHRoPSI0My4wMDciCiAgICAgICAgeT0iMi45NTcyIgogICAgICAgIHg9IjIuNTE5MiIKICAgIC8+CiAgICA8cGF0aAogICAgICAgIGlkPSJwYXRoOTMyIgogICAgICAgIHN0eWxlPSJzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjMuMzU0NTtmaWxsOm5vbmUiCiAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjM1OTg5KSIKICAgICAgICBkPSJtOC40NTc1IDMuMzE3MXY1NC4zNDRoNDIuODI4bC0wLjAwMS01NC4zNDQiCiAgICAvPgogICAgPGcKICAgICAgICBpZD0iZzk0NSIKICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSguMDI3MzEwKSIKICAgICAgPgogICAgICA8ZwogICAgICAgICAgaWQ9Imc5MzIiCiAgICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTMzIgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTgzNDtmaWxsOiMwMDAwMDAiCiAgICAgICAgICAgIGQ9Im0xMi42OTYgNDUuNjA0Yy0wLjU1NCAwLTEgMC40NDYtMSAxdjYuODE4YzAgMC41NTQgMC40NDYgMSAxIDFoNi44MThjMC41NTQgMCAxLTAuNDQ2IDEtMXYtNi44MThjMC0wLjU1NC0wLjQ0Ni0xLTEtMWgtNi44MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxNDggMCAwIDEuMDE0OCAuMDE2NDYxIC0xLjE3MjcpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5MzQiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45ODM0O2ZpbGw6IzAwMDAwMCIKICAgICAgICAgICAgZD0ibTIzLjUwNiA0NS4yNDRjLTAuNTU0IDAtMSAwLjQ0Ni0xIDF2Ni44MThjMCAwLjU1NCAwLjQ0NiAxIDEgMWg2LjgxOGMwLjU1NCAwIDEtMC40NDYgMS0xdi02LjgxOGMwLTAuNTU0LTAuNDQ2LTEtMS0xaC02LjgxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDE0OCAwIDAgMS4wMTQ4IC0xLjk5MjIgLS44MDc1MikiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDkzNSIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk4MzQ7ZmlsbDojMDAwMDAwIgogICAgICAgICAgICBkPSJtMzQuMTM2IDQ1LjI0NGMtMC41NTQgMC0xIDAuNDQ2LTEgMXY2LjgxOGMwIDAuNTU0IDAuNDQ2IDEgMSAxaDYuODE4YzAuNTU0IDAgMS0wLjQ0NiAxLTF2LTYuODE4YzAtMC41NTQtMC40NDYtMS0xLTFoLTYuODE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTQ4IDAgMCAxLjAxNDggLTMuODE4MiAtLjgwNzUyKSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTM3IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im0yMy41MyA0NS4xMDVjLTAuNTYyIDAtMS4wMTQgMC40NTMtMS4wMTQgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MiAxLjAxNSAxLjAxNCAxLjAxNWg2LjkxOGMwLjU2MyAwIDEuMDE1LTAuNDUzIDEuMDE1LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUyLTEuMDE1LTEuMDE1LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgMSAwIC02LjA3MDggNzYuNTMyKSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTM4IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im0zMi40OTEgNDUuMTA1Yy0wLjU2MiAwLTEuMDE1IDAuNDUzLTEuMDE1IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTMgMS4wMTUgMS4wMTUgMS4wMTVoNi45MThjMC41NjIgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1My0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwIC0xIDEgMCAtNi4wNzA4IDc2LjUzMikiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDkzOSIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAxMjc7ZmlsbDojZmZmZmZmIgogICAgICAgICAgICBkPSJtNDEuNDUyIDQ1LjEwNWMtMC41NjIgMC0xLjAxNSAwLjQ1My0xLjAxNSAxLjAxNXY2LjkxOGMwIDAuNTYyIDAuNDUzIDEuMDE1IDEuMDE1IDEuMDE1aDYuOTE4YzAuNTYyIDAgMS4wMTUtMC40NTMgMS4wMTUtMS4wMTV2LTYuOTE4YzAtMC41NjItMC40NTMtMS4wMTUtMS4wMTUtMS4wMTVoLTYuOTE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAtMSAxIDAgLTYuMDcwOCA3Ni41MzIpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDAiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibS00NC4wNCAyOC40MDRjLTAuNTYzIDAtMS4wMTUgMC40NTMtMS4wMTUgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MiAxLjAxNSAxLjAxNSAxLjAxNWg2LjkxOGMwLjU2MiAwIDEuMDE0LTAuNDUzIDEuMDE0LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUyLTEuMDE1LTEuMDE0LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgLTEgMSAwIDEuNDM5NiAwKSIKICAgICAgICAvPgogICAgICA8L2cKICAgICAgPgogICAgICA8ZwogICAgICAgICAgaWQ9Imc5NDAiCiAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtLjMyMzQ0KSIKICAgICAgICA+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDEiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibTEyLjkgMTMuMjE1Yy0wLjU2MiAwLTEuMDE0IDAuNDUzLTEuMDE0IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTIgMS4wMTUgMS4wMTQgMS4wMTVoNi45MThjMC41NjMgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1Mi0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTh6IgogICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwIDEgLTEgMCAzNC4zNzIgLTYuOTExNSkiCiAgICAgICAgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgICBpZD0icmVjdDk0MiIKICAgICAgICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAxMjc7ZmlsbDojZmZmZmZmIgogICAgICAgICAgICBkPSJtMjEuODYxIDEzLjIxNWMtMC41NjIgMC0xLjAxNSAwLjQ1My0xLjAxNSAxLjAxNXY2LjkxOGMwIDAuNTYyIDAuNDUzIDEuMDE1IDEuMDE1IDEuMDE1aDYuOTE4YzAuNTYyIDAgMS4wMTUtMC40NTMgMS4wMTUtMS4wMTV2LTYuOTE4YzAtMC41NjItMC40NTMtMS4wMTUtMS4wMTUtMS4wMTVoLTYuOTE4eiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIC0xIDAgMzQuMzcyIC02LjkxMTUpIgogICAgICAgIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgaWQ9InJlY3Q5NDMiCiAgICAgICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6Mi4wMTI3O2ZpbGw6I2ZmZmZmZiIKICAgICAgICAgICAgZD0ibTMwLjgyMiAxMy4yMTVjLTAuNTYyIDAtMS4wMTUgMC40NTMtMS4wMTUgMS4wMTV2Ni45MThjMCAwLjU2MiAwLjQ1MyAxLjAxNSAxLjAxNSAxLjAxNWg2LjkxOGMwLjU2MiAwIDEuMDE1LTAuNDUzIDEuMDE1LTEuMDE1di02LjkxOGMwLTAuNTYyLTAuNDUzLTEuMDE1LTEuMDE1LTEuMDE1aC02LjkxOHoiCiAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAgMSAtMSAwIDM0LjM3MiAtNi45MTE1KSIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgIGlkPSJyZWN0OTQ0IgogICAgICAgICAgICBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjIuMDEyNztmaWxsOiNmZmZmZmYiCiAgICAgICAgICAgIGQ9Im01Ljk4ODktMzEuNzg3Yy0wLjU2MjIgMC0xLjAxNDcgMC40NTMtMS4wMTQ3IDEuMDE1djYuOTE4YzAgMC41NjIgMC40NTI1IDEuMDE1IDEuMDE0NyAxLjAxNWg2LjkxODFjMC41NjIgMCAxLjAxNS0wLjQ1MyAxLjAxNS0xLjAxNXYtNi45MThjMC0wLjU2Mi0wLjQ1My0xLjAxNS0xLjAxNS0xLjAxNWgtNi45MTgxeiIKICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCAxIC0xIDAgLTEuMjU5NiAwKSIKICAgICAgICAvPgogICAgICA8L2cKICAgICAgPgogICAgPC9nCiAgICA+CiAgPC9nCiAgPgogIDxtZXRhZGF0YQogICAgPgogICAgPHJkZjpSREYKICAgICAgPgogICAgICA8Y2M6V29yawogICAgICAgID4KICAgICAgICA8ZGM6Zm9ybWF0CiAgICAgICAgICA+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0CiAgICAgICAgPgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiCiAgICAgICAgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi8iCiAgICAgICAgLz4KICAgICAgICA8ZGM6cHVibGlzaGVyCiAgICAgICAgICA+CiAgICAgICAgICA8Y2M6QWdlbnQKICAgICAgICAgICAgICByZGY6YWJvdXQ9Imh0dHA6Ly9vcGVuY2xpcGFydC5vcmcvIgogICAgICAgICAgICA+CiAgICAgICAgICAgIDxkYzp0aXRsZQogICAgICAgICAgICAgID5PcGVuY2xpcGFydDwvZGM6dGl0bGUKICAgICAgICAgICAgPgogICAgICAgICAgPC9jYzpBZ2VudAogICAgICAgICAgPgogICAgICAgIDwvZGM6cHVibGlzaGVyCiAgICAgICAgPgogICAgICA8L2NjOldvcmsKICAgICAgPgogICAgICA8Y2M6TGljZW5zZQogICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9wdWJsaWNkb21haW4vIgogICAgICAgID4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1JlcHJvZHVjdGlvbiIKICAgICAgICAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjRGlzdHJpYnV0aW9uIgogICAgICAgIC8+CiAgICAgICAgPGNjOnBlcm1pdHMKICAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNEZXJpdmF0aXZlV29ya3MiCiAgICAgICAgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"klickety,klickety\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"klickety.klickety\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Klickety\"\nLABEL oc.displayname=\"Klickety\"\nLABEL oc.path=\"/usr/games/klickety\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Klickety\"\nENV APPBIN \"/usr/games/klickety\"\nENV APP \"/usr/games/klickety\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/klickety/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/klickety/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/klickety/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/klickety/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-klotski && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-klotski.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzgiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYuOTMzIDE2LjkzMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcyBpZD0iZGVmczE4Ij4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA1OCI+CiAgIDxzdG9wIGlkPSJzdG9wMTA1NCIgc3RvcC1jb2xvcj0iIzEzNmRlMiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wMTA1NiIgc3RvcC1jb2xvcj0iIzI2YmJjZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA0MiI+CiAgIDxzdG9wIGlkPSJzdG9wMTAzOCIgc3RvcC1jb2xvcj0iI2ZmYjYzNiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wMTA0MCIgc3RvcC1jb2xvcj0iI2VlZWQ1MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjIiIHN0ZERldmlhdGlvbj0iMC4yMzgxMjAzMiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjkuMjYwMyIgeDI9IjkuMjYwMyIgeTE9Ii0uMjYyNDkiIHkyPSIxNS42MTIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS43OTM4NCAuNzkxNjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wNSIgc3RvcC1jb2xvcj0iIzJlMzIzZSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIGlkPSJzdG9wNyIgc3RvcC1jb2xvcj0iIzUwNTY2NCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXIxMDMyIiB4PSItLjA2IiB5PSItLjA2IiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgaWQ9ImZlR2F1c3NpYW5CbHVyMTAzNCIgc3RkRGV2aWF0aW9uPSIwLjYiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA0NCIgeDE9IjM4LjgzOCIgeDI9IjM4Ljg3NSIgeTE9IjMxLjgyOSIgeTI9IjE1LjU5OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNDIiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA1MiIgeDE9IjE2IiB4Mj0iMzEuMzU5IiB5MT0iMzkuMDQiIHkyPSIzOS4wNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNDIiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA2MCIgeDE9IjI5LjkxOSIgeDI9IjI5Ljk3NSIgeTE9IjM0Ljc2NyIgeTI9IjI1LjMzOSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDEwNTgiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTA2OCIgeDE9IjE3LjQ0MyIgeDI9IjE3LjcxIiB5MT0iMjIuNTAyIiB5Mj0iMTMuNDk4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTA1OCIvPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlMjAiIGN4PSI4LjQ2NjUiIGN5PSI4LjQ2NjUiIHI9IjcuOTM3MyIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjk2Mjk5IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPGNpcmNsZSBpZD0iY2lyY2xlMjIiIGN4PSI4LjQ2NjUiIGN5PSI4LjQ2NjUiIHI9IjcuOTM3MyIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIuOTYyOTkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+CiA8ZyBpZD0iZzMzIiB0cmFuc2Zvcm09Im1hdHJpeCguMzM4NjYgMCAwIC4zMzg2NiAuNTA3OTkgLjUwNzk5KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjEwMzIpIiBvcGFjaXR5PSIuMjUiPgogIDxwYXRoIGlkPSJwYXRoMjEiIGQ9Im0xNS4zMzIgMTRoNS4zMzZjMC43MzQgMCAxLjMzMiAwLjU5OCAxLjMzMiAxLjMzMnY1LjMzNmMwIDAuNzM0LTAuNTk4IDEuMzMyLTEuMzMyIDEuMzMyaC01LjMzNmMtMC43MzQgMC0xLjMzMi0wLjU5OC0xLjMzMi0xLjMzMnYtNS4zMzZjMC0wLjczNCAwLjU5OC0xLjMzMiAxLjMzMi0xLjMzMiIvPgogIDxwYXRoIGlkPSJwYXRoMjMiIGQ9Im0yNy4zMzIgMjZoNS4zMzZjMC43MzggMCAxLjMzMiAwLjU5OCAxLjMzMiAxLjMzMnY1LjMzNmMwIDAuNzM4LTAuNTk0IDEuMzMyLTEuMzMyIDEuMzMyaC01LjMzNmMtMC43MzQgMC0xLjMzMi0wLjU5NC0xLjMzMi0xLjMzMnYtNS4zMzZjMC0wLjczNCAwLjU5OC0xLjMzMiAxLjMzMi0xLjMzMiIvPgogIDxwYXRoIGlkPSJwYXRoMjUiIGQ9Im0xNCAyNGMtMS4xMDkgMC0yIDAuODkxLTIgMnY4YzAgMS4xMDkgMC44OTEgMiAyIDJoOGMxLjEwOSAwIDItMC44OTEgMi0ydi04YzAtMS4xMDktMC44OTEtMi0yLTJtLTggMWg4YzAuNTU1IDAgMSAwLjQ0NSAxIDF2OGMwIDAuNTU1LTAuNDQ1IDEtMSAxaC04Yy0wLjU1NSAwLTEtMC40NDUtMS0xdi04YzAtMC41NTUgMC40NDUtMSAxLTEiLz4KICA8cGF0aCBpZD0icGF0aDI3IiBkPSJtMTUgMjZoNmMwLjU1MSAwIDEgMC40NDkgMSAxdjZjMCAwLjU1MS0wLjQ0OSAxLTEgMWgtNmMtMC41NTEgMC0xLTAuNDQ5LTEtMXYtNmMwLTAuNTUxIDAuNDQ5LTEgMS0xIi8+CiAgPHBhdGggaWQ9InBhdGgyOSIgZD0ibTI2IDEyYy0xLjEwOSAwLTIgMC44OTEtMiAydjhjMCAxLjEwOSAwLjg5MSAyIDIgMmg4YzEuMTA5IDAgMi0wLjg5MSAyLTJ2LThjMC0xLjEwOS0wLjg5MS0yLTItMm0tOCAxaDhjMC41NTUgMCAxIDAuNDQ1IDEgMXY4YzAgMC41NTUtMC40NDUgMS0xIDFoLThjLTAuNTU1IDAtMS0wLjQ0NS0xLTF2LThjMC0wLjU1NSAwLjQ0NS0xIDEtMSIvPgogIDxwYXRoIGlkPSJwYXRoMzEiIGQ9Im0yNyAxNGg2YzAuNTUxIDAgMSAwLjQ0OSAxIDF2NmMwIDAuNTUxLTAuNDQ5IDEtMSAxaC02Yy0wLjU1MSAwLTEtMC40NDktMS0xdi02YzAtMC41NTEgMC40NDktMSAxLTEiLz4KIDwvZz4KIDxnIGlkPSJnNTkiIHRyYW5zZm9ybT0ibWF0cml4KC4zMzg2NiAwIDAgLjMzODY2IC4xNjkzMyAuMTY5MzMpIj4KICA8ZyBpZD0iZzU3Ij4KICAgPGcgaWQ9Imc1NSI+CiAgICA8cGF0aCBpZD0icGF0aDQzIiBkPSJtMTUuMzMyIDE0aDUuMzM2YzAuNzM0IDAgMS4zMzIgMC41OTggMS4zMzIgMS4zMzJ2NS4zMzZjMCAwLjczNC0wLjU5OCAxLjMzMi0xLjMzMiAxLjMzMmgtNS4zMzZjLTAuNzM0IDAtMS4zMzItMC41OTgtMS4zMzItMS4zMzJ2LTUuMzM2YzAtMC43MzQgMC41OTgtMS4zMzIgMS4zMzItMS4zMzIiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQxMDY4KSIvPgogICAgPHBhdGggaWQ9InBhdGg0NSIgZD0ibTI3LjMzMiAyNmg1LjMzNmMwLjczOCAwIDEuMzMyIDAuNTk4IDEuMzMyIDEuMzMydjUuMzM2YzAgMC43MzgtMC41OTQgMS4zMzItMS4zMzIgMS4zMzJoLTUuMzM2Yy0wLjczNCAwLTEuMzMyLTAuNTk0LTEuMzMyLTEuMzMydi01LjMzNmMwLTAuNzM0IDAuNTk4LTEuMzMyIDEuMzMyLTEuMzMyIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTA2MCkiLz4KICAgIDxwYXRoIGlkPSJwYXRoNDciIHRyYW5zZm9ybT0ibWF0cml4KC43ODEyNSAwIDAgLjc4MTI1IC0uNSAtLjUpIiBkPSJtMTguNTYxIDMxLjM1OWMtMS40MTk1IDAtMi41NjA1IDEuMTQxLTIuNTYwNSAyLjU2MDV2MTAuMjRjMCAxLjQxOTUgMS4xNDEgMi41NjA1IDIuNTYwNSAyLjU2MDVoMTAuMjRjMS40MTk1IDAgMi41NTg2LTEuMTQxIDIuNTU4Ni0yLjU2MDV2LTEwLjI0YzAtMS40MTk1LTEuMTM5MS0yLjU2MDUtMi41NTg2LTIuNTYwNWgtMTAuMjR6bTAgMS4yODEyaDEwLjI0YzAuNzEwNCAwIDEuMjc5MyAwLjU2ODkgMS4yNzkzIDEuMjc5M3YxMC4yNGMwIDAuNzEwNC0wLjU2ODkgMS4yNzkzLTEuMjc5MyAxLjI3OTNoLTEwLjI0Yy0wLjcxMDQgMC0xLjI4MTItMC41Njg5LTEuMjgxMi0xLjI3OTN2LTEwLjI0YzAtMC43MTA0IDAuNTcwODUtMS4yNzkzIDEuMjgxMi0xLjI3OTN6bTEuMjc5MyAxLjI3OTNjLTAuNzA1MjggMC0xLjI3OTMgMC41NzQwMi0xLjI3OTMgMS4yNzkzdjcuNjgxNmMwIDAuNzA1MjggMC41NzQwMiAxLjI3OTMgMS4yNzkzIDEuMjc5M2g3LjY3OTdjMC43MDUyOCAwIDEuMjgxMi0wLjU3NDAyIDEuMjgxMi0xLjI3OTN2LTcuNjgxNmMwLTAuNzA1MjgtMC41NzU5Ny0xLjI3OTMtMS4yODEyLTEuMjc5M2gtNy42Nzk3eiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDEwNTIpIi8+CiAgICA8cGF0aCBpZD0icGF0aDUxIiB0cmFuc2Zvcm09Im1hdHJpeCguNzgxMjUgMCAwIC43ODEyNSAtLjUgLS41KSIgZD0ibTMzLjkyIDE2Yy0xLjQxOTUgMC0yLjU2MDUgMS4xNDEtMi41NjA1IDIuNTYwNXYxMC4yNGMwIDEuNDE5NSAxLjE0MSAyLjU1ODYgMi41NjA1IDIuNTU4NmgxMC4yNGMxLjQxOTUgMCAyLjU2MDUtMS4xMzkxIDIuNTYwNS0yLjU1ODZ2LTEwLjI0YzAtMS40MTk1LTEuMTQxLTIuNTYwNS0yLjU2MDUtMi41NjA1aC0xMC4yNHptMCAxLjI3OTNoMTAuMjRjMC43MTA0IDAgMS4yNzkzIDAuNTcwODUgMS4yNzkzIDEuMjgxMnYxMC4yNGMwIDAuNzEwNC0wLjU2ODkgMS4yNzkzLTEuMjc5MyAxLjI3OTNoLTEwLjI0Yy0wLjcxMDQgMC0xLjI3OTMtMC41Njg5LTEuMjc5My0xLjI3OTN2LTEwLjI0YzAtMC43MTA0IDAuNTY4OS0xLjI4MTIgMS4yNzkzLTEuMjgxMnptMS4yNzkzIDEuMjgxMmMtMC43MDUyOCAwLTEuMjc5MyAwLjU3NDAyLTEuMjc5MyAxLjI3OTN2Ny42Nzk3YzAgMC43MDUyOCAwLjU3NDAyIDEuMjgxMiAxLjI3OTMgMS4yODEyaDcuNjgxNmMwLjcwNTI4IDAgMS4yNzkzLTAuNTc1OTcgMS4yNzkzLTEuMjgxMnYtNy42Nzk3YzAtMC43MDUyOC0wLjU3NDAyLTEuMjc5My0xLjI3OTMtMS4yNzkzaC03LjY4MTZ6IiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50MTA0NCkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"klotski,gnome klotski,game klotski,klotski\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-klotski.desktop\"\nLABEL oc.launch=\"gnome-klotski.Gnome-klotski\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"klotski\"\nLABEL oc.displayname=\"klotski\"\nLABEL oc.path=\"/usr/games/gnome-klotski\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"384M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"klotski\"\nENV APPBIN \"/usr/games/gnome-klotski\"\nENV APP \"/usr/games/gnome-klotski\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/klotski/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/klotski/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/klotski/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/klotski/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/konsole/#post-run-command","title":"POST run command","text":"
POST run command are run after the package install comman
RUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update konsole, sudo\nLABEL oc.icon=\"konsole.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJvIiB4Mj0iMSIgeTI9IjEiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMxMTEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNTU1Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJuIiB4MT0iNTUuOTUiIHgyPSI1NS45NSIgeTE9IjgxIiB5Mj0iODAiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wODggMCAwIDEgMy4zNjQgMTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0ZGRiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRUUiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0NCIgeDI9IjQ0IiB5MT0iNDQiIHkyPSI0MCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjRkZGIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFRUVFQyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjI0IiB4Mj0iMjQiIHkxPSI0MCIgeTI9IjIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiNGRkYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUVFRUVDIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iOSIgeDI9IjEwNi41NiIgeTE9IjI0LjMyIiB5Mj0iNTMuNjYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNTU1NzUzIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjYzIiBzdG9wLWNvbG9yPSIjMkUyRTJFIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzJFMkUyRSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjU2IiB4Mj0iNTYiIHkxPSI4MSIgeTI9IjciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wODIgMCAwIDEuMDE0IDMuNDMgNy45MDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI0JCQiIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii41OSIgc3RvcC1jb2xvcj0iIzlGOUY5RiIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM4ODgiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJpIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjQwIiB5Mj0iMjAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2IiIGlkPSJqIiB4MT0iNDQiIHgyPSI0NCIgeTE9IjQ0IiB5Mj0iNDAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2EiIGlkPSJsIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjQwIiB5Mj0iMjAiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAxNikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2MiIGlkPSJmIiB4MT0iOCIgeDI9IjEyMCIgeTE9IjQwLjY3IiB5Mj0iNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOCAwIC05LjE4OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2QiIGlkPSJwIiB4MT0iNjQiIHgyPSI2NCIgeTE9IjE3LjM2IiB5Mj0iNjUuODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMS4wOCAwIC05LjE4OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIi8+CiAgICA8ZmlsdGVyIGlkPSJrIiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjQ4IiB4PSItLjEiIHk9Ii0uMiI+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii40Ii8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIgaWQ9Im0iIHdpZHRoPSIxLjIyIiBoZWlnaHQ9IjEuMTciIHg9Ii0uMSIgeT0iLS4xIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjcyIi8+CiAgICA8L2ZpbHRlcj4KICAgIDxmaWx0ZXIgaWQ9ImUiPgogICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjA4Ii8+CiAgICA8L2ZpbHRlcj4KICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjUyIiBjeT0iLTMxIiByPSIxMzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50IGlkPSJjIiBjeD0iNTIiIGN5PSItMzEiIHI9IjEzNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNjNmM2YzYiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuNTIiIHN0b3AtY29sb3I9IiNFRUUiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYzZjNmM2Ii8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogIDwvZGVmcz4KICA8cGF0aCBkPSJNMyAwQzEuNCAwIDAgMS40IDAgM3Y5MGMwIDEuNiAxLjQgMyAzIDNoMTA2YzEuNiAwIDMtMS40IDMtM1YzYzAtMS42LTEuNC0zLTMtM0gzeiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzYgMCAwIDEuMTM1IDYgNykiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2YpIiBkPSJNMTEgOGMtMS42IDAtMyAxLjUtMyAzLjN2OTdjMCAyIDEuNCAzLjQgMyAzLjRoMTA2YzEuNiAwIDMtMS41IDMtMy4zdi05N2MwLTItMS40LTMuMy0zLTMuM0gxMXoiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2cpIiBkPSJNMTIgMTVjLS41IDAtMSAuNS0xIDF2NzNjMCAuNi41IDEgMSAxaDEwNGMuNSAwIDEtLjUgMS0xVjE2YzAtLjYtLjUtMS0xLTFIMTJ6Ii8+CiAgPHBhdGggZD0iTTEyIDE2aDEwNHY4MEgxMnoiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2gpIiBkPSJNMTAzIDc2YzAgMS42LTEuNCAzLTMgM0gxMmMtMS42IDAtMy0xLjQtMy0zVjEyYzAtMS42IDEuNC0zIDMtM2g4OGMxLjYgMCAzIDEuNCAzIDN2NjR6IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjA4NSAwIDAgMS4xMTQgMy4yMzQgNi45NykiLz4KICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMgNTNjNDItMjIuNCA4Mi4yLTI3LjYgMTAyLTI4LjdWMTdIMTN2MzZ6IiBvcGFjaXR5PSIuMDUiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI2kpIiBkPSJtMzYgNDgtMTYgOHYtNC4zTDMwLjcgNDYgMjAgNDAuM1YzNmwxNiA4LjNWNDh6IiBvcGFjaXR5PSIuOSIvPgogIDxwYXRoIGZpbGw9InVybCgjaikiIGQ9Ik01NiA2MEg0MHYtNGgxNnY0eiIgb3BhY2l0eT0iLjkiLz4KICA8cGF0aCBmaWxsPSIjZmZmIiBkPSJNNjAgNjBINDR2LTRoMTZ2NHoiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjIiIHRyYW5zZm9ybT0ibWF0cml4KDEuMTI1IDAgMCAxLjUgLTEwLjUgLTI5KSIvPgogIDxwYXRoIGZpbGw9InVybCgjbCkiIGQ9Im0zNiA0OC0xNiA4di00LjNMMzAuNyA0NiAyMCA0MC4zVjM2bDE2IDguM1Y0OHoiIGZpbHRlcj0idXJsKCNtKSIgb3BhY2l0eT0iLjQiLz4KICA8cGF0aCBmaWxsPSJ1cmwoI24pIiBkPSJtMTE3LjIgOTYuNy0uNi0uN0gxMmwtLjguNmMuMi4yLjUuNC44LjRoMTA0LjVjLjMgMCAuNSAwIC43LS4zeiIvPgogIDxnIGZpbGw9InVybCgjbykiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDggMTUpIj4KICAgIDxjaXJjbGUgY3g9IjEwMSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMDQiIGN5PSI4OSIgcj0iMSIvPgogICAgPGNpcmNsZSBjeD0iMTAzIiBjeT0iOTIiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9Ijk3IiBjeT0iODYiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwMCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI4MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI3MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI2MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1OSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1NSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0OSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI1MSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0OCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0NCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI0MCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzOSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyOSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzNSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIzMSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyOCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMSIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyNCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMyIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMCIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMyIgY3k9Ijg2IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNiIgY3k9Ijg5IiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSIxNSIgY3k9IjkyIiByPSIxIi8+CiAgICA8Y2lyY2xlIGN4PSI5IiBjeT0iODYiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iODkiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOTIiIHI9IjEiLz4KICAgIDxjaXJjbGUgY3g9IjgiIGN5PSI4OSIgcj0iMSIvPgogIDwvZz4KICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNMTEgOGMtMS42IDAtMyAxLjUtMyAzLjN2OTdjMCAxIC40IDIgMSAyLjZWMTIuM2MwLTEuOCAxLjMtMy4yIDMtMy4yaDEwNGMxLjcgMCAzIDEuNCAzIDMuMi43IDI1IDAgOTguMiAwIDk4LjJ2LjNjLjYtLjcgMS0xLjYgMS0yLjV2LTk3YzAtMS44LTEuNC0zLjItMy0zLjJIMTF6IiBvcGFjaXR5PSIuOSIvPgo8L3N2Zz4=\"\nLABEL oc.keyword=\"konsole,ksonsole,console,shell,bash,sh\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"konsole.konsole\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"konsole\"\nLABEL oc.displayname=\"konsole\"\nLABEL oc.path=\"/usr/bin/konsole\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"konsole\"\nENV APPBIN \"/usr/bin/konsole\"\nENV APP \"/usr/bin/konsole\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/konsole/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/konsole/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/konsole/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/konsole/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 dbus-user-session ksquares && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"ksquares.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmVyc2lvbj0iMSI+CiA8cmVjdCBzdHlsZT0ib3BhY2l0eTowLjIiIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgeD0iLTMxIiB5PSItMzAiIHJ4PSIxLjQiIHJ5PSIxLjQiIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCwwLDApIi8+CiA8cmVjdCB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHg9Ii0zMCIgeT0iLTMwIiByeD0iMS40IiByeT0iMS40IiB0cmFuc2Zvcm09Im1hdHJpeCgwLC0xLC0xLDAsMCwwKSIgc3R5bGU9ImZpbGw6IzhlOGU4ZSIvPgogPHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzNmM2YzZjtzdHJva2Utd2lkdGg6MiIgZD0iTSA2LDIwIEggMTYgViAxMiBIIDI2Ii8+CiA8cGF0aCBkPSJtIDE2LDExIGEgMiwyIDAgMCAwIC0yLDIgMiwyIDAgMCAwIDIsMiAyLDIgMCAwIDAgMiwtMiAyLDIgMCAwIDAgLTIsLTIgeiBtIDEwLDAgYSAyLDIgMCAwIDAgLTIsMiAyLDIgMCAwIDAgMiwyIDIsMiAwIDAgMCAyLC0yIDIsMiAwIDAgMCAtMiwtMiB6IE0gNiwxOSBhIDIsMiAwIDAgMCAtMiwyIDIsMiAwIDAgMCAyLDIgMiwyIDAgMCAwIDIsLTIgMiwyIDAgMCAwIC0yLC0yIHogbSAxMCwwIGEgMiwyIDAgMCAwIC0yLDIgMiwyIDAgMCAwIDIsMiAyLDIgMCAwIDAgMiwtMiAyLDIgMCAwIDAgLTIsLTIgeiIgc3R5bGU9Im9wYWNpdHk6MC4yIi8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmIiBkPSJNIDE2IDEwIEEgMiAyIDAgMCAwIDE0IDEyIEEgMiAyIDAgMCAwIDE2IDE0IEEgMiAyIDAgMCAwIDE4IDEyIEEgMiAyIDAgMCAwIDE2IDEwIHogTSAyNiAxMCBBIDIgMiAwIDAgMCAyNCAxMiBBIDIgMiAwIDAgMCAyNiAxNCBBIDIgMiAwIDAgMCAyOCAxMiBBIDIgMiAwIDAgMCAyNiAxMCB6IE0gNiAxOCBBIDIgMiAwIDAgMCA0IDIwIEEgMiAyIDAgMCAwIDYgMjIgQSAyIDIgMCAwIDAgOCAyMCBBIDIgMiAwIDAgMCA2IDE4IHogTSAxNiAxOCBBIDIgMiAwIDAgMCAxNCAyMCBBIDIgMiAwIDAgMCAxNiAyMiBBIDIgMiAwIDAgMCAxOCAyMCBBIDIgMiAwIDAgMCAxNiAxOCB6Ii8+CiA8cGF0aCBzdHlsZT0iZmlsbDojZmZmZmZmO29wYWNpdHk6MC4xIiBkPSJNIDMuNDAwMzkwNiAyIEMgMi42MjQ3OTA2IDIgMiAyLjYyNDc5MDYgMiAzLjQwMDM5MDYgTCAyIDQuNDAwMzkwNiBDIDIgMy42MjQ3OTA2IDIuNjI0NzkwNiAzIDMuNDAwMzkwNiAzIEwgMjguNTk5NjA5IDMgQyAyOS4zNzUyMDkgMyAzMCAzLjYyNDc5MDYgMzAgNC40MDAzOTA2IEwgMzAgMy40MDAzOTA2IEMgMzAgMi42MjQ3OTA2IDI5LjM3NTIwOSAyIDI4LjU5OTYwOSAyIEwgMy40MDAzOTA2IDIgeiIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"ksquares,ksquares\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"ksquares.ksquares\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu\"\nLABEL oc.name=\"kSquares\"\nLABEL oc.displayname=\"kSquares\"\nLABEL oc.path=\"/usr/games/ksquares\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kSquares\"\nENV APPBIN \"/usr/games/ksquares\"\nENV APP \"/usr/games/ksquares\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/ksquares/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/ksquares/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/ksquares/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/ksquares/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update kturtle mesa-dri-gallium\nLABEL oc.icon=\"kturtle.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZlcnNpb249IjEuMCIKICAgeD0iMC4wMDAwMDAwIgogICB5PSIwLjAwMDAwMDAiCiAgIHdpZHRoPSIyNTYuMDAwMDAiCiAgIGhlaWdodD0iMjU2LjAwMDAwIgogICB2aWV3Qm94PSIwIDAgMjU2IDI1NiIKICAgaWQ9InN2ZzE0MzIiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiPjxkZWZzCiAgIGlkPSJkZWZzMTUzNiI+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDc4NSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwNjdhMDc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMCIKICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgaWQ9InN0b3A0Nzg3IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYTllZWE4O3N0b3Atb3BhY2l0eTowLjc1NjM0NTE1IgogICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICBpZD0ic3RvcDQ3ODkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICB4MT0iLTIwMi40NjUxMiIKICAgICB5MT0iNTIuMDQ2NTUxIgogICAgIHgyPSItNzYuMjUyMzEyIgogICAgIHkyPSIyNDguMzc1MzciCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDc5MSIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0Nzg1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNTczMTAsMC4wMDAwMDAsMC4wMDAwMDAsMS4wNTczMTAsMjk4LjE2MzUsNy4wMjA2MTMpIiAvPjwvZGVmcz4KCQo8cGF0aAogICBkPSJNIDEwNy41Mjg0MCw1LjE3MDM2MzMgTCAxMDcuNTI4NDAsMjUuNjQxOTY5IEwgODcuMDU2ODAwLDI1LjY0MTk2OSBMIDg3LjA1NjgwMCw0Ni4xMTM1NzUgTCA4Ny4wNTY4MDAsNjYuNTg1MTgxIEwgMTA3LjUyODQwLDY2LjU4NTE4MSBMIDEwNy41Mjg0MCw4Ny4wNTY3ODYgTCA4Ny4wNTY4MDAsODcuMDU2Nzg2IEwgODcuMDU2ODAwLDEwNy41MjgzOSBMIDY2LjU4NTE5NCwxMDcuNTI4MzkgTCA2Ni41ODUxOTQsMTI4LjAwMDAwIEwgNDYuMTEzNTg4LDEyOC4wMDAwMCBMIDQ2LjExMzU4OCwxNDguNDcxNjEgTCA0Ni4xMTM1ODgsMTY4Ljk0MzIwIEwgNDYuMTEzNTg4LDE4OS40MTQ4MiBMIDY2LjU4NTE5NCwxODkuNDE0ODIgTCA2Ni41ODUxOTQsMjA5Ljg4NjQxIEwgODcuMDU2ODAwLDIwOS44ODY0MSBMIDg3LjA1NjgwMCwyMzAuMzU4MDMgTCAxMDcuNTI4NDAsMjMwLjM1ODAzIEwgMTI4LjAwMDAwLDIzMC4zNTgwMyBMIDE0OC40NzE2MSwyMzAuMzU4MDMgTCAxNjguOTQzMjAsMjMwLjM1ODAzIEwgMTY4Ljk0MzIwLDIwOS44ODY0MSBMIDE4OS40MTQ4MywyMDkuODg2NDEgTCAxODkuNDE0ODMsMTg5LjQxNDgyIEwgMjA5Ljg4NjQzLDE4OS40MTQ4MiBMIDIwOS44ODY0MywxNjguOTQzMjAgTCAyMDkuODg2NDMsMTQ4LjQ3MTYxIEwgMjA5Ljg4NjQzLDEyOC4wMDAwMCBMIDE4OS40MTQ4MywxMjguMDAwMDAgTCAxODkuNDE0ODMsMTA3LjUyODM5IEwgMTY4Ljk0MzIwLDEwNy41MjgzOSBMIDE2OC45NDMyMCw4Ny4wNTY3ODYgTCAxNDguNDcxNjEsODcuMDU2Nzg2IEwgMTQ4LjQ3MTYxLDY2LjU4NTE4MSBMIDE2OC45NDMyMCw2Ni41ODUxODEgTCAxNjguOTQzMjAsNDYuMTEzNTc1IEwgMTY4Ljk0MzIwLDI1LjY0MTk2OSBMIDE0OC40NzE2MSwyNS42NDE5NjkgTCAxNDguNDcxNjEsNS4xNzAzNjMzIEwgMTI4LjAwMDAwLDUuMTcwMzYzMyBMIDEwNy41Mjg0MCw1LjE3MDM2MzMgeiBNIDE4OS40MTQ4MywxMDcuNTI4MzkgTCAyMDkuODg2NDMsMTA3LjUyODM5IEwgMjA5Ljg4NjQzLDg3LjA1Njc4NiBMIDIzMC4zNTgwMiw4Ny4wNTY3ODYgTCAyMzAuMzU4MDIsNjYuNTg1MTgxIEwgMjA5Ljg4NjQzLDY2LjU4NTE4MSBMIDE4OS40MTQ4Myw2Ni41ODUxODEgTCAxODkuNDE0ODMsODcuMDU2Nzg2IEwgMTg5LjQxNDgzLDEwNy41MjgzOSB6IE0gMTg5LjQxNDgzLDIwOS44ODY0MSBMIDE4OS40MTQ4MywyMzAuMzU4MDMgTCAxODkuNDE0ODMsMjUwLjgyOTY0IEwgMjA5Ljg4NjQzLDI1MC44Mjk2NCBMIDIzMC4zNTgwMiwyNTAuODI5NjQgTCAyMzAuMzU4MDIsMjMwLjM1ODAzIEwgMjA5Ljg4NjQzLDIzMC4zNTgwMyBMIDIwOS44ODY0MywyMDkuODg2NDEgTCAxODkuNDE0ODMsMjA5Ljg4NjQxIHogTSA2Ni41ODUxOTQsMjA5Ljg4NjQxIEwgNDYuMTEzNTg4LDIwOS44ODY0MSBMIDQ2LjExMzU4OCwyMzAuMzU4MDMgTCAyNS42NDE5ODMsMjMwLjM1ODAzIEwgMjUuNjQxOTgzLDI1MC44Mjk2NCBMIDQ2LjExMzU4OCwyNTAuODI5NjQgTCA2Ni41ODUxOTQsMjUwLjgyOTY0IEwgNjYuNTg1MTk0LDIzMC4zNTgwMyBMIDY2LjU4NTE5NCwyMDkuODg2NDEgeiBNIDY2LjU4NTE5NCwxMDcuNTI4MzkgTCA2Ni41ODUxOTQsODcuMDU2Nzg2IEwgNjYuNTg1MTk0LDY2LjU4NTE4MSBMIDQ2LjExMzU4OCw2Ni41ODUxODEgTCAyNS42NDE5ODMsNjYuNTg1MTgxIEwgMjUuNjQxOTgzLDg3LjA1Njc4NiBMIDQ2LjExMzU4OCw4Ny4wNTY3ODYgTCA0Ni4xMTM1ODgsMTA3LjUyODM5IEwgNjYuNTg1MTk0LDEwNy41MjgzOSB6ICIKICAgc3R5bGU9Im9wYWNpdHk6MS4wMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQ3OTEpO2ZpbGwtb3BhY2l0eToxLjAwMDAwMDA7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjguNDk5OTk4MTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQuMDAwMDAwMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MS4wMDAwMDAwO292ZXJmbG93OnZpc2libGUiCiAgIGlkPSJwYXRoNDA1NyIgLz48L3N2Zz4=\"\nLABEL oc.keyword=\"kturtle,kturtle\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.kturtle.desktop\"\nLABEL oc.launch=\"kturtle.kturtle\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"kTurtle\"\nLABEL oc.displayname=\"kTurtle\"\nLABEL oc.path=\"/usr/bin/kturtle\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"kTurtle\"\nENV APPBIN \"/usr/bin/kturtle\"\nENV APP \"/usr/bin/kturtle\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/kturtle/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/kturtle/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/kturtle/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/kturtle/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends leocad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"leocad.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OCA0OCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSIwIiB4MT0iMjcuNDU2IiB5MT0iNDcuMzkiIHgyPSIyNi40NDIiIHkyPSIxLjAxNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNlMWUxZTEiLz48c3RvcCBzdG9wLWNvbG9yPSIjZjRmNGZmIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iMSIgeDE9IjI0LjE0IiB5MT0iNDAuNjgzIiB4Mj0iMjMuODYiIHkyPSI2LjMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2M1MjgyOCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZjU0NTQiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxwYXRoIGQ9Im0yLjk4LS4wMDJoNDIuMDRjMS42NTIgMCAyLjk4MiAxLjMzIDIuOTgyIDIuOTgydjQyLjA0YzAgMS42NTItMS4zMyAyLjk4Mi0yLjk4MiAyLjk4MmgtNDIuMDRjLTEuNjUyIDAtMi45ODItMS4zMy0yLjk4Mi0yLjk4MnYtNDIuMDRjMC0xLjY1MiAxLjMzLTIuOTgyIDIuOTgyLTIuOTgyIiBmaWxsPSJ1cmwoIzApIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJtMjQuMTcgN2MtMS43MSAwLTIuOTk5Ljc0NS0zIDEuNzMydjEuMjU0Yy0uMDI2LjAwMS0uMDUzLjAwOS0uMDc4LjAyMWwtMS45MzggMWMtLjA4My4wNDMtLjE1Mi4xMDItLjIwOS4xNjgtLjQ5MS0uMjAyLTEuMDk2LS4zMjItMS43NzMtLjMyMi0xLjcwOSAwLTIuOTk4Ljc0My0yLjk5OCAxLjczdjEuMDY4Yy0uMTA4LjAwMy0uMjE2LjAyMy0uMzE2LjA3OGwtMy43MDEgMi4wMWMtLjEyOC4wNjktLjIxNC4xNzctLjI3Ny4yOTctLjAxOC4wMjctLjAyOS4wNTMtLjA0My4wODItLjAxMi4wMzQtLjAyLjA2Ny0uMDI3LjEwMi0uMDIuMDY2LS4wNTMuMTI4LS4wNTMuMTk5djE2LjI5M2MwIC4yNTUuMTM4LjQ5MS4zNjEuNjE3bDEzLjQ1OSA3LjU3NmMuMDA5LjAwNS4wMi4wMDMuMDI5LjAwOC4wOTEuMDQ2LjE4OS4wNzIuMjg5LjA3Ni4wMDEgMCAuMDE5LjAwOC4wMjkuMDA4LjA4OSAwIC4xNzEtLjAzOC4yNTQtLjA3LjAzLS4wMTIuMDY1LS4wMDcuMDk0LS4wMjNsLjAwNC0uMDAyYy4wMDItLjAwMDEuMDA0LS4wMDAxLjAwNi0uMDAyLjAwMi0uMDAwMS4wMDItLjAwMy4wMDQtLjAwNGwxMy41OC03LjYyNWMuMjI0LS4xMjUuMzYxLS4zNjIuMzYxLS42MTdsLjAxNC0xNi4yMDVjMC0uMjUxLS4xMzItLjQ4NS0uMzUtLjYxMS0uMDIzLS4wMTQtLjA1Mi0uMDExLS4wNzYtLjAyMS0uMDMyLS4wMjUtLjA1NS0uMDU2LS4wOTItLjA3NmwtMy43MDMtMi4wMWMtLjAxNi0uMDA5LS4wMzMtLjAwOC0uMDQ5LS4wMTZ2LTEuMTQzYzAtLjk4OC0xLjI4OS0xLjczMi0yLjk5OC0xLjczMi0uNzI2IDAtMS4zNjcuMTM5LTEuODc1LjM2OS0uMDM1LS4wMjgtLjA2NC0uMDYyLS4xMDUtLjA4NGwtMS43NjItLjkxYy0uMDItLjAwMS0uMDQyLS4wMDktLjA2My0uMDE4di0xLjQ2NWMwLS45ODgtMS4yODktMS43MzItMi45OTgtMS43MzJtLTEuOTM4IDMuMDYzYy41MTcuMjQ4IDEuMTgxLjM5OCAxLjkzOC4zOTguNzU2IDAgMS40MTktLjE1MSAxLjkzNi0uMzk4djEuOTYzYzAgLjIwNS0uNzMxLjY3LTEuOTM2LjY3LTEuMjA1IDAtMS45MzgtLjQ2NS0xLjkzOC0uNjd2LTEuOTYzbS0xLjA2MyAxLjQ5OHYuNDY1YzAgLjk4NyAxLjI5IDEuNzMgMyAxLjczIDEuNzExIDAgMi45OTktLjc0MyAyLjk5OC0xLjczdi0uMjVsLjg2MS40NDVjLS4wMzcuMTEzLS4wNTcuMjMtLjA1Ny4zNTJ2My4yOTNjMCAuOTg3IDEuMjkgMS43MyAzIDEuNzMgMS43MSAwIDIuOTk5LS43NDMgMi45OTgtMS43M3YtLjU1MWwyLjEgMS4xNDMtMTIuMTQzIDYuNzk5LTEyLjA0LTYuODQyIDIuMjkxLTEuMjQ2di43MDljMCAuOTg3IDEuMjg5IDEuNzMyIDIuOTk4IDEuNzMyIDEuNzA5IDAgMi45OTgtLjc0NSAyLjk5OC0xLjczMnYtMy4yOTNjMC0uMTU5LS4wNDQtLjMwOS0uMTA3LS40NTNsMS4xMDctLjU3bTcuODY1IDIuMzQyYy41MTYuMjQ4IDEuMTgxLjQgMS45MzguNC43NTYgMCAxLjQxOS0uMTUzIDEuOTM2LS40djEuOTYzYzAgLjE5NC0uNjc4LjY2OC0xLjkzNi42NjgtMS4yMDUgMC0xLjkzOC0uNDYzLTEuOTM4LS42Njh2LTEuOTYzbS0xMy44MDEuMDEyYy41MTcuMjQ4IDEuMTgxLjQgMS45MzguNC43NTUgMCAxLjQxOS0uMTUxIDEuOTM2LS4zOTh2MS45NjFjMCAuMTk0LS42NzguNjctMS45MzYuNjctMS4yNTggMC0xLjkzOC0uNDc2LTEuOTM4LS42N3YtMS45NjNtOC44OTEuNzIxYy0xLjcwOSAwLTMgLjc0NS0zIDEuNzMydjMuMjkzYzAgLjk4NyAxLjI5MSAxLjczMiAzIDEuNzMyIDEuNzA5IDAgMi45OTYtLjc0NSAyLjk5Ni0xLjczMnYtMy4yOTNjMC0uOTg3LTEuMjg3LTEuNzMyLTIuOTk2LTEuNzMybS0xLjkzOCAzLjA2MmMuNTE3LjI0OCAxLjE4MS40IDEuOTM4LjQuNzU1IDAgMS40MTgtLjE1MSAxLjkzNC0uMzk4djEuOTYxYzAgLjE5NC0uNjc2LjY3LTEuOTM0LjY3LTEuMjA1IDAtMS45MzgtLjQ2NS0xLjkzOC0uNjd2LTEuOTYzIiBmaWxsPSJ1cmwoIzEpIi8+PC9zdmc+Cg==\"\nLABEL oc.keyword=\"leocad,cad,lego\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"leocad.Leocad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"-l /usr/bin/leocad.library.bin\"\nLABEL oc.name=\"Leocad\"\nLABEL oc.displayname=\"Leocad\"\nLABEL oc.path=\"/usr/bin/leocad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.leocad;application/x-ldraw;application/x-multi-part-ldraw;application/x-ldlite;\"\nLABEL oc.fileextensions=\"lcd\"\nLABEL oc.legacyfileextensions=\"lcd\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Leocad\"\nENV APPBIN \"/usr/bin/leocad\"\nLABEL oc.args=\"-l /usr/bin/leocad.library.bin\"\nENV APP \"/usr/bin/leocad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/leocad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/leocad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/leocad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/leocad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends librecad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"librecad.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48dGl0bGU+TGlicmVDQUQgSWNvbjwvdGl0bGU+PHBhdGggZmlsbD0iIzhlZDkwMCIgZD0iTTAgMGgxMi4xMzh2MTIuMTRIMHoiLz48cGF0aCBmaWxsPSIjOGVkOTAwIiBkPSJNMCA4Ny44NjJoMTIuMTM4djEyLjE0SDB6Ii8+PHBhdGggZmlsbD0iIzhlZDkwMCIgZD0iTTg3Ljg2IDBIMTAwdjEyLjE0SDg3Ljg2eiIvPjxwYXRoIGZpbGw9IiM4ZWQ5MDAiIGQ9Ik04Ny44NiA4Ny44NjJIMTAwdjEyLjE0SDg3Ljg2eiIvPjxwYXRoIGQ9Ik01MCAuMDMyQzIyLjM4Ni4wMzIgMCAyMi4zODYgMCA1MGMwIDI3LjYxNSAyMi4zODYgNTAgNTAgNTBzNTAtMjIuMzg1IDUwLTUwQzEwMCAyMi4zODYgNzcuNjE0LjAzMiA1MCAuMDMyem0wIDEyYzIwLjk4NyAwIDM4IDE2Ljk4MiAzOCAzNy45NjggMCAyMC45ODctMTcuMDEzIDM4LjAzMi0zOCAzOC4wMzItMjAuOTg2IDAtMzgtMTcuMDQ1LTM4LTM4LjAzMiAwLTIwLjk4NiAxNy4wMTQtMzcuOTY4IDM4LTM3Ljk2OHoiIGZpbGw9IiM4ZWQ5MDAiLz48cGF0aCBmaWxsPSIjNGQ0ZDRkIiBkPSJNMTAwIDU2SDI0djZIMFYzOGgyNHY2aDc2eiIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"librecad,librecad,modeling\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"librecad.Librecad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"LibreCAD\"\nLABEL oc.displayname=\"LibreCAD\"\nLABEL oc.path=\"/usr/bin/librecad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/vnd.dxf;\"\nLABEL oc.fileextensions=\"dxf;dwg\"\nLABEL oc.legacyfileextensions=\"dxf;dwg\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"LibreCAD\"\nENV APPBIN \"/usr/bin/librecad\"\nENV APP \"/usr/bin/librecad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/librecad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/librecad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/librecad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/librecad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
This array describe the application list ready to use with abcdesktop.
icon displayname comment description json file 2048 (alpine gtk) Obtain the 2048 tile 2048-alpine.md 2048-alpine.d.3.0.json 2048 (ubuntu qt) The 2048 number game implemented in Qt 2048-ubuntu.md 2048-ubuntu.d.3.0.json Apache Directory Studio no comment apachedirectorystudio.md apachedirectorystudio.d.3.0.json astromenace hardcore 3D space shooter with spaceship upgrade possibilities astromenace.md astromenace.d.3.0.json Base Manage databases, create queries and reports to track and manage your information by using Base. base.md base.d.3.0.json Beekeeper-studio An easy-to use SQL query editor and database UI for Mac, Windows, and Linux beekeeperstudio.md beekeeperstudio.d.3.0.json Blender 3D modeling, animation, rendering and post-production blender.md blender.d.3.0.json Bless Edit binary files bless.md bless.d.3.0.json blobby no comment blobby.md blobby.d.3.0.json Gnome-boxes View and use virtual machines boxes.md boxes.d.3.0.json Brackets no comment brackets.md brackets.d.3.0.json calculator Perform arithmetic, scientific or financial calculations calculator.md calculator.d.3.0.json chess Play the classic two-player board game of chess chess.md chess.d.3.0.json Chrome Access the Internet chrome.md chrome.d.3.0.json chromium (alpine) no comment chromium.md chromium.d.3.0.json citrix-client no comment citrix.md citrix.d.3.0.json Cloud Foundry cli no comment cloudfoundry.md cloudfoundry.d.3.0.json cmd.exe wine (alpine) no comment cmd.exe.md cmd.exe.d.3.0.json corsix-th Open source clone of Theme Hospital corsix-th.md corsix-th.d.3.0.json cuda Use the command line cuda.md cuda.d.3.0.json cuda demo Use the command line cudademo.md cudademo.d.3.0.json cuda developper Use the command line cudadev.md cudadev.d.3.0.json Dia Edit your Diagrams dia.md dia.d.3.0.json Doom no comment doom.md doom.d.3.0.json Draw Create and edit drawings, flow charts and logos by using Draw. draw.md draw.d.3.0.json draw.io draw.io desktop drawio.md drawio.d.3.0.json Microsoft Edge Access the Internet edge.md edge.d.3.0.json eog Browse and rotate images eog.md eog.d.3.0.json Evince View multi-page documents evince.md evince.d.3.0.json Evolution Manage your email, contacts and schedule evolution.md evolution.d.3.0.json file-roller Create and modify an archive file-roller.md file-roller.d.3.0.json Filelight View disk usage information filelight.md filelight.d.3.0.json filezilla (alpine) Download and upload files via FTP, FTPS and SFTP filezilla.md filezilla.d.3.0.json Firefox (esr alpine) Browse the World Wide Web firefox-esr.md firefox-esr.d.3.0.json Firefox (alpine) Browse the World Wide Web firefox.md firefox.d.3.0.json flare A single player, 2D-isometric, action Role-Playing Game flare.md flare.d.3.0.json frozen-bubble no comment frozen-bubble.md frozen-bubble.d.3.0.json GCompris no comment gcompris.md gcompris.d.3.0.json Geany A fast and lightweight IDE using GTK+ geany.md geany.d.3.0.json Gedit no comment gedit.md gedit.d.3.0.json gElemental View the periodic table of elements gelemental.md gelemental.d.3.0.json Geogebra no comment geogebra.md geogebra.d.3.0.json Gimp Create images and edit photographs gimp.md gimp.d.3.0.json Gnumerix (alpine) Calculation, Analysis, and Visualization of Information gnumeric.md gnumeric.d.3.0.json Golly no comment golly.md golly.d.3.0.json hyper A terminal built on web technologies hyper.md hyper.d.3.0.json Impress Create and edit presentations for slideshows, meeting and Web pages by using Impress. impress.md impress.d.3.0.json inkscape no comment inkscape.md inkscape.d.3.0.json jupyter Use the command line jupyter.md jupyter.d.3.0.json jupyter nvidia Use the command line jupyternvidia.md jupyternvidia.d.3.0.json Kalzium KDE Periodic Table of Elements kalzium.md kalzium.d.3.0.json kDiamond no comment kdiamond.md kdiamond.d.3.0.json Kgeography A Geography Learning Program kgeography.md kgeography.d.3.0.json kigo no comment kigo.md kigo.d.3.0.json Klickety no comment klickety.md klickety.d.3.0.json klotski no comment klotski.md klotski.d.3.0.json konsole no comment konsole.md konsole.d.3.0.json kSquares no comment ksquares.md ksquares.d.3.0.json kTurtle Educational Programming Environment kturtle.md kturtle.d.3.0.json Leocad no comment leocad.md leocad.d.3.0.json LibreCAD no comment librecad.md librecad.d.3.0.json mahjongg no comment mahjongg.md mahjongg.d.3.0.json maps A simple maps application maps.md maps.d.3.0.json Math Create and edit scientific formulas and equations by using Math. math.md math.d.3.0.json Mathwar no comment mathwar.md mathwar.d.3.0.json minecraft Official Minecraft Launcher minecraft.md minecraft.d.3.0.json gnome-mines (alpine) Clear hidden mines from a minefield mines.md mines.d.3.0.json FileManager Access and organize files nautilus.md nautilus.d.3.0.json Notepad Wine (alpine) no comment notepad-wine.md notepad-wine.d.3.0.json notepadqq Edit source code files notepadqq.md notepadqq.d.3.0.json octave no comment octave.md octave.d.3.0.json OnlyOffice Edit office documents onlyoffice.md onlyoffice.d.3.0.json Pinta (alpine) Easily create and edit images pinta.md pinta.d.3.0.json Planner no comment planner.md planner.d.3.0.json Postman no comment postman.md postman.d.3.0.json Powershell no comment powershell.md powershell.d.3.0.json Putty Unix no comment putty-unix.md putty-unix.d.3.0.json Putty Wine (alpine) no comment putty-wine.md putty-wine.d.3.0.json qElectrotech no comment qelectrotech.md qelectrotech.d.3.0.json Remarkable A free, fully featured markdown editor for Linux. remarkable.md remarkable.d.3.0.json Remmina Access remote desktops with Remmina remmina.md remmina.d.3.0.json RemoteDesktop no comment remotedesktopmanager.md remotedesktopmanager.d.3.0.json rhythmbox Play and organize your music collection rhythmbox.md rhythmbox.d.3.0.json Robots no comment robots.md robots.d.3.0.json Shotcut Shotcut is a free, open source, cross-platform video editor. shotcut.md shotcut.d.3.0.json Stellarium Planetarium stellarium.md stellarium.d.3.0.json Step Simulate physics experiments step.md step.d.3.0.json stress no comment stress.md stress.d.3.0.json sublime-Text Sophisticated text editor for code, markup and prose sublime-text.md sublime-text.d.3.0.json sudoku Test your logic skills in this number grid puzzle sudoku.md sudoku.d.3.0.json supertux2 Play a classic 2D platform game supertux2.md supertux2.d.3.0.json swell-foop Clear the screen by removing groups of colored and shaped tiles swell-foop.md swell-foop.d.3.0.json taquin Slide tiles to their correct places taquin.md taquin.d.3.0.json Microsoft Teams Microsoft Teams for Linux is your chat-centered workspace in Office 365. teams.md teams.d.3.0.json Terminal sudo Use the command line terminal.md terminal.d.3.0.json Terminal [ephemeral container] Use the command line terminalephemeral.md terminalephemeral.d.3.0.json Terminal [Pod] Use the command line terminalpod.md terminalpod.d.3.0.json Tetravex no comment tetravex.md tetravex.d.3.0.json Thunderbird Send and receive mail with Thunderbird thunderbird.md thunderbird.d.3.0.json Commodore64 vice.md vice.d.3.0.json videolan Read, capture, broadcast your multimedia streams vlc.md vlc.d.3.0.json vmmacos no comment vmmacos.md vmmacos.d.3.0.json VMRC Connect to remote virtual machines vmrc.md vmrc.d.3.0.json vmubuntu no comment vmubuntu.md vmubuntu.d.3.0.json VSCode Code Editing. Redefined. vscode.md vscode.d.3.0.json weather Show weather conditions and forecast weather.md weather.d.3.0.json whatsdesk unofficial whatsapp client for linux whatsdesk.md whatsdesk.d.3.0.json Winefile Wine (alpine) no comment winefile-wine.md winefile-wine.d.3.0.json WineMine Wine (alpine) no comment winemine-wine.md winemine-wine.d.3.0.json Winhelp Wine no comment winhelp-wine.md winhelp-wine.d.3.0.json WinSCP no comment winscp-wine.md winscp-wine.d.3.0.json wireshark (alpine) Network traffic analyzer wireshark.md wireshark.d.3.0.json Writer alpine Create and edit text and graphics in letters, reports, documents and Web pages by using Writer. writer.md writer.d.3.0.json Xclock no comment xclock.md xclock.d.3.0.json Xedit no comment xedit.md xedit.d.3.0.json xeyes no comment xeyes.md xeyes.d.3.0.json Xman no comment xman.md xman.d.3.0.json Xpad Jot down notes for later xpad.md xpad.d.3.0.json Xterm (sudo) standard terminal emulator for the X window system xterm.md xterm.d.3.0.json"},{"location":"applications/mahjongg/","title":"mahjongg","text":""},{"location":"applications/mahjongg/#inherite-from","title":"inherite from","text":"
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-mahjongg && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-mahjongg.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnNzgiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMzgiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5IDAgMCAyLjE0MjkgLTgyNi4zNiAtMTEwNy41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBpZD0ic3RvcDIiIHN0b3AtY29sb3I9IiMzODg5ZTkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDQiIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI3IiBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTEyIiB4MT0iMzAuNzY1IiB4Mj0iMzEuMTA2IiB5MT0iNTYuOTkzIiB5Mj0iNy4zNjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMjQ0LjY1IDAgMCAyMjguMzQgMTUyLjY2IC0xMTMuNjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wMzMiIHN0b3AtY29sb3I9IiM2MjYyNjIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDM1IiBzdG9wLWNvbG9yPSIjMzgzODM4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImZpbHRlcjkzMiIgeD0iLS4wNzE1MzgiIHk9Ii0uMDUxNjY3IiB3aWR0aD0iMS4xNDMxIiBoZWlnaHQ9IjEuMTAzMyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjkzNCIgc3RkRGV2aWF0aW9uPSIwLjc3NSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBpZD0iY2lyY2xlNDAiIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgaWQ9Imc0OCIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgaWQ9ImNpcmNsZTQyIiBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDkxMikiLz4KICA8Y2lyY2xlIGlkPSJjaXJjbGU0NCIgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgaWQ9ImNpcmNsZTQ2IiBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KIDwvZz4KIDxnPgogIDxyZWN0IGlkPSJyZWN0OTE0IiB4PSIxOSIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIzNiIgcng9IjIiIHJ5PSIyIiBmaWx0ZXI9InVybCgjZmlsdGVyOTMyKSIgb3BhY2l0eT0iLjUiLz4KICA8cmVjdCBpZD0icmVjdDg5NCIgeD0iMTkiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMzYiIHJ4PSIyIiByeT0iMiIgZmlsbD0iI2YyZjJmMiIvPgogIDxwYXRoIGlkPSJwYXRoNCIgZD0ibTI5LjAyIDIwLjUyNWMtMC4yMDg4MiAwLjE1MzUyLTAuMjYxMDggMC4zODM1Ny0wLjI2MTA4IDAuNjUyMzUgMCAwLjQ5ODg4IDAuMjA4ODIgMS4xMTI4IDAuMzEzMjUgMS4zNDMxIDAgMCAwLjE1NjYyIDIuNjg2MiAwLjIwODg0IDIuOTkzMi0wLjQ2OTg4IDAuMDM4MzctMS4zMDUyIDAuMDc2NzYtMS42MTg0IDAuMTUzNWgtMC40MTc2NmMtMC44ODc1NCAwLjAzODUtMS43MjI4IDAuMDc2NzYtMi4wODg0IDAuMzQ1MzFsLTAuMTU2NjMgMC4xMTUxMiAwLjE1NjYzIDAuMTUzNWMwLjI2MTAzIDAuMjMwMjQgMC4zNjU0NyAwLjg4MjYxIDAuNDY5ODggMS41NzM0IDAuMjYxMDMgMS40MTk4IDAuNTc0MjggMy4xODUgMi4xNDA2IDMuODc1OWwwLjMxMzI1IDAuMTE1MTJ2LTAuMjY4NjJzMC4wNTIzLTAuMTE1MTIgMC4wNTIzLTAuMjY4NjJjMC0wLjExNTEyLTAuMDUyMy0wLjMwNy0wLjEwNDM2LTAuNTc1NjIgMC40MTc2NiAwLjAzODM3IDEuMzA1MiAwLjExNTEyIDEuNjE4NCAwLjExNTEyIDAuMDUyMjYgMC4zMDcwNSAxLjQwOTcgMTIuODE4IDEuNDA5NyAxMi44MThoMC41MjIxNnMwLjU3NDMxLTEyLjM1NiAwLjU3NDMxLTEyLjc0YzAuMzY1NDQgMCAxLjk4MzkgMC4wMzgzNSAyLjQ1MzggMC4wNzY3Ni0wLjEwNDI5IDAuMjMwMjgtMC41MjE5MyAxLjE4OTctMC41MjE5MyAxLjE4OTdsMC43MzA3NS0wLjQ5ODgzYzAuMjA4ODItMC4xMTUyNiA0Ljc1MDgtMy4xNDY3IDQuMTI1NS01LjE0MjMtMC4yMDk5OC0wLjY1MjM1LTAuOTQwMjctMS4xMTI5LTIuMTQxOC0xLjM0M2gtMC4xMDQ2NmMtMC42Nzg3MiAwLTIuNzY3MSAwLjAzODM3LTQuMzMzNCAwLjExNTEyIDAuMDUyMzQtMC45OTc3MyAwLjA1MjM0LTEuNTM1IDAuMDUyMzQtMS44MDM3di0wLjM0NTM4YzAtMC4xOTE4OCAwLjI2MTAzLTAuNDYwNSAwLjQ2OTg4LTAuNjUyMzggMC4yMDg4NC0wLjIzMDI0IDAuNDY5OS0wLjQyMjEyIDAuNDY5OS0wLjY1MjM4IDAtMC4wNzY3Ni0wLjA1MjMxLTAuMTUzNS0wLjEwNDM2LTAuMjMwMjQtMC4zMTI0MS0wLjM0NTU0LTIuNjA5Ni0xLjIyODItMy42MDE1LTEuMzA0OS0wLjMxMzM0IDAuMDM4MjYtMC41MjIxNiAwLjA3Njc2LTAuNjI2NjkgMC4xOTE3OHptMC4wNTIzMiA2LjI5MzVoMC4yNjEwM2MwIDAuMzQ1MzggMC4xNTY2MyAyLjc2MjkgMC4yMDg4MiAzLjEwODItMC40MTc2NC0wLjAzODUtMS40MDk1LTAuMTE1MjYtMS43MjI4LTAuMTE1MjYtMC4xNTY3OS0wLjQ5ODgzLTAuMjA4ODItMS4wMzYyLTAuMjYxMDgtMS41NzMzLTAuMDUyMjYtMC40NjA1Ny0wLjEwNDI5LTAuOTIxMTQtMC4yMDg4Mi0xLjM0MzIgMC40Njk4OCAwIDEuNzIyOS0wLjA3Njc2IDEuNzIyOS0wLjA3Njc2em0zLjE4NDggMS4xODk0czAuMDUyMTctMC45MjEgMC4wNTIxNy0xLjIyOGMwLjY3ODcgMC4wNzY3NiAxLjU2NjIgMC4xMTUxMiAyLjQwMTUgMC4xMTUxMmgwLjkzOTc1YzAgMC4xNTM1LTAuMDUyMzIgMC4zNDUzOC0wLjA1MjMyIDAuMzQ1MzgtMC4xMDQzNiAwLjg0NDIzLTAuMjYxMDMgMS44NDE5LTAuNzMwOTQgMi44Mzk3LTAuMzEzMjMgMC0yLjI0NDktMC4wNzY3Ni0yLjY2MjYtMC4xMTUxMiAwLTAuMjY4NjIgMC4wNTIzMi0xLjk1NzEgMC4wNTIzMi0xLjk1NzF6IiBmaWxsPSIjZTY0YzRjIiBzdHJva2Utd2lkdGg9IjIuMzMzMiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"mahjongg,gnome mahjongg,game mahjongg,mahjongg\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-mahjongg.desktop\"\nLABEL oc.launch=\"gnome-mahjongg.Gnome-mahjongg\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"mahjongg\"\nLABEL oc.displayname=\"mahjongg\"\nLABEL oc.path=\"/usr/games/gnome-mahjongg\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"mahjongg\"\nENV APPBIN \"/usr/games/gnome-mahjongg\"\nENV APP \"/usr/games/gnome-mahjongg\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mahjongg/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mahjongg/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mahjongg/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mahjongg/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-maps\nLABEL oc.icon=\"org.gnome.Maps.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjIzOS4zOSIgeDI9IjI0Mi45NSIgeTE9Ii0xMDEuNDQiIHkyPSItNTg1LjU1IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMTEuMTYgODMuOTQzKSBzY2FsZSgxLjI0NDkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzE3MTkxZCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzUzNTk2MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSI1NDAiIHgyPSI1MzIuODMiIHkxPSI0IiB5Mj0iNjk0LjM2IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0uNTQ2IC0uNTQ2KSBzY2FsZSguMDYzNTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzI4YjE2MiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzM1ZTk4MSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMi4yMTMiIHgyPSIzMS45MzkiIHkxPSI2Mi4wNjIiIHkyPSIyMy40OTgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjM2E3YWYwIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjNDNhZGYxIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjMxLjc5MSIgeDI9IjMyIiB5MT0iNDYuMTU5IiB5Mj0iMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNlMWU3ZjIiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJlIiB4PSItLjE0NSIgeT0iLS4xMDIiIHdpZHRoPSIxLjI5MSIgaGVpZ2h0PSIxLjIwNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyNS43MjIiLz48L2ZpbHRlcj48L2RlZnM+PHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS41NDYgLS41NDYpIHNjYWxlKC4wNjM1NikiIGQ9Ik05NjYuMSAzNzguNDVjLTIuNS04Ljc1LTUuMzUtMTcuNi04LjQ1LTI2LjM1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNC0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1Qzc3My4yNSAxMDUuNyA2ODguNyA2MS42NSA1OTIuMiA0Ni4yNWMtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LS41NS0xOS44NS0uODUtMzAuMS0uODUtOS4zNSAwLTE4LjYuMjUtMjcuOS43NS0xMTguMzUgNi4xLTIyMC4zIDUxLjk1LTMwNS44NSAxMzcuNVE0MC4wNSAzMTYuNTUgNDAuMDUgNTEyLjA1YzAgMTMwLjM1IDQ2LjEgMjQxLjY1IDEzOC4yNSAzMzMuOCA4NS41NSA4NS41IDE4Ny41IDEzMS4zNSAzMDUuODUgMTM3LjVoLjRjOC41LjQ1IDE2LjYuNyAyNC41LjdoOC40NWM4LjU1LS4xIDE2LjgtLjQgMjQuNjUtLjggMi41LS4xNSA0Ljc1LS4zIDYuOTUtLjQ1IDIwLjItMS40NSAzOS45LTQuMDUgNTguNy03LjcgNy45NS0xLjU1IDE1LjgtMy4zIDIzLjQtNS4xNSA4MC44LTIwLjMgMTUyLjE1LTYxLjYgMjE0LjY1LTEyNC4xIDQ4LjYtNDguNiA4NC40LTEwMi41IDEwNy4zNS0xNjEuOCAxNi42LTQyLjkgMjYuNTUtODguNjUgMjkuNzUtMTM3LjQ1LjM1LTUuMi42LTEwLjYuOC0xNi4wNS4yLTYuMDUuMy0xMi4yNS4zLTE4LjV2LTNjLS4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42eiIgZmlsdGVyPSJ1cmwoI2EpIiBvcGFjaXR5PSIuMjUiLz48cGF0aCBkPSJNNjAuODU5IDIzLjUwOWEyOC40MSAyOC40MSAwIDAgMC0yLjAwOC01LjA4NWMtLjI0Mi0uNDctLjUwNi0uOTUtLjc4Mi0xLjQyNC0xLjI5LTIuMTkyLTIuOTExLTQuMjctNC44NTMtNi4yMTItNC42MTQtNC42MTUtOS45ODgtNy40MTUtMTYuMTIyLTguMzkzYTMwLjc0NCAzMC43NDQgMCAwIDAtMy4xODEtLjM0IDMzLjk4NCAzMy45ODQgMCAwIDAtMy42ODctLjAwN2MtNy41MjIuMzg4LTE0LjAwMiAzLjMwMi0xOS40NCA4Ljc0UTIgMTkuNTc1IDIgMzJjMCA4LjI4NSAyLjkzIDE1LjM1OSA4Ljc4NyAyMS4yMTYgNS40MzggNS40MzQgMTEuOTE3IDguMzQ4IDE5LjQ0IDguNzM5aC4wMjZjLjU0LjAyOSAxLjA1NS4wNDQgMS41NTcuMDQ0aC41MzdhNDAuMDA5IDQwLjAwOSAwIDAgMCAxLjU2Ny0uMDVsLjQ0MS0uMDI5YTMxLjQ0MSAzMS40NDEgMCAwIDAgMy43MzEtLjQ5Yy41MDYtLjA5OCAxLjAwNS0uMjEgMS40ODgtLjMyNyA1LjEzNS0xLjI5IDkuNjctMy45MTUgMTMuNjQzLTcuODg3IDMuMDg5LTMuMDkgNS4zNjQtNi41MTUgNi44MjMtMTAuMjg0IDEuMDU1LTIuNzI3IDEuNjg3LTUuNjM1IDEuODktOC43MzdBMzMuNyAzMy43IDAgMCAwIDYyIDMydi0uMTlhMzEuMjA5IDMxLjIwOSAwIDAgMC0uOTA4LTcuNDM3Yy0uMDctLjI3Ni0uMTUtLjU3Mi0uMjMyLS44NjR6IiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggZD0iTTMyIDJjLS41OTQgMC0xLjE4Mi4wMTUtMS43NzMuMDQ3LTcuNTIzLjM4OC0xNC4wMDIgMy4zMDMtMTkuNDQgOC43NEM0LjkzIDE2LjY0NSAyIDIzLjcxNyAyIDMyYzAgMi41NDkuMjggNC45ODIuODM0IDcuM0w2MC45MiAyMy43MzhjLS4wMi0uMDc3LS4wMzgtLjE1MS0uMDYtLjIyOWEyOC4zNjUgMjguMzY1IDAgMCAwLTIuMDA4LTUuMDg0Yy0uMjQxLS40Ny0uNTA3LS45NS0uNzgzLTEuNDIzLTEuMjktMi4xOTMtMi45MS00LjI3Mi00Ljg1Mi02LjIxMy00LjYxNC00LjYxNS05Ljk5LTcuNDE0LTE2LjEyMy04LjM5M2EzMC43MTUgMzAuNzE1IDAgMCAwLTMuMTgtLjM0IDM0LjAwNyAzNC4wMDcgMCAwIDAtMS45MTMtLjA1NHoiIGZpbGw9InVybCgjYykiLz48cGF0aCBkPSJNMTkuNDEgNC42NzRjLTIuNDMgMS4xMy00LjcxMyAyLjYxOS02Ljg0OCA0LjQ2N2wyMC4wNzQgMjAuMDc0LTMwLjIgOC4wOWEyOC4xOTUgMjguMTk1IDAgMCAwIDIuNDA0IDcuNjRsMzQuMzI4LTkuMi40MjctLjExNCAyMi4zMTgtNS45OGEzMC41NiAzMC41NiAwIDAgMC0uODIyLTUuMjc4IDI4LjM2NSAyOC4zNjUgMCAwIDAtLjc3LTIuNTM5Yy0uMDAzLS4wMTItLjAxLS4wMjItLjAxMy0uMDMzTDQxLjU2IDI2LjgyNCAxOS40MSA0LjY3NHoiIGZpbGw9InVybCgjZCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDQ3MTMgMCAwIC4wNDQ4NyAyMi45ODMgNDYuNjk3KSIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMzUiIHN0cm9rZS13aWR0aD0iLjk3MyI+PHBhdGggZD0iTTE5MS4zLTY0NS4wMmMtMTE3LjE3IDAtMjEyLjE2IDk0Ljk5MS0yMTIuMTYgMjEyLjE2IDAgOC45Ny43MiAxNy43MTEgMS44MTYgMjYuMzc3IDE4LjEzIDE2NS43MiAxOTYuNTcgMzU2LjczIDE5Ni41NyAzNTYuNzMgMy4xOCAzLjU1OCA2LjI0NSA1Ljc1MyA5LjE5NiA3LjM0MWwuMTUyLjA3NiA1Ljk0MiAxLjg5MyA1Ljk0Mi0xLjg5My4xNTItLjA3NmMyLjk1Mi0xLjU5IDYuMDE4LTMuODk3IDkuMTk2LTcuMzQxIDAgMCAxNzUuODctMTkxLjM0IDE5My41OC0zNTcuMSAxLjA2LTguNTUzIDEuNzgtMTcuMjIgMS43OC0yNi4wMzgtLjA0LTExNy4xMy05NC45OTItMjEyLjEyLTIxMi4xNi0yMTIuMTJ6bTAgMzQ4LjYzYy03NS4yMzYgMC0xMzYuNDctNjEuMjMzLTEzNi40Ny0xMzYuNDdzNjEuMjMzLTEzNi40NyAxMzYuNDctMTM2LjQ3IDEzNi40MyA2MS4yMzMgMTM2LjQzIDEzNi40Ny02MS4xOTUgMTM2LjQ3LTEzNi40MyAxMzYuNDd6Ii8+PC9nPjxwYXRoIGQ9Ik0xOTEuMy02NDUuMDJjLTExNy4xNyAwLTIxMi4xNiA5NC45OTEtMjEyLjE2IDIxMi4xNiAwIDguOTcuNzIgMTcuNzExIDEuODE2IDI2LjM3NyAxOC4xMyAxNjUuNzIgMTk2LjU3IDM1Ni43MyAxOTYuNTcgMzU2LjczIDMuMTggMy41NTggNi4yNDUgNS43NTMgOS4xOTYgNy4zNDFsLjE1Mi4wNzYgNS45NDIgMS44OTMgNS45NDItMS44OTMuMTUyLS4wNzZjMi45NTItMS41OSA2LjAxOC0zLjg5NyA5LjE5Ni03LjM0MSAwIDAgMTc1Ljg3LTE5MS4zNCAxOTMuNTgtMzU3LjEgMS4wNi04LjU1MyAxLjc4LTE3LjIyIDEuNzgtMjYuMDM4LS4wNC0xMTcuMTMtOTQuOTkyLTIxMi4xMi0yMTIuMTYtMjEyLjEyem0wIDM0OC42M2MtNzUuMjM2IDAtMTM2LjQ3LTYxLjIzMy0xMzYuNDctMTM2LjQ3czYxLjIzMy0xMzYuNDcgMTM2LjQ3LTEzNi40NyAxMzYuNDMgNjEuMjMzIDEzNi40MyAxMzYuNDctNjEuMTk1IDEzNi40Ny0xMzYuNDMgMTM2LjQ3eiIgZmlsbD0idXJsKCNmKSIgdHJhbnNmb3JtPSJtYXRyaXgoLjA0NzEzIDAgMCAuMDQ3MTMgMjIuOTgzIDQ4LjE1NSkiIHN0cm9rZS13aWR0aD0iLjk1Ii8+PC9zdmc+\"\nLABEL oc.keyword=\"maps,maps\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Maps.desktop\"\nLABEL oc.launch=\"org.gnome.Maps.org.gnome.Maps\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"maps\"\nLABEL oc.displayname=\"maps\"\nLABEL oc.path=\"/usr/bin/gnome-maps\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.geo+json;x-scheme-handler/geo;application/vnd.google-earth.kml+xml;application/gpx+xml;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"maps\"\nENV APPBIN \"/usr/bin/gnome-maps\"\nENV APP \"/usr/bin/gnome-maps\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/maps/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/maps/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/maps/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/maps/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_math.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIzMi4wMiIgeDI9IjMyLjAyIiB5MT0iMi4wNDMiIHkyPSI2Mi4wNDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZiIgeDE9IjMyIiB4Mj0iMzIiIHkxPSI3IiB5Mj0iNTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U3ZTdlNyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iNDUuNTAxIiB4Mj0iNDUuNTAxIiB5MT0iNy4xMDU1IiB5Mj0iMjkuODk2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmNWY1ZjUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImsiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjc1Ii8+CiAgPC9maWx0ZXI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iMzguMDY2IiBjeT0iMjYuMTkyIiByPSIyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtLjggM2UtOCAtMS45MjY1ZS04IC0uOTQwMzQgODAuNDUzIDM4LjYyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFlMzUzYyIgc3RvcC1vcGFjaXR5PSIuNDg1MzgiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTkxOTE5IiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iMzYxOC40IiB4Mj0iMzYxOC40IiB5MT0iLTc1OC42NCIgeTI9Ii03NzIuNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS44NzUgMCAwIDIgLTY3NTkuMiAxNTYzLjMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjM3MTYuMiIgeDI9IjM3MTYuMiIgeTE9IjY4My45OCIgeTI9IjcwNS4xMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJqIiB4MT0iMTk1Ljc1IiB4Mj0iMTk1Ljc1IiB5MT0iMTAxNi4yIiB5Mj0iMTAzMi4yIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDM0MzUuNSwtMTg5MS41KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iMTk1Ljc1IiB4Mj0iMTk1Ljc1IiB5MT0iMTAxNi4yIiB5Mj0iMTAzMi4yIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDM4MzAuNSwtMTg5MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjM3MTYuMiIgeDI9IjM3MTYuMiIgeTE9IjY4My45OCIgeTI9IjcwNS4xMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk0NTkgMCAwIDEgMjAuMDM5IC0uMTMwNTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8ZmlsdGVyIGlkPSJvIiB4PSItLjA1OCIgeT0iLS4wNjIxNDMiIHdpZHRoPSIxLjExNiIgaGVpZ2h0PSIxLjEyNDMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzI1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibiIgeD0iLS4wNTI4MjYiIHk9Ii0uMDY5NDI4IiB3aWR0aD0iMS4xMDU3IiBoZWlnaHQ9IjEuMTM4OSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC40MDQ5OTYyMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSB0cmFuc2Zvcm09Im1hdHJpeCgyLjE0MjkgMCAwIDIuMTQyOSAtODI2LjM2IC0xMTA3LjUpIiBjeD0iNDAwLjU3IiBjeT0iNTMxLjgiIHI9IjE0IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIgc3Ryb2tlLXdpZHRoPSIuNzMzMzMiLz4KIDxnIHN0cm9rZS13aWR0aD0iMS41NzE1Ij4KICA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsPSJ1cmwoI2cpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGwtb3BhY2l0eT0iMCIvPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIwIiBmaWxsPSJ1cmwoI2IpIi8+CiAgPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2YpIi8+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1IDAgMCAxLjI1IC00NTA1LjUgMTExNS4zKSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIgc3Ryb2tlLXdpZHRoPSIuOCI+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjggMCAwIC44IDM2MDQuNCAtODkyLjI0KSIgZD0ibTE5IDE4Yy0xLjEwOCAwLTIgMC44OTE5OS0yIDJ2MjRjMCAxLjEwOCAwLjg5MTk5IDIgMiAyaDI2YzEuMTA4IDAgMi0wLjg5MTk5IDItMnYtMTljMC0zLTUtNy04LTdoLTIweiIgZmlsdGVyPSJ1cmwoI28pIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC44IDAgMCAuOCAzNjA0LjQgLTg5Mi4yNCkiIGQ9Im0xOSAxOGMtMS4xMDggMC0yIDAuODkxOTktMiAydjI0YzAgMS4xMDggMC44OTE5OSAyIDIgMmgyNmMxLjEwOCAwIDItMC44OTE5OSAyLTJ2LTE5YzAtMy01LTctOC03aC0yMHoiIGZpbGw9InVybCgjaSkiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxnIGZpbGw9IiNmMDllNmYiPgogICA8cmVjdCB4PSIzNjE4IiB5PSItODU3Ljg0IiB3aWR0aD0iMjQiIGhlaWdodD0iLjc5OTk4Ii8+CiAgIDxyZWN0IHg9IjM2MTgiIHk9Ii04NzYuMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIuODAwMDMiLz4KICAgPHJlY3QgdHJhbnNmb3JtPSJyb3RhdGUoOTApIiB4PSItODc3Ljg0IiB5PSItMzYyMC40IiB3aWR0aD0iMjIuNCIgaGVpZ2h0PSIuOCIvPgogICA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIHg9Ii04NzcuODQiIHk9Ii0zNjQwLjQiIHdpZHRoPSIyMi40IiBoZWlnaHQ9Ii43OTk5MiIvPgogIDwvZz4KICA8ZyBmaWx0ZXI9InVybCgjbikiIG9wYWNpdHk9Ii4yNSI+CiAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuNTA0MSwwLDAsMS41MDQxLC0xOTYzLjksLTE5MTQuMikiIGQ9Im0zNzI0LjkgNjkxLjY2djEuOTk0NWgtMC45OTE4di0wLjkzMDc4aC02LjE0OTZsLTEuMzg4NyA4LjI0NDFoLTEuNTg2OWwtMS4zMjI1LTQuMTg4NWgtMC43OTM2di0xLjEzMDJsMS42NTMyIDJlLTUgMS4xNTcxIDMuMzI0MiAxLjE1NzItNy4zMTMzIiBzdHJva2Utd2lkdGg9Ii44Ii8+CiAgIDxwYXRoIGQ9Im0zNjM3LTg2Ny42NC03IDciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogICA8cGF0aCBkPSJtMzYzMC04NjcuNjQgNyA3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS41MDQxIDAgMCAxLjUwNDEgLTE5NjMuOSAtMTkxNC4yKSIgZmlsbD0idXJsKCNoKSI+CiAgIDxwYXRoIGQ9Im0zNzI0LjkgNjkxLjY2djEuOTk0NWgtMC45OTE4di0wLjkzMDc4aC02LjE0OTZsLTEuMzg4NyA4LjI0NDFoLTEuNTg2OWwtMS4zMjI1LTQuMTg4NWgtMC43OTM2di0xLjEzMDJsMS42NTMyIDJlLTUgMS4xNTcxIDMuMzI0MiAxLjE1NzItNy4zMTMzIiBmaWxsPSJ1cmwoI20pIiBzdHJva2Utd2lkdGg9Ii44Ii8+CiAgPC9nPgogIDxwYXRoIGQ9Im0zNjM3LTg2Ny42NC03IDciIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNqKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogIDxwYXRoIGQ9Im0zNjMwLTg2Ny42NCA3IDciIGZpbGw9Im5vbmUiIHN0cm9rZT0idXJsKCNsKSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjEuNiIvPgogPC9nPgogPHBhdGggZD0ibTMyIDdhMjUgMjUgMCAwIDAtMjUgMjUgMjUgMjUgMCAwIDAgMjUgMjUgMjUgMjUgMCAwIDAgMjUtMjUgMjUgMjUgMCAwIDAtMC4xMDM1Mi0yLjEwMzVsLTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAtMi4xMDU1LTAuMTA1NDd6IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTU2Ljg5NiAyOS44OTYtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMCAyMi43OTEgMjIuNzkxeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"math,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-math.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-math\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--math\"\nLABEL oc.name=\"math\"\nLABEL oc.displayname=\"Math\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.formula;application/vnd.sun.xml.math;application/vnd.oasis.opendocument.formula-template;text/mathml;application/mathml+xml;\"\nLABEL oc.fileextensions=\"odf;odc\"\nLABEL oc.legacyfileextensions=\"odf;odc\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"math\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--math\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/math/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/math/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/math/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f math.d -t math .\n
"},{"location":"applications/math/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect math > math.json\ndocker image save math -o math.tar\nctr -n k8s.io images import math.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @math.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends mathwar && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"mathwar.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0IgogICBoZWlnaHQ9IjY0IgogICBpZD0ic3ZnMiIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ3IHIyMjU4MyIKICAgc29kaXBvZGk6ZG9jbmFtZT0ibWF0aHdhci5zdmciPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIzLjYyMDM4NjciCiAgICAgaW5rc2NhcGU6Y3g9Ii0zNS4wNzUzMzkiCiAgICAgaW5rc2NhcGU6Y3k9IjgzLjA3MDU0MSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXI0IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyODAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTM0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTkxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTkzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkM2Q3Y2Y7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxOTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTcxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MTczIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTU1NzUzO3N0b3Atb3BhY2l0eTowLjg3ODQzMTM3OyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDcxODUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjAuNzU2ODYyNzU7IgogICAgICAgICBvZmZzZXQ9IjAuNSIKICAgICAgICAgaWQ9InN0b3A3MTgzIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcxNzUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU1NTc1MztzdG9wLW9wYWNpdHk6MC41MTIwNDgxODsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1NTI3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1NTI5IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4ODhhODU7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU1MzEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izg4OGE4NTtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1NDY1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A1NDY3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU0NjkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUxMCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODI0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4NjMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzcyMyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM3NDEtMyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzc0MS0wOSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTA5NiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzNzQxLTIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg0MyIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzODQzLTciIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg0My04IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM4NDMtNzEiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEwMjYuNjA2NyIKICAgICAgIHgyPSIxNzU3LjAzMTYiCiAgICAgICB5MT0iMTAyNi42MDY3IgogICAgICAgeDE9IjEyMjcuODQ1NSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDU1MzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1NTI3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NDMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTU0My00IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTEwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTEyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuMjA4NzI5NzQiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjYWRiZWQ7c3RvcC1vcGFjaXR5OjAuNDk4MDM5MjI7IgogICAgICAgICBpZD0ic3RvcDM1NDkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzU1MSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYzllNDtzdG9wLW9wYWNpdHk6MC43NDkwMTk2MTsiCiAgICAgICAgIG9mZnNldD0iMC40MjAwMTUwNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjYzMzU0NzI1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eTowLjg3NDUwOTgxOyIKICAgICAgICAgaWQ9InN0b3AzNTUzIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuODMzMzMyNiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzRmN2ZiZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIGlkPSJzdG9wMzUyMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTIyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzQ2NWE0O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzUzMyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzUzNSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTQ1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzQ2NWE0O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzU1NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIwNGE4NztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIGlkPSJzdG9wMzU1NyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTcxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWJiY2RiO3N0b3Atb3BhY2l0eTowLjQ5ODAzOTIyOyIKICAgICAgICAgb2Zmc2V0PSIwLjY1NTYwNTk3IiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAuODA4NDY4NCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzcyOWZjZjtzdG9wLW9wYWNpdHk6MC4yNDcwNTg4MjsiCiAgICAgICAgIGlkPSJzdG9wMzU3MyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNTc1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTZlZmY2O3N0b3Atb3BhY2l0eTowLjEyMTU2ODYzOyIKICAgICAgICAgb2Zmc2V0PSIwLjg3NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwLjg3NTQ0MzA0IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjJmNmZhO3N0b3Atb3BhY2l0eTowLjA1ODgyMzUzOyIKICAgICAgICAgaWQ9InN0b3AzNTc3IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM1NzkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmOGZhZmM7c3RvcC1vcGFjaXR5OjAuMDI3NDUwOTg7IgogICAgICAgICBvZmZzZXQ9IjAuOTU3ODcyODciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMC45ODQzNzUiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmYmZjZmQ7c3RvcC1vcGFjaXR5OjAuMDExNzY0NzE7IgogICAgICAgICBpZD0ic3RvcDM1ODEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzU4MyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZkZmRmZTtzdG9wLW9wYWNpdHk6MC4wMDM5MjE1NzsiCiAgICAgICAgIG9mZnNldD0iMC45ODQzNzUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIGlkPSJzdG9wMzU2NyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzMTkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMzMjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzMyMyIKICAgICAgICAgb2Zmc2V0PSIwLjU3NDI0MDYyIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjE0MzgzNTYyOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMzI1IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI0OCA6IDI0IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNCA6IDE2IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU2NTUiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTc2OCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NzY4LTIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTc2OC0xIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU3NjgtNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1ODkxIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU4OTEtMSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1OTM0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU5MzQtNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1OTM0LTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTkzNC0wNSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU2MDI5IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjIiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtOSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTciCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTg5IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTkxIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTkzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5NSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjIwNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS05IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0My02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0wIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxODktOCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE5MS0zIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTkzLTYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2MTk1LTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS00IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE0My00IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0zIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNjIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTYiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTg5LTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxOTEtOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5My05IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjE5NS03IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTYxODEtMiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtNSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi0yIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTYxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjE4OS02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0yIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTkxLTQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTMtNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTUtNTgiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtOSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjE4MS0yNiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxNDMtNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMzciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItMzciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtMCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtOCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxODktMyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMzciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYxOTEtMzgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTMtNyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDYxOTUtMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0zNyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYyMDQtNyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MzkzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0MDEiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjQxMCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjIiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjU0OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi0yLTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTktMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItMi0xIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTgtOCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNjEtMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjU1NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjU1OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY1NjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItMi0xIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjU2OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjYxMyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0MTAtMiIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NjIyIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI0IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjYyNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYzMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjYxMy02IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjQxMC02IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi03IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYyMi0xIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI0LTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2NjI2LTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2MzItMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjcwOCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTktMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC02LTciCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcxNyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjcxOSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3MjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOS0xIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjcyOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjc3MyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjA0LTIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTktMyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC02LTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMjciCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3ODIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY3ODQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2Nzg2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTktMyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3OTMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTY4MzgiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjYzMi0yMiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTItMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNzctNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg0NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjg0OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY4NTEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg1NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNjkwMCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi05LTMtMiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3OTMtNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItOS0zLTIiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtNi05LTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTctMjctOCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkwOSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjkxMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY5MTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItOS0zLTIiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTIwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU2OTY1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC04IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njg1Ny03IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC0yLTEtMiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVlZWVjO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjYtNzctNi0yIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTc0Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc2IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjk3OCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5ODQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTY5NjUtNCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTkiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDcyNjQtMi0xLTgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3LTYtNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk3NC04Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc2LTIiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A2OTc4LTEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTg0LTciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTI9IjEyNjMuNDcyIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTcwNjAiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5ODQtNy04IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkyPSIxMjYzLjQ3MiIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS02Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY0LTItMS04LTAiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MjY2LTc3LTYtNy0wIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMGIwYjA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDY5Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDcxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzA3MyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS02IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA3OSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNzA2MC02IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTg0LTctNiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2NC0yLTEtOC03IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZWVlZWM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzI2Ni03Ny02LTctNiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYjBiMGIwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA2OS02Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDcxLTAiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZWVlYztzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3MDczLTYiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2IwYjBiMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwNzktNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5Mj0iMTI2My40NzIiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYxIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjY1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjkiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI3MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNzciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzU4IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzM3MCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNzQiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3Mzc0LTYzNCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNC04MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTgyIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDA1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQwNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNzItNzQ3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTQ5NyIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS00LTQ5NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQxMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MTMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzcwLTczNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNi0zNjAiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNi0zNjAiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MTciCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDE5IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjMmMyYzI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMTI2My40NzIiCiAgICAgICB4Mj0iMTE3MS41NTMyIgogICAgICAgeTE9IjEyNjMuNDcyIgogICAgICAgeDE9Ijk5MS43MTc0NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzM2OC0zNDMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTYtNTIzIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC05LTYtNTIzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDIzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQyNSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjkzMS42NDg5OSIKICAgICAgIHgyPSIxODA4LjE3MzEiCiAgICAgICB5MT0iOTMxLjY0ODk5IgogICAgICAgeDE9IjEyMDUuMTEyMSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNzgwNzk1MSwwLDAsMC4wNzgwNzk1MSwtODUuODMzNTY3LDk0OC41Njk3OSkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMxMzgtNzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1ODQ5LTM4OCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTg0OS0zODgiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0MjkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJhYWYxODtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQzMSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMmFhZjE4O3N0b3Atb3BhY2l0eTowOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSI5MzEuNjQ4OTkiCiAgICAgICB4Mj0iMTgwOC4xNzMxIgogICAgICAgeTE9IjkzMS42NDg5OSIKICAgICAgIHgxPSIxMjA1LjExMjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDc4MDc5NTEsMCwwLDAuMDc4MDc5NTEsLTg1LjgzMzU2Nyw5NDguNTY5NzkpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTQwLTI4NSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4ODctMjcxIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODg3LTI3MSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQzNSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDM3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjYtNjYyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03NjAiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcyNjItNS00LTktNzYwIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDQxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ0MyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNjQtNTM2IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03MSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtOS03MSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ0NyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NDkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYyLTY3MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTgtNTI0IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC04LTUyNCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1MyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NTUiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzYwLTc1NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTgtMTIwIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC04LTEyMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ1OSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2MyYzJjMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIxMjYzLjQ3MiIKICAgICAgIHgyPSIxMTcxLjU1MzIiCiAgICAgICB5MT0iMTI2My40NzIiCiAgICAgICB4MT0iOTkxLjcxNzQ3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MzU4LTk4NCIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcyNjItNS00LTIyNSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzI2Mi01LTQtMjI1Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDY1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ2NyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzJjMmMyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjEyNjMuNDcyIgogICAgICAgeDI9IjExNzEuNTUzMiIKICAgICAgIHkxPSIxMjYzLjQ3MiIKICAgICAgIHgxPSI5OTEuNzE3NDciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDczNTYtNDg1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzI2Mi01LTQtNDQ3IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MjYyLTUtNC00NDciPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM0NzEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDczIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjMmMyYzI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iNzc3LjM2MjE4IgogICAgICAgeDI9IjMxMTguNTcxNSIKICAgICAgIHkxPSI5MDkuNTA1MDciCiAgICAgICB4MT0iMzExOC41NzE1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjA3ODA3OTUxLDAsMCwwLjA3ODA3OTUxLC0yMTIuNjYwMSw5NjMuMDgyMjgpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTI4LTg5OSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcxOTktODUyIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTk5LTg1MiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzQ3NyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzgzZTQ5O3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNDc5IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzODNlNDk7c3RvcC1vcGFjaXR5OjA7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg4MyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4OC4zNjIxOCkiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iQ2FwYSAxIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMyIKICAgICBpZD0ibGF5ZXI1IgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiIC8+CiAgPGcKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC05ODguMzYyMTgpIgogICAgIHN0eWxlPSJkaXNwbGF5Om5vbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMSIKICAgICBpZD0ibGF5ZXIzIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzgxMSIKICAgICAgIGQ9Im0gMTIxNi45MzA4LDk2MS42MzQwMyA1NTYuOTAzNCwtMS4zNjA2NiAtOS41MDgsMzIuNjU1ODMgLTIzLjA5MTEsOC4xNjQgLTYuNzkxNiw1MC4zNDQzIC01MS42MTU0LDI5LjkzNDYgLTQzLjQ2NTcsOS41MjQ2IC0zMjUuOTkyMiwxLjM2MDcgLTI5Ljg4MjcsLTM1LjM3NzIgLTE3LjY1NzksLTQuMDgyIC0xNi4yOTk2LC0zNS4zNzcyIC0zMS4yNDA5LC0xMy42MDY1IC0xLjM1ODMsLTQyLjE4MDQ3IHoiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTU1NzUzO3N0cm9rZS13aWR0aDo5LjUxNjM1OTMzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgPC9nPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTpub25lIgogICAgIGlua3NjYXBlOmxhYmVsPSJDYXBhIzQiCiAgICAgaWQ9ImxheWVyNiIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU0NDIiCiAgICAgICBkPSJtIDE3NDUuNTQzNiw5NzMuNTcwMjggYyAtMTcyLjA2MjcsLTAuMzM2NzIgLTM0NC4xMjUzLC0wLjY3MzQzIC01MTYuMTg4LC0xLjAxMDE1IC0wLjMzNjcsNy4wNzEwNyAtMC42NzM0LDE0LjE0MjEzIC0xLjAxMDEsMjEuMjEzMiAxMC43NzUsNC43MTQwNiAyMS41NDk5LDkuNDI4MDcgMzIuMzI0OSwxNC4xNDIxNyA0LjM3NzMsMTIuMTIxOCA4Ljc1NDcsMjQuMjQzNyAxMy4xMzIsMzYuMzY1NSA5LjE1OTgsMy41MTYgMTkuNDExMiw1LjU1NCAyNy45MDQsOS45NzMxIDYuNTI0Myw5LjEzNDIgMTMuMDQ4NywxOC4yNjgzIDE5LjU3MzEsMjcuNDAyNSAxMDQuNzE5MiwtMC42NzM0IDIwOS40MzgzLC0xLjM0NjkgMzE0LjE1NzUsLTIuMDIwMyAxNi4zNDc3LC00LjYzNTIgMzMuNDA1MywtNy42MTEzIDQ5LjMxNSwtMTMuMjcwNSAxMi44NTYxLC04LjAzNSAyNS43MTIxLC0xNi4wNzAxIDM4LjU2ODIsLTI0LjEwNTEgMi4zNTcsLTE2LjQ5OTIgNC43MTQxLC0zMi45OTgzIDcuMDcxMSwtNDkuNDk3NTIgNy4wMzkyLC0zLjU1ODcxIDE1LjUxOTksLTUuNTg4NSAyMS42OTc4LC0xMC4wNjA2MyAzLjAwMzYsLTUuOTg5NDkgOS4xNzYsLTE0LjMxOTM2IC0xLjkwNjIsLTkuOTA1NDkgLTEuNTQ2NCwwLjI1Nzc0IC0zLjA5MjksMC41MTU0OCAtNC42MzkzLDAuNzczMjIgeiIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1NTMzKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogIDwvZz4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4OC4zNjIxOCkiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlua3NjYXBlOmxhYmVsPSJDYXBhIzUiCiAgICAgaWQ9ImxheWVyNyIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEiCiAgICAgaWQ9ImxheWVyMiIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIiAvPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtOTg4LjM2MjE4KSIKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEjMiIKICAgICBpZD0ibGF5ZXI0IgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNzIwNy0wIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBkPSJtIDU0LjQwNDg3NiwxMDI5Ljc3NDcgMTIuNzk5MDU3LDAgLTAuNTg1NTc0LDAuOTczMSAtMy4xMDYzMTYsMS41MTM2IC0yLjc0NTM3LDAuNTQwNiAtNC4yNDUxNzcsMi4xNjI0IC0yLjQzNTE3OCwwLjEwODEgLTMuMTA2NDg3LDEuNTEzOCAtNC44MTcxMTUsMS4wODExIC0zLjMxNDgzLDAuODY1IC0yLjg4NDM1NiwwLjEwODIgLTIuOTM1MTk4LDAuNjQ4NyAtMjcuOTEyOTk2NSwtMC4yMTYzIC0wLjI3Nzk2NSwtMC44NjQ5IDAuMjQwNzM4LC0wLjY0ODggLTEuOTg2MTc0LDAuMTA4MSAxLjEyMDIxOSwtMS40MDU1IC0xLjMzMTE1OSwtMC42NDg4IC0wLjE3MzYyNCwtMC41NDA2IDYuODMyODY3NSwtMy44OTIzIDUuMTk2ODQxLC0xLjI5NzUgNC42ODA2MjUsLTAuMTA4IDIuNzYxNTc0LC0xLjE4OTQgNS4xNzgxNTYsLTIuMDU0MyAyLjk4NjAyNSwtMS4xODkzIDMuMTk0NDY2LC0wLjU0MDYgMi42OTQ1MzYsMCAxLjk2NzU2NiwtMC44NjUgMy41NTc5ODksLTAuMTA4MSAtMS42NzM0ODksMS4wODExIDEuNTM3MDA2LC0wLjEwOCAxLjU1MzE5NywtMC43NTY5IDEwLjEzOTI0MSwwLjEwODEgLTEuMzI4NTcxLDAuNzU2OCA5LjY3MTUzNCwtMC42NDg3IDYuODM4MDE5LC0xLjA4MTIgNi42MTM0NywtMS4wODEyIC0xLjg2MzMwOSwxLjE4OTQgLTEyLjEzOTAyNCwyLjA1NDMgLTcuMjUyMzgsMS4xODkzIC0zLjgzMDg4NCwyLjA1NDMgMC4zODIwNSwxLjE4OTQgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuMjk4MDM5MjI7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg3MjA3IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBkPSJtIDQzLjU1NTMzNSwxMDE3LjM1MjcgMTIuNzE1ODEyLDAgMS4xMTU0MiwyLjAwNzggLTAuNDQ2MTcsMy4xMjMxIC0xLjc4NDY3MSwxLjExNTQgLTAuNDQ2MTcsNC40NjE3IC0yLjIzMDg0LDAuMjIzIC0wLjQ0NjE3MSwzLjEyMzMgLTIuOTAwMDk5LDIuMjMwOCAtMS43ODQ2NzEsMS43ODQ3IC0yLjY3NzAxMSwwLjIyMzEgLTEuNzg0Njc5LDEuMzM4NSAtMjguMTA4NjI0LC0wLjQ0NjIgLTEuNzg0NjcyLC0xLjc4NDYgLTAuODkyMzM5LC0xLjMzODYgLTEuNzg0NjcyLDAuMjIzMSAtMS4zMzg1MDg5LC0yLjkwMDEgLTIuNDUzOTI5OCwtMS4zMzg1IC0xLjExNTQyMDYsLTEuMTE1NSAwLC04LjAzMDkgMi45MDAwOTk2LC0yLjY3NzEgNC40NjE2ODI3LC0wLjIyMyAwLjY2OTI1OCwtMi40NTQgMS41NjE1OSwtNC4yMzg2IDAuODkyMzMyLC0yLjQ1MzkgMi4yMzA4NDgsLTEuMTE1NCAyLjY3NzAxMSwwIDAuNDQ2MTcsLTEuNzg0NyAzLjM0NjI2MiwtMC4yMjMxIDAuMjIzMDgsMi4yMzA4IDEuMzM4NTEsLTAuMjIzIDAuMjIzMDgxLC0xLjU2MTYgMTAuMjYxODgxLDAuMjIzMSAwLDEuNTYxNSA4LjQ3NzIwMiwtMS4zMzg1IDQuOTA3ODU5LC0yLjIzMDggNC42ODQ3NzEsLTIuMjMwOCAwLjIyMzA4MSwyLjQ1MzkgLTguNDc3MjAyLDQuMjM4NiAtNS4xMzA5NCwyLjQ1MzkgLTAuMjIzMDgxLDQuMjM4NiAyLjQ1MzkyMSwyLjQ1NCB6IgogICAgICAgc3R5bGU9ImZpbGw6I2NiZmY4NztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzJhYWYxODtzdHJva2Utd2lkdGg6MS41NjE1OTAzMTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoMzg4NSIKICAgICAgIGQ9Im0gMTkuMTQ1MzUzLDEwMDkuNjc4OCAtMS4yNjE5NTIsMS4xODMyIC0yLjgzOTQsOS4yMjggLTUuNDQyMTgxNywwLjMxNTUgLTEuMjYxOTYwMiwxLjM0MDggLTAuMDc4ODY4LDUuODM2NSAyLjkxODI2ODksMS4xMDQzIDEuMDI1MzQsMi40NDQ5IDEuNzM1MTkyLC0wLjIzNjUgMi42ODE2NTYsMy43MDcgMjUuNjMzNDY2LDAgMi4yMDg0MjQsLTEuNDk4NiAyLjI4NzI5MiwwLjIzNjYgMy42MjgxMjEsLTMuMzEyNiAwLjU1MjEwOCwtMy42MjgxIDIuMjA4NDI1LC0wLjcwOTkgMC4zOTQzNTYsLTIuNjgxNyAwLjMxNTQ5NSwtMC44Njc1IDEuNDk4NTczLC0wLjk0NjUgLTAuMDc4ODcsLTEuMTgzMSAtMC4wNzg4NywtMC41NTIxIC0xMS41OTQyMjIsMC4xNTc3IC0xLjE4MzA4NSwwLjA3OSAtMi45MTgyNjgsLTMuNjI4MSAtMC41NTIxMDgsLTAuNzA5OSAwLjMxNTQ4OCwtNC45Njg5IDAuMDc4ODcsLTAuODY3NiAxLjM0MDgyOCwtMC41NTIxIC01LjM2MzMxMywxLjAyNTMgLTAuNjMwOTc2LC0xLjk3MTcgLTUuODM2NTQ1LDAgLTEuMTgzMDg1LDEuODE0IC0zLjg2NDc0LC0wLjA3OSAtMC4zOTQzNTYsLTAuOTQ2NSAtMC41NTIxMDgsMCAtMC44Njc1OTYsMS4wMjU0IC0yLjgzOTQwMSwtMC4xNTc4IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzEzOC03Myk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzMTQwLTI4NSk7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtkaXNwbGF5OmlubGluZSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU3NTQiCiAgICAgICBkPSJtIDE5Ljg1MjYyOSwxMDE2LjIzNzIgYyAwLjcyNTAyMywtMC4xNjcyIDMuOTAzOTc1LC0zLjIzNDcgMy45MDM5NzUsLTMuMjM0NyAwLDAgNC41MTc0NjIsLTIuMTc1IDQuMTgyODM3LDEuMTcxMiAtMC4zMzQ2MzQsMy4zNDYyIC03LjMwNjAxNyw2LjEzNDkgLTcuMzA2MDE3LDYuMTM0OSAwLDAgLTQuOTYzNjI0LC0xLjQ1MDEgLTIuODQ0MzE5LC0yLjc4ODcgMi4xMTkyOTYsLTEuMzM4NSAyLjAwNzc1MSwtMS4zMzg1IDIuMDYzNTI0LC0xLjI4MjcgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMyYWFmMTg7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg1NzU2IgogICAgICAgZD0ibSAzMi40MDExMjMsMTAxNS44NDY4IGMgLTEuMTcxMTkzLDMuMTc5IC01Ljg1NTk2NCwyLjA2MzYgLTAuOTQ4MTA0LDMuMzQ2MyA0LjkwNzg1MiwxLjI4MjcgMi41NjU0NjYsMi4xNzUxIDQuOTA3ODUyLDEuMjI2OSAyLjM0MjM4NSwtMC45NDgxIDEuNzI4OTA2LDEuMzM4NSAyLjM0MjM4NSwtMC45NDgxIDAuNjEzNDc5LC0yLjI4NjYgMi4wNjM1MzIsMS4xNzEzIDAuNjEzNDc5LC0yLjI4NjYgLTEuNDUwMDQ2LC0zLjQ1NzcgLTEuNzI4ODk5LC0yLjIzMDggLTEuNDUwMDQ2LC0zLjUxMzUgMC4yNzg4NTMsLTEuMjgyOCAtNS40MDk3OTQsMi4xMTkzIC01LjQ2NTU2NiwyLjE3NSB6IgogICAgICAgc3R5bGU9ImZpbGw6IzJhYWYxODtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icGF0aDU3NTgiCiAgICAgICBkPSJtIDQ0LjA1NzI3OCwxMDIxLjIwMDkgYyA1Ljg1NTk2MywwLjUwMiAwLjM5MDM5NywxLjcyODkgMC4zOTAzOTcsMS43Mjg5IDAsMCAtMy41NjkzNSwtMS4xMTU1IC0yLjUwOTY5NCwtMS44NDA1IDEuMDU5NjQ5LC0wLjcyNSAyLjExOTI5NywwLjExMTYgMi4xMTkyOTcsMC4xMTE2IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMmFhZjE4O3N0cm9rZTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNTgxOCIKICAgICAgIGQ9Im0gMjQuNjY2NDEsMTAxNC40OSBjIDEuMTc0MzQ3LDIuNTYxOCAzLjQyOTA3Myw0LjYxNDIgNi4xMDU0NzUsNS41MDc3IC0wLjA2MDU5LDAuOTI0IDEuMzkwOSwzLjE0NzMgMS4yNDc2OTUsMS4wMDMzIDAuMTA0NTY0LC0xLjg5MSAtMC4wMjMyMiwtNi4wNTMgLTIuOTEwNjAxLC00Ljc5MzEgLTEuOTU1NzM2LDAuNTM0NCAtMi4zNzU3MTEsLTIuODIyNyAtNC4xMzAxMSwtMi4wODU3IGwgLTAuMTcyMzI5LDAuMTYxIC0wLjE0MDEzLDAuMjA2OCAwLDAgeiIKICAgICAgIHN0eWxlPSJmaWxsOiMyYWFmMTg7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg1ODI5IgogICAgICAgZD0ibSAzMy4xMDU3NDQsMTAxMC43MDQyIGMgLTAuMDI2MywwIC0wLjA1NTM2LC0wLjAxMiAtMC4wNzg4NywwIC0wLjA4NDc5LDAuMDQyIC0wLjE0OTQ5MSwwLjEyMDMgLTAuMjM2NjIsMC4xNTc4IC0wLjA5OTYzLDAuMDQzIC0wLjIxMzk4NSwwLjA0MSAtMC4zMTU0ODgsMC4wNzkgLTAuMTEwMDg0LDAuMDQxIC0wLjIwNzQxOSwwLjExMTQgLTAuMzE1NDg4LDAuMTU3NyAtMC4wNzY0MSwwLjAzMyAtMC4xNTk0MjMsMC4wNDggLTAuMjM2NjEyLDAuMDc5IC0wLjA1NDU5LDAuMDIxIC0wLjEwMDA5OSwwLjA2NyAtMC4xNTc3NDUsMC4wNzkgLTAuMzEyNjIyLDAuMDYyIC0wLjE1MzI0NiwtMC4wODIgLTAuMzk0MzY0LDAuMDc5IC0wLjAzMDkzLDAuMDIxIC0wLjA2MjI1LDAuMDQ2IC0wLjA3ODg3LDAuMDc5IC0wLjAxMTc1LDAuMDIzIDAuMDExNzYsMC4wNTYgMCwwLjA3OSAtMC4wMTY2MiwwLjAzMyAtMC4wNjIyNSwwLjA0NiAtMC4wNzg4NiwwLjA3OSAtMC4wMDgxLDAuMDE3IC0wLjAxMTEzLDAuMjI1NSAwLDAuMjM2NyAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODYsMCAwLjAyNjM5LDAuMDI2IC0wLjAyNjM4LDAuMTMxMyAwLDAuMTU3NyAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODcsMCAwLjAzNzE4LDAuMDM3IC0wLjAzNzE5LDAuMTIwNSAwLDAuMTU3NyAwLjAxODU5LDAuMDE5IDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ3OTQsMC4wNTkgMC4wNzg4OCwwLjA3OSAwLjA0ODkyLDAuMDMyIDAuMTE2MTc0LDAuMDM3IDAuMTU3NzQ0LDAuMDc5IDAuMDQxNTcsMC4wNDIgMC4wNDYyNiwwLjEwODkgMC4wNzg4NywwLjE1NzggMC4wNDc4NiwwLjA3MSAwLjIwMTY1NywwLjE2NjcgMC4yMzY2MTIsMC4yMzY2IDAuMDExNzYsMC4wMjQgLTAuMDExNzYsMC4wNTYgMCwwLjA3OSAwLjAzMzI2LDAuMDY2IDAuMTI0NDkxLDAuMDkxIDAuMTU3NzQ1LDAuMTU3OCAwLjAxMTc2LDAuMDIzIC0wLjAxODU5LDAuMDYxIDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMzcxOSwwLjAzNyAtMC4wMzcxOSwwLjEyMDYgMCwwLjE1NzggMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg2LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTg1OSwwLjA2MSAwLDAuMDc5IDAuMTYzMTk0LDAuMTYzMiAtMC4wMDY0LC0wLjI0OTQgMC4xNTc3NDQsMC4wNzkgMC4wMTE3NiwwLjAyMyAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDMzMjYsMC4wNjYgMC4xMTY1MDMsMC4wOTYgMC4xNTc3NDQsMC4xNTc4IDAuMDc2NjMsMC4xMTQ5IDAuMDQ5MjQsMC4xNjQyIDAuMTU3NzQ0LDAuMjM2NiAwLjA0ODkyLDAuMDMyIDAuMTA4ODM1LDAuMDQ2IDAuMTU3NzQ0LDAuMDc5IDAuMDMwOTQsMC4wMiAwLjA1MjU4LDAuMDUzIDAuMDc4ODcsMC4wNzkgMC4wMjYyOSwwLjAyNiAwLjA2MjI1LDAuMDQ2IDAuMDc4ODcsMC4wNzkgMC4wMjMyNiwwLjA0NyAtMC4wMTgwOSwwLjE4MjQgMCwwLjIzNjYgMC4wMTg1OCwwLjA1NiAwLjA2MDI4LDAuMTAyIDAuMDc4ODYsMC4xNTc4IDAuMDE0MjMsMC4wNDMgMCwwLjI4ODYgMCwwLjMxNTQgMCwwLjA2NyAwLjAxNDE0LDAuMjczMSAwLDAuMzE1NSAtMC4wMTE3NiwwLjAzNSAtMC4wNzg4NiwwLjA0MiAtMC4wNzg4NiwwLjA3OSAwLDAuMDU5IDAuMDYwMjgsMC4xMDIgMC4wNzg4NiwwLjE1NzggMC4wMTY2MywwLjA1IDAsMC4xMDUxIDAsMC4xNTc3IDAsMC4xMzE1IDAsMC4yNjI5IDAsMC4zOTQ0IDAsMC4wNTMgMCwwLjEwNTEgMCwwLjE1NzcgMCwwLjAyNiAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDMzMjYsMC4wNjYgMC4xMTY0OTUsMC4wOTYgMC4xNTc3NDQsMC4xNTc3IDAuMDMyNjEsMC4wNDkgMC4wMzczLDAuMTE2MiAwLjA3ODg4LDAuMTU3OCAwLjAxODU5LDAuMDE5IDAuMDYwMjgsLTAuMDE5IDAuMDc4ODcsMCAwLjAxODU5LDAuMDE5IC0wLjAxODU5LDAuMDYxIDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA1MjU4LDAgMC4wNzg4NywwIDAuMDI2MjksMCAwLjA1MjU4LDAgMC4wNzg4NywwIDAuMjg5MTk5LDAgMC41NzgzOTgsMCAwLjg2NzU5NiwwIDAuNjAxNjg5LDAgLTAuMDYyMjIsMC4wMzUgMC4zOTQzNjQsLTAuMDc5IDAuMDUxMDEsLTAuMDEzIDAuMTA2NzI4LDAuMDEzIDAuMTU3NzQ1LDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY0IDAuMTU3NzQ0LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNzg1OSwwLjAxNyAwLjE1Nzc0NCwwIDAuMDM1MjcsLTAuMDEyIDAuMDQzNiwtMC4wNjcgMC4wNzg4NiwtMC4wNzkgMCwtMWUtNCAwLjIzNjU0MiwxMGUtNSAwLjIzNjYyLDAgMC4wMTg1OSwtMC4wMTkgLTAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IC0wLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAwLjAxODU5LC0wLjAxOSAwLjA2MDI4LDAuMDE5IDAuMDc4ODcsMCAwLjAxODU5LC0wLjAxOSAtMC4wMTE3NiwtMC4wNTYgMCwtMC4wNzkgMC4wMzMyNiwtMC4wNjYgMC4xMjQ0OSwtMC4wOTEgMC4xNTc3NDQsLTAuMTU3NyAwLjAxMTc1LC0wLjAyNCAtMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgMC4wMTg1OSwtMC4wMTkgMC4wNjAyOCwwLjAxOCAwLjA3ODg3LDAgMC4wMTg1OSwtMC4wMTkgLTAuMDExNzUsLTAuMDU2IDAsLTAuMDc5IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODgsLTAuMDc5IDAuMDIzNTIsLTAuMDQ3IC0wLjAyMzUyLC0wLjExMDcgMCwtMC4xNTc3IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODcsLTAuMDc5IDAuMDAxNywwIDAuMDAxNywtMC41NDg3IDAsLTAuNTUyMSAtMC4wMzMyNiwtMC4wNjYgLTAuMTE2NTAyLC0wLjA5NiAtMC4xNTc3NTIsLTAuMTU3NyAtMC4wNDgwMywtMC4wNzIgLTAuMDY3MzIsLTAuMTkxNCAtMC4xNTc3NDQsLTAuMjM2NiAtMC4wMjM1MSwtMC4wMTIgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg3LDAgLTAuMDM3MTksLTAuMDM3IDAuMDM3MTksLTAuMTIwNiAwLC0wLjE1NzggLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg3LDAgLTAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IDAsLTAuMDI2IC0wLjAxODU5LC0wLjA2IDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IC0wLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAwLjE2MzE5NCwtMC4xNjMyIC0wLjAwNjQsMC4yNDk0IDAuMTU3NzQ0LC0wLjA3OSAwLjAxMTc2LC0wLjAyMyAtMC4wMDgzLC0wLjA1NCAwLC0wLjA3OSAwLjAxODU5LC0wLjA1NiAwLjA2MDI4LC0wLjEwMiAwLjA3ODg3LC0wLjE1NzggMC4wMDgzLC0wLjAyNCAtMC4wMTE3NiwtMC4wNTYgMCwtMC4wNzkgMC4wMTY2MywtMC4wMzMgMC4wNjIyNSwtMC4wNDYgMC4wNzg4NywtMC4wNzkgMC4wMTE3NSwtMC4wMjMgLTAuMDExNzUsLTAuMDU2IDAsLTAuMDc5IDAuMDQ3MzMsLTAuMDk1IDAuMTg5Mjk2LC0wLjE0MiAwLjIzNjYyLC0wLjIzNjUgMC4wMTE3NiwtMC4wMjQgLTAuMDExNzYsLTAuMDU2IDAsLTAuMDc5IDAuMDM0OTYsLTAuMDcgMC4xODg3NSwtMC4xNjQ4IDAuMjM2NjIsLTAuMjM2NiAwLjEyMzU5MywwLjA2MSAwLjA2NDEzLC0wLjIwNzEgMC4wNzg4NywtMC4yMzY2IDAuMDE2NjMsLTAuMDMzIDAuMDYyMjUsLTAuMDQ2IDAuMDc4ODcsLTAuMDc5IDAuMDExNzUsLTAuMDIzIC0wLjAxMTc2LC0wLjA1NiAwLC0wLjA3OSAwLjAxNjYyLC0wLjAzMyAwLjA2MjI1LC0wLjA0NiAwLjA3ODg2LC0wLjA3OSAwLjAxMiwtMC4wMjQgMCwtMC4yNjEgMCwtMC4zMTU0IDAsLTAuMTU3OCAwLC0wLjMxNTUgMCwtMC40NzMzIDAsLTAuMDI2IDAsLTAuMDUzIDAsLTAuMDc5IDAsLTAuMDI2IDAuMDExNzYsLTAuMDU2IDAsLTAuMDc5IC0wLjAxNjYyLC0wLjAzMyAtMC4wNjIyNSwtMC4wNDYgLTAuMDc4ODYsLTAuMDc5IC0wLjAxNTY0LC0wLjAzMSAwLjAxNjEyLC0wLjIyMDUgMCwtMC4yMzY3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAzNzE5LC0wLjAzNyAwLjAzNzE5LC0wLjEyMDUgMCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOCAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAzNzE4LC0wLjAzNyAwLjAzNzE5LC0wLjEyMDUgMCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAxODU5LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODYsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTE3NSwtMC4wNTYgMCwtMC4wNzkgLTAuMDMzMjYsLTAuMDY3IC0wLjEyNDQ5MSwtMC4wOTEgLTAuMTU3NzQ1LC0wLjE1NzggLTAuMDExNzYsLTAuMDI0IDAuMDE4NTgsLTAuMDYxIDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNTUzNiwwLjAxMiAtMC4wNzg4NywwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDU2MiwtMC4wNjMgLTAuMDc4ODgsLTAuMDc5IC0wLjAyMzUxLC0wLjAxMiAtMC4wNTUzNSwwLjAxMiAtMC4wNzg4NiwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDU2MiwtMC4wNjIgLTAuMDc4ODcsLTAuMDc5IC0wLjA0Mjc4LC0wLjAyMSAtMC4yOTM5MDYsMC4wMjIgLTAuMzE1NDg4LDAgLTAuMDE4NTksLTAuMDE5IDAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNTI1OCwwIC0wLjA3ODg3LDAgLTAuMTU3NzQzLDAgLTAuMzE1NDg3LDAgLTAuNDczMjMxLDAgLTAuMDI2MywwIC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg4LDAgLTAuMDE4NTksLTAuMDE5IDAuMDE4NTksLTAuMDYgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA1MjU4LDAgLTAuMDc4ODcsMCAtMC4xODQwNDEsMCAtMC4zNjgwNzQsMCAtMC41NTIxMDcsMCAtMC4xODQwMzQsMCAtMC4zNjgwNzUsMCAtMC41NTIxMDksMCAtMC4wMjYyOSwwIC0wLjA2MDI4LC0wLjAxOSAtMC4wNzg4NiwwIC0wLjAxODU5LDAuMDE5IDAuMDE4NTksMC4wNjEgMCwwLjA3OSAtMC4wMzk0NCwwLjAzOSAtMC4xOTcxODMsLTAuMDM5IC0wLjIzNjYyMSwwIC0wLjAxODU5LDAuMDE5IDAuMDE4NTksMC4wNjEgMCwwLjA3OSAtMC4wMzcxOSwwLjAzNyAtMC4xMTA3MTcsLTAuMDI0IC0wLjE1Nzc0NCwwIC0wLjAzMzI2LDAuMDE3IC0wLjA0NTYyLDAuMDYyIC0wLjA3ODg2LDAuMDc5IC0wLjAyMzUyLDAuMDEyIC0wLjA3ODg3LDAuMDI2IC0wLjA3ODg3LDAgMCwtMC4wMjYgMC4wNjUzNCwtMC4wMjMgMC4wNzg4NywwIDAuMDcyODQsMC4xMjE0IDAuMTA1MTU4LDAuMjYyOSAtMC4xNTc3NDQsMC4zOTQzIHoiCiAgICAgICBzdHlsZT0iZmlsbDojMmFhZjE4O3N0cm9rZTpub25lO2Rpc3BsYXk6aW5saW5lIiAvPgogICAgPHBhdGgKICAgICAgIGlkPSJwYXRoNTgzMyIKICAgICAgIGQ9Im0gMTYuNzc5MTkzLDEwMjAuNTYzMiBjIDAuMDI2MjksMCAwLjA1NywwLjAxNSAwLjA3ODg2LDAgMC4wNjE4OCwtMC4wNDEgMC4wOTM5OSwtMC4xMTk1IDAuMTU3NzQ1LC0wLjE1NzcgMC4wNzEyOSwtMC4wNDMgMC4xNTk0MywtMC4wNDggMC4yMzY2MiwtMC4wNzkgMC4yMTAzMjMsLTAuMDg0IDAuMTMyNzc0LC0wLjEwNTQgMC4zOTQzNjQsLTAuMTU3OCAwLjA1MTU2LC0wLjAxIDAuMTA2NzI3LDAuMDEzIDAuMTU3NzQ0LDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY0IDAuMTU3NzQ0LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNzg1OSwwLjAxNyAwLjE1Nzc0MywwIDAuMDM1MjcsLTAuMDEyIDAuMDQ1NjIsLTAuMDYyIDAuMDc4ODcsLTAuMDc5IDAuMDQ3MDMsLTAuMDI0IDAuMTIwNTYzLDAuMDM3IDAuMTU3NzQ1LDAgMC4wMTg1OSwtMC4wMTkgLTAuMDE4NTksLTAuMDYxIDAsLTAuMDc5IDAuMDE4NTksLTAuMDE5IDAuMDYwMjgsMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IDAuMDI2MjksMCAwLjA1NTM2LDAuMDEyIDAuMDc4ODcsMCAwLjA2NjUyLC0wLjAzMyAwLjA4NzIsLTAuMTM0MyAwLjE1Nzc0NCwtMC4xNTc4IDAuMDQ5ODksLTAuMDE3IDAuMTA2NzM1LDAuMDEzIDAuMTU3NzUyLDAgMC4wNTcwMywtMC4wMTUgMC4xMDA3MDcsLTAuMDY1IDAuMTU3NzQ1LC0wLjA3OSAwLjA1MTAxLC0wLjAxMyAwLjEwNjcyNiwwLjAxMyAwLjE1Nzc0MywwIDAuMTE0MDY3LC0wLjAyOCAwLjIwMTQyMiwtMC4xMjkzIDAuMzE1NDg4LC0wLjE1NzcgMC4wNTEwMSwtMC4wMTMgMC4xMDc4NTksMC4wMTcgMC4xNTc3NDUsMCAwLjAzNTI3LC0wLjAxMiAwLjA0NzkzLC0wLjA1OSAwLjA3ODg3LC0wLjA3OSAwLjAzOTcxLC0wLjE3MzcgMC4xNjIyNTcsLTAuMDQyIDAuMjM2NjE5LC0wLjA3OSAwLjAzMzI2LC0wLjAxNyAwLjA0NTYyLC0wLjA2MiAwLjA3ODg3LC0wLjA3OSAwLjAyMzUyLC0wLjAxMiAwLjA1NTM2LDAuMDEyIDAuMDc4ODgsMCAwLjAzMzI2LC0wLjAxNyAwLjA0NTYyLC0wLjA2MyAwLjA3ODg3LC0wLjA3OSAwLjAyMzUyLC0wLjAxMiAwLjA1NTM2LDAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LC0wLjAxNyAwLjA0MzU5LC0wLjA2NyAwLjA3ODg4LC0wLjA3OSAwLjA5OTc2LC0wLjAzMyAwLjIxNTcxOCwwLjAzMyAwLjMxNTQ4OCwwIDAuMDM1MjcsLTAuMDEyIDAuMDQzNTksLTAuMDY3IDAuMDc4ODcsLTAuMDc5IDAuMDE5NjYsLTAuMDEgMC4zODYyMzYsMC4wMSAwLjM5NDM2NCwwIDAuMDE4NTksLTAuMDE4IC0wLjAxODU5LC0wLjA2IDAsLTAuMDc5IDAuMDAzNiwwIDAuMzU3MTc1LDAgMC4zOTQzNTYsMCAwLjE1Nzc0NSwwIDAuMzE1NDk2LDAgMC40NzMyNCwwIDAuMDI2MjksMCAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTE3NiwwLjA1NiAwLDAuMDc5IDAuMDQ1MjEsMC4wOSAwLjE2NDU2OSwwLjEwOTggMC4yMzY2MjEsMC4xNTc3IDAuMDcxNzksMC4wNDggMC4xNjY3MDcsMC4yMDE4IDAuMjM2NjEyLDAuMjM2NyAwLjAyMzUyLDAuMDEyIDAuMDUzOTMsLTAuMDEgMC4wNzg4NywwIDAuNTcxMywwLjE5MDQgLTAuMTI0MzQ5LC0wLjAyMiAwLjIzNjYxMiwwLjE1NzggMC4wMjM1MiwwLjAxMiAwLjA2MDI4LC0wLjAxOSAwLjA3ODg4LDAgMC4wMTg1OSwwLjAxOCAtMC4wMTg1OSwwLjA2IDAsMC4wNzkgMC4wMTg1OSwwLjAxOSAwLjA2MDI4LC0wLjAxOSAwLjA3ODg3LDAgMC4wMTg1OSwwLjAxOSAtMC4wMTE3NSwwLjA1NiAwLDAuMDc5IDAuMDE2NjMsMC4wMzMgMC4wNjIyNSwwLjA0NiAwLjA3ODg3LDAuMDc5IDAuMDExNzYsMC4wMjMgLTAuMDE4NTksMC4wNiAwLDAuMDc5IDAuMDE4NTksMC4wMTkgMC4wNjAyOCwtMC4wMTkgMC4wNzg4NywwIDAuMDE4NTksMC4wMTkgLTAuMDExNzUsMC4wNTYgMCwwLjA3OSAwLjA0NTIyLDAuMDkxIDAuMTY0NTY4LDAuMTA5OCAwLjIzNjYyLDAuMTU3OCAwLjA2MTg3LDAuMDQxIDAuMDk1ODgsMC4xMTY1IDAuMTU3NzQ0LDAuMTU3NyAwLjM0NDQ3OSwwLjIyOTcgLTAuMDI2LC0wLjAzNSAwLjMxNTQ4OCwwLjA3OSAwLjAzNTI4LDAuMDEyIDAuMDQ1NjIsMC4wNjIgMC4wNzg4NywwLjA3OSAwLjAyMzUxLDAuMDEyIDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ1NjIsMC4wNjIgMC4wNzg4OCwwLjA3OSAwLjAyMzUxLDAuMDEyIDAuMDU1MzYsLTAuMDEyIDAuMDc4ODcsMCAwLjAzMzI2LDAuMDE3IDAuMDQ1NjIsMC4wNjMgMC4wNzg4NywwLjA3OSAwLjA0NzAyLDAuMDIzIDAuMTEwNzA5LC0wLjAyNCAwLjE1Nzc0NCwwIDAuMDMzMjYsMC4wMTcgMC4wNDU2MiwwLjA2MiAwLjA3ODg2LDAuMDc5IDAuMDUwNDEsMC4wMjUgMC4yNTIwMSwtMC4wMjEgMC4zMTU0ODksMCAwLjA1NTc3LDAuMDE5IDAuMTAxOTc5LDAuMDYxIDAuMTU3NzUxLDAuMDc5IDAuMDI0OTQsMC4wMSAwLjA1NTM1LC0wLjAxMiAwLjA3ODg3LDAgMC4wMzMyNiwwLjAxNyAwLjA0MzU5LDAuMDY3IDAuMDc4ODcsMC4wNzkgMC4wMzYwNywwLjAxMiAwLjI4MDM5MSwtMC4wMTggMC4zMTU0ODksMCAwLjAyNjQ5LDAuMDE0IDAuMTMxMjUxLDAuMTQ0NSAwLjE1Nzc0NCwwLjE1NzggMC4wMjM1MSwwLjAxMiAwLjA1NTM2LC0wLjAxMiAwLjA3ODg3LDAgMC4wMzMyNiwwLjAxNyAwLjA0NTYyLDAuMDYyIDAuMDc4ODgsMC4wNzkgMC4wMjM1MSwwLjAxMiAwLjA1NTM2LC0wLjAxMiAwLjA3ODg2LDAgMC4wMzMyNiwwLjAxNyAwLjA0NTYyLDAuMDYzIDAuMDc4ODgsMC4wNzkgMC4wNDcwMiwwLjAyMyAwLjEyMDU2MywtMC4wMzcgMC4xNTc3NDQsMCAwLjAwMzYsMCAwLDAuMzU3MiAwLDAuMzk0NCAwLDAuMDE5IDAuMDAyNSwwLjIzNDEgMCwwLjIzNjYgLTAuMDE4NTksMC4wMTkgLTAuMDU1MzYsLTAuMDEyIC0wLjA3ODg3LDAgLTAuMDc3NjIsMC4wMzkgLTAuMjM3ODc3LDAuMjc2NiAtMC4zMTU0ODgsMC4zMTU1IC0wLjAyMzUxLDAuMDEyIC0wLjA2MDI4LC0wLjAxOSAtMC4wNzg4NywwIC0wLjAxODU5LDAuMDE5IDAuMDExNzUsMC4wNTYgMCwwLjA3OSAtMC4wODcyLDAuMTc0NCAtMC4wNDg5NiwwLjAyNSAtMC4xNTc3NDQsMC4wNzkgLTAuMDMzMjYsMC4wMTcgLTAuMDQ1NjIsMC4wNjIgLTAuMDc4ODgsMC4wNzkgLTAuMDIzNTIsMC4wMTIgLTAuMDUyNTgsMCAtMC4wNzg4NiwwIC0wLjA1MjU4LDAgLTAuMTA2NzM1LC0wLjAxMyAtMC4xNTc3NDUsMCAtMC4xNDI3NiwtMC4wNDggLTAuMTQ2Njg3LDAuMTI3NyAtMC4yMzY2MiwwLjE1NzcgLTAuMDQ5ODksMC4wMTcgLTAuMTA2NzM0LC0wLjAxMyAtMC4xNTc3NDQsMCAtMC4wNTcwMywwLjAxNSAtMC4xMDA3MTUsMC4wNjUgLTAuMTU3NzQzLDAuMDc5IC0wLjA1MTAxLDAuMDEzIC0wLjEwNjczNSwtMC4wMTMgLTAuMTU3NzQ0LDAgLTAuMDU3MDQsMC4wMTUgLTAuMTAwNzE1LDAuMDY0IC0wLjE1Nzc0NSwwLjA3OSAtMC4wNTk5OCwwLjAxNSAtMC4zMjgzMTYsMCAtMC4zOTQzNjQsMCAtMC4xMzE0NTQsMCAtMC4yNjI5MDksMCAtMC4zOTQzNTYsMCAtMC4wMjYzLDAgLTAuMDUyNTgsMCAtMC4wNzg4OCwwIC0wLjAyNjI5LDAgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODgsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYyIC0wLjA3ODg2LC0wLjA3OSAtMC4wNDcwMiwtMC4wMjMgLTAuMTEwNzE3LDAuMDIzIC0wLjE1Nzc0NCwwIC0wLjAyMTEsLTAuMDExIC0wLjEzNjYzOSwtMC4xNDcxIC0wLjE1Nzc0NCwtMC4xNTc3IC0wLjAyMzUyLC0wLjAxMiAtMC4wNTUzNiwwLjAxMiAtMC4wNzg4OCwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNTI1OCwtMC4wNTMgLTAuMDc4ODYsLTAuMDc5IC0wLjA5MDI1LC0wLjA5IC0wLjA5MzM2LC0wLjExIC0wLjIzNjYyLC0wLjE1NzcgLTAuMDI0OTMsLTAuMDEgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMjA5NCwtMC4wMTEgLTAuMjI2MTUsLTAuMjE1NyAtMC4yMzY2MjEsLTAuMjM2NyAtMC4wMTE3NiwtMC4wMjMgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYyIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDU1MzYsMC4wMTIgLTAuMDc4ODcsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg4LC0wLjA3OSAtMC4wMjM1MiwtMC4wMTIgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OCwtMC4wMTkgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMzcxOCwtMC4wMzcgLTAuMTEwNzEsMC4wMjMgLTAuMTU3NzQ0LDAgLTAuMDMzMjYsLTAuMDE3IC0wLjA0NTYyLC0wLjA2MiAtMC4wNzg4NywtMC4wNzkgLTAuMDQ5NzYsLTAuMDI0IC0wLjM0NDYwNCwwLjAyNCAtMC4zOTQzNjMsMCAtMC4wMzMyNiwtMC4wMTcgLTAuMDQ1NjIsLTAuMDYzIC0wLjA3ODg3LC0wLjA3OSAtMC4wMjg1MiwtMC4wMTUgLTAuMzM5NTA2LDAgLTAuMzk0MzY0LDAgLTAuMDI2MjksMCAtMC4wNjAyOCwtMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwwLjAxOSAwLjAyMzUxLDAuMDY3IDAsMC4wNzkgLTAuMTU3NzQ0LDAuMDc5IC0wLjExODMxNCwtMC4wMzkgLTAuMjM2NjIsMCAtMC4wNTU3NywwLjAxOSAtMC4xMDA3MTUsMC4wNjQgLTAuMTU3NzQ0LDAuMDc5IC0wLjA1MTAxLDAuMDEzIC0wLjEwNzg1OSwtMC4wMTcgLTAuMTU3NzQ1LDAgLTAuMDM1MjgsMC4wMTIgLTAuMDQ1NjIsMC4wNjIgLTAuMDc4ODcsMC4wNzkgLTAuMDMxMjcsMC4wMTYgLTAuMjIwNDg5LC0wLjAxNiAtMC4yMzY2MTIsMCAtMC4wMTg1OSwwLjAxOSAwLjAyMzUxLDAuMDY3IDAsMC4wNzkgLTAuMDQ3MDMsMC4wMjMgLTAuMTEwNzE4LC0wLjAyNCAtMC4xNTc3NDQsMCAtMC4wMjM1MiwwLjAxMiAwLjAxODU5LDAuMDYxIDAsMC4wNzkgLTAuMDM3MTksMC4wMzcgLTAuMTEwNzE3LC0wLjAyMyAtMC4xNTc3NDUsMCAtMC4wMzMyNiwwLjAxNyAtMC4wNDU2MiwwLjA2MiAtMC4wNzg4NywwLjA3OSAtMC4wMjQwMSwwLjAxMiAtMC4yMDEwOTQsMCAtMC4yMzY2MTIsMCAtMC4xODQwNDIsMCAtMC4zNjgwNzUsMCAtMC41NTIxMDksMCAtMC4yNjI5MDksMCAtMC41MjU4MTgsMCAtMC43ODg3MiwwIC0wLjAyNjMsMCAtMC4wNTI1OCwwIC0wLjA3ODg4LDAgLTAuMDI2MjksMCAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NiwwIC0wLjAxODU5LC0wLjAxOCAwLjAxODU5LC0wLjA2IDAsLTAuMDc5IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4OCwwIC0wLjAxODU5LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMzcxOSwtMC4wMzcgLTAuMTEwNzE3LDAuMDIzIC0wLjE1Nzc0NCwwIC0wLjAzMzI2LC0wLjAxNyAtMC4wNDE2OSwtMC4wNzkgLTAuMDc4ODcsLTAuMDc5IC0wLjAyNjMsMCAwLjAyNjI5LDAuMDc5IDAsMC4wNzkgLTAuMTY0MTMxLDAgLTAuMDMxNzQsLTAuMTEwNiAtMC4wNzg4OCwtMC4xNTc3IC0wLjAxODU5LC0wLjAxOSAtMC4wNjAyOCwwLjAxOSAtMC4wNzg4NywwIC0wLjAxODU4LC0wLjAxOSAwLjAxODU5LC0wLjA2MSAwLC0wLjA3OSAtMC4wMTg1OCwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODcsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNiAwLC0wLjA3OSAtMC4wMTg1OSwtMC4wMTkgLTAuMDYwMjgsMC4wMTkgLTAuMDc4ODgsMCAtMC4wMTg1OSwtMC4wMTkgMC4wMTg1OSwtMC4wNjEgMCwtMC4wNzkgLTAuMDE4NTksLTAuMDE5IC0wLjA2MDI4LDAuMDE5IC0wLjA3ODg2LDAgLTAuMDE4NTksLTAuMDE5IDAsLTAuMDUzIDAsLTAuMDc5IC0wLjEzMTQ1NSwtMC4xMDUyIC0wLjI2MjkxLC0wLjIxMDMgMCwtMC42MzEgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNjYmZmODc7c3Ryb2tlOm5vbmU7ZGlzcGxheTppbmxpbmUiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InBhdGg3MTY5IgogICAgICAgZD0ibSAxMC4zMTI2ODcsMTAyMS40OTE3IC0xLjAwMzg4NDUsMS4zMzg1IC0wLjIyMzA4MSwzLjc5MjQgMi43ODg1NTQ1LDEuNzg0NyAwLjU1NzcwNywyLjAwNzggMi4xMTkzMDQsMCAyLjQ1MzkzMSwzLjY4MDkgMjQuNjUwODE4LDAgMi4yMzA4NDEsLTEuNjczMSAyLjM0MjM4NiwwLjExMTUgMy43OTI0MzEsLTIuNzg4NSAwLjY2OTI1MSwtMy4xMjMzIDEuMDAzODg0LC0wLjg5MjMgMC44OTIzMzgsLTEuMjI2OSAtMC4yMjMwODgsLTEuNTYxNiAtMi4wMDc3NiwtMS4wMDM5IC00MC4wNDM2MzIsLTAuNDQ2MiB6IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDMxMjgtODk5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yNDguMjMyMjUsOTUwLjI4MzUpIgogICAgICAgaWQ9Imc2NDAzLTMtMCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIxMzIzLjI5OTgiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIxMzc2LjYyMTEiCiAgICAgICAgIHNvZGlwb2RpOnJ4PSI1Ny41Nzg2OTMiCiAgICAgICAgIHNvZGlwb2RpOnJ5PSI1Ny41Nzg2OTMiCiAgICAgICAgIGQ9Im0gMTM4MC44Nzg1LDEzNzYuNjIxMSBjIDAsMzEuNzk5OCAtMjUuNzc4OSw1Ny41Nzg3IC01Ny41Nzg3LDU3LjU3ODcgLTMxLjc5OTgsMCAtNTcuNTc4NywtMjUuNzc4OSAtNTcuNTc4NywtNTcuNTc4NyAwLC0zMS43OTk4IDI1Ljc3ODksLTU3LjU3ODcgNTcuNTc4NywtNTcuNTc4NyAzMS43OTk4LDAgNTcuNTc4NywyNS43Nzg5IDU3LjU3ODcsNTcuNTc4NyB6IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzEzLjcyNDgsLTI5OC45ODQxMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnNTc0NS00LTQtOC0zLTciCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzU4LTk4NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02IgogICAgICAgICAgIGQ9Im0gMTA4MC4wNjYyLDExNzUuNTk4NiBjIC04Ljg3NzksMC4xNDYgLTQuNjU5MiwxNy4yMTYzIC0xMy4zMzc5LDE5LjA5MTUgLTguNjc4OCwxLjg3NTIgLTExLjk5MTUsLTE1LjMwMSAtMjAuMTM3NywtMTEuNzY4NyAtOC4xNDYyLDMuNTMyMiAyLjMzMTUsMTcuNjk5MiAtNC45NjksMjIuNzUyOSAtNy4zMDA2LDUuMDUzNiAtMTYuODQwMSwtOS43ODA3IC0yMy4wMTQ1LC0zLjM5OTkgLTYuMTc0Myw2LjM4MDggOC43MzM4LDE1LjU1MTcgMy45MjMsMjMuMDE0NSAtNC44MTA5LDcuNDYyNyAtMTkuNDkwNCwtMi4yNDI4IC0yMi43NTI5Nyw2LjAxNTEgLTMuMjYyNSw4LjI1NzkgMTQuMTQyMTcsMTAuODc4OSAxMi41NTMzNywxOS42MTQ2IC0xLjU4ODgsOC43MzU3IC0xOC43MTQ0Nyw1LjI0NDcgLTE4LjU2ODQ3LDE0LjEyMjUgMC4xNDYsOC44Nzc4IDE3LjIxNjM3LDQuNjU5MSAxOS4wOTE0NywxMy4zMzc5IDEuODc1Miw4LjY3ODggLTE1LjMwMDk3LDExLjk5MTUgLTExLjc2ODcsMjAuMTM3NyAzLjUzMjMsOC4xNDYyIDE3LjY5OTIsLTIuMzMxNiAyMi43NTI5LDQuOTY5IDUuMDUzNyw3LjMwMDUgLTkuNzgwNywxNi44NDAxIC0zLjM5OTksMjMuMDE0NCA2LjM4MDgsNi4xNzQ0IDE1LjU1MTcsLTguNzMzOCAyMy4wMTQ1LC0zLjkyMjkgNy40NjI4LDQuODEwOSAtMi4yNDI4LDE5LjQ5MDQgNi4wMTUxLDIyLjc1MyA4LjI1OCwzLjI2MjUgMTAuODc4OSwtMTQuMTQyMiAxOS42MTQ2LC0xMi41NTM0IDguNzM1OCwxLjU4ODggNS4yNDQ3LDE4LjcxNDUgMTQuMTIyNSwxOC41Njg1IDguODc3OSwtMC4xNDYgNC42NTkyLC0xNy4yMTY0IDEzLjMzNzksLTE5LjA5MTUgOC42Nzg4LC0xLjg3NTIgMTEuOTkxNSwxNS4zMDEgMjAuMTM3NywxMS43Njg3IDguMTQ2MiwtMy41MzIzIC0yLjMzMTUsLTE3LjY5OTMgNC45NjksLTIyLjc1MjkgNy4zMDA2LC01LjA1MzcgMTYuODQwMSw5Ljc4MDcgMjMuMDE0NSwzLjM5OTggNi4xNzQzLC02LjM4MDggLTguNzMzOCwtMTUuNTUxNiAtMy45MjMsLTIzLjAxNDQgNC44MTA5LC03LjQ2MjggMTkuNDkwNCwyLjI0MjggMjIuNzUzLC02LjAxNTEgMy4yNjI1LC04LjI1OCAtMTQuMTQyMiwtMTAuODc4OSAtMTIuNTUzNCwtMTkuNjE0NiAxLjU4ODgsLTguNzM1OCAxOC43MTQ1LC01LjI0NDcgMTguNTY4NSwtMTQuMTIyNSAtMC4xNDYsLTguODc3OSAtMTcuMjE2NCwtNC42NTkyIC0xOS4wOTE1LC0xMy4zMzggLTEuODc1MiwtOC42Nzg3IDE1LjMwMSwtMTEuOTkxNCAxMS43Njg3LC0yMC4xMzc2IC0zLjUzMjMsLTguMTQ2MiAtMTcuNjk5MiwyLjMzMTUgLTIyLjc1MjksLTQuOTY5IC01LjA1MzcsLTcuMzAwNiA5Ljc4MDcsLTE2Ljg0MDEgMy4zOTk5LC0yMy4wMTQ1IC02LjM4MDksLTYuMTc0MyAtMTUuNTUxNyw4LjczMzggLTIzLjAxNDUsMy45MjI5IC03LjQ2MjgsLTQuODEwOCAyLjI0MjgsLTE5LjQ5MDQgLTYuMDE1MSwtMjIuNzUyOSAtOC4yNTgsLTMuMjYyNSAtMTAuODc4OSwxNC4xNDIyIC0xOS42MTQ2LDEyLjU1MzQgLTguNzM1OCwtMS41ODg4IC01LjI0NDcsLTE4LjcxNDUgLTE0LjEyMjUsLTE4LjU2ODUgeiBtIDEuNTY5MSw0MC44NzAyIGMgMjUuNDA4LDAgNDcuMDAzMiwyMS41OTUyIDQ3LjAwMzIsNDcuMDAzMSAwLDI1LjQwOCAtMjEuNTk1Miw0Ny4wMDMxIC00Ny4wMDMyLDQ3LjAwMzEgLTI1LjQwNzksMCAtNDcuMDAzMSwtMjEuNTk1MSAtNDcuMDAzMSwtNDcuMDAzMSAwLC0yNS40MDc5IDIxLjU5NTIsLTQ3LjAwMzEgNDcuMDAzMSwtNDcuMDAzMSB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzU2LTQ4NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLXdpZHRoOjQuMDg3MjI2Mzk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yMzcuOTE0NjEsOTUwLjExNjE4KSIKICAgICAgIGlkPSJnNjQwMy0zLTAtNCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy00IgogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjY5NjY3NzQ5LDAsMCwwLjY5NjY3NzQ5LDI4ODIuOTMxNSwxOTguMjUwMTEpIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2Mi02NzMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS1vcGFjaXR5OjE7ZGlzcGxheTppbmxpbmUiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc2Njc3NzYyIKICAgICAgICAgICBpZD0icGF0aDU2NjUtOS00LTUtMzEtNi04IgogICAgICAgICAgIGQ9Im0gMTA4MC4wNjYyLDExNzUuNTk4NiBjIC04Ljg3NzksMC4xNDYgLTQuNjU5MiwxNy4yMTYzIC0xMy4zMzc5LDE5LjA5MTUgLTguNjc4OCwxLjg3NTIgLTExLjk5MTUsLTE1LjMwMSAtMjAuMTM3NywtMTEuNzY4NyAtOC4xNDYyLDMuNTMyMiAyLjMzMTUsMTcuNjk5MiAtNC45NjksMjIuNzUyOSAtNy4zMDA2LDUuMDUzNiAtMTYuODQwMSwtOS43ODA3IC0yMy4wMTQ1LC0zLjM5OTkgLTYuMTc0Myw2LjM4MDggOC43MzM4LDE1LjU1MTcgMy45MjMsMjMuMDE0NSAtNC44MTA5LDcuNDYyNyAtMTkuNDkwNCwtMi4yNDI4IC0yMi43NTI5Nyw2LjAxNTEgLTMuMjYyNSw4LjI1NzkgMTQuMTQyMTcsMTAuODc4OSAxMi41NTMzNywxOS42MTQ2IC0xLjU4ODgsOC43MzU3IC0xOC43MTQ0Nyw1LjI0NDcgLTE4LjU2ODQ3LDE0LjEyMjUgMC4xNDYsOC44Nzc4IDE3LjIxNjM3LDQuNjU5MSAxOS4wOTE0NywxMy4zMzc5IDEuODc1Miw4LjY3ODggLTE1LjMwMDk3LDExLjk5MTUgLTExLjc2ODcsMjAuMTM3NyAzLjUzMjMsOC4xNDYyIDE3LjY5OTIsLTIuMzMxNiAyMi43NTI5LDQuOTY5IDUuMDUzNyw3LjMwMDUgLTkuNzgwNywxNi44NDAxIC0zLjM5OTksMjMuMDE0NCA2LjM4MDgsNi4xNzQ0IDE1LjU1MTcsLTguNzMzOCAyMy4wMTQ1LC0zLjkyMjkgNy40NjI4LDQuODEwOSAtMi4yNDI4LDE5LjQ5MDQgNi4wMTUxLDIyLjc1MyA4LjI1OCwzLjI2MjUgMTAuODc4OSwtMTQuMTQyMiAxOS42MTQ2LC0xMi41NTM0IDguNzM1OCwxLjU4ODggNS4yNDQ3LDE4LjcxNDUgMTQuMTIyNSwxOC41Njg1IDguODc3OSwtMC4xNDYgNC42NTkyLC0xNy4yMTY0IDEzLjMzNzksLTE5LjA5MTUgOC42Nzg4LC0xLjg3NTIgMTEuOTkxNSwxNS4zMDEgMjAuMTM3NywxMS43Njg3IDguMTQ2MiwtMy41MzIzIC0yLjMzMTUsLTE3LjY5OTMgNC45NjksLTIyLjc1MjkgNy4zMDA2LC01LjA1MzcgMTYuODQwMSw5Ljc4MDcgMjMuMDE0NSwzLjM5OTggNi4xNzQzLC02LjM4MDggLTguNzMzOCwtMTUuNTUxNiAtMy45MjMsLTIzLjAxNDQgNC44MTA5LC03LjQ2MjggMTkuNDkwNCwyLjI0MjggMjIuNzUzLC02LjAxNTEgMy4yNjI1LC04LjI1OCAtMTQuMTQyMiwtMTAuODc4OSAtMTIuNTUzNCwtMTkuNjE0NiAxLjU4ODgsLTguNzM1OCAxOC43MTQ1LC01LjI0NDcgMTguNTY4NSwtMTQuMTIyNSAtMC4xNDYsLTguODc3OSAtMTcuMjE2NCwtNC42NTkyIC0xOS4wOTE1LC0xMy4zMzggLTEuODc1MiwtOC42Nzg3IDE1LjMwMSwtMTEuOTkxNCAxMS43Njg3LC0yMC4xMzc2IC0zLjUzMjMsLTguMTQ2MiAtMTcuNjk5MiwyLjMzMTUgLTIyLjc1MjksLTQuOTY5IC01LjA1MzcsLTcuMzAwNiA5Ljc4MDcsLTE2Ljg0MDEgMy4zOTk5LC0yMy4wMTQ1IC02LjM4MDksLTYuMTc0MyAtMTUuNTUxNyw4LjczMzggLTIzLjAxNDUsMy45MjI5IC03LjQ2MjgsLTQuODEwOCAyLjI0MjgsLTE5LjQ5MDQgLTYuMDE1MSwtMjIuNzUyOSAtOC4yNTgsLTMuMjYyNSAtMTAuODc4OSwxNC4xNDIyIC0xOS42MTQ2LDEyLjU1MzQgLTguNzM1OCwtMS41ODg4IC01LjI0NDcsLTE4LjcxNDUgLTE0LjEyMjUsLTE4LjU2ODUgeiBtIDEuNTY5MSw0MC44NzAyIGMgMjUuNDA4LDAgNDcuMDAzMiwyMS41OTUyIDQ3LjAwMzIsNDcuMDAzMSAwLDI1LjQwOCAtMjEuNTk1Miw0Ny4wMDMxIC00Ny4wMDMyLDQ3LjAwMzEgLTI1LjQwNzksMCAtNDcuMDAzMSwtMjEuNTk1MSAtNDcuMDAzMSwtNDcuMDAzMSAwLC0yNS40MDc5IDIxLjU5NTIsLTQ3LjAwMzEgNDcuMDAzMSwtNDcuMDAzMSB6IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzYwLTc1NCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLXdpZHRoOjQuMDg3MjI2Mzk7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjA3MzYyODA3LDAsMCwwLjA3MzYyODA3LC0yMjcuODc1ODEsOTUwLjExNjE4KSIKICAgICAgIGlkPSJnNjQwMy0zLTAtMyIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIxMzIzLjI5OTgiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIxMzc2LjYyMTEiCiAgICAgICAgIHNvZGlwb2RpOnJ4PSI1Ny41Nzg2OTMiCiAgICAgICAgIHNvZGlwb2RpOnJ5PSI1Ny41Nzg2OTMiCiAgICAgICAgIGQ9Im0gMTM4MC44Nzg1LDEzNzYuNjIxMSBjIDAsMzEuNzk5OCAtMjUuNzc4OSw1Ny41Nzg3IC01Ny41Nzg3LDU3LjU3ODcgLTMxLjc5OTgsMCAtNTcuNTc4NywtMjUuNzc4OSAtNTcuNTc4NywtNTcuNTc4NyAwLC0zMS43OTk4IDI1Ljc3ODksLTU3LjU3ODcgNTcuNTc4NywtNTcuNTc4NyAzMS43OTk4LDAgNTcuNTc4NywyNS43Nzg5IDU3LjU3ODcsNTcuNTc4NyB6IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzEzLjcyNDgsLTI5OC45ODQxMSkiIC8+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnNTc0NS00LTQtOC0zLTctNiIKICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC42OTY2Nzc0OSwwLDAsMC42OTY2Nzc0OSwyODgyLjkzMTUsMTk4LjI1MDExKSIKICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDczNjYtNjYyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzM0Njc0YjtzdHJva2Utb3BhY2l0eToxO2Rpc3BsYXk6aW5saW5lIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NjY3Nzc2MiCiAgICAgICAgICAgaWQ9InBhdGg1NjY1LTktNC01LTMxLTYtMCIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2NC01MzYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNDc4MDk2NywwLDAsMC4wNDc4MDk2NywtMTI2LjU3MDExLDk3Ni4wMDg4OCkiCiAgICAgICBpZD0iZzY0MDMtMy0wLTMtNiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQtNiIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy02LTYiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MzcwLTczNyk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02LTAtMiIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM2OC0zNDMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNTEzNzA4MywwLDAsMC4wNTEzNzA4MywtMTc0LjMyMTM1LDk3MC4xNjA0OCkiCiAgICAgICBpZD0iZzY0MDMtMy0wLTMtMSIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6IzM4M2U0OTtmaWxsLW9wYWNpdHk6MC42MzUxOTMxMTtzdHJva2U6bm9uZTtkaXNwbGF5OmlubGluZSIKICAgICAgICAgaWQ9InBhdGg1OTE2LTctMS01LTgtNTQtNSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjEzMjMuMjk5OCIKICAgICAgICAgc29kaXBvZGk6Y3k9IjEzNzYuNjIxMSIKICAgICAgICAgc29kaXBvZGk6cng9IjU3LjU3ODY5MyIKICAgICAgICAgc29kaXBvZGk6cnk9IjU3LjU3ODY5MyIKICAgICAgICAgZD0ibSAxMzgwLjg3ODUsMTM3Ni42MjExIGMgMCwzMS43OTk4IC0yNS43Nzg5LDU3LjU3ODcgLTU3LjU3ODcsNTcuNTc4NyAtMzEuNzk5OCwwIC01Ny41Nzg3LC0yNS43Nzg5IC01Ny41Nzg3LC01Ny41Nzg3IDAsLTMxLjc5OTggMjUuNzc4OSwtNTcuNTc4NyA1Ny41Nzg3LC01Ny41Nzg3IDMxLjc5OTgsMCA1Ny41Nzg3LDI1Ljc3ODkgNTcuNTc4Nyw1Ny41Nzg3IHoiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzMTMuNzI0OCwtMjk4Ljk4NDExKSIgLz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NzQ1LTQtNC04LTMtNy02LTgiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjk2Njc3NDksMCwwLDAuNjk2Njc3NDksMjg4Mi45MzE1LDE5OC4yNTAxMSkiCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3Mzc0LTYzNCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMzNDY3NGI7c3Ryb2tlLW9wYWNpdHk6MTtkaXNwbGF5OmlubGluZSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzY2Nzc3NjIgogICAgICAgICAgIGlkPSJwYXRoNTY2NS05LTQtNS0zMS02LTAtOSIKICAgICAgICAgICBkPSJtIDEwODAuMDY2MiwxMTc1LjU5ODYgYyAtOC44Nzc5LDAuMTQ2IC00LjY1OTIsMTcuMjE2MyAtMTMuMzM3OSwxOS4wOTE1IC04LjY3ODgsMS44NzUyIC0xMS45OTE1LC0xNS4zMDEgLTIwLjEzNzcsLTExLjc2ODcgLTguMTQ2MiwzLjUzMjIgMi4zMzE1LDE3LjY5OTIgLTQuOTY5LDIyLjc1MjkgLTcuMzAwNiw1LjA1MzYgLTE2Ljg0MDEsLTkuNzgwNyAtMjMuMDE0NSwtMy4zOTk5IC02LjE3NDMsNi4zODA4IDguNzMzOCwxNS41NTE3IDMuOTIzLDIzLjAxNDUgLTQuODEwOSw3LjQ2MjcgLTE5LjQ5MDQsLTIuMjQyOCAtMjIuNzUyOTcsNi4wMTUxIC0zLjI2MjUsOC4yNTc5IDE0LjE0MjE3LDEwLjg3ODkgMTIuNTUzMzcsMTkuNjE0NiAtMS41ODg4LDguNzM1NyAtMTguNzE0NDcsNS4yNDQ3IC0xOC41Njg0NywxNC4xMjI1IDAuMTQ2LDguODc3OCAxNy4yMTYzNyw0LjY1OTEgMTkuMDkxNDcsMTMuMzM3OSAxLjg3NTIsOC42Nzg4IC0xNS4zMDA5NywxMS45OTE1IC0xMS43Njg3LDIwLjEzNzcgMy41MzIzLDguMTQ2MiAxNy42OTkyLC0yLjMzMTYgMjIuNzUyOSw0Ljk2OSA1LjA1MzcsNy4zMDA1IC05Ljc4MDcsMTYuODQwMSAtMy4zOTk5LDIzLjAxNDQgNi4zODA4LDYuMTc0NCAxNS41NTE3LC04LjczMzggMjMuMDE0NSwtMy45MjI5IDcuNDYyOCw0LjgxMDkgLTIuMjQyOCwxOS40OTA0IDYuMDE1MSwyMi43NTMgOC4yNTgsMy4yNjI1IDEwLjg3ODksLTE0LjE0MjIgMTkuNjE0NiwtMTIuNTUzNCA4LjczNTgsMS41ODg4IDUuMjQ0NywxOC43MTQ1IDE0LjEyMjUsMTguNTY4NSA4Ljg3NzksLTAuMTQ2IDQuNjU5MiwtMTcuMjE2NCAxMy4zMzc5LC0xOS4wOTE1IDguNjc4OCwtMS44NzUyIDExLjk5MTUsMTUuMzAxIDIwLjEzNzcsMTEuNzY4NyA4LjE0NjIsLTMuNTMyMyAtMi4zMzE1LC0xNy42OTkzIDQuOTY5LC0yMi43NTI5IDcuMzAwNiwtNS4wNTM3IDE2Ljg0MDEsOS43ODA3IDIzLjAxNDUsMy4zOTk4IDYuMTc0MywtNi4zODA4IC04LjczMzgsLTE1LjU1MTYgLTMuOTIzLC0yMy4wMTQ0IDQuODEwOSwtNy40NjI4IDE5LjQ5MDQsMi4yNDI4IDIyLjc1MywtNi4wMTUxIDMuMjYyNSwtOC4yNTggLTE0LjE0MjIsLTEwLjg3ODkgLTEyLjU1MzQsLTE5LjYxNDYgMS41ODg4LC04LjczNTggMTguNzE0NSwtNS4yNDQ3IDE4LjU2ODUsLTE0LjEyMjUgLTAuMTQ2LC04Ljg3NzkgLTE3LjIxNjQsLTQuNjU5MiAtMTkuMDkxNSwtMTMuMzM4IC0xLjg3NTIsLTguNjc4NyAxNS4zMDEsLTExLjk5MTQgMTEuNzY4NywtMjAuMTM3NiAtMy41MzIzLC04LjE0NjIgLTE3LjY5OTIsMi4zMzE1IC0yMi43NTI5LC00Ljk2OSAtNS4wNTM3LC03LjMwMDYgOS43ODA3LC0xNi44NDAxIDMuMzk5OSwtMjMuMDE0NSAtNi4zODA5LC02LjE3NDMgLTE1LjU1MTcsOC43MzM4IC0yMy4wMTQ1LDMuOTIyOSAtNy40NjI4LC00LjgxMDggMi4yNDI4LC0xOS40OTA0IC02LjAxNTEsLTIyLjc1MjkgLTguMjU4LC0zLjI2MjUgLTEwLjg3ODksMTQuMTQyMiAtMTkuNjE0NiwxMi41NTM0IC04LjczNTgsLTEuNTg4OCAtNS4yNDQ3LC0xOC43MTQ1IC0xNC4xMjI1LC0xOC41Njg1IHogbSAxLjU2OTEsNDAuODcwMiBjIDI1LjQwOCwwIDQ3LjAwMzIsMjEuNTk1MiA0Ny4wMDMyLDQ3LjAwMzEgMCwyNS40MDggLTIxLjU5NTIsNDcuMDAzMSAtNDcuMDAzMiw0Ny4wMDMxIC0yNS40MDc5LDAgLTQ3LjAwMzEsLTIxLjU5NTEgLTQ3LjAwMzEsLTQ3LjAwMzEgMCwtMjUuNDA3OSAyMS41OTUyLC00Ny4wMDMxIDQ3LjAwMzEsLTQ3LjAwMzEgeiIKICAgICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzM3Mi03NDcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzQ2NzRiO3N0cm9rZS13aWR0aDo0LjA4NzIyNjM5O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"mathwar,mathwar,math\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"mathwar.Mathwar\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Mathwar\"\nLABEL oc.displayname=\"Mathwar\"\nLABEL oc.path=\"/usr/games/mathwar\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Mathwar\"\nENV APPBIN \"/usr/games/mathwar\"\nENV APP \"/usr/games/mathwar\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mathwar/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mathwar/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mathwar/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mathwar/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libflite1 openjdk-8-jre at-spi2-core dbus-x11 orca libsecret-1-0 && curl -Ls 'https://launcher.mojang.com/download/Minecraft.deb' -o /tmp/Minecraft.deb && apt-get install --yes /tmp/Minecraft.deb && rm /tmp/Minecraft.deb && rm -rf /var/lib/apt/lists/*\nCOPY composer/init.d/init.minecraft-launcher /composer/init.d\nLABEL oc.icon=\"circle_minecraft.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYgMCAwIDEuMzI3NiAtNTEwLjY0IC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDU4ODgzIiB5PSItLjA2MTE2MSIgd2lkdGg9IjEuMTE3OCIgaGVpZ2h0PSIxLjEyMjMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjU2MjM3OSIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjg4OTcyNDQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZiIgeD0iLS4wNjQ2NjYiIHk9Ii0uMDU2MDAyIiB3aWR0aD0iMS4xMjkzIiBoZWlnaHQ9IjEuMTEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjY2MTQ0MzYzIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMjUuNjgiIHgyPSIyNi40NDgiIHkxPSIzOS4zOTUiIHkyPSIxNy4zNzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM0NWYyOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1OWE0NDYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMTUuNzA3IiB4Mj0iMjUuNjgiIHkxPSIzMi41NjEiIHkyPSIzOS4zOTUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2FkN2M1OSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4MzViNDEiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjAxMTUgMCAwIDEuMDExNSAtMzg5LjMyIC00ODkuOTIpIiB4PSIzODYuODUiIHk9IjQ4Ni4zMSIgd2lkdGg9IjU5LjMxNSIgaGVpZ2h0PSI1OS4zMTUiIHJ5PSIyOS42NTciIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cmVjdCB4PSIxLjk4MjYiIHk9IjEuOTc4NCIgd2lkdGg9IjU5Ljk5NyIgaGVpZ2h0PSI1OS45OTciIHJ5PSIyOS45OTgiIGZpbGw9InVybCgjYikiIHN0cm9rZS13aWR0aD0iMS4wMTE1Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwMzUgMCAwIDEuMzE3IC0xLjQ3NTIgLTYuNTUxMSkiIGZpbHRlcj0idXJsKCNmKSIgb3BhY2l0eT0iLjEiPgogIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuMDIyOSAwIDAgMS4wMTI0IC44NzU5OSA0Ljk3NDEpIiBkPSJtMjUgMTEtMTIgN3YxNGwxMiA3IDEyLTd2LTE0eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwMzUgMCAwIDEuMzE3IC0yLjQ3NDcgLTcuODg0MSkiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgPHBhdGggZD0ibTE0LjE3MyAyMy4yIDEyLjI3NSAyMS4yNTcgMTIuMjczLTIxLjI1Ny0xMi4yNzMtNy4wOSIgZmlsbD0idXJsKCNlKSIvPgogIDxwYXRoIGQ9Im0xNC4xNzMgMjMuMnYzLjU0M2wxMi4yNzQgNy4wOSAxZS0zIC0zLjU0N3oiIGZpbGw9IiM1OWE4NDkiLz4KICA8cGF0aCBkPSJtMjYuNDQ4IDMzLjgyNyAxMi4yNzQtNy4wODd2LTMuNTQzbC0xMi4yNzQgNy4wODZ6IiBmaWxsPSIjM2U3MjMxIi8+CiAgPHBhdGggZD0ibTE0LjE3MyAyNi43NHYxMC42M2wxMi4yNzQgNy4wODd2LTEwLjYzeiIgZmlsbD0idXJsKCNhKSIvPgogIDxwYXRoIGQ9Im0yNi40NDggMzMuODI3IDEyLjI3NC03LjA4N3YxMC42M2wtMTIuMjc0IDcuMDg3eiIgZmlsbD0iIzU3M2QyYiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"minecraft,minecraft\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"minecraft-launcher.desktop\"\nLABEL oc.launch=\"minecraft-launcher.Minecraft Launcher\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"minecraft\"\nLABEL oc.displayname=\"minecraft\"\nLABEL oc.path=\"/usr/bin/minecraft-launcher\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"4G\\\",\\\"shm_size\\\":\\\"2G\\\",\\\"cpu_period\\\":200000,\\\"cpu_quota\\\":200000,\\\"ipc_mode\\\":\\\"shareable\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"minecraft\"\nENV APPBIN \"/usr/bin/minecraft-launcher\"\nENV APP \"/usr/bin/minecraft-launcher\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/minecraft/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/minecraft/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/minecraft/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/minecraft/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-mines\nLABEL oc.icon=\"circle_gnome-mines.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQXBwcy1WaXN1YWwtU3R1ZGlvLUNvZGUiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ5OS45NSIgeDI9IjQ5OS45NSIgeTE9IjIuMDA3OCIgeTI9IjEwMjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMiAyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSI1MTIuMDEiIGN5PSI1MTIuMDEiIHI9IjQ3MC4xNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTc2MjUgMCAwIC45NzYyNSAxMi4xNTIgMTIuMTQxKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLW9wYWNpdHk9Ii41MjU5MyIgb2Zmc2V0PSIxIi8+CiAgPC9yYWRpYWxHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJjIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTUuMjk5NzE1Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjEzIiB5Mj0iNTEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDYzODI5IiB5PSItLjA1NjYwNCIgd2lkdGg9IjEuMTI3NyIgaGVpZ2h0PSIxLjExMzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODk2MjM0MzIiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNTg4MjUgMCAwIC4wNTg4MjUgMS44ODE4IDEuODgyNSkiPgogIDxwYXRoIGQ9Im05ODQuODggMzE2Ljc1cS05LjI5MjMtMjIuNTI5LTIwLjk2Mi00NC4xMzljLTQuMzc2LTguMTU3OC05LjAyMjItMTYuMjYxLTEzLjkzOC0yNC4yMDMtMjEuMTI0LTM0LjI1Mi00Ni44OTQtNjYuNjE0LTc3LjMxMS05Ny4wMjktOTkuNTY4LTk5LjU2OC0yMTkuODMtMTQ5LjM4LTM2MC42Ny0xNDkuMzgtMTQwLjg1IDAtMjYxLjA1IDQ5LjgxMS0zNjAuNjEgMTQ5LjM4LTk5LjU2OSA5OS41NzItMTQ5LjM4IDIxOS43OC0xNDkuMzggMzYwLjYxczQ5LjgxMSAyNjEuMTEgMTQ5LjM4IDM2MC42N2M5OS41NjggOTkuNTY4IDIxOS43OCAxNDkuMzIgMzYwLjYxIDE0OS4zMiAxNDAuODQgMCAyNjEuMTEtNDkuNzU4IDM2MC42Ny0xNDkuMzIgNTQuODM2LTU0Ljg5IDk0LjU5OC0xMTYuMDQgMTE5LjIzLTE4My40MiAyMC4wNDMtNTQuOTQzIDMwLjA5Mi0xMTMuOTkgMzAuMDkyLTE3Ny4yNSAwLTQ4LjUxNS01Ljg4ODgtOTQuNTk4LTE3LjcyLTEzOC4yNS0xLjM1MDctNC45MTYzLTIuNzU1My05LjgzMjYtNC4yMTM5LTE0LjY5NS00LjQzMDItMTQuMzcxLTkuNTA4NS0yOC40NzEtMTUuMTgxLTQyLjMwMnoiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE4LjM2OCIvPgogIDxwYXRoIGlkPSJwYXRoIiBkPSJtOTg0Ljg4IDMxNi43NXEtOS4yOTIzLTIyLjUyOS0yMC45NjItNDQuMTM5Yy00LjM3Ni04LjE1NzgtOS4wMjIyLTE2LjI2MS0xMy45MzgtMjQuMjAzLTIxLjEyNC0zNC4yNTItNDYuODk0LTY2LjYxNC03Ny4zMTEtOTcuMDI5LTk5LjU2OC05OS41NjgtMjE5LjgzLTE0OS4zOC0zNjAuNjctMTQ5LjM4LTE0MC44NSAwLTI2MS4wNSA0OS44MTEtMzYwLjYxIDE0OS4zOC05OS41NjkgOTkuNTcyLTE0OS4zOCAyMTkuNzgtMTQ5LjM4IDM2MC42MXM0OS44MTEgMjYxLjExIDE0OS4zOCAzNjAuNjdjOTkuNTY4IDk5LjU2OCAyMTkuNzggMTQ5LjMyIDM2MC42MSAxNDkuMzIgMTQwLjg0IDAgMjYxLjExLTQ5Ljc1OCAzNjAuNjctMTQ5LjMyIDU0LjgzNi01NC44OSA5NC41OTgtMTE2LjA0IDExOS4yMy0xODMuNDIgMjAuMDQzLTU0Ljk0MyAzMC4wOTItMTEzLjk5IDMwLjA5Mi0xNzcuMjUgMC00OC41MTUtNS44ODg4LTk0LjU5OC0xNy43Mi0xMzguMjUtMS4zNTA3LTQuOTE2My0yLjc1NTMtOS44MzI2LTQuMjEzOS0xNC42OTUtNC40MzAyLTE0LjM3MS05LjUwODUtMjguNDcxLTE1LjE4MS00Mi4zMDJ6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9IjE4LjM2OCIvPgogIDxjaXJjbGUgY3g9IjUxMiIgY3k9IjUxMS45OSIgcj0iNDU4Ljk5IiBjb2xvcj0iIzAwMDAwMCIgZW5hYmxlLWJhY2tncm91bmQ9ImFjY3VtdWxhdGUiIGZpbGw9IiM2NjYiIHN0cm9rZS13aWR0aD0iMzguNDI2Ii8+CiAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTExLjk5IiByPSI0NTguOTkiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0iYWNjdW11bGF0ZSIgZmlsbD0idXJsKCNhKSIgc3Ryb2tlLXdpZHRoPSIzOC40MjYiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zMS45MjQgMTNjLTEuMzUwNyAwLTIuMjEyMyAwLjk5MTcyLTIuMjk3NiAyLjMwMnYyLjY3YzAuMTIxMTYgMS4xOTgxIDEuMTQ0MyAyLjE1NCAyLjM3MzggMi4xNTRhMi40MjMyIDIuNDIzMiAwIDAgMCAwLjg4ODUxLTAuMTUyNTcgMi40Mjc3IDIuNDI3NyAwIDAgMCAxLjQ4MDgtMi4wMDE0di0yLjU5ODJhMi40MTQyIDIuNDE0MiAwIDAgMC0yLjQ0NTYtMi4zNzM4em0tNC41OTk2IDUuNTY0NGExNC44NDQgMTQuODQ0IDAgMCAwLTQuMzA3OSAyLjQ1MDEgNC4zOTc3IDQuMzk3NyAwIDAgMSAxLjMzNzMgMS40ODA4YzAuMDEzNDYgMC4wMTc5Ni0wLjAwOTEgMC4wNTgzMyAwIDAuMDc2MjlhNC4yNTg2IDQuMjU4NiAwIDAgMSAwLjM3MjQ2IDAuODkzYzAuMDA5MSAwLjAyMjQ0IDAgMC4wNDkzNyAwIDAuMDcxOGE0LjU0NTggNC41NDU4IDAgMCAxIDAuMDc2MjkgMS45Mjk2Yy0wLjA1ODM0IDAuMjg3Mi0wLjE4ODQ3IDAuNTU2NDQtMC4yOTYxNyAwLjgxNjcxYTQuMjU4NiA0LjI1ODYgMCAwIDEtMy45MzU1IDIuNjcgMy45MjY1IDMuOTI2NSAwIDAgMS0yLjIyNTgtMC42Njg2M2MtMC4wOTQyMyAwLjI2OTI0LTAuMjM3ODMgMC41Mjk1Mi0wLjI5NjE3IDAuODE2NzF2MC4wNzYyOGMtMC4wODk3NCAwLjQzOTc3LTAuMTc5NSAwLjg3OTU0LTAuMjI0MzcgMS4zMzI4djAuMDc2MjhjLTAuMDQ0ODggMC40NTc3Mi0wLjA3MTggMC45NDIzNi0wLjA3MTggMS40MDkxdjAuMTQ4MDhjMCAwLjQ0NDI2IDAuMDMxNDEgMC45MDY0NiAwLjA3MTggMS4zMzczdjAuMTQ4MDljMC4wNDkzNyAwLjQyNjMgMC4xMzQ2MiAwLjg0MzY0IDAuMjI0MzcgMS4yNjEgMC4wODA3NyAwLjQxMjg0IDAuMTc5NSAwLjc5NDI4IDAuMjk2MTcgMS4xODkyYTUuOTIzNCA1LjkyMzQgMCAwIDEgMi41MjE5LTAuNzQ0OTFjMC44NjE1OS0wLjA0NDg4IDEuNjYwMyAwLjIwNjQyIDIuMzAyIDAuNjczMTFhMy45NDQ0IDMuOTQ0NCAwIDAgMSAxLjQwOTEgMS44NDg4IDQuNjMxIDQuNjMxIDAgMCAxIDAuMjk2MTcgMS43MDUyYzAgMS4yMDcxLTAuOTg3MjMgMi43OTEyLTEuNzA1MiAzLjU2NzUgMC4yOTE2OCAwLjIyNDM3IDAuNTc0MzkgMC40NTc3MiAwLjg4ODUxIDAuNjY0MTQgMC4zNzY5NCAwLjI1MTMgMC43MTc5OSAwLjUyOTUyIDEuMTEyOSAwLjc0NDkxIDAuNTY1NDIgMC4zMDUxNCAxLjE3NTcgMC41ODMzNiAxLjc4MTUgMC44MTY3MSAwLjExNjY3IDAuMDQ0ODggMC4yNDY4MSAwLjA1Mzg1IDAuMzcyNDYgMC4wNzE4YTIuNTEzIDIuNTEzIDAgMCAxLTAuMDc2MjktMC41MjA1NGMwLTEuODg0NyAyLjEyNy0zLjQxMDQgNC43NTIyLTMuNDEwNCAyLjYyMDcgMCA0Ljc0NzcgMS41MjU3IDQuNzQ3NyAzLjQxMDQgMCAwLjE3MDUyLTAuMDQ0ODggMC4zNTg5OS0wLjA3NjI4IDAuNTIwNTQgMC43MTc5OS0wLjI0NjgxIDEuNDIyNS0wLjUzODQ5IDIuMDc3Ny0wLjg4ODUxIDAuNTA3MDgtMC4yNjkyNCAwLjk0MjM2LTAuNTY5OSAxLjQxMzUtMC44OTMgMC4xNDM2LTAuMDk4NzIgMC4zMDUxNC0wLjE4ODQ3IDAuNDQ0MjYtMC4yOTYxNyAwLjExMjE4LTAuMDgwNzcgMC4xODg0Ny0wLjIwNjQyIDAuMjk2MTctMC4yOTYxN2E0LjU5MDYgNC41OTA2IDAgMCAxLTAuODE2NzEtMC44MTY3MSAzLjg5NTEgMy44OTUxIDAgMCAxLTAuODE2NzEtMS43ODE1IDUuMDkzMiA1LjA5MzIgMCAwIDEtMC4wNzE4LTAuODg4NTFjMC0wLjU3ODg4IDAuMTMwMTQtMS4xNDQzIDAuMjk2MTctMS42MzM0IDAuMDA0NS0wLjAyMjQ0LTAuMDA5MS0wLjA1Mzg1IDAtMC4wNzYyOWEzLjY3OTcgMy42Nzk3IDAgMCAxIDAuMjk2MTctMC42NjQxNGMwLjEzNDYyLTAuMjI0MzcgMC4yNzgyMi0wLjQwMzg3IDAuNDQ4NzQtMC41OTY4MyAwLjE3NTAxLTAuMjA2NDIgMC4zNzY5NC0wLjM1NDUgMC41OTIzNC0wLjUxNjA1YTMuNjM0OCAzLjYzNDggMCAwIDEgMS4zMzI4LTAuNjczMTEgNC4zNTczIDQuMzU3MyAwIDAgMSAwLjgxNjcxLTAuMTQzNmMwLjY2ODYzLTAuMDQwMzkgMS43OTUgMC4yMjg4NiAyLjY3IDAuNzQwNDIgMC4xMDc3LTAuMzcyNDYgMC4yMjQzNy0wLjcyNjk2IDAuMzAwNjYtMS4xMTI5IDAuMDg1MjYtMC40MTczMyAwLjE3MDUyLTAuODM0NjYgMC4yMjQzNy0xLjI2MSAwLTAuMDQ5MzYtMC4wMDkxLTAuMDk4NzMgMC0wLjE0ODA5YTE0Ljk0MyAxNC45NDMgMCAwIDAgMC0yLjk3MDdjLTAuMDQ5MzctMC40NDg3NC0wLjEzNDYyLTAuODkzLTAuMjI0MzctMS4zMzI4LTAuMDA5MS0wLjAyMjQ0IDAtMC4wNTM4NiAwLTAuMDc2MjktMC4wNjczLTAuMzE0MTItMC4xOTI5Ni0wLjU5NjgzLTAuMzAwNjYtMC44ODg1MWEzLjkyMiAzLjkyMiAwIDAgMS0yLjIyNTggMC42Njg2MiA0LjIzMTYgNC4yMzE2IDAgMCAxLTMuMDQyNS0xLjI2MSA0LjUwOTkgNC41MDk5IDAgMCAxLTAuNTE2MDUtMC42NzMxMSA0LjI0OTYgNC4yNDk2IDAgMCAxLTAuMjI0MzctNC40NTE1IDQuMjQ5NiA0LjI0OTYgMCAwIDEgMC41MjA1NC0wLjgxMjIyIDQuNTMyMyA0LjUzMjMgMCAwIDEgMC43NDA0Mi0wLjY3MzEyIDE0LjE4IDE0LjE4IDAgMCAwLTQuMjI3Mi0yLjQ0NTZjMC4wMzE0MSAwLjE2NjA0IDAuMDcxNzkgMC4zNTAwMiAwLjA3MTc5IDAuNTIwNTQgMCAxLjg4NDctMi4xMjcgMy40MTA0LTQuNzQ3NyAzLjQxMDQtMS42NDI0IDAtMy4wNzg0LTAuNTc0MzktMy45MzU1LTEuNDgwOGEzLjQxMDQgMy40MTA0IDAgMCAxLTAuNDQ0MjctMC41OTIzMiAyLjYyNTEgMi42MjUxIDAgMCAxLTAuMzY3OTctMS4zMzczYzAtMC4xNzA1MiAwLjA0MDM5LTAuMzU4OTkgMC4wNzE4LTAuNTIwNTR6bS0xMC4zMTcgMS42MzM0YTIuNDcyNiAyLjQ3MjYgMCAwIDAtMS40ODA4IDEuMTEyOSAyLjQyMzIgMi40MjMyIDAgMCAwIDAuNzQwNDIgMy4zMzg2bDEuOTI5NiAxLjE4OTIgMC43NDA0MiAwLjQ0NDI1YTIuOTE2OCAyLjkxNjggMCAwIDAgMC45NjQ4IDAuMjI0MzcgMi44NDA1IDIuODQwNSAwIDAgMCAxLjg1NzgtMC43NDQ5MSAyLjMzMzUgMi4zMzM1IDAgMCAwIDAuNzQwNDMtMS43MDUyIDIuNDc3MSAyLjQ3NzEgMCAwIDAtMC44MTY3MS0xLjg1NzhsLTAuODg4NTEtMC41MTYwNi0yLjAwNTktMS4xODkyYTIuMzA2NSAyLjMwNjUgMCAwIDAtMS43ODE1LTAuMjk2MTd6bTI5LjA5MiAwYTIuMzE1NSAyLjMxNTUgMCAwIDAtMC44OTMgMC4yOTYxN2wtMi4wMDE0IDEuMTg5Mi0wLjg5MyAwLjUyMDU0Yy0wLjAyNjkzIDAuMDE3OTUtMC4wNDQ4OCAwLjA0NDg4LTAuMDcxNzkgMC4wNzE4YTIuMTA5MSAyLjEwOTEgMCAwIDAtMC43NDQ5MSAxLjcwNTIgMi4zMzM1IDIuMzMzNSAwIDAgMCAwLjc0NDkxIDEuNzA1MiAyLjgzNjEgMi44MzYxIDAgMCAwIDIuODE4MSAwLjU5MjM0bDAuNzQwNDMtMC40Mzk3NyAxLjkyOTYtMS4xODkyYTIuNDIzMiAyLjQyMzIgMCAwIDAgMC43NDQ5MS0zLjMzODYgMi4zNTU5IDIuMzU1OSAwIDAgMC0yLjM3ODMtMS4xMTI5em0tMTQuMDk5IDcuMDQ5N2E0Ljc0OTkgNC43NDk5IDAgMSAxIDAgOS40OTk5Yy0xLjMxNDggMC0yLjQ4MTUtMC41NTE5NS0zLjMzODYtMS40MTM1LTAuMjE1NC0wLjIxMDkxLTAuNDI2MzEtMC40MTI4NC0wLjU5NjgzLTAuNjY0MTRhNC43ODM2IDQuNzgzNiAwIDAgMS0wLjgxNjcxLTIuNjc0NWMwLTAuMzI3NTggMC4wMTM0Ny0wLjY1NTE2IDAuMDc2MjktMC45NjQ4IDAuNDQ0MjUtMi4xNjI5IDIuMzc4My0zLjc4MjkgNC42NzU5LTMuNzgyOXptMCAyLjM3ODNjLTAuOTg3MjMgMC0xLjc5NSAwLjYyODI0LTIuMTU0IDEuNDgwOGEyLjIzMDMgMi4yMzAzIDAgMCAwLTAuMjI0MzcgMC44ODg1MSAyLjM3MzggMi4zNzM4IDAgMSAwIDIuMzc4My0yLjM3Mzh6bS0xMi4wOTggNy45MzgzYy0wLjU1MTk1IDAuMDU4MzMtMC43MDAwNCAwLjE5NzQ1LTAuOTY0OCAwLjI5NjE3bC0wLjUxNjA1IDAuMjk2MTctMS45Mjk2IDEuMTg0N2EyLjQyMzIgMi40MjMyIDAgMCAwLTAuNzQ0OTEgMy4zNDMxIDIuNDQ1NiAyLjQ0NTYgMCAwIDAgMy4zMzg2IDAuODEyMjJsMS45Mjk2LTEuMTg0NyAwLjY3MzExLTAuNDQ4NzRhMi43NTUzIDIuNzU1MyAwIDAgMCAwLjczNTk0LTEuMTg0NyAxLjQ4NTMgMS40ODUzIDAgMCAwIDAuMDc2MjktMC40NDg3NCAyLjg2MyAyLjg2MyAwIDAgMC0wLjc0MDQyLTEuODUzMyAyLjYwMjcgMi42MDI3IDAgMCAwLTAuODE2NzEtMC42NjQxNCAyLjA2NDIgMi4wNjQyIDAgMCAwLTEuMDQxMS0wLjE0ODA4em0yNC4yNjggMC4xNDgwOGEyLjUzMDkgMi41MzA5IDAgMCAwLTIuNTI2NCAyLjUyMTljMCAwLjY1MDY4IDAuMTgzOTggMS4xMjE5IDAuNTk2ODMgMS41NTcxbDAuNzQwNDMgMC41MjA1NCAxLjkyOTYgMS4xODQ3YTIuNDQ1NiAyLjQ0NTYgMCAwIDAgMy4zMzg2LTAuODEyMjIgMi40MjMyIDIuNDIzMiAwIDAgMC0wLjc0MDQyLTMuMzQzMWwtMS45Mjk2LTEuMTg0N2MtMC4xNzA1Mi0wLjA5ODczLTAuMzMyMDctMC4yMTA5MS0wLjUyMDU0LTAuMjk2MTdhMi43NTUzIDIuNzU1MyAwIDAgMC0wLjg4ODUxLTAuMTQ4MDh6bS0xMi4xNyA2LjE1NjdhMi40NDU2IDIuNDQ1NiAwIDAgMC0wLjg5MyAwLjE0ODA4IDMuMDkxOCAzLjA5MTggMCAwIDAtMC44MTY3MSAwLjUyMDU0IDIuMTk4OCAyLjE5ODggMCAwIDAtMC44MTIyMiAxLjQ4MDh2Mi42MDcyYzAgMS4zMTAzIDEuMDk0OSAyLjM3MzggMi40NDU2IDIuMzczOGEyLjQxNDIgMi40MTQyIDAgMCAwIDIuNDUwMS0yLjM3ODN2LTIuNTkzN2EyLjQwOTcgMi40MDk3IDAgMCAwLTIuMzc4My0yLjE1NHoiIGZpbHRlcj0idXJsKCNlKSIgb3BhY2l0eT0iLjc1IiBzdHJva2Utd2lkdGg9IjMuNzc5NiIvPgogPHBhdGggZD0ibTMxLjkyNCAxM2MtMS4zNTA3IDAtMi4yMTIzIDAuOTkxNzItMi4yOTc2IDIuMzAydjIuNjdjMC4xMjExNiAxLjE5ODEgMS4xNDQzIDIuMTU0IDIuMzczOCAyLjE1NGEyLjQyMzIgMi40MjMyIDAgMCAwIDAuODg4NTEtMC4xNTI1NyAyLjQyNzcgMi40Mjc3IDAgMCAwIDEuNDgwOC0yLjAwMTR2LTIuNTk4MmEyLjQxNDIgMi40MTQyIDAgMCAwLTIuNDQ1Ni0yLjM3Mzh6bS00LjU5OTYgNS41NjQ0YTE0Ljg0NCAxNC44NDQgMCAwIDAtNC4zMDc5IDIuNDUwMSA0LjM5NzcgNC4zOTc3IDAgMCAxIDEuMzM3MyAxLjQ4MDhjMC4wMTM0NiAwLjAxNzk2LTAuMDA5MSAwLjA1ODMzIDAgMC4wNzYyOWE0LjI1ODYgNC4yNTg2IDAgMCAxIDAuMzcyNDYgMC44OTNjMC4wMDkxIDAuMDIyNDQgMCAwLjA0OTM3IDAgMC4wNzE4YTQuNTQ1OCA0LjU0NTggMCAwIDEgMC4wNzYyOSAxLjkyOTZjLTAuMDU4MzQgMC4yODcyLTAuMTg4NDcgMC41NTY0NC0wLjI5NjE3IDAuODE2NzFhNC4yNTg2IDQuMjU4NiAwIDAgMS0zLjkzNTUgMi42NyAzLjkyNjUgMy45MjY1IDAgMCAxLTIuMjI1OC0wLjY2ODYzYy0wLjA5NDIzIDAuMjY5MjQtMC4yMzc4MyAwLjUyOTUyLTAuMjk2MTcgMC44MTY3MXYwLjA3NjI4Yy0wLjA4OTc0IDAuNDM5NzctMC4xNzk1IDAuODc5NTQtMC4yMjQzNyAxLjMzMjh2MC4wNzYyOGMtMC4wNDQ4OCAwLjQ1NzcyLTAuMDcxOCAwLjk0MjM2LTAuMDcxOCAxLjQwOTF2MC4xNDgwOGMwIDAuNDQ0MjYgMC4wMzE0MSAwLjkwNjQ2IDAuMDcxOCAxLjMzNzN2MC4xNDgwOWMwLjA0OTM3IDAuNDI2MyAwLjEzNDYyIDAuODQzNjQgMC4yMjQzNyAxLjI2MSAwLjA4MDc3IDAuNDEyODQgMC4xNzk1IDAuNzk0MjggMC4yOTYxNyAxLjE4OTJhNS45MjM0IDUuOTIzNCAwIDAgMSAyLjUyMTktMC43NDQ5MWMwLjg2MTU5LTAuMDQ0ODggMS42NjAzIDAuMjA2NDIgMi4zMDIgMC42NzMxMWEzLjk0NDQgMy45NDQ0IDAgMCAxIDEuNDA5MSAxLjg0ODggNC42MzEgNC42MzEgMCAwIDEgMC4yOTYxNyAxLjcwNTJjMCAxLjIwNzEtMC45ODcyMyAyLjc5MTItMS43MDUyIDMuNTY3NSAwLjI5MTY4IDAuMjI0MzcgMC41NzQzOSAwLjQ1NzcyIDAuODg4NTEgMC42NjQxNCAwLjM3Njk0IDAuMjUxMyAwLjcxNzk5IDAuNTI5NTIgMS4xMTI5IDAuNzQ0OTEgMC41NjU0MiAwLjMwNTE0IDEuMTc1NyAwLjU4MzM2IDEuNzgxNSAwLjgxNjcxIDAuMTE2NjcgMC4wNDQ4OCAwLjI0NjgxIDAuMDUzODUgMC4zNzI0NiAwLjA3MThhMi41MTMgMi41MTMgMCAwIDEtMC4wNzYyOS0wLjUyMDU0YzAtMS44ODQ3IDIuMTI3LTMuNDEwNCA0Ljc1MjItMy40MTA0IDIuNjIwNyAwIDQuNzQ3NyAxLjUyNTcgNC43NDc3IDMuNDEwNCAwIDAuMTcwNTItMC4wNDQ4OCAwLjM1ODk5LTAuMDc2MjggMC41MjA1NCAwLjcxNzk5LTAuMjQ2ODEgMS40MjI1LTAuNTM4NDkgMi4wNzc3LTAuODg4NTEgMC41MDcwOC0wLjI2OTI0IDAuOTQyMzYtMC41Njk5IDEuNDEzNS0wLjg5MyAwLjE0MzYtMC4wOTg3MiAwLjMwNTE0LTAuMTg4NDcgMC40NDQyNi0wLjI5NjE3IDAuMTEyMTgtMC4wODA3NyAwLjE4ODQ3LTAuMjA2NDIgMC4yOTYxNy0wLjI5NjE3YTQuNTkwNiA0LjU5MDYgMCAwIDEtMC44MTY3MS0wLjgxNjcxIDMuODk1MSAzLjg5NTEgMCAwIDEtMC44MTY3MS0xLjc4MTUgNS4wOTMyIDUuMDkzMiAwIDAgMS0wLjA3MTgtMC44ODg1MWMwLTAuNTc4ODggMC4xMzAxNC0xLjE0NDMgMC4yOTYxNy0xLjYzMzQgMC4wMDQ1LTAuMDIyNDQtMC4wMDkxLTAuMDUzODUgMC0wLjA3NjI5YTMuNjc5NyAzLjY3OTcgMCAwIDEgMC4yOTYxNy0wLjY2NDE0YzAuMTM0NjItMC4yMjQzNyAwLjI3ODIyLTAuNDAzODcgMC40NDg3NC0wLjU5NjgzIDAuMTc1MDEtMC4yMDY0MiAwLjM3Njk0LTAuMzU0NSAwLjU5MjM0LTAuNTE2MDVhMy42MzQ4IDMuNjM0OCAwIDAgMSAxLjMzMjgtMC42NzMxMSA0LjM1NzMgNC4zNTczIDAgMCAxIDAuODE2NzEtMC4xNDM2YzAuNjY4NjMtMC4wNDAzOSAxLjc5NSAwLjIyODg2IDIuNjcgMC43NDA0MiAwLjEwNzctMC4zNzI0NiAwLjIyNDM3LTAuNzI2OTYgMC4zMDA2Ni0xLjExMjkgMC4wODUyNi0wLjQxNzMzIDAuMTcwNTItMC44MzQ2NiAwLjIyNDM3LTEuMjYxIDAtMC4wNDkzNi0wLjAwOTEtMC4wOTg3MyAwLTAuMTQ4MDlhMTQuOTQzIDE0Ljk0MyAwIDAgMCAwLTIuOTcwN2MtMC4wNDkzNy0wLjQ0ODc0LTAuMTM0NjItMC44OTMtMC4yMjQzNy0xLjMzMjgtMC4wMDkxLTAuMDIyNDQgMC0wLjA1Mzg2IDAtMC4wNzYyOS0wLjA2NzMtMC4zMTQxMi0wLjE5Mjk2LTAuNTk2ODMtMC4zMDA2Ni0wLjg4ODUxYTMuOTIyIDMuOTIyIDAgMCAxLTIuMjI1OCAwLjY2ODYyIDQuMjMxNiA0LjIzMTYgMCAwIDEtMy4wNDI1LTEuMjYxIDQuNTA5OSA0LjUwOTkgMCAwIDEtMC41MTYwNS0wLjY3MzExIDQuMjQ5NiA0LjI0OTYgMCAwIDEtMC4yMjQzNy00LjQ1MTUgNC4yNDk2IDQuMjQ5NiAwIDAgMSAwLjUyMDU0LTAuODEyMjIgNC41MzIzIDQuNTMyMyAwIDAgMSAwLjc0MDQyLTAuNjczMTIgMTQuMTggMTQuMTggMCAwIDAtNC4yMjcyLTIuNDQ1NmMwLjAzMTQxIDAuMTY2MDQgMC4wNzE3OSAwLjM1MDAyIDAuMDcxNzkgMC41MjA1NCAwIDEuODg0Ny0yLjEyNyAzLjQxMDQtNC43NDc3IDMuNDEwNC0xLjY0MjQgMC0zLjA3ODQtMC41NzQzOS0zLjkzNTUtMS40ODA4YTMuNDEwNCAzLjQxMDQgMCAwIDEtMC40NDQyNy0wLjU5MjMyIDIuNjI1MSAyLjYyNTEgMCAwIDEtMC4zNjc5Ny0xLjMzNzNjMC0wLjE3MDUyIDAuMDQwMzktMC4zNTg5OSAwLjA3MTgtMC41MjA1NHptLTEwLjMxNyAxLjYzMzRhMi40NzI2IDIuNDcyNiAwIDAgMC0xLjQ4MDggMS4xMTI5IDIuNDIzMiAyLjQyMzIgMCAwIDAgMC43NDA0MiAzLjMzODZsMS45Mjk2IDEuMTg5MiAwLjc0MDQyIDAuNDQ0MjVhMi45MTY4IDIuOTE2OCAwIDAgMCAwLjk2NDggMC4yMjQzNyAyLjg0MDUgMi44NDA1IDAgMCAwIDEuODU3OC0wLjc0NDkxIDIuMzMzNSAyLjMzMzUgMCAwIDAgMC43NDA0My0xLjcwNTIgMi40NzcxIDIuNDc3MSAwIDAgMC0wLjgxNjcxLTEuODU3OGwtMC44ODg1MS0wLjUxNjA2LTIuMDA1OS0xLjE4OTJhMi4zMDY1IDIuMzA2NSAwIDAgMC0xLjc4MTUtMC4yOTYxN3ptMjkuMDkyIDBhMi4zMTU1IDIuMzE1NSAwIDAgMC0wLjg5MyAwLjI5NjE3bC0yLjAwMTQgMS4xODkyLTAuODkzIDAuNTIwNTRjLTAuMDI2OTMgMC4wMTc5NS0wLjA0NDg4IDAuMDQ0ODgtMC4wNzE3OSAwLjA3MThhMi4xMDkxIDIuMTA5MSAwIDAgMC0wLjc0NDkxIDEuNzA1MiAyLjMzMzUgMi4zMzM1IDAgMCAwIDAuNzQ0OTEgMS43MDUyIDIuODM2MSAyLjgzNjEgMCAwIDAgMi44MTgxIDAuNTkyMzRsMC43NDA0My0wLjQzOTc3IDEuOTI5Ni0xLjE4OTJhMi40MjMyIDIuNDIzMiAwIDAgMCAwLjc0NDkxLTMuMzM4NiAyLjM1NTkgMi4zNTU5IDAgMCAwLTIuMzc4My0xLjExMjl6bS0xNC4wOTkgNy4wNDk3YTQuNzQ5OSA0Ljc0OTkgMCAxIDEgMCA5LjQ5OTljLTEuMzE0OCAwLTIuNDgxNS0wLjU1MTk1LTMuMzM4Ni0xLjQxMzUtMC4yMTU0LTAuMjEwOTEtMC40MjYzMS0wLjQxMjg0LTAuNTk2ODMtMC42NjQxNGE0Ljc4MzYgNC43ODM2IDAgMCAxLTAuODE2NzEtMi42NzQ1YzAtMC4zMjc1OCAwLjAxMzQ3LTAuNjU1MTYgMC4wNzYyOS0wLjk2NDggMC40NDQyNS0yLjE2MjkgMi4zNzgzLTMuNzgyOSA0LjY3NTktMy43ODI5em0wIDIuMzc4M2MtMC45ODcyMyAwLTEuNzk1IDAuNjI4MjQtMi4xNTQgMS40ODA4YTIuMjMwMyAyLjIzMDMgMCAwIDAtMC4yMjQzNyAwLjg4ODUxIDIuMzczOCAyLjM3MzggMCAxIDAgMi4zNzgzLTIuMzczOHptLTEyLjA5OCA3LjkzODNjLTAuNTUxOTUgMC4wNTgzMy0wLjcwMDA0IDAuMTk3NDUtMC45NjQ4IDAuMjk2MTdsLTAuNTE2MDUgMC4yOTYxNy0xLjkyOTYgMS4xODQ3YTIuNDIzMiAyLjQyMzIgMCAwIDAtMC43NDQ5MSAzLjM0MzEgMi40NDU2IDIuNDQ1NiAwIDAgMCAzLjMzODYgMC44MTIyMmwxLjkyOTYtMS4xODQ3IDAuNjczMTEtMC40NDg3NGEyLjc1NTMgMi43NTUzIDAgMCAwIDAuNzM1OTQtMS4xODQ3IDEuNDg1MyAxLjQ4NTMgMCAwIDAgMC4wNzYyOS0wLjQ0ODc0IDIuODYzIDIuODYzIDAgMCAwLTAuNzQwNDItMS44NTMzIDIuNjAyNyAyLjYwMjcgMCAwIDAtMC44MTY3MS0wLjY2NDE0IDIuMDY0MiAyLjA2NDIgMCAwIDAtMS4wNDExLTAuMTQ4MDh6bTI0LjI2OCAwLjE0ODA4YTIuNTMwOSAyLjUzMDkgMCAwIDAtMi41MjY0IDIuNTIxOWMwIDAuNjUwNjggMC4xODM5OCAxLjEyMTkgMC41OTY4MyAxLjU1NzFsMC43NDA0MyAwLjUyMDU0IDEuOTI5NiAxLjE4NDdhMi40NDU2IDIuNDQ1NiAwIDAgMCAzLjMzODYtMC44MTIyMiAyLjQyMzIgMi40MjMyIDAgMCAwLTAuNzQwNDItMy4zNDMxbC0xLjkyOTYtMS4xODQ3Yy0wLjE3MDUyLTAuMDk4NzMtMC4zMzIwNy0wLjIxMDkxLTAuNTIwNTQtMC4yOTYxN2EyLjc1NTMgMi43NTUzIDAgMCAwLTAuODg4NTEtMC4xNDgwOHptLTEyLjE3IDYuMTU2N2EyLjQ0NTYgMi40NDU2IDAgMCAwLTAuODkzIDAuMTQ4MDggMy4wOTE4IDMuMDkxOCAwIDAgMC0wLjgxNjcxIDAuNTIwNTQgMi4xOTg4IDIuMTk4OCAwIDAgMC0wLjgxMjIyIDEuNDgwOHYyLjYwNzJjMCAxLjMxMDMgMS4wOTQ5IDIuMzczOCAyLjQ0NTYgMi4zNzM4YTIuNDE0MiAyLjQxNDIgMCAwIDAgMi40NTAxLTIuMzc4M3YtMi41OTM3YTIuNDA5NyAyLjQwOTcgMCAwIDAtMi4zNzgzLTIuMTU0eiIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlLXdpZHRoPSIzLjc3OTYiLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"mines,gnome mines,game mines,mines\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Mines.desktop\"\nLABEL oc.launch=\"gnome-mines.Gnome-mines\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Mines\"\nLABEL oc.displayname=\"gnome-mines (alpine)\"\nLABEL oc.path=\"/usr/bin/gnome-mines\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Mines\"\nENV APPBIN \"/usr/bin/gnome-mines\"\nENV APP \"/usr/bin/gnome-mines\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/mines/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/mines/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/mines/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/mines/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN mkdir -p /run/user/4096 /var/run/dbus/ chown balloon:balloon /run/user/4096 /var/run/dbus\nCOPY composer/node /composer/node\nRUN cd /composer/node/ocdownload && npm install\nCOPY composer/init.d/init.nautilus /composer/init.d/init.nautilus\nCOPY composer/desktop_download.py /composer/desktop_download.py\nENV NAUTILUS_PYTHON_DEBUG=misc\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus gnome-icon-theme gnome-icon-theme-symbolic numix-gtk-theme numix-icon-theme gnome-font-viewer dbus-x11 python3-nautilus python3-shellescape nautilus desktop-file-utils shared-mime-info xdg-user-dirs && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_filemanager.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIGlkPSJDYWxjdWxhdG9yIgogICB3aWR0aD0iNjQiCiAgIGhlaWdodD0iNjQiCiAgIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIKICAgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIgogICB2ZXJzaW9uPSIxLjEiCiAgIHZpZXdCb3g9IjAgMCA2NCA2NCIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZmlsZW1hbmFnZXIuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjUgKDIwNjBlYzFmOWYsIDIwMjAtMDQtMDgpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEyNDQ1NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNDQwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjYxNSIKICAgICBpZD0ibmFtZWR2aWV3MjQ0NTMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjMuNjkiCiAgICAgaW5rc2NhcGU6Y3g9Ii0xNC4wNzA0NjEiCiAgICAgaW5rc2NhcGU6Y3k9IjMyIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iQ2FsY3VsYXRvciIgLz4KICA8ZGVmcwogICAgIGlkPSJkZWZzMjQ0MTMiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiMyZjVmZGQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDM5MiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzFhN2ZkNCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI0Mzk0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjUyMCIKICAgICAgIHgyPSI1MjAiCiAgICAgICB5MT0iNCIKICAgICAgIHkyPSIxMDI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNDQwMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiNmZWM1ODkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyNDM5NyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iI2YzNGYxNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI0Mzk5IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImQiCiAgICAgICB4MT0iNTIwIgogICAgICAgeDI9IjUyMCIKICAgICAgIHkxPSI0IgogICAgICAgeTI9IjEwMjQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNjA4NjI3MywwLDAsMC4wNjA1NDkwMiwwLjc4MzE2OCwwLjkxODY2OTUpIj4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzExMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI0NDAzIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjM2IzYjNiIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjQ0MDUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYyIKICAgICAgIHgxPSI1MjAiCiAgICAgICB4Mj0iNTIwIgogICAgICAgeTE9IjQiCiAgICAgICB5Mj0iMTAyNCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4wNjk0NTI0NCwwLDAsMC4wNjk0NTI0NCwtMy41MjYyMDYzLC0zLjU5NTY2NSkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHhsaW5rOmhyZWY9IiNhIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYiIKICAgICAgIHgxPSI3NjAiCiAgICAgICB4Mj0iNzYwIgogICAgICAgeTE9IjQiCiAgICAgICB5Mj0iMTAyNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeGxpbms6aHJlZj0iI2EiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDYyNzQ1LDAsMCwwLjA2Mjc0NSwtMC4xMjU0OSwtMC4xMjU0OSkiIC8+CiAgICA8ZmlsdGVyCiAgICAgICBpZD0iZSIKICAgICAgIHg9Ii0uMDM2IgogICAgICAgeT0iLS4wMzYiCiAgICAgICB3aWR0aD0iMS4wNzIiCiAgICAgICBoZWlnaHQ9IjEuMDcyIgogICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5IgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIyNDQxMCIgLz4KICAgIDwvZmlsdGVyPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYy0xIgogICAgICAgeDE9Ii0yNi4yMDEiCiAgICAgICB4Mj0iLTI2LjIwMSIKICAgICAgIHkxPSIxMDcwLjIiCiAgICAgICB5Mj0iMTA4Mi42IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjNzhjM2ZkIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNTQzOSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzdiYzZmZiIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDU0NDEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iYi04IgogICAgICAgeDE9Ii05LjkxMTk5OTciCiAgICAgICB4Mj0iLTkuOTExOTk5NyIKICAgICAgIHkxPSIxMDgxLjQiCiAgICAgICB5Mj0iMTEzOS44IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjMzVhNWZjIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNTQ0NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzQ1YzBmZiIKICAgICAgICAgb2Zmc2V0PSIuNSIKICAgICAgICAgaWQ9InN0b3A1NDQ2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjNGRhY2Y2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNTQ0OCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJhLTciCiAgICAgICB4MT0iLTkuNjE2OTk5NiIKICAgICAgIHgyPSItOS42MTY5OTk2IgogICAgICAgeTE9IjExMzguNCIKICAgICAgIHkyPSIxMTQwLjIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3Atb3BhY2l0eT0iLjA0Njc4NCIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDU0NTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A1NDUzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImQtOSIKICAgICAgIHgxPSI4IgogICAgICAgeDI9IjgiCiAgICAgICB5MT0iMiIKICAgICAgIHkyPSIxNCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzAzYjZlYyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI2OTI1IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjMTNjMGY3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjY5MjciIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0iZC0zIgogICAgICAgeDE9IjEwMS4xOCIKICAgICAgIHgyPSIxMDEuMTgiCiAgICAgICB5MT0iOTIxLjQ4OTk5IgogICAgICAgeTI9IjEwMDAuMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4yMjMxNjc5NiwwLDAsMC4yMTcyMDYyNCw4LjMwMjQzMTEsLTE3NC4xMTE0NCkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0b3AtY29sb3I9IiMwM2I2ZWMiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AyOTMwMiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3RvcC1jb2xvcj0iIzEzYzBmNyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDI5MzA0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPGNpcmNsZQogICAgIGlkPSJjaXJjbGUyNDQxNSIKICAgICBzdHlsZT0ib3BhY2l0eTowLjI1O3N0cm9rZS13aWR0aDoxNS45Mzc5OTk3MztwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsO2ZpbHRlcjp1cmwoI2UpIgogICAgIHI9IjQ3OC4xMiIKICAgICBjeT0iNTEyIgogICAgIGN4PSI1MTIiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4wNjI3NDUsMCwwLDAuMDYyNzQ1LC0wLjEyNTQ5LC0wLjEyNTQ5KSIgLz4KICA8ZwogICAgIHN0eWxlPSJzdHJva2Utd2lkdGg6MTUuOTM3OTk5NzMiCiAgICAgdHJhbnNmb3JtPSJzY2FsZSgwLjA2MjQ5OTY3KSIKICAgICBpZD0ic2hhZG93IiAvPgogIDxjaXJjbGUKICAgICBjeD0iMzEuOTk5OTUiCiAgICAgY3k9IjMxLjk5OTk1IgogICAgIHI9IjI5Ljk5OTY0IgogICAgIHN0eWxlPSJmaWxsOnVybCgjYyk7c3Ryb2tlLXdpZHRoOjEuMDAwMDI5ODtwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIgogICAgIGlkPSJjaXJjbGUyNDQxOCIgLz4KICA8ZWxsaXBzZQogICAgIGN4PSIzMS45MTQ0NTUiCiAgICAgY3k9IjMxLjk1MDA0MyIKICAgICBzdHlsZT0iZmlsbDp1cmwoI2QpO3N0cm9rZS13aWR0aDowLjk2NzUyNzAzO3BhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiCiAgICAgaWQ9ImNpcmNsZTI0NDIwIgogICAgIHJ4PSIyNi4yODg0NDEiCiAgICAgcnk9IjI2LjE1MjkzOSIgLz4KICA8ZwogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMTg0NDA1MjUsMCwwLDAuMTg0NDE0MTgsMTMuNDQ3NDEzLDEzLjA3MzQ3NSkiCiAgICAgaWQ9Imc1NDY2Ij4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2MtMSkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4yMTM5LDAsMCwyLjIxMzksMTA5LjUsLTIzNDQuOSkiCiAgICAgICBkPSJtIC00NC43NjIsMTA3MC4yIGggMjIuMTMxIGMgMy4yODcsMCA0LjY1Miw3LjA3MSA3LjcyOCw3LjA3MSBoIDUxLjUyMiBhIDMuMjc2LDMuMjc2IDAgMCAxIDMuMjgzLDMuMjgzIHYgNTAuNTA4IGMgMCwxLjgxOSAtMS40NjQsLTIuMDIgLTMuMjgzLC0yLjAyIGggLTgxLjM4IGEgMy4yNzYsMy4yNzYgMCAwIDEgLTMuMjgzLC0zLjI4MyB2IC01Mi4yNzUgYSAzLjI3NiwzLjI3NiAwIDAgMSAzLjI4MywtMy4yODMgeiIKICAgICAgIGlkPSJwYXRoNTQ1OCIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2ItOCkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4yMTM5LDAsMCwyLjIxMzksMTA5LjUsLTIzNDQuOSkiCiAgICAgICBkPSJtIC00NC43NjIsMTA4MS4zIGggODEuMzggYSAzLjI3NiwzLjI3NiAwIDAgMSAzLjI4MywzLjI4MyB2IDUyLjI3NSBhIDMuMjc2LDMuMjc2IDAgMCAxIC0zLjI4MywzLjI4MyBoIC04MS4zOCBhIDMuMjc2LDMuMjc2IDAgMCAxIC0zLjI4MywtMy4yODMgdiAtNTIuMjc1IGEgMy4yNzYsMy4yNzYgMCAwIDEgMy4yODMsLTMuMjgzIHoiCiAgICAgICBpZD0icGF0aDU0NjAiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGQ9Im0gMy4xNiwxNjUuODQgdiAyLjIxNCBIIDE5Ny44NCBWIDE2NS44NCBIIDMuMTUgWiBtIDAsNC44NyB2IDEuMTc2IGMgMCwwLjM1OSAwLjAxOSwwLjY5NCAwLjA2OCwxLjAzOCBoIDE5NC41NSBjIDAuMDUsLTAuMzQ0IDAuMDY5LC0wLjY3OSAwLjA2OSwtMS4wMzggViAxNzAuNzEgSCAzLjE1NyBaIgogICAgICAgc3R5bGU9InRleHQtaW5kZW50OjA7dGV4dC10cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjAuMDc5OTk5OTgiCiAgICAgICBpZD0icGF0aDU0NjIiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjEzOSwwLDAsMi4yMTM5LDEwOS41LC0yMzQ0LjkpIgogICAgICAgZD0ibSAtNDcuNzUsMTEzOC4yIGEgMy4yOCwzLjI4IDAgMCAwIDMsMS45MzggaCA4MS4zNzUgYyAxLjM0LDAgMi40ODgsLTAuNzkzIDMsLTEuOTM4IHoiCiAgICAgICBzdHlsZT0idGV4dC1pbmRlbnQ6MDt0ZXh0LXRyYW5zZm9ybTpub25lO29wYWNpdHk6MC4yNTtmaWxsOnVybCgjYS03KSIKICAgICAgIGlkPSJwYXRoNTQ2NCIgLz4KICA8L2c+CiAgPHBhdGgKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgIGQ9Im0gMjUuNjQ1NjcsMjYuMDI1NzM2IGEgMC42MDI0NTU0OCwwLjU4NjM1NzU4IDAgMCAwIC0wLjYwMjM4OCwwLjU4NjI5MSB2IDE1LjkwMzMzOSBhIDAuNjAyNDU1NDgsMC41ODYzNTc1OCAwIDAgMCAwLjYwMjM4OCwwLjU4NjI2OSBoIDEyLjEyMzI5NyBhIDAuNjAyNDU1NDgsMC41ODYzNTc1OCAwIDAgMCAwLjYwMjM4OCwtMC41ODYyNjkgViAzMi4yNDYxNTIgbCAtNi4zOTA5MTYsLTYuMjIwMTA1IHogbSAwLjYwMjM4OCwxLjE3MjYwNCBoIDQuMzg4NTI3IGMgMC42ODkzNTQsMC4wNTc5OCAxLjE0NTk1MiwwLjM0NjYwMiAxLjE0NTk1MiwxLjgxMzg2NSB2IDIuODU4MjM1IGggMy4wMzA3MDkgYyAwLjczNzcxLDAgMi4wNjk4ODMsLTAuMDI2NjQgMi4zNTMxNzUsMC43Njk0OTYgdiA5LjI4OTA5NSBIIDI2LjI0Nzk4NiBaIgogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO3RleHQtaW5kZW50OjA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7dGV4dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWw7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2QtMyk7c3Ryb2tlLXdpZHRoOjIuMjU3NDA1MDQ7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG8iCiAgICAgaWQ9InBhdGgyOTMxOSIgLz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"nautilus,file,manager,nautilus\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"org.gnome.Nautilus.desktop\"\nLABEL oc.launch=\"org.gnome.Nautilus.Org.gnome.Nautilus\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"nautilus\"\nLABEL oc.displayname=\"FileManager\"\nLABEL oc.path=\"/usr/bin/nautilus\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"nautilus\"\nENV APPBIN \"/usr/bin/nautilus\"\nENV APP \"/usr/bin/nautilus\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/nautilus/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/nautilus/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/nautilus/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/nautilus/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/notepad-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"notepad.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMjU2IgogICBoZWlnaHQ9IjI1NiIKICAgaWQ9InN2ZzQ3NDIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40NyByMjI1ODMiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im5vdGVwYWQuc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDc0NCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQ3NTAiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQ4MjAiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTM1MiIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1Mzc0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTUzOTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTQzMCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NDUyIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjIiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTU2Mi0zIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjItOCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTYyLTM4IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1NjItNSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTYyLTAiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxwYXR0ZXJuCiAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgd2lkdGg9IjExNC44OTQ2OCIKICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgcGF0dGVyblRyYW5zZm9ybT0idHJhbnNsYXRlKDI4LjAzMzg4Niw5MTQuMzUzODYpIgogICAgICAgaWQ9InBhdHRlcm41NjgwIj4KICAgICAgPGcKICAgICAgICAgaWQ9Imc1NjQ3IgogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjguMDMzODg2LC05MTQuMzUzODYpIj4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDEyNy4xNDI4NiwxMjMuODU3MTQgYyA4LjI1MDc4LDAuMDIzNiAxMy42NDMwNCwzLjQ0MTc0IDE0LjI4NTcxLDEyLjUgbCAtMC4zNTcxNCw4MS43ODU3MiBjIC0wLjY2MzI4LDEyLjA5OCAtNy4xNzQ4OSwxMS45Njc2NSAtMTIuODU3MTQsMTMuNTcxNDMgbCAtNTEuOTY0Mjg5LDAuMTc4NTcgQyA2Ni40MDYyMTYsMjMwLjg1NzI1IDYxLjUwMTAyOCwyMjcuMDA5NjkgNTkuODIxNDI4LDIxNy4yNSBsIDAuODkyODU4LC03OS44MjE0MyBjIDAuNDAwODQxLC01Ljk4MTU2IDIuMjQyOTA2LC0xMC43ODM5NCA3Ljg1NzE0MywtMTIuNSBsIDU4LjU3MTQzMSwtMS4wNzE0MyB6IgogICAgICAgICAgIGlkPSJwYXRoNDgyNiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiCiAgICAgICAgICAgaWQ9InBhdGg0ODMwIgogICAgICAgICAgIGQ9Im0gMTI5LjkyMDc4LDEyNC4xMDk2OCAtMTcuMzg2MTYsODAuMTQzNTggYyAtMi45MzYxMiwxMS41OTI5MyAtOS40NDc3MywxMC40NTI0MiAtMTUuNjM1MDU5LDExLjA0NjA1IGwgLTM3LjAyOTk0MSwtMC4yMDc1NCAwLjg0NDY2NiwtNzcuNjYzMiBjIDAuNDAwODQxLC01Ljk4MTU2IDIuMjQyOTA2LC0xMC43ODM5NCA3Ljg1NzE0MywtMTIuNSBsIDYxLjM0OTM1MSwtMC44MTg4OSB6IgogICAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjYxODAyNTg7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjkuNzAwNTI2LDEwMTUuOTk2NyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjkuMzIxNzE5LDEwMDYuMDIxNCA2MC4zNTY2MTEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDItMiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTYiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Ik0gNjkuMTMyMzE2LDk4NS44ODE1IDEyOS40ODg5Myw5ODUuNjI5IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTEiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDUzNDItMCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2Ny45NjQzMjYsOTY1LjM5NDMzIDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTYiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTYtMSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2Ny43NzQ5MjMsOTQ1LjI1NDQxIDYwLjM1NjYxNywtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTM0Mi0yLTEtNSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzVmZDVkNDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMzcuMTQyODU4LDk5MC41NzY0NyBjIC0xMC44NDI4MTUsLTIuOTU5MzUgLTcuNjkxMTg2LC04Ljg5NzQxIC01LjA2MTI3NiwtMTQuOTgyMDYgTCA1Ni42MTI0LDkyNy45NTM5MiBjIDEuNTM1NTgyLC00LjI0MzI3IDcuNDI3MjYyLC03LjI0OTE1IDExLjI0NDc0MywtNi42NjMxNiBsIDYwLjM1NzE0NywtMC4zNTcxNSBjIDMuNzA5MjcsMC44NjA0OSA4Ljc4Nzc2LDAuODA4MTYgNC4yODU3MSw3LjE0Mjg2IGwgLTI3LjQ1NjY3LDUzLjY5Mzk4IGMgLTEuMDI0MjMsNS44MDg2OSAtNy42NDMyNjMsOC43NjE1MSAtMTEuNDk3MjgyLDguOTEwNjIgbCAtNTYuNDAzMTksLTAuMTA0NiB6IgogICAgICAgICAgIGlkPSJwYXRoNDgyOCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY1LjUzNTk3OSw5MzcuODQ1NTcgNDUuNzEzNzYxLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1MzQyLTktNCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxnCiAgICAgICAgICAgaWQ9Imc1NTUwIj4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1NDY4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1NDY2IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMC40Njg5MDEsMC40NjMxNjA3NSkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTEiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNjI3MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2Ni05IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMS4yMDQ4NTEsMC40NTk0NDM3NCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTkiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMCIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMyNjI3MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2Ni04IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZwogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMi4xMTAzOTksMC43MTE5ODE4OCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTUiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjgtMDkiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjYtNiIKICAgICAgICAgICAgIGQ9Im0gMTIyLjMyMTQzLDEyOC41ODkyOSBjIC03LjAzNjgsLTcuMzIxNDggMy4yNjY3NywtMTMuNzQ3MzQgNC4yODU3MSwtNi4yNSIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM4MzgzODI7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDIuNjgwNDY4LDAuOTIxMTkxMzMpIgogICAgICAgICAgIGlkPSJnNTU1MC01NiI+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi4wNDUxMTI4LDAsMCwxLjQ3MzY4NDIsLTEyNy4zMTgxNSw3MzUuNDIyNCkiCiAgICAgICAgICAgICBkPSJtIDEyMi45ODYwNywxMjguNzgzOTIgYyAwLDAuNjYyNSAtMC4zOTU3MywxLjE5OTU2IC0wLjg4Mzg4LDEuMTk5NTYgLTAuNDg4MTYsMCAtMC44ODM4OSwtMC41MzcwNiAtMC44ODM4OSwtMS4xOTk1NiAwLC0wLjY2MjUgMC4zOTU3MywtMS4xOTk1NiAwLjg4Mzg5LC0xLjE5OTU2IDAuNDg4MTUsMCAwLjg4Mzg4LDAuNTM3MDYgMC44ODM4OCwxLjE5OTU2IHoiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeT0iMS4xOTk1NTYxIgogICAgICAgICAgICAgc29kaXBvZGk6cng9IjAuODgzODgzNDgiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeT0iMTI4Ljc4MzkyIgogICAgICAgICAgICAgc29kaXBvZGk6Y3g9IjEyMi4xMDIxOSIKICAgICAgICAgICAgIGlkPSJwYXRoNTQ2OC0xIgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1NDY2LTEiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1NTUwLTk4Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1NDY4LTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU0NjYtODEiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L3BhdHRlcm4+CiAgICA8cGF0dGVybgogICAgICAgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHdpZHRoPSIxMjQuMjQ4NzYiCiAgICAgICBoZWlnaHQ9IjEyNC4yNDg3NiIKICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InRyYW5zbGF0ZSgyMi4yMjMzNTYsOTA5LjkzMDY2KSIKICAgICAgIGlkPSJwYXR0ZXJuNTg0NCI+CiAgICAgIDxyZWN0CiAgICAgICAgIHk9IjEuMTM2ODY4NGUtMTMiCiAgICAgICAgIHg9IjAiCiAgICAgICAgIGhlaWdodD0iMTI0LjI0ODc2IgogICAgICAgICB3aWR0aD0iMTI0LjI0ODc2IgogICAgICAgICBpZD0icmVjdDU4NDIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0NTcxNCIKICAgICAgICAgeT0iNC40MjMyMTc4IgogICAgICAgICB4PSI1LjgxMDUyOTciCiAgICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgICB3aWR0aD0iMTE0Ljg5NDY4IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpub25lIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzU3NzgiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4yMjMzNTYsLTkwOS45MzA2NikiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMTI3LjE0Mjg2LDEyMy44NTcxNCBjIDguMjUwNzgsMC4wMjM2IDEzLjY0MzA0LDMuNDQxNzQgMTQuMjg1NzEsMTIuNSBsIC0wLjM1NzE0LDgxLjc4NTcyIGMgLTAuNjYzMjgsMTIuMDk4IC03LjE3NDg5LDExLjk2NzY1IC0xMi44NTcxNCwxMy41NzE0MyBsIC01MS45NjQyODksMC4xNzg1NyBDIDY2LjQwNjIxNiwyMzAuODU3MjUgNjEuNTAxMDI4LDIyNy4wMDk2OSA1OS44MjE0MjgsMjE3LjI1IGwgMC44OTI4NTgsLTc5LjgyMTQzIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNTguNTcxNDMxLC0xLjA3MTQzIHoiCiAgICAgICAgICAgaWQ9InBhdGg1NzgwIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIKICAgICAgICAgICBpZD0icGF0aDU3ODIiCiAgICAgICAgICAgZD0ibSAxMjkuOTIwNzgsMTI0LjEwOTY4IC0xNy4zODYxNiw4MC4xNDM1OCBjIC0yLjkzNjEyLDExLjU5MjkzIC05LjQ0NzczLDEwLjQ1MjQyIC0xNS42MzUwNTksMTEuMDQ2MDUgbCAtMzcuMDI5OTQxLC0wLjIwNzU0IDAuODQ0NjY2LC03Ny42NjMyIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNjEuMzQ5MzUxLC0wLjgxODg5IHoiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNjE4MDI1ODtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS43MDA1MjYsMTAxNS45OTY3IDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTc4NCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS4zMjE3MTksMTAwNi4wMjE0IDYwLjM1NjYxMSwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTc4NiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzg4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJNIDY5LjEzMjMxNiw5ODUuODgxNSAxMjkuNDg4OTMsOTg1LjYyOSIKICAgICAgICAgICBpZD0icGF0aDU3OTAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU3OTIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjcuOTY0MzI2LDk2NS4zOTQzMyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU3OTQiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzk2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY3Ljc3NDkyMyw5NDUuMjU0NDEgNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1Nzk4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojNWZkNWQ0O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSAzNy4xNDI4NTgsOTkwLjU3NjQ3IGMgLTEwLjg0MjgxNSwtMi45NTkzNSAtNy42OTExODYsLTguODk3NDEgLTUuMDYxMjc2LC0xNC45ODIwNiBMIDU2LjYxMjQsOTI3Ljk1MzkyIGMgMS41MzU1ODIsLTQuMjQzMjcgNy40MjcyNjIsLTcuMjQ5MTUgMTEuMjQ0NzQzLC02LjY2MzE2IGwgNjAuMzU3MTQ3LC0wLjM1NzE1IGMgMy43MDkyNywwLjg2MDQ5IDguNzg3NzYsMC44MDgxNiA0LjI4NTcxLDcuMTQyODYgbCAtMjcuNDU2NjcsNTMuNjkzOTggYyAtMS4wMjQyMyw1LjgwODY5IC03LjY0MzI2Myw4Ljc2MTUxIC0xMS40OTcyODIsOC45MTA2MiBsIC01Ni40MDMxOSwtMC4xMDQ2IHoiCiAgICAgICAgICAgaWQ9InBhdGg1ODAwIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzE3MTcxODtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjUuNTM1OTc5LDkzNy44NDU1NyA0NS43MTM3NjEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU4MDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1ODA0IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzU4MDYiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MDgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTAiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwLjQ2ODkwMSwwLjQ2MzE2MDc1KSIKICAgICAgICAgICBpZD0iZzU4MTIiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MTYiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIxLjIwNDg1MSwwLjQ1OTQ0Mzc0KSIKICAgICAgICAgICBpZD0iZzU4MTgiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjIiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyLjExMDM5OSwwLjcxMTk4MTg4KSIKICAgICAgICAgICBpZD0iZzU4MjQiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MjgiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjY4MDQ2OCwwLjkyMTE5MTMzKSIKICAgICAgICAgICBpZD0iZzU4MzAiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MzIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU4MzQiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1ODM2Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1ODM4IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1ODQwIgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9wYXR0ZXJuPgogICAgPHBhdHRlcm4KICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB3aWR0aD0iMTI0LjI0ODc2IgogICAgICAgaGVpZ2h0PSIxMjQuMjQ4NzYiCiAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMi4xMDU2OTEyLDAsMCwyLjEwNTY5MTIsLTkuMDkxMzcyOSw3OTMuNzYzMTEpIgogICAgICAgaWQ9InBhdHRlcm41OTUwIj4KICAgICAgPHJlY3QKICAgICAgICAgaWQ9InJlY3Q1ODgwIgogICAgICAgICB5PSIxLjEzNjg2ODRlLTEzIgogICAgICAgICB4PSIwIgogICAgICAgICBoZWlnaHQ9IjEyNC4yNDg3NiIKICAgICAgICAgd2lkdGg9IjEyNC4yNDg3NiIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6bm9uZSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgeT0iMS4xMzY4Njg0ZS0xMyIKICAgICAgICAgeD0iMCIKICAgICAgICAgaGVpZ2h0PSIxMjQuMjQ4NzYiCiAgICAgICAgIHdpZHRoPSIxMjQuMjQ4NzYiCiAgICAgICAgIGlkPSJyZWN0NTg4MiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0NTg4NCIKICAgICAgICAgeT0iNC40MjMyMTc4IgogICAgICAgICB4PSI1LjgxMDUyOTciCiAgICAgICAgIGhlaWdodD0iMTE1LjQwMTE4IgogICAgICAgICB3aWR0aD0iMTE0Ljg5NDY4IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpub25lIiAvPgogICAgICA8ZwogICAgICAgICBpZD0iZzU4ODYiCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMi4yMjMzNTYsLTkwOS45MzA2NikiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gMTI3LjE0Mjg2LDEyMy44NTcxNCBjIDguMjUwNzgsMC4wMjM2IDEzLjY0MzA0LDMuNDQxNzQgMTQuMjg1NzEsMTIuNSBsIC0wLjM1NzE0LDgxLjc4NTcyIGMgLTAuNjYzMjgsMTIuMDk4IC03LjE3NDg5LDExLjk2NzY1IC0xMi44NTcxNCwxMy41NzE0MyBsIC01MS45NjQyODksMC4xNzg1NyBDIDY2LjQwNjIxNiwyMzAuODU3MjUgNjEuNTAxMDI4LDIyNy4wMDk2OSA1OS44MjE0MjgsMjE3LjI1IGwgMC44OTI4NTgsLTc5LjgyMTQzIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNTguNTcxNDMxLC0xLjA3MTQzIHoiCiAgICAgICAgICAgaWQ9InBhdGg1ODg4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsNzk2LjM2MjE4KSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjYyIKICAgICAgICAgICBpZD0icGF0aDU4OTAiCiAgICAgICAgICAgZD0ibSAxMjkuOTIwNzgsMTI0LjEwOTY4IC0xNy4zODYxNiw4MC4xNDM1OCBjIC0yLjkzNjEyLDExLjU5MjkzIC05LjQ0NzczLDEwLjQ1MjQyIC0xNS42MzUwNTksMTEuMDQ2MDUgbCAtMzcuMDI5OTQxLC0wLjIwNzU0IDAuODQ0NjY2LC03Ny42NjMyIGMgMC40MDA4NDEsLTUuOTgxNTYgMi4yNDI5MDYsLTEwLjc4Mzk0IDcuODU3MTQzLC0xMi41IGwgNjEuMzQ5MzUxLC0wLjgxODg5IHoiCiAgICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC4yNjE4MDI1ODtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS43MDA1MjYsMTAxNS45OTY3IDYwLjM1NjYxNCwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTg5MiIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS4zMjE3MTksMTAwNi4wMjE0IDYwLjM1NjYxMSwtMC4yNTI1IgogICAgICAgICAgIGlkPSJwYXRoNTg5NCIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzY0NjQ2NDtzdHJva2Utd2lkdGg6Mi41O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSA2OS41MTExMjMsOTk1Ljg1NjggNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1ODk2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJNIDY5LjEzMjMxNiw5ODUuODgxNSAxMjkuNDg4OTMsOTg1LjYyOSIKICAgICAgICAgICBpZD0icGF0aDU4OTgiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMzQzMTMzLDk3NS4zNjk2MyA2MC4zNTY2MTcsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MDAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjcuOTY0MzI2LDk2NS4zOTQzMyA2MC4zNTY2MTQsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MDIiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM2NDY0NjQ7c3Ryb2tlLXdpZHRoOjIuNTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjguMTUzNzMsOTU1LjIyOTcxIDYwLjM1NjYyLC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTA0IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNjQ2NDY0O3N0cm9rZS13aWR0aDoyLjU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDY3Ljc3NDkyMyw5NDUuMjU0NDEgNjAuMzU2NjE3LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTA2IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzdHlsZT0iZmlsbDojNWZkNWQ0O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiCiAgICAgICAgICAgZD0ibSAzNy4xNDI4NTgsOTkwLjU3NjQ3IGMgLTEwLjg0MjgxNSwtMi45NTkzNSAtNy42OTExODYsLTguODk3NDEgLTUuMDYxMjc2LC0xNC45ODIwNiBMIDU2LjYxMjQsOTI3Ljk1MzkyIGMgMS41MzU1ODIsLTQuMjQzMjcgNy40MjcyNjIsLTcuMjQ5MTUgMTEuMjQ0NzQzLC02LjY2MzE2IGwgNjAuMzU3MTQ3LC0wLjM1NzE1IGMgMy43MDkyNywwLjg2MDQ5IDguNzg3NzYsMC44MDgxNiA0LjI4NTcxLDcuMTQyODYgbCAtMjcuNDU2NjcsNTMuNjkzOTggYyAtMS4wMjQyMyw1LjgwODY5IC03LjY0MzI2Myw4Ljc2MTUxIC0xMS40OTcyODIsOC45MTA2MiBsIC01Ni40MDMxOSwtMC4xMDQ2IHoiCiAgICAgICAgICAgaWQ9InBhdGg1OTA4IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzE3MTcxODtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIgogICAgICAgICAgIGQ9Im0gNjUuNTM1OTc5LDkzNy44NDU1NyA0NS43MTM3NjEsLTAuMjUyNSIKICAgICAgICAgICBpZD0icGF0aDU5MTAiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMxNzE3MTg7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgICAgICBkPSJtIDU4LjkyODgzNCw5NDYuNDE3MDEgNDUuNzEzNzY2LC0wLjI1MjUiCiAgICAgICAgICAgaWQ9InBhdGg1OTEyIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgICAgPGcKICAgICAgICAgICBpZD0iZzU5MTQiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MTYiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MTgiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwLjQ2ODkwMSwwLjQ2MzE2MDc1KSIKICAgICAgICAgICBpZD0iZzU5MjAiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjIiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjQiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIxLjIwNDg1MSwwLjQ1OTQ0Mzc0KSIKICAgICAgICAgICBpZD0iZzU5MjYiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MjgiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzAiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMyLjExMDM5OSwwLjcxMTk4MTg4KSIKICAgICAgICAgICBpZD0iZzU5MzIiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzQiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5MzYiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQyLjY4MDQ2OCwwLjkyMTE5MTMzKSIKICAgICAgICAgICBpZD0iZzU5MzgiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMDQ1MTEyOCwwLDAsMS40NzM2ODQyLC0xMjcuMzE4MTUsNzM1LjQyMjQpIgogICAgICAgICAgICAgZD0ibSAxMjIuOTg2MDcsMTI4Ljc4MzkyIGMgMCwwLjY2MjUgLTAuMzk1NzMsMS4xOTk1NiAtMC44ODM4OCwxLjE5OTU2IC0wLjQ4ODE2LDAgLTAuODgzODksLTAuNTM3MDYgLTAuODgzODksLTEuMTk5NTYgMCwtMC42NjI1IDAuMzk1NzMsLTEuMTk5NTYgMC44ODM4OSwtMS4xOTk1NiAwLjQ4ODE1LDAgMC44ODM4OCwwLjUzNzA2IDAuODgzODgsMS4xOTk1NiB6IgogICAgICAgICAgICAgc29kaXBvZGk6cnk9IjEuMTk5NTU2MSIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ4PSIwLjg4Mzg4MzQ4IgogICAgICAgICAgICAgc29kaXBvZGk6Y3k9IjEyOC43ODM5MiIKICAgICAgICAgICAgIHNvZGlwb2RpOmN4PSIxMjIuMTAyMTkiCiAgICAgICAgICAgICBpZD0icGF0aDU5NDAiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMjYyNzJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDc5Ni4zNjIxOCkiCiAgICAgICAgICAgICBpZD0icGF0aDU5NDIiCiAgICAgICAgICAgICBkPSJtIDEyMi4zMjE0MywxMjguNTg5MjkgYyAtNy4wMzY4LC03LjMyMTQ4IDMuMjY2NzcsLTEzLjc0NzM0IDQuMjg1NzEsLTYuMjUiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojODM4MzgyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTU0LjA5NDgxLDEuMDQ3NDYwNCkiCiAgICAgICAgICAgaWQ9Imc1OTQ0Ij4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjA0NTExMjgsMCwwLDEuNDczNjg0MiwtMTI3LjMxODE1LDczNS40MjI0KSIKICAgICAgICAgICAgIGQ9Im0gMTIyLjk4NjA3LDEyOC43ODM5MiBjIDAsMC42NjI1IC0wLjM5NTczLDEuMTk5NTYgLTAuODgzODgsMS4xOTk1NiAtMC40ODgxNiwwIC0wLjg4Mzg5LC0wLjUzNzA2IC0wLjg4Mzg5LC0xLjE5OTU2IDAsLTAuNjYyNSAwLjM5NTczLC0xLjE5OTU2IDAuODgzODksLTEuMTk5NTYgMC40ODgxNSwwIDAuODgzODgsMC41MzcwNiAwLjg4Mzg4LDEuMTk5NTYgeiIKICAgICAgICAgICAgIHNvZGlwb2RpOnJ5PSIxLjE5OTU1NjEiCiAgICAgICAgICAgICBzb2RpcG9kaTpyeD0iMC44ODM4ODM0OCIKICAgICAgICAgICAgIHNvZGlwb2RpOmN5PSIxMjguNzgzOTIiCiAgICAgICAgICAgICBzb2RpcG9kaTpjeD0iMTIyLjEwMjE5IgogICAgICAgICAgICAgaWQ9InBhdGg1OTQ2IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6IzI2MjcyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw3OTYuMzYyMTgpIgogICAgICAgICAgICAgaWQ9InBhdGg1OTQ4IgogICAgICAgICAgICAgZD0ibSAxMjIuMzIxNDMsMTI4LjU4OTI5IGMgLTcuMDM2OCwtNy4zMjE0OCAzLjI2Njc3LC0xMy43NDczNCA0LjI4NTcxLC02LjI1IgogICAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgzODM4MjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9wYXR0ZXJuPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMC45ODk5NDk0OSIKICAgICBpbmtzY2FwZTpjeD0iMTA0Ljk4MzQ4IgogICAgIGlua3NjYXBlOmN5PSIxMjkuNDQ4MzgiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI4NTEiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjU3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIzMTIiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE0NzQ3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC03OTYuMzYyMTgpIj4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3BhdHRlcm41OTUwKTtzdHJva2U6bm9uZSIKICAgICAgIHdpZHRoPSIyNjEuNjI5NTIiCiAgICAgICBoZWlnaHQ9IjI2MS42Mjk1MiIKICAgICAgIHg9Ii05LjA5MTM3MjUiCiAgICAgICB5PSI3OTMuNzYzMTIiCiAgICAgICBpZD0icmVjdDU5ODciIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"notepad-wine,wine,notepad,text\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"notepad.exe.notepad.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"notepad-wine\"\nLABEL oc.displayname=\"Notepad Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/notepad\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/text;\"\nLABEL oc.fileextensions=\"txt;log;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"notepad-wine\"\nENV APPBIN \"/usr/bin/notepad\"\nENV APP \"/usr/bin/notepad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/notepad-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/notepad-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/notepad-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/notepad-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends notepadqq && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"notepadqq.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzIiCiAgIHZpZXdCb3g9IjAgMCAxOTIgMTkxLjk5OTk5IgogICBoZWlnaHQ9IjE5MiIKICAgd2lkdGg9IjE5MiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0Mjk2Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0Mjk4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2NDY0NjQ7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNDMwMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjQ2NDY0O3N0b3Atb3BhY2l0eTowIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9Ik9tYnJhXzEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDI4NCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDQyODYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00LjAwMDAwNTYsLTIuOTY4NzUpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMTAzNi41NzkzIgogICAgICAgeDI9Ijk4LjM2MzQ4IgogICAgICAgeTE9Ijk5OS4zMjk0MSIKICAgICAgIHgxPSI1OS4xMjUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MjgwIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDI5NiIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDcuNjIyMTgyNmUtOCwxLjMzODA2MzQsLTEuNzExOTA1NCw5Ljc1MTc0NjhlLTgsLTI1Ny4xMjQxNSw4MjkuMjczNDQpIgogICAgICAgcj0iNjUuMDAwMDA4IgogICAgICAgZnk9Ii0xNjYuMTk2MTciCiAgICAgICBmeD0iMjguNzI2MDEzIgogICAgICAgY3k9Ii0xNjYuMTk2MTciCiAgICAgICBjeD0iMjguNzI2MDEzIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDE5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNPbWJyYV8xIiAvPgogICAgPGZpbHRlcgogICAgICAgeD0iLTAuMDUwMDAwMDAwMDAwMDAwMDAzIgogICAgICAgd2lkdGg9IjEuMTAwMDAwMDAwMDAwMDAwMSIKICAgICAgIHk9Ii0wLjAyOTk5OTk5OTk5OTk5OTk5OSIKICAgICAgIGhlaWdodD0iMS4wNjAwMDAwMDAwMDAwMDAxIgogICAgICAgaWQ9ImZpbHRlcjQ2NTMiCiAgICAgICBzdHlsZT0iY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzOnNSR0I7Ij4KICAgICAgPGZlRmxvb2QKICAgICAgICAgaWQ9ImZlRmxvb2Q0NjU1IgogICAgICAgICByZXN1bHQ9ImZsb29kIgogICAgICAgICBmbG9vZC1jb2xvcj0icmdiKDAsMCwwKSIKICAgICAgICAgZmxvb2Qtb3BhY2l0eT0iMC40NTAwMDAwMDAwMDAwMDAwMSIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGlkPSJmZUNvbXBvc2l0ZTQ2NTciCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMSIKICAgICAgICAgb3BlcmF0b3I9ImluIgogICAgICAgICBpbjI9IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluPSJmbG9vZCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIGR5PSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0NjU5IgogICAgICAgICByZXN1bHQ9ImJsdXIiCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMSAxLjUiCiAgICAgICAgIGluPSJjb21wb3NpdGUxIiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgaWQ9ImZlT2Zmc2V0NDY2MSIKICAgICAgICAgcmVzdWx0PSJvZmZzZXQiCiAgICAgICAgIGR5PSIzIgogICAgICAgICBkeD0iMCIgLz4KICAgICAgPGZlQ29tcG9zaXRlCiAgICAgICAgIGlkPSJmZUNvbXBvc2l0ZTQ2NjMiCiAgICAgICAgIHJlc3VsdD0iY29tcG9zaXRlMiIKICAgICAgICAgb3BlcmF0b3I9Im92ZXIiCiAgICAgICAgIGluMj0ib2Zmc2V0IgogICAgICAgICBpbj0iU291cmNlR3JhcGhpYyIgLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC04NjAuMzYyMikiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtNC00IgogICAgICAgZD0ibSAxMzYsODY3LjM2MDIzIHYgMC4wMDQgaCAtNjQuNjU4MTgxIC0zMy4zMTA1NSAtNS4zNzEwOSBjIC0yLjU3MjcsMCAtNC42NDQ1NCwyLjA2NjE5IC00LjY0NDU0LDQuNjMyODIgdiAzNi41OTc2NSBjIDAsMC4wMzI3IDAuMDA1OCwwLjA2NDIgMC4wMDk4LDAuMDk1NyBsIC0wLjAwMiwxNC42NzE4NyBoIC0wLjAyMzQ0IHYgOSAxIDEwIDM1IDEgMSA2Ljg1OTM4IDEuMTQwNjIgMSBoIDAuMDA5OCB2IDAuMDAyIGwgLTAuMDAzOSwxOS43NDYwMyBoIC0wLjAwNTkgdiAwIDMxLjY4NzUgYyAwLDIuNTI4OSAyLjA0OTAxLDQuNTY0NCA0LjU5Mzc1LDQuNTY0NCBoIDUuNDUzMTMgMzMuMzMyMDMgNzIuNTY2MzgxIGMgMS4zODgwOSwwIDIuNzQzNTMsLTAuMTQ3NCA0LjA1MDc4LC0wLjQyNTcgMC4zMjY5NiwtMC4wNyAwLjY1MTc5LC0wLjE0NjUgMC45NzI2NiwtMC4yMzI1IDAuNjQxMTMsLTAuMTcxNyAxLjI3MDQzLC0wLjM3NjkgMS44ODQ3NywtMC42MTEzIDAuMzA3NDQsLTAuMTE3MyAwLjYxMTk5LC0wLjI0MjYgMC45MTIxLC0wLjM3NSA0LjIwMTUxLC0xLjg1MyA3LjY2NDI1LC01LjE1NzggOS44MjAzMiwtOS4zMjAzIDAuNjE2MDIsLTEuMTg5MyAxLjEyNjE1LC0yLjQ0ODIgMS41MTU2MiwtMy43NjM3IDAuNTg0MjEsLTEuOTczMiAwLjg5ODQ0LC02LjI1MTkgMC44OTg0NCwtNi4yNTE5IHYgLTEuMTQ2NSAtMTQuMTI3IC0yMC43NDc5OCAtOCAtMSAtNDYgLTEgLTcuODYxMzMgLTEuMTM4NjcgLTMzLjg3MzA1IGMgMCwtMC4yMjQzNyAtMC4wMDksLTAuNDQ3MjcgLTAuMDE1NiwtMC42Njk5MiB2IC0wLjAwMiAtMC4zOTI1OCBjIDAsLTIuMTg3NiAtMC4zMTQyMywtNC4yOTY1NiAtMC44OTg0NCwtNi4yNzczNCAtMC4zODk0NywtMS4zMjA1MiAtMC44OTk2MSwtMi41ODM1MSAtMS41MTU2MywtMy43NzczNSAtMi4zMTAzNiwtNC40Nzc0NCAtNi4xMjAwNCwtNy45NjU5OCAtMTAuNzMyNDIsLTkuNzMyNDIgLTAuMzA3NDUsLTAuMTE3NzggLTAuNjE3MjgsLTAuMjI3ODIgLTAuOTMxNjQsLTAuMzMwMDggLTAuNjI5MzIsLTAuMjA0NyAtMS4yNzEyMiwtMC4zNzc2OSAtMS45MjU3OCwtMC41MTc1OCAtMC4zMjY5NiwtMC4wNjk5IC0wLjY1NTY0LC0wLjEzMjQ2IC0wLjk4ODI4LC0wLjE4NTU0IC0wLjk3NTMxLC0wLjE1NTY0IC0xLjk3NTA2LC0wLjIzNDYzIC0yLjk5MjE5LC0wLjIzODI4IHYgLTAuMDA2IGggLTggeiIKICAgICAgIHN0eWxlPSJmaWxsOiM2NDY0NjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjE7ZmlsdGVyOnVybCgjZmlsdGVyNDY1MykiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtNCIKICAgICAgIGQ9Im0gMjguMDAwMDI0LDEwMDkuMTExNiB2IDMxLjY4ODEgYyAwLDIuNTI4OSAyLjA0ODE1LDQuNTY0NSA0LjU5Mjg5LDQuNTY0NSBoIDUuNDUzNyAzMy4zMzEyMSA3Mi41NjgwOTYgYyAxMS4xMSwwIDIwLjA1NDE0LC0yMC45Nzk5IDIwLjA1NDE0LC0yMC45Nzk5IHYgLTE1LjI3MjcgeiIKICAgICAgIHN0eWxlPSJmaWxsOiM2NDY0NjQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cGF0aAogICAgICAgaWQ9InJlY3Q0MTM2LTQtMy0zIgogICAgICAgZD0ibSAzMi42NTkyNTksODY3LjM2NDE4IGMgLTIuNTcyNywwIC00LjY0MzY0LDIuMDY2MDggLTQuNjQzNjQsNC42MzI3MSB2IDM2LjU5ODIxIGMgMCwwLjA1IDAuMDA5LDAuMDk3IDAuMDEzNywwLjE0NiBIIDE2My45ODQwOCB2IC0yMC4zMTY1NSBjIDAsLTExLjY2NzIgLTguOTQ0MTcsLTIxLjA2MDM3IC0yMC4wNTQxOCwtMjEuMDYwMzcgaCAtNzIuNTg5MTcxIC0zMy4zMDk3NCAtNS4zNzE3MiB6IgogICAgICAgc3R5bGU9ImZpbGw6IzkxOTE5MTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBpZD0icmVjdDQxMzYtNDAiCiAgICAgICBkPSJtIDMyLjY3NDg3NCw4NjguMzY2NzkgYyAtMi41NzI2OSwwIC00LjY0MzY1LDIuMDcyMTMgLTQuNjQzNjUsNC42NDYzIGwgLTAuMDMxMiwxNjYuNzUxODEgYyAwLDIuNTQ2MSAyLjA0ODE2LDQuNTk1NSA0LjU5MjksNC41OTU1IGggNS40NTM3IDMzLjMzMTIxIDcyLjU2ODA4NiBjIDExLjExLDAgMjAuMDU0MTQsLTkuNDIwOCAyMC4wNTQxNCwtMjEuMTIyMyBWIDg4OS40ODkwMSBjIDAsLTExLjcwMTQ2IC04Ljk0NDE0LC0yMS4xMjIyMiAtMjAuMDU0MTQsLTIxLjEyMjIyIGggLTcyLjU4OTU1NiAtMzMuMzA5NzQgLTUuMzcxNzIgeiIKICAgICAgIHN0eWxlPSJmaWxsOiM3NTc1NzU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5MTkuNTAyNTYiCiAgICAgICB4PSIyNy45OTk5OTgiCiAgICAgICBoZWlnaHQ9IjYzLjg1OTYzOCIKICAgICAgIHdpZHRoPSIxMzUuOTk5OTgiCiAgICAgICBpZD0icmVjdDQxNjctMS0zIgogICAgICAgc3R5bGU9ImZpbGw6IzcwYmY3MztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPHBhdGgKICAgICAgIG1hc2s9Im5vbmUiCiAgICAgICBjbGlwLXBhdGg9Im5vbmUiCiAgICAgICBpZD0icmVjdDQxMzYtNDAtOSIKICAgICAgIGQ9Im0gMjguMDA3NzgzLDk5My4zNjE1NyA1MS41ODc4MTMsNTAuOTk3NTMgaCA2NC4zMzgwNTQgYyA0LjE0ODgyLDAgNy45OTU3MywtMS4zMTQ3IDExLjE4NzUsLTMuNTcwMyBsIDUuNzA3MDMsLTYuMTcxOSBjIDEuOTkxOTksLTMuMjgyNyAzLjE2MDE1LC03LjE3OTggMy4xNjAxNSwtMTEuMzgwOCBsIDhlLTUsLTI5Ljg3NDUzIGggLTAuMDA4IC0xMzUuOTcyODE3IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDI4MCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5NDcuMzYyMTgiCiAgICAgICB4PSIyNy45OTk5OTgiCiAgICAgICBoZWlnaHQ9IjQ2IgogICAgICAgd2lkdGg9IjEzNS45OTk5OCIKICAgICAgIGlkPSJyZWN0NDE2Ny0xLTEiCiAgICAgICBzdHlsZT0iZmlsbDojNDQ5NjRiO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8cmVjdAogICAgICAgcnk9IjAiCiAgICAgICB5PSI5MjAuMzYyMTgiCiAgICAgICB4PSIyOC4wMDAwMDYiCiAgICAgICBoZWlnaHQ9IjcxLjk5OTk5MiIKICAgICAgIHdpZHRoPSIxMzUuOTk5OTgiCiAgICAgICBpZD0icmVjdDQxNjctMSIKICAgICAgIHN0eWxlPSJmaWxsOiM0Y2FmNTA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgIDxyZWN0CiAgICAgICB5PSI4NjcuMzYxODIiCiAgICAgICB4PSIxMzYiCiAgICAgICBoZWlnaHQ9IjE3OC4wMDA3MyIKICAgICAgIHdpZHRoPSI4IgogICAgICAgaWQ9InJlY3Q0MzA3LTUiCiAgICAgICBzdHlsZT0iZmlsbDojNDI0MjQyO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgPC9nPgogIDxnCiAgICAgc3R5bGU9ImRpc3BsYXk6bm9uZSIKICAgICBpZD0ibGF5ZXIyIj4KICAgIDx0ZXh0CiAgICAgICBpZD0idGV4dDQzMDMtMCIKICAgICAgIHk9Ijk2OC40NDgxMiIKICAgICAgIHg9IjQ3LjcyNDYwOSIKICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2xpbmUtaGVpZ2h0OjAlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB4bWw6c3BhY2U9InByZXNlcnZlIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtODYwLjM2MjIpIj48dHNwYW4KICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjQ1cHg7bGluZS1oZWlnaHQ6MS4yNTtmb250LWZhbWlseTpWZXJkYW5hOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246VmVyZGFuYTtsZXR0ZXItc3BhY2luZzowcHg7ZmlsbDojZTBlMGUwO2ZpbGwtb3BhY2l0eToxIgogICAgICAgICB5PSI5NjguNDQ4MTIiCiAgICAgICAgIHg9IjQ3LjcyNDYwOSIKICAgICAgICAgaWQ9InRzcGFuNDMwNS04Ij5ucXE8L3RzcGFuPjwvdGV4dD4KICA8L2c+CiAgPGcKICAgICBpZD0iZzUzMTYiCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KICAgIDxnCiAgICAgICBpZD0idGV4dDUzMTQiCiAgICAgICBzdHlsZT0iZm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDtmb250LXNpemU6NDBweDtsaW5lLWhlaWdodDoxMjUlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC04NjAuMzYyMikiCiAgICAgICBhcmlhLWxhYmVsPSJucXEiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDUzMTgiCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0NXB4O2ZvbnQtZmFtaWx5OlZlcmRhbmE7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpWZXJkYW5hO2xldHRlci1zcGFjaW5nOjBweDtmaWxsOiNlMGUwZTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNzIuMzEyMDEyLDk2OC40NDgxMiBoIC00LjEzMDg2IHYgLTEzLjk3NDYxIHEgMCwtMS42OTE4OSAtMC4xOTc3NTQsLTMuMTY0MDYgLTAuMTk3NzUzLC0xLjQ5NDE0IC0wLjcyNTA5NywtMi4zMjkxIC0wLjU0OTMxNywtMC45MjI4NSAtMS41ODIwMzEsLTEuMzYyMzEgLTEuMDMyNzE1LC0wLjQ2MTQyIC0yLjY4MDY2NSwtMC40NjE0MiAtMS42OTE4OTQsMCAtMy41Mzc1OTcsMC44MzQ5NiAtMS44NDU3MDMsMC44MzQ5NiAtMy41Mzc1OTgsMi4xMzEzNCB2IDE4LjMyNTIgaCAtNC4xMzA4NTkgdiAtMjQuNTQzNDYgaCA0LjEzMDg1OSB2IDIuNzI0NjEgcSAxLjkzMzU5NCwtMS42MDQgMy45OTkwMjQsLTIuNTA0ODggMi4wNjU0MjksLTAuOTAwODggNC4yNDA3MjIsLTAuOTAwODggMy45NzcwNTEsMCA2LjA2NDQ1MywyLjM5NTAyIDIuMDg3NDAzLDIuMzk1MDIgMi4wODc0MDMsNi44OTk0MSB6IiAvPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDUzMjAiCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTo0NXB4O2ZvbnQtZmFtaWx5OlZlcmRhbmE7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpWZXJkYW5hO2xldHRlci1zcGFjaW5nOjBweDtmaWxsOiNlMGUwZTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gMTAwLjE3MzM0LDk3Ny41MDA4NSBoIC00LjEzMDg2IHYgLTExLjgyMTI4IHEgLTEuOTExNjIxLDEuNjQ3OTQgLTMuODAxMjY5LDIuNDYwOTMgLTEuODg5NjQ5LDAuNzkxMDIgLTQuMDg2OTE0LDAuNzkxMDIgLTQuMzcyNTU5LDAgLTYuOTg3MzA1LC0zLjM2MTgyIC0yLjU5Mjc3MywtMy4zODM3OSAtMi41OTI3NzMsLTkuMzE2NCAwLC0zLjE2NDA3IDAuOTAwODc5LC01LjU4MTA2IDAuOTIyODUxLC0yLjQzODk2IDIuNDE2OTkyLC00LjA4NjkxIDEuNDUwMTk1LC0xLjYwNDAxIDMuNDA1NzYyLC0yLjQ4MjkxIDEuOTU1NTY2LC0wLjg3ODkxIDQuMTMwODU5LC0wLjg3ODkxIDEuOTc3NTM5LDAgMy40OTM2NTIsMC40Mzk0NSAxLjUzODA4NiwwLjQzOTQ2IDMuMTIwMTE3LDEuMjk2MzkgbCAwLjI2MzY3MiwtMS4wNTQ2OSBoIDMuODY3MTg4IHogbSAtNC4xMzA4NiwtMTUuMjkyOTYgdiAtMTMuODg2NzIgcSAtMS43MTM4NjcsLTAuNzY5MDUgLTMuMDMyMjI2LC0xLjA3NjY2IC0xLjMxODM1OSwtMC4zMDc2MiAtMi44NTY0NDUsLTAuMzA3NjIgLTMuNTgxNTQzLDAgLTUuNDQ5MjE5LDIuNDM4OTYgLTEuODY3Njc2LDIuNDE3IC0xLjg2NzY3Niw2LjY3OTY5IDAsNC4zMDY2NCAxLjQ5NDE0MSw2LjYzNTc0IDEuNTE2MTEzLDIuMzA3MTMgNC43NDYwOTMsMi4zMDcxMyAxLjgwMTc1OCwwIDMuNjAzNTE2LC0wLjc2OTA0IDEuODAxNzU4LC0wLjc5MTAyIDMuMzYxODE2LC0yLjAyMTQ4IHoiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoNTMyMiIKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOjQ1cHg7Zm9udC1mYW1pbHk6VmVyZGFuYTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOlZlcmRhbmE7bGV0dGVyLXNwYWNpbmc6MHB4O2ZpbGw6I2UwZTBlMDtmaWxsLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSAxMjguMjEwNDUsOTc3LjUwMDg1IGggLTQuMTMwODYgdiAtMTEuODIxMjggcSAtMS45MTE2MiwxLjY0Nzk0IC0zLjgwMTI3LDIuNDYwOTMgLTEuODg5NjUsMC43OTEwMiAtNC4wODY5MSwwLjc5MTAyIC00LjM3MjU2LDAgLTYuOTg3MzEsLTMuMzYxODIgLTIuNTkyNzcsLTMuMzgzNzkgLTIuNTkyNzcsLTkuMzE2NCAwLC0zLjE2NDA3IDAuOTAwODgsLTUuNTgxMDYgMC45MjI4NSwtMi40Mzg5NiAyLjQxNjk5LC00LjA4NjkxIDEuNDUwMTksLTEuNjA0MDEgMy40MDU3NiwtMi40ODI5MSAxLjk1NTU3LC0wLjg3ODkxIDQuMTMwODYsLTAuODc4OTEgMS45Nzc1NCwwIDMuNDkzNjUsMC40Mzk0NSAxLjUzODA5LDAuNDM5NDYgMy4xMjAxMiwxLjI5NjM5IGwgMC4yNjM2NywtMS4wNTQ2OSBoIDMuODY3MTkgeiBtIC00LjEzMDg2LC0xNS4yOTI5NiB2IC0xMy44ODY3MiBxIC0xLjcxMzg3LC0wLjc2OTA1IC0zLjAzMjIzLC0xLjA3NjY2IC0xLjMxODM2LC0wLjMwNzYyIC0yLjg1NjQ0LC0wLjMwNzYyIC0zLjU4MTU0LDAgLTUuNDQ5MjIsMi40Mzg5NiAtMS44Njc2OCwyLjQxNyAtMS44Njc2OCw2LjY3OTY5IDAsNC4zMDY2NCAxLjQ5NDE0LDYuNjM1NzQgMS41MTYxMiwyLjMwNzEzIDQuNzQ2MSwyLjMwNzEzIDEuODAxNzYsMCAzLjYwMzUxLC0wLjc2OTA0IDEuODAxNzYsLTAuNzkxMDIgMy4zNjE4MiwtMi4wMjE0OCB6IiAvPgogICAgPC9nPgogIDwvZz4KICA8ZwogICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZSIKICAgICBpZD0ibGF5ZXIzIj4KICAgIDxwYXRoCiAgICAgICBpZD0icmVjdDQxMzYtNC00LTUiCiAgICAgICBkPSJtIDMyLjY2MDAyNCw4NjcuMzY0MTcgYyAtMi41NzI3LDAgLTQuNjQ0NTMsMi4wNjYxOCAtNC42NDQ1Myw0LjYzMjgxIHYgMzYuNTk3NjYgYyAwLDAuMDMyNyAwLjAwNiwwLjA2NDIgMC4wMSwwLjA5NTcgbCAtMC4wMDQsMjMuNjcxODggaCAtMC4wMjE1IHYgMSA0NSAxIDEgaCAwLjAxMTczIGwgLTAuMDA2LDI4Ljc0OTk4IGggLTAuMDA2IHYgMzEuNjg3NSBjIDAsMi41Mjg5IDIuMDQ5LDQuNTY0NSA0LjU5Mzc0LDQuNTY0NSBoIDUuNDUzMTUgMzMuMzMyMDIgNzIuNTY2Njc2IGMgMTEuMTEsMCAyMC4wNTQ2OCwtMjAuOTgwNSAyMC4wNTQ2OCwtMjAuOTgwNSB2IC0xLjE0NjUgLTQyLjg3NDk4IGggMi44ZS00IHYgLTEgLTQ2IC0xIGggLTIuOGUtNCB2IC00Mi44NzMwNSBjIDAsLTAuMjI0NzcgLTAuMDA5LC0wLjQ0Njg4IC0wLjAxNTYsLTAuNjY5OTIgdiAtMC4zOTQ1MyBjIDAsLTExLjY2NzIgLTguOTQ0NjgsLTIxLjA2MDU1IC0yMC4wNTQ2OSwtMjEuMDYwNTUgaCAtNzIuNTg4MTY2IC0zMy4zMTA1NSAtNS4zNzEwOCB6IgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtODYwLjM2MjIpIiAvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"notepadqq,notepad,plus,editor\"\nLABEL oc.cat=\"utilities,development\"\nLABEL oc.desktopfile=\"notepadqq.desktop\"\nLABEL oc.launch=\"notepadqq-bin.Notepadqq\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"notepadqq\"\nLABEL oc.displayname=\"notepadqq\"\nLABEL oc.path=\"/usr/bin/notepadqq\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/plain;text/html;text/x-php;text/x-c;text/x-shellscript;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"512M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"notepadqq\"\nENV APPBIN \"/usr/bin/notepadqq\"\nENV APP \"/usr/bin/notepadqq\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/notepadqq/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/notepadqq/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/notepadqq/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/notepadqq/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends octave && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"Gnu-octave-logo.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iMjgzLjI4OTEyIgogICBoZWlnaHQ9IjI4My4yODgzMyIKICAgaWQ9InN2ZzI4NzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDcgcjIyNTgzIgogICBzb2RpcG9kaTpkb2NuYW1lPSJkcmF3aW5nLnN2ZyI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMjk0MiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI2NDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNDgzIgogICAgIGlkPSJuYW1lZHZpZXcyOTQwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIwLjIyNDI1NzM5IgogICAgIGlua3NjYXBlOmN4PSIxMzguNjkxOCIKICAgICBpbmtzY2FwZTpjeT0iMTQ3LjgyNTI1IgogICAgIGlua3NjYXBlOndpbmRvdy14PSI2NDgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjE0NCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzI4NzIiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczI4NzQiPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iMTgyLjk4MzciCiAgICAgICBjeT0iMzk1LjA0ODcxIgogICAgICAgcj0iMTQ4Ljk1MzA5IgogICAgICAgZng9IjE4Mi45ODM3IgogICAgICAgZnk9IjM5NS4wNDg3MSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDMwMzMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzU1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMjI5MTQzMzQsLTAuMjQ5MDE0NzksMC43NjQzNTcyLDAuODMwNjQyNjgsLTI3Mi44NTMzNywtMTU5LjY5NDgyKSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc1NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1NyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwOGNiZTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTkiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiMmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjMzLjM1NTQ0LC0zOTAuNzE4MDIpIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg4LjQ1MTk3MjMsMCwwLDguNDUxOTcyMywtMjc4LjQ1MDEyLC00MDMuODI5NzUpIgogICAgICAgaWQ9ImczMDI1Ij4KICAgICAgPHBhdGgKICAgICAgICAgZD0ibSA2Ni40MzIxMDMsOTcuNDg4Njc5IGMgLTUuMTk1ODQsNS42NDY0MzEgLTMuOTM2NjEsMTYuMTY5MDMxIDIuODExMDcsMjMuNTAxODcxIDYuNzQ3NjgsNy4zMzI4NSAxNi40Mjg5OCw4LjY5OTU1IDIxLjYyNDgzLDMuMDUzMTIgNS4xOTU4NSwtNS42NDY0MyAzLjk0MDIsLTE2LjE2OTQ2IC0yLjgwNzQ5LC0yMy41MDIzIC02Ljc0NzY4LC03LjMzMjg2MSAtMTYuNDMyNTYsLTguNjk5MTMxIC0yMS42Mjg0MSwtMy4wNTI2OTEgeiBtIDQuNzExNDksMi4zNDU1MyBjIDQuMDgyNTYsLTQuNDM2NTkgMTEuNTg5LC0zLjQ3MTUyIDE2Ljc2NzQxLDIuMTU1OTYxIDUuMTc4NDIsNS42Mjc1IDYuMDY2NDcsMTMuNzg0OTEgMS45ODM5MSwxOC4yMjE1IC00LjA4MjU2LDQuNDM2NTggLTExLjU5MDk3LDMuNDczNjkgLTE2Ljc2OTM5LC0yLjE1MzgxIC01LjE3ODQyLC01LjYyNzUgLTYuMDY0NDksLTEzLjc4NzA0IC0xLjk4MTkzLC0xOC4yMjM2NTEgeiIKICAgICAgICAgaWQ9InBhdGg1ODc0IgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzAzMyk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHdpZHRoPSI0LjM0OTg1NCIKICAgICAgICAgaGVpZ2h0PSI0LjM0OTg1NCIKICAgICAgICAgcng9IjAuNzY5NTg5NjYiCiAgICAgICAgIHJ5PSIwLjc2OTU4OTY2IgogICAgICAgICB4PSI4NS4zODE1NjEiCiAgICAgICAgIHk9Ijk5LjQ5Mzg4MSIKICAgICAgICAgaWQ9InJlY3Q1ODc2IgogICAgICAgICBzdHlsZT0iZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgICA8cmVjdAogICAgICAgICB3aWR0aD0iMTAuMjQ1NDM2IgogICAgICAgICBoZWlnaHQ9IjEwLjI0NTQzNiIKICAgICAgICAgcng9IjEuODEyNjU0NSIKICAgICAgICAgcnk9IjEuODEyNjU0NSIKICAgICAgICAgeD0iNjAuOTI2NTkiCiAgICAgICAgIHk9IjEwNS4yMjQ1IgogICAgICAgICBpZD0icmVjdDU4NzgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZjdmMmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNkNDU1MDA7c3Ryb2tlLXdpZHRoOjAuNzQ0MDM3OTk7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHdpZHRoPSI2LjE4OTc1MzEiCiAgICAgICAgIGhlaWdodD0iNi4xODk3NTMxIgogICAgICAgICByeD0iMS4wOTUxMTAyIgogICAgICAgICByeT0iMS4wOTUxMTAyIgogICAgICAgICB4PSI4Ny40MDQ3MzkiCiAgICAgICAgIHk9IjExOC42MzcwNSIKICAgICAgICAgaWQ9InJlY3Q1ODgwIgogICAgICAgICBzdHlsZT0iZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"octave,octave\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"www.octave.org-octave.desktop\"\nLABEL oc.launch=\"octave-gui.octave-gui\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"octave\"\nLABEL oc.displayname=\"octave\"\nLABEL oc.path=\"/usr/bin/octave\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"octave\"\nENV APPBIN \"/usr/bin/octave\"\nENV APP \"/usr/bin/octave\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/octave/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/octave/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/octave/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/octave/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5\nRUN echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections\nRUN echo \"deb [arch=$(dpkg --print-architecture)] https://download.onlyoffice.com/repo/debian squeeze main\" > /etc/apt/sources.list.d/onlyoffice.list\nRUN apt-get update && apt-get install --yes libgl1 libnss3 qt5dxcb-plugin && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y onlyoffice-desktopeditors && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"onlyoffice-desktopeditors.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNzIiIGhlaWdodD0iNjciIHZpZXdCb3g9IjAgMCA3MiA2NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMS41MDMzIDY1Ljc3NDJMMS44OTE4NCA1Mi4xODA1Qy0wLjYzMDYxNSA1MC45OTM3IC0wLjYzMDYxNSA0OS4xNTk2IDEuODkxODQgNDguMDgwOEwxMi4yMDEgNDMuMzMzN0wzMS4zOTM2IDUyLjE4MDVDMzMuOTE2MSA1My4zNjcyIDM3Ljk3NCA1My4zNjcyIDQwLjM4NjggNTIuMTgwNUw1OS41Nzk0IDQzLjMzMzdMNjkuODg4NiA0OC4wODA4QzcyLjQxMSA0OS4yNjc1IDcyLjQxMSA1MS4xMDE2IDY5Ljg4ODYgNTIuMTgwNUw0MC4yNzcxIDY1Ljc3NDJDMzcuOTc0IDY2Ljg1MyAzMy45MTYxIDY2Ljg1MyAzMS41MDMzIDY1Ljc3NDJaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXIpIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEuNTAzMyA0OS4wNTE2TDEuODkxODQgMzUuNDU3OEMtMC42MzA2MTUgMzQuMjcxMSAtMC42MzA2MTUgMzIuNDM3IDEuODkxODQgMzEuMzU4MUwxMS45ODE3IDI2LjcxOUwzMS41MDMzIDM1LjY3MzZDMzQuMDI1OCAzNi44NjAzIDM4LjA4MzYgMzYuODYwMyA0MC40OTY0IDM1LjY3MzZMNjAuMDE4MSAyNi43MTlMNzAuMTA3OSAzMS4zNTgxQzcyLjYzMDQgMzIuNTQ0OSA3Mi42MzA0IDM0LjM3OSA3MC4xMDc5IDM1LjQ1NzhMNDAuNDk2NCA0OS4wNTE2QzM3Ljk3NCA1MC4yMzgzIDMzLjkxNjEgNTAuMjM4MyAzMS41MDMzIDQ5LjA1MTZaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXIpIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEuNTAzMyAzMi43NjA2TDEuODkxODQgMTkuMTY2OUMtMC42MzA2MTUgMTcuOTgwMSAtMC42MzA2MTUgMTYuMTQ2IDEuODkxODQgMTUuMDY3MkwzMS41MDMzIDEuNDczNDRDMzQuMDI1OCAwLjI4NjY4NSAzOC4wODM2IDAuMjg2Njg1IDQwLjQ5NjQgMS40NzM0NEw3MC4xMDc5IDE1LjA2NzJDNzIuNjMwNCAxNi4yNTM5IDcyLjYzMDQgMTguMDg4IDcwLjEwNzkgMTkuMTY2OUw0MC40OTY0IDMyLjc2MDZDMzcuOTc0IDMzLjgzOTUgMzMuOTE2MSAzMy44Mzk1IDMxLjUwMzMgMzIuNzYwNloiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcikiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjM1Ljk3NDMiIHkxPSI3OC42NTk0IiB4Mj0iMzUuOTc0MyIgeTI9IjI5LjAzMDIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZDQzJCMSIvPgo8c3RvcCBvZmZzZXQ9IjAuODg0OCIgc3RvcC1jb2xvcj0iI0Q5NDIwQiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXIiIHgxPSIzNS45NzQzIiB5MT0iNTcuMTcxMyIgeDI9IjM1Ljk3NDMiIHkyPSIyNC41MzE2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNERUVEQzkiLz4KPHN0b3Agb2Zmc2V0PSIwLjY2MDYiIHN0b3AtY29sb3I9IiM4QkJBMjUiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyIiB4MT0iMzUuOTc0MyIgeTE9IjQzLjk1NDciIHgyPSIzNS45NzQzIiB5Mj0iLTAuNDYwODYyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDMkVCRkEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMjZBOERFIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"onlyoffice,office,onlyoffice,desktop,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"onlyoffice-desktopeditors.desktop\"\nLABEL oc.launch=\"DesktopEditors.DesktopEditors\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"onlyoffice\"\nLABEL oc.displayname=\"OnlyOffice\"\nLABEL oc.path=\"/usr/bin/desktopeditors\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/msexcel;application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroenabled.12;application/vnd.ms-excel.sheet.binary.macroenabled.12;text/csv;text/spreadsheet;application/csv;application/excel;application/x-excel;application/x-msexcel;application/x-ms-excel;text/comma-separated-values;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;\"\nLABEL oc.fileextensions=\"doc;docx;odt;rtf;txt;xls;xlsx;ods;csv;ppt;pptx;odp\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"onlyoffice\"\nENV APPBIN \"/usr/bin/desktopeditors\"\nENV APP \"/usr/bin/desktopeditors\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/onlyoffice/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/onlyoffice/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/onlyoffice/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/onlyoffice/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/openshift/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
RUN cd /tmp && wget \"https://cli.run.pivotal.io/stable?release=linux64-binary\" -O pivotal.tgz && tar -xvf pivotal.tgz && mv cf /usr/local/bin\n
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN cd /tmp && wget \"https://cli.run.pivotal.io/stable?release=linux64-binary\" -O pivotal.tgz && tar -xvf pivotal.tgz && mv cf /usr/local/bin\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends rhc gnome-terminal && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"openshift.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIGJ5IE1hcnN1cGlsYW1pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iNzE5IgogICBoZWlnaHQ9Ijc2OCIKICAgdmlld0JveD0iLTEuNzMzODY3MSAtMS43MzM4NjcxIDYxLjI2MzMwNDIgNjUuNDA4MjI5MiIKICAgaWQ9InN2ZzQ1NDUzIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDU0NTUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDU0LjIyNzgyLDExLjk4NjYxNSBjIC0wLjU3MjUsLTEuMTgyNSAtMS4yMzUsLTIuMzIzNzUwNCAtMi4wMDM3NSwtMy40MDAwMDA0IGwgLTguMjEyNSwyLjk4ODc1MDQgYyAwLjk1NSwwLjk3NzUgMS43NTc1LDIuMDc2MjUgMi40MTM3NSwzLjI1MTI1IGwgNy44MDI1LC0yLjg0IHogbSAtMzYuMzAyODcsOS4wODMzOCAtOC4yMTUsMi45ODg3NSBjIDAuMTA1LDEuMzE3NSAwLjMzMjUsMi42MTg3NSAwLjY1MTI1LDMuODkzNzUgbCA3LjgwMzc1LC0yLjg0MTI1IGMgLTAuMjUzNzUsLTEuMzIgLTAuMzQzNzUsLTIuNjggLTAuMjQsLTQuMDQxMjUiCiAgICAgaWQ9InBhdGg0NDU2MCIKICAgICBzdHlsZT0iZmlsbDojYzIyMTMzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSAzNi4xNTYyLDkuNjYwMTE0NiBjIDEuNzA4NzUsMC43OTc1MDA0IDMuMTg4NzUsMS44ODUwMDA0IDQuNDM3NSwzLjE2MDAwMDQgbCA4LjIxMjUsLTIuOTg4NzUwNCBjIC0yLjI3NSwtMy4xOTI1IC01LjM3Mzc1LC01Ljg2IC05LjE3LC03LjYzMTI1IC0xMS43NDEyNSwtNS40NzUgLTI1Ljc0ODc1LC0wLjM3NzUgLTMxLjIyMjUsMTEuMzYyNTAwNCAtMS43NzI1LDMuNzk4NzUgLTIuNDMxMjUsNy44MzM3NSAtMi4xMjEyNSwxMS43NDEyNSBsIDguMjEzNzUsLTIuOTg4NzUgYyAwLjEzNjI1LC0xLjc4IDAuNTcsLTMuNTYzNzUgMS4zNjYyNSwtNS4yNzM3NSBDIDE5LjQyOTk1LDkuNDEzODY0NiAyOC41Mjg3LDYuMTAzODY0NiAzNi4xNTYyLDkuNjYwMTE0NiIKICAgICBpZD0icGF0aDQ0NTY0IgogICAgIHN0eWxlPSJmaWxsOiNkYjIxMmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDQ0LjkxNTgyLDI0LjY2ODI0NSBjIC0wLjEzMTI1LDEuNzc4NzUgLTAuNTgsMy41NjI1IC0xLjM3ODc1LDUuMjczNzUgLTMuNTU2MjUsNy42Mjg3NSAtMTIuNjU2MjUsMTAuOTM4NzUgLTIwLjI4MjUsNy4zODI1IC0xLjcxMTI1LC0wLjc5ODc1IC0zLjIwMjUsLTEuODc3NSAtNC40NDYyNSwtMy4xNTUgbCAtOC4xOTYyNSwyLjk4MjUgYyAyLjI3LDMuMTkyNSA1LjM2NSw1Ljg2MTI1IDkuMTYzNzUsNy42MzM3NSAxMS43NDEyNSw1LjQ3Mzc1IDI1Ljc0NjI1LDAuMzc2MjUgMzEuMjIxMjUsLTExLjM2NSAxLjc3Mzc1LC0zLjc5NjI1IDIuNDI3NSwtNy44MzEyNSAyLjExNSwtMTEuNzM1IGwgLTguMTk2MjUsMi45ODI1IHoiCiAgICAgaWQ9InBhdGg0NDU3MiIKICAgICBzdHlsZT0iZmlsbDojZGIyMTJlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSA0Ni45MzU0NSwxNC42NDExMTUgLTcuODAzNzUsMi44NCBjIDEuNDUsMi41OTc1IDIuMTM1LDUuNTg3NSAxLjkxLDguNTk1IGwgOC4xOTYyNSwtMi45ODEyNSBjIC0wLjIzNSwtMi45NDEyNSAtMS4wMTg3NSwtNS44MTI1IC0yLjMwMjUsLTguNDUzNzUgbSAtMzYuMDYyNzUsMTMuMTI0IC03LjgwMzc1LDIuODQyNSBjIDAuNzE2MjUsMi44NDUgMS45Niw1LjU0ODc1IDMuNjcsNy45NTUgbCA4LjE5NSwtMi45ODM3NSBjIC0yLjEwMzc1LC0yLjE2IC0zLjUwMjUsLTQuODkzNzUgLTQuMDYxMjUsLTcuODEzNzUiCiAgICAgaWQ9InBhdGg0NDU3NiIKICAgICBzdHlsZT0iZmlsbDojZWIyMTI2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgogIDxwYXRoCiAgICAgZD0ibSA1My4wMzgzMiw5LjgyMjk5NDYgYyAtMC4yNTg3NSwtMC40MiAtMC41Mjc1LC0wLjgzMzc1IC0wLjgxMzc1LC0xLjIzNjI1IGwgLTguMjEyNSwyLjk4ODc1MDQgYyAwLjM2MTI1LDAuMzcgMC42OTM3NSwwLjc2MjUgMS4wMTEyNSwxLjE2NSBsIDguMDE1LC0yLjkxNzUwMDQgeiBNIDE3Ljg5MzU3LDIyLjcxOTM2NSBjIC0wLjAyLC0wLjU0NzUgLTAuMDExMywtMS4wOTc1IDAuMDMxMiwtMS42NDg3NSBsIC04LjIxNSwyLjk4ODc1IGMgMC4wNDI1LDAuNTI2MjUgMC4xMDg3NSwxLjA0ODc1IDAuMTg3NSwxLjU3IGwgNy45OTYyNSwtMi45MSB6IgogICAgIGlkPSJwYXRoNDQ1ODQiCiAgICAgc3R5bGU9ImZpbGw6I2FkMjEzYjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgLz4KICA8cGF0aAogICAgIGQ9Im0gNTMuMTExNTcsMjEuNjg1NjE1IC04LjE5NjI1LDIuOTgyNSBjIC0wLjA4NjMsMS4xOCAtMC4zMTYyNSwyLjM2MjUgLTAuNjkyNSwzLjUyNSBsIDguOTIxMjUsLTMuMjUyNSBjIDAuMDYzOCwtMS4wOSAwLjA1MzcsLTIuMTc3NSAtMC4wMzI1LC0zLjI1NSBtIC00Mi40OTg3NSwxNS40Njc1IGMgMC42MzEyNSwwLjg4ODc1IDEuMzMsMS43MzYyNSAyLjA4ODc1LDIuNTM2MjUgbCA4LjkyMjUsLTMuMjUzNzUgYyAtMS4wNDI1LC0wLjY1MjUgLTEuOTg1LC0xLjQxMzc1IC0yLjgxNjI1LC0yLjI2NjI1IGwgLTguMTk1LDIuOTgzNzUgeiIKICAgICBpZD0icGF0aDQ0NTg4IgogICAgIHN0eWxlPSJmaWxsOiNiYTIxMzM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+CiAgPHBhdGgKICAgICBkPSJtIDUyLjY4OTMyLDU0LjUzMjExNSAwLDAuNzQgMi4xNDYyNSwwIDAsNi41NTM3NSAwLjgxMjUsMCAwLC02LjU1Mzc1IDIuMTQ3NSwwIDAsLTAuNzQgLTUuMTA2MjUsMCB6IG0gLTQuOTI4NSwwLjczOTM4IDAsMi40MTc1IDIsMCAwLDAuNzQgLTIsMCAwLDMuMzk2MjUgLTAuODEyNSwwIDAsLTcuMjkyNSA0LjI4MjUsMCAwLDAuNzM4NzUgLTMuNDcsMCB6IG0gLTMuNzE3NzUsLTAuNzM4NSAwLjgxMjUsMCAwLDcuMjkzNzUgLTAuODEyNSwwIDAsLTcuMjkzNzUgeiBtIC0yLjkwNDI1LDcuMjkyODcgMCwtMy40Mzg3NSAtMy42MjYyNSwwIDAsMy40Mzg3NSAtMC44MTI1LDAgMCwtNy4yOTM3NSAwLjgxMjUsMCAwLDMuMTE2MjUgMy42MjYyNSwwIDAsLTMuMTE2MjUgMC44MTI1LDAgMCw3LjI5Mzc1IC0wLjgxMjUsMCB6IG0gLTguNjY2NzUsMC4xMTQ2MyBjIC0wLjk5LDAgLTEuODc2MjUsLTAuNDI3NSAtMi40NDg3NSwtMS4wMSBsIDAuNTQyNSwtMC42MDUgYyAwLjU1MTI1LDAuNTMxMjUgMS4xODc1LDAuODc2MjUgMS45Mzc1LDAuODc2MjUgMC45Njg3NSwwIDEuNTczNzUsLTAuNDggMS41NzM3NSwtMS4yNTEyNSAwLC0wLjY3NzUgLTAuNDA2MjUsLTEuMDYyNSAtMS43NCwtMS41NDI1IC0xLjU3Mzc1LC0wLjU2MjUgLTIuMTA1LC0xLjA3MjUgLTIuMTA1LC0yLjEyNSAwLC0xLjE2NzUgMC45MTYyNSwtMS44NjYyNSAyLjI4MTI1LC0xLjg2NjI1IDAuOTgsMCAxLjYwNSwwLjI5MjUgMi4yMiwwLjc4MjUgbCAtMC41MjEyNSwwLjYzNSBjIC0wLjUzMTI1LC0wLjQzNzUgLTEuMDIxMjUsLTAuNjc3NSAtMS43NSwtMC42Nzc1IC0xLjAwMTI1LDAgLTEuNDE3NSwwLjUgLTEuNDE3NSwxLjA3Mzc1IDAsMC42MDUgMC4yNzEyNSwwLjk0NzUgMS43MywxLjQ3IDEuNjE1LDAuNTgyNSAyLjExNSwxLjEyNSAyLjExNSwyLjIwODc1IDAsMS4xNDYyNSAtMC44OTYyNSwyLjAzMTI1IC0yLjQxNzUsMi4wMzEyNSBtIC01Ljc0MTUsLTAuMTE0NjMgLTIuNjc3NSwtMy45OCBjIC0wLjE3NzUsLTAuMjcxMjUgLTAuNDE3NSwtMC42MzYyNSAtMC41MTEyNSwtMC44MjM3NSAwLDAuMjcxMjUgMC4wMjEyLDEuMTg3NSAwLjAyMTIsMS41OTM3NSBsIDAsMy4yMSAtMS40Mzg3NSwwIDAsLTcuMjkzNzUgMS4zOTYyNSwwIDIuNTg1LDMuODU1IGMgMC4xNzc1LDAuMjcxMjUgMC40MTYyNSwwLjYzNjI1IDAuNTEsMC44MjM3NSAwLC0wLjI3MTI1IC0wLjAyLC0xLjE4NzUgLTAuMDIsLTEuNTk1IGwgMCwtMy4wODM3NSAxLjQzNzUsMCAwLDcuMjkzNzUgLTEuMzAyNSwwIHogbSAtMTEuNTAxMTIsMCAwLC03LjI5Mzc1IDUuMDYzNzUsMCAwLDEuNDI3NSAtMy42MDUsMCAwLDEuMjYxMjUgMi4wOTUsMCAwLDEuNDE2MjUgLTIuMDk1LDAgMCwxLjc2MTI1IDMuNzYxMjUsMCAwLDEuNDI3NSAtNS4yMiwwIHogbSAtNC4xNDQ3NSwtMi41ODM2MiAtMS42MDUsMCAwLDIuNTgzNzUgLTEuNDU4NzUsMCAwLC03LjI5Mzc1IDMuMTg4NzUsMCBjIDEuMzc1LDAgMi41MTEyNSwwLjc2MTI1IDIuNTExMjUsMi4zMTI1IDAsMS42ODg3NSAtMS4xMjUsMi4zOTc1IC0yLjYzNjI1LDIuMzk3NSBtIDAuMDczOCwtMy4yOTI1IC0xLjY3ODc1LDAgMCwxLjg3NSAxLjY5ODc1LDAgYyAwLjY3NzUsMCAxLjA0MjUsLTAuMzEzNzUgMS4wNDI1LC0wLjk0ODc1IDAsLTAuNjM1IC0wLjQxNzUsLTAuOTI2MjUgLTEuMDYyNSwtMC45MjYyNSBNIDMuMjEsNjEuOTQwNDk1IGMgLTEuOTA3NSwwIC0zLjIxLC0xLjM5NjI1IC0zLjIxLC0zLjc1MTI1IDAsLTIuMzU1IDEuMzIzNzUsLTMuNzcyNSAzLjIzMTI1LC0zLjc3MjUgMS44OTYyNSwwIDMuMTk4NzUsMS4zOTc1IDMuMTk4NzUsMy43NTI1IDAsMi4zNTUgLTEuMzIzNzUsMy43NzEyNSAtMy4yMiwzLjc3MTI1IG0gLTAuMDEsLTYuMDc1IGMgLTEuMDIxMjUsMCAtMS42OTg3NSwwLjgyMzc1IC0xLjY5ODc1LDIuMzAzNzUgMCwxLjQ4IDAuNzA4NzUsMi4zMjI1IDEuNzMsMi4zMjI1IDEuMDIxMjUsMCAxLjY5NzUsLTAuODIyNSAxLjY5NzUsLTIuMzAyNSAwLC0xLjQ4IC0wLjcwNzUsLTIuMzIzNzUgLTEuNzI4NzUsLTIuMzIzNzUiCiAgICAgaWQ9InBhdGg0NDYyMiIKICAgICBzdHlsZT0iZmlsbDojMjQxZjIxO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4KPCEtLSB2ZXJzaW9uOiAyMDExMDMxMSwgb3JpZ2luYWwgc2l6ZTogNTcuNzk1NTcgNjEuOTQwNDk1LCBib3JkZXI6IDMlIC0tPgo=\"\nLABEL oc.keyword=\"openshift,oc,openshift\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"gnome-terminal-server.openshift.cli\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nENV ARGS=\"--disable-factory --class openshift.cli\"\nLABEL oc.name=\"openshift\"\nLABEL oc.displayname=\"OpenShift cli\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"openshift\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class openshift.cli\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/openshift/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/openshift/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/openshift/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/openshift/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update pinta pinta-lang adwaita-icon-theme libadwaita font-noto font-xfree86-type1\nLABEL oc.icon=\"pinta.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL2lua3NjYXBlLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iOTAuMDAwMDAwIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iOTAuMDAwMDAwIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL2FuZHJlYXMvcHJvamVrdC9iaWxkL3RhbmdvL3NjYWxhYmxlL2RyYXctcGVuY2lsMy5wbmciCiAgIHdpZHRoPSI0OHB4IgogICBoZWlnaHQ9IjQ4cHgiCiAgIGlkPSJzdmc5MTIxIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQzK2RldmVsIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS90aWdlcnQvY3ZzL2ZyZWVkZXNrdG9wLm9yZy90YW5nby1pY29uLXRoZW1lL3NjYWxhYmxlL2NhdGVnb3JpZXMiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImFwcGxpY2F0aW9ucy1ncmFwaGljcy5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMyI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4MzUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY4MzciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjgzOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3NDgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY3NTAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMyYjU1ODI7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjc1MiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3MjEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI5ZmNmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY3MjMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMzYzc0YjE7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjcyNSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2NTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjJmMmYyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY2NTMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjM2MzYzM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjY1NSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY2MjkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYWVhZWFlO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY2MzEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGM0YzQ7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjYzMyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDI0NDYiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDI0NDgiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMjQ1MCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NzUiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NzciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk3OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NjMiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNjk2OTY5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NjUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk2NyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NTEiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNmUzZDA5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDY5NTMiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNjk1OSIKICAgICAgICAgb2Zmc2V0PSIwLjI0MjQyNDI1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWE4MTEzO3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzVjMzMwNztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMC42MjEyMTIxMiIKICAgICAgICAgaWQ9InN0b3A2OTYxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTA3YzEyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDY5NTUiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTM5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2JkYmRiZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A2OTQxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY5NDciCiAgICAgICAgIG9mZnNldD0iMC4zMzMzMzMzNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UyZTJlMjtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhM2EzYTM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAuNjY2NjY2NjkiCiAgICAgICAgIGlkPSJzdG9wNjk0OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RkZGRkZDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2OTQzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkzOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5NDUiCiAgICAgICB4MT0iMTkuMzk0NzM1IgogICAgICAgeTE9IjMwLjAwMTMzMSIKICAgICAgIHgyPSIyMy4xMDkzMzEiCiAgICAgICB5Mj0iMzMuNDM4ODMxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0zLjkwNjk1LC0xLjgwMjg1NikiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5NTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTU3IgogICAgICAgeDE9IjI4LjA1ODYzMiIKICAgICAgIHkxPSIxOC44Njc3NjciCiAgICAgICB4Mj0iMzMuNDM2OTg1IgogICAgICAgeTI9IjIzLjc0Mjc2NyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtMy45MDY5NSwtMS44MDI4NTYpIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTYzIgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50Njk2OSIKICAgICAgIGN4PSIxNS40MTUxMDEiCiAgICAgICBjeT0iMzUuMzU2NTA2IgogICAgICAgZng9IjE1LjQxNTEwMSIKICAgICAgIGZ5PSIzNS4zNTY1MDYiCiAgICAgICByPSI3LjU3OTE1NjEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTk0NjU1LDMuMjYyODc2ZS0xNiw2LjU2NDU0NmUtMTMsMC45NjkzMjIsLTQuNTgzMDE3LDAuMTY1OTE5KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTc1IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50Njk4MSIKICAgICAgIGN4PSIyNi43ODE2NyIKICAgICAgIGN5PSI0Mi4zNDMxNDciCiAgICAgICBmeD0iMjYuNzgxNjciCiAgICAgICBmeT0iNDIuMzQzMTQ3IgogICAgICAgcj0iMTQuNDA3MzAxIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjI4MjIwOSwxLjY3OTIxMmUtMTUsMzAuMzkzNTUpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDI0NDYiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyNDUyIgogICAgICAgeDE9IjEzLjIzNjE1NSIKICAgICAgIHkxPSIzNy43NTIyNDciCiAgICAgICB4Mj0iNy43NTIxMDkxIgogICAgICAgeTI9IjQyLjI4MjE0NiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjg1MjI5OCwwLDAsMC44NTIyOTgsLTEuNjc1MTA3LDMuNzUzOTc3KSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njk3NSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDY5MDMiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC4yODIyMDksMi45MzYxMjhlLTE1LDMwLjM5MzU1KSIKICAgICAgIGN4PSIyNi43ODE2NyIKICAgICAgIGN5PSI0Mi4zNDMxNDciCiAgICAgICBmeD0iMjYuNzgxNjciCiAgICAgICBmeT0iNDIuMzQzMTQ3IgogICAgICAgcj0iMTQuNDA3MzAxIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2ODM1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAwNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjQ4LjI1IgogICAgICAgeTE9IjU0Ljc1IgogICAgICAgeDI9IjQ4LjI1IgogICAgICAgeTI9IjcxLjI1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjcxODkxNCwwLDAsMC43MTg5MTQsLTEuODk3MTAzLC0yMC42ODYwNikiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY2NTEiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDEwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzM3MzA3LDAsMCwwLjc3MDg1NCwtOC41MzIwMjMsNy4xMjE2MzYpIgogICAgICAgeDE9IjYwLjE2ODc2NiIKICAgICAgIHkxPSI0MC4xMTk3OTciCiAgICAgICB4Mj0iNjAuNDQwOTk0IgogICAgICAgeTI9IjQzLjg2OTc5NyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njc0OCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMTQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC43MTg5MTQsMCwwLDAuNzE4OTE0LC0xLjg5NzEwMywtMjIuNDI0ODEpIgogICAgICAgeDE9IjQ5Ljg1MzAzNyIKICAgICAgIHkxPSI2NC4yNTk2MjMiCiAgICAgICB4Mj0iNjIuNzY4MjIxIgogICAgICAgeTI9IjY0LjI1OTYyMyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjYyOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMTciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44ODg2MTksMCwwLDAuNzE4OTE0LC0xOC4yOTc2OCw5LjQ3MTcyOCkiCiAgICAgICB4MT0iNjEuODcxODQ1IgogICAgICAgeTE9IjI5LjYxNTIyMyIKICAgICAgIHgyPSI2MS44NzE4NDUiCiAgICAgICB5Mj0iNDEuNDU5MjYzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NjUxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAyMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjcxOTQ0LDAsMCwwLjcxODkxNCwtNy42OTYyNTIsOS40NzE3MjgpIgogICAgICAgeDE9IjUzLjE2ODc2NiIKICAgICAgIHkxPSIyNC4yNDQ3OTciCiAgICAgICB4Mj0iNjkuNjkwOTk0IgogICAgICAgeTI9IjI0LjI0NDc5NyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjcyMSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMjUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44NjI0ODIsMCwwLDAuNTgwNzE4LC0xNi4yNTY5NywxMS4wMTM0OCkiCiAgICAgICB4MT0iNTIuNzE3OTM2IgogICAgICAgeTE9IjIuMzE2MTYzOCIKICAgICAgIHgyPSI2Ny40NjU5ODgiCiAgICAgICB5Mj0iMi4zMTYxNjM4IiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjAuMTcyNTQ5MDIiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjQiCiAgICAgaW5rc2NhcGU6Y3g9IjYxLjAzNjM2MyIKICAgICBpbmtzY2FwZTpjeT0iMjUuODYzOTA2IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjk1IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjExNTEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjQ3MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iZmFsc2UiCiAgICAgc3Ryb2tlPSIjMjA0YTg3IgogICAgIGZpbGw9IiMzNDY1YTQiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+R3JhcGhpY3MgQ2F0ZWdvcnk8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlIC8+CiAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5KYWt1YiBTdGVpbmVyPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvIiAvPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+Z3JhcGhpY3M8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5jYXRlZ29yeTwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnBpeGVsPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+dmVjdG9yPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+ZWRpdG9yPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+ZHJhdzwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPnBhaW50PC9yZGY6bGk+CiAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgIDxkYzpzb3VyY2U+aHR0cDovL3RhbmdvLXByb2plY3Qub3JnPC9kYzpzb3VyY2U+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvIj4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUmVwcm9kdWN0aW9uIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EaXN0cmlidXRpb24iIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9Ob3RpY2UiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9BdHRyaWJ1dGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGVyaXZhdGl2ZVdvcmtzIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU2hhcmVBbGlrZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDY5MjI0LDAsMCwxLjEyMjk3NSw1Ljc2OTAyOCwtNy4xMTYxNikiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGQ9Ik0gNDEuMTg4OTcxIDQyLjM0MzE0NyBBIDE0LjQwNzMwMSA0LjA2NTg2NDEgMCAxIDEgIDEyLjM3NDM2OSw0Mi4zNDMxNDcgQSAxNC40MDczMDEgNC4wNjU4NjQxIDAgMSAxICA0MS4xODg5NzEgNDIuMzQzMTQ3IHoiCiAgICAgICBzb2RpcG9kaTpyeT0iNC4wNjU4NjQxIgogICAgICAgc29kaXBvZGk6cng9IjE0LjQwNzMwMSIKICAgICAgIHNvZGlwb2RpOmN5PSI0Mi4zNDMxNDciCiAgICAgICBzb2RpcG9kaTpjeD0iMjYuNzgxNjciCiAgICAgICBpZD0icGF0aDY5MDEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ2OTAzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDY5NTcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNjczOTA3O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGQ9Ik0gMTkuNjUxNjgyLDIyLjU4NjczNSBMIDIzLjcxNzU0NiwyNi4zODc0MzMgQyAzMC45MDUwNDUsMTkuMzI0OTM0IDQxLjUwMDYwNiwyLjQxMDE0NTUgNDEuNTAwNjA2LDIuNDEwMTQ1NSBDIDQxLjkzMDA5NiwxLjE4NTY5OTMgNDAuNDEzMzYxLDAuNDE0MjUyNjQgMzkuNjU0MjU0LDEuMjM5NjUwNSBDIDM5LjY1NDI1NCwxLjIzOTY1MDUgMjUuOTY0MTgxLDE1LjMzNjczNiAxOS42NTE2ODIsMjIuNTg2NzM1IHogIgogICAgICAgaWQ9InBhdGg2OTM3IgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc3NjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ2OTQ1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6Izg4OGE4NTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDEyLjA1MDI4NSwzMi44MTM4OTQgTCAxNC4yOTY2MDUsMzQuNzQ3NzE0IEwgMjIuNzg5MzcxLDI3LjM4MDY4MyBMIDIzLjA2NDQzMiwyNi42NzQ4NTUgTCAyNC4xNTg4MzcsMjYuNjU3MDQgQyAyMy43MjEzMzcsMjUuMDk0NTQgMjEuMjE3MzIzLDIyLjI3MzU4NSAxOS4zNDIzMjMsMjIuMjczNTg1IEwgMTkuNDI0MzQyLDIzLjM2MzY2IEwgMTguNzU0MzUxLDIzLjc0MzY4NyBMIDEyLjA1MDI4NSwzMi44MTM4OTQgeiAiCiAgICAgICBpZD0icGF0aDY5MzUiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDY5ODEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgIGlkPSJwYXRoNjk3MyIKICAgICAgIHNvZGlwb2RpOmN4PSIyNi43ODE2NyIKICAgICAgIHNvZGlwb2RpOmN5PSI0Mi4zNDMxNDciCiAgICAgICBzb2RpcG9kaTpyeD0iMTQuNDA3MzAxIgogICAgICAgc29kaXBvZGk6cnk9IjQuMDY1ODY0MSIKICAgICAgIGQ9Ik0gNDEuMTg4OTcxIDQyLjM0MzE0NyBBIDE0LjQwNzMwMSA0LjA2NTg2NDEgMCAxIDEgIDEyLjM3NDM2OSw0Mi4zNDMxNDcgQSAxNC40MDczMDEgNC4wNjU4NjQxIDAgMSAxICA0MS4xODg5NzEgNDIuMzQzMTQ3IHoiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzM4MzcsMCwwLDEsLTIwLjkyNjQsLTMuNDA5MDExKSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50Njk2OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDEuNzU3NzA5LDQwLjcyMzkxNSBDIDguMzYzMDIxNiw0MC43MjM5MTUgMTMuMzc1ODk2LDQxLjUxMDUxNiAxNC4zMjQ5MzQsMzYuNzA0ODQyIEMgMTUuMDg5NzI3LDMyLjgzMjEzMyA5Ljc2NDYwOTYsMzAuOTc2NDgyIDcuMTI1ODAyNiwzNC40MzM3OTEgQyA0LjU4Mzc5OSwzNy43NjQyNyAxLjc1NzcwOSw0MC43MjM5MTUgMS43NTc3MDksNDAuNzIzOTE1IHogIgogICAgICAgaWQ9InBhdGg2OTMzIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc2MiIC8+CiAgICA8cGF0aAogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC41Mjc3Nzc4Mjtjb2xvcjojMDAwMDAwO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBpZD0icGF0aDY5NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNy42MjQ5OTkiCiAgICAgICBzb2RpcG9kaTpjeT0iMzcuNzUiCiAgICAgICBzb2RpcG9kaTpyeD0iMS4yNDk5OTk5IgogICAgICAgc29kaXBvZGk6cnk9IjEuMjQ5OTk5OSIKICAgICAgIGQ9Ik0gOC44NzQ5OTg5IDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgNi4zNzQ5OTkyLDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgOC44NzQ5OTg5IDM3Ljc1IHoiCiAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODUyMjk4LDAsMCwwLjg1MjI5OCwzLjczMzU1NCwyLjU3NTYwNCkiIC8+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43ODc4NjcsMCwwLDAuNzg3ODY3LDE0LjI2NTM4LC00LjcyMzM2NikiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGQ9Ik0gOC44NzQ5OTg5IDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgNi4zNzQ5OTkyLDM3Ljc1IEEgMS4yNDk5OTk5IDEuMjQ5OTk5OSAwIDEgMSAgOC44NzQ5OTg5IDM3Ljc1IHoiCiAgICAgICBzb2RpcG9kaTpyeT0iMS4yNDk5OTk5IgogICAgICAgc29kaXBvZGk6cng9IjEuMjQ5OTk5OSIKICAgICAgIHNvZGlwb2RpOmN5PSIzNy43NSIKICAgICAgIHNvZGlwb2RpOmN4PSI3LjYyNDk5OSIKICAgICAgIGlkPSJwYXRoNjk4MyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgZD0iTSAxOC45NDE0MzgsMjYuMzk4MTU0IEwgMTMuNjM4MTM3LDMyLjU0MTE0NCIKICAgICAgIGlkPSJwYXRoNjk4NSIKICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDI3Nzc3NzY7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNDUyKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICBkPSJNIDMuMDcwODg3Miw0MC4wNjg5NzYgQyAzLjA3MDg4NzIsNDAuMDY4OTc2IDYuNDExOTk4NiwzOC40MjcxNTUgNy44MzU3MTU2LDM1Ljk4MjE0NyBDIDguMzM5NDIyNiwzNS4xMTcxMSA5LjQ4MDA4ODYsMzUuODU1MzExIDguNzc3MzgxNiwzNi43MTY2NDYgQyA3LjI1OTU1MzYsMzguNTc3MTA0IDMuMDcwODg3Miw0MC4wNjg5NzYgMy4wNzA4ODcyLDQwLjA2ODk3NiB6ICIKICAgICAgIGlkPSJwYXRoMTU3MSIKICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjc3NjIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTMzMzMzMjc7Y29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIgogICAgICAgaWQ9InBhdGgyNDU0IgogICAgICAgc29kaXBvZGk6Y3g9IjcuNjI0OTk5IgogICAgICAgc29kaXBvZGk6Y3k9IjM3Ljc1IgogICAgICAgc29kaXBvZGk6cng9IjEuMjQ5OTk5OSIKICAgICAgIHNvZGlwb2RpOnJ5PSIxLjI0OTk5OTkiCiAgICAgICBkPSJNIDguODc0OTk4OSAzNy43NSBBIDEuMjQ5OTk5OSAxLjI0OTk5OTkgMCAxIDEgIDYuMzc0OTk5MiwzNy43NSBBIDEuMjQ5OTk5OSAxLjI0OTk5OTkgMCAxIDEgIDguODc0OTk4OSAzNy43NSB6IgogICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjIzNzg2NywwLDAsMC4yMzc4NjcsMzguNDMzODksLTcuMTAxMDI4KSIgLz4KICAgIDxnCiAgICAgICBpZD0iZzcwMzgiPgogICAgICA8cGF0aAogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzc3Nzc3NjIgogICAgICAgICBpZD0icGF0aDY2NTkiCiAgICAgICAgIGQ9Ik0gMzUuMTI2OTQsNy4zNTAwNzU5IEMgMzIuMDY5MDg0LDcuNDM3MzY0OCAyOS42NDI1NTEsOC40MDYxNTg0IDI5LjY0MjU1MSw5LjU3NDQwOTUgQyAyOS42NDI1NTEsOS44NTIxMDg1IDI5LjY0MjU1MSwxMi44NjY4MjkgMjkuNjQyNTUxLDEzLjE0NDUyOCBDIDI5LjY0MjU1MSwxNC4zNzAyMzQgMzIuMzEzNDgzLDE1LjM2ODg2MSAzNS41ODM5NzEsMTUuMzY4ODYxIEMgMzguODU0NDU3LDE1LjM2ODg2MSA0MS41LDE0LjM3MDIzNCA0MS41LDEzLjE0NDUyOCBDIDQxLjUsMTIuODY2ODI5IDQxLjUsOS44NTIxMDg1IDQxLjUsOS41NzQ0MDk1IEMgNDEuNSw4LjM0ODcwMzMgMzguODU0NDU3LDcuMzUwMDc1OSAzNS41ODM5NzEsNy4zNTAwNzU5IEMgMzUuNDMwNjY2LDcuMzUwMDc1OSAzNS4yNzczMjUsNy4zNDU3ODI2IDM1LjEyNjk0LDcuMzUwMDc1OSB6ICIKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzAyNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMyMDRhODc7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjg4NjI3OCwwLDAsMC40Njg5MTQsLTEwLjQ0MzkyLC05LjcxODg1OSkiCiAgICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICAgIGlua3NjYXBlOnJfY3g9InRydWUiCiAgICAgICAgIGQ9Ik0gNTcuMzc1IDQ5Ljc1IEEgNS4zNzUgMS41IDAgMSAxICA0Ni42MjUsNDkuNzUgQSA1LjM3NSAxLjUgMCAxIDEgIDU3LjM3NSA0OS43NSB6IgogICAgICAgICBzb2RpcG9kaTpyeT0iMS41IgogICAgICAgICBzb2RpcG9kaTpyeD0iNS4zNzUiCiAgICAgICAgIHNvZGlwb2RpOmN5PSI0OS43NSIKICAgICAgICAgc29kaXBvZGk6Y3g9IjUyIgogICAgICAgICBpZD0icGF0aDY3MjkiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6IzM0NjVhNDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC45OTk5OTk4MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpZD0icGF0aDY2MTciCiAgICAgICAgIGQ9Ik0gMjcuOTI2NDQ3LDM5LjE1NTQ2NyBMIDI4Ljk3MzQ1NiwxNy44MDYwMzIgTCAzMS40NjAxMDIsMTQuMTQyNTIgQyAzMy40MzEzOTQsMTMuNTA3MDgzIDM4LjE4NjUyOSwxMy41MDcwODMgMzkuOTY3MDUsMTQuMTQyNTIgTCA0Mi40NTM2OTcsMTcuMTc0MzkzIEwgNDUuMDcxMjIsMzkuNjYwNzggTCAyNy45MjY0NDcsMzkuMTU1NDY3IHogIgogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ3MDIwKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzVhNWE1YTtzdHJva2Utd2lkdGg6MS4wMDAwMDAzNjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3pjYyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2NjE5IgogICAgICAgICBkPSJNIDI4LjgyODQ5NSwzOC44OTYxMDggQyAyOC44Mjg0OTUsMzguODk2MTA4IDMxLjQxOTE2OCwyOS4zNjQ1NjUgMzYuMzY4NjgzLDI5LjM2NDU2NSBDIDQxLjQ3NTI4NCwyOS4zNjQ1NjUgNDQuNTM3MjE4LDM5LjI3NzM3IDQ0LjUzNzIxOCwzOS4yNzczNyBMIDI4LjgyODQ5NSwzOC44OTYxMDggeiAiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2NjQxIgogICAgICAgICBkPSJNIDI5LjE4MDEzOCwyMC40OTg3MDggTCAyOC44ODQyMjUsMjYuOTczNDUgQyAzMC41NDY3MTQsMjUuODk1MDc5IDQwLjg3NjczNiwyNS43MDg5NjQgNDMuMjI3ODUsMjcuMzYxMDk4IEwgNDIuNTI2MzAyLDIwLjc2Mzc4NSBDIDQxLjEyODM0MiwxOS44MTA2MzEgMzEuOTQzNDY0LDE5LjI4NTU0IDI5LjE4MDEzOCwyMC40OTg3MDggeiAiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTQpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC41OTQ0NDQzO2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjAwMDAwMDEyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgZD0iTSAyOS4wNDg3NjIsMzguMjIyMDk2IEwgMjkuOTI2MjU5LDE4LjAyNzc4NCBMIDMxLjc2NjIyNiwxNC45OTQ5NDkgQyAzMy41ODQ3ODIsMTQuNDAyNzc0IDM3Ljk3MTQ4NCwxNC40MDI3NzQgMzkuNjE0MDQ5LDE0Ljk5NDk0OSBMIDQxLjU3NDUzLDE3LjUyNzUzNSBMIDQ0LjAyNjc1NCwzOC43NzU5IEwgMjkuMDQ4NzYyLDM4LjIyMjA5NiB6ICIKICAgICAgICAgaWQ9InBhdGg2NjcwIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHJ5PSIwLjg4Mzg4MzY2IgogICAgICAgICByeD0iMC44ODM4ODQxMyIKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgeT0iMzcuNTM2MTMzIgogICAgICAgICB4PSIyNi41MTI3ODkiCiAgICAgICAgIGhlaWdodD0iMy45Mjc3NTI1IgogICAgICAgICB3aWR0aD0iMTkuOTc0NDEzIgogICAgICAgICBpZD0icmVjdDU3NDIiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDcwMTApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNWE1YTVhO3N0cm9rZS13aWR0aDoxLjAwMDAwMDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICBpbmtzY2FwZTpyX2N4PSJ0cnVlIgogICAgICAgICBpZD0icGF0aDY2NjgiCiAgICAgICAgIGQ9Ik0gMjkuMzk1MjE5LDE3Ljk5NjQ1MSBDIDMxLjI2OTc1NiwxNi42MzAyNjMgMzguNDkzMTUzLDE2LjM0MTI3NyA0Mi4xMTUxMzksMTcuMzg5NzQ3IEwgMzkuNzc3NzMzLDE0LjUwNDEyNCBDIDM3LjI5OTUzMiwxMy44MzY5MTYgMzMuODUzMzg2LDE0LjEyODM1OCAzMS41MDIyNzIsMTQuNTczMTY0IEwgMjkuMzk1MjE5LDE3Ljk5NjQ1MSB6ICIKICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6cl9jeT0idHJ1ZSIKICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgaWQ9InBhdGg2ODMzIgogICAgICAgICBkPSJNIDMxLjE3Mjk0MSwxNy40MTYzODIgTCAzMS4xNzI5NDEsMzIuODczMDMzIEwgMzQuNDA4MDU0LDI5LjI3ODQ2MyBMIDM0LjA0ODU5NywxNi42OTc0NjggTCAzMS4xNzI5NDEsMTcuNDE2MzgyIHogIgogICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjg2MTExMTA5O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NzAwNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICA8ZwogICAgICAgICBzdHlsZT0ib3BhY2l0eTowLjU3Nzc3Nzc4IgogICAgICAgICBpZD0iZzcwMzMiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZTZlN2U2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtvcGFjaXR5OjAuNDExMTExMTEiCiAgICAgICAgICAgZD0iTSAzMS4wMDkzOTEsOS4zODA5NzM4IEwgMzEuMDA5MzkxLDEyLjYyMTAwOSBDIDMxLjAwOTM5MSwxMi42MjEwMDkgMzEuNjIwNTgsMTIuMjczMzIzIDMyLDEyLjI1OTY4OCBMIDMyLDkgQyAzMS41MTg0MjgsOS4wNjk0NjI2IDMxLjAwOTM5MSw5LjM4MDk3MzggMzEuMDA5MzkxLDkuMzgwOTczOCB6ICIKICAgICAgICAgICBpZD0icGF0aDY2NjYiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgICAgIGlua3NjYXBlOnJfY3k9InRydWUiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpZD0icGF0aDcwMjkiCiAgICAgICAgICAgZD0iTSAzMy4wMDkzOTEsOC43NTk5NjQ4IEwgMzMuMDA5MzkxLDEyIEMgMzMuMDA5MzkxLDEyIDMzLjYyMDU4LDExLjkxNzQ3OSAzNCwxMS45MDM4NDQgTCAzNCw4LjU4ODkxMzMgQyAzMy40ODgzOTksOC42MTQ3MTc5IDMzLjAwOTM5MSw4Ljc1OTk2NDggMzMuMDA5MzkxLDguNzU5OTY0OCB6ICIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNlNmU3ZTY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZTZlN2U2O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtvcGFjaXR5OjAuNDQ0NDQ0NDQiCiAgICAgICAgICAgZD0iTSAzNS4wMDkzOTEsOC41NjEwOTEgTCAzNS4wMDkzOTEsMTEuODU2MzY5IEMgMzUuMDA5MzkxLDExLjg1NjM2OSAzNS41NjUzMzcsMTEuODUxMTg3IDM2LDExLjg3MDY5OCBMIDM2LDguNTMzNjcwNiBDIDM1LjQ5OTQ0OCw4LjQ4MjEzNTQgMzUuMDA5MzkxLDguNTYxMDkxIDM1LjAwOTM5MSw4LjU2MTA5MSB6ICIKICAgICAgICAgICBpZD0icGF0aDcwMzEiCiAgICAgICAgICAgaW5rc2NhcGU6cl9jeD0idHJ1ZSIKICAgICAgICAgICBpbmtzY2FwZTpyX2N5PSJ0cnVlIgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"pinta,pinta,paint\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"pinta.desktop\"\nLABEL oc.launch=\"Pinta.Pinta\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Pinta\"\nLABEL oc.displayname=\"Pinta (alpine)\"\nLABEL oc.path=\"/usr/bin/pinta\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-targa;image/x-tga;image/openraster;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Pinta\"\nENV APPBIN \"/usr/bin/pinta\"\nENV APP \"/usr/bin/pinta\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/pinta/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/pinta/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/pinta/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f Pinta.d -t Pinta .\n
"},{"location":"applications/pinta/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect Pinta > Pinta.json\ndocker image save Pinta -o Pinta.tar\nctr -n k8s.io images import Pinta.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @Pinta.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends planner && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"planner.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDQ5MCA0OTAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5MCA0OTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8ZyBpZD0iWE1MSURfODFfIj4NCgkJCTxnPg0KCQkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiBwb2ludHM9IjQ4MCwyOTcuNSA0MTUsMzYyLjUgNDE1LDI5Ny41IAkJCQkiLz4NCgkJCQk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSI0ODAsNTIuNSA0ODAsMjk3LjUgNDE1LDI5Ny41IDQxNSwzNjIuNSAxMCwzNjIuNSAxMCw1Mi41IAkJCQkiLz4NCgkJCTwvZz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiBkPSJNNDkwLDUyLjVjMC01LjUyMi00LjQ3Ny0xMC0xMC0xMEgxMGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMHYzMTBjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGg0MDVsMCwwDQoJCQkJYzIuNjAyLTAuMDAxLDUuMTU5LTEuMDE2LDcuMDcxLTIuOTI5bDY1LTY1YzEuOTEyLTEuOTEzLDIuOTA0LTQuNDcsMi45MDUtNy4wNzFINDkwVjUyLjV6IE00MTUsMjg3LjVjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTANCgkJCQl2NTVIMjB2LTI5MGg0NTB2MjI1SDQxNXogTTQyNSwzMzguMzU3VjMwNy41aDMwLjg1OEw0MjUsMzM4LjM1N3oiLz4NCgkJPC9nPg0KCTwvZz4NCgk8Zz4NCgkJPGcgaWQ9IlhNTElEXzgyXyI+DQoJCQk8Zz4NCgkJCQk8cmVjdCB4PSI2MCIgeT0iOTcuNSIgc3R5bGU9ImZpbGw6I0FGQjZCQjsiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiLz4NCgkJCQk8cmVjdCB4PSIyNTAiIHk9IjEwMi41IiBzdHlsZT0iZmlsbDojQUZCNkJCOyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI1MCIvPg0KCQkJCTxyZWN0IHg9IjI1MCIgeT0iMTgyLjUiIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjUwIi8+DQoJCQkJPHJlY3QgeD0iMjUwIiB5PSIyNjIuNSIgc3R5bGU9ImZpbGw6I0FGQjZCQjsiIHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiLz4NCgkJCTwvZz4NCgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiBkPSJNMjUwLDE2Mi41aDEwMGM1LjUyMywwLDEwLTQuNDc4LDEwLTEwdi01MGMwLTUuNTIyLTQuNDc3LTEwLTEwLTEwSDI1MGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMA0KCQkJCXYxNWgtMjVjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTB2NzVoLTgwdi0zNWg1NWM1LjUyMywwLDEwLTQuNDc4LDEwLTEwdi02MGMwLTUuNTIyLTQuNDc3LTEwLTEwLTEwSDYwYy01LjUyMywwLTEwLDQuNDc4LTEwLDEwDQoJCQkJdjYwYzAsNS41MjIsNC40NzcsMTAsMTAsMTBoNDV2NDVjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGg5MHY3MGMwLDUuNTIyLDQuNDc3LDEwLDEwLDEwaDI1djEwYzAsNS41MjIsNC40NzcsMTAsMTAsMTBoMTAwDQoJCQkJYzUuNTIzLDAsMTAtNC40NzgsMTAtMTB2LTUwYzAtNS41MjItNC40NzctMTAtMTAtMTBIMjUwYy01LjUyMywwLTEwLDQuNDc4LTEwLDEwdjIwaC0xNXYtNjBoMTV2MTBjMCw1LjUyMiw0LjQ3NywxMCwxMCwxMGgxMDANCgkJCQljNS41MjMsMCwxMC00LjQ3OCwxMC0xMHYtNTBjMC01LjUyMi00LjQ3Ny0xMC0xMC0xMEgyNTBjLTUuNTIzLDAtMTAsNC40NzgtMTAsMTB2MjBoLTE1di02NWgxNXYxNQ0KCQkJCUMyNDAsMTU4LjAyMiwyNDQuNDc3LDE2Mi41LDI1MCwxNjIuNXogTTI2MCwxMTIuNWg4MHYzMGgtODBWMTEyLjV6IE03MCwxMDcuNWgxMDB2NDBINzBWMTA3LjV6IE0yNjAsMjcyLjVoODB2MzBoLTgwVjI3Mi41eg0KCQkJCSBNMjYwLDE5Mi41aDgwdjMwaC04MFYxOTIuNXoiLz4NCgkJPC9nPg0KCTwvZz4NCgk8Zz4NCgkJPHJlY3QgeD0iNTAiIHk9IjI0Ny41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9Ijc1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI1MCIgeT0iMjc3LjUiIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiB3aWR0aD0iNzUiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjUwIiB5PSIzMDcuNSIgc3R5bGU9ImZpbGw6IzIzMUYyMDsiIHdpZHRoPSIxMzAiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjEzNSIgeT0iMjQ3LjUiIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiLz4NCgk8L2c+DQoJPGc+DQoJCTxyZWN0IHg9IjM4MCIgeT0iOTIuNSIgc3R5bGU9ImZpbGw6IzIzMUYyMDsiIHdpZHRoPSIyNSIgaGVpZ2h0PSIyMCIvPg0KCTwvZz4NCgk8Zz4NCgkJPHJlY3QgeD0iNDIwIiB5PSI5Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjEyMi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjEyMi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjE1Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjE1Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSIzODAiIHk9IjE4Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8cmVjdCB4PSI0MjAiIHk9IjE4Mi41IiBzdHlsZT0iZmlsbDojMjMxRjIwOyIgd2lkdGg9IjI1IiBoZWlnaHQ9IjIwIi8+DQoJPC9nPg0KCTxnPg0KCQk8ZyBpZD0iWE1MSURfODNfIj4NCgkJCTxnPg0KCQkJCTxwb2x5Z29uIHN0eWxlPSJmaWxsOiNFN0VDRUQ7IiBwb2ludHM9IjQ4MCw0MTcuNSA0MjAsNDM3LjUgNDIwLDM5Ny41IAkJCQkiLz4NCgkJCQk8cmVjdCB4PSIxMCIgeT0iMzk3LjUiIHN0eWxlPSJmaWxsOiNBRkI2QkI7IiB3aWR0aD0iNjAiIGhlaWdodD0iNDAiLz4NCgkJCQk8cmVjdCB4PSI3MCIgeT0iMzk3LjUiIHN0eWxlPSJmaWxsOiNGRkQyNDg7IiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjQwIi8+DQoJCQk8L2c+DQoJCQk8cGF0aCBzdHlsZT0iZmlsbDojMjMxRjIwOyIgZD0iTTQ4My4xNjIsNDA4LjAxM2wtNjAtMjBjLTEuMDMzLTAuMzQ0LTIuMS0wLjQ5OC0zLjE2Mi0wLjQ5OFYzODcuNUgxMGMtNS41MjMsMC0xMCw0LjQ3OC0xMCwxMHY0MA0KCQkJCWMwLDUuNTIyLDQuNDc3LDEwLDEwLDEwaDQxMGwwLDBoMC4wMDFjMS4wNjEsMCwyLjEyOS0wLjE2OSwzLjE2MS0wLjUxM2w2MC0yMGM0LjA4My0xLjM2MSw2LjgzOC01LjE4Myw2LjgzOC05LjQ4Nw0KCQkJCUM0OTAsNDEzLjE5Niw0ODcuMjQ2LDQwOS4zNzQsNDgzLjE2Miw0MDguMDEzeiBNNjAsNDI3LjVIMjB2LTIwaDQwVjQyNy41eiBNNDEwLDQwNy41djIwSDgwdi0yMEg0MTB6IE00MzAsNDIzLjYyNnYtMTIuMjUyDQoJCQkJbDE4LjM3Nyw2LjEyNkw0MzAsNDIzLjYyNnoiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K\"\nLABEL oc.keyword=\"planner\"\nLABEL oc.cat=\"office\"\nLABEL oc.launch=\"planner.Planner\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Planner\"\nLABEL oc.displayname=\"Planner\"\nLABEL oc.path=\"/usr/bin/planner\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-planner;\"\nLABEL oc.fileextensions=\"mpp;mpx\"\nLABEL oc.legacyfileextensions=\"mpp;mpx\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Planner\"\nENV APPBIN \"/usr/bin/planner\"\nENV APP \"/usr/bin/planner\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/planner/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/planner/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/planner/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/planner/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/postman/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libgtk-3-0 libatk-bridge2.0-0 libx11-6 libxi6 libxxf86vm1 libxfixes3 libxrender1 libgl1 libnss3 qt5dxcb-plugin libxss1 libasound2 libx11-xcb1 libxcb-dri3-0 libdrm2 libdrm-common libgbm1 libasound2-plugins libgail-common libgtk2.0-bin && apt-get clean\nRUN curl -Ls -o /tmp/postman.tar.gz https://dl.pstmn.io/download/latest/linux64 && gunzip -d /tmp/postman.tar.gz && cd /usr/local/bin && tar -xvf /tmp/postman.tar && rm -rf /tmp/blender.tar\nLABEL oc.icon=\"circle_postman.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0ic3ZnMzciIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzIGlkPSJkZWZzMjEiPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9Ijk5LjAzNiIgeDI9Ijk5LjAzNiIgeTE9Ii0uNTA0NzIiIHkyPSIxOTkuODQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjMgMCAwIC4zIDIgMi4wMDE1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBpZD0ic3RvcDIiIHN0b3AtY29sb3I9IiNmZjUxMjIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBpZD0ic3RvcDQiIHN0b3AtY29sb3I9IiNmZmFmMjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBpZD0iZmVHYXVzc2lhbkJsdXI3IiBzdGREZXZpYXRpb249IjE0LjA1OTg2MyIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4NzAiIHgxPSI1MS41NzkiIHgyPSI1My4yNzEiIHkxPSItMzYuOTUxIiB5Mj0iNzcuNjQ3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIGlkPSJzdG9wODY0IiBzdG9wLWNvbG9yPSIjZmVlMGQ1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3AgaWQ9InN0b3A4NjYiIHN0b3AtY29sb3I9IiNmYmZhYmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZmlsdGVyODg4IiB4PSItLjA0OCIgeT0iLS4wNDgiIHdpZHRoPSIxLjA5NiIgaGVpZ2h0PSIxLjA5NiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIGlkPSJmZUdhdXNzaWFuQmx1cjg5MCIgc3RkRGV2aWF0aW9uPSIyLjU0OTkxNjMiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgaWQ9ImNpcmNsZTIzIiB0cmFuc2Zvcm09Im1hdHJpeCguMDY0MDEyIDAgMCAuMDY0MDEyIC0uNzQyMjYgLTIuNjIpIiBjeD0iNTExLjUiIGN5PSI1NDAuODYiIHI9IjQ2OC42NiIgY29sb3I9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjYyMiIvPgogPGNpcmNsZSBpZD0iY2lyY2xlMjUiIGN4PSIzMiIgY3k9IjMyLjAwMiIgcj0iMzAiIGNvbG9yPSIjMDAwMDAwIiBmaWxsPSJ1cmwoI2EpIi8+CiA8ZyBpZD0iZzg3NCIgdHJhbnNmb3JtPSJtYXRyaXgoLjM3NjQ5IDAgMCAuMzc2NDkgMTEuNzgzIDIzLjg2KSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg4OCkiIG9wYWNpdHk9Ii4xNSI+CiAgPHBhdGggaWQ9InBhdGg4NzIiIHRyYW5zZm9ybT0ibWF0cml4KDIuNjU2MSAwIDAgMi42NTYxIC0zMS4yOTcgLTYzLjM3NCkiIGQ9Im0zMS4zODkgOC4wMDU5Yy0xMS42NDggMC4yNzA0MS0yMS42NjMgOS4wMjE3LTIzLjE5MSAyMC45MzQtMS42ODYzIDEzLjE0NCA3LjU5NjEgMjUuMTc3IDIwLjc0IDI2Ljg2MyAxMy4xNDQgMS42ODYzIDI1LjE2NS03LjU5NDEgMjYuODY1LTIwLjczOCAxLjY4NjMtMTMuMTQ0LTcuNTk1My0yNS4xNzktMjAuNzU0LTI2Ljg2NS0xLjIzMjMtMC4xNTk0NC0yLjQ1NTItMC4yMjEzMy0zLjY2MDItMC4xOTMzNnptMTEuODU5IDkuMDI3M2MwLjg1NTc0LTAuMDM2MDMxIDEuNzI0MSAwLjIzMjEgMi40Mzc1IDAuODA4NTlsLTMuMjI4NSAzLjIxMjljLTAuMDg2NDc1IDAuMTAwODktMC4wODY0NzUgMC4yNDQ4MSAwIDAuMzQ1N2wyLjUwNzggMi40OTQxYy0xLjQxMjQgMC42OTE4LTMuMTEzNiAwLjQwMzQ3LTQuMjA5LTAuNzIwN2wwLjAxMzY3MiAwLjAyOTI5N2MtMS4zOTgtMS40NTU3LTEuMzQwNC0zLjc2MjEgMC4xMTUyNC01LjE2MDIgMC42NjI5Ny0wLjYzNDE1IDEuNTA3NS0wLjk3Mzc0IDIuMzYzMy0xLjAwOTh6bTIuNzgzMiAxLjEzODdjMS4zMjU5IDEuNDI2OCAxLjI4MjggMy42NDc3LTAuMTE1MjMgNS4wMzEyLTAuMTcyOTUgMC4xNTg1NC0wLjM0NzA1IDAuMzE3NTYtMC41NDg4MyAwLjQ0NzI3bC0yLjQwNjItMi40MDgyIDMuMDcwMy0zLjA3MDN6bS0wLjEyMTA5IDEuODUzNWMtMC4wNTk0NTEtMC4wMTA4MS0wLjEyMzk5LTguNzRlLTQgLTAuMTgxNjQgMC4wMzUxNTYtMC4xMjk3MSAwLjA1NzY1Mi0wLjIwMjE4IDAuMjE1OTktMC4xNDQ1MyAwLjM0NTcgMCAwLjAxNDQyIDAuMDEzNjcyIDAuMDE0ODc3IDAuMDEzNjcyIDAuMDI5Mjk3IDAuMTQ0MTIgMC4yODgyNSAwLjExNjU4IDAuNjQ3NTctMC4wOTk2MDkgMC44OTI1OC0wLjEwMDg5IDAuMTAwODktMC4xMTY1MSAwLjI3NDExLTAuMDE1NjI1IDAuMzc1bDAuMDE1NjI1IDAuMDE1NjI1YzAuMDU3NjUgMC4wMTQ0MiAwLjEyOTg1IDAuMDE0NDIgMC4xODc1IDAgMC4wNzIwNjIgMCAwLjE1NzkzLTAuMDQzOTEgMC4yMDExNy0wLjEwMTU2IDAuMzYwMzEtMC40MTc5NiAwLjQzMTMtMS4wMDggMC4xNzE4OC0xLjQ5OC0wLjAzNjAzMS0wLjA1MDQ0NS0wLjA4ODk4Ni0wLjA4Mjk0MS0wLjE0ODQ0LTAuMDkzNzV6bS03LjI0NjEgMi41MTc2YzAuNTE1OTIgMC4wNDE2NjEgMC45MjA5NyAwLjI4NTcgMS4zMjgxIDAuNjE3MTktMC40NDY3OSAwLjAxNDQyLTAuODY0NTcgMC4xODY4My0xLjE4MTYgMC41MDM5MWwtOC45MDgyIDguOTA2Mi0xLjkwMjMtMS45MDIzYzYuNTcyMS02LjU2MTMgOS4xMTYzLTguMjUgMTAuNjY0LTguMTI1em0xLjM1NzQgMS4xNjhjMC4zMTcwOCAwIDAuNjMzODkgMC4xMTc2NiAwLjg3ODkxIDAuMzU1NDcgMC4yNDUwMSAwLjI0NTAxIDAuMzczNzkgMC41NzY3MSAwLjM1OTM4IDAuOTA4Mi0wLjAxNDQxMiAwLjM0NTktMC4xNTg1NCAwLjY2MzkzLTAuNDE3OTcgMC44OTQ1M2wtOS4zODI4IDguMjczNC0xLjE5NTMtMS4yNTM5IDguODc3LTguODIyM2MwLjI0NTAxLTAuMjM3OCAwLjU2Mzc4LTAuMzU1NDcgMC44ODA4Ni0wLjM1NTQ3em0xLjM4MjggMi4yMzA1Yy0wLjMwMjY2IDIuNjgwNy00LjA3ODEgNi40ODU0LTcuOTU1MSAxMC4xODlsLTEuNjcxOS0xLjY3MTkgOS4zODA5LTguMjU3OGMwLjA4NjQ3NS0wLjA3MjA2MSAwLjE3NDAzLTAuMTU4ODggMC4yNDYwOS0wLjI1OTc3em0tMTMuNzUgNS4wMTU2IDEuNzczNCAxLjgxNjQtNC4wMjE1IDAuODYzMjhjLTAuMDg2NDc1IDAuMDE0NDE5LTAuMTczMDktMC4wNDI0MzQtMC4xODc1LTAuMTI4OTEtMC4wMTQ0MTItMC4wNTc2NTItMi42OWUtNCAtMC4xMDEyOSAwLjA0Mjk2OS0wLjE0NDUzbDAuMDQyOTY5LTAuMDU2NjQgMi4zNDk2LTIuMzQ5NnptMi4yNzczIDIuMzQ5NiAwLjk5NDE0IDAuOTIxODgtMi4yMDUxIDAuNTYyNWMtMC4wNDMyMzcgMC4wMjg4MzktMC4wODU2NjkgMC4wMjg4MzktMC4xMjg5MSAwLTAuMDI4ODI0LTAuMDQzMjQtMC4wMjg4MjQtMC4xMDEzIDAtMC4xNDQ1M2wxLjMzOTgtMS4zMzk4em0xLjQxMjEgMS4zNjkxIDEuNzQ0MSAxLjc0MjJjLTMuMTEzMSAyLjU5NDItNi41NDI0IDQuODAxLTEwLjIwMyA2LjU0NDl2MC4wMjczNDNoLTAuMDE1NjI1Yy0wLjE4NzM2IDAuMTAwODgtMC4yODczOCAwLjMwNDA5LTAuMjQ0MTQgMC41MDU4NmwwLjQwMjM0IDEuNzI4NWMwLjAyODgyNCAwLjExNTMtMC4wMjg3NTkgMC4yMzE0MS0wLjExNTI0IDAuMjg5MDYtMC4wODY0NzUgMC4wNzIwNjQtMC4yMTUwNSAwLjA3MjA2NC0wLjI4NzExIDBsLTIuNDUxMi0yLjUyMzQgNy41MjM0LTcuNTM3MSAzLjY0NjUtMC43NzczNHptLTExLjU1OSA4LjY3NTggMi40NTEyIDIuNDM1NS00LjIwOS0wLjI3MzQ0Yy0wLjA1NzY1Mi0wLjAxNDQyLTAuMTE2NDUtMC4wNTgzMjMtMC4xMzA4Ni0wLjEwMTU2LTAuMDE0NDE5LTAuMDU3NjQ4LTAuMDE0NDE5LTAuMTE0OTYgMC0wLjE1ODJsMS44ODg3LTEuOTAyM3oiIG9wYWNpdHk9IjEiIHN0cm9rZS13aWR0aD0iLjE0NDEyIi8+CiA8L2c+CiA8ZyBpZD0iZzUzIiB0cmFuc2Zvcm09Im1hdHJpeCguMzc2NDkgMCAwIC4zNzY0OSAxMS43ODMgMjMuODYpIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50ODcwKSI+CiAgPHBhdGggaWQ9InBhdGgyMiIgdHJhbnNmb3JtPSJtYXRyaXgoMi42NTYxIDAgMCAyLjY1NjEgLTMxLjI5NyAtNjMuMzc0KSIgZD0ibTMxLjM4OSA4LjAwNTljLTExLjY0OCAwLjI3MDQxLTIxLjY2MyA5LjAyMTctMjMuMTkxIDIwLjkzNC0xLjY4NjMgMTMuMTQ0IDcuNTk2MSAyNS4xNzcgMjAuNzQgMjYuODYzIDEzLjE0NCAxLjY4NjMgMjUuMTY1LTcuNTk0MSAyNi44NjUtMjAuNzM4IDEuNjg2My0xMy4xNDQtNy41OTUzLTI1LjE3OS0yMC43NTQtMjYuODY1LTEuMjMyMy0wLjE1OTQ0LTIuNDU1Mi0wLjIyMTMzLTMuNjYwMi0wLjE5MzM2em0xMS44NTkgOS4wMjczYzAuODU1NzQtMC4wMzYwMzEgMS43MjQxIDAuMjMyMSAyLjQzNzUgMC44MDg1OWwtMy4yMjg1IDMuMjEyOWMtMC4wODY0NzUgMC4xMDA4OS0wLjA4NjQ3NSAwLjI0NDgxIDAgMC4zNDU3bDIuNTA3OCAyLjQ5NDFjLTEuNDEyNCAwLjY5MTgtMy4xMTM2IDAuNDAzNDctNC4yMDktMC43MjA3bDAuMDEzNjcyIDAuMDI5Mjk3Yy0xLjM5OC0xLjQ1NTctMS4zNDA0LTMuNzYyMSAwLjExNTI0LTUuMTYwMiAwLjY2Mjk3LTAuNjM0MTUgMS41MDc1LTAuOTczNzQgMi4zNjMzLTEuMDA5OHptMi43ODMyIDEuMTM4N2MxLjMyNTkgMS40MjY4IDEuMjgyOCAzLjY0NzctMC4xMTUyMyA1LjAzMTItMC4xNzI5NSAwLjE1ODU0LTAuMzQ3MDUgMC4zMTc1Ni0wLjU0ODgzIDAuNDQ3MjdsLTIuNDA2Mi0yLjQwODIgMy4wNzAzLTMuMDcwM3ptLTAuMTIxMDkgMS44NTM1Yy0wLjA1OTQ1MS0wLjAxMDgxLTAuMTIzOTktOC43NGUtNCAtMC4xODE2NCAwLjAzNTE1Ni0wLjEyOTcxIDAuMDU3NjUyLTAuMjAyMTggMC4yMTU5OS0wLjE0NDUzIDAuMzQ1NyAwIDAuMDE0NDIgMC4wMTM2NzIgMC4wMTQ4NzcgMC4wMTM2NzIgMC4wMjkyOTcgMC4xNDQxMiAwLjI4ODI1IDAuMTE2NTggMC42NDc1Ny0wLjA5OTYwOSAwLjg5MjU4LTAuMTAwODkgMC4xMDA4OS0wLjExNjUxIDAuMjc0MTEtMC4wMTU2MjUgMC4zNzVsMC4wMTU2MjUgMC4wMTU2MjVjMC4wNTc2NSAwLjAxNDQyIDAuMTI5ODUgMC4wMTQ0MiAwLjE4NzUgMCAwLjA3MjA2MiAwIDAuMTU3OTMtMC4wNDM5MSAwLjIwMTE3LTAuMTAxNTYgMC4zNjAzMS0wLjQxNzk2IDAuNDMxMy0xLjAwOCAwLjE3MTg4LTEuNDk4LTAuMDM2MDMxLTAuMDUwNDQ1LTAuMDg4OTg2LTAuMDgyOTQxLTAuMTQ4NDQtMC4wOTM3NXptLTcuMjQ2MSAyLjUxNzZjMC41MTU5MiAwLjA0MTY2MSAwLjkyMDk3IDAuMjg1NyAxLjMyODEgMC42MTcxOS0wLjQ0Njc5IDAuMDE0NDItMC44NjQ1NyAwLjE4NjgzLTEuMTgxNiAwLjUwMzkxbC04LjkwODIgOC45MDYyLTEuOTAyMy0xLjkwMjNjNi41NzIxLTYuNTYxMyA5LjExNjMtOC4yNSAxMC42NjQtOC4xMjV6bTEuMzU3NCAxLjE2OGMwLjMxNzA4IDAgMC42MzM4OSAwLjExNzY2IDAuODc4OTEgMC4zNTU0NyAwLjI0NTAxIDAuMjQ1MDEgMC4zNzM3OSAwLjU3NjcxIDAuMzU5MzggMC45MDgyLTAuMDE0NDEyIDAuMzQ1OS0wLjE1ODU0IDAuNjYzOTMtMC40MTc5NyAwLjg5NDUzbC05LjM4MjggOC4yNzM0LTEuMTk1My0xLjI1MzkgOC44NzctOC44MjIzYzAuMjQ1MDEtMC4yMzc4IDAuNTYzNzgtMC4zNTU0NyAwLjg4MDg2LTAuMzU1NDd6bTEuMzgyOCAyLjIzMDVjLTAuMzAyNjYgMi42ODA3LTQuMDc4MSA2LjQ4NTQtNy45NTUxIDEwLjE4OWwtMS42NzE5LTEuNjcxOSA5LjM4MDktOC4yNTc4YzAuMDg2NDc1LTAuMDcyMDYxIDAuMTc0MDMtMC4xNTg4OCAwLjI0NjA5LTAuMjU5Nzd6bS0xMy43NSA1LjAxNTYgMS43NzM0IDEuODE2NC00LjAyMTUgMC44NjMyOGMtMC4wODY0NzUgMC4wMTQ0MTktMC4xNzMwOS0wLjA0MjQzNC0wLjE4NzUtMC4xMjg5MS0wLjAxNDQxMi0wLjA1NzY1Mi0yLjY5ZS00IC0wLjEwMTI5IDAuMDQyOTY5LTAuMTQ0NTNsMC4wNDI5NjktMC4wNTY2NCAyLjM0OTYtMi4zNDk2em0yLjI3NzMgMi4zNDk2IDAuOTk0MTQgMC45MjE4OC0yLjIwNTEgMC41NjI1Yy0wLjA0MzIzNyAwLjAyODgzOS0wLjA4NTY2OSAwLjAyODgzOS0wLjEyODkxIDAtMC4wMjg4MjQtMC4wNDMyNC0wLjAyODgyNC0wLjEwMTMgMC0wLjE0NDUzbDEuMzM5OC0xLjMzOTh6bTEuNDEyMSAxLjM2OTEgMS43NDQxIDEuNzQyMmMtMy4xMTMxIDIuNTk0Mi02LjU0MjQgNC44MDEtMTAuMjAzIDYuNTQ0OXYwLjAyNzM0M2gtMC4wMTU2MjVjLTAuMTg3MzYgMC4xMDA4OC0wLjI4NzM4IDAuMzA0MDktMC4yNDQxNCAwLjUwNTg2bDAuNDAyMzQgMS43Mjg1YzAuMDI4ODI0IDAuMTE1My0wLjAyODc1OSAwLjIzMTQxLTAuMTE1MjQgMC4yODkwNi0wLjA4NjQ3NSAwLjA3MjA2NC0wLjIxNTA1IDAuMDcyMDY0LTAuMjg3MTEgMGwtMi40NTEyLTIuNTIzNCA3LjUyMzQtNy41MzcxIDMuNjQ2NS0wLjc3NzM0em0tMTEuNTU5IDguNjc1OCAyLjQ1MTIgMi40MzU1LTQuMjA5LTAuMjczNDRjLTAuMDU3NjUyLTAuMDE0NDItMC4xMTY0NS0wLjA1ODMyMy0wLjEzMDg2LTAuMTAxNTYtMC4wMTQ0MTktMC4wNTc2NDgtMC4wMTQ0MTktMC4xMTQ5NiAwLTAuMTU4MmwxLjg4ODctMS45MDIzeiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg3MCkiIHN0cm9rZS13aWR0aD0iLjE0NDEyIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"postman,http,post,json\"\nLABEL oc.cat=\"development\"\nLABEL oc.launch=\"postman.Postman\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"postman\"\nLABEL oc.displayname=\"Postman\"\nLABEL oc.path=\"/usr/local/bin/Postman/app/Postman\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"postman\"\nENV APPBIN \"/usr/local/bin/Postman/app/Postman\"\nENV APP \"/usr/local/bin/Postman/app/Postman\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/postman/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/postman/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/postman/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/postman/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update powershell dbus-x11 gnome-terminal font-adobe-source-code-pro\nLABEL oc.icon=\"powershell.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlBvd2VyU2hlbGwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyMDQuNjkxcHgiIGhlaWdodD0iMTU0LjUyMXB4IiB2aWV3Qm94PSIwIDAgMjA0LjY5MSAxNTQuNTIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMDQuNjkxIDE1NC41MjE7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIHN0eWxlPSJkaXNwbGF5Om5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMjY3MUJFOyIgZD0iTS00Ny41NDcsMjI2Ljg3MgoJCWMwLTk3LjEyOSwwLjA5NC0xOTQuMjU5LTAuMTk1LTI5MS4zODdjLTAuMDIxLTYuOTgyLDEuNDA0LTguNDExLDguMzg4LTguMzg5Yzk0LjM5NywwLjI5MiwxODguNzk4LDAuMjkyLDI4My4xOTUsMAoJCWM2Ljk4NC0wLjAyMiw4LjQxLDEuNDA3LDguMzg5LDguMzg5Yy0wLjI4OSw5Ny4xMjgtMC4xOTUsMTk0LjI1OC0wLjE5NSwyOTEuMzg3Yy0zLjIzOCwyLjAwOC02LjgzNywxLjEyOS0xMC4yNjgsMS4xMzEKCQljLTkzLjAxNSwwLjA0OS0xODYuMDMxLDAuMDQ5LTI3OS4wNDcsMEMtNDAuNzExLDIyOC4wMDEtNDQuMzEsMjI4Ljg4LTQ3LjU0NywyMjYuODcyeiIvPgoJPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0UwRUFGNTsiIGQ9Ik0xMjAuMTQsMC4wMzJjMjMuMDExLTAuMDA4LDQ2LjAyMy0wLjA3OCw2OS4wMzQsMC4wMTkKCQljMTMuNjgsMC4wNTYsMTcuNTM3LDQuNjI3LDE0LjU4OCwxOC4xMzdjLTguNjM2LDM5LjU2Ni0xNy40NjYsNzkuMDkyLTI2LjQxNSwxMTguNTg5Yy0yLjgzLDEyLjQ4NC05LjMzMiwxNy41OTgtMjIuNDY1LDE3LjYzNwoJCWMtNDYuMDIzLDAuMTM3LTkyLjA0NiwwLjE1Mi0xMzguMDY4LTAuMDA2Yy0xNS4wNDMtMC4wNTMtMTktNS4xNDgtMTUuNzU5LTE5LjQwNEM5Ljg0OSw5Ni4yODcsMTguNjksNTcuNTgyLDI3LjYwMiwxOC44OTIKCQlDMzAuOTk3LDQuMTQ4LDM2LjA5OSwwLjEsNTEuMTA0LDAuMDU3Qzc0LjExNi0wLjAwOCw5Ny4xMjgsMC4wNCwxMjAuMTQsMC4wMzJ6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMjY3MUJFOyIgZD0iTTg1LjM2NSwxNDkuODEzYy0yMy4wMTQtMC4wMDgtNDYuMDI5LDAuMDk4LTY5LjA0Mi0wLjA1MwoJCWMtMTEuNjctMC4wNzYtMTMuNzkyLTIuODMtMTEuMTY1LTE0LjI0NGM4LjkwNi0zOC43MSwxOC4wOTktNzcuMzU1LDI2LjgwNy0xMTYuMTA5QzM0LjMsOS4wMTMsMzkuMzM3LDQuNDE5LDUwLjQ3Myw0LjUyMgoJCWM0Ni4wMjQsMC40MjcsOTIuMDU2LDAuMTM3LDEzOC4wODMsMC4xODRjMTEuNTQzLDAuMDExLDEzLjQ4MSwyLjQ4LDEwLjg5LDE0LjE4N2MtOC40MTMsMzguMDA3LTE2Ljg3OSw3Ni4wMDMtMjUuNDk0LDExMy45NjUKCQljLTMuMjI0LDE0LjIwNy02LjkzOCwxNi45MTgtMjEuODg1LDE2Ljk1MUMxMjkuODMzLDE0OS44NTYsMTA3LjU5OCwxNDkuODIxLDg1LjM2NSwxNDkuODEzeiIvPgoJPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0ZERkRGRTsiIGQ9Ik0xMDQuOTQ4LDczLjk1MWMtMS41NDMtMS44MS0zLjIzNy0zLjg5NC01LjAzMS01Ljg4NgoJCWMtMTAuMTczLTExLjMtMjAuMjU2LTIyLjY4NC0zMC42MS0zMy44MTVjLTQuNzM4LTUuMDk0LTYuMjQ4LTEwLjA0MS0wLjU1OC0xNS4wNjljNS42MjMtNC45NywxMS4xNDgtNC41MywxNi4zMDYsMS4xODgKCQljMTQuMzY1LDE1LjkxOSwyOC43MTMsMzEuODU2LDQzLjMxNiw0Ny41NTZjNS40NTIsNS44NjQsNC4xODIsOS44NTEtMS44MjMsMTQuMTk2Yy0yMy4wNDksMTYuNjgzLTQ1Ljk2OCwzMy41NDctNjguODYyLDUwLjQ0MwoJCWMtNS4xNDYsMy43OTktMTAuMDUyLDQuNzUtMTQuMjA5LTAuODYxYy00LjU4Ni02LjE4OS0wLjM0My05Ljg3MSw0LjQxNC0xMy4zMzVjMTcuMDEzLTEyLjM5MiwzMy45OTMtMjQuODMsNTAuOS0zNy4zNjYKCQlDMTAxLjE0Niw3OS4yNTYsMTA0LjUyNyw3OC4yMzgsMTA0Ljk0OCw3My45NTF6Ii8+Cgk8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkNGREZEOyIgZD0iTTExMi4yMzUsMTMzLjgxOWMtNi4xOTYsMC0xMi40MDEsMC4yMTMtMTguNTgzLTAuMDY4CgkJYy00LjkzMi0wLjIyMy03LjktMi45NzktNy44MzgtOC4xNzRjMC4wNi00LjkxMiwyLjUzNi04LjYwNSw3LjQ2My04LjczOGMxMy41NDItMC4zNjMsMjcuMTA0LTAuMjg1LDQwLjY1MS0wLjAyCgkJYzQuMzA1LDAuMDg0LDcuNDgzLDIuODg5LDcuNDU3LDcuMzc1Yy0wLjAzMSw1LjE0Ni0yLjczOSw5LjEzMy04LjI1LDkuNDY1Yy02Ljk0NCwwLjQyLTEzLjkzMSwwLjEwNC0yMC44OTksMC4xMDQKCQlDMTEyLjIzNSwxMzMuNzgsMTEyLjIzNSwxMzMuOCwxMTIuMjM1LDEzMy44MTl6Ii8+CjwvZz4KPC9zdmc+\"\nLABEL oc.keyword=\"powershell,powershell\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"gnome-terminal-server.powershell\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nENV ARGS=\"--class=powershell -- /usr/bin/pwsh\"\nLABEL oc.name=\"powershell\"\nLABEL oc.displayname=\"Powershell\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/hlp;\"\nLABEL oc.fileextensions=\"hlp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"powershell\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--class=powershell -- /usr/bin/pwsh\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/powershell/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/powershell/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/powershell/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/powershell/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update putty\nLABEL oc.icon=\"circle_putty-unix.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI1MTkuMiIgeDI9IjUxOS4yIiB5MT0iMTAyNC44IiB5Mj0iNC44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wNjM1ODYgMCAwIC4wNjM1ODMgLS41NTYxNyAtLjU1Mjg1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNjA2MDYwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQxNDE0MSIgb2Zmc2V0PSIuMDE5NTUxIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTFlMWUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZyIgeD0iLS4wMzE2NTIiIHk9Ii0uMDQxOTQ3IiB3aWR0aD0iMS4wNjMzIiBoZWlnaHQ9IjEuMDgzOSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC42MTA2NTg0MiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjQwOS41NyIgeDI9IjQwOS45NCIgeTE9IjU0Mi44IiB5Mj0iNTA0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDUyMywwLDAsMS4wMjc2LC03Mi41NjgsLTguNjkzMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg2ZDBmYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNzk0ZjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJoIiB4MT0iMzg2LjU5IiB4Mj0iNDE0LjQ5IiB5MT0iNTMyLjk3IiB5Mj0iNTMwLjU5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC44NTcxNyAwIDAgLjg1NzE5IC0yOTEuNDMgLTQxMi4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlYmViZWIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iaSIgeD0iLS4wNTk5OTgiIHk9Ii0uMDYwMDAyIiB3aWR0aD0iMS4xMiIgaGVpZ2h0PSIxLjEyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjY5OTk5NzkyIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iNDguNSIgeDI9IjQ4LjUiIHkxPSIzOSIgeTI9IjU4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4xNzIzMSAwIDAgLjE3MDI1IDE1LjY1MSAtMTA1LjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTc2OWNjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzVlZTZmYiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoMi4xNDI5IDAgMCAyLjE0MjkgLTgyNi4zNiAtMTEwNy41KSIgY3g9IjQwMC41NyIgY3k9IjUzMS44IiByPSIxNCIgZmlsdGVyPSJ1cmwoI2MpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjczMzMzIi8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMCIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KIDxwYXRoIGQ9Im01MC4yNDkgOC4xOTMycS0zLjg1OTctMi45NzI1LTguNDQ0LTQuNTU1Ny00LjczNzItMS42MzczLTkuODAyMS0xLjYzNzNjLTE2LjU3IDAtMzAuMDAzIDEzLjQzMi0zMC4wMDMgMzAuMDAxIDAgMTUuMTU4IDExLjI0NSAyNy42ODQgMjUuODQ1IDI5LjcwOSAwLjcxMjE2IDAuMDk4NTUgMS40MzM5IDAuMTc0ODUgMi4xNTg3IDAuMjE5MzYgMC42NjEyOCAwLjA0MTMzIDEuMzI1OCAwLjA2OTk0IDEuOTk5OCAwLjA2OTk0IDE2LjU2NyAwIDI5Ljk5Ny0xMy40MzIgMjkuOTk3LTI5Ljk5OSAwLTEuMzA5OC0wLjA4MjY2LTIuNjAzNy0wLjI0NDgxLTMuODY1OC0wLjE4NzU4LTEuNDc1MS0wLjQ5Mjc5LTIuOTA5LTAuODgzODctNC4zMDQ2cS0xLjMyODktNC42ODkyLTQuMDgyMi04LjcyNjUtMi43MjE1LTMuOTc3MS02LjU0MDEtNi45MTEyeiIgZmlsbD0idXJsKCNlKSIgc3Ryb2tlLXdpZHRoPSIuOTk3MjQiLz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC40NjU4NiAtLjA1NTU2NiAuMDU3MjU4IC40NTIwOSAtMjExLjQxIC0xNTYuNjMpIj4KICA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjczNSAuMjEzMjUgLS4yMTMyNSAxLjczNSAtNDYuMTE3IC01MjkuNzYpIiB4PSIzMzQuMjMiIHk9IjUxMy4xMyIgd2lkdGg9IjQ2LjMwMyIgaGVpZ2h0PSIzNC45MzkiIHJ5PSIxLjY0NDIiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWxsPSJ1cmwoI2EpIi8+CiAgPGcgZmlsbD0iI2Q1ZmZmZiI+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ5OC4zNSIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODkuODMiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDgxLjMxIiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjQ2NTg2IC0uMDU1NTY2IC4wNTcyNTggLjQ1MjA5IC0yMDYuNDEgLTE0OS42MykiPgogIDxyZWN0IHRyYW5zZm9ybT0ibWF0cml4KDEuNzM1IC4yMTMyNSAtLjIxMzI1IDEuNzM1IC00Ni4xMTcgLTUyOS43NikiIHg9IjMzNC4yMyIgeT0iNTEzLjEzIiB3aWR0aD0iNDYuMzAzIiBoZWlnaHQ9IjM0LjkzOSIgcnk9IjEuNjQ0MiIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuNzUiLz4KICA8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCgxLjczNSAuMjEzMjUgLS4yMTMyNSAxLjczNSAtNDYuMTE3IC01MjkuNzYpIiB4PSIzMzQuMjMiIHk9IjUxMy4xMyIgd2lkdGg9IjQ2LjMwMyIgaGVpZ2h0PSIzNC45MzkiIHJ5PSIxLjY0NDIiIGZpbGw9InVybCgjYSkiLz4KICA8ZyBmaWxsPSIjZDVmZmZmIj4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDk4LjM1IiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ4OS44MyIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODEuMzEiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICA8L2c+CiA8L2c+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KC44NTQwOSAuMDcyNTY5IC0uMDcyODMgLjg1NDA5IC0yNTUuMzcgLTQzNS4yNikiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNpKSIgb3BhY2l0eT0iLjI1Ii8+CiA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguOTk2NDEgLjA4NDY2MiAtLjA4NDk2NCAuOTk2MzggMCAwKSIgZD0ibTYzLjkyOSA0My43ODFhMTIgMTIuMDAxIDAgMCAxLTEyIDEyLjAwMSAxMiAxMi4wMDEgMCAwIDEtMTItMTIuMDAxIDEyIDEyLjAwMSAwIDAgMSAxMi0xMi4wMDEgMTIgMTIuMDAxIDAgMCAxIDEyIDEyLjAwMXoiIGZpbGw9InVybCgjaCkiLz4KIDxwYXRoIGQ9Im01MCAzOS03IDExaDZsLTIgOCA3LTExaC02eiIgZmlsbD0idXJsKCNkKSIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"putty-unix,putty,ssh,terminal\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"putty.Putty\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"putty-unix\"\nLABEL oc.displayname=\"Putty Unix\"\nLABEL oc.path=\"/usr/bin/putty\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"putty-unix\"\nENV APPBIN \"/usr/bin/putty\"\nENV APP \"/usr/bin/putty\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/putty-unix/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/putty-unix/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/putty-unix/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/putty-unix/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/putty-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nRUN mkdir -p /composer/bin\nRUN curl -Ls -o /composer/bin/putty.exe https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"putty.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMjAwMTA5MDQvL0VOIgoiaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQiPgo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMTI4LjAwMDAwcHQiIGlkPSJzdmcxMTU4IiBpbmtzY2FwZTp2ZXJzaW9uPSIwLjM5Y3ZzIiBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9hbmR5L0Rlc2t0b3AvZXRpcXVldHRlLWljb25zLTAuMy9zY2FsYWJsZS9hcHBzIiBzb2RpcG9kaTpkb2NuYW1lPSJnbm9tZS10ZXJtaW5hbC5zdmciIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiIHdpZHRoPSIxMjguMDAwMDBwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiPgogIDxtZXRhZGF0YT4KICAgIDxyZGY6UkRGIHhtbG5zOmNjPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzp0aXRsZT5FdGlxdWV0dGUgSWNvbnM8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkZXNjcmlwdGlvbj48L2RjOmRlc2NyaXB0aW9uPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+aGFzaDwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPjwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPmFwcGxpY2F0aW9uPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+Y29tcHV0ZXI8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5pY29uczwvcmRmOmxpPgogICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50IHJkZjphYm91dD0iaHR0cDovL3d3dy5vcGVuY2xpcGFydC5vcmciPgogICAgICAgICAgICA8ZGM6dGl0bGU+QW5keSBGaXR6c2ltb248L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnB1Ymxpc2hlcj4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkFuZHkgRml0enNpbW9uPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpyaWdodHM+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5BbmR5IEZpdHpzaW1vbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxkYzpkYXRlPjwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIi8+CiAgICAgICAgPGNjOmxpY2Vuc2UgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9QdWJsaWNEb21haW4iLz4KICAgICAgICA8ZGM6bGFuZ3VhZ2U+ZW48L2RjOmxhbmd1YWdlPgogICAgICA8L2NjOldvcms+CiAgICAgIDxjYzpMaWNlbnNlIHJkZjphYm91dD0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUHVibGljRG9tYWluIj4KICAgICAgICA8Y2M6cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL1JlcHJvZHVjdGlvbiIvPgogICAgICAgIDxjYzpwZXJtaXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGlzdHJpYnV0aW9uIi8+CiAgICAgICAgPGNjOnBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EZXJpdmF0aXZlV29ya3MiLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMgaWQ9ImRlZnMxMTYwIj4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQxNzIyIj4KICAgICAgPHN0b3AgaWQ9InN0b3AxNzIzIiBvZmZzZXQ9IjAuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogICAgICA8c3RvcCBpZD0ic3RvcDE3MjQiIG9mZnNldD0iMS4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjAwMDAwMDA7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE3MjEiIHgxPSIwLjg1NzE0Mjg3IiB4Mj0iMC42NTUxNzI0MSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTcyMiIgeTE9Ii0wLjQ2MDkzNzUwIiB5Mj0iMC43MzQzNzUwMCIvPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MTgiPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MTkiIG9mZnNldD0iMC4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjcwMDU2NDk4OyIvPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MjAiIG9mZnNldD0iMS4wMDAwMDAwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjAwMDAwMDA7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDMwNDUiIHgxPSIwLjY3NzI5MDg2IiB4Mj0iMC41MDU5NzYwOCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTUxOCIgeTE9Ii0xLjEyOTAzMjMiIHkyPSIwLjg3MDk2Nzc1Ii8+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTU0NCI+CiAgICAgIDxzdG9wIGlkPSJzdG9wMTU0NSIgb2Zmc2V0PSIwLjAwMDAwMDAiIHN0eWxlPSJzdG9wLWNvbG9yOiMzNzUzNjc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTQ3IiBvZmZzZXQ9IjAuNDMxNTY0MjQiIHN0eWxlPSJzdG9wLWNvbG9yOiMzZTZhOGM7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTQ2IiBvZmZzZXQ9IjEuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6IzhjYzZlZTtzdG9wLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQzMDQ2IiB4MT0iMC43MDUzMTM5OCIgeDI9IjAuNzM0Mjk5NTQiIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDE1NDQiIHkxPSItMC4zNTkzNzUwMCIgeTI9IjEuNDM3NTAwMCIvPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MTEiPgogICAgICA8c3RvcCBpZD0ic3RvcDE1MTIiIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwMDtzdG9wLW9wYWNpdHk6MTsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxNTEzIiBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmY7c3RvcC1vcGFjaXR5OjE7Ii8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDE1MzciIHgxPSIwLjc3MjAyMDcwIiB4Mj0iMC42MDYyMTc2MiIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTUxMSIgeTE9IjMuNzk1NDU0NSIgeTI9Ii0wLjE0MzkzOTM5Ii8+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50MTgwNiI+CiAgICAgIDxzdG9wIGlkPSJzdG9wMTgwNyIgb2Zmc2V0PSIwLjAwMDAwMDAiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNDA3ODQzMTQ7Ii8+CiAgICAgIDxzdG9wIGlkPSJzdG9wMzI3NiIgb2Zmc2V0PSIwLjY0Nzc3NzgwIiBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjA3OTA5NjA0MjsiLz4KICAgICAgPHN0b3AgaWQ9InN0b3AxODA4IiBvZmZzZXQ9IjEuMDAwMDAwMCIgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MC4wMDAwMDAwOyIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudCBjeD0iMC40OTAzMjI1OSIgY3k9IjAuNTA2NDkzNTEiIGZ4PSIwLjU0MzU1NDAxIiBmeT0iMC4xOTIzMDc3MCIgaWQ9InJhZGlhbEdyYWRpZW50MTUyOCIgcj0iMC40NjAxNDI4OCIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MTgwNiIvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3IGJvcmRlcmNvbG9yPSIjNjY2NjY2IiBib3JkZXJvcGFjaXR5PSIxLjAiIGlkPSJiYXNlIiBpbmtzY2FwZTpjeD0iMTY3LjIxNDkwIiBpbmtzY2FwZTpjeT0iMzAuNzMyNTc4IiBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIiBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1OTciIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzgzIiBpbmtzY2FwZTp3aW5kb3cteD0iLTUiIGlua3NjYXBlOndpbmRvdy15PSI3MSIgaW5rc2NhcGU6em9vbT0iMS41NDU3MzkxIiBwYWdlY29sb3I9IiNmZmZmZmYiLz4KICA8cGF0aCBkPSJNIDgyLjA1NTMxMyAxNzUuODM1MjQgQSA1Ni4xNDMxMDggNTYuMTQzMTA4IDAgMSAwIC0zMC4yMzA5MDQsMTc1LjgzNTI0IEEgNTYuMTQzMTA4IDU2LjE0MzEwOCAwIDEgMCA4Mi4wNTUzMTMgMTc1LjgzNTI0IHoiIGlkPSJwYXRoMjY3MyIgc29kaXBvZGk6Y3g9IjI1LjkxMjIwNSIgc29kaXBvZGk6Y3k9IjE3NS44MzUyNCIgc29kaXBvZGk6cng9IjU2LjE0MzEwOCIgc29kaXBvZGk6cnk9IjU2LjE0MzEwOCIgc29kaXBvZGk6dHlwZT0iYXJjIiBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MTUyOCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0OyIgdHJhbnNmb3JtPSJtYXRyaXgoMS41ODcxNzQsMC4wMDAwMDAsMC4wMDAwMDAsMC4zNTc5NzYsNDcuOTI2NzIsNTguMDE0MDQpIi8+CiAgPHBhdGggZD0iTSA4Mi4wNTUzMTMgMTc1LjgzNTI0IEEgNTYuMTQzMTA4IDU2LjE0MzEwOCAwIDEgMCAtMzAuMjMwOTA0LDE3NS44MzUyNCBBIDU2LjE0MzEwOCA1Ni4xNDMxMDggMCAxIDAgODIuMDU1MzEzIDE3NS44MzUyNCB6IiBpZD0icGF0aDI0NDkiIHNvZGlwb2RpOmN4PSIyNS45MTIyMDUiIHNvZGlwb2RpOmN5PSIxNzUuODM1MjQiIHNvZGlwb2RpOnJ4PSI1Ni4xNDMxMDgiIHNvZGlwb2RpOnJ5PSI1Ni4xNDMxMDgiIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDE1MjgpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoxLjAwMDAwMDBwdDsiIHRyYW5zZm9ybT0ibWF0cml4KDEuMzIzNTEyLDAuMDAwMDAwLDAuMDAwMDAwLDAuMzE0OTU1LDM4LjI2MDYwLDYxLjcxNDQwKSIvPgogIDxwYXRoIGQ9Ik0gMjQuNDA3Mzc4LDIxLjEyNzQ5MCBDIDE3LjU1NjcwMSwyMS4xNjQxMzEgOS40MjM5MDM2LDI5LjQ4NTU4NyAxMC40OTIzODEsMzYuMjUyNDk3IEwgMjEuMzgyMzg1LDEwNS4yMjI1MiBDIDIyLjI1MjMyNCwxMTAuNzMyMTAgMjYuNjk1MDExLDExNy45OTk0NyAzMi4yNzIzODksMTE3LjkyNzUyIEwgMTI2LjA0NzM3LDExNi43MTc1MiBDIDEzMS4xODg0NSwxMTYuNjUxMTggMTM2LjQzNjc1LDExMS40NTM3NCAxMzcuNTQyMzQsMTA2LjQzMjUyIEwgMTUyLjA2MjM3LDQwLjQ4NzQ5OCBDIDE1My44MzE4NCwzMi40NTEwOTMgMTQ1Ljc3MTE4LDIwLjQ3ODQ4MiAxMzcuNTQyMzQsMjAuNTIyNDg5IEwgMjQuNDA3Mzc4LDIxLjEyNzQ5MCB6ICIgaWQ9InBhdGgyNjUzIiBzb2RpcG9kaTpub2RldHlwZXM9ImN6enp6enp6eiIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDE1MzcpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoyLjEyNTAwMDA7c3Ryb2tlOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MS4wMDAwMDAwOyIvPgogIDxwYXRoIGQ9Ik0gMjMuODAyNDA3LDM1LjY0NzQ5MyBMIDMzLjQ4MjM2OSwxMDUuODI3NTEgTCAxMzAuMjgyNDIsMTAyLjgwMjUyIEwgMTM4Ljc1MjQ5LDM1LjA0MjUwMiBMIDIzLjgwMjQwNywzNS42NDc0OTMgeiAiIGlkPSJwYXRoMjY1NCIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDMwNDYpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50MzA0NSk7c3Ryb2tlLXdpZHRoOjEuMTQ3MTk1MjtzdHJva2Utb3BhY2l0eTowLjMxMjg0OTEzOyIvPgogIDxwYXRoIGQ9Ik0gMjMuODgyNTE4LDIwLjY1MDQ2OSBDIDE0LjkxMjc4MSwyMC42ODM4OTkgMTEuMzE5MDc5LDI2Ljk4OTE1NiAxMi4zODc1NTYsMzIuOTcwNTAwIEMgMTcuODgyOTk2LDI3LjU3NjY2NyAyMC4wNTA4MzEsMjUuNDY0NTA5IDI1Ljg0ODc4MSwyNS4zNDE1MTQgTCAxMzAuMzYyNTEsMjQuNDQ1NDc2IEMgMTQxLjU1NTA0LDIzLjY3MjQxOSAxNDIuMjQxOTMsMjcuMDk4MzQ0IDE0OS40MjAwMCwzNC40NDYzNDAgQyAxNDkuNzQzNTQsMzAuOTA1NzY5IDE0NS4yNDYzMiwyMC4xOTgxMjQgMTM3LjAxNzQ3LDIwLjIyODc5NyBMIDIzLjg4MjUxOCwyMC42NTA0NjkgeiAiIGlkPSJwYXRoMjY1NSIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY3p6IiBzdHlsZT0iZmlsbDojMTkxOTE5O2ZpbGwtb3BhY2l0eTowLjIwNzU0NzE3O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoyLjEyNTAwMDA7Ii8+CiAgPHBhdGggZD0iTSAyMy4zNTg4MzksMzEuNzkxMjk2IEMgMjMuMzU4ODM5LDMxLjc5MTI5NiAzOC4xMTc2NjgsNzEuMjE5MTU3IDYyLjAzODkwOCw2NS4zNjE2NTcgQyA4NS45NjAxNDksNTkuNTA0MTU3IDExNy40MzU0OSw1NS45ODk2NjQgMTI0Ljk4OTU1LDc4LjI0ODE4MSBDIDEzMi41NDM2NCwxMDAuNTA2NjkgMTMwLjAyNTYyLDk5LjMzNTE4NyAxMzAuMDI1NjIsOTkuMzM1MTg3IEwgMzMuNTM2NDM2LDk4LjE2MzY4NyBMIDIzLjM1ODgzOSwzMS43OTEyOTYgeiAiIGlkPSJwYXRoMjY1OCIgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxNzIxKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwcHQ7Ii8+PHRleHQgaWQ9InRleHQxMjMyIiBzdHlsZT0iZm9udC1zaXplOjEyLjAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDAwMDAwcHQ7Zm9udC1mYW1pbHk6aGVsdmV0aWNhOyIgeD0iMS4wODA3NzYxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB5PSIxODAuMzI4MzUiPjx0c3BhbiBpZD0idHNwYW4xMjMzIj5UZXJtaW5hbDwvdHNwYW4+PC90ZXh0Pjx0ZXh0IGlkPSJ0ZXh0MTIzNSIgc3R5bGU9ImZvbnQtc2l6ZToxMi4wMDAwMDA7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0O2ZvbnQtZmFtaWx5OmhlbHZldGljYTsiIHRyYW5zZm9ybT0ic2NhbGUoMC4yNDY3MjksMC4yNDY3MjkpIiB4PSIyMy4xODgzNTEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHk9Ijc1Mi40Mjg2NSI+PHRzcGFuIGlkPSJ0c3BhbjEyMzYiPlNWRyAgSW1hZ2UgQ3JlYXRlZCBieSBBbmRyZXcgRml0enNpbW9uPC90c3Bhbj48dHNwYW4gaWQ9InRzcGFuMjE5NSIgc29kaXBvZGk6cm9sZT0ibGluZSIgeD0iMjMuMTg4MzUxIiB5PSI3NjQuNDI4NjUiPkljb24gaW5zcGlyZWQgYnkgR2FycmV0cyBCbHVlY3VydmUgR2FpbSBpY29uPC90c3Bhbj48L3RleHQ+CiAgPHBhdGggZD0iTSA3Mi43Nzc0NjIsNjguNjkzNTY4IEwgNzIuNzc3NDYyLDczLjIzNTU4OCBMIDU3LjYwMTg5OSw3My4yMzU1ODggTCA1Ny42MDE4OTksNjguNjkzNTY4IEwgNzIuNzc3NDYyLDY4LjY5MzU2OCB6IE0gMzYuNTA3Mjk2LDQ3LjYwMzA5OCBMIDM2LjUwNzI5Niw0My4yMDE5MTYgTCA1NC43OTIxMzcsNTEuMzUyOTA2IEwgNTQuNzkyMTM3LDU1LjUwNzYyMyBMIDM2LjUwNzI5Niw2My42NTg2MTQgTCAzNi41MDcyOTYsNTkuMjU3NDMyIEwgNTAuMjcwODQ3LDUzLjQ0Nzg2OSBMIDM2LjUwNzI5Niw0Ny42MDMwOTggeiAiIGlkPSJ0ZXh0OTM3IiBzdHlsZT0iZm9udC1zaXplOjI0LjAwMDAwMDtmb250LXN0eWxlOm9ibGlxdWU7Zm9udC13ZWlnaHQ6Ym9sZDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuNzk4NzQyMTI7c3Ryb2tlLXdpZHRoOjEuMDAwMDAwMHB0O2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7Ii8+Cjwvc3ZnPgoK\"\nLABEL oc.keyword=\"putty-wine,wine,putty,ssh,terminal\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"putty.exe.putty.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nENV ARGS=\"/composer/bin/putty.exe\"\nLABEL oc.name=\"putty-wine\"\nLABEL oc.displayname=\"Putty Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/wine64\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"putty-wine\"\nENV APPBIN \"/usr/bin/wine64\"\nLABEL oc.args=\"/composer/bin/putty.exe\"\nENV APP \"/usr/bin/wine64\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/putty-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/putty-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/putty-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/putty-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends qelectrotech && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"qelectrotech.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxMi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDUxNDQ4KSAgLS0+Cgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiCiAgIGlkPSJMaXZlbGxvXzEiCiAgIHdpZHRoPSIxMjgiCiAgIGhlaWdodD0iMTI4IgogICB2aWV3Qm94PSIwIDAgMTE2IDExNiIKICAgb3ZlcmZsb3c9InZpc2libGUiCiAgIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDExNiAxMTYiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYrZGV2ZWwiCiAgIHNvZGlwb2RpOmRvY25hbWU9IiBRRWxlY3Ryb1RlY2guc3ZneiIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmd6Lmlua3NjYXBlIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL3BpbmhlaXJvL3BpY3Mvb3h5Z2VuLWljb25zL3NjYWxhYmxlL2FwcHMvUUVsZWN0cm9UZWNoMTI4LnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjM2MCIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjM2MCI+PG1ldGFkYXRhCiAgIGlkPSJtZXRhZGF0YTM3NzQiPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUKICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgaWQ9ImRlZnMzNzcyIj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM0MCI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MzQyIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MzQ0IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzMDMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNTMwNSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDUzMDciIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MjY3Ij48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUyNjkiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTMxNSIKICAgICAgIG9mZnNldD0iMC42ODY4MjY5NCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjAuNDk4MDM5MjI7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowLjE2NjY2NjY3OyIKICAgICAgIG9mZnNldD0iMC43ODcyNTk1OCIKICAgICAgIGlkPSJzdG9wNTMxNyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDUyNzEiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTE4MyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MTg1IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNTE4NyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTUzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UzZTNlMztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUxNTUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlM2UzZTM7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MTU3IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3NhbmRfYml0bWFwIgogICAgIGlkPSJwYXR0ZXJuNTE0OSIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTk3MzAxMSwxMTQuOTM4MzUsLTM4LjgwNjk1NikiIC8+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpzdG9ja2lkPSJTYW5kIChiaXRtYXApIgogICAgIGlkPSJwYXR0ZXJuNTY3NiIKICAgICBoZWlnaHQ9IjI1NiIKICAgICB3aWR0aD0iMjU2IgogICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiPjwhLS0gU2VhbWxlc3MgdGV4dHVyZSBwcm92aWRlZCBieSBGcmVlU2VhbWxlc3NUZXh0dXJlcy5jb20gLS0+PCEtLSBMaWNlbnNlOiBjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIC0tPjxpbWFnZQogICAgICAgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQVFJQUl3QWpBQUQvMndCREFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCIEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUgvMndCREFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIgQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUgvd0FBUkNBRUVBUVFEQVNJQSBBaEVCQXhFQi84UUFIUUFBQWdJREFRRUJBQUFBQUFBQUFBQUFCZ2NGQ0FBREJBa0JBdi9FQUVJUUFBSUNBQVVEQkFFQ0JBUUZBd0VJIEF3VUdCQWNCQXdnVkZnQVhKUUlSRkNZbklUVVlKRFpGRXpFM1Jna1NRVlZXS0ZGMVpUUTRSMWRoWm1kMmhZYVYvOFFBR1FFQUFnTUIgQUFBQUFBQUFBQUFBQUFBQUFnTUFBUVFGLzhRQU94RUFBZ0lCQXdNREJBRUJCZ1VEQlFFQUFRSURFUklFRXlFQUlqRWpNa0VVUWxGaCBNME1GSkZKaWNZRTBVNUdoc1JWamNuT0N3dEhoOFAvYUFBd0RBUUFDRVFNUkFEOEFyMnlDNm5yUkxyZTM2K3p2OEZqZkpMWW4wYlpCIGdRdEMyaDN1NG9IcCt5S3JXME5iRDJCTXNiYjN3NjRFMFlXK1hrTWVBaHVyamdBQmdBcUtnOEQrd1BpU3JwSDhkRGpBdTdUNWFOajAgMlNzQzdhWGE0ZElWUFQ5YzJNSlBSYTN3WkJFeTFJVkpRQXlxMnNFRUNuczlscytLTjlKZHF2MkJnZmw5Z0Fmb3dWRkhnNi9nV28xVSBqUDAza3FmNFRXN0NZVmJPY1BtdVN4TEtLL0g2MitIVzZmTEhoMVJESDc0aDJaM2tGKzd4dmxYSS9hSUFBNThmOCtId3JjcDljdml2IGU1ZVZWdEp1NlNTaU1DUzdJOWVzbjhMNlFVS0dHRDdnbnNqNStPRDJuOXRPTGRRRTFkWFpxek9Pd1Nyamx1Z0Q1L253RHo0eVJ5WVQgR1daMmRJeklra2ZwU05BdGJJVmlYd3UzczB3OGNmbVJMRzd3UEdtQ1BOR1MyV1c0NUhlL2dZMzIwTE5mbnA1SjQ5MGdaZVRtMUxEQyBVUFlLR2t5OU45MldRWTRIYlRRNzIxcWdNT0MxekNHbnVCQ1o4Q2o5US9BK0NvYUh0bjR1NE9BUGVBQU1HLzR2aTdOTTlINVZvSitvIGUzMHJzUGxXbzJzSkF4aElpQjJoTjU1Rk1FSWI1Q2hyWWNjNFFWS3dJRnFKN040c1p3Zm0xb28vZ1BBWThCNldOVDJZRHI2NURKbXYgYmFKWnprSHE3cytCc0llcGh5aC9zM2FIZEJ3Y0VPR0h0UmdtSE9Id0ozQmlkTnRBd1lqOXJra0Y1LzMrL2RTTlowVzBYSklEMUxYMSBWMG0rU251Z1lrZ0FoMU93bUhJVVhsUmY1d3pxRXRTeUVNZWhxdEQzQldqd3lMUFp0WFpoanc3QkxSLzZIK2Zuai9VbmNSNHp4ek9yIHlvNmFoREQyTEFjTndwSXp0SE5YR1FmVG5IdHFzajFJaXpyTHBwNEZLUlBDOFdkSEhoOHdDb1NWTXFVa3h5SmRkd2FoU1VqcTlmejYgZm1EN2ZyR05USzI3UnJOa2FNN2xyZXNueHlRN0JmQU1NZ1ltQ0U5a1VCMitWS1BmSUtlalBLdXI4bTRUKy83K0ErZzRiLzJIRWR3eiBiTXZKenh1Qy9rT2xnTlhKQThsV1ZmdG44TkpSaHNhS1lIMlRXOTFtQTh4aC9rQjZsWTB6YzFkb0pvd00xVnhzSHg4QWduK0E4QjZZIFQ0NGFqSHl2NjN6V2pQc2g4VWdMSUpUbFViSXJLYlYxWHNMU0JReDBORFc0YjVNcjl3Zzgvbm5FTm1SaWdwNVJ2ellrN0IrWGQvOEEgUHIvWlVjekxWNmZhclFnVkxWM3p6RC9ZVkh1QUg1YWVCS0NZb0Z3WGpOOEovd0FPdHlEaDdrRktDdG95TnlpekJtOWhRbHFWRGJxQyBmZmorRDlpZllSS3F4c3hmMUpGVENOTWtqdjcweVl5TElQdGFTU1d1Y1FPY282d0gwNFV4MmtkbWtac3BKS3dBVjhRa1F4NW94eEpkIG5MTGl1T3A3UVUzZFhzSUMydmhLN0xHc0kzZHp4cHBQV3d3aDd1S1VOYlVXWVFYTElaSEQ4ZjhBQjIxZmJWWGpUTTBDeGlNRGRuYzAgREFQMUIxRndIWUg3QXFyTTVxRlRhekcyRG0xdXRtRnh4TjNkSHRTMmsvdVIyNTdOMUtIK0dIcmREd1ErU0hLMDdsbkxnd1dTbE5zdyB4SHBNSTdiQUE1L2l2bno2Q2dpdDRQQkN3Y3d6YjRIRmJzNW9XNUs5ZERzQmFGT3EzeUxYdGMwMnlWZXQxV3Qyb0g0K0hhbTFnQWczIEJack44M1RZN1JkdURvUFBzUDMvQUtnYndIc2xnMm8xV3FHdVpBVzR0cU5wYXAycVpIYkErbk9WTFZ6d2V2dzdJSDFJQjZUSEdFZEQgcjg5QmhpM2xvRkUyYjk3dzU5N2Y1NEFCa2tacFN4WjMzYWtKTDV4bzdVSGlqZWhuaHhrMktYYTBvSFVpWEVNbVNKZzVTMGpyT3NlUyBNelZYNHMwQ2Vlb0VkbDFQS3JNd0J5bkJ0R3E1S05wN0lEY240bnhRUGZnV3lFRStHK0xhMnRrREJ6a0VCSHJmMmFiNEdrMGMyN2M0IDJCK1FRSG4wSHJkWUdYRHErNEprQ3hrODJIN3dWTFlLdVNpT0R1WVYxZXZIeG9vZGdaRU1Qeng5SG1BZjdIdGd4REZzek53bm0xNGYgcnY4QXdGQndBZGl1NkIzd3hVc0FvMXY4MnhueGtkMmdPbmo2OVExZUxMUFNsdGdyZFA4QWgyb3lEMlN1UUpIdmdZV1ZrWHhuZkFqdCBTWno5L3dEN0JoUHRnZTZGd3BkaWJWV2NOVlF5UzJyeVBEY1Zkc2hsSmJEWEo1YnNDdHpFd05NRDEvZzg0MmZiVUV3em95dTBMTlFIIE9FdXh6Z093QVAzOWdhaXVWUnZPYnFsVmhxSXJvWDkyR1g0NXlJOGl1cHVKSzBqT01jYzZGM2UySTcrQjdzZ1AxNDV2aGcwdlY5ZDIgV0x0b1cwV1RHVks1eWFkYkhDdDNZd3ZNbW55cGJDN1NwNi9hbDJwNGREdFN2MXVDZVlFTkd1QW43L1p2ZElTUVovOEFyNCtBQVB5LyBXbFBlRS90V2t0cjVEd28xWHM1dGxoMG15TFlxZGtLVWpZZTF3MThPeVBsRGh3NDlibk5xZlBnek1Wa29MWmlmOWJkb2dCL3dHTDk3IDJFVDJ0a3I2bGlXVUd1QWxFclN3Z2t0Z3RTcTNCZU1OQ3V2RkxrVzhBOHlHeVExdFBaRWNDNDl1ZHNSaWxvak5qQ0pPK2NCUWZmMzYgWGluRHFzV1ljRTBYcUViWmxYamUwOGhxdWFTV01ORXJUZ2gxZk1JUS9lWXQvd0E0anRyQUJCek5zdzRLVDl0a2VNR0ErQSsvZTNTciBmWmxXUjhOMloyUUtNNUhqR0dMeHBhNVhaeUdReEFYazN3SktyVFJyZGU0azRvdnRyTjZPRjBhN1RaRGZqcXhjTjBjQmVZNGJOVlpKIFBNbUcyMlZkUHlSOWhUQUthd2xiR2hqekNHNEIvcjdKQm4xOVdqVVl0KzMxZFg3UWRrelp2WU4vNERib0RnSUNxSU5zdEJJMDdWN1IgWWF1Q2NPNlVwdHRndzFOVHhacjVMUTBqZm9aQ0crVEllbVBoOFBzc25nWjNCc1dobzV6dmZDZC8yRGY5L1BvUFI1VWF2WDRHUGsyWCBhRjVPeUhkd2RsRTEreURXQmVjS3Y1WWVvZUd3R0Zzd1ltTW16ZzU5WDc0SDR3TGFCak52ZFhlQTJBQWY4QmgxRHZraVdrUGhKTmdWIEtic0trWWNubEZlMkU0Y2JxOFdXRi9EWUZ0d2ZGdUd0anpFRnRzREVHeW93eDhmQmhQdWtFMk5CL2Z3QUR3QlFpTlpzQ0hsZEtkbFIgTDJhOFRHbU9XRm1rNHlzOXc0SkdUY0M5dllrbkdmbk5PREltUEdOMnZObi9BRVBRMnRzbGZ4WWV5bnJVN00xeUhweW5IaUhuVitKbSBBWHhJY25LcTAraDMyWXRoMlMwRERVZXIvVVBWYko5b1Z5Wk00azFjRU9JUDBGQjZZVFF2MkFNdFFiV21xQjJXM3k3cVpHbG1CMmhqIDlYYktBVjJGb2xJZmV6NWtOd1R4NFo0UGQ2ZmhqSG1yL3dCTjhDZWY3Ukg5L0FiQUFHNlBwTkRxV0hYekdyMlJ2MmxXcFpMWkhodTEgZ3BOYjIwbTBOWTFqSjVBd3RoM0RraWZET0hTTGJPMnlzeXF2Mnp0UkpTVFp6RS92K0gwRStBVXVXaHBhUWhtRWRvVDdrSktTUXQ2aCBjRU5QWUphSFl5Ylh0MmxEQ2VZUXc5VncwOWdXMnJ0Zjl3eEp2bkdXWjRDQkRaejhSZmZsOSs5eFpadlFHU042S1Jia01lMy9BRFZ3IGt1Ylp4akQxWXNGekpRWktPaWlaTXBXMm5HYjUwODI1NStCNmFWVmNubksvaXVRTy9KbVhYTEJNcVdLMU8weW0zeHRyMWY0M0orR0wgdHBJMzdqN0ppeUdPejVBeE9uOFJlREF3bnRpeThuTWNlRDhBUDcvKy9nUFdMVWhZRjZXcWhuNTl5RWh1bSs2WHdJV1J6RmhWUlU4UCBhN0RwRjhxdXNBOWJ2a08rR1JnM3pqN1kxSjlHNFdnTHJNbThHd2lTYnQwQnNIWG52bG80c1dMR3ZsdEtwSlBTR1JrWWEzMzVJVTAvIGRLeUZ2aGpqYmhNMDloektjSEJubUFDRDNQYTN3bXNvL20zamYrQW9KL2dMOGZlVXhIdlRUd0x1eVZQaC9NcmthcFM3QStHd01LMkIgMCt5eGJRSDVnWlc1Z2Z2QUhycWZaNzVSNGNtemZyV2U5dTNCK0FnSDcrd2ROWVJOT3VXYXpLaU9HS2VtbWRDbzN5OVM4TzQ0cGp4dyBjdUdDTjQ5TXhrQ0hUdE1xdVE5eUsrbnJOV2p4OUdSVEt1MUprOVczYjBqVU5sdU5JcThiWDJvSWxhSUV5dHFWaEk5ZTJwUjltbUt2IFBLY3BvNC9NTUI1a09hUW1jODM0Sit2QS9CcE4yQkhnQWZmUUI5K1FPcDRvVWowWU1zZzlUWmk0ekdhaHU5aE1DSG5HT3o1NW8ySDUgakJNTUdYeERtWU1pcStiQk9UM25pN1IrS3JSMlE2QVBvUDhBcEZzQjg4RjZtTDAwN3RGSjJyWDFuVUJhcmJaQzJrTUhDQ0M4SHNaWCBseWhjTndxdERodmljdHI2Zk9RN1FBbzc1eGxwUTZ6L0FON1k3L3NCL3dEejYwdHRtQjNKSDFnZHk5TWJZcTNTN0pLOUgwK05TZnc4IFhLcEdVaDJRd1RIeDhvZXEwOWdoenVIOEgvR2FIYUtNTU9PeHNKc0lEWUFGUlBwL3BDaGhjTHd1Mm1rcVpwei9BSGxHTWxkc1pxTDIgVmJIbklNT0Z4NUVzeDNIU1ZJM1Z5aWxQUkF4eHMxMzUzWUlIR05mZG4ybXlYM01zdVlCdHF3ZFMxdFpLazRWZFdVZGtHdUVTcTVWOCBXRWVpR05RT3ptRU9xekZmcllMVkxjQUY1c2dtVGZGY1k5UEFSSnBONDMrM2ZQOEFBVUVBRXgzQlBBMnc0WnRqR0tVdFVNdCtZenY0IGQ3TjR1ZWlLOHJidzc0SHJleUUvUytIVlcycjFLdWRzNEdMck1tRHE3VHhTZlB3TDloN2MrMkNIVHg1U2taaWUyNXEycE11bml0NUsgNlFXM1pnaUxjVUR3TXBXN0E0QjYzVDN4RFlKcXFQY0xMbzliV1JuS05zM3MzOSs3dXI5dUg2aTZnU0MzTnJsd3lhMHFBUHZBRmxVYiBDSHQ1S1NrVEl0akNSY1d5T1lMYkk0VnV0MkFuOER4NXdZUmthMEdnbU10VHRkL1VBRDh1b0lEcGpJc2I0UmoyMWhIK2JDazkzNm9mIEI4L0E2RWxsZmRrWEVHdHhpYWRheHh6am80L0lYdU4wUjVITWppVm9lVlVicXJXMGNPQWxkRXNqaTFURTE1VFkyaXBidHNhMnJIQU8gTDRpUkxnNGVuVTl0OWFIVEF1M2lpSDZWZ0ppN0pXTDkzZTM4NnZvVEJoOXJPc3dpNW1LdWxCOFpDUUYzeWFsc0pISlhYY0R1aHlVTSB0YmFiekJicmRiVzdIRHA1Z0dwSjlEUWJJUmxtMEdqYzNoMjV2aCtJbjRBQTVBd1B4Mm4xMkxNb2x6R0Qyb05TWk0ySkZyMm9EK2w1IGZZYjRQWEd3MlBFUTAvaldwdW42VHh0SGxhbGlRZ3cxcG5GbEJlQjN3WUszdmRDZlVMWUFBQTMxVVROTjlsMTNRNFlWVEp2U3ZBckYgSlhtaHFaTEFzeUlybnJZMUJSYTNwOFBEK3VROGJJOGVkQlF5YXh1aFBmRGxvdXh6OVVIOVQ1OCt2ZXprUUVPb2UyakNMdWJjaHgzWCBQY3Q3dHB3Y2NjUExYMDE0ZHRDeXRTVEhUMUE0SXZUdm5zYnNkK0ZxVER1TjVNT0NPVXBSWjA1V2xnV1E3VmV5YXF0T3VhMURsK095IExiZ1ZEaTNONFBVNU1Ub1FlWmF1S0dQWkora3h3OXNDWGVRbWo0UEJvMkVlR0FBZnd3NUJqMDVjdXQ2N0ZXaGttUmJJMnUwKzRhbGIgSkYyT3kvRmh2bHRNSjYwRnV2NWw4R0hDYkQrWXF2bG9xVFV5RGRRb3RXcUFZajJpYkNIT0FvTDlzQy96Nm9xNnVDT1U0dXRsSE5xVSBvZVVreGkyNUdLL0VMZGpKdGdpMWVIN3ZuNVVEajF1Q2VId0RuYUI1N29EQm1MdFNZVDkvUDdCeDgvMDRFZDBJVkJETUxjWEZKc0lwIFQ1UHZRTnIzVUFXZkdnWDhxS1lUOW50U3RvYWd3Ky9JRU5WMnlzM3dxekRIamUwcjhSWUgvd0RQZnlrVEJ2cUlvYzNhRVJ1elN4SzcgU0pqc3l1OHJ4NTRaU1lvcThaRzJGaTF4Rm1SRmRxVFR1cFdUL2x4c2ZWanErZDdGTyt4anQrMWkzUWZlRmdSN0xwOTJjbGRKcE9zVyBoVlVrZ2hYcWV3THkzVXFHa1dOWEtIYUQ3TWh1RndQakJ2a0J2dHF1ZnZLdnBmWnlZUHVpYjd1dno5OStBZTJFYkhxOTAwdE9GYjAyIG0yRU5mTlpGZXN2ZEFDK2FjR3hidTJrWGVyN1FvY2pnM2lFOWJtVmh5cWZZQ21jTUV4aFJEWmtZNGxHOU81eGc4K0F4QWIrdnM1c0ggajZ6TU1zcW9MQ05wR2JER2xrK3psV1FwdmtXWEU1UXR1Q2U0TWkyeVdvUDdjdHRmdnV6c3hNV2hqTjh3eENIQUNEejVBOXovQUVFciBkTGxLV3NUbTlWTGRBaDgxYnB4SVI3T1ExZVdZaXhXemEyUmZoNDJtSFphMkhyZ0p0SHdIaGtXVVlvTFJtWjROcE94OCszOCtBUWQvIDZJUEk2UmtOMmNZczQ5YzVTd1JuZVcrTWR5MDU1QVljWFlvcEdTcFpibVc5d2c1UnRZWEhGNkdWVTJYYUtOZGRqaE1UOHFRN1FNck8galcwN1BqSi9EODFZVU93dUVvVzJBWHhicjljTVVQRDJad1pBYzlRUFBCZ21NYUdqdStqL0FJdTJBQjkvUC81a2xnTFk4cEhwT3h0TyBWeldSZGtVeFVyWXY4a1lLOWNPMTZRVStZUnc3VncwTzRHQmtCZ2JnclNCdGd6akhuRW4vQUg4ZlFmUCtmRmN5eUhRb0NXM2ZOR2pZIGRMQjZLVTBkMlE0ekV0Z1VOaFBja1QwOWtEbUdTWVFod1VPQmROT3JheU1GK1RCbXpmQno3OC83QWdnSDdxTnR5R0tEVmdIYlJmQ1oga294SjIvdDY4V0U0SnA2c3JHRmJmTURMZHdPREp4dmdiQStLdkJobFhsSGpnL05naU9nLzJBQWc0ZENnWWJPWXhkY2x3dXdrWU1aaiBTNkY0OTFtaGQrQlhSbGxaSm9ramVkSk1EbkdaUTdTYzV1c01jc2VXZmJ3em5ERUFHeWVtZFdkZ1haZnFGWnlZTEpFZ0thWk5xYS9hIGo1UzlJOTJrMWRxWFQ2aDdPdDZrREQ0bnY2SE83UG53ZDJNM2RDaDBaWkIyalZ4dEgyRGdQK3J3RHBic2xnUTAxSGg5ME02U05RdzUgdVhHSk8xZjJhNHlyRzFIaTY1MVVKOWtUTElNVVB3K3lVZEQ1YURXMWxtS1Uyek0yOWhPRG4xOEJicDkrWHo5UmRNN3ZBVXNHbzc0ZCB3TjhFdEpaUTlUakN3V2N5VmY1UW83dmxYdzE5Yk1VUE1UMFBrZ05EWUxhQ0dPVHE2dldmaERmQjdkUG45LzhBUEgrZy9UMjJRbmRIIHptUEtySFR3TmltSTEzVXVURHY2OHlBU2w4NmM3azdYMlFoM3dudmhnaE1nd0xBbkk0ZThsbFh0QW5iN3hhUE5uallPUCszdUE2V0YgaVl4U08yeWlUUmg0WUpiajA4bk9TQmNWdjQ1NExVVFhWcXJzMHEzREpoQy92NUw1QlA4QWh4L1Z3L2tuNVhiaVY1ZTdIQTIyMDFhSCBLUDFCMTNpOWhFVnVzQVB1a2ZJSE9Yb2I5TGRUOGdqbTFoYWV2Vk95QWxzK2gzdEEyRnh6M0RPeWs5cGRUZVRMSm8rV3N4bDVmVkVnIGVyTEFuT3ZKNnliMHFmUysyenF1Wk5FZXNQSDBEOG1Ka2hDRkszUkpUVWN0QVdJL29ya3JMakxQcnBwdWhCSmNSeFIya0w2eElrdDggTVJERlFSRWpKeE1RQ2txVm5UY1A3WnYwZFVURmZwbmI4cGFZbitUNUZILy9BSENCL3dDbnRUTnBBN01BelB2QVpFMFMxYlRWWjVxeiBYSDQ2di9JT1hKWTJuL0pzdTd1TnpKZGtKTHZBSkIyQzJERlM2bHNiR1BMWThQTUQ3dzRja3JuK1FuTFpPOHZ4bU0rN082TWZ4dDNEIHdBQUFmaDA4WFhlbk80MnBETXA1S0hWN0dNdU9SdHNoVG1DeGFRcnZpZTRCK1lYWUhXMTdsVlNFS2xlSENvRmw4VnlhTWQ0VDdvUDMgNUIrL0FPZ25UbTY1K3BEQmxHUWFOQ0Y3ZmFna3RIU2F4cSt2b2NwV3VKeWlsN0FNZnF0c2xnZjArcFZYeG4zM05tdkJKMlRnTnU0diAyR0NEd0VBenJNWDF0ak9FbEp1MDYzR3Q1cXFiWWF2MUZUTEFYb2NvcHlpdWEzNDNETVB0MkJ5RjJJOEMwTGEzZ1p4ZmJDWGhFbXF6IDU4QmJ2QUxkUVVFQlVjdXcyQWJKQlN0SjdkdEZJMjB4dHNxdCs3SlFmeGZQVFpBc3JaT1V6UHVaekZIbHlvRkNLRkxybThpMVhRcXogMHBRN1JtVHg1S3l6Tll4aHRxNUNTNzd4blNLbm1PVVZocThxaGpvYUhNaHAvTUZxY2gzQlduK3I3UnlZbnduSEVIc0FBK3dZbi9BQiBOZ0VOVkdrR3hERlFKcmhVcWVta2xLd3F2YWoybjhzbmdlYnE5eTRMNGUxSEFQWkVQRVBnMi9BYW56eFl0NVdmd203Z3dIMzRCK3A3IHAyVm5EMHh1U21Tc2JXNWNCdk9EVjdWenUwTGN5aHkzUEhLd2p0U3A0K2ttUkRmSHpBZ3ljRCtmMnJXU2VuT3J5ZkJraTBjVG4wRisgOCtmQWRMRjRxY081VXVoaG90aE1qVkZtRzRpUUhRMStwdzFJZ1phSFkxUFZmRGNET204eHVDMjFnU0FHeDJRWldaUlhKL2hNMjdBeiAvZ01QYkRmNFRGcUpIVjg4RnhiRjB5Z2VRY1J1RGI2YlViVlBhMUpnSDhybDNMSWxqUUlwVDFFUXVBOXlLamNOSEltSXd5NEliSnJ4IGJqdDZjd2NXano4dGIweU1lb3BTWkRKSWFwNTl6WEs0N3hGMCsxa0JRNnJYNjNxdGF0OHhaREJNT2N3VW9LRzhqTnJSbVpIQ2JKNS8gSDNQbjE4LzBiS2NOa1hLenRydU5uTWxEcStUR3MxNEdnS2ZpQnowVjNsRkhEbUZWMG15ekszWC9BT1FYNlduTWhOR0ZGTGZabmgyTiA4SDhCd0UraFlvT0tUcmRvRm1jdlNqWEpxaHdsblpWYjNIYktkRHFaZitHQmxYeUx0QjhJTGI1eVNhSFh3Ky9PRUE0aDhadVJYWnNUIG5oQVFEZ0dQL3RBa0NIS0dSV3E4b1NRTGdQWEJKczFITUt5T1h1QURLcHdvcjhnbUxZZVpWZk1BOVYyWGFDaXE3WXpLNHZjem5DUDcgL3dEUWZzSFVLeW94a1V1ZVdMcThlQVp4TEpFN2p1ZjNiU25HdXpnVzNucGpkNFJXWkdkYUJkR3l0R2lna2pRclFyYjNXVU5rYy9OTCA0Nk1JL3IwMkxoU1lHYUt4dEc3QVMwZzJFamtnS2ZEbW9sb01WaWxGdC8yZ1BNL282ZEFyQ2ZneUl3c3BqOTQ4NWp2L0FCLzJQSU93IExFZk1yaEl2dFZpNmxXV0tBMHRPMFdMWDExdU9tK0h2OHFJQjRHUE1Keklub1V2Rmp0VEdycDhKUHczUjhlUnJ3YjNzNXo3M3dmdlogQlFHY2puSGhqUndMdStEWTF6SnFHU0xjd0FzRVFPbXhaZS9CMENXWWNERGc0T0FiOGdIb0VNWXNxNkhVRE1iZHF1ZHZ2NERZQUtDZiAzK1NYOHVsNHRObmx4RHJGa2ZMV01ha0lqUVlhYmY4QW1XMEJVME5ETU1FTndyZVlZVCtITlczendrUGJPTHZJd0c3V2liMy9BSDgrIEFxTFlOZ1pJR3lYTVl1WFJHUzdNTTRvQTVVTXR1eWFwY3NoeXRjcldPNDBJTUtvdHlxMWJXNXRZRXJWdC9pSGNDYXNHallwQTZkdzggTk50VE8wOFZVazZTN0N5bllhdks0RzRMdzJjOXB6WG1qNWhBTzRXUk1EMlJYOHljcE9DR0Q3WnZPMXJMejkyTmd3UDcvdjhBaUE2NyBJNGV4Q2luWHdITnJmSE9uekxSdGhIL2lRNUVZcm01YnV1UUN5TDYySERtSmdjZWh0WEQvQUp5R3N2Tlh0QXNZRENKSnNHQTM4L3lEIGYraVN5RWV2NnJSODVqRjhiVlFJRVlXSUhvY2RlaE5CNFNCMmNnWTVKRFpQOWhzR01HWXNqRmNvVEo3SUVkZ2VQZ05nK2c5YnRSR1kgbFVFWWZHaXk3eVNVbnZrYkVtTTQ5VjdDeVBsU2xzUGgwOHR1QzJobUZ0UHdSKzRGbGcyVEZtS0ZHWkdCaEVrMytyQi9RUDM2Q1dKZyBLQ05qVXNTeExVazIwRnlWWWxMeU43bDVSWHdzV09SWlJvVmpBdDJjbzZPcjdUNFo0VVFaWW44MGJBQzJCeVRRcG5NandyMWUyWnlsIGNqaDJsclN0KzNvZXduQ3Q5UGNPVmJTOVhNV3QrQnNoZVpOaDd4Qm4yZ0JlSWF5c3Znc21OZURac0k4YytmZ0hINmkrL05vZ2wxL2wgUGg1WFNMc0pWbFdvMGF3MmhZVEpaOU9XbTRpOVBiUkZaT04xQXQyb1loajF0Vjd3WFM3dzFubE8yTTZPa3BKdmYrUG52dndEQitSbCA2YWhVT2VRU1F4ckpiWHhTeWJSaWtGWE9NS1laOHNhNHdKNjRDRmpyWmd4eEJQMk51dkE5WE14R1dWZjZNYzRUVjNkMEFBUDcrZUFkIFJ4QnNSODU4dUN2bWk1a0N5S01tRFlrZk90U3A2Y01WS2VZWElBdHVMSjJIaG1FL2g3VTJwN2JzL0pueFhzejk3dXlqOS9md0hzQXcgUHZ5dzhqR0thVXBwbkxySnN5R0tXT1NNVUVMYmtMWlpjMEFGeDhIUElZdFl4STBtSjNZbzhWYWNEYmtTUTNraUczeEFzV2VjKzNoYSA1RDFPcjE5eXN5c29Da2h4cnpzRjJCeTJCOG9IVUJZVTBYS3JJQW1yWjhQY0ZidURJbmp3NlB1R3hvWXg1NVJ4ZzRiQ2VmOEFBQU4vIDJEcG5WbThyNmJsMm9obm1xMm5ab0d4ckNIQjJtNkY2WUxGcndHSi9xUXRoNlQreUF3TndmVCtNMmdVNE53bTBmZmY4RjhCeUEvajAgQnRDRytOdGYzOW11U3FOckVlcTIxWVk4Wk1FUzFvb2VMWEtMRGo2M01HRTk4VzA5ay9pSFQ2MHRTSHdaRHdHTFBOdlo0NEQvQU5OZyA2WVZUdm1ZaHNBNUlWN0lTU1ZsNmIxdGhZSzlwTmZFb1lzcC9GQTVjZnBNT3lNb2V5S2ZUMVY4cjlTYWc3Tnp4WEdXLytFOVBEeHlCIEFmdC9vVHJLeVRTTk1obDNVRWl4eWZVTkZCcTBraG1oa1pTMEVLUnA3UXRpSVdXdXUwRHE0cFkwazB5ZzdHb080MGVReWoyemhUdkogeGhuOERCdkJzOFgxWHRzNFg4Z3d1SHNteUU5eW1SWmEvd0RrQ0l5eFZkaGlvWWY4Vk9IekM3aERCdm45U2t5ZkZ5Zk9IYnpqK0FBQSBBQi9GQlA0UnBnSFlnWlREMW91WDhiUFpSNjR4UDRZRDE2dHhUNlJhQlNHdjQ0dUNmRG1FRnUxRks4UG5CeGd4RHdXZDhTVFpzNEFBIGZvZmZ0L3hhakFudUdVdHNvc0RNazFqbWdTVlpPRGhhbGtPOHpHbTZuUFJRNit5VS9EdURaOFBnMUw1eDhKMW5UYlFVMlBaVFp4K1EgZjl2Ny93Qll2bUt2Y21ET2dUNlROaDloQ2UxWW56RERNc1k4V0FsQS9BMjlEaDZrSVkrWjgvWVlWYi90WXlvT2JmMkRZTWNQMy9vQSBNSW5KZDN2Q3N6ZU5FZVA5YjUvMEg0NnpnQkpRWUVlVHhobXUxdVVWdXVYcXFGK2VXNlc2dURzak5LSjU2N3Irc2kxQmxuZkVUM3dDIHJzTTFYZkJJdDhNTDh4Ym1PRElZSHpJTURmbW9Qd2E1R2puSncyRWRqbjdCejRBdjlHMThEeWxRWmsydWRTVlN2MVk2aDFVSmJGb00gbVRxUWR3N2tldGdDNVF1SHJuYXU0RnRmTUk1NGdCT2UzNVFSa1k0N093UjQ0Q2ZBZlFlZmRKOWJlRmU2WS94YkJ0UjJ1Q0xXNjJKWCBqSzNXOU9PRFJVcllydERKWCtLM1Q5Y01pZlR6aGNWRDR0cVBodWRvdENNejcyYjRPZlFXQS80QkJQOEFWdEsvVzgzV1JZaVN1V3JEIGsyZHpCa3IxdzdWcDlzUHBSb0UxZkVNc0c4TGJKYWo1WU16OGdOcVA3TE9rdDhlaVlQZXpld29QSUVGK1BnSDQvbmxiWjFNSXRJNmggVDN2aUlPZkFwVHVaL3JieEtBMnhZVStOZHpUQmtrem1rbDdncTViZW5OZjhRY2hzN1hPMzc5NE05YlczVHFSRHRITURLNmZ4S3docCBpVk1rMGpITU9EaFdYeFh6VDBVbG1FOWtNZlJGdGd0UTRBci9BQU9MYXovUXhNNWFKei9yd0hmei9SV1BzUkxnQzBPZWtHRkxOK0dTIEV4MG5KWDFTWktWK2Vja3NCYk1HSm5KQjh6dEtReG5ZL3dCTDQrd1JKQ2MrWDkvL0FIOC9pMnRSRlR6SXBSUHVRTWt5UUticVFRTFkgdENqVDFvTzZIS2k2ajZ2VncvTUE1aGJNSjdBaHRTSGNFK2o1aU1NOW1abUJtL0I3K2dnSDRCejdnTlM4c3d3V015aDloRHhtcUE0RSBoSyt0c2tnc1lsdEZUaTMySFg0Y3dIY05uWDJRNVpZOVM3a1lWQTBXZ01XY1BPSEFHd2NCUGdPZkg5YWpDSVhLakllV2R6dGxNYW9WIDNabHJQeXRVUE5ta011VWg3TnUzalR6bGVaSXk4TDRyeDgva2RkaGlSbGhxUG1GQTFrQkVsM3AvVkZwN3E4UGVWZ3IwTytJcW5RNVQgY0hCRFpGdlNYTlQyVFlXQUM4N1lpdmxvakJteDlremdHb2dIZDFCZnYxdUF2ajVpa2gzTmFDdWgwbW5nZGFTM0UwajM5V05yL01sUiBTMTNLN2d3V1JEWk5HYWVoL01WZTBDbEJzZ21UVjBPek1FYzNzbEhud0Z1N0EvQU1NWDZ0TFlwbEh4MFc3TWZVTlNhczZuNUttcncxIHRIcHhEcSt4bmVtNHU0V1FINWd0d3F2Mk9CVjRFSGdNV1NqNHpMUE52Mzgvc0FBK0F3Mzg4clBMbUdXRE9NZ3Bra3haZVRHc0syQU8gbFpHWVdTeHRRUzlVcmtIc0J3TUorb1MxRnRoN3FUM0NoMVgvQUZrS0xYNXN3ZGppQ0FQMEcvUHg0K2Y2elB6Z1U4UXN1RVgvQUxpayBHV1BQL0wyVTJQT1E3UWZMQWhYdHp6ZmhpdU9PTWJVSTNKczN1VTVLME1jQ2JPVkN1azBvd2FmajlNMi9WVEkybm5FbWJpU0tPZkdDIFdIcVlvMjdGTVlQbVU4bjJwalg0ZXhxMHdVbXBiSjRYSXJzd3dIVnh2ZkQ0Qi9mZ0FEWU9ubWxuQTU1NHQ4OEJaS3VmTExzbGxpTDkga1Y2UStZS2NwY1dWWkZIOERNR0Z0YlQyU25TREFCZU83KzZQbW5vbnduN3dBUG56NkNnZ1BZK2t6allsdHJJTkF1ZGVqYmd4Y0pMdSA4V3BXN1JFY0h5TExhS3ZEc0JpWVloc2pKaXlQRjhXQmRNRmtwL2dkb1ZuWmp4dmY5ZmZRYWlBY0JBTTZISGRiVzFHVW5lZHlPMWtXIFJLbVZ1a0IyVEpyOWhyZTBOWDFaU3F2UTJBUE1jTGdxdVlBcFBZV0RmRnNtVVFueG0vZTZ1ZVAwN3Vua0FBZndrbTRyWnNxU0lJY2MgNUZEU2JrWkJqUm1zWmJ0dlJvRk1EdytYYkkvYmdPNTBtRHJHdk1rc0U5WEtpL08zdGNwZk9ZN2wrVzFEcGM0R3ArWUJnUTFKYjJGLyBZVEJoMlYrU0FTa3M4VkRqNWpKTXArR0hJQnppSDhEdHRaaXpmRFFUc3pDcnJST2UzdS9WRWZQZ04vV0l0Zk1OcFhCY2lnWFo4dVFDIGNpTUZicElmSCtJSnBMSWNYVGVuM0JRNjJIVDN4ZmhuSi9MVWZjOXJhTE1lWGhKMk1IVVhkM254L1lBUFh5WThVZlpaQkpGcm1tTnMgeVcxa3JkZ3JlNEtIMDM2MGJJbFhKcUVLV01uMTlEMmlaTXNoUFRvTDVZUHpwak1zMmdoMGI3bkFkWGVBZmovYUxnTDkxdkFNbVpQWSBLclBGT2ZyY0M4bTNaNGZIMnlIVjlqY3hmSHh4TWN3bVhDSElJYzVDc0NCekRiQ2d1MzFtcTBqZkFaOStQdno4QTJCQjZGSnUwc1hUIEJuWjJMdHQ0V0ZZZ0RGc3FqV1I3N2VJd3RkMWliSDdjL3dEd2p5cSsxYjd4V1VqUnhqLzVrL2JSZ2N5OEh4Y3NUT3pjMVBXd01CRHIgZDNqdzc0SDh3ZlBpV2hxMDRmY05WODhmQTYreUk4QnduMXk0TXlNci9qUDZUYVA0aTlzSDczdDNvOElTRk5Tc0N0NTZreVZ2WnpRZSBDV0ZwL1d6Rm9VamNFVXAyYmN0d3AvVEdZUTVuZUNIQTRmOEFBY0Ztek9MOG1SMGxKQ2ZyOSt2MUJRUUNDc2N0MGVLK3BiQmNEWFliIHA5SXlhdWQ2L2NNN2hFSW9CeGl4YlV3bVhCeVRaeDVocVViZ3RxMVE5UUxMUStMUE9Fa0k3K2ZQL1FlQTlXUFI2M2JhdlQyV1VpWk4gankxYUdnaUtQLzRsZFpGMjBRbk9kZlJJcmVPVDV0VmlMc2ZjTFRWYktRSHhyTVdjTFZ4Vlpvd1YyMk1GZ0JmcWo1Ky84OHdZQUl0eCBvOW1OcFpvbENWdENmR0tPUGVWdTY1SnR1MGdyanVYZFBCSXJMdVBwMHhtbjI0MmpVazU0UmlWcFVVaWg0M1dXN05sYm9lQWlMZGZNIHlwTXQ4YUQyU05NVHc2VHlnbFc4Z1RNRnVWaEh2aDRHSWVvUmtjSWRYaHdjK2ozMjR0cjd5SzZOWmh6bXpzOGJBZVAxRy9kZGxONWcgK3dhZnM1b3pYeTBTU2lCN0lzRmtJZGZpY0NsUzZjSzVhWnZ6S2ZEekU5a3g0TytONTVIaExKUG5peTh2R3lKSVBmei9BUFlBSFJWZSBDL0RNdmxBeThyT3FVTzBJWTBUUjhNUGJFdTdHaERzSVdCWkhBUGRrT0d0c2kvRHRUUzBQZ1RrT3pMZnZoRDJ6Wkt1NE9mQVB6OGZQIC9RY1Z1TFM3UVZ6RHNycStjazVOSTJFYUxJOHdiSHMxREtJYkZGcmt5djhBYmREWkVJUFlBZWp6dzg5T3JmYTZIRjRmU2dtTHlmd1EgZC8zL0FPZ2xJUVZYRVpQRzZiZ2FmZmtpSjlzN3lZSmx0MGNVd1hNdmVhNDl4UmJhU1ZNSEVNaU5qbXVQMUdKVzRQSnd6eVczN3d0RCB0YTdFOFl5RXV2bnl2QTZRdDZiN1BxQWJTYVFZcjBiWUJiZ1lGc0tXemc0OHdtQjNDbjArWkJnRDFKSG1MSXg4RjJZemJJRTRQc0IvIHdIUWRjT29TcjFlcDg1eU10VnRHTW5KVWw2dHlXbTlvcHpkQmJaRktzZy9aMDlrVHc2LzI0b2NncEtxMlRzd1cwVm1zbkVnMkU1OEEgUWZ2eDkrNk55bG1TT2NMWm5uZ1FPNzE0UzQvVExVdnhQaWdWOVhGaDArWStRdzh3UFBNUVZKd1F6a05HNEdMR0kyQ1RhSnM2QVgzNSBCUDdCejdxWHN3V3IvU1dOY1QxS0c1WjFTMWtqMmNxNFJLclRhbFlYS0wzUW1CL2hwL3p3NE9mUjc0RFQxbkRkSGtZRHdkdDgvVkNQIFB3SHdBeEt6bUtPcGxhU3lCRHpsSmNlNDdEakhMdG9jL1BQNFN6OXVhdENFU3MybUYxa1FWeEgreHk1OGdmNkc0dENIZFZ0bFZtQnMgWS9OMHk0TWp2bFpadG5nYXBiUjF5b05yQzJUTGlSQkIyUFBGNmVTVXFzeVdST0pDNUIyZWVnZXJLS0VXa3V5NEdjaktuUi9YNmVzNiA4a0oxck50dVJ4ak9NMDhSODRsRnlDZ1ZsbTFIREJxNmxQSncyWS9KRForUUdibkhObjVXR1NqemxHQUpsd1h1MmhCUldoTHhTQllQIHF3bVpxYW5aMG1wVTdZOVdGUlRTcnRBNHFDdEM5M21nS3Y1NU5lQWRabVk4a2drK1NZdEx5ZnovQU1OMVpNZUxXNEZCdUU5RGNJeVMgR2ZMSUV0R2RwWHBld254eXBHSUJwSXhhQ2U0VExWZkE0OFBxYVE2L3JRSFpGWkV4ZjVNQmhIYWszaEJma0Rmd1BnRUhJOWIzUVVTMiBxSzdtTEFXeWllUlIzZ2JXNmZiQmpzM2NjcVV0a0E4eGt0U3R3OW9UQWRadUVHQ0hSa1dyeWRHc3dQOEFmUUhud0hBUUhSZk15ME15IHZ1QjZMazNZazVXOWx0UEZuVEI4dUhGc1pJbEt6NHdodzZmY0VOa2NLM1ZaNCtCQk1ER2IrSE5tWmdlbmpaRWZmeitQSUQvc2ZpTzcgRnNLNk9TZUxCbVg5cUVZK2YyRjlxVHhLRUJBNm1yR2xHT1l6S3JzaUdZVDRmZW12OVBFSEFuYi9BTFZuL21rL2lJL1FhQ0FRZTd2UiBYRTJaR0JlRXFaWGQ4TTQ0N3ZTZ1lzTzIvd0NXejVIcDlBUXlCVGx0STNjRXJMMU8zY2NteDcrenRyZ0E4bStrbTRRNjNiWTVpMnErIHpqZHFTaVNrSno3SVRoN0RNRnZsWk9RRjhYekRJSVpKZ2VydzZyWmEvUHAxeFdSaFJvSjdGeloyMy9ZT2ZIOS9BZFdWekdCOHlXQ2sgelM1U2VtOGxYenNrMndZbzNSelYremk2dmJDaWIrTm9ka2FrSmdkZXdnZ2JBdW41Z3htUXhmSmdmaFAzL0ZmUDdBQTZYMlpUN281TyBoSzJoYWVFbVVqa2tvaGdDMVZ2RU1GSlREWEo0d1FaWWVOa1E0WkRaQUtlcEk2ZVRyUFRtK0RFWkhTY1VrNEF4UHZ4OC9pQXg2R282IFhBREQ2OVBjcWY2M3pVS3lDbzlxems5VG1GTGFTR2lVbi9NTWNiUTBQZUlQYjg5OHlzL29iTVRCNGZSMkQvTHord2FHRVRxVlkzZGMgM0t0RGkvNHBZN3V4N3JxalZjMnRKSFZnMkxpdmhXaTV1dk83Qkw0dmlnUERYZkZGWWVHRDNCUFE4cHF2VkpyUjJzaGhEbUxERHIwTSBxQjdjY2JjSWR3dUMzcUVaR0FPcXdMUVVwM0Jua29yck9IQ2ZObjkvNTgvSCtyVU9nZWt6THJmMEJ0dTFiczRLeURheVg2cnVDd1ZPIEg4b1RMVjYzK3lXUXlYV244d09OcS9BYWpDTlVDc0xXVmw0MUQrY3FMei9hSUI0Q29tcFJzdXd5RG9laHltY3RnVTNURzdmSXIzVHEgb0pBZXJ4YlpYTXFHUGlUSEF4TWNDRTE0eFg3TVZaak5XWXNXemI0RTV0aDkreHd4MkRya3I5Z3E4RFg5ZXZnc2JXOXdXMEhOdGtkSiBHT0ZlekdpbXhNVVgzUU1NbEQzQWhzamhWYlUrNDg0TVZtamQwT2N2QVRHaytBb1A5Z0FBRDY1QTl4eW1UQ1ozUklWeHlQRXNNakVtIHg4UnFwRmVHdjdhSlFMYnlnaE1JMHpaM2t3cXFJQVhGcnlzZ214UUhnNWNIWWM0cHEvOEFndVZoSWJJSHU3T1FLeUR3eWErNzdEZkMgOXFDbE9DK0hwK1pNaG1DSzIxUUxRUXpoaEdKdm1MendaMTlyVWZ0Z1A5b3NNRDc4ODJCMGZUelJYdVhRVXlOcGpiVW10eEsvUUlHaiA2eWhPUlIzdmlwY1BoV28rUGtORElmQTNDcFVkYlpxZ0ZxN010UEJ1N0t1T1B3Qi9ZUDhBdjFKNWh4Yk14MVZTcmtDNzE2bTJReWJPIFlxdFhYb2NxeG5jQzVCMkN5TEloaDZyRHB5SFZkbDBmeXBQclBhNnY4RzdCRWtHZTgrZlFkL3c2c0lEcXF0NzR3bVZ6cFZ2NTJRN1EgSlJsT09ucmxzVk95SVFDWFVvdGs1Sk0xT1Z2TTNEdHloc0NqY1JnbWpLNVJaWnZ4YzcxWGpzQUErL2MrNkdNQ2FSakpnSVFoM0ZrZSBrTUMwQkNVcnY4bW55WEVuMk5sUUZuYU00QSsyclA1NFUrUGp4WG41NnJTUHJNeGRPWldOTEFXclROVllBK0VZWGpPdjhna1BpYUtzIEpEdHB3WDN5SERXN2daQ0hGWHhmVXAxVmsxbG5hTE1HQStFaExVNENmQUw1L3dBQmdWVWVESDFVd1pOUVZmYlMzYmNwRDA4VmxiRjUgVEUrbkUrVUxYZ0xUTUhzaWZNeERzaEVPY1BEMUw2eTh2Z3RaSjJwNFhIRStnZ0Q2Q0F4WHdIRzJFTlNlV0d6bGRJeVg5a1Z4dmNGdyBZN3JINmhLM2ZFM2xHOFdERER1QzJodzE5UEJ0dFlQbThiWmNtMkVrZTdEZk9jZkFBTmdBQU1UQlFmTFJ6bnQxTXhkTlZBMkNCczZQIDlxTTU3dWhMRFFweXNGQmZxeFB0T3lNRVRBUmcyMWZwNWVHTjVlTVZjV3NveHgyTlk0bnp6Qmd3SDhNY0dUTEtxdUhoZkJheWRHaU8gTm14YXlTUlhkRURFbndicmk2M01wOFF3ZHpRVmZiOGkrU1c0NUhOYzMxRzNMVFhhclIrdDVyUzFMZG5TajJvaTR5QTNPcGRzVDJnVyBXUkJoZ2VZNGV0MVhNWUljNnRDTmFXcXlQUEYwTlp4cXVydnlwdjREejUvSGY1R2xIaVBiV1duMSs5MHlOczdTTlJ0eDA1YkI1SVI2IDlNYWdkVDZScDlUVSt3T0JvYjVNRC9FZUorbitsbmpEZzN2VUJMRUlEdzkwRyt6NERrREJnL2phdXlXSXBURDFmS1NleVdRQk1YcXAgcDlTMGJhRFkrSzZicWFLTkZxTDZHNEdkUGI0aEw2ZWoxb1FuM2d1V1lUdEI4ZXJNUndubk8wV3dZQU5nMkMwV29ONFI3VXQyZEZxdiBSMnphV0ZkY0hSQTloQmxpNDI5eWllaTJhdUxqcGN6QzBrK25VM0NlcHY2a3JZUEsyMGkwaDZPbkxzQ25rTDJ4UHIzL0FDK2s5SFRQIEdHWTdicnV2cDJoR3pZSW4weVRHWUZpbFVYRVVpU3d5V1ZsUnlxTUtTVXhLN1FOamNLd1NpdmZINUEveStvSTMrZjQ4Zm5JVW9zZ1cgcmdWTzRBTkdWdkowdTF5U2JWT3dERlNwNWFaWXRYcVo2MEphZStMY3dPWjI4eE9vZHdnVnd0L2FPVGM0MlIyUjhENkNBQThCMkJCZCBreDBzUVdERzNkbFdvazVXb3lqUnRJMWZVdW5VeERRd05ubGhkb010ZnA2M01XNWlnbnpFZDhJV1hUcklNWm1pK0NZeXEwa0phUGdQIFA5b3Qvd0NtTzJQa0I4MGVEYXZmS2ZVcU50NTJOUkxReWJVWDJ4dmxLMXhpNHZzbjBsak1NV1RhQVlIUTlvdmJ3bnM0dFdwcDV4M3QgSjJRQ3Y0bmtISDlUOGFUMEFXNXBDaUt6amJLU3l1Q3haZGNjbnBxeUtnYTF4bnRxSTAxZzlEcnRXNWpIY00yZTRiZ2ZBd0pwTmxaeCBydXN2TkkyaWxBc2NBR0tEWUhwOVI0OGxZOGxXTWg0OVNDSlpwSEVSeksxdWJheHpTWEhQYTR1ekxXMlFFYTJ4MEszOG9aRW1TUkFqIEtzbjhVNkFBRW5BM3RaR3VCbGJlM0hsUUVOVEU5Y3J4dnEvTnJhazRRR1k3Y3ZTYkNqbDRoNG92VzFRNGRlWkdUdFkzMG12c2x4Y1AgMUQ4YjNNb1VKakFSc0pxSHRUWVBQZ09RYkRPMWVQSUU3SFNSZ2VqUXVkUHZlN0ZQR3p0TWJSY2JpaHBwYmZqQStad01PWURENGdTdCBTQkNDWStobE1CWncyRTRPL0FENEFCd0hud0J0L3dBdlBPSitWcVdhcnNwTjNEclltd0UrWlUrMFZlNWFqNkhLUG84eE1od29hZnp6IFlTQ2ljNXlUVjJqalBDVGJ0NEFBZkFIei9zQUQxcys3NXptWmNhclcxR0paOU5HbFBCRU1BR0NaWXpqWWJQU1Q0UXc0MVpNSXpYNmUgcUlkbjFxakdHWVcwM0l0RERtRnBHMGMrL1lvSjgrd2MrNnBORTBjV3BiVHFnMUV2MUdvaWsxTTBzaVFUdnRaU2xwWGZaZ1dsOU9QQyBHUDdJMXlOcVhWa2FyU2pWVFRiVVR4eHZ0TFFPbEE3bGFqOXRxQWVTUVR3SzY3SENIcUVVcVR2SjdVb2RKMUxXanMyMkZvbmR0T29kIGdRejBTMk1CYmgzZ21XcGhaTXdnSGVNV0VDRGg0b3o0VHJQRUdGZGpYNWVxTUFBNUJoaUFyYUV1ZlZIVEZmMi9qVTFNcVNIRjFBcWIgYWdOeEljcVJFMXloeGhiMFN0NHhNcXdQTVlGdHFndUZhTkFobjNTME1lYzRjSk9JT0lERGtDQWdZbjdiT0NlcDJXK0dNTExvMVNMNiBsb2RvM0pJczViajZjQTlTMk13cHI3TTd3T0MzWkVPWi9xV1BnUVh3b3pLL0dSbFY2aCt5WnhCZnZBbjhkLzZTZFQ2c016S3ZpdDBOIFNRN0ltVmZhaEdKR3lhclYyRndWN2xiQUlHR1BEMlF0c2lFdHA1anRMYUFIL2E3UlVCUGhMc2srQTl6L0FENCtmeGFzRWo2YVdQV0YgTlpMTE04Z2pTTTZmQ05zY1lTd2ViSXJ6VGtMZDhxUG1GNHZxYzlJNGlUNlpJRll5ZlVneUtlK2FzWXNNdTJrN3VSZVhYSFgxVjBuWiBkVnA5TnZtbnVTa2k0ZDZpWEN3dFZBOXM3eHRGVHE0dFBjSENadkZKcDYrWWVEdytlY2NCbktPVGI0RXBMMlA3K2ZBY0IzL29rT0R6IElaTFc1VHZXTWthNU5TQWtWL1Vyc3JzS0VMcS9ma044SVZCZG1Ga0lmSDJUbHZ3R3BQV2VMUGd3WmlrdTNuOGYrd1lkV0VNTkY4dEcgV2V1bXVVTUpTY0NxN2pxZG9tQjVGRGJXQnNMVkFCTUwrRVF4RFQyVCtSZkhDMmdmQmhndFhSbG5lLzhBZndBQWdyK0dCL0dxTnNQayBodE9NalJZTXcyZXU0UEpkN1l1RE9ZRk14c0paeFY3VUlUSENaWkMyNEQ1anhXbFA3R3ljRzdON21qOElONC9YL3dDdno3NzBWTklDIFV6VFQ4TncrRWl5TldieVI0bXR3QmNSa2F4YXlmaWpJQjZtZmZKaUNjZkNSUnd4eG9SWjl1TEc3NURFVjIyWmp1QVB6UTU1U1NLOXEgVVBtcDVLdlNGYnJabVdZYUhLNDRvR0dRRHNqNXZDR1BUMGZWTFlDSE9tY2xGdEpUWTNaMlNRZ0JCd1FkL3dEUGdPTllzQnNnV3dobiBrT3d0aFVnTW1wekx0bkJtRHNqS3B4OGFNU0NmRFJMZ3V5Wnc5V0E0NzR5TTNlUVZ3WGhLU2sycDJpNTk0RFlFRXdaRGh5eGw4KzdxIDRFSWh2aGh0aVdRNERaREVIaWdmbEZHUmZUM0NaTW9kOFlOOGJhdmdRYTNHRE9MOXpBWnRKZGpxRGdmUDdCNERwYnVEQXI1TXdQYUUgck83TUxqSXlPNGRQTVZmTER2aXZRMm91cFh6NWdkYitGZTlvUG51UWZEaWVNL29aR3F0MmRqZUw4Qi9YbjJ3UHlXQ3ZFMFlONW9VUSAxeUoydzJTQmY2ZjVIUEY5TVVTQmtta2dmQTZsWTNLSE9rVVV5dFFYaVcxSVAyNGVHNm1FY2hUNlNZVzZXTXFxM25SY2tiY1llSFlTICs3cDR1Vk1sY0RZSWEyR2x6R1JnWks1VWs5RHRUQVlNS0ZLenFBSCtMamdESGZ2QUFGL29rcnVRK0ljeHFiYU1TU1ZCWm8xdFlhWHkgRnVPa0o0dG9ySTlYTEo5OC9oN1pEQytuM0VldEZEZUdTekt6YWJrNHljcTRJRU9Id0Z1Z2NhaTdRMUYwVlpZL1VRWnhkZ081VktxdCBGYnUvY0dabnI2UjhXMFd3Q0xNTUMzWkMzWkVPNENFemZ0SDlTempGbUUxZlRtOG95T2JTVGZBZTd0UmZmZ0hQbGp2aTJCVnh1VkFaIExJc0t4cXJDTDJrZTFFT3YwbHdLRk5RbTFoMkM0TlBlb1NrNjRXM0JrT0hxL3BhZFc2ejM0NE5abk5qWVB6L0FVSHdIUDQyWlZrYVAgY2N1eUlMQTVUR3plTGVjaHhYN3Mzd3NMSEd3bDlsb2o5dkVnTHFlMUpMN0srVGcyWEhpdVRDcERsWGhuQUNtNXRQM1pEdWxKNURjQSBlR3dMeTJldEYzcmtXeUw4T3Q2Z3BPMUUrd1ljRzI3UWJWVjhaaWZQRm1vQWZOdWNIOEVFQmJwK29rSkM2RmJzeXV6WkNaL2lucElFIERha241RFhUUEhsc0MrTUxRcjlyME9HaDF1K0J5RmtvOC9WaFV2MW0zeFpTczNrR0VTZWNXNy92NUIyRStuNi9zVGFxeVQ1VHZ1VHMgQm1KQlpmcXhia1d3eUM1Uys1U2d3L0NuM3g4REdDRXhWdG9oUTlqYm43MWZ1YVBWd1Q5L1FiZEFIL0FINTZvaWlHRkhzaDZwYTNRTCBhcTlWa3hIQlBEc0ZtODhmSWI0VVd4OHl5SWEyeVVPNGM0QXVEYk8zTjVxL25UejNScTVJUjlnZmdIdmkvZE9qM0dLczM5UkVTUWp2IGlsMmlRb2lrN2ZUVE5xVEU0Wis1c3VCN0VwWXlpcHhqSEkyRWllMGR5NG56Zi9ZOWRsbU5Hb0FXbjIxZWFSaFc0RFRTUzA4V0VIZHEgbHNsM1pHZ0MySzc1YWpBeWNEVzN4OHArWWNmTEIrRFQ2TXpjQ0prZ2JzazhIWUQ5UkgvUHYrd0d0enJkWG4zRE94QXk2QzFRNmJyVSBKTVE3Y3JBbU1qVGJTbkZQSWFnWU1HYlV1Rk9yOFJxWkE0S2JVWVdYcG41eXRkci9BR3hQOENQWVA2RGllZnA4N2wxdm5YSUJXNHNPIHlGV3RMQ1NYZm5rd2g4Tm90b3NCRnpGOURaSmxKbUhCZld3ZTRBV3BrN3YxZjNmUmtjM2FLU2IrL0lQUHQvMyt0Tms2aks3emFUTVYgeStWWGVySnFIZG0ySklkcitYM2ZkRTFzb2VVdHVGcHA0ZGJ4bVYrSCtlUVEzZjZOL29hY3RHcnF1N3VvSUEvc0NENThwQWp5S0NIdyBUM0NOTjFKTXNLWGN0TVhqbzVwaTFGMU44OVJKSFVPTTBGeVlZVE5oN01lWllhYXljN1VaOXBER3pseFpDRW50cDYwYUhyNFhVMWJ4IEo5Y1NvZ2VzYXhzbGh0UW1yNmcrZVlkdGtNdXh3OEdCYkJnVDU1cm1ER2Q4S1ZDallwV29mRklBdno5aS9ZQUQyQjdqbUQwZFhmR28gWFBKVktIYlVLcnBZK3NMSWppWEJOUTJGWDRld0o1aWg0ZkQvQUx6M1EyTmt0OFlVSzJac1pzM3NiQno0K2ZQNy93QmJiR1NHM1RvYyB5aGxCdEZLYWs2MFBWTUFmd0l4QlU3SGxKMHk5N3MwKzR5cUd2dkNySUpMMVlUN2VoMVV0WWV1bVNudUM5VldtZlUrbndYcDlIcjVCIDZjTzBySXNqS2lXMUxvSzFBbGthYjNhOVY1Z3FUT2VCVkVlekRiUXVrMkNrbVN5Tm1tSi93SUJHQXF3bm16TUgzRllCaExzNFBpZmYga0hmOFQ3OGZTUzhEWVJwSm5NaUJCSklGZ1hTNmU4R1JWUVJ4U052SENOSTEzYU51b2pBNm1DVEs1bURuYWNsakxGRWtna254TWNiUCBFaWJwZmFlbVpSaFhDOTU2TnN5SE1kOU41NEEyd3EzcG5VT3EyVExYeVZrRUVlWll4U0pLY3R2RGh6QmlXWTJkSFBWL1plOHN5elRZIHYyM3NJRU9jZjJFL3o1QlA5VnZzU3U1SE5GV2VHckZraHE1NGJFdkFDN0Q2Y3Zsb1RGNERwem1WZVljTGh1eFBReUFjSHVId1puYk4gb3VUem5DYXVPVkVmQUw2RHY1L29xU3hhVytEM1hpV3FodHJFb0hRTFpWNmY0K2tKNSswTE5pbjYzVDRiNVNaaXF3OWdPQ3J1RDVWYiBJVHhGMmc4czJ5QXpld2ZxQThCc0V3MlpsZnJsc0t0Y3JnMGxXRnF3NlRMSjlib1duZGVmSXJScUVWenlHdzRvZmVDWmFqQjg1RDRsIGFtR0t6dGU1ZytiRzBkQjJBQWYyQkIyQWtWb0dmQ1hKRmZVdXFibTVqNjI0UmRMVjd3QU5IMlhYTkE1RytvZHBaSWtqZHR1eEgyeG4gQ0tLTVlwemovSFo3ajdpUGl6MHBHbFE1Y1lEQjVwVmxnMVdxekRUUU1tVmpRMTNVd3dKNkNXQk01Y1JrTHVibjZtWjRtMDQvb3kxdSBJdXowcjF5WkJwYVBWSlByZHdVaU1RQXlRbDBGblJQbjBYVGVvTE9tbjVvN1p6aUljYkttWVYrMWFkV2JZc1piS0lqZWZpWklCdDlUIG1FbVpkZUVSZ2FVSnlNaXQxRDBRbEFRTitBY2hSZldXWkRVNlpuU3pxa1FsRHJ0c3FjVEhzaHNLeEdPVzR0aGFxNkZpK0Jab3hwNEcgcG0waFpqUlk3bms4V2EyelYwVFZtckl2bXhNV1NuMmc3dUJKRHI3VVVFczlrQXFTUVBzaEpYNnlEMXpYT3NWbnFWUElROVF0d1dveSBPRmdHTEdBM0EyNGJZc3RCU3M4ZGsxZTlxd0dPL3dDSjhBQWYra2t0cmRtTkF2T3Nxb0haYkQxZndCaHRpWWVIWEhaQ3VyaVJhdWhrIEVOa21Zc2lHNE1udHFBYmFQY09NaXhhTWpkMGZ2QjlCUCszUFQvVnpaaEE1ZDNZY2ZYSmdrdG5zNTJyRU94a25pd1RBdG9MUkhLR3YgdzZIZkZ0d3Fwd1F6bFNrTGF3VHlielYvSm5uaEtTYkIvWDhiZHgrZzFGU2RrcmNtQmVIWURWNUlsa3dLZlczZFBtYWFaQzhIdEJ5aSBOQXVZNEdOUWhpdDJSa1gzd0cyaitWSis1N1dMS0EzYndiOGcvcUErL0g3ajVWbFNKRmhoZUpvaTQzTXJzTVU5bTNJdERHVHZxejJuIG9aRWFBc0pONFRPanBJY1pZUElYRStyR004ZWVGOFhSSTRIVDRvNm8xTThsMTdjbE4yUXRyY3BWc2hUcSt3akZiaWQrdENteWx0UTYgL01USHZqYjRQaDNGZ1BRM2ozclBhL3lwc21KeTNlUUFPQSszVUN0MEhaRmcxZmJXVkFoamM1U20vTDFVVzFXeEJoRHE4bGVybFhjTCBBVzRlOFdSdUFkSHRzaFMwR1k4a3hkeTduK29SSEFBRDREOS9ZQUNsZkZ1cDgxNER1ZFMyUlcrb1N3YzRhdk1NeWs2bnNKbEZ5a2REIFBVTjh4UHZpbnk3Z25vZnp5Q0c4WWxCbG9WZWpQTnFmZG5nLzRBQWY1OTEyT2xzMzVVRmdPR1VVeVhacTBxbmpiWlU3VnBxeUxZZkogVVZlVjJsa1QzQVA4eGt3cTZIOEJQNzRRKzc1UW9UOTNaM3E1NEFWRWYyRG56OTFaU2ZISDA5UmVxUjZrVHNqZ0JQWUV5TzY2Zll1VSBlZG5sY2VWczhMTXFsNVljNFdpRGlYS1I1MnJ1UjhWRWU1WGN0TjdSM0d1dTJyNGVwU29MRWg2akxMNDNxdTA4TGNaVGoyRU5zQ3dsIHNwRnRoRGNxZkh1RU14REViaHZrQmcrRHRqTUxhQ2F6aWttK0RnUFBuOS8yQUFVZzBwZ1hFL090Vk1NVmNrNzlIN1hubHNld2h5Z3Qgc0tXTW5qekZxQjF2alpBeE80ZmlxN21UcThvVFJqbU85bkFGUW53SDBIOWV4UFpNdERyOFBseVlkYnRTYlQ2a0pZSmhKZnNLdDVWaiAwNWNuSkdDSE1EMnJEVzE4UHY0QS9PNHlzMmdMUnZOMWNiOThPQStmOC9BMG1QcE94aC95cXZhcmFmSjU1U2QzQXduSTdZNFZ6SzR1IEx0UStoL2toa2hwOE9DK0VUeXI3MlorVEtnM3BKN3FJT3dBRDU4K3dZSDJGVmFPUUNQYVFQZzBhdGNiWWxjU2kwTnVzaVNMYTdCc1YgMWNiWk9yTkk4cnAvR3puK095cGFoODVVQWVSV05jOWNaeFhUeFpTdHNwTm1jRGZNNVNkMThDNGZMK0xFaUFENjJ3UTdJVzRjMHhoeiBtQW5vY0V4eWJ0ZXpZbkhkSlNmNkJRWDd3QURxZWZFY2dMSUVseWZZS1RZVmcxWFV0ZXg2VE9oNGo0ZVY5UWl1TDVBNDk3RTlQWkNEIGhPVXJBUFBGa0V5UlFvc3MxVjdJYmVBQUFBZkFBUEFIeVFPUXk3R0gxNmtKb2RidUNmcVFKTzdCVXBpMEhldDY1bGJvbXNoQmpXNnIgTVh4TVgyUklQRDU5Y29hd1R4YVBhcTdSNzJQSDdCc0IvWU9nL01VMlFDeVdkbEtSaVN0cVRVZ0x5dk1KYzNUMHh5TFNnTXdldHJjTyB5US9lQnc1YTRQaVBNV2VVQzBVcHdud1lBQUFQNytBNkVzWkZWRWRIY1d5QjJNZWNiVmk0T0xlYU5pdTJoenowY1lWS3h6RlBHWHdmIEgxSXdjNHoybThjZ1EzSHVKeDU2WkMvZ0RhT2VQbThCRThYVzlGTHQ4TzI4TzZHZWl5eWptWUh3ekZrUXpFUDRjN2o5bDF5dDhaMnYgak85aFBQb08vbndEOWowSGc3Y0tkcjY5aTIwTlNiQ0YweUVZaCtTSElMMXdWeTBNSUdNSHhNVnYzVTVpNEIveGVCNUlNWnlndmpMdyBieDJOQkFlZjZHN1lyOUxnS2hKdDAwc2pJeUhnS1NrSzdJMVdBSlczdzlXUlNWWkRBSHJjT1lEdmxnV29xbng4OEdudkl0WEtET2NiIEpzWi8yUDhBbjlnNnRFUXR5czdWVXlVQm9UN3NySFdsTWY1Y2VIZnpCY1llME4ycStVWUlKOE5EaHZqZ1BNVnkrZTZyRDJ6N05XWUogS1NUZlBuNUJmdjdCMW1lT0k3VTB0Nm5abWpRU1E5MzB0NlU2WXBJUG1OTVE3VFdQT09BOTNXamMxTU1ld2dqaVdmMTBoMUVVUzdpUCBXTExLa2FTR2dEbHV0TFdTNFlndGtqVmRIeldPbjRhR21nV1RWRnFERDJqRTRyWVY0V0ZpS29pSlE4V1lQWkp0Sm1LM2ZQaDBlQkh0IDFWb2FNekZLdlpobmRFSmFPSDM0Ky9lQUFkUTlabkY5amVIeG90RGxvRjN3cllzNGFiN0NUMTRPTHg3b0s4TmZEb2Joczh6WjU4RDQgRUNIOURGMW16Rysxd1JINC93QUJmVC9uK2dPdjdjdnl2bkRVVm0xOHFWYytWZlp5VEVUN09xenQ2WWFJcGF1U2t4ZnJma2xWL0RjRyBTZDNoclRaeG5BME5aSnZBUUlrUEdQMS93Q0RzRXdwTURvcFptVEx0QWtFZHE1cXRrWGg5UDNZd05sa0s4cElGb2EzOE9xNmZjREV4IGZtUVR5K1BWZmQ1UXhmR1RwdTBUZmdQb1BXcG9uRDZoWlZDc1hTTVNYZWJtS0tXT05Wb0NPTWJwVkZ5YkNpYk9WREx2MjBMWXd0c28gRS9pb24ybXljalhpcTVxajF4M0JRZG0yTlg5MkdhZ1R3aklCRzF1Sjc1V0ZJRTF1MEpyWlY1NVE1SkVzaVp2Qy93QnhnTm9UenU1TCBOb1hKVUN6NFFJYzM3ZnovQVBsMHBWUGkrVlpCSmpTRU01RG5vY1lUSFNTUTkzY0hLVldTdVVpV0FZRHJmY2l5Rjh1Y3N1bjFMWjhSIGxORkNmQnpadEpCN0I1L2YvQVhMcU96Qjdrdmg4MWpoalVPdnM2eUJOZm4zQWUyZCtBTm11VVhrRGdZbWJPeUR3N1ZQK2VjRDdadWcgeDU3WEhIWjQ1OTlmUG44T2hDOUt5ZklvT3ZaK2FIakt0akhpVXIvR2RoOE1QS0tNUDA4aERaUG1HUHJjRnRIejFWd0dib3JyRE1jQyBKUDdBdi8yRGY3a2paaUVidHc4SHpsa0I4Y1ZXUDVQbnBRa1JWRFpYbDhIaXFyL1c3djhBWFFIVjdKYmp2a2ZqbDJKWk4zYVZodHNHIEt4bVd4TGh0RnRmRlRlSDl5S1RxdUVZY0RPdzg3Z3NqTThrNnYydzV3bEpCNFB5RHY1L3BrTUZ3V1lrQThtMEtxY0l3MWpMb0NRUGYgSWNlc3JJc1pYM1cyazhnbi9EY0dPWXdUSndGd0EyTnlZWjlHOEordjcvd0krL2NCRlE2bWo1Uy9rd01tc2VTWGREVzNjUG41eEN3byBibFhOZ3E3U3lENFlleU9IN2gzVTVoc2JnVDR1TFdTZXllYy8zOTduOWdqYXkwOTVsdFd4blZKS0pTVlVxaGJzSGRsdFhpVEZZV1c0IHV5WEJ5UXhodkZnR0FiYXdWS3FoOXNhVmRHSi9TUWdQZndHRy93RDY0VEJSUmQ4VUhiblY0UmloR2xXTHh0dWJGaml1T1NjWGtHQ1MgUEpSVldTN2s0M0hCeTdjK3ppaldJNStSRGp0VUN2S3pNa1htMVdrNU9hWUNWN1lLcTFSNWN3Q1VMbEhMaDRlWnpFdzRKMFA2ZUJhMSBzWnV2T2VEL0FFa0hpL2Z2K3dQM1RhMWNJOThDM0NtVmRvZHF1cG0ycTlxNHNIZkJ0SHJ6SWVLSkVYa25lQU8rR0ljUDRjNVNZQUlNIE9NZWhUUU1lWGcyYjgvNEZCMkFBQTZDRGhETXFWUG1CVTM0MWhSYkNJaXFIYWtsSHBHR1VBMkZYTVZQY0xJWkptRDVaSHpZS0hYNmsgY01JNnkrVTNVQXlxd3V5YkJ2NEEvd0RvZjZuVlpTcFZTUUZHV3AxQXhMaFBQUzRkZ04xdFdlMU9ObjQyRFp3c0xQTVZXeDFiampCaSAyS0RVVklLSEhXYzBEU1dBQjJ3cy9IMCtrQjZmZXY4QUZoOWE0cEZDSzdiMnp4UjA1eGxmaGJ4azUycXNmYStWL2JqeXo2ZnVlQStpIDVjbVFTOXVFbmFXalVXYzhLRnQyKzRkdjVGNnY5ZktFTlBNdTd0Z04yMlRzQUcxQjh0d2ZGZDNWOTRYMXU0SmhpdDNEa2dLaDJDcFYgVkQzTjh0QlpSbmcyYkNISDRBQTJEWUFDRDA0TXN1NEFSZDJjY21KTXl2aHJzcDBPNy9qSVBLaXhDaWJEWUZzdXQxdTRCK1lOUjVmYiBWWDdNTHRCR0dIQW52c0I5KzkvN0JBdURvcnFWd1E1VmZHRXF5RWdQSjR1aHVHMDlyNVVTeHhkYmorTnZpMllodUVQY1AwWkNheVV0IERIZlB1MXEvbDQ4ZlFjZC82TzJCSHJkWHJzT1pGdmthdmI5ZkZ0U3RoVld6RU1PMEFWNU5ybjZmaW5vY3hrK1o4K3dKN3d1RXlaUVggY0R5alZja2hBYjhBL29FL2dmNmlsWklvUkhtZnFFV1NFdW1HYVd0TUJreDUvSHh4K1IwYkxpU2hhTXZGVVRLaloxdGdBTVRRck96USBvMVI1UFNJbUN4OENIVExIWHkwdHpKV2RHbHVESU5ZSzlaSHlTMklZRlBJSWVvU2JEbTJwaXlBLzBPQnlieXJ0SEp2eGR3ajZDZ253IEcvNGRPRDE1WWRkRDNNaGk2OXFXN0pXb1JTMHRQREpNSTNIVzhXeG9tQlF3d01reVl0aHc2KzROVUJ3YlVjT01yTnBLTXl5OEc2dTIgTkJmcmRBUHdBK0EzOUc4c0tac2hxVHJIenBOWXFSaUxMSG1MQ2VGTXcwUGk4VTRlNG1NUDV5R1FaSndGd1BYOEhKbzNLQ2JOc215UCBBRGZ6L3R2L0FCOXdQQ3ZzelpXOWpLN3NrLzRwSlNTTFlhcGhpV3lJY1VUZHpSRC9BS2JjSzNXOFhDdWJNWUFPTElUck5vZkdaWk9PIHdUd0NDZlA3QWYzOEJIOU1yODNmY3ZiSXRWN0g1eHY1N1RkRDhkTGRZM0xTZSs4VXdBdVI4Nkd5aS9PNWozTmZaaDdXdmhWcGRicjggVXc3RktsYXJSWkxCdkw4SDVvMlBZVmJ0RXF3aGZKS3Z2aTdFTzFBNGYzZ3p5R0lOd1JtZkVyVUN5ajdKaURBSVBuMkRmd0I5eldCYyBCR242clZZRXF3bmFzVWpPQ2Z4QVZ1K0IyRXhGVGVMM0l0a0dSUDFJR0RGYi9EdFR1QTIvRFdWbmRCZ3c1NFE1d0h3RDhmUG9IU0JJIEw3NGtBL2dIbEJiTVFGdU1rYm1TVjdZaHlvZ2x5UFdvUVhFT0hkbGtXUW5oNTJtbmZweklUOHA1d0lFU2VQZ04vd0Riei9RMmpzbEYgd0pGaEN6TXdJUnlvWTFlRGgycXJpekpjb0dKRkYyUlg2M2FnZWgrWUQyU3EzeGZ3T01uT1dqN05zbkNmUG56L0FDQStBUGdDbVZuayBMcXJuY3JlVkZ5enhJd3ZsUXVOdlhCdS9pdWk3UWdWblE3U0pIcDRuYmJHMnA5b2tiMHhqeFpka3NOd0R6VG1zeVl2cTRleUxCTTFLIGtod05uSk5aRUZVRFNBaVlMcVVTK1JFTWl5Y3dEekZ0Z0QyTUJvK3k0UDVmRnE1UDhvNFdqejdmL3dCLzREMHppT1k2S1ZrV2RhR1YgeHVZQlpQbG1BOVN0Rk9MYXZVb29YYlMzOE5QUTRkYmhtRHVNQlQzeEhRK00vV1djNEVDSklOZ1Bud0cvSDJCQjZwK0R1d09lcWZFTiB6eEptT1MzVjBTdDhtd2lCZGJRMWQzbGk0YmdIbU1oaWErRU1JTStydUtyYU53TW96N0draFA2QUFIMEhwa1ZJajVRWVdlbEpxVFV0IGhWQnAyUVpmY0d4NjNMT0ZJdEFuRzJnN2pOUThMSDdxRG9iVjIvUFBEZ3NvMVg3WnNadmhDTUFQb093UHgvOEFRWkVjYmNSTzY0Mm8gdFFrZzNaSHYrTm8wdGFBcDhoWnNGT1JYVWpraTVlTm5TcStsbkRZSkZkYm00UUc5M1pqeUt4Sjg5RzFmcGJwbFpTMnBKcXE3T3g3NSBOWlYrWU1TQ3dkb3ErSlhOTncrWVRZZHdUTElJVFFiYW5nUVZxRTBaRFEyWkdCdXh2Zk5nQWIrZmZ3QUJCWkN1bjZmNStvZzhCdFdwIEszbVY4MU1rdnNPbnA0bUdlN2UzSmFLZVFyZUhXNWpnZGdUSU0vQnVOc2l5OHRIazlsQ0hEbmFMZndBQ290Z1AwelQxOXNZNkR6bWcgRFpxM1ZlcVVQcXJYa2V6bkQ0akltMjA3cHF1bnI3aFc3SXRza053Vy93RDB2dGtBTnViNHI5c3dlSVRVUHdGLzM4QUFRZkFPYU9ubyBXMTBuT2QycVNIYmRSUkpoSUhwaXUyVldMYUN5YUJmQ0FkYnNpdDVrMXdRMnFBUWJRYkl6RFB5Ly9xaWJCLzhBZnorR3dUY25jeUhkIDJ4Nm1tRWpHV0NTWFVkZ3hhS1dCYWpIbU9SWGZNRjdWTVJrUWdVeEV0QTh0cHA1bWQ0ZlFoMCtyMkYwcm1iTStwTkpPVWtpd0FqMjEgT2NoY0JVbVFzak1wRndtTGs4Q1NXM2VFeVdGVzhQNUM4dGdTaVJhT01OZlc1aTM4eUdRaGd5REJXbnc5c1YzeDVXWGdKVnpzYzMvSCBmOS9BZE8xcFpGOTNGMWk3dmdFSk1QMTZreEtQem9hK2ticEt0aVVobUhBd0hzZDhUOXdEMXo1NzVhTXMrVEovMXQ1OEFBZnRnQUFPIGhwZ21DeWo0bi9BbUlNeGRhMG1YWkNxa1hRdlE5MHNJV204ZzJlNFBtWHh2Q3Eyc0Z0SEhCbUtlK25vbWNDRzNZSGp3SDM3QjlOb08gK1dwVXVwd1BmcG1ud1ptdVllcEIza09BRWUyZkYwK3J3R3VxclgrZWN3bWNndFJxdHBmVWdiNVdmRjFmK3R1Nk5WOC9RUUhnRDZFQSBqS2pLSGtWM2RVZU4yV2FXSGNqbDJ3eW5hWmE5Z29zWHJrQ3ViRVBIR2tjVVpTQkM2c2djeE5VY1ZGWXh1d3lYam1iWmNENEJVOFVOIGxDRDRMdEJwN1A0TzlNdTllMDV3Y2E0VXZUcjVVcDUzcHdvdEVIeFBUN1VoMXU0UGtFQ1FmQWUyVysrWHc4Ly9BQUFEWVBvUFFIWGIgUlpHcVdvME03QWFqYnN4NU5rTHkvRDFSTUZoTWdHeHRQWXFMTStZR3Jmdll5Vis0VGg5ZnovbVcrekN5cU16STV6dlp2LzVkUDBIdiArd2NlWFhkcVdoUTVlNlZlRzdhVjZESE5yRFRBQzY4YkNXb3RFTnNVb29ZSjdpdHNrUGI1bW8xRHI4ODFkeTFob0tkcy93Qmt4d3czIC93QUFmQWRNaHpyQkhDM0l5T1F1Z1dTdmF2VzQybVVQa1ZMYUc4QUJWWkhzRU1jWUR6SWN5WVBtNHFUQWVuT0pQOERrOFVlclVsMk8gUDJ3UHg4QS9ZdngrS05LM3BOS2gxSnpVUzZhZmNyQ2JUeHo2YWRkdDlTdW9YNmlOcEV5MUcxUUYrcGZVYjZrQ1NWVmNSTGpNQTRDRyBPU1htTmtBOU40eGkyTHh4UTduTnJhanFQdmtKZE05NnlJTmIvd0RFS2RxeXoxVlNUMHV6SENnV2oxYWRSZW91MzFNQkRDMkJxQnNkIFJjYk5sUzJ1M0dRcEY5Q1U0V21KemM0RlkwZXZ3ekZDbm04K1JMWUMyZFhsVU5UR21NY3RnL1ZiZG54SzNaaUFOZW5RSXRwTVZHRzIgQnlWTUY0VkJWck5INUxocUNwa2l0cnRoQjRVZGxEcWtLQzdoUVdYTnpZd2w0OVVYSDBwcWJuU1BSWGhJTFVVRk80QllGZkdQNlA4QSAxL1hUZm85VGZlSnkzM2YzYlZlZVAvYS9mai9RZlBIbFlQUjc4VjBPd3BRdktKSHMwd0VsUEI2Z1VkM21BVmVzaWxJR0NCZ1BEbUdQIHZpT0JIMXBhamgrTGlpT001djhBMkFBZkFZYkEvQUxwTGF2Y21iV2JnVk0xakdHMkRTYWpVN3dCc2luNmN0U1ZwZlU1U0gyL21MUmkgK0Z1MVBPUU9XNmMrTXZOeUZWbDYvVDkvOWp3QS92OEEwc1ZzZk1zR1loeFExR29GekdlMjdEVDlZb2NoaGNYUGhDYXJzZmJkYlc0YyB4REgxV2oyV3dLUVAvUzlEWnF6Unpac0ljdDN3QjgrL0FINStoNnJYNnpYTFFNTWFRNFJxSDdNRWxQbFRTSGQ0ZlpIYStTZGszeDhzIGl0Mk9laDl5MDVENGVUR2RyOXNPSlBDVG5BYmRQZ0FDQ2ZQOU5sRWJwSnQ0R3NGMUxMRktrY3lOZFJUUEVrK0ViMGJEQTVrR2lNVDAgcEpwRWtoTFN5TzdaWUV2Q1hYRVJsc0k1Wkl0eStDMkxERWhiOGk4c2ZSdUN1RFZwbjIvS2RxdjBpMkNkc2lYWkdwdXlLZnNKUDJGZSBxYTQ2Zzdqek5RbGJwNWtkTWdnY0lCdms0ekRIQm14ZGtvM3Z4ODhmOENmeFBxdTFXRFZnWlF5VmFid3BIcXZtVnRUckFuNXpCTDRhICtDYlFybHcvMVVtT0FkZjRyUEliR3lNMkJSWEpzeU9id1NkZzU4QS9ZRC9WaXFEMUFRMUpIcmV0SzBzbGJyZHkwdXJlb1NRQkpJOXMgTFlFcmZOWDNMWkNlK1E2ckQxdUhyOFBBYlNId1RGbUUrTGpGbm14dit2a0g5RC8yQjJWY251Q2JsblExakdKT1RtVVBHcjBnWXIyMiBMNTVrTHJKWEtOOTRKL0czQkQyOWJhdjRnSjljd3lZeXJ5anc4OTBRbk9UNERnTDhBQUlQVmFNNnVSUW1vMHlSYWxIbWdnamllSnRXIEk5UHZrVHJnODBnK3BqamlrS1N5UHM1aVBNeXh6UnJjd2gwOGpTYVpwbjArQUxUQkpXZ2prMWNjTU1rZTdMSEZZZ2tuZGNsVTd1elogV0xJVldPUmZsaVFDRmV1VGFOcFBPcjYyaHRoR0dOUFh5eUhGS085b1ZKREhwNjNEMmV0dDRWancvVHh1Nk1zSzR0NVdRYVM3Sk5WbyBPL245L3dDZkh6L3dZU1R0UDcrN1dCcE10VFRPWU91dGNId0lGYkNtRjI5aWxPT2NpNGwwVGFiZmNNUmlBRjZlYmo1K3VwWk1uV0xOIGlVTzJmNjdQT0FWNndWLzFWOENZVHVNZG1RdzlqVmZiWXNvQkc1MHB3VzRpK241TGpFbUFjVk81RHhoZ0RtSzIrWXQxZk5lTVdDZUQgWkdmZEJmSmtkSlNkUER3ZmZ2ZCtQMUZ3SHJjeUNxcnlrZWpkUEhaL3N5cEtxa3czeHFvdmhQczFidERhZGhoMmhwN29kUFpLM1pIQyBHandHQnQ0MFRScms1eFdmbTNiQ29qNS93SFZUT1JKcDlPck9mcXY3cnFFUVJIWWpTRjVScUhWcDQ1Skkxd0lZUnhQamxic3ZhSHVNIDR3U1NHSlBTak9waGtVWTU3cEdhRmU2c2NGcHJOMlRpT2hXeUdpbzU5a08xalR4dEp3NjV0U0xadEhtWENwMTVEVFVOaEEyZ2hzRzggUGxKekdRZVluTnZBOTRKc3lHOXN3em13TTJFQUlPL2dPUDdCaGFGVG94UHRxNkdPb1YzZ052MmhXOXh0Y2hiR0lCWk9RNWQycHRUViBXblRNTHJxeDhXNEdJSnRyQ2ZpSFpzSHdYZ04yTkt1MUhxSkJ3QUFQMFA0VmtGdWo0R0RoMGhTaHltcFhNSk5PT0dvVFQyOEpDMktxIC9uaDZrMkJrVDdURDJtaDAvRGVLbEh6N1UzTjVxL2M5OHE2MFFod0J6N0h0RDdIK2hzRzhBNnpyKzdHT3M2bHRHSFBzaEpsOW56eXUgSmg0bEtuRnhkd2htSmlGWkc0TGZCTFE0T0dXS3pWMmpqS1ArdFZXN2JvQmYyQitma0REUVkzWmxjbk4yMm9tYXF1c2dHcXorVHhmbiA1NTZFU29GWGNPNGpjaENNY1pGeHdjbnV2SEltcTVzbXgxYTUwVDdORm85blZDR3pwTnByaUhxWnJKb3JDeUdDV251VGtrZkxyZGZ4IHNoUER1QWY0YngyUGZLNU1FOFZmRVo1dEpTZGdBQUQ2Q3dJSjhBQVRLMnJtTW9ncW1idVc3YVBDODQyV2tOUTBoRU1XTnUxY3lqQTkgRERzaUhaREl2bVBuNzk4UEZuNTRzak43Qm05LzVBZi9BTEIxRHJZdVJBVjJROEJhdFNBZW04cFNwRnBjRHc4dERxOFdqMk5LL0c5cSBYd25tRThnNEkvYi9BTGpTN3lXZVRyT3hoRGVDTy9lZlBvT0h2MDVRNUJZdmkxZFFlbURUbHB3dEI4YTBtcEY5UDBzTWZlME9CcWF2IFdBQ24rbXlHTVJDUkpqQytJMTBVOWJMU0dXN2VHVmM4a2NVbkVLY2ZjVi8xTDUvMGdUM3FYQ2xLa2MrYnVNZlVSTHl6bGhqNVhJWTEgdUErNDVVdzQ4OUxiRTVPc20xNTRta3lCeGlrazdUaXRmeFl0d2J6QitLTVFwdGhRQ3A4YzVVTmNKUjRJSklVbUhJSkNlcmxMQ2xBVSA0ZkRtTWlmYWdlZjI1YldDQThPQ0tzaTJsbTJQWXdtd2MrL3ovVVBqWEJWNGFtMDhOZkdUSkR6eVEySVBhbFV3SmhwcDV0c1lDNEVJIGtOYjRlNEw2ZXE5cjYwK1lNcURpeU04bkxSQ2V6OGZRVDRBK0E5OEZ1dDArOFh3REpQZ3VueHNPQlpGa0wwZ1BwdlQyR1krV2hFUE4gRlZML0FNeVloekE0L0ZxeEg4SFczbG0ydFovWkRaemYzNStmZ0NDL0h6OXE5T1dubTh0VHpmVzJuNFZZc3pUK01yZkpPaFFObUhVZyBKWEZPTUVSRlVqemErNW1LZTVxTWxvc3pWYzArbTRzWDYxQ2F4WnFPSHg5SG9ZbjQzWDRQTVlQU2JCUDFZVjhXYWVUUi9UT0tuZzlOIEVLMTZFcHNrN2ZHM0o5MlQyZ3JtUUNZTUYyWUp0eEk1Rk1xeThSc1RqSkh0U3g1UnlVMkxOZVdCb0FBNUNVTmtzVFQ2WTdxV1dOZHkgVEcxSk1URUNCY0dFT2VBdTR1MElZNkhRNjFqTVpGLzhsVmVlVlZzWXNvYlFNSjRZQkRZUkIvN0FmNllWc2NzZ0N3N2JWVEtON1NubiBhV25rVWtoTE1JamxUaDZWRFQ0Ykl0MVhUMXFPRU1HZTRHMVZ1ODFBK0RPTW80UTJrbktpUDRjK1A5STJaVmJ3NUorL0FaaUJmd3V0IHdsVGZEeVNGeDRYY1ZiS2JmVEZnTGRibU9IbDYvbVZ6MnZQZG54anlyMWV6RTBjNGs3R2c3QWYyRHdBQXcwLzVjT2U0YndycmFTK1cgRWVmMnpoNzRQcktZTGxSTEdjazhlR01NaGpraEFNMVBqQUJhc1NmRnhhTWpZdTNOdWZJT0dMOEFma0UvMUhkRks5MEltanZlaU10NyBlV0dESytBNytHd2ZIdG9uRTVjQ3lPMXlORzdKSzdPaGRkc2NsTWdCYlhYYlpzY0U4ZEtzUHpEL0FCTW1CeXFUREFubTFzWVBodUNRIFlhQUtuekxqK0MzOHhQWkhDWjhBZ2VhdzZ5czdXdGJHRTV2NytBZnYwUGdFL3Fra05rQ2pnNWxvWkpJRThraFZOWHI1d1Y5UGFlTHIgbHNhQ20zMC9NcCtiYWhqNFp3RGVIYXZuRnZsR2kzdk5tK0RuN2RxTHovNkw5eGdCeFRucFlIbHVjcFE3R0R1MFJvYWcrMHpMdXJDMiBCY3FZNEo5cUdFTmJoL0RzYWVRbjJNdC9sRGMyYmU2dXdPYi9BTEFBOW1EREZTc2xpTkNscGpNYVpJRmVwSml2aHdOVElUQU5nQ1RGIGpPVEM1UlM5Znd1QnpERXhnRHRRQmZmSGhqSi9mRmxHK2ttLzJBQjBySEYxMi9VMnB6RS9HTlI5aGFYN3J4b2Ruemw3aFhKSi9HKzQgeVJab1NtYlZrNkZjWXhRKy9JOTMyMTRKTkRSbGtMSWdORElCZ2JscURQUTlTRFl3WE5aMVAvRGFJb2xYK1oyVG1NaUhEVytCNzhQYiBVZVlUR0ZCWXhaQmhLdS9FUi9ZQUgwRStBbVpnTjBJTWg3TlRUcVMxV05WYVNwMmdxOTJXeDhQQVlsWG9ZWmdaTFVEc2hpSFlESmllIHE3RnF1Qm0ydnhoenpadytBdzU5MGphVGVGOWpzQVpYMEF3eU8xZzV4SmRqaDhCL0R4WlFzVTJkZnJpVzRRK04vd0Q0ZnR5cUhXZnEgNHlzK2JiSmpzSDM3ei9UeVpCMTgwaTBIaGNVODdQazlEalZsSFZUKzB3N2s0UWUwNXNpLzJUTVZXdHcyRGlwN3RMQmg3bnRZd1pzaiBzYy83QnY4QWlCQUZ1cTByS0dRVFNhWXlEVE8rTStEWUZHQ1VieXhheGZiUTVOOVFCakdzakRGSTdXUTNsakphaGsrTHhvZDN6bDRGIGNrZzhncjIrUFZhNXN0a2pEYWdQTWp2WUdkZ2pxWWRvY3JDUEM0WTlicXR3V3c3Z1BaQWUzejJwd3Q4WUw0eU1CbS95cDkrUWZQNDcgQnBiR0ZEaXFkWWdhSHdrNTJjTnJkMzdxTGNlVzROQUdKZHd0UTJlMUE2MkhzbmVEbkQ3YXhtTXl5TC9ZOWtOLzVmOEFZT21vaHRCUSB5TDFPTnRsclkyenFxVlVudWhmQklnMkdFTXBZUlFwaXd2aTJZcmNPbmtJWGJSZ1F6a3g1dC9nZVB1RWRnZ00vNzdBL0h6L1NNdnZJIGgwdzd6VmRpY05PRFUyZ1Z5a24vQUxlTEYyemJpcSsxOFpMa0FXak14RHNlTFBESFFOdnFVOE1VZW51c1VYQUc2cFdIc3dyNSszcS8gWU1HQ28ySlFtUWgwR0x5Qk5NN1h2U1ZHWlpBbERjc1lXdHJ0L3dDSnMrMlNnaFk1RkdVTGJmcWVLM2N2dDVzREg4aTcrSzUrdkFkSCBZMHVHTHJySmJWVlhyMnBVamxUVVBMQitMcWJSS2NDQmd3eU9Fd3h3TTJCcTc1NzRqSTNreG05bkt1L0VSLzhBWUFIc3dyUW1PRURNIFNXaktUZ2xuWnR0TWpDT2ZFbG8vbWlqREtUV1hlTElob2VMallFeURBcS9pcjRqSXo0cmpHWTVkZ1EyRFFUNkQ5QnczOCtoNi9iUDggSjBBbExHTXNqS3VKOFpza0FiSUhpR1FYcUNMZkVEV0JNUTlQYmhNVDJDSEFRKzdVNWJXV2ZsRE45SlNYWkgyQis0Q2Zmbi9xWUJzRSBsREozTTBXRFc3YTdCWHdIYk5UNTFoWFE4VldMQWlYSVh0OE5QZktydUNraUV5RGRWd0tRTU85TFBGMWw1T2MyQ0hmNy9pQXdBSDF5IFFPQm51NzFPNzF1eW5IY0NjWEhKRlI0RkZnMlZHZ3ZOaXJ4aWtjdkZrNk1DNlZsZ0xLRVpkOFp6RzR0aXdCejBTMksyTWtybTBvTVMgTmg2YmF1UE5HVFZZZHMrVTVTeFl0YkgyT0hyZGtxdVlRY2FkMVNwODlIWkZrWnp5My9PR3pnTStnNG9QZDBCdjU4dlJ5TFFVaHpiYSBpaDF2T2R6eEpoUHNqNVU3WW4xZkZsMXllNUFZdXd4ZkZXTFk5YlZkUEM4aC9NclBIbmd3WjlKQ1ZXL3Z6OGZRWDQvdi9TM3BxNkpDIDQ2Wk0vRkpXN1BET0ZrZkhKY0dFd3BWWHl3TmN6RjRPeVRBOHorbFVPd0xhK3M3WGFCTVlqMmpWM24vMy9DM2NlcGNlVUlXcjNDbEogdEdoQ1RSbkcyRlByR3ZYaFRaUHIxbzNKZGkvZGdkRER3cXJJaDFYVXNQZ0F6SGFBcHpsbVJuY0lrdkovNkNnZ0FCL2tDSjU4TXRLayBicjJSdVppT3g4OGlCR2Z1eHhPUjQ5dzQ2Y3NHWk1yeUkrSm1wVU4xdGJWMmVPR3pCQXJqRStiNDdaRFJXYzlzcndOYlhHMnJLcmR0IFh3NEYya1VOREtkdm5MVVl0c0h6SEMxQTlKanc5alh6L0l3MWxHS2NHV2VFbTdSZVBvSi9ZRUh6d0ZJVk10dHNDbjdHeWhxMkhUWmogdEwwenBOek5HcHBQVFRvazlMUXlOcUxhSDhRUDh6Q2ZSNmxWY01Zc29lMkRPRW0vQWUrL3YyT0hUc2tXUlErVThxZ0ZzeWRSOUF0cSA1VXp1WVpROTR6SWVGU2xkU290N0FUTElwTXV0VnV1ek1OUE9tQlNDVEdWNEZrOXRSZ2ZDTVFJSFlmb0hIL1VDV0RTZFh4YkFaQmQwIDM4cEo5akt0YmllNUhCMTViYUxhcjBEcGZjQjlrTXEyK0dIQmYyTlNyK0JYSWZrMVg5b0dZNGJ1eEpPQUVGKzMvRStBUG43RHhsWFYgQnRQZ1pKVmwwOHhPNE1iWlhjUnh0bmRNSW5rd3hVTVJrcEpHSmxrRXJENm9OL0ZKRnFJbzhjTVZUSVJuVWtoSTVaa0dSVExkWWoyRiBUcG1VK2wyV1l6bWpUNCtjMnRXd20wVFgrY3lXUkVtaTJoZWxDOFNFTk9mSWEybitEbldoQVZXUW04dmdzWjRUK2dRRy93RG53QUErIE5vY2lZaHRtMTJoTWsxSzIzTlVwWmZRcGcvWjVYMmkybjIwR1RFeGNENVcvRDJwU1FHMVZNY0c3eXJKTjRTZFBINy93RFlEL0FGZG4gVW9qNkc4cmlwblQ2U29FeG1rcFFrZVlUMGVXdDhEVTBOeXF0Z21CM0J3NUlQWkp5R1FQWVEwYkVXaWV5TzdXajc4K1ByNEEvN251ayBqWWxlU0lHWERhQ2FmWTlWcTVpbktjZUtaVDdmK0dmdTZ6VTBWWEMvV3hsdlR6TEl3R05oWHg2cnpyREVXelBKejZTOEFWOENBUVQ2IENBUDRNYVNPU29iZE56N25TZ0tyd011NzNjOGloUjV2aFdMUXNXRWVlRmNTbk93YUZxY1Z3OGMrNiszeFZtaUZxQm9iaytPemtldjYgU3RobnhKeERtS3J1Q3d0aGlxWjVEY0I0WkRwTlBaREZnV284VDAvWXd3d25UZG9MUEJ3Z1RnNEFCL3Y3ZityYUVLM2gwT3BvZGFUMSB0dUE1cWVTNE8zMlJINDBCaXRrcDhoa0poaVlZWkpoQmtzWURxUTRQL1ZDdXpJMVZtOTdxdCs0Q2YzOUJRVDNVOVc2bVlzQnNKTGlhIE5yYzlkTGpHbDEraHc3QVhwa1hGZVBPUmk0QTc1U2N5MVBaa3hReUhia1BXZTFsQ1l2bXh0SjFHSUlEbndEZ0lCQjZhanh2REhjajUgYlVESjJHMVRFYTJKQ1REc0JzY0hOTlhvdGN6V0FQeVd0cmdmTVU4NUFYeDV3UDJ6N3lkekVjSnNpUFVYZ0Q2Q2Z3NllkUmxNa0FYRiBJeGt6QVFySVpDVTJuUjRvWThOdTN5VmxrenlGRktPVkdHUkVhWm1EdkxNckxBVjdIZVQrUjNHUko4SlFyemZQUFN4eXlsbVhKcHZhIGROeDRiR3pxTlZIK1lIUTdnVHkzWnROZDN4b01XaGRscUxmd3pOd2NIYlhEWTdJRjJZcnZoTkdCdTN1YzRDaElJRHorL2hMSzhWL28gb1FxZ256czZ4ek5UWk5CWHhYK1RjeG1uUTRxVnFhT29hSVFXMldoOVNGSnkzOWwyRDRGcHJlS09oWHVUZVRnUTVpRGZqMVJNR0hBVCA3QWYwNStuK3A3SGRLeGJZbGtLUktBNEV1VUFUMWJsbVNNaHBKNU53Y0ljT3lMSTNoUFkxVUN3QUs1Vzl6dmdXczc1ZGdRSnNIdmlBIEFJT0FEcnNJSzZYTElFak1YT0Nja1EwbHNWNjkrT1doMmhUYlozR2NCNkhEWktIY0U2djZybmNQZk9OK3d0OHN3bThXanNnUHRGLy8gQUg1SWdpSVpjTk1VTGlRSXVud3hrYVdDV1JpZHc1WjdLS0JRd29ubngwWTFVOFU4VXVuazFJZFl6RVdmVVo0T0lwSVpRUFNIOU9kMSB1L3VCK09xNVpPajkvc1hJOURBd1dlaVZ4UDhBVG16aCtaV3ZxZWJ1RndxNWt4aVUzTU1vNFRKcUZ5elU3TVhWMWlrR1lJRDF4OHpOIHo4Z1Y2SXNETHo1UTJHT2w1K2RXUzlRUVpZUUJNSUZFalRHZUhMU3o2YTlUaGxtcVQxZHBoR1JhK09IRkpVUlJEbFdLbWlBY0Z3R0wgRlplYU9nejYxcnMvbnlKMDQrVENzR0J5UFlidG5SNWFlKzU0U2I1T3dCWnRiTlpuOS9KK2YzMVllY2dINm1md0Q3LzlQMStqL3dCVCAxQldKbUErQnpGZDhHcE9jMmtySUVrWWJJankzQVVtcVVXVXlkNExnaDF1dGhsLzRMNFBBMXpOWm5rcDdqRWU3QWdSSFBnQUdLRGhmIHV3b09pejBETFBsQzlMQjBsKzFDSko4R3dFSWxxWjlaNGpDYlhYUlJ3WHpGS1BnWVFaSFFyaWd2OTBJNGZIMmZjWGZERkpxNDRmeHggd1BBV0RqL1RQVDh4SHpiZ0pKcTVra2srbXh0a083aHdPeUY0eFY2WUpybXhnN0Rha0txME8xWWJCWkJ6OGxuREJQZ1l0WldUbG83SSBqZ2VBZ0QvN0FBNDE5TEx0RndFc3A4eVczVUxZSWNrcDZacGdHdjJ4d1Y0dHNKc3ZoOE95RTlQaEo3QlQ3d2gyaFBwMU9yUFQwVUtMIEt6d20wYVRCVzZmN1JJTy84L2ZpVmxTS1Znc0pjaFE3VEgzK2F4RmNWemZKdXgrT2dETkl5eE51TkQveTBYS3ZIbHNsODF4eCthOEQgclM2UTFzcGxwSzQ3Mm90bmx5MUgrc3RQL3dBT254S2ZjbG9PNzQrY2ZoaDRhZHFEY05uUjZXdUQ0QzNXWXhvRjZoUm0rWUpJTit0MiBvajl1cjREWUQ2cnZCSDFVVWpENHUrSkpzRFl3MlN3anI0MUZXQkU1bEZ0alYrZVQvbUxkVnpIQU9RbVZ6QW50dk1DYU1UYUJsbUEzIFoyQ2ZsM2dJRDhSSUtDVk9tbUNhajBua3FUNGh5WHlrV29rdld2UUtHUXMyR2VybXZiRkFtQ0V5SHc4UHVDM0JmR0NwVWN6Mnp0Qm8gZWRpTmhOOEFJRDhmNENBQWRXV2tFS3p6VXNEVURSUStvY0RBVzcxVTJCUDFJSzdEOFZ5ZGlndUg4TzdIRFVKVDh5d0ppckJ2QTlRTyBKTlpLZm84YjJFT1ZGK2lDQS9UcEJrTVZTc24xS0pOdHlDQnM1SVkrQTBycFE1am9ieVpEYkxMM05sd2NhYnR4QjAwenRDSFV5dDJTIFRpcjB1ZkZQeU1EaWR5Mk9LNDBhOW1CMVR0clJhbVV1Yy9XMjBPcFUyWXo3VXNpSk1sUGxaWGRLWksvVDlTRXd3dG1HRmJzYTJoNCsgZDR4WFF5Yk43ZHJnYjhmQUgvQVk3L08ySlNkaUhyVnJlNUswMDZza3k2UnNhMmRPeCtqY2l2VEg4UHVBdFhEcjlQaDBPcXpHS2V5UCBGMGorRDhtUm53cFppeUVkZ2wyZG9qNzkvUU8vbjYrekh5WmxXWE5ycGNyZTI1c29DRVUyaTZ5UkNJWXhhQ3dyNFpDR2htRnZnYSs0IE5RK3Y1OVZtSGxtWjBKNFprY0lsR3dtT3diOTdiQWZzelZEVmZWTUg2TUpvRm1YWFVOWFZ1Z3lUU2VrR2NBOHNwVGpCcVVFa0RaWisgcXBEbXAvMjFBc24xclR4NmhQcUY3NWo2VXQzd1lGL0ZBWU1EMi9tQTJuVUZTOCtQeklZbGNpeDduamhUTHdlV1UxOFZadGxySjZSRSBjYnZXQVFTbktpb2E5eWFTc1JWWTE1TjN4VzhoV0Nud2luM3Q0STA3U2RHWU5sZWFMM2FkWDloQldpMmRPTVo5RHdHL0Z2ZTFzeEFoIDBpZUFWa2JMa3VldEJUMCtsMVNVbEpmZWU0c0lBLzZsOWVUT290Z3ZEVDdxTGZLNnU1dkNGeW1uVjJySFQvV1dRa01Nc1hHRUpwV3EgeUNHNFdtWmg0QVBVYjk3TEJzbmN2Rm9aU250M1NlRHlDZmZzZXZzZ2V2aGtPc1pTNXlUbEJJR3cxZnFqU2JBL0hLYXZPWEcrZVZ1eSBHSWI1WUV5ZFpkb1dZanJZeTM4RmNZc25NUWwySFBBSDkrUDFGVVhVa0hVNjdLWnVjTHN0a3RHdDgwZEp0aGZUeVZzSk15S2hwRkkxIHpTWkF4RFExdmpROHhQUTJEbksyekZPQjRyT0FSSjRPZlB2MzlmYi9BTkdOeVU4K3hIWkdmL0RRam8xODVXZUxGVVRadmpPRXg5bUEgL09jZTU0cXF0aFhnMzVzbjlVVy9xc3RETWluSm1VNzV4dFY1VXQxbEhUOGhQU0UvWVphYkZNT0VORG1WWERXMkJiK2V2ei9oakNkbyBhZEVaWjdYTzFvNytBUDhBZ01mc0NDVzZMVHhiUVNuNVZoU1NXbmhrWkJNZkp0U09XdmlwV2hlQTIwbmo1aTNEVDBJdzRMYlVRVDU4IDROajRyakp3NEV4QmZyK0l2QVl1WVhaQ21hekZYS0ExaXlhYjJnbEppRHp4Z1BMbVBxYlhxYTVPTGhNVCtJTWpnUWh0U0d2OTFJYXogdGVBd21jQ2IyOEFENkRzRy93Q3dkYlVveE1BdUJnb1V5VW15QmRtMUtrVi9xaXA5UHNKYnE5RGR5aUc0RUpoaXEyU0hNWHpIWld3RiBKcURzeXpqaWpJMjlHM2J6NkRzRDgvYys2SFR5dUlaVkNQR2tjbTJxTUxkNjh2Q29vU0llTVhHUEh4MFVrY1VyeEs4a2JQTnQ3WWc5IEtPUE1keXp5RE1KSXVLZG1Kb2s4L2lldFJEWUFOSHRWdmdTVC9NTTZleHVtVmZwTzFQaVE5T1pXSWgxMHVFSnRiM0ErQjA5Z0QyTlcgbi9wWWljWnE4bldhejdXZ0UvcjRBZnczL2Y2T0k5QnFhUllGV1QyMjFEWi9UbWViWmJma3F0VE5pMjBTbmREbElaQU95Zk1oMlFRRCAxekExQVR6bjlVTkNOc2J0MnVCdjJEQjJpMkRZT254bDNyQ1Y0N1VHUElkYjB5eDE2N05pL1VrTWdXVzdIRnFjb3BhbG9Xb2hUREV3IHl2cDl4ZGp6M3cyWkdmRmRtSjJwemE2NnJRZC9BQUtpUDdCMVBHRXlHZXJ0UGlsS3JxNnlFeGpDUzZucVdZbmxwaXVldU05S01jd3MgaGtEaDAvNlBBY09WT0N5c3RHSXhHM3Y5VUh3RDl3SEErQWt4REtJdzd3elB6QXpyRXRPb1U1Z1N6eFpZWml3RDhna2ppeVFLa2huWCBDZXNROGF1VEcwYkFacElNVGVkQXFmdG9tamZHNFdEUjY1cDlrVTBocVUyVEtBdjdFd1VhQkllemswUzY1VjhDS0crQjJRek1IaG9NIDlQbm8xUGt5YlFyMW1zdkhzRTgvdi9BVDYrZlA3eWdkOEtKWVp0Q3ZoSzFGZFBmMTdHd2c1RDVoUThwdmx0d3g3SytXUVkrdnNsZEggaUI2eG9hTjdQZFpzM0Nic043Ky9jQkFBQUIvM0ZHUWhZRFJobk1hUWVDS21haHNrc2ZOZkUvdVI4VklmUDJlRlpHOFRDRDVzSStlaiB1RHl6QzFjWVRPYkpzZUw5Ky9nQUd3TUZQS0ZFMkdCWENnZFREMXBZVGFwTDh4d1gyeGJUYWJkL2loK1lVbmpNaHd5QzNWWjRoQXRSIGszUEJvZVdZNWdrNzJmOEFvSi9mOWdBQ1VkR0VqbThuUkFLcXN2SnV6NHJ4UStlZU9nK29SK3hHZUxMeXlQNXFxdnRIN3IvVS9ucU4gbUFrdElvUHZkTHVBazd1VllzaThRbG9hdnpDVStWa3JxNmZ4dER4ZklmSU9LejNDeXpoaFpHZldWaDRPQk44QUFPN3A4QjdIc1JacyBIbExHeTA4QWVtTm9FV1lOcWhCd3c0a0hBbmtobzQyUW1PRko0cDYyUjRxcEw1N0V3VFptZ29NM3czK3dNQ0NmMzhCc0hVT1VRakhhIE04Qk0xNlNjSlV4U2lHUGhoNVllTEZsbnE1WFBoMm9IWkhCd0h1RmpZc0Q0ZHA4WVRGdEc1by81UkJuMEhnUG4zNEFBbmxlUXR0RU4gUEZpNWpiM1ZEOGVNVnU0WFJ6dzloTGpTcGc4eGl0ekZ0YlgrMWQ4V0JQQnVIR1NtNXZLT0VOKzJQMzdmeitIVFN6UnZiTzZ2RzdMUCBKRTFJOVk0RldxMys4VVFNYitiQUFudXcwN0lBN0lqeG96WlNESThpU1dodUFVdGVtbEd6WGR3QlRLeVc1Ni9rMnJBV3hvZVZNdEd2IGRPOE5xSXNMSUx0QmVzYXVVOGU0TWllaGgwTWZEZzRwN2JYTGdqazFjb00yTzBmK3FCaXYvd0JnWVJUTXF1VVl5YUhzWVl0MXZkelUgTllaQmdrbjh3UTAwVHcxUElNbGJtSWNMbUJoVmdXaTJnMlFZekZCWk5HM3VycnNCbmtFK0FBZnYzVW02Wm1ZTHNCOFEzZXZVbXQzSyBaNGVZU0RyMVZ1UUhmZ0xJUGhobVNuOTRYOGE1bnNLR2oyUWpER2ovQUZ4ZDdSOXdCOStma0xud0FCMDVyWXIvQUdhcXJVMkd0MUs3IEtmMjBUUTZyTXNpV25vWjRTQmxHRjlERG1KaGlHdm1LNW9kd3JRNEhXYnhGMWNNWmdiczdKT3dIOS84QVA3QjBCa3pwTjN6M0s3TGwgSUpGeHdkM0pHZUZ0UzBvc2tYMGFsWUFYQzNWV0xxK1FQTkgvQUY4ZVNlcWM2cUE3aFl3eHhsRDBObEpWZTFScWNqdXcyUFhySWg0YiArQk1EMC91cHM1aFBjRG1uaTBQRC9hS0hLTXh3SGlrL2ZzZC9QWWJBZmMxWGc0OWxxOU1yZ2FnYXVsNVNUVGwzRDlOTmthZjFOa2NuIEpzdENVWHI3Z1lleUZ0a1R3OXFkajRFR3QyWVorTTBaNE5KSnQ0QWMrNCtBNStmNldJdFhqMXlEczZBR1pMa0d2aklnTzhmSkR1QmIgaHRTdTdSWE1NZXlURnR3VzBQallNRHdOcWhqSHBYNXlzdkFRMmJlTUFIZ04vd0NmWTNHdFNZWUExWFROKzAzcVdKVW5xTWNPYmozQyBzcTN4UXhmRXhkakxiQWh1SEc0ZGtNQWNHcE1IODR6Y1h4ZWJNKzdYYWMrZytmeHdQZ0h5YWhWVlZFWlNXWkpFaTFCZWtiK1BNdjIrIG5qa3VJeWJMSnVWSzhyR256UDFBa1JuUjQ1RzB5bktlTjBCRWJGTEYzYmdEajUvVjFYMUdXSXljMHpseWZROWJ2YjQxTzNlaHd6aDEgaFhBTGNyQ3E5cFc2L3RSUDB4dUZWMVdRRDl0TFErQ1lKb3JPVVdkOE40YzRBSC9idTVnQTM4OHJQV0pyTjFocDlKNmN3TmVxVlAxQiBVcWxmRS9KcjB4MmZRK1BKdGpjaFcwOWtXN0l0UmdtUVh4d29kSDV5c29iNXdZSTdHM2Jmejc4QVBuL1A5S1JRWHJuRHVhdHFHMHJWIGlTckZuMHBQMVVMd0ZqSUwzNGJTR2l4NGJBSG1vY090N0krRkJ4SHZqVVlHUE82ZjdKL3I0LzUvNzkwdHhFZ1BHdGNSYUY1MVhLVHEgZ1pEZU1pd3ROUVozZkVSWHRjREZjT2VieUhoaUc5bGdIb0ZsMk1IczFaYU9EckIzQTJsYi9pQjkvUG4rcTJrWmdBczVkRWpkWC9sMiBaMk5FVWNiTVZma0I3SEM0ODJqVEdRUmdSaEpYZVN5bXlrcU5oZzBiMis1Vk5sd29Ra2NuS2hjZHhaRmU3bVN6clZzWWxiVnpWZmN6IHN2VjhodUdtZVd5YnBZVnlWZnQ4d09IbXJjTndtdkdKQURWWWNteks1UVl6L3dCYkEvMy9BTno0RHF1elJlR3FUSm1KSzRtMmNFYXEgK21hbXUrRFRzNGxQRnZsT1hJaG1GOFA4UDhrTUNmdjF3UURrMFk4aThCZ3c1c2hzNStoLyt3ZE1GYlhxdjNESnNZeW51ejR1QjcrbCAvd0NERFYyR1pYTk9DZE5CNmIzVVd3OWJ1QWZlT1dqa05WaDFuMnYremIyRTkrMFgrWi9yakVTUWFSZkRWYXVrSFVoaGt6K1czSXZoIHoxZnFhZUNzYUpYS2FIWDVpM011QVFIVDFvNHBMNTZ1WEFtTUYyaGlpN0k3Y0grd0FOL0FjKzZTSTVvcy9UK28yQkhOcG9abXgwOE8geEZIR2lxMU5zK0N6SEY4N0FwY0xZM2YrSnhNWXR5Rm85UlBISnV5U1NkbnF5bkZMc2tsVSszdTdqZldBMWRmRm5HclVGZkJpcGJhNyBZbTdDSDJQUnVvQzduQkQ3c0pyNVpBNThNZk1tTXBCN2d6MkFEWTF3TXp5VUtvM0Ivd0FYSTU4QWZRV0Evd0NmUVlHd0VQTFNOUGRQIHdKZGtFZzRGa0pXRTBKTElIWDFxNVB2aXU0RVB3bVlaRERBWXRUczlXazZZOG8xb1dnVDlnbUtTZFFmdng4QjBlVVhWOTZNYTNEU2EgMG9GL1pHTkpOMDdIckhPa1dGTVZ6eW52MHh4VDVnZUdZWTdSRGc5dUF6M0FZelUyMGNtQjcyN0hPQTcrQVBuK1FQeWZxdERLVlZIMSBPSnJkazIxV0NRcXY4dFgxSUo4ZDNoOE5MVzByMlF3TFlkd2U0Y3h4WkxHQTEvc1poblpTZ3RhS0hIWUp6aC9mdlA3QUFQOEFSR0YzIEVySTlZelRXSzg3a0xSam5JY2pjSkhCdXE0dXhRbWpWUkd5bGtraFdLT1poRkdnMnBZWldaekZFdU40S29CejhraGhpVkwrNzhJYnYgWUZrYXBVM1RIVjFrSkUwWmR4QlZWcEYzVEZkWGg0SG5CZ3RTdDRhMnljZnc0azM3R2hreWFHaHN4UDhBWkRqOC9BQUhBVjhBZ2dCVyBuN1F1UzFjeFZ6YlZzNXRjQU5ialhkUHF0a1lHMWJpZ2RoaXJhKzRWWE1UN1VaTEJmT2VkcFRtMlBMUWhqRms0NnBLU2NBSC9BR0FiIEFmeDYzTWc5UHFDbDdPTXU5aFNhZjVVcFE2M3JFOUlYbHNXbWx2aWg2Zm1CNFllYW4vRGcwczRBUWQ4RFdiK0tCbVdYa0pkaVM4YisgdnYzL0FFNjJ4bXlTTHI4T3IzU24zSFc3UUF1U3Nnd0cvaUM5c0tHa2N5cXRnbVEzQ3lBK0k5YmVQMk1QemtYYUgwYzI3VmNjUG53QSBEZnovQUorMmVMRm1VSkxnNVFobEhGRk9RYk5aV2JGZkE1dndNWmxWWGlDdzZZakc1R05TVEFrZHBhaHVTQTN0cHhlVGl4MUpWQUtqIDZscVFQSkVXNXRKaDZCRGY2ZHBDSFdMZ2tyY3JVKzdJbHlYQVB1QmtMMXhUNWlBaEtvSzhRVHhpejRvVm9FOEFucGRxVEErN0FBUU0gVi9BL2lzc3dQUWR5MG5rd0VpdmJJRzAvQzFhSkR4bkRSOHNPaHlteDhRMC9oOHlHNE1uSGpKd0N3WHhYSmpncUhweVdkUXV5QkhhcSAzNC92NEJBUG9Pd00yVG1LK0xBSCtlaDZlTGFRME01YkErdDVsYnlyc1RiUXMwOUtEMkFZcCsxRnVHSC9BSjV0K2VDY0JpTlY5TnJMIE45MjRPQVA3K2cvZndIWDB4VjlickY0QVlxUmtxVVBOSkRVaXdDVU5wbG1KUUZobEM3czVndDhraWRuM0NuWUZ3VC9tRXhoUlg4R2IgOEg5QlBuei9BTG9PT1JnOGNwWkRORGpNSm95b3hqNXJKVWYrcjRBWTRxRXNjSExqU0pLQU9XT1VPMTdJaDR4N3JpaWl1cjhObDRzRSBjMmpiY2hXelBaN21BMVVub0RKcHVmTGFVK0IxTGFOWk1pRVRMQzlQdHFmRDNnd0dEZk1PSVpEZlU4bXMzSUxHSXlPRUNkcTlnZnNPIGZBRUhxeTBlK2ZsWEJZVXF3S3hHb2RYMlF5UzNESjA5bzlzR0s1RjFraHkxdGdEbUtyVzN5SFY2MmNmS3ZQV05XNk04K3l3aW81dm0gM1B0Z0FQNS8zNlpEWlgrWll5M2ZHdXZLejJSY1hBN0lwMS9jMS9jZW1SYkdyS3htZ3h5Umt1Q3Q2M1EyQndPVDEvQkh1Q29CbkYzcCBaT0cvQjRQK0hQaisvZ0FDbENNaUcwV0pNZ0ZHcC92SlNyRi9keUhBekFsRGxkN3FiQW9lOFlHSWN3T1BNVG9DKytIR1FaN29lMmYxIHNFNENmZnNRRDl2L0FGZEJqS3NMYlR1bUFTTWJUbS9tVkxhcXJ0NU4yM0lBNkdQZGorbnpYY1NHYU10TktkeUJjdjhBRE13M0RlSnkgemFRMkJqanplNWY1SmtaQktGT2hoU0JPT2NNVGkyRlpVUlpkalYrUEtOVTNNZDVveFNNSXhsT3lJUWlKbk0vcXc5QTFrQkRXdk9rZSB1UWRLQlZLT2JnSkt6blFJUXRHc3E3YUh0WFhyR3ZXbEVyRjVaV3BEcmtGcHRKTjRNQ3EyTE94c2FQa0FUWHB2c1RJekZ6MGsyd3BsIEsrUk45RXZQeUZuSkVZWldmR2crcUdKRzUwMmxQa1dmazhjbjgrT2s3akRnY0FjQVdUUS8xc2YrT3EwSEh5WmZENmt1Nkd0eGFUUSsgNklsZkpYbHlGd3BHcGQwaVRDQWVxNjNoaDF1d080d0ZmcFpxY0ZrWXJ0QXl6RGlUellHZy93QkFvT3dkVzA5ZmRSWE1RMmlLWTB1UCBsdGFZNDFaVitOdHF2MkdHbWxHRnlpcmEreUlhMkdEcDlnVEFmbnNLM1psbHBmS2cvdmdJK0JmdlBnRDUvb1BoNWpoYUNHU0ROdVRVIHRlb1kxYkUxdWh6RitzbkJ5cThURUY0a0ZyQXhERDJSdkNxZUhlWVdDYXUwSXlNRENKUE9QUDdBQUFkY1poT2VCYlFuNXJrcTF2YWkgNE5VbDZuKzFhZkVjRU9LN3M3NHQ5azNBT0haT1Boems4ZytUZU05K0ZjWnNkWE9ydHY4QXdId0hUSnlzbTRaQWt2b3k3a0IzZHg0SiBNTWR2YW1pc3lsRG5rRGhndFhrYUtLUXdYdzY2aEpwSkJJZzB6UUxJQnFkTklEcGRUcE5UL2VGN0pCcVVtanV5clJHbFpWdkhqNVZnIDVpM3BwbFY0L2g1OXpMZHNYUlc3czcyRW4wMlVZYnVsVEI5YjZrTlBZY09HcS8yVXJBYmRuck1ZVUZzeFB3bG9vKy8vQU9UOGY2UEogOXFMK1RJbU5GdERiUlpMZnlaUHlPWVBCYVlLVFVoOEF6SEJEUTYzdmdQTXhEd1ZKZ2dJOFB5bTJNeHczaWJSMEhzR0FRVUVBZVBuMyB4WUdaUzkzWG82MGhtdU5TMXU3ek5UTm1vOWUxdlg2NkhmTGEwOW5xNW1KL0pBL3c0WkNaMzRjTGErWXpVYXJsQmhOSCs3OEJQZ0Q1IDgrQVFRQURqa1dRNlFLenVBZStWamFOaFNpU1RZUmlaVzQvZ1pRV1dmRmZoNkd5SVRoalpCQXcxVkxqV25HOXI3TnJKTjROMWNiQ1cgNkF3MkIrUG4zN3BZQ3RHb0NQdlpxbHN1RzFuUXFyYmRSOGU5UFRzcXZkMFRvMlJMT2lJeU03UlJ2TkxIMllVWTFsbGJZa0dmYTY1ZSBlVlBGRzZQV2VvQzFYaEpVaGFyR1crM29ONHErdlh4b3MyR3J2a3M5S3F2NWpneUliNVc3QjdnYlFSRWVuM216S2JxOTVHVlc3QkFtIC9vTDl2L3NmZnVxclVXbnlFZ2dHWExhVys2bGFHSkxadHdjZkxjQ2wzQ1UxOGgxZUhNTGZ0REhwODdrQ0hhbkJrWVdVSnZQQ1RidjkgQmZnQjgvOEFyaXlGT2g2N1BqMitLMEhxY2hvYjR0bG1EVHExRUtjTUhnSWx5QWh4NWlaVDhNUE1UMXV4bEtybTJxNFpQdWcwUFBPRSBtcnNBWUIrUG53R0NEc0hVT0xaTHdRMlRPbjZhUTVMSlk2cmY5NGgyMHJ1OEt4azFUaWxKaS9NVzRlQWRidEJiQjRyODg1TW8wVzBWIGZabStCQWV4OC9BQUg3WVQ0RHEwWFBjRU95KzRVMjJoYVVPY2J1bmtsbndGTXZnYzg1ZUJWUGF0RzJNaXd4NUt5eU5GSkVqbkROV1cgS0NEUEdoUllpNzdRQ1RZcklhQWVVMFpNcXl3OXRXZGIrU04yOGx2RHU0eW9zdUxLcDhoYWkyeU1qSncrWkIrK0txM2NDTjJiWmlZTiAzTnBKekhnQi93REVmbnpaYkg1ZGZCMDlrbFZqR0Foc2thWERHTENZQkxJZVE2eVBSUSs4Y3doek1HQndnejAvQlZtamJNeGZCak41IHRKQi8xOS90OCtINm4xOWZ1a083TzdHcXlhOVBFdHBjRU81cENPWVBXMHZPVFJEWWVTSjh4a1F4OHdIOXRhbVFtekZFTmxyTUdrdTEgWGNCUGdOZ1BuMkRZRFZHaFdmS2NLbFBBWHgyTDJEbEcxUUFIeVovQWljcGhqYVgwOXd4cmlyRnUxR1JnTWZBWUlPSWNvVXJCWHQ4bSBETnUyT0xCVVcvc0FCZ0FiQWF1clF4aUNONDhzc0JLTUhockM4MDV2TzdIY0t4dm0rQUs0eU03bmN3eHJHRGRRNVZlRDdpK1BudC9IIFhKYURRVUZ1amhSa3FxMlMxRTJ2VUNuTFlUMnFNSlczTFVZa2JwdUQ1OHd3eVExOHdqbnRONTZEanRpdWg0a3puMG5BQmkvQU9mZUEgUXROZDRMNmt5Vmk1VzBreVNVVXhKaVZlN0VnOWhRMEk5d09MTXZENmV5T0FldjJTY0JJWUExc1p1bUZtREFuK2xaL2dQNy9pZUFGVCBXdnRHYkRQVlVrT3J2bkR5UkozL0FNYUc0V0ZNZkZkSWN2aGo1aUVIVDZyTUQzQUhBNGtxMlRabnNyK2MzdWt6bXdmdit3WXZ5cnJlIDFId0FEeVF3c2FFczVJbUxjdmVMVVIzZGtjb3JZK05FTWZETTNBaDRMYmdIT1R5QUpWTWNHNHVUSmZTZlBvT0lFKy9iK2Y2a1pLaFUgQnhkRVRkWHo0SmFlZi83NUdaeWxjWjQ1SDNFV1ZjaXdWOWx2NGc2NFZWWi9MV2ZhRDRvVU9iNE94OWJxOXExUFZlbk82Y2xBR2lrOSB0WG1BbGJhdXZiODBNS2ErUTk0cmQ4NWdIVHBrNVRRSzBCY1padHJHTElNSmFMdHYrd0h3UHV3SUtDTFRHUlBucTU2QVpKREhiS0pLIFRDcjB5MUk5M0dKUUFTTEYybzRHTzZsSmgrUUJ3ZExPRDRENHlURnEyNTQvZGdlLy93QlFIejRFQngyZzJkZ3VTWFRSbXJwSnlhMFYgUWxlcThPemg2Uk1HU2hJRm9tTDVod1phZlE1Zy93QTh3SVR2dWU2Qy9ZNTRRSHY0QUJ2NEEvMDdMTWgwUFh3LzREUnFvMDhUTGFmVSBDSmFMSUJ5SllkTnNaVEYyaGdRbUJ3OWtieGFFTkhiV0JTZ3A2d3pib3NvcU83QmNOLzd1Z09QdndIcEs2bU5HaFI1VXoxcjZpWFRxIDhXUmxrM1JMUGdwZEpJWTAzb2dpU1I4Y2tNd0xCWGZUQTdzckIwVFRKREhLVWF0cU1aYktuZzVjQ1FnOXZqOTlEN3dzMWNWMGUxbmYgNmxrWkQ1cU5YN3prWkxqWEJsMGpLMWlSTUtveEp0K0VKTnJxR3VoeHhIMUh0akdyUTBqNlIyUHFzNDBkOUdJTTk2TU0wMndlb1hjQiBnT2tZZE0yV1pjRkU4THV4YnIxWHBtdmFmMUNHYXZpbHE1MUJUQ0RLaHpMc3NnUFI1amx0d1ZLMUI4RVlvci9vN2hOaUFQd0Evd0RYIHord0tmVW93bmJCdDRGcmZPNmhCa3c5bmpvZnFFWThjbEFTMjYyS3hnVUlNeVFvaUdPdFNHOXJ3TC9tUi93RG1aaVMxaDZmVUZOcjIgS0hnd1lyeDAvaGIxdzAzMUl1U0VsTnJwcWY2cmZJWTJaZEYvWk9zaXZZWUdwWWxudEFkZm1YdTRwN0l0am9Tcldkb0tidXRyQXpGOCBHYzVDR3VjZ0FCL0UrQVFmY0F5QlpJMjlTZWFaSlpwNUFESHVTQkpKZDFJbmt6WExiTWhVTmlNckp4WHBidEhOSk5LVWhpV0xhaWtDIGtoNUhqamppYVZFcnZ6RVlMTGtOdTZ5Zkt3ZXEvRDdMVXlXdzJjeU5UR3ExY3ZWdjh4d3IxYmFJckRZL0pQbUxlOGRreDlxUWY0c1AgNGpIekJaRnREdzhuT2JPenlnOGY5MzcyMkNzWlNxNzRSdzZHazF6VmEyZWJjNk5ML3dBRmtSMGhEK1ZFc2F1UTQ5UFd6RElZRGo2ciBnOGdBdFRJVEdOSDFsSDVzYjU4QVFRRDlidm44WTI4RWNkY2xkMTdhR2FCTjFpVFc3QXMycHlTZlU2OElBeXE5S0ZIQmZ2aFBUM0JiIG1ENjNCVHlCNmN5Ym1ydEN6NXVyZ213UDJIZ0g0QUFBV0tTeCtvUzh5bWRYT2JuYjlGc2hiTER6eVRmQ25aRXFtMTRDcnVEaGZEaDMgNE1PQkRsU0dRQTJwRFp2RjhtUjNaM1NmdjJQN0FmNkdMRUlxSzZlcGtyaVJ0dVNLU0dWNDNSbzZhL2FDRGtQY1JYYlprdVc5dVBGTSByeUpISnhIVWJSdWV4a2p5cU82YXhiWFMvamxWaDVBdDNPSk5scVMzeHN6eEozSU95VHlFeEt0dVhZeFQ4SjF1K0lkOFRNRnVlaHA2IEhlQzJzczFYMDN1ZjNiei9BUDFmdmNBQnJkRjJSY0VnK0x5czQyQnpiSXVPdlE2SGN3ZVhEcVd1V0U4ZVQyQlBNVlhaRElZSWNWN2cgY3FUeWF6MnYrajJpYitndjM3K0E0RDAxTXpUbkRYS2JZNVYwbnVLMjFZUnRocSsycU5yZUxNRnhTejRydzJDWlc5a09FeUhZRU5IUCBmQWhMYXpqVisyTEx3RUNKTHh2L0FOK1BvT3dkSjl0YU5VREc4V3BsUmM2clNRRzFCbE9aK1RUS08yWXVTYnFhRjZqRnNmcHZUMlJQIEQzd1BNQTYwdUY4VlUvYkxrZldaWkIzWWtoRG13QUQ2Q3dId0FBK2NTb2pHUGNobG1HbVpKSVNZcEVUWkM3ck9YbGppbHdEb1J0U1AgN2psaGE1Z3JaTkR1cEtxSTRqQjA3ZGtjYlk3YWlQSGpIRnJKYnZ2d3RjeVFxck5RRmRJNGVlRnppSWRJczBMWnNkY3ZMUGlCNHF2WiBoL0ZPZjF4OERUVU95R0Z3T2ZsdHB4SkxUNHJlYzk3cnF4QVlBRnVnQUQ5c0dNbGxnMStVVW9jTTcyRlJWZWxMSXRwM3JZeGJWTHU5IGJ5anluYlZYOGdZOEdSa1QxdkdhY24xL3lwd0pzeXgzZlJuZkQ2T2c3QWY4K2dkUGZVK085Q3RiWmNWQnJKM3BXTlRER3BjcjArTEQgdUd2aEUwK0FVSU9PdFFQaWlHRzgvTFZKK0xCWXo0ejRxOVhyQ3hoaGc3cEhBTU1EeStmNCtBVFVoVFczRzJBUHRrbkVtZ3JDUUhkbyBaTE9ZRjRPVWl4SExqZnpGc3V5R0dSZm1IRkxpYlZ4bmRCbG1FM2ovQUZVQUlQOEFRUDJCZ3VOcDNqY05IOU84cVNKSEpsdTQ1eHZFIHgyMlZZM3JjRFZJamVLR05rOU5rMkE2aUo5MUJqdUtWeHZHV0dWZWNtcitKaDRQdUorS0lvaHc3RnFWNGFvRG1lSlhOcExoMjA3bUsgcnF1MkMzQTY0dGc4Qmh1REpNVDN5R3lkeUlGYUVIdzRoTEwxVjZHemJGdmU5Z0FBRFlPZmRiN0ltSGE1ek03TnRETytaQW1jVHZnbCBaMWJ0a09MdERSOHdmRDRlWTVoeHNIQjRIT2ZDYnlMdEFaN2IyYk9uMEUvNS9IRS8wd283STZad3M5WHhtNEgvQU9lazJrdTJBK0RyIEppTGI0bXJ6UktUeUlka2NJY09ZbnVFNVN1QURPaDhaRjRvMitjS3E3OWczL3dBLzBwWkdPVUd0eUcrTWN5TnVpMmJVMkJiemlDUjMgR1RlNDI4RVdSRFE3SURReC9ucVBJUWVjL2FGbkU0RVNMUlI2aWZnRy93RG53SFFrcUpacE1hY1F4NTR2THR0dEExaEM4anhRM3VHOSBwVnlvWjVZcmlVSHFHT0lkcVBNY1I3c04zQUg4WlZpUHhadngwMm9jeDVGcmQySWJiWG9RbFh5VGFLUThPeWVQaDNCeGVKejFEVCtCIHNuekpZOHdxd0dFOUJNRTBhaDdrL3JidWxoc0I4QWY5dVA4QVM5NUJDY2pqSXBVaUJrNU9Va3V5OVY1N0pxQmhMaTJoSVRZdk1FOHcgWWhPQ0p3OEcyajN5ZE0vYTJabSs3YkpzR0tDZlB2M2dKSkhPYWpHMjNMSmR6Tm5TWmtYVjBTM0J3RDF2ZHlmWXd0c3hhTHMyZFByZCA4aHA2Zk5lS1dZRU5xY056cTlYZWRqN3BCRWMrZzcrQTREd0xyVE1kSnJhdDlxb3RQTnVGM0V0U0REWCtjU1g3WXRWTnU2c2tQbmxmIDRoOU1iSlNabjRlL1lOdHFHTE1lYXZmTzVqd2I3cEk1L29VZktKOXh0Mlk0bU1RVFZvNW83eHpFZUJCcVJaWTZMRWRsMzNVc1phbmogYko0TXI5Y3gxSkRRajdsT2ZFWnVwWCszczdXdmlIYUYrMktIMUFWNnhtUnVKNXBEalZQY25hT0pmRTBCTHU1TlpGOTg3cVdwVzkxOCBic2J2QlBWUTZNVGFGY1lMQjhKZHVmVzc5KzJBQmowbjRaeTNDakpuR2FxTVZ1WVBUSk1zUFpBRkg0ZVV0cGhpL0Q0MjRUSENZSEh6IEoxbHI2aTFCK2M5ME9EUEJ2aEp3Ky9iL0FGRnYvSUFGNnBBZXpOT2RzREx1YlppM3A3cTk4a3RxTzdad2VJdHREUXZTbGVxMkJ3N1YgektyTUQvZ3o5U0dBTlFXVVpvYUJuKzlqaUNBZmo1OStmdGc2U2JKbVVXcEw5Vm9jVlZqVzFxZ21YR0pzaTJzNlJjWWVwYTUxQ2FYMyB3UGFFeFBob1pkOFlBN3gzUVBZTGF5TVY5ekdITmpka2QrQWZvQWZ0Z3QwTkpKQk1qYWpUU3pUUXZnb2VHVFAxSXpqTWpERVZ0eUJvIHd3Snp4TFV0WTlUVXJQRzBNTXNDWnJ1aGcwUHJzWGwzMVk5L3J1MGNxTkk5eDFrdmFiNkZiRUYwbTIycFQ2bFE5ZWtodGxua0NzcEEgMnZVK1ZnVWFCSlFwVmFlK3NqaFNhSEQ1NThCQWJaMWtFeGl0dWF5YzdvMWRnZjRDdm4vWS92NnJrWmNORFF4dVUwVEgvSEt5VUJlcSBjYTFFSGNPME9TblV2SkU5eGlVbVltTXBDWXFnYS9SUEprNnY0TWpBN1JTVGJ4L1g0RHo5UkFIWVUyT3F1ek5acHJ0dnp1SGRxbnNEIFdBdG1FZ3hYTm9VZzBIcXJIaDdJcDR4Y0hJSWRqY2VBem53bU1GMWVzakRqdHpZSGkvZUFxTUJzSFViSStQYlMrQnBLQk1DWEF1TlMgbE10QWJEcjlIbWFmWlJZWFY2ZTRMYklHbXNrSWd5SEFOZ05vTVBXYlBjbFg4bUJwTlhCUHZ3QUFmNThmNjFibnB3UnUyODhXZUV6QyBwQm50NVo4blAycmo3Y2FQbStFcU9kVGh3SGRGTVgvTTI3bzUyTWF6UEdKOCtiNTZuaGRxUGpIVWRlMUtuVlhwTDA2Nm9BNXUrYllQIFh3cjNHbm5yR21hUUZka2NERGhXN0pNaGtJZUxicUFyT2Q5NTNRWXpjMkNKTlY0bjBFQnNCOC83S1cwTFlzUytYQU9VelZzYloyYkQgVzRpdVNzN1R2VTh5TEtYa0lYL0p6R1F3bjlyNmVha01oQU9Zck52dERTekkxVnBQYTQ0QUFIMzcvd0ErY0VldTVGTFd4WjBXVWVKYyBqeUpOZTJEZVZQdEFsa3U2S3BsS0h0UWV5ZGgyUU44QXhCMitCQjROK1pPVGZkcVRPZnYvQUdpQVArSFJIVDkwVS8zczFRd0ZjYS9xIHVwc2t0MWxUNGZ0L1lUSktWMnpTcTBHUjBPMHc0ZUc0SjYzT2JWOThlREhpeWpNaXBCdWt3Zm4zNjNkL0FmZmtTWWFZVFNOdk9nZUYgSTFqL0FKRnp5TEJwZWJqV2hzeDREYkpmdWJMZzR5K3BJamlpVU9FbGxtY2pOQkhGR1pDMGNYYnQxZ1F3ellNR1UyTUtlQzFBVkhlaiBScDdBVXZiOE1rNGJNTkVXQkRkNnZFNC9GWVVPcnpEaVltVU9ZRGg3QVpLNXJTd0lDcmFpenhlMEZvWThkN2VEb1BQcmQ4QWYzOTF3IEczVTNnZHZpb0gzUFdyVEthSXd1bkF2YWQyV0RYeTFwOFBKS3hiUzBuc3dlV1hwK2FvTi9iVWh0NzI5Vm8rUG1IZFEzYUtRYnQ3SGcgT08vZWZwUlY5RDFQWTBOa3JtS2g2a0tycTg4U1NLLzNJZllWY1JRTm03Q3RweGlGNGRQcjliQmN3UDJOTS9GNVhhM2czL1FQbjhENSA4QS9nTE9CNmp1T0JSZGNha1F1Y1NaZm1LZGhCaHg3dWFZcEhVWmNWTmdYQmVxeVpNTU1reHd0Ukh1aGdudEprWU13RjJZekFqWVc3IE1WOS9BQU5nUWZmcGJSS1pRcGVGSm90VkpLalNMcXBZeEhyc0ZHRWs3Q0pwQkZES2tzY0R2dDdpTkl3R0N0bzNua2pMUjd4U2FIVGEgZVpJdnBWQWZSeExHSFAwbU1ZZ1NRcHFETnRSNFF4ek5nK0I2cDhaYUErb1lxUmZWWC9oL04xOEJjaWROWFlialh4WE9xUkxEUnhrdiBPa1FxN1cxQTJwM1FReXhGY0RaOEpPZ2tmUStUUTAyTUp5dUxEZzZubEF4MlJuVGN5Q2VxdDNGZzh5dUt5cW5OVGxVUEVSd2NaTVZkIFUzRTRNQlp4ellrTDByazlaYlFLNldERklYcmpNUTZXRUJCUmtPS2F5d2NRWEN5eEdHVDZjNjZCZlZNYldMSlNiVTVBV0RqUnJFMWYgSEg3UDVIWEVsWUxMSXNnMG00c2pxK1drRE5tcll0YmI0czNkbWhmY2FIRmJiWVpBYmtMTVdOUFE2bGNMR3pxQnFlK0tUQW83dTRLOCBWc1o0cjQ0V25aQmhsY0liaE1hdTZGbDFYOVp3ZkNiTURTZFVUdFZlQ0NlQUg3ZHhRZXR4Q24xNDhIbUFSZHBrcVoxQlExdXdzRW1zIERIdnFNUE1NcG5XeDVnd3h3M0RtR0FRODRJaHR3V1ZsV3REQW04QkxSLzdBZllLaUFQM1ZuRlpza1Nxbk1aVmZES3V1RHVkcHZlQ0ggK0NZTE9GY3VUQlNOYzNZbnd3L0pObnE4UEJBRUxhYXJVV1hrb1V2SVpnYjJUNzhmZmdCOC93QWd3UStNeXF6eklCVjFkRGpaTGM3UCArSTlQNE9XRGxIeTJOMDRmTVd3NjJ0N2dIK0JwdnZqRXp0alFVUnVjYzIvUUJ6Ny9BSEIxaDBrMjdHanAyN1hva0Zvbnl3QUlhNHBYIHh1L0I4ZkJibkhzYXJUN1RNRlZ6REk3UEVWTXNRRjRaRDFZVnpxMTVIam14eU9xOTJBdnVpa0wweHRvWWFFeWJrcVdOZksvYXR3VnUgSmZFTm9kN0dUb2ZlekY4N3FReDVnSDNBUTJvUHlZb0xHRStiZjUvWHdBQStBUG55UzNMSVpKUkFPTGZOUFp2VDIrWHh4NjBKbGtXQiBMWkpTdVdwdHlXeUhBN3RoaDA5eGNPOUsvQW5XUXNNdW96dVpadHFYWi9YeDgrZjhBZjZ4a01US3FPTlZhZ1NiSXQ3Q1MrT1ltSjloIE1oUjhFT1ZjNHNGYnJhR1ltTWpBSCtBUWdRY08yWlRkQ1J3M3ZZTS96NCtmQWJCc0ZxRi9McVNmRDJHVnFjSldkRkpTV0crQ1FHOEUgakFEWXk4NVNnL0d6Q2ZNTU1oQ1orTDhIaGs4b1U1TWNxNDI3WWdOZzM4LzdiQnJZeXg2cUE5d1NPR1NBcys3TGhINmUyQWlReVJrciAzMkpVTjJNTWU2OHltTklaSGpqaDczM0h1TEZCSTlaTTc1SEhLaGlNVDRQU1pRbm1PMFE2OVhCZE0xS25wb0VJSlI3SXlyWXZubVNIIExsQVpnK0duMlFodmxrTUNHY1VoNmtxM1l6ZHI3a1psbzRFODRnb0o5K3QzWUFHd0dwUXhsdTl1UGk1UEdraytWTVcyd3dxdXhoSWYgQ2xTc0lzOHlNQmhEcmVrMlNueDRlYWg4U1I0WlBnYjV4azU0VGZ3R3diQjUvcVQ0dXRIay9KYldNd2dXRTduNDFlMSs0V0YyOTJ2ayBJRk5XMkNHWTA5dUgxOFBCUE1FOEhocDZadUJyUDczaTg3Ky9mZjhBcFNyY3hDWEVNd3VUOXlBU29hUUpUMlE4SFhsdzhoOTBEejR2IHpPUnpJZkg0YlZBc0E4RDJ4Wi9HWk9xLy9JUHYzSC9QNHl5UnlNSWhnbmFCSEJFRmpRZzgxR3NnalM3SHNSTXZ1dWdWMXJJOUJaQmsgN0k2R1ZqY2o1R00yN3NESStOY0NTUnFKT09OdGtlSWVaWURIVzU0ZytyZURWVjh4a1U2ZkpYQXZ5NGRJZ2FjUEFaaWZEWkxnaDF1biByNGRIeDAzb2M0d3NzelJhQ3o1c0o3WWJCNEIrNmtteXNuZzg4RS8rSGhROXdVNVp6UUhiUklkSmh0TVF3VW9ld2hZRFRmWUZ3VExJIE1Na3RnaG84QmYwMDdQd1pvVi83SmFQNWRRVUhmOGVBZ0FtTzBFSEp3ZG54OGZIZFZ0QWt5V0VIU1h6dGx6MnBWTlhpaHdDM3ZBZGsgRC9NcmtDd050Y3JReFo0R1RyTUhWM0NhckFJT1BIejRBQnNBR0hydTJGZXY3YXBaRGRuOVZTTE9xV0luMFBNMUVGbHR5T3IwVVdZSCAxdUhzaWsyUVBhQWZnWkNmT0Q5aldpME5zQmhNTWNOZ1BnQUMvdjhBaDFxbmkySTRYRWFaMUcwZW1kYzl1U1NncE10ajFJTVM4MGVBIHhpRHlaSGJ4Yk5FNnM3QmplVUlsRTNKTW4rWEQ0eHYzWk5lVlVLcnEwUWlPWW4yUWVYTmhkakQ1cGR0R3ZVNDhOajJFbjIxZHp4ZkUgcFBJYk9aWkxVaHVFeWNlVHoxcUo2eVRhS3ZxRGZEWVJLT0FENS84QW9FL2owbVZkc1Q0ekpZUlJjeVdUQ3REd1N2WEJxaHlKY0tVTCBpU21nT29UTElEcDVpWXZyVUg2RzhibU1LTkZaazk4TjFkOStQNytBNThmQUdEQlZZUFRTbDFVdVh4TU5ubVJKZjRsWGtyK3Erd2tJIENyTHpSVjYzYUhlQVBXNmUrT0NjY0EyaDg1YlppZkYzblkrYlhaejdZUGRDNENmNmtjdXlPMHR1Wkl0Y1VIYjVXY05iSTRjT3JzTlAgdVVvc21pN2dYekJod1cyVkRIekZYY0h3NG4wYjR1b0daNTgyRHgvb0grL3FqaFk1OXp5S21GTHAydXF2WUxtdU5uMU1lRG5tZmJqeiBSYmNwSFZIeTdVTHJrZHcxaWk4aXR5alo1ckhnRTlRV2E2QTR0WjUxSXBDMnBHTEJ6NHp1SEFwRmdGb2I0bXU1NVh0Und0U3QyU2szIHd4WC9BSUJnbjF6Z3pMS0hxTVdSaHp6YU9nZ04vQWIvQUwvMEVwYlJTZGMwR1lzRW8rVVM0WnBoYmxrTk9xVGFDUlpHL0NISkRjSEcgSEQrSGZBZXIrSzJXd1V0OHduZVpSRDhIdlp2dEhzRnUrQVA3KzFEREFMcHZNcG1Menkyck9zYW1iYTdQb2RWOGhUOGE1SzF6YUhjRCB1cERaUHgrSHNiRk9nY2IzTVdMSjdIc2h3SHlBQi9YM2dGTEh0MnYwalQrU3FWM0RyY3Q4Vll6RElzNDg4TUljb0JZU2o0NFdBNElmIDRyWlBodkZhV0FwVldoMW1zaTN6Yk5rZHNNVDZEdjUvbndEclJHejJkd3VpRFV4dVhSOGFEaHFCWEh1UGJ4eU9pZm5FRGw5bllpWDggeHFWeEdYK1RuNDVMRTlvSFFITWo2a0txcXY1V2JEUU04eXlhaDBqdk1TOE1CcVgrSFNVbnA5UHJmZFFPNEw3SWpvWi91b3lFM25uaCBObWVYYlpIam40QkI0RGgxYUtZNk1pNU5aRDNKRkprWTNBYllTUHFFTU5GZXNnQk4rWFl3Y2l5SWRxVldoN2dIbkFTRUNEVzZNODFmIGNuR1Fic2IzMzMzOUJBZTUvcGV2aTJ3THJoTURNZDVxVm5DNmZyY3NyNXo3SGR5OW9DbUVERjI4d3RvYkluelI0Zm5sZjhWbUU4RU0gWFpudGFQQ2ZvTy83QWhZbityV2toRkVLSk5PMDFUN3EwNG9yYVlwMTFmOEFKelg2cHkxeVBwVm5mUkk0TmpwWlplMXZxOUx4eDFlZyBUVnF6cWRmR1phMzFKQitsZ3dPb0RGNmdCNzA0NTVHaWxhTU95UUpLZ2RocFhweVRWTHVWMlkyU0RpMTJlQlhMSVluSGZDdnJJKzJaIGI1ZDFpMDZScUUrTndSdWZjY2ZIZDU2ODhwRmJ2Rmd5QnNVOE5ObDdCRGtwWkJrczVYeERsQ2pERkZ6UGhwOHg4UTVnOWN0UlNZSjQgT0V6ZmZmM3YzOEIrZ0RZTmdmQytqUXoxYjV6SXI1UEcxZDJDS1pBOGVYN1laTHVwR1g4V3lPMnllNFdRWU1ENWtCU2NZQVA2eVVHRSB5Zk5naVQ1ODk0RGZ6L1NsSHZrZTFRZVVVcm1aWkJoSVcxdElhQ1JqajMzS2hueVZNc0NIYWRWbUdUaC93WHhmL25GaEdWME5aSjlyIHNYYzV2LzRqMkRZRUY4VjJ2ekxIUzdnYlhLWkdaQTFldHRleU5YVHZTNVlPQXRCVWkyMFlYekZEdmllaHA0LzV6NFFmT0JzeXkwVTMgKzk3MjhQejgvQUg3d0hUWkZ4czM3eVBTbmd0NXNjV1c1ZDBmeFNiYit3M1ZkdDJNOE16REVxTXR6enRUMWppUWU0N1p1NzQ4VlI4LyBBNDRMNDhOTUFsR2l3cERJaHBEczJLN3RuTC96SzVQRmdOYzh2RHpNWmkzRFg3Z0IxS09mRG5CMWxEZkt6S2NKU1FoeEIyQS85K2Z1IG94Z3Jld1ZMTUoxZW1yWXd4azNNTlNKRnRBVmRJbWkwTzQwT0x1SEEzeGtjTFVYK1ZjZWZPWURMTTRHTVdhclNRZ1Nxd0RBQVFmb0kgRHB5NnBaQXRqcXV0d05jekJ4N0JicHdTUG1aM2Ixd2pIV3hEc1p3K1l5R0h1MUlhK1llQUJDZkJaT2MxZUxaaGh4SnE3WXdHd2Y4QSBXb2o2bTAvNVppZVV0cTFDbFZ5VlZ0MDZxSW1RQkpHR3dNaG5vZ3UwQTdnSG9adzNpdHlFeHFQV2hkTTdrMTVLKzJJeHhKTnV3TStBIEFBRUZBZnZmclBOT3pRSzRSNXNza1FJWlZ3ckhaaE8zTEhlVnYzdGZ0Tko4RjBLcHVNbVNSKzFXTHR5OGJWbWdGZk5BazJhSXVqZGQgRFp5czBOTnpNNWNBb2NiTm5nZk1XMDRPRENZdTRwTXVSRFpDRzhQbjF2RXcxQVY4RDh6YytVRXZOL2VQUGY1UDNJREE0Y0Q0TmhLSyBabUtMNHVEUnJDcmpVT3lDeGdXc01LSEtEcDZIRFpLVE1Rc0E0T3kvZ0t2Qmhnc29UMlBlNnVCbndCLytuMzdwaFI0OXF0dEQwQ0dxIEJrb3FIWmEzR2JOUDRHalk0bFBhTGFzSURZd2R3bVdweVFQeURZN0xYL2RQNU5WNzR6REVmWk44K2c3L0FPZndQcVFmbXB5a2h5N28gV0xnSEFNcW1raWtyWnpwcGgyVUtsdTFkZTNLR25ZVnhNcUNKKzl0a0NCQnF3bldZc21OZXRsOVNRY1lFSEFCanZ3RS8xb2Q0MlVDUSB2VW05RUlsZkRQRXhXeGNxd0dOaWhpZko1NkZXT2VDc25ac1RXa1FqdXc5S1JrMSszaHI0L0g1ZjZ1cHlKOWdUTlBySFhvMkdydmhxIHZVY2tZdmlKTUEwa0o0YkRJK3kzTXROYnNCd1ZZQ2UyZ3c3Tnhkb1dhek9jSk5vNEQyOEErbjlncXZkR1pYZHlPRnRadGFUR1NodzEgdEtVT09UcjJ2MjB3TEZ5eWliTUgyUXQxdStHSmpCOEd5L2dOVXpreUVMWmtidWliQ0cveEYxWW9XaDZJSXRSekR6dmFsZjUrclFsZiArbnlobEFiUzhYK0l2Uy9odWdaUFpPOXJleVN5RGgvRXQ4Q0REWldhNUdoWlo4T0UyaHdJQWZxSUFmd1h6eDlQMkJVOGZOeXlSNVdNIDJRU256S0s3Z01tUzBDUTlYdVZaRktsUkhBd245MUZzT1E0cStWZXBWWHhtMy9zeXk4YWgvd0RxQVBuL0FPLzFFNkZ5MEpmSE9Ob1cgZE1NY0xERkJrMmFQa01KTFgya1kvZ1pJMTRWMVF2ZzZOTkZKY2h6Q2NxMkhwZ1k4anV6SjVyRVc1ZzdSYml2UjlZb1o2d3JSems2cCBHMklRUXhwQVNuMk1lcklERjI4eER0UmJaT1B1RnFQbGZiNDRNMjFxN05abHFjSmR2Y0J3SHRDQTM4QlYxeFQ3RU1zbVNtNXRrTWp0IGxEWXk5VjliMlE0TU5rTkRsMnZLUG5jaERtR09lRHBtQ0l2b1p3T1Qvd0I4NzN2aHpmOEFZRUVCc0MvMHdpakFVb2NXWlhaNEJiaHIgYnNFcjJ2M3l0NUVzdytBV0ZvK0d3TWFIY0V4a1F5Q0dEZlUrZk9jQ2RtSWF1VEdiSWJTQWFDQmZxRXdQZ09lZ0xGVlhZR1pRVmJoOSBVc293U1BabzFTczJ2NGJzSGxoLzV2VURiU2VQbVErSDhiSU9BTTlYemFqaUZsWlZ5ak16ZUVOdkhQZ0hBUUNDZnc2UVpqUU1rVGQ3IG9rbVl4M1MzdFljR3NPN2ptOGhSRkRwMnl3WXFzNVd1MW1qZWtTUWU4TzM5T1dPeHN5VTNMU2R2SFZNM0Jnc2h0dEF3K05FTWFlYUIgcmEyRUxPVmJRbHNrdE5ZSEpvNCt0MXU5dUVPcTluTnFYd0RZY1l6YldNV1FhVCttL245Zy9ZT28xNHJwTGNqQTM1NnJYRmJtVDBudSB4bkdDTXZuaDZ6WEtLWVQvQUtlaDZrTVdDdDBhQTRBZDRXV1pYN21Fd1p2WkFYUHZiZjM3M1B1RFZvNkExS3hFOHpWV2RxOVBCckNVIGtnenB2MU92Qzh0cHA3bVNHNHA4TzFGdVlZV3lFTkluMS9QcmpCR3dRMzNIOG8rYzJCKzU5Z0FRWDVCV0lNZ1YwOE9CK1VVR2pWcmggTWxoanpLZk1OaGVMVnlSYURRdDJoRFEzeFBXNFpBeHp5QlVzRncyenRlekU5a3RGSmVPZkFNRUh3R3dha0FFQ0pBbTNDYklTR0NYZiBra0pVVE8wTXF4WndUUkZvMVZaRG5rekVyZ0E2bVNaWmk4dzNuaW1FSmIyRnlhS05YZmpqSWtjbU5tOEt5RjVCMlYzWGROMVZZbHdYIFRGZkdQSnZNODNUSG0xR1Y0RXVGOFZLSkZvWWNmd05rbVREREFZeGJjTGEzZDVHSzl5TFRNY3dTQW0vMEdmQWMrZmtKKzZUTXl6SHogTnBka01nY2xBcmUydE9wc1RJc0lDNEpDSFVwNndueG9tVi9NVDJUR3lKdDRQbS9Zb2JYeVpGeEtWbXNvNFFKVjJLRHY3OEFQdjNWaiB3V25EVkhSRlo0NmxxOUJLS3RWV3FaVHZsV1hNNnBxbnJldWJRdUtpR2xhd2ZXUXZhcUdYc0J3N1oxQWVWS3NXR2dvenJMTThIRWtGIGo2ZjB3NURnQVlLdlNPY1VPNFdGWDFnOGJUMXc4L3FZQzA0ZGtXRWh5aWt0TmNqQy93QmgrNURIVzdCYWlPOTA4cEk3S3prN2t1UkcgR0E5N1NRZkg3OEFIL1lCMGxGRFJuSENlR0tvR1dNeFJ4blNSY1NCVWloWGJ4a0xweTBtV0lZWVdWSXNabUtLMmNNM05aSU9aM3h1aCBZdmR4NUgyRkI3cjRzVXBvZXBBV0RHdTc1YlZYTlF0cFVyTnRBYndkSVcyaXhwWXVyOFY4UDNVMmREcjlrOThKN3d5V2JXYjRVSmt6IGdURTMvd0R1RGY4QXFTZ1VlUXRxNUUrdnE1dUN5QnVhZW9xWGZCTDdEd01BN3E3a0g1Z3lKd2VaTUlCMVdlNHdBYko3MWVyaytEaFAgNy9idS9nQUQ4QUFRTXlzNGVWYkd6UUJxQUhiWWRXcVkvVEhiUWFJeUs4V3dwUXNQeHN4Q3JlR0hzQmJCM1NuM3djbWRqV2k1RmxaUiB3bG83SDNkWU9Bb051bnovQUU3R1NQWGJiWUZrSG9xU3RqYStjQnJ2ZkFZTlVDbTRGRVBUZ2VGd3g4UGVKaGdPUFQ2NTdnSWxqVE56IFYzekZtUndpU0UyQS9nQVA3QWZ4NmtaYU5JQ1Z5eVVGMWdoeGpNZHBzeGhNemh0Mi9kYmJtWHRUSGxya0k3SzYwaHBsREhKMmNrYnMganZTNVowbExpTUFHNU44VkxIcDhJcW4xditXbzFuVnBuVmM3MkJXNGVqMU5iS1BrUUNCY0dCUGNKbHFja3I5YngwOGI2OExid3pGQyBneDVPSktTa2c5L3FJL2gyaVFqL0FGdVYxTm5xOVhKU3Erc2hiVzJpWVN1NlFxNmtLM2R6QlJXbGkyZ1BYOHlaNGN3UWwrUEE2aklhIHp1alFqTXh6emFPL0gzN0FCei83QWJSOHUyS3FrRXFiSC9HczRXU05pVEdjN09GZXVCUThwbER6aTRWdVkrWmRnZFA1VjJ2MlBBWncgUGN5UU5KZHduUGo0REQ3OGZRZW9HWmZLL21uRlVXeGt1MktHaHY2bEhBMVdqeXc3NHI2WlNpSGFoOXdNTWxidmkyNE9HcWl0R0U4MSBHQm1vVW9MV1NlOTcyREFJQUFCYnVJRHFta3BXYlpTUzNNcWgrYmpjSmhnYS9ra3diRlB1eHZJVjBVVUtzNm5mbVIxOWpaM3lBQ09LIEhpUkk1UFBPR1BGNUNxMnJSdnRkdGFLd2NrZTZhUXBZYTdVd3FQRTZHcTZueWxKK2w5SnVaMXNaOGJDWTRSOTBNVExIYzV3d3FNV0cgdTNzTTJMNm5vd3FTWkpDSmdhaGxKTW5PdlJ4WnFLckxyUkVCMk8yUFVzcUJtcnMyQW16bVZlem9iU1lTTWh0WjVRQm5aaEdGWGdEZyBrdzUrbWJJY3N6QjBqUzNnN0ZQeEc1b0tFQ1RGbVNQVm5YT1QrMlk0bFdQWnZBQkwrcDBvdWdCZGJ4cS9OV2Y5Zk5hSlA3TWlhUjJRIDByTVdVYk9xTkFrRURuVC9BS0hTd21LZGthZmJZTVZmU3p0SnJLd1FNa3NReVdTbUx1RE9RRXNteWxzZTRkdDJSd1cyQmIzN0NmQi8gMnVUR0E2VC9BTThRQ0Rqc0FFQjFWRWhYNGR5VTZ4c3M4TnE2NE0zT3BTSmFGaFZpd05nZXViUW1XMEJ1Q3Y4QVQzeVJqd0RyMHl1WSBEaEFuUWxrWXJxN016Vlg5Sk9lMi9uK21Rd0hWOE9MeVF5NVQrbmd3TDA2dTdZcnNsaEs5aFdSY2licUVBbm1RZ1hoelE0ZjZmQlE2IHVBbk1XWW1yN1o0UEVMc0hQbjdmd0cvOVhZMDc2VTN3cnAvdFcvZjRxR1RTN2VhcWdjNHRSYnNCZW1KcXUyYVZTaUdQbUxiZ0g5dmggODhvODhEOFloN21UT1ZkVi9Cd0NDZlgrZkFQQWRDV1g2WVBPZ2hobGFZUWJzOFczRzhuOU1GczJ4dnUrRFg3NlhHQXpJamw1RktJOCBZMDcyWThqM0J6anplSzRuanczSHgxVkdzdzZlMFIyUjNxcXBkblhJZGdjd1d6RlRzSmY2UmJWU0IrZUIzeUd0MVdRbWNUcjk4ZzhHIGVVTjhabGtHa21rbndIUHVBL3IxUEo3QTBhbTE4YlE0R3E3SXNKb1czK3pRN0pxUUh1NWl4NjViSXQ4R0xRdUg3Z0htYlBCZ1lkMUwgSEdQTzEwYlptOXUzMEhmK1FmcjBnYVhtUjVVZk9GcTRHNDF0M2h5YTllR3JpOVpJY3JkbWhOWEI1aTRHWGg2Mnd2Z09mdjFWb1pNWSBocXl3TStrN0h2NThCdjREcGtTR0JneWhjT1VtM0F5YWRjcm1wWXhuV0V2aVE5Y3hteE5LVEsrV3c3Z3R3NGZ3MnB0WHp6VUhHY1hWIDJaR09iSnZ1L2dUNEQrd1ZxRitwWlpML0FMekM2blNxWnRoR2pVOHd5eTRTZG50eUdIZng3Y2VVNmVWRUtCM2NhZGdkOHh4YnNneHggQ1l4WnBuZHRmZXRmdStyT1dSYmtqVG1wdUJuVkFIR2tvcjRTbHlEMXFXUmdZcVd4cXl0Q045UERyYkpEaDhEQkhwL0IyUjVabGNYMiB6T08yeU80QSsvQVAwQWROUUpWQzJlSDl0QXkxUlMyZXNKYnMyOEE1NndMNW0wT2h5OVBvRmNYNGEyaHA4dmJwaU9CWWEwbldvak0xIFlOS3lzOEp0R3JuZ0F3WThCWHo3K0JBVjFhRnF5TmRhSFlTYnFXeVZ0a1EwTzdFaG91QjJNQ2VHdEVTMExHcmV2NjNRazdoOWJyNzUgWXo0d1FBWWY5UmRRZlNNTFIzL24zdUFBYi8wbVZQbEF2V1d0Mk03alFsa0hoc2xUcCtwU1dwQklNVktlbHBxYUhuMVducDVpbjYzbyA4UDIwK3FoL0tJZm5EZXg3L3dDZlB2eDhCc0J3TEdpUEpHNkNXRk1wNDJqRXhqOEJBSXMwM3M2ZXpsSGdSNGZQdGZJaUV4S2lTcnBKIFhDUkJqc3lON2NpNlUrT05qRVpFbkk4aXVTb2d5WllzT0JhRWgyQ1E4b3d0MWswRGJJSGlaWUZvVS9sTWxnQnpGSjN5SDVoOVNIcVEgT1p5YjdNVE9XanZmQVY5QmZuN3dCOStoNFpETWxVUFlTMnJnWDhhNUhqZnlMSXFXanBhMnIxZXZJWlNIVjhPSDhOUHVCZ21JOXQveCBEenJJWnJnNHZVQ052YVNieFBnRDZDQTREMVpXZXRQaDFKczFvVTBSY3I3dUVSMU5UNzVYWkluQ0pvdVh5Z0I4SWFoRU1Rb1dvdERwIGNGU1VDRk9yYk5XaFhrcElGZGFUYVh2N0lBQUF3SUhWUlJPc0o4cE8vd0NKcUFwTFNLT3pjeVJjU1NPcXNhcXQxcTJkTW9VV25NWkcgV1pUNVVWNkplbXZMWVliNFZUQlJHdzlUSVVSamdNNGo4Z1FNVjkvWHoyUFRsUGN4Mk44ckt0eTRCczlyL0xmWmVmOEFpYjhlT3VaViBNa2J1TlBTTElZekxqaEdTTnlRTmg2c1lwY0d4VEt6d0s1Z3Jvc1JURFVlcW9abXNWdXNUeWVNc0t0bVNIWkZtcll1MnJZVFhKOHIvIEFJZUdjRTlrSGg2NXJTMGFsUnVNOFhLUEF3SDNSQ1ZYKy84QS9nTnVxVGgySlpkaDAvbTF6THRFQytWV0VFMCt0bUdDV3lBVmVYdzIgRllBZFBjSHhidFRraU9wVi93QXFReVpOWHBzYVQvMFRCMjZnZ0Q3OTlCMkRNclVacURzVkNzN1VocUxkbEpWQTZrRzI3bGRPQVJpeSBHVVBXYUsxQlRLL2g5aGk5YnA3aGpha0RnZGNvUXhacThtOGs5ai9mOS9Yei9nRC9BRnVlSzdhS2d0Q0drTm55YXhjbFVscDdxZHFmIExnWVhCeXB1SWVGdzJBeERRN1VjT1k5bklGUHFTcTRWQlp1bk5XWmxnNWFLUzduRDREdTZBNCtmQVAyUjIzSUpJcFNqVEJERzZJNGwgaGFOc2ZxbzVEU2IwYUJZZzYwbVdRNVd1ZGtJZUtWZFJHSFZGYU5vcHl1Mjhlb1c5cmFOc1VrSkxVL09ORHRhKzJwWkI4ZUs1dkM1ayBneU5yK3lBeVRHWVYrd2p6QUpNYWpJckRLS01oQlAxSWZzM3pQZ0VQbkI3TVJrTW84MW1EQ0d6YVB2OEF3RHdIVnRMUTVSRnk0ZGpWIGZXTW5PdG9tZ0NZOVBwS2UyQjVVVmhBM0l0ajdVNDJZTVRCNWhWMjQ4RG1leXdMUmhtUGV6OU9mQUFIQWRnNjgvcUlhUSttQjB0UlkgVHIvcmRLbjZxR3hyMC9XcFc0Q1pORnByQ1RUSHRnZThMSW1CNFpBeTFBVi9EQU5naXE3NE1XZnVxUThiOTdIOS93Q3J4eU5YaW5TSiBoVksyZ1lrcDg5a0NLYS9NaWFaNm5NU2xlcDRzV0dQaG1BK0VNd3dZTlEvbHZ3K01WZHRuN0liNTkrSXQvd0FiZFBnRGtseE1TTG5FIDhUaVJvNDN4amFNMXRNcVluRE1oNzVid09vSkZramthUmtrUmt3alNhUEtlSXQ3dDFpNHl5cGNiQTlwNTZYdGZzRWNNbm1BRGxuRGMgazlDVW14SGZCcnhFRG5vdFRucFMzVjlWN3hhaWV5RDBOcTdYd0ViYkZtbTFkWjRPN0pMc2JQOEF0djhBaWd2M1JoWDlOYWlLcXZpdCAzekpobTRieHNsT0I2ZmZHaGVoNmdpa1FXVW1NQmhiVzN4Nzd3UTRKNGZBTnpCbkYzei9lM2dVRStBQUFQMzhKaDNRNFhMVTdKRnNhIFlFRzFvQjNaSE1EV0FzWXJsenZubWN4ZjVoRHVCOG1EL3dBbGowTzFGdFl3UXlpeVQzdm14dy92NERBQisvMlZxZDBVNnZjSzNpa00gaU5TZW01OEczR3ZYa3E3U0hGaTJIYTdJL25HUU80ZnJPbjEvM0hUK01pL0tkMFVrSnY4QTkrZnQvQUFBQkkrR21sS3diNkxuUFNwdSBJa1lLaVFSUzJOeHoya0pnbVpIbGE2WVk0dFRxWWlId3JiUU95K3BMSWh0RWVMSWJXVnRSems4SGpqcU9JUjdnaTF2RGQyTTh0Sjh1IHptUzQxOXFzNlJFV25LdWRVdDhETGcvaWRUazliMDN6TVZ0NGJlZXdXUW5VRFJRNnlqY0o0VGhpZnh0MStBSDM0K0E4L1dSZzFBTnQgZ0V0VUFaSlNZWUd5SFo0b2NrZVQxTlBUYWxyMDgwUTdRTUlhR3RyY3doeFU5WUFFRmc4OW0yaG1HblRsWEcvUGdELzdEdjc0dUJmVCArNmxxTWRCYyt1YXRHUTIyUjYzcjEzTFN6MHI1VjhURitadkMybnZnK1lEeFlMTG5JWXphMmhaZVhpMGppU2o4QnQxQndBUDJ3QUkxIDRxclZwUVV1eWFXVFhDcm9ZdXdvMWUyZzdhZTVEWXRORlhyelJZeUlQRDkxSVlkOEhHRldBNFFQaDhaZkNoTm0rN096eHNHL3Z4L28gNUZqYnVOenZLN3lTQnUyUjR3VXlhU1R1TGJOakVZQzl3OGpuckZKdUtwU0puS1JRaUVLelpWbUY5UW1oaEdvWHZhamoyK2VyTEw5YiB4MjNUdlVybStHRFo2MWJDSnl6QTJ0NjNpTWtwWFhnTXFIaXlHTElaSWJoOHlDaC9QM2dueWhvMnozTmhEZlBqL3dDL24wRUJwVmc4IHlqYndhVmNXN0lOZUp1TWxUVHgyck9tSXFFMFJjRmNDbnNFUjhiMUJrRER6TjRUMSsydmgxbXpiWGhqalNWWE8zUHZBL3dCQXZ3RkogMW5aSFpIVEpaMUpDME1tTmloalZlMkJ6WWVwelZkeUxSYXY5cmdRNkhtV1JNWDRjQ0FSbm84eGxKSWU2RFBkMk4rK0cvbi9mZ1BXbiBVb1VCMTg4T3hrV25xVlNyaXEycEMrSDBaaDdqdFNuTGtYZ0xsRElNakozVW1KN0I4N2g3YThHQ1pNcHlabVIvTnZBRGdHLzdCNTlPIG9WeEd5eFNDUjgyVVpMaEgyWUFsNUxiRExMZ1ltNkp2NDZlRlYxakt4K3RnaGVYTGhrbEM1UjQ0OFhpTzdJK0NhNmgwOTgwNkpCUmIgYUo3STdIb3NOMkV1RFVZRGlaaUhZNlJVc1dhdjF1SE1WdVloc0NHMVQ3QXdWVnNYeGNYem5aT0UrQTJCKzRDZUFIbGpxSUlKL3dBeSB2YlFUYTNDTGRWRFcxdHNoUHpwR3p5cmxFMDJVMUNNRzhjdzNnZ3R2RGJhQ2x5UVgrTDZnR2JJazFkeC9ZTi8zOCtmQU1oRHErd0plIFc3YWZBd2ZuWVpEWklnL0pyZmhFemRKYXVyc2hHSERyZjdKOUhRMDhGeVI1WnlqNDgyOGo5MGF0MzhCditCOCtBQUlKc3B4OU9jdnYgd3hrRld5RERrZW9xSWowL1ZaaDNtTkNKWHI1WXkyUCtHNGg1Z2RnN3FnVi9lL0pxL09jTFVTVW1yY0QvQUwvbDM4UW55Wnl3UnBnNiB1ZGlFeG9tNEV5a2pqeUxaSjUzY2d1UDJFWHpZRXdzeWdLeVlJN2FnTzV4engyN1FDbXJ4eTFtcjl0OGRWSy94Tk1Ha0hWbm5ZNmFnIElUVlBXRHMyc0xnaGdYZ3QvTXRneUtoajVpR0gxSDBtK1YrblFvREFldUpiWnhndkhhd1dPUDhBN0FNZjBQM1lzbGd0U3RKR28rQmEgdFkxZFlXVXRZMDR2bUh1dDJGT2k2ZmRLTlNsSVFBdkRRcUhNT0tkTlIyMVB3aE1pTnA3dVRIQW84SFBkM2ZmY0F3WWUrREFsQ09uTiBiZ1pSSzFjcFZRRTV6UFlDV0FsNzhrYUFKYVYrUHhFeloxdkg1bGpjZmdQR0ZtTS9qQ1lJMzk0QUh6NERmd0NEN0d4aVJIRFZQVmQzIEhyYVcwT3IrMHVOWGh6QVozY09CeS9pT0ZnVEZzeGRpZlc2OURncVE5RG5KN05XYXVyRS91eHRKd0FiQjUvZnovVm1SWGtqS24yWkIgMkZwSXNoQ2hrUWdDT1BHd1NZNGx6c1pEdEZhSUVXT0JoYmw0OTZKNHBERkxHVEpHWWxabGtpYXdNeVFvSzNpVkpOMkdjY21aaDR4aSBoNXVjU0pORmhwTFpaRU5EYUloaTBMYWx0S3VIK0hEaHpONFlKalUrVmUyMERER000dDhzell3bFhoRG4vd0JBQWJCVytIWGN3TldhIFRZd0V4OFBPbVNWTXdCbVdnSlE0aWJ1a1ZrK0lIOTArR3Z3MVZ0WHlFN2sxWml5aFJaODM3Y0Jmai91QTRBZjdBWlJiQXE2b1pESGogWkl5U3JkVE1kMmpIRDBQNVlFOHQyQVlzbFBUM0JQQVRQd2VlYW1SblpzUlpObTgyRWVBQURZTi93UDdCaTM3TkZaMzhVc3QyTjV3WSBrTlhsZkl6a2VXeVBrb1MrTkVNZ1krR3lHSmpndGc4UGdWekNKMitocS9uVW53ZS9vSUQzQWVmT0RjRmVuL0p5dHQvVCt4eng5OW5qIDR4OG0rczdjc3h6eTdHZXNhckhBVjVQblAvYkVpamQ5V1dxQk10alV6bnJkZldZOWhjNG8xVk5xWlJzMnBkUTdBb0xDZHA3eG1UY0cgNWt0U3E4RmxPRVkxTGI0RUhUNHQ1eHh4ck8xTURLUnlEMWVyRkE5TDdpZndxNFJZYnN0Mnk2VjA5YVlMNHRQS2t0ejlGdG1wVlhQSyBSSzhXVlBWNmRUcS9jVEpjTDZXSmV4c2dHZ3FWcHJXRm1JU3JlQXJIMVloUVo2M0Y5ZnhRdmJCK0swdXY2ZkZVZi9pd0xJWkxPdEFQIEdVekZoTlRoWHRrT1VwZGpTcGpCVmRrTWhpWXR1Q0Z5MGg5UDVNVVYxbG1CbXd1bmkxRCtHd1c2ZjgrQVQ5aUljZTM2WHM5OHRDMmwgc01HVDdzcWRmR29hOUs1bGR6WTBJWmp0dStXUkQ0ZHM1dzhRcVhtSDdVTUdlYk9mL3dDdnYzVjFwaTRDcW4wejhhV09STGVOelZxNCBzWTd2SE5uMkhnampxc1dDS1dZRm8zV1dTU0NXMGtqUVV6QnNlN0N4UW9lNnVPbExSOWdTSGR3R3hOYVdxN2JjNnBSdDh5TTViSHFjIHl4anhab3ZteVdDSGNGYnpLSGNMQVd3ZjVwZUE0d1lVN1BvK3lHd2h3QjREcjBhVzNubTQ4T3hvUmpoT294OHV3U1FTZFBid3d2bmQgQmVybEVaRjl3RG1BOTJMWkdZOFFHQnRhc0JtbnEwS3ZxQW5pN2NKdFh6K3dZVkY3OVZGUzBld0tRekt4MWM5NWdsaFdDSHNpSVBTWCBaZllWdXhwUW1WRk1FSWkzeU5ibUVIRUp0OEE0aDl6TjBHTEx3RSs4YitBMy9wOEM3UXkyTW00SDAxVlVwZ2J1UkV2REphakV1WktzIGFYWTEzT0E4T3lKOHkxR1FnWSt2ODRjZHNmT0RQUGhEYVA4QVlENEJnQWMrd1JJWXBKR2VKMFdGcVRoczQxQXJlaGVTaGhkeDR2aWIgcHUwWTh0aldWVUlkWHoyWld4ZmRqOU5qSHR1REhLbVdkTnd3N2FBQjd5ZXRHWXZnODFEVzAyMVZadEE1dVRYN0NPTHBKZ3Q0RlRLTiBENXM2ZkRwOWJUeUg4aFY4OEh1WXdYeWRaQm0vOXY0SUg3LzF5QzdvTVVpanRYSXc4azhwSHEzcWQ0RHJUUkUvRjl4cGtXeUdBekRXIDdJVzl3RG5MTVQrS21PY0N5Z3haNFNiL0FIL3dHSDBFQXppRmJ5SUMrSE0yWERHNmIwamhKYXR6RHRlR0hBK0psTm5JcmRidmt0RG0gcjh5MUI2K2VhZzR6dGUwREVaNENHemJ4NSszVC9VUFRlbjliY25qT2dSWEJKdFM3bXRrc0loYlZZMS9MNVFlcklDcjRqNjNEc2lHaCBzcEJ3c1p0dENCWXhqdVlMUS82SjJUM2YvUHIrd0FBQzl0QW1jeHd2aU1WZVRtaUVQSXJMODg4ZkJ2b1J1S3pGVlNaRlFpVXlKakpCIEcyRnlOSGJWN2VGeTc2SnlXdWlsVE9hWjJpNkNWeU8rUy8xV0xoMUxMSFpMVUhMQjlRVVZlQTFMTUFjOG1NamhDVHFyYWp5ZUIrWVUgR2NYOEdrK0RQWW4xOC9zQ0Qwb0ZjZkRNbEE2YTUyUktaS2x6cklkOFh5RzRXRkRybG9sb2FZWTdxWEJXNGRrMUlmREJ0dVBia3h5WiBvVnhnemhPeWJBZkFlZjhBUDlEWTlMY001d2FtMVNHMlJYcjVuTWx4MU90bmw5ZFR5Z3NTQktHUGgvRER6RkNyMDg1L0lOUmtZekZFIE1tekhFa0liT0g5Z1BnRC9BSURCVjF1WU9XTTRUQXp2bmFieG9HdlZ0M2tOV2xmVVJ2RDVTS1EwTkNkYUtHSERCMXVZNFEvbnIvQncgL2ZKWXVSR1puanpad0NBOEFmMy9BR0J5Uk5EdWw1TTBTRkk4cXgyNVBzbHJJM1Z0MjJQUHVIbnFBeGtSc3NYWXpxNnRtTGJieHNVRiBGZThHN1BQTmZIVmpIQk9UYUNjbXFyajZVbE1jZ0NXeTVNS1FuWEJTZGlDWUFrMktHbWhvbjF0VFlRSFl6WnNPUFB3OVdmSFdBYTBrIGovUm5aVUZUV3dnbVBrd2NyT3VkYXVXaDY3aUVxeVpORXVtbS9NeXQyWnNWQmx3QXRZOTRpRmQ4SCtobEtHczQ0bURBT1NyaFI2Um4gR1RKZkxUb1VHS1R6WWEzbERZeGhoT01HVVduNXVkQThnRHNHMCtSRGtGdnA2c2dxTHJjTlhmaXovd0NiMUpFektyQ2FGUVFDQm1UUSBPUEY4WFdYNEhqcXNkNnRFTXBROE9leGdiUkF3TEhTVk1oYWp0VitvK0hHUE83NUsyK3lBK0xKVmI1L1BUN0FBbkU5R2VTZ3YreWVmIGZrQUFBQUh3RDkxYWpVYllGNlpvZnVYRWFrbTRJR20vU3JwN3ArcTA4eEVUd0I3Q01VVzdSVDRiSUhzaGJJT0VJOFA1Vk1XU2ZGeG0geHU5MmNIUWYwK2c3L2pEdkQ1RHBEVC9meTVmQ1M3TldveXZodE9HS1pQQjFPSEZUWmFiekFnbm1JZGtHR1R6bGFFRkt1ZUN2SXQ4WiBsaEgvQUJjRDRDQTU5VVNDL0gzNS9haUtQYkYyeEU5Y2l2bEpub0dkVGdrT2s1MEIzN3RWellTYTBjZm1JYWZWWmRsSDRUajFnUHVKIGhaUmxmRW1UOWtrSURQc0FESHRGc0FCQkJtMG03QkFXUVRUSThpUlR4UkpJOGNVdWtqbW1oRVFqM0lJeHFFWjVTZkpRS29zbnBDQ1Ygb3BaVEl5VmdIVkdvbzdXWWt1dTRTVTRCb1k0K0d5NFNhQVFGNmthN3NJOG5Rd2xQenh0WEZ1M3Vuc09KY0x1Rnk4QU53NFcrbnJmeiBEQkJiMzZ2NTRQNnp6d21UL3dBN1VBQU8wV3dBUFB3N2pEajVyck1mTEdRNHlmU013YnhkRG8xWHJMaTVTc3BVb09QK2gxdStCeUtHIGpnVi80TGd6WW9hdnpsRzNzM2dmNUFmL0FHRFlZZExYNjNTSkFGRGQzYU5TZVYyY3RlT0J1ME83M1lCS01Ob1BqNVg3SUhodyt5ZkogQWRMRUlGVjg1Um1ncXpMSnlyZ2pzOFliK0JQNy93QmFWczVhRjB3ODVjeWhwSnF5cHFCWnR3RGNpUTJHQ2lHdzF6R1c2djVMd09HbiAvVlQxZjFvOFRHYmxGb0U5ak5oUFA3QUFxTC9mMnFKb2xXWlErcWsyM1FLMGptTjVJeEhESEhJV3BzczlwbXhyMHpZeWU3NkpsbGFPIEFzNkRMT2xpT1VhMFkvYWxMZ1RmUEp5RkRpdXBqVDJ2c2xja1ErcjdUZGNGU1BsdjFqM0NyZVpXNWhUWkh2VkJYdERnSHpaNGJJK0wgY3doWkJ4U1lHMnVZZkdmb3J6dmFSVnp3L2NCUC9Yei9BTEwxZ2ZMUU1zQ2UrTkRJL2diYXVCMnMxZlBFc2VZVzBMVXp6NHlqM0NxMiBTcTNDMUhBdzFkbjU2b3RqQ2ZQSGtadmV5UEd3ZjJEa0hXUkd0azBlMm9sYW9LMHhDNUxiV05rYWZIYzdwdnNDd2JUVHBUWStOR205IHdEV1ErSW1JZ2UrTlRZUHNxMHpEMDh2Z3dZU3g0VFY1dmo3OWh4OSt4eHdtRk13YnZPT0hzRm5UNnV5VEZoU2JZTVdyK1RURDVWN1kgNU5ESllEMzh4OHAvajlxTldualQvUDU0TUdJYXVNOEo0TSsvTDUvMzU5MElra2oxVXF2cHBCRGhEV3NWczg2enVKNHNSVWtGaktiYyA5ZmN2YmkyKzlEUm9VSzd5TE1qc0ZqZnQzSSswSklHczFsUnRjVFhIY2I2a3U3NURqNTVYbEdMUnRxaDY5Wkd1eUs5aWZXNVNKWDFvIEhsc2VJN3FLQmhQMmQ0QU1DSEJYQnZBMmZhd2RYQk1jWDdnTDhBUDQ3K2Y0aFliVmZVQ28zMFNCb2JCd3JXNnlOTzZodzlLTk1PRTAgUG9pNHl5aFA0aFpDMHlKNThQWS96OFd0WlpTWlZDR2Y2WDRtOFBmQUJqaGd3SDJyVytsZTdESURPbFVFZUpCNjBwKzQ2bnFkMnM2diA1YWVlS0x5RzVNZzlEUTdVcXR3Y0NFTUhQWDYwdFJQSnJMUUxXU1lQWTBrSHY3OGc3K2ZQNEFDUTVhbGIzYzZQbXdzanRmOEFxQ3lYIGF3azkyUFhBdkdGaDhVcWxxV0d3TWkzWkNleUo1Q2FxdHZMWUszM2ZWMWNaai9Zei93RC9BQkMvQURrMjQyYVNHMWhrZG1FZzU5YzQgZlRpdnlQVTV2bmpqcXNYa2dHY3JuQkVqS2cxSEloL2tXUk9jc3UwcWNoaFRjTmwyMVhXNDZXaDFIY0NRNVpKdHcxQXA4WlR6NnJ0byBnd3ZsalBpOVY5Y3VKQ3lMSXJkUFFzWENaQmdPTnRVN01adVVib1QrN1ZjRC9ZTmc4LzFhaXY4QWc1NWNWVU5YQTM2cWxIWnRZWTlWIHF0c1Y2WGNoY3VVZURzRGc0cC96WERBT3E3ZWVObUdZbWhxOVo3R2JTZjA5dC80Qy9uK2x1cGtDQUczRWtYS1ZBdS9OUzJwby9iR3YgNWJJVVYxNDlMaHI0ZXExdUVZWk40YXJhWDN4SFpCZ3hEVmhqTi9XeHpmOEFqLzZmcWVDbHZMWEE0ZXFuSmtsV0VCVmY1Z1BUSmhoTSBLNHVXNVZ6WkpCRDJkOGNGdGdUMnFBUVVuaGtabVpEYUZsNWQ3UnBOMk4vditBREFCdndzenlxellQMk8wcWgxeHdrZkFwZ2JQcHhVIGNJL2dzVGx6MDJNcTBjWVNOQzRSUVYwNHp0SS9mSTU3Y2NjbHhXamxiZHdybEpuS25RN3VVMDlqUEtvNFBsTFp1emFuYXU1RFloaTMgTmhsVkxNSU9ESXlJY044c0NIdnpnM0kvT1NpdU1KK0VTSFpIUVVIZiswV3diQTVzdXY1REhWOW5hWHoxYnhwaUduM1pZVjh3N1VqMSBsRGNqMVQxMGVyYjhEclRJdDhnUTdHQko1QTVXL0ppaFJaM3p6Wno5UDJBK2Z3cm9ZQjAycmtYdzhHQXU3dGxBVGxPTzhPNWtkVERKIGtxWFhLdkRYNWx3Y0RRL3JhcWVZRVBrbTJQbkJtYlpBbnNBQUFBSDdBL0g1bTFMSVlOUHJZazIvVldTTkR1OWVyZXo1T2NqcWJIRmkgM2VyeFh6ZURDSE0rR1A0TytMNEUzTUo3cGlTSmczWUpWMy9mL3dCZ0FTUjVKR2pkNUhaSXJraFpHd3VOQ2lHSmdRMzlLU1JBOThibCBsZUNwR09QWTNJeWR0L1VnbEZaWkkySVlYWXJMajROQWZQVEM4SWVLc2dHZFpCc2EyNmlpVXpFT1NNeTVrWFRuRWUzS0VRK1hzNjJ5IEo2M3hKZnJRSGdUclBIdEF6STV2ZSswUjlCQUgvd0JnUWZrT3hNd002QVRNcXp1RXhRN0pFa0hnOWZsclVmRTNFQ2U3UHA4TjgrR2ggcjh5ZFdtQ2txek1Ia28rSTNCL04wZWY4QSt2eC9vclgwOW5paCtHMStOZHJ5SU5UL01ESWFTWTVHTFYxNnhsY1BhRXhPVzRiNTdyZCA0QWJCbmcxdjZHaDIrTUJtemFTam4vUC9BTEIxSldRNFUzRnFkYlBaVHNNUFhTWXRHSVFQVWF2cjB4TlE2OXE5RGgvTU1HSVppR256IFhpbG5BODFKL0dlVUxMTWMyTkpPSDBHM1FIMzVndzZXWmR6VUxLOGpTd3kzQ0ZTTzczTWJaam54alhhSzdyUElybGdDQkhqUk1jYzcgZFRsSElZekY3R3BidlB1NDdlUE9YQ3JhYWpUTHBSNzRUTXJPZHUvR1RhUHNrdmlRcHNpZFVyRlY0dGtUdG4xVVRFTXdudzUwOGVCMiBkR0dJbkdVYnVpRE43L3Y1L2orTy92eGhNRE5GYUIyclNYY2poSnFVb2tzakNZdWJPSXFiSVV0R1hiUXVuMC9nWWNPK0dHRHR6UHE5IDhWYkplV1pZVi9ZSGovNTk3QUg1QjZKTElSN0FBcGllWm5oNzFEL1cyeGdjQTdCTGhub3FtMEsvODRZV3c2ZkQ4SFA0SFl6SXpZb2UgTE1UZURRVC9BTmo2K3diL0FOT3dwUlorZVF0cnZkTU4xS2VwOUFYdFVDMkhJWEc0TThWc1RRTU1mRGNBOVZtV1J3d2FvRndkeG9aUiBadENyeWF6c21IZ0FDLzhBOWc2dmRRU1J0T2lTWXpHZU9WMXkrbmt0UUFpOGVtT01Fc1kwZVRmRjdEQ3RyQk94STVNWXdCSWdQZG4zIGN1OTJ6LzVibzExNStsTFFNWUxiMmVLYmF0Mk95SUFuNW1kWDlaR0xRcTh0WTNkUmVEcDRlRk1tSjdJQzA4VmUyenBoTVlybFAzekUgSjlDL1lOZ1A5ZWpUUWgxRUZzQ21RekhjQkxWUlY0MnJyTjVJTnNpc29kaldndkhuSzRCN0luMVZEY0Z0dlpBUUZnZ1RuRCtsN01KZyA2dTJTcS9ZQUE1NmZQOUl4a0wzRmxhTmIrU2tpekVnUHAvTHNjV3g3QnNwWHJIQ3IybTE3dFR3OVBPTVJpd3hmR0FPMUtVK3BwK0ZGIDhwS0l3d0hoai95NFkxRnYvUGNNY0srQjA5WDR1U3lqd0dORGlqWXltNFF3d2RlaHRFVmVzYVhTYWVZV2pCZUh1REpPUHA1NXFXN00gZWV6ZFprd2Ztd2VGdWdOZ1FmMkFaV2FiYmxFbTNnOHFSU2dlb2Eyc2lraWxaSXZ0eUNPTXZrbkZhQUpVbEl2OGlJNU4rTHVoNDVyNCA2UE1jdXF4Y2dibFhkREcyUW1yWnV3bDhPN0Q3Q01GQUx2U0pSUElmTm1CbVN5RjhPMVBsWHZtSCtqaFFuOUpON0h2L0FPLzhCNmZCIGkzRnM4aDE3Sy8wMnlpVEl3MkJjR29wZ2lRejEzMmFodEUxZmNOUGRWc2t4RHNEMjNHeStOb3pOendtVDk2dWRrZjYvNEErL0FBQ2wgeEI2YjdWVjNaM1YycEEwdTJwQ0pjZ21WN1g2bytSV2hldEQ0Znc2clQ2clQvc2h3RVFiYkczUHVoOW1PSklUbkFEN0J2LzdCQXAraiBjd0dJV0VrWnBoMnAreTYzQ05qd0hRMmhUM1JEczJVckIxOHhNUTN3d251REp2emdwVWR5WjVhT01zM205amZrSDJRZGcyQUFMRGNuIDNUS2lvYXlFaHdlTDIxYWMrN243aFdKUFRIV1JJeVFhUjBqYUYrZS9UbmlNVllySHU1czNmQUZXUU80TElzeHVNTldhMDUybTlrMUQgdTF0UkE3VmN4QmV1QkVsS2I1cDlETUtmY0hKT0grQ3FXMEcwR1lSbVo3cS85ZnlpRDd1K2YzLzZESTEvcERiS1JGOFNVbmFwYmF0ViB3WkxORHcwTlBFb1pRb1dBaTZmSThrK3lUTjVWSjVBOWpNK2g4Wlp2dXhzNS9UNEIrQUFEL1VkTTFFT0NSWUV5dm1qSk4zK0crU2tWIHZaOHhmWVVORGl1NnZYS0dQRHJrT1luL0FBSEE0ZXNFQzFUTnpWeWpOdm52L3dDZkg4RC9BRTdCZG9JQlJIU2E1S0xkWEFkUzFQa3AgYkFOY1RBa3hYUDhBRXpUZG9NakF5V1JXNWdSeURZd09vRDRPQlN6RmZVWTg0SEFpU2srMi93RDcvd0NmQkoyak1TckE4TVQ3VnlNOCBTd0puZGV0SzhXNVdKdWxGRHlCWTZqUnh5c1poTWpvanNpaVM0bjdjYnlTNU1mSW9XZkhucGIxQnAwc1FVNFh4bWxBSnNheG1LbUxXIHVObUYwZGtwdXVXR3VhbFVPZVEzQmtRakE5Ym5xUjg4amlCZ3pFcU1HV3BhSE5RZXc0c0h0Z3dNSFRDSHNBZktYM0RnVkdzbFZjUGIgYW51QmJ1YU9KZkZmUkcyUlpWUHA5Vm1JbHFLRDRvVERsTDNoWmNIM3JNbytjR09CRWsyRFFQZm53QTgvdno4cTBkb2RFMlFlUGFhYiBhc2hQdmgyYlJKakp1YU92UGRYb2N0RWFFOWd1QncweFEwTjhJTWxpd1A0ZUdwYjJ4Q2FPVFdwamRxU0QrZ2dEL1VrNlphM1lJZlRyIFVDNGsyMDRacEpzaUIzRGxBa09tMXlrSWR5bUt2bUxkMlVuVDh6dXBzSSsycUJNZHN4ZE5qS2d0VGhQQi93QmdQL3NEOCtXT1Y5U3cgZWswMHJtVlpkTEpORklYTU1FVXYxQmwwOGUvSEp0UnNFWEhIdUJia0VoRTZRd1NDRW9KbzRVaFpwMzNJMTN0VVFKTk8rS1hJdStTVyBydHhBNTNPdzFRMDlNbmh4MmJwemhMZGhaUmVyeTFvUG1UVy84UWJPMFVPTFBvWStxNW1qUmptQmtDeU95emVRQjRqRmhvVjdnWlVhIHI5bHdZTi9QK3dEREVCV1NzektXMjI1bkMyaW1XVE90c1BnV2FLZlBWL0xXMml4blo4S1F5QWNPbm1BNWkwSmlxQklIdVNERmw4Zk8gTW5FbEoyUFlEMy8wQzdGZnZFT3RDQUVYcHV6blpiVFlhUzd0RnFhYjNpSTRkcFJPcUJERGowT3lGdERodmxvVlhYTDVzUDBabDA1KyBNT2NKTmd6K0huOWcrZzA1cWV2by9Zc1BtOXNhQkR6MGxiNVJNY0hDelE4dFhiSlI2WVFmREZ3SVZrVE40T2R3TEwyY21qQzFkbUorIEVkdm9KL0RIdEY1K1F5SzY3aXM2aDY3cEk4SGVpUGRIazJGWHgzTllKOXRWMVV4VlRTTFNSVmlBY2tiUEQyeVVNc2FBUGJ4eDF1TUkgOGZLU3pCVE52aEpyY0NCamFoRWNPMUdKYjUrUXJ1cHV0MStZSHJkOGhtZUgvQXNBOHFzblkxb0YyWU1CNG16WndBQTkrZkg5L1BtMiBaVzZIZHkrVGNzVStuTW16QTYzeGU3TzhIZXdYWTFUdVFzT3dUS2ZvZGJjSWEvYWxjNmg4THBCcDd5em9mSmhpTzdHL2RmQVl2eUMvIEFOL1B1WUh3UEtqMjFBcmxsU1UvRFZGVzZtaldwOGVuSWN0OFUzS3VUQ2ZjRlZQZ2VxMlFnR2VEeEQ1ME1ueWhvZVVZSFNZVDZDQVAgMjYvZUFQOEFVQzJWUEpiVnV0eDdRQnNpcFhMalphNkZVUDhBTDJKb2Q2bEYyUVFob2I0WS9NRDVPc3RQUTUyNXZQS0dXMytFOXJ0LyA3UkFGOCsvYkFmTXpKbEcwQVJIamRTcmhmVWVRMWhISXdidXo3Z3JVTUNDTVd5TlFLeXEwTXd0MHJqL0NTTDgwYnY4QTI4Zk5qcFByIGF2SGxMNnFrWlUxa1Q3TE1LUzhyMkVCdGhUY0w1S0NiSGxMZkpFUFRHbnpPWHc3RzQrMnFwaXMyYW1yNHdzd0dFOW5qWUFIN0FBMysgNEVjNXA2UEw1SlhuMTdiU3E3dURiTFlKalUwSkZxSWJScGxReWo0d1ZXNE9ESnZBOVBlTWJRcWF4dU0yWStGR1ptODN2bXdiK0EvciA3cW9zTjhkSGRUSldEZE9FYTFFT3pXU3NtaXlDVzcxWEZQWElVUFRFOE8rUGt4OFhIQzRFZ0RnZUJwNVAyS0RCaU9FQ1dqYWlDQTJBIEEvQUFIVmhNdTJGT3hpbWRaZFFUVzFQRGJsWnQ4QjJTMkdIK0phTFlSU3hueitHOXdEekUrMUNINWFZSittVHRBc3ZtRHk4bk9FM1ogcHpmZ0I4QUFQbndEOGZVc2R1akJxU0s4SW1TSjQyeXh2Y1IwTVpyQVk3VWNQazVaOXVOUnNQVnM0Ym1DbGw0a0VZc09pUDhBYm5hbCBqUjlvNE5kQjVCZm1wREFlYlQyYzdPRTZxOXBSaHJ0SUU0UGtVU3JpNGJnSGZERndVbk0rSFhKK2UrSTh6Y2tQak9HT3lCRWZFK2c4ICtmZ0FCKzYzR0RBdXZvOE9saWkzR2FqTkQxdTd5R3JPWU5tbEhoTjhDOExQNDIrV1M0SWJnK0hMTFg1NE44R2NEdEVZem5BbmcrQW4gMTlCNEMvUDNTSFR5RWgzdUJQMHQ5emxKa3N4d0M4SFBHS3ZiTzZJRjNHQUtmSWR5REZEWHhESVZ2UUo0ZUJWUkg1UVY3TWVLcjdYTyAyd2UzUCtmVzcwL3E3dXhMNHZuNmZyQkQzOGVQQjYzWGxlcGJPdGplSlVYVGcrSHNiUVpOUWxic2t5azdnd09IaysrT05yTlpxOXlQIEx6dllRSWN3ZnJkMkFBZytmY3NqUjhDVjh6V2Nha1J5UjFXTzR0UDd1Y2VmSVkvNlVJbURGQ3lNaXV5Sk5HMmNjbU9BSlUwdml4WTUgcS9QU3lITWhZcXVKekJCMDFFYlNPdENldXN6MjREN3l6TW1hUWREZy9MbnpzeG5CTTZTNEdsaHVsQzgwT1NZaE9ibkJCY3doUHpHViBYQitsVFBnekJqT290dnMrMEtLSXhhOXM2cVhHeDJvWUxoNFlNQ3RZOWFVLzZzdGNqWTVvbExISGdkb3RTMDVseWtaUEZnODBZWG5LIGE3QUdwMGxWU1FQcFp3U2dPZkczT2xoWUtIbzYxdkhNZWcwcm9mWnlqNHJrcG9VMUN3YnJvTnlZOG1sSm9rY21qd2F1aGRmQnI0SFIgNllCbFcwb0JsTVlGSnJkb3M1dDB5bzh5eU9FT0I1OTA0WXRIdk1XekZrQjc0SUxkalBsUDBQWXpJc3JLdTBkekhpcmdnUkhQdndBLyBzQ0NnMEgxdlI2cnFOU0h2ZVZhdHdWZE1WM1kzRXJlMUxDYUVpMUs1dHBJY25Od1lERlZ6S2ZxdERxK1pCdW56bko3ZnB0bzA5TElJIElFU1FaOUJmajREZ05SZXkyRjM1bVpUQU5GdVdtOVN0UURYc2RUcmZPUTdRYkxnckE5c0thSGNJZGtXUStQa3h3aDc4d0FXb3dqTTEgb0ZHYmZEZFhKS09BcUxZVUZDQUh3SFhZTHpMOG53ekN2UHpnZzFEbUJHRzZCclV3TmhpMExrU0JZcWFucC9HNjN0UXduOHFiVjl0YSBXUVdzM0pwelJpYndiNXNqOTNmb1BQaitKK2trbVZBa1VVMm43STVZaExIaEhESWUxTmhDVDJSUnFrZUdROW9iTHVvUGtsamRpenVtIG9MdXp5QkhyemppRHdhcW1BUHp5YTQ1Mnp5QXVMaGtMaklkSFBkT0VpSmFTdDJhSVUyL0NtNVVwTm1mRGZMcnBTWTNwK09CNnIwTlYgVHlaTjlLTTJMeTZwTHNEUCt5RUEvcjdxZnZCYnVROVlpZkthS05DVURtNXlrcDF1MUVpRVJhQXRDUUx0cWsxK0gyM2NBNkd2YjRwTyBFOUhYR1o1YUt2RnJKMDI3VW1jUG56NEFCdjRFQUFUTnl4TlFGU3RrSmNkejJxdVphQTJTcG8vR3c2UE1BeFpZRnltRUdVd3Q4UEQ3IHk4S1E4Q0RobEdaREtjWi8vd0FCOSs4K2JXcFhhdkZzMjVyUUFucE5ibVVrYTc1R2RSby9UZ3R4U2dpcGRuWUhBeDRlR25yZURhM2cgVGpoMnpWMmdaYjV6aElUWUgyM2VQb1BnT2p2VVR4NHpRcEdza0l0VjV2Y3g4aGdZMndDZzk4YmVTUmp6a0NZcUM4VHYyWWlTT1EyNiB5Y0JrWmE3TWFGR3puZmhjZTdzaDJCSTFOM29NMDUzVGtvRmVsQTZrcHRFMENueElhc1VzS0xWOHdleVEzQU90bVBtVnloMkJQVm9ZIHpsRFJ5WklkdGtCbi93RDRBK1lMN0lwdEZmZ1o1U3dsSVEwT0Zvc01kRHZnZ1cydG9LcGxYcmZBcGxQdnRKaHlId1FEZ2VzYmMrTHQgQ004bkRmYTdnUjgvVVd3SDlnNmNGaVUreXZrZDgxYVJlNURocU1zaXRsTWhuT0dnK1krT1ZjcENIYUVNZXR3MC9VSmNJZGdNSTZHbiBnS3JoY1pGMDVVQ01jdEdya2w0QUg4SDQrQVA3L2doNm5vdlRmbGFUMlNlNU5WWEpKNkcyM0hVOE1QMm5jWEtWYkd3cmErNEdETlZXIHBNSFF1MHZhUkhEOFphQlpNbmFudUV4eEFQMndlNEFCMGxIaWlTTWFPWkl0TzdyREdyUTd0VG5neGdtU1B4eGJlRFk3UlJ0cnhUdEwgSzJwaDNwblE2eGh1elJiZW5iR3N0cDF1UVVSSkdidzRwaUdKNmhoWTlieXJZaHhRMmNwYWhJQWQvd0REb1ZnTzc0TWlzS3ZVcmdQaCB3MXV5RnRQY0lZUDlKeTN0bkY3TVJuanVqU2UvL1FlZmJDZkFSRHBKZkZ6VkllWE5SbGUrWlpMUXM1d0pEYTNMWXlrMnZBTVdHd1REIFBhdUg1bHE3Zklmd3lZd29zZWNOOEpPZjVJT3dkTlNaWCtuOVNJTGVWWmE0MnpESUZTK1FTczZQYkJnOEwxQ1lKc05oZkU5OE1mTXMgQ1dxb2FlZW5CMFlZVTNNWThKSVREZjhBWVA4QU1CMVhzZlZkUHJGOGNjc3ZKTjJRaHpMc2lTVnV3aDh0a1ZuS1hYTDVOWDVqZ3lWcyB0M1pWNjJqZ1hDQkIzTkdLREdaR0I3NXNmZ05nMzhCN01FU2xwMkVudmhaeWdqbUtRN2VQcklrU1MrelBsV0taazhNTVQwdTJkSUkwIFhzaG1qeEc1RUt5SXYrUjQ3dkFlMitmTldMWVFOZ3ErMWEvYXUxVFVjRzE4eXRyREgwNjV5K3AyUnVqdnhka1Q0ZUNlaDJxSFh3NnIgaFlGRGd6RlpNelJ6alpOazRSejRBZkFiQmlCNnNoVjV5T2tQcjVXbVVlU1J0d1h4cUhvZlVoU1Y1TDVhcTFmYVR3c080QnpFempkMiBPQmlkOXRWY0ZuaTR1ek5qeE44NDM5KzluN0ZCN3ZDcU8yTEY4V3hwMVRhdjB4MUx5UlBrMnhVNUlrd05sYi9GMWpPV0Q0UW1WdkRNIEJ3NUFQWENsY0NHRDVNc2xMUVJtYm11OW5UNEJCZmdDRHNCL3BQNjFGTzFGZG9mTTB6eExPRjFpYktzQmluNDZRbmxFMVRxK0taY04gNFQvNXdnWS9uNEZqVEJuMWZrM2hBaHgrQUh6NERZUFA1ZFFrV3NuaDBMNmZjVFQ3T3NlbUdta0U2U3hTNmFEYStwaUU0bDJwbzlVbSBaMjRuTUQ0VFNTUnc2dE0zMGtFMm9qbWhEeTVhUm9TWW1Md05XOU1yeXd5K210SmdRaTdoWnJLNGpxeUVOUHZDNlNvSVdCem45VlY3IHNkMnh3UTFzaDJIVGE1c0o4S0xkWDJvOWg0YTI0TDZmL3dDbjg5T1QyWVlVUXhheURDWW0vdjN0NTkreDZxS3YxZlltMWpjb1hYdkogZEkyY0VVM0Myb2J4RXNnVzVSQlo1OEh6QTVoYk1HR0I4MkdyMjFIK3pib2pNMitlN3dmQWMvOEEyRHFCcnUvWmI0WVBIb3R3TGRrUyBxeENMMUg1eDU0U0Z1eG5MczEyM1lYQmJXNjNtYmd0N0N2Z1hoa0pqQmZ1VDgzK3dmdjIvODlKTEExVUE1TXlIVlZlb2JzNFdVcWt1IDRDZUJhUFlYVjloQVNoZ2V0NDJSdzlESDF1OFlFRzJEdWJNcmk3TXJMNlRzWDlnUWZBZE9pYnVjMWplS3FTZFU4YW90NENWLzd6VW4gSnlreFRkb1VuWjBrbUVLb3Q5bExabGJiZVJaSHhMbUdPS0dDNDJ4QUVaWTdWRUJtek5admltR1pFTmorWnFpbUdSc25UaFpHY1hlQyB4alMrVnU2a1NnY2Vuc2hpazN6Y0Z1MWZBdFFjbXNpN1BXQmZaT2s2dUI3L0FMOWlmZnQvNnNoVjhneFlKV3lBekc0TGVja0FrQjNlIEE5NUQ1ZGJ1WEhqMnpyL0E2ZmZMSVQyRGZPWU51enZMUHloWjJQdWpxSFIzN3RGc0cvc0hJTjBmUE9IblJQcHUzNytKSWNXeVFqQXcgSksyUWljb3hxaDhzYVpYeGVIVDhSd2wxOEhybXRkSjl0TlQzZ3pOQXRhSm5PRWhFYjZDQUFIejYvd0JCTU5rcGQzc1F3TFNLM3JlWiBhcDlraU5GaFRLL2w4OHBHc2dLdWhwN0lHZkE3NEhUNGRxUUsvYlp3YXpHWjhWM25mQWxYSlJ6OFJBVDRBQWc5UnR0V0RCbzFsampSIEp0MkdJVlI3REx0TEhzMzNZaGhObVFSMjRuSVVWcUxDRk5sNUlHZ0NVaDNCRWtvak4zZWU4QUc0eEtaVWM2V0JPT2p3cEk1N0ZjY0wgam1XV2VTZUwyb24yUVczV0s3aTdrWkI4Tng0Zk0yL0NDQkh2aU90ckJQaTZ5TTVzN1lnejREdTZmMzgrQXdtSmkyS2JkaEZwRmthayBKakd0a2l3OVBUMWRJbVZmZHp2YUI3NjNnNE1uSkNIem0wZTJnMlREYXhhelpteG16YndBMy96NkQ1OXkycERXNEVkRXNVb1lxWFRlIGh1dDF1OVhwS3EwM3hqWXozUTJBS2FSV3BpZmZGY09KRDRDbldFQnFyZG5XVmk0MlltY0M0YjRBUVdBQWdBR0JBZmtLb0FleENCNVQgRC80UWRieFVzNWJVeUV5dDlxWkdnWFU1NVhUeUh6TFUwOS9jT1ZOcENwWUsyTXQvYTl6Qjc0N2MrUWtFL3NEQWZRY2RjVEdKSlRFZCBPWE16N3Vxa2NZUmdZNHE2MTdKTGJKTDd5bzdseDZVK2JPR2xqZDBIMDg2YlhmSVl6TWtVcEVkaTlyZFJpY3VTUU9QUFRzeks3dXk3IG15azNLQmN5M3hLZ1VrdElzazhZMmNEWTFoU21oOUgxdWh1Qmh3aFdETVZaK29DZThzbkJrTzBDZXhwS1RhSVBZSDQrQUFiQnlESmcgK3M0RDVhaXVCUTNaVnRCRE4xT1FoMC9JdGlrLzVzNkxEVi9EY0hDWk1jTEE1eHlBQ0R0VGM2YTRNaW5EYnNFNTkvMUFIK3BpMEhDRyBVdlFQWUt1blhaYzFWVS9HaU1BRU84TmxWdEZjRnF2RjJRUVQzREd4M0NaeSs0cUhxKzZVZFBadjlUTVVjMzk0NTl3SDMyRHBBNXR5IExhNXFZeWJRVnhvM080UkpkMkJWQTAvWjB3OGVYb3QzV1F3Sjh5cTJTeUloR1pha0JQZ1RtVGszZVVaM1VxNjBhdU9jQlA3Qno3ZisgbHFxeEtnUkV3UkE2aU5iZDkrV1NVaFpMRy90MkZKd2p4c0dqblMwN2JoTmp2a3JKL040a1Z4eCtUODlSc2RiUzdmbVEzeXZhZnNpWSBlQXlXd3d5TWtpd2x0TkFsWXF1K0VJYjVnSGh6RStINzc4OFRIbG1GcTdOc2Z0L3NFQUFQL1FlckVyVXo4YnJsSTV0QklMSVljVkpUIFI2eHY2djhBVUpnbW5sSW9obUcrNEJESXhyYmUvd0NFRURaOXRLcTFpamxFUEgzU1FnVklZRUhrRDhlNTZnTDZVZU9ZSkZmMHl1QVggZS9RRlgyMWFJbXdKdVNQRTh5UTNkRFYxc2ZNVDRhMnR2aEFQY1VDdjU5alBpeU01UnVieFZ4dXJYaEIrK256OVJQM1I0VXJOMHRVZyBlaXNlY3lhZTdHc2hTYkY4a1NNTDB5dVFJalVaRnRRZStNZ2ZrbGJyN0kxQVNBSEFPTVp5Z3RHV2Q3U1hiRGYzN0RBQit3Z2pxRklTIEowVE5pcnRMbnY4QUMyN3J0cnQ1OGIybXQvRWZxbnJRZHdWM0lQdGJDUEhHUmF5QTdqM3gyTnVUN2NqMm0rallXTHZUTnpFTzJzckogZnhwUU9nU3VlVEI2UW5sRmRUZk1CQkNZbm1BN2lISUI2NTdmMU5Zemh3WjhWM2taK3B2WUtpZi9BS0RzSFhHMEZLVGQ5aEZsTERzaSBtYTByZW5MQ3Noa1BORHZDdHJhVHpRWTdxSWJocExaZEpZLyt3enBqTXlxOVgyK3pBd1pzMkR4N3VvUGdEKy9wa3dRYTYwTWFhWUd0IHluMzh4UzJUSnMxZ0pPRFJadHdXTjhUZEh3ZW45MUUvamJCVy9MV0huQWRaV1VQRGpHR3lkOE1lL20vOCtBY0JZVlpwZm8rWk1zR2cgb2VvZW42NXpyc3hrTGFxOEtiNUthRjQ4NVF5SHc2MzdxSWRYbUtkQXNIOG1qWGsrQzNuWTNZMmsyb2VBSCtmSHdHd0h5WjVPOGtZNSBZK2pqRSs1VmYxSGhsaUdQeHRNOTVkOVV0clJZN0o4N1RzKzcvd0F2Wng0eCtkM1B6a01BbDkyWGJnT0hxa3VtdDcrMVNid2syUWsxIGlTckloZVQ0WCtIWEt0WnIyNHNwOHhpeU9DZWhrWms3Y0FMeHRaTjhhT1RJNFJKOEEvSVA0aVA0c0hTM2gyUUhNcjhOSUY3STdiYUUgcktRWUpFTE5SQU1WSW9keVEvaHpMVU1haEdSZzRyQUhnYkdEakVZb3IzbFdXeWJJOGJBL0g4SDdZRDUvcXMyNGJPMHJvS2xDMHhlbiBVTUNGNmpKZFVMV3JaS3VHdTA0dFRyUlpLY3d1Ynl5UHl3WXhUOWpIZXJFRDY2M0lMQTMwak1QVTdJdnI5ZnBQSDhhL1FnT0dMV0lKIGVwRCtBOGtMVFZSMlEvOEFoOWtpVnNSNlpjRmZoNzQrVmxGZkxJWDRlcERlRU90MkZ3YXJwbytCZUVQa3dzWHRtSENRbS8yNzkrd1ggMEJCNml6VENXVU5BZ1JwazJHUjVSbEJKZTJYV1Y1cmtVS2NuVXJ1V0FRTVIwbVJJeXlKRTJUeGJUVExWZDZuMzNacmROOGM0QlBMWCB3NXN0TEtXV3RqVzFqVDkveldSdFlSNUt3bzhSRGNxdmxxNnVocjliaDlTQ0daUStIOXkwOTh2N2MyWjhyQ29FYkFIc213SVA5QWdQIFkvUzBQSUZyWmhxYlZld20ybnp3RzJuY2VuOGZFbUJmSG5JOCtqekMyWW1URU84R1NEUEhuamhnbXpGQmJNc2c3UndDSFA3K0ErL0EgRzB2bVhpdVZNRGFHbk53N25XV05OMGovQUlLU1BpQ0VNb3ZGSHluK056REFkeHJkeEROVGJlRSs0a05HSjRxN01UL0tKdjhBRVd3YiA5ejVCZmQzZVNvN0dxY09MdW1zZm1PV1NOWHQ0NVFXZkdoRFhud1doOERtY3dtQjEvR3hnTGVlMUZ1SGQ5b1YrYzhKZGpTT2ZvTStmIDJEWUQ0QmFNUXNnWXU2Rjl1SjBqczRSRVVyTGx3Um54enpkZkhUcFJISkxFVmsyblZBanB0UlVLcWlURWtOM2JlNE5WY0VXYkNXakwgUnp5dlQ5clY4eXBJSmNoa2xPdDRaaFBYcGprNUx6a0xmT051RXpVSWh3OW40a3YxcE9NTS9QTGtabGw0M3ZZdmFvdGgyQkJQbjJvYyB1QmdUZTdWU2dhWlNYYUtrMG13LzR5VFlEQ1lGeW9oU2tXUmcweHpIRkQxQ0orS2VxdHFnQjJmRVh0YnlNQjBtYjdWZ0FHSUQ4dW9KIC9xSEJwN1lHbVZMYlZYb2RTdzF5OGlUdkhzaWpOTjdDK3hSZFpXaFY4MGhXNGN3WW1MZGYyb2pnYS9RNElmY3hkRGpHYzRiM3pnUC8gQU1BZlZVUzNLQVI1YVVtMlVuS0x0WVdja1JFZXdRRmI0bUpMM3BRc2ZtQy9WWmQ4cml1Slk2SlhObEo5bDFZaGpHVlgwNldXeW5hVCBTSGJZQUZ1WUFRQjgvVVFBbzRxTVlrZEpLdFV3a2llM2JFcWpDT1I2eUlORTFXSm9OelZ6U1J0YU9CQmxNQ1RVc3R4dlJrZW80bS9pIEtyUUpHZTV3UmliQkZjeG1Ia3M5UFhLVGpKNVJWNURYNlRuT0RETWZHaGhLeFVNZ0dmSVloYk1MNGRWYldDZURtY1pLN25nRHE3ZTAgZmdJQSsvSHdIVDRITUdudTBHaERxV0JjeHVqUmNPN09QMXZZTnNGazk4VGFSMGxsRnNndDhraDJwQzNpZlV0NEFkVy9jeDVROXMyTyBya2syYzRDL1c3c0RBQTJCL1dveVF6Tlh6TDRLSWRGYW5MQnVhTk12aFZ0T2oyRVA4WFNJVTRId05EcDk4cE9HNEdLNXJPd0o5allEIEhrbzBDN01PQSs2T0w5aWhlL2dOL3JIZEF0Z1YyeXF5YUdIVzBtd2JnTnFhZlJ1UzNyeWVVdEIzY2ozNHJjT1NNaTJ3TGFxMjEvZEwgVXlvck9MK2pCQWdSSkJnSDZvdUF2d0R3Q2xtaW1rdERxQzhlN01zeng3MTVHTWxOM0pOd2RvNXhYR3h3YjRaaExwbFdVN01rSTJZWiBVYnVrSEJDczQvcFgzVU83T2lBUlhkUEVabElXVytIbWg4bVlVRGQxTXFUWVFBNnJxL3RqdHlldGROVjRaQmJEc2pnbnJaRG5IOFVGIHRISnZZMURxOVpHZjZXdkI4QWdyNEFBQTMvbzhiREZtVjZQckd4b3BoQWNIeFAwdXFaakpEaDhWdG9UWlordW5CZzA5aDZydml0dzkgZ1ZzMUFiZ0ExelpIdTBQak16SE82SnZZQUFBQjUvZ09DcXRSWHNSeVpHcXdXT3E0cVJsQndoYU5uSHpGbTk3cFNtTHJsODdQekE3SSBIZkxnVzdVc3V2MjIxSm1MTUwyd21jKzd2SElPUVlvTDhmNkNuV1JNVW80ZXZtaW1hMzdxdytRMkFIUFYrV2ZNVHpDcnVSaXY5TitOIGJ3NjNNTDljVUQvOXZEczVQNnl5dkdMc2NlRUZCQWZmdkFkR1kyRWtZMUtwcUVqaE9ucVZNSkgwN1kzRzAwRFF5dWFVY3pOTmpkeGkgUEo4MWJ6TGtZaHQ1UEhKaUQyTEpGbGd5SlF4ck5yRm0rT1JYTXZaZFc1TnFIaHpXL291aDJFd3lGRk93emhHcHNWWWtDeGxqS21yWSA0NWlpdzUxM0xaUjVaVXl1WlJpVlhxcXllaDFmMUloQlYvVmxJaDhLblJRdGZKT2RLZC90UzltRW1LREplUStJUWl0MTBWV1dmQUhwIEZzRTJVd1hWTU03TExzRmxNY2dPM0ZqOWd6SjB2T2lGTW80VWlrVWdRUEJWYmxnRmtZaERsOGJuVnhwcUNpRkIvYU1LRlZ3aGlnS3ggeExTWXhvdVpwRUZLT2ZIKy9Wdkp1T3puWFFBdXhZODN5U0NmREQ5L0g1L1BWamRQdXErME5PdGxxdDVMazFCczFvbURkUjBkcXJoMyBiYklPaklhdUtpWUdXVEc0SWtLbi93Q2ZIYWh3akl5MlpXSHBSeG1QcHh3QjQra0Zoamh5QmZ0NmZCdkdreXMxaEtybTM5S1VjK3JOIFpxK0xIVG5SWXNLVlE5c2lEMkFmSGdsV0Yxc3VRRGVxeTBDbURrU3k4TWFhV3ZVOE91OWVtb1FDOVVCM0gvbUFzTVJwdm1aYzl4MDAgcm1wYmNqMVNnWXhhdjJVUGl2UTY1ZktuaXJINTRyZHdRdzVqalp2K0YrdE40R0RPVUV5WVA4Sm83OS9RTkIxRjREam91UlpGeWo5USBaNmV0MjNhalIzSUxZMjFNSXIzS0pXNmFmVnUwSEN5TEl0UjgvSkZjMW9uNzR5TTFaL2lBbnpZMmtuRjgrQUFjL1A4QVRXTVVjaGpFIHN3ZU45S3pnTHRYdTd1SmJ1ZmNrT0p6azdjdTN0SFFBTXlRbHNCbjlSV0Q1MXNiQU45cTFsdUFqOFY4M3dWUjh3NGgwZnBMWTRxZlcgNTR6WVh4QjZUZVZYM3l0UGxqRm1nQ3lkeU40WkVJeDlxQTNoUzJJY25XYjRVZWJNQmhPRXZIYUkrZllINSs2RDdvSU9ESEhXN0cxZiBEU1EyMzN5MmtpMElkOEQ2OWxuZ05aQzN4d1gxdGxmSEJQWkhDWmFoNm4zeWovOEFTOFhVQXdIYUlNM1ZZQkNmOEQ0REh6K2pUWUpzIHVkWmhMTzB5NmNGRlp6U1NEWURPblVFa01TRUtzYitIVmdSSCtxYmVwNzRkMjd4M01JMVBEdTBYWmVGeHZPK2UrSVJmcjlBWDM5Q3ggUGJDMjh2THBkM1ExVmlua3EzYWdPVFYxc2FYNjlWWkZUOWthNmJFMEF0dUV5dDN3T240TDZHMUlkb1VzOFRCbG1QbG9lYzN0MjREeSBEc0dmMkRZQUN5Uk5FczdPSENHTllnc1Z4b2tzc3F4eGFkSjU0bmtUZXhtV1VIQ295cE9iQU0yNHBFbUtCM1FUSEdWbHpqZW9vSXo5IFUyUXV0b0dQampKeDl0blNZUjdjclNodytuMm9IV1RlV2dCd2Y0aEVDNFZ1cHpLYitXTGl2aEJ3c2h3VHpDZVFXOEtsdkQvY3l2M3kgWm5qZTBnR2c4QlFVSHBENmZ3Wmp1WXlMbERnYmFlMml2UWdtNkppNUdyM2hzb1RFUE1aQ3lPNmtOazdnR01XMGVQNUlUd2ZMUVdlRCBoTHNTZGdBQVA3QnY2d1Y3WU9hZUtuc21wWldUVzk0NmVEbzBTOFdFSC9LZ0cyaEpTdVVQZ2RiaDdzK1pzelVCY0ZKcTJ4NTR2V2UrIEJON0JnQUIrM2RnMy9uMWhiVWZOVUdhREd2bk5xdVd6T0h5eDd0WkFld2c2YlhJbWtkbkh3M0RTdUhNVSt3ZWZIbm9NTVlURnE1TjUgQmRyM1k0L2JCK3I5MU5OOVRJbXFMNldOTk1ydmxNaDlDZmJ4OVY1Y2ZTa2V6bERqSnRFRDFKTSswSmhFdXk2elhNbUFkY1A0WkpmYyBsNWQrT0E1N1MxK0I4ckcrUWEzYjhkUG5vZFBxV2t0REpWSXAyUWVmR0FzNE5FVnNsRktyWUxJcXV5QTdLbmtNTFVnT0Y4VG1RWHdOIFdaLzcyOGYvQUp1bjM3WUhCM1BjTDRYOG5Oc2F0MEFEUE1TWWdkSmhoMnd4RWZCTXA4VzYvY09Id3c0Y2N5VGorbStlcXA0MFpWNnUgVEp2SENlRCtmZmdIZ09rYlg5c1c0THB1amFNMCsxV2JUMGZVVTJ1NURXTU5xY3NudEZjN1dCcC90dUhZNlRaQzdCM1VVa0QrSEo4MyBPNVBjbjRRSnY3OGc4ZjJBL3dCTTNOSXcxeFBJd0FOL2FYYzhEWEZiMGxQeU53bENNVDFlNzh5TUgwS3JPUjRSTEZ0a2RQc2F4MmRtIHM5WXhLWUdqYVVEUUgxOVBnTWNWL0RvSUdkWW9ZNEUxTVNSN2tNTTBzMHJ1K3pNMFRTU1BPMHNranZnck16UzhXQlgzRzVRcnlTU2ggb1M3SkU3N0F4VHV5QUFTemhWSG16bCtCWFFJK0hOUDlxa2FTN1FVTzdNZ2JKQ2FlM2k3TW1Ra1F3SjVzS0FaaERra01PK1BqQXQ3QyB3Z2Y2WlZ4aXlUMlQyMkNva0ErZzhCNnZJMEs2L21zQjYvUXN6K0Y0RG5jaDIzSjFJZHFpbklXaG9tVitobVE5YnJlL3VFNENubm5oIGszTjhLTE9QQ1Foejh2SGo3QnNEOGdkVVZWMlZmc0taRFhEME5BenJCRzNaTHRCcXF1Unp3OXlGWGl6RzlQNDNEbVErTjhENEdqd3ggZ3hYRnN6TURDRy85L0w1OSs5MzUrN0I3WVl6WEJWZHpLM0dkczJHdHhGY2F0c0ZzR0tsT2liR2lzakFZbVF3OWtUTjRnbnZvOHhtNCBIVjdNVDRVa20vMzhBZlArQXdMVFF5eW1IUFVPVWpoYktUKzBodVIzSGpSa09TWlozNU5ZNG56bHd5YWFObWxJZ1NOOVJ1WXg2VS9UIHhqSXJacXBPVjRyeFpKOGRURHhROVVWOHZyYTVTNlRldGtYbUFxMnpWZlZRTnI4U3RnWlNSY2d1SFg1aW40YUhNaHA1ZzQyMStlZUggMFlUZkZjWThuT2JKUGFJL3NCOSs0RXY5UExVNU1xdnZRMUxvRzVrRmtWekF5N2xlK05TRlByeGNES0t5eWt3ZTRyZmVCOFR5REk4VyBYOXFwNFlNRnE2d3MrYXE3Zno1OStBSDM3cERyRkxnOGI3VldpcFJxM1gxcVZXMnFaL0F4a05qSUIxUUZqcjV5Q0l1UG5KSm04SS9iIDZBRUVNeXlWYUJnejZTazdBQXhRVCtJRGdQUjdYOVIxL3A5ck93alZmT0ExOHNGMjd4dkdmWHVvR0pha3I0bG9XTk1JSjVpbjZyMmUgcjBQODRUNTBLc3lkb0MvYTFBanRqd0UrZ2ZpSitmajRBak51NnFTUlprWkZRNU5lYzZ6ejAwa0Uvam1HTmRQS2tuOVRmY1lKdFhJcyB0L2RvNG5WMXpjU05HRngwN0loQVJvRFo4eUdlTnhYYVlrYm5MRmVLR3dTSUJpWkFVcXhRR3AzeVlzT3R6R2RnMlE3UVRLOXFYVVpWIGEvRHBORERzckl3T0RXMjhEYWpCTkdRMmdZVDN2SFl1QTcvai9rQU5jdTJMWXNaZ1pNTXFvS0JyMXlzSmtsMSt5VGEvckl3TGxXYlkgMFdrMTliY05ONjI0UGkvc1lGUG5xcUdzMllMS0RCbTkxY2JlQUI5QkFIei9BSUJnRURCU1BQUXE5dW1wYXJyY3VCNXQyUHpockF2WCBZaG4rL0FHYTRRN0lNT0JoOFlKbGpiZTJvOHhadkpvcStzM25oQ1NiK2duL0FHUG9MOGY2M1dCSWNHTzJHck4xRG1JeVN4bUZzVGdxIGh3OVRoNHRZV0ZLc2FZd0IxdnVReXA3ZzRZa0NGbGhBNnlUVjdRc3daM1IyVGY4QTc5d0ZCQVAzUzNDTGdrbVozMFY0RVNXVWJ2OEEgekMrbWdkSlpvNHNrRFNLSDJzeGFqY0ZpaG9OaTlPc3l4U0pYdHMyclhmTjBlS0h6enoxcFF5Q1cwVm5jRlhpOUs5T0hxNU1XanA3TSAzQ2Vqc1JocHU1ZVRaVGduc2t5WlQ3SmNGZjFaWEpDMER5cWhFMWxYS1BMenNudWNBQVB2MkcvNy9NWEp5elRjbFowQnRxc2JZUXVFIE5zMnA2T2gyZVd1Q2tiYVUvaTJRbnZpM2NIQXc0K3QzaDhYejFPM0Fzck8xczJ4N0hhWDZvUG4vQU4vVzIrV1FCQjhSbnVGeHBLUlcgNDBRdm1ENUQ1aFE4SkF4V1J3aFZXWWhRekhKSGlld0FaM0owYmkvZ3plTytlZjhBQWIrZjZNVEMyeWEzTFFNVkpLRHY5Mlg3YzNjSyAwYkNzSWVXVzAwb3c3Q3RmTVEzQndjSzNZSmxPbmg5TGVNN1g4R1p0bDRUaHdIZjBFK2ZQZ09qY3Z1QkhWNDRWOEY1ZDNETEd5QmdnIDU0dmtXUVAyZWdacldSNDN5MUxZMWtMamY4NXBZeUl1bDdoNUk1ODlMeW9OYmVxZEpyQzVOSEZJMG1PbzBQY21OSlYrMHV4aUxpVHcgczFvQjdoTWZiSW0yUGRiaXR6YTJIYWxxNGg0RENhRVU1elZ3TUx6MWdxSThBeFA0WW5ycHVtV3kyQzBHRWl3V1NTZW42VVVtK2RRRiAvTGRQdTYxRkthYjAyMEM1QXhhZ2RQZlU5ZzdWbmsrQUVNRENhdWhyS3p2WnRKMzlCL3I0L3Y4QTFVdS9KR295MUNDclpiNEdHZ1dpIHZnbFR4ODdVVWovTVF4ZGhBazViK0pXNkcrVEVOeFcxV0I4Q3ErZGNuRjRETjdCN0h2OEFzQUQyNjB6NUZGNVhENTZra3V0ZXEvYlogSVYxVURXN1k0bnBTOXFNUTJUNWt6VWhkbHdmemh6QWhaWnd4V1pObzR5amZka2pZQUFEZnYzOCt0RlNOWTVFTzN1V3pzL2RuSjJGbiBtbTRxOGhndUJxbU5ucHNUYjdPc3ZLTE1zRzJhU1FJRGNRZFFPM2JrVkhGazVoU3ZiV1hUZ3FPMkk5Y3JjT0tCSktLZVVyeFNweU9OIHJHeVlqaHpLdmJhbExlenpFL1RmTXRSaGNIZ0RvLzhBbmR6U1pQYzNuc2wvWDNnRUh3Q0QxTVdRSGpsQmVTcnU3VXQzOUFmQnJ1WXIgMTJIeStlV2dqZ1Zka1gxdmphZk1Na01MR243RE9jU2ZpM2xtUjdSeHcyRHRFQXQxQkFlQVNWMFdCRG5xWWV1VTJudjhGb1czNHNRaCAyY1lTRU04VWQ3R3B0OTRmRG1hZTdUaDhFTndLUG56cGJOeWZGNVpmdXdSSEFiK0FYK1FZNytieDlUYm81TDdna0JxeDAzNXdhbjlTIEZteUZ1Z1VlaGx1V1VpV00wSjdoRGNGdUhUOE93SHl1WHpUZnNjUHhiUVU5MHFycnNlRUUvai9zRUFnMWh0eUlTdWFjNU5lSVNpdGMgYzVaV2ZrVmo4M3hIY1NxVmQ4YUtrbWl4RWUzRExJOUNyd3pVVll5SnV4ZEFrcCtIZGpHajJFQnYzVUl5ZjRRR1NXcTVVSks1WlB1VCBzaUx1U2syQytQRDBudHkzT2JSL21DYk0rSWZnOWtOOW92c0FEZ0lEWUVQUmJSY2p2VjlmYVpGZlZjMnAxUUpNWnNjQUw1SFhxM3VTIHBXd1hZNGRnVzRiaHFjZXpDK1lncVhFb0tlODdYemttRENWY2tvK3dBRDREd0Q5MGFwY3l3TEFYN2FqWlZENmtBTnlhZXdsRE9EZzQgTDkzVU9yZ1VqUnZYS2ZYNWhreFpBN2dRWFA4QTFJYWQ1c3haWnU2Q3lzSExSTi83K1A4QTkvWUdUVmJBUFl6bXJUc2pxdWRxbHFwViAxSUtiQW5tS1h0aVlteWwzbVZiMmkrTWxxVS9UNGZqWU95cS9uMGV0dkt5K2YzczMrL2dEL2dNY2VyZjZlVzFhQ0grNzZtSFZhZUZWIHFPTFZpVkl1d1dhMk4wTTNuY3NEc3F5eEZlTkZwNVpOMkl4VE1aTy9VUUhIRm5jcWZkYkVERTRpK1dCNnBtRHYxSEREOVJXYVp0UjIgZkVldkt1WVhpMm1wWFhsdXIzSjNpMk0rTCtuc3gyckQ3ZXR3WHhQYlp6Z3pQUEYwWlpCL2k3ejc5YnZQa0VCMWJsQmRhNURJdEtQRyBSTHRtUlJWTU1hbWoyOXFQZ3pYejB1RVYrY29UakRlNzN4VVlUOC9LMXo0UVFreXNyTXZuMUMvU0ZPQXpTUnNPQjNIRkJBTDU5TkFqIEFPQlVZZXRHT3BaTm5TczZVV1QzYjVERGlCVGRRZ0g0akFaVzVpMnRoeDYxTzVnaGJ3c3JQYTk1M3lyblpKQmdMZFFUL1B1bStqTEYgcUJoZEJGTlFSS1BWYWFkUVVpZlh0NUdSRGkwSG5mVDZCYjhGRFRlNFM2VXF3YzRZVXZQVXE0aU14TkRXTUZsSUJtemlQaXZ2L0g4WCAwRGhnZW9Wc1hNYXVlelVNWnR1SnRzc0lRRHA0blNhV2VRWW01SWxUWnNaaHR4Y1Y2ZnRjUG1VcHRHbGt5UnA2TW9rOVNWWllvbGpmIENtamxZQnZLdDJNRFh5Nkw4eko0ZlU3S2dFaVZrSG5aa1lhL3RTdmJBVXpFdVU3bmdOOE1HRVBXQWhvY05ncDg1QWNJSEcrREs2dVQgV3Q3U2F1ZVArL24zNWdQejFCclVOamhwK29kTlNhY0pJWWhrcjFIMUZKN08yT0FGOExSUU5ianJVWkdSa3Jka3I2WTFWTFY5OGJPVSBKdmxYVm96SFBOblBvUGdOL1BuMzhqdmxOMk1MUG9aUzREYnRxMEQzSkxEdUdUY0VzektWOVFwNW90UzhMSVQ1Z2ZlRjl3bmYrb2VrIEppendPcnhuYXVydTZKellGOUI4Ky9kQWJRcncxTFVvWVRXMVBKQVpVTnRyS3YxVWEwUzYzUFNwY285V3hDSk5odUVQajYzZ2h1RUIgVm1EQ2dzV3MyWUQ4SUQ4Ly9rQWZzSXJLclRUT2U4NXpNZjhBRlJYdC9WV2ViUG54eDFBN1NPcUVJVU96QkVycG50UnJsUUJ0Y3ZQUCBDL0g0NkZTRnFYWlByUE9TTTBDYmZLMURrb2dkSlNhL3B5WlY0SFQzS3NhWUF0U3lPMWEyNEQwTlZQRDN3NCtjWnB4WEoyWnpid2YvIEFJRnNIVTh0NWJSQVlJWjYwQU5wVEZ5bVVtK2EzbXBOUHFZZnZjdlNya3JjZWhoME5rdUN5Q0hhdXRLUFBISERqTk5sUHZEc0Q0UHkgQUJVU0QzZFArL1psdGxQcVJ6SFVaWHcyVC9PYnNybUZyVVJXVzExTTdxNnVaSUlka0I0WWVZd2JHMjJCc2RWck5tYldUS0EzYnptSCBuOWd4eDJEc2RaQ25mQ0crQ3MwQzdFaDQyTFV4aDJWUjh1V2VUU3dBWGFoQXcrSjdqRER1QzNCZ0w4REdZczltMWZqSnczZ2JCL2ZqIDZEejRCMEtoUXlNb21pbCtkUUR0Nmh2YVF6U2QyY25KRHZpTXVPMGRYN00ybGxTUnhqbEc1RTJCdXhUV2xaMXlhTjBQRmMvQjYzYUYgaktkZW1aNlRvVnFXcFZyQVRwSHFVUFY0a1A4QUt0aTBLNTIreU85bGtWc251RXo0R3dmTXJTOG1uYzJiWkFteGdFSC9BQ1lOL3dBWSA0ZUhyTlhNYWU2Q3YwYWJHcHI0L3Fkb01kNVd3cHZtSXluQVBNT1NRdzZHSDI5a2Q1NDU4cDFQSm94UVdMSm8vQ1RkNFZDZkFmUVFIIFViRGJjVndZQnpWSkRTZDBBeHBaQThZY0Mxa1N1V2FmVHhoUExoMXVHSGhwL0ZZQ2VCK1k4N1dMSmsvdTIrSU93ZjM4L3dCTnF6Rk4gNGNvZGV6ODEySldjeHUwYVhYOE9aSWxoMDIycTlxOURXMDk4cXVHWW1WdXZtR284bmdXcmMzbFhLY1o1c2JDYkEvOEFkMzNRWDhBZiBqTlBESkVyRkYweVJTTVpTOWF1SjRvakZFVk9KK29qYjZoak5IY1g4YUFzY3JVd3NjMll2Ym1YQldZK3llTndNMGQrTm1zUlJ4bHlzIDhESG5mWDBPMkwzdW01enpITVVybWlvWVJoZU5RbG5LOFF4VXJRNzAybXVIYmNQcW9NVU9ua0VPeHUrRjAwN3htekh3V3NQSVQvU3Ygd0FEQS9zSFFRSHpLenNzWGNFcXRNazJCclJ3SldFSHpyT0RxYklybFBsVkt5cis4VVBka3g4VDVqVlVpZTJ3YUcvaUZLTkJOWk9KSiB1N0xVN1JIN2RQbjZEMy9vUHFlajN5TGJCNVNsNXhLMmp5UzIzR1FaSHl0MTVrNTVYb3NwREg3UC9KdzJDR2M4OUFXeGpOdWdzWWNDIGIwRFA3QmhzRDk1OWtENGJiWE15WTVWVmVWdEorYWVweGhNV0ZrMlJERHVZQ1pjajVaQSsrUGhzaTJ5T0RHOFcybjNUMlRXY2JRMUcgSTNCemYrNEg1ZjhBOHFpNmpsbzFqWm5jWklFQWRzLzR5T2ZDMWVmSTU0K2VoamE4L1R6dERHM2RqaElTdWErRGVISFBGM2ZGVVFTdCBWYkp0Y0JPYW5QV2ZwNXBnNTZtaHJpNTZYYlQ4NVo3dG40Wmg2Y1Y5YnBOenBtbXBrZ1pvK3hwSlNRK2hQV3VaZ3RmMmRpaFlReHViIEp3bUdTK2RhYXpUYlRzR3Vrb2VjdWVxSy9sMXNDeWtPS3VYb3g1OUJ6NEFiT2x5MzhDTnJKWHpsck9OSHFVV3dyM0JUNjBhRDNwaFogbXpMbnJWbGtPQlFGWlBCanM2M2pTeFVMS0UwTE1uOW43a2hQSHZmNnBjMjVGdGlMUE5Eckg5UklPTUllT1A4QWlRUEZEeHRmdi94KyA2STJTbTRjQ203VXVTalBqZHFuRFZwWnFQVzRGZ1labG9WTEVUVmRQSU9GYnNqSmNFTndmQVo3aVU0TThySGpGbm0vKy9qNERZRC9kIDNyanAvVm84QVY5d2xWVTRFcmFiYTlVbXl0M0I4VjFOUEZMSDhGdG9CNmY0SE1XMlJQcS9HY0JzQUNiV2lkWnE1Um1HUEd5R3puUGogK3dBTi9RVC9BR0lhbFY4VnN0UlNxRE9OaHlpU0RMTUZlc2xrTDB5cjN5V3J0SGIvQUo0WWZEQ2V2bUZWUzRIVmFlekRCVFFzb3p3RSBkVGFPQXFLM1YvQitmZ0ZSTCs1TFlFTlh5d3d1ektyU2FCSzNOVzh0SHlqelIzSUtORXM5cDlmRStxM3d3aHJYMlE0QjFJUUdwa3dlIFh5aHlheThVbUVxMzMrL2ZpTHJuYXZTeDZ2UnJGS0pwMGltaWsxS3g4UjZxTmJLd3pwejJiZ1NaZTQxUERHOUhDanJqMUR4U3ZKRjYgYzBrTWtLVERtU0Rjd0JraU5DcEJpQ3JmSC9mcGUyQmJEUStOQ0crVDZsR3BPVlRMYjJubUVxbmljRFYyRk5sYmVZY0szMUNPREhjRSBPZGJWUDIxaXlmOEFxZ0ZFMmI3c2J3WVBBSVBzZmZqKzZ2TEVJWGNMdG1BeHUyL0hzbC9MVndrdzZQaUdNZTdENE1ocDh4YnF2Wi9EIHprUGdjRXdzckNHMExKTUdrL1J3QURuMkIvei9BRTRLckYzZ2tWWkRNM21ZQ1oxQmFuRFphNkVNeFY4dUhVb0d6U2pRNEQ0ZU16bmsgeitlVXVCd0xVdDlHS0svc2poTms4QS9JTDhnL1lPb3hnSUExZVBYdGpJZXlFM3lhN2N3SlRFOVNEZ1VPd2hiNG40TWpKTTQ0SEltQSBhamI0RnFNRXhlMWsxa0hWK3lBd0IvRUIva2Y2SUxjU2lNSStvRUpxU0o4NDVOa2p0ak9LNU8yZllsYzBlZU9hQXhkcFp3N2FiZVhlIEJUQ1FiM0tiYVpOdVZ0dG4zSlZyK2V2dHFhYWxOSWFJY0JDUE50elpvSDRtbjhhN1NLblpFTVhiQjRXdHNCZ3hWYkl5YmhOVlI5d0EgWG1ZekxMNHJrOThkallSSDMvWUQ0RGYrcXU1akloSnNPWlBpaHlTVEYrTkVNYzJIcENIRmZJalFBbUVGdVozVXF2Y09EbjYvNXdoOCBGNVF6TElNSTdwTy8vd0JBOEI4K2FxOWdPdG9WZmNBZStIeC9ob1R0WkhLTk5NeVJkM3lxSGlYSTVQaWVZUTdVZkdRUEFEZ3dEaFBhIHY2b0tFeG05cEJ2Zi93Qmd3UDhBbisyUldZZXVWdUhsV3F5RXE5N1lxVjNNQUV4akVmSDBYZk8xbUdCYlpFK0hEN2Z3ems0ZWVWYkkgWmlmUENiTmorTHU3cjhnNGdQYy9zRGpLTVZTVXAyV3lRWjVZeHZpRmFlUEVmeVk5Z3k0Q1B5YjZEYVZIa01JZEVPM1RPbGYzaUtXTyBaYUZuTGJpRVpQSXY2ajR3NzJGWWxxTkZTMkRMU0NqNVVxR2V6bEl2SDFPQVZlelprV3hoUGNhWW5zbHFWWE1RekErMUFZRndxVTVMIC9GL2FCblJ3Z1RnNzhBUXZvSjgrQXhEN291U0d1YXVPYmhybVpENlF5RzdDTU1qVllIUEticSsrZFBveUczcDdJeU9GVnJqQXRuRzMgZ2VFeG1HWElyMW1UNzJ1d1I0UEgrQW4vQUQ0QUFXMWRxeTBtVlBWVnMxbllDTksxTVhtR294cUVhYXE0ellURW0xTlNWbmtuTTlPZiBRbFZ3NTUwMlBQZWpNSHdraXlHdTBLejlKejFoRENUaUJOQTF2TXc5UHJ3L2JwVzlQdVN2WHJIRVR5VU1DK1dndzRtR3JVQlp0ajJnIG0yRlNJdGxUMC9lTDREekhBTk9nT0NHZHJkNXQ5cGZGbXMvQ2hOZzgrd2JCNEJVVExKYlJ4dW1YMDhNY3hYMDJvdUdhUHh1VllMQ3ggVnJ5YjRPVlhXd1dTWkNkMTBScUIzS3BTYU5ZNEdtbzNmaGFzN3RQN0FDcHVtM3lBVUEwNE5NNmhIWmVSMGt3MFliWGJTK20zY1lZRCBGcTJSdzlrWURGY3oyQ0FxcDR3WDlHWnRrU2JSeEFlQTgrQXc2amJZT0F4ZDJOVlMwM25YWStNYlUvd3g0M0prVmtZcVVEcUVwR3hxIDNZSWJnbnZpZEM0MkRxVnc3akYyWlo5dTJlK2YzOEFlWC9QZ0VHU1QwK09aMFoxalh3WkRmM3lVa2pvandlemc2blc5WHhWNlUwT00gOVBNUTdzaHJiQSs3OWFHSEQreHFHK2NtU0RZUkpxdEJmajZDQVBnRUkrZmFreGJ2eTMxT3lISzBKbGZ1MWcwYlNkSTNSRGFyQWlCNiBRbGFjRTJwVEJDMUpnZUdIVDEvZzhCZnVudXFUV1doWDVNRHRJSmp3SEhZSDdZRCt3RkdaSTQzbGtmZmRwcExETGpHMUZBTXdwM0RWIDhiY3NmemxseGl1VENVd0lJbjlJcUdLRGNBMGtaNzBZZHRWa0tQTjM0NDVyR2pzQXROek02QmFCZ0kxSnNPTkxxOFBuWFI4TW1yMGkgZWNqRlh3N2dtTWlJSFg3SnZCOHdiUWNQYkVNV3MyWWoyaWt1NE0rQVArZnQzWU9yS2c5T2VzRFR6WGtPcjJLbERWWktXc1pickl4TSBUNm1VK1VXTllVV3VMSUhtRTlrbXNsa1dBWm4wUFlBQTdjQXpiQmJ5VEJtemZzQVFUNStvdVA3QWZxd1JNNnczWjh6cTYweTJTTnRSIGowcjA1YTdoU2N3enA4cCtMeUtuSmZQNExlOTNBdDJxbnNtRDVBSVU4NHZLeGhnOFlnM2JFTHgvMlh6OXZId0hSSlJkcVEyMVg3MDYgdnRWRzhadFkwNVExWGphM2pzTDVja3E3bGV1V1FkZHRWb2EzOE8wQTdVQnNDQTFHTUhrVjNNNXlFQ093UDlQQUFNRUhvakxQMnZnaiBiVHFWV3N0UUkxNVNPQThZNDJjMm8yY2UwWThncXdxbUFkMXlvRmxFWGZId3NxSGNpbHIxQXlBcVJRakxFSElLZ3JXWXRnd21MZEkyIHFrMStHbjJSYVJaSEp6SERnZFh5cGVwWlhodUV3d25tTzVLOHRuS0g0SEJUMWxtVnFiV1daNHE0M3FIT2IvVVIvRSt3Y0I2ZkdXMFggQktCMzlXbGFBVklQbEhuOWVZQUsybnhMSktDN3VBL01UMCtxNmZoMVhxRTNpRUJUNEh3eWR2MWZoOTQvRjJDQ0EyQUFBUVBicVNqayBGY29wclptTG5WdFpOZzJkSHMweGFsWW1XeXQ0dGlpUUpSYmNLM1d0UGR3UGt3YytBejNkcWQrWDFjV2pJeHp6ZFZ2d0Q2RHY0QitRIFpoVGVOUUJtMkt4S2FlRDJwQncxU3JhMkpSd09kSFU1a3BvbE9WYy9jSHhEY0E5cWZNQmNmclQ2eXM4WGViTTlqYVQ1OEI0QStnOCsgQm94cWptcFIwRHhTYmFhakVKSWtzY3J5TzIwYlNUYlZXZkViTldSSmxTdmFReHFWZGtSbzZ5Vkk4UjNWVjl4L0gvYy9ucU5rTUZmcCBGUjAvWEw1Vzl0Sk50VkxoY1ZQdFVKWCtZNUhsNjBIeFBYK0JtRnVZNEQrOFNIL0l6Qmd4b0Z2T3g3MzcvUVVIWVBQZ0lETk9hbElGIHFaMmJUYjNhSWVBeUxjdGZkcklSNGtPcFFNUk5QUXlEZ3Rybkd3N0F0L0FYcDg2R3piVzBMS01jdEUzc2V3ZXg4L3NHSUJ6MjNhZG0gUFl2a1ZsV3BaRDNyQ3p2aXROaHVBWVRXd3F1V0ZPcnJGd0V3eENleVVrbjRiRFFCREZsRzFvMDJqK3V5bk1jZC9mZ09JREZnQUxkVCBvTmtzRmx5UU0rWUVvZHR5UWRoUjY5UFBCWXh6SmhQU2pBOWtXNGVHek1HeG5sOXRCbVJpTUwzTm1lTVRiczhiL3dDQVArZjZrT2wwIDJtakc3TnFaTng1WERhK1lOSU1wbWxLSStJdU9MZEVjYTBOdUZJVXRpdWZWNms2bVdiS0tLQ0RGSWxaSVk5dVBtT0tRRUprY2FNbU4gV2JBdSthQ3JoNDFldUQ1bXpadzB3TFQ2dUVwNjIxQjdZV3hZdUloSzdJd2NsY0dSRERqL0FKMkpBOUJzZ21UNVJ0bTlwSnQ0L0xyOCBBdzU4ZjZaQ1ZXYnhVRmlKN0c1SWFsblZMa203WUlUYm1zQ0crQWFtTEN6d2RnVDk0cmU3RnNlSHJtdEI2RjcyWU1WMmdZTTVzN0d6IGlDQVh3REJ2NEJmUHhyWVBNQVVjYkZyUkRXOVBabGt0R1dHUFRLdkUwL2pjaTlja1ZQY0VKd01jd1pHQVA4OWZucXNNbitHK1M4SjUgczhId0NDZmZzQUdQVWsyTWx1ZGtsVjhmQ1VreFZTckpwd09xalNDOXpLS0pWdVNNQWRrWmFmbXJZOHdxZ2VlQTNEazc0cnJPeHBKdSBrLzdCK25nRzY2REZKWVVrdlBHRXNrMHVtMUM3bmhvVmlmdm9qdVZtL3dBTkVXZWxhVFVNOGdrTU1jVHh4dTZFL3dBSEFUSVRpaFk0IEdKK084VWI2WHFPNkE0Q25reFdOUEczWVpTVGZLSzNBTkNuZkI0REU1UStEekQ1WkZibUU4ZW5nOVBDZjdNbTV0RlhQS3ljU2JzM3ggQnhBYi9zQURvcUtWUFg1UTVEWEFObkpOL0k3VUQ3Yi9BT0NuMGpWWXQ4TEN5dW9WZm16REZrUTNER240S2t3UGxIclpONW9lK0ZsNSBCbTlrT2JBKytBKy9kSitzNGFuOGNEbTAya3V3ZlZkTXNpVkhEWlZnVTZIUFVPOEZVTXc0dm1KaW4zRHVnWXduNEhxNERyQk96ME5tIFI4VW5IdFhpdm9KNWYyRDllcXc5UVdYclJYZExXbkJJMGo1QW10ZEpHSHB0aXdsK0F4SjRzVHFDVlliZXY0WFpZOWpXbmI1K0ZnaEwgOEVKRGFGckViY0gvQURKZnFPSGZaZ1lzVjcwK2hlWGhhVEdRRkJXTlpiVU9Hblc4UU11OXRva2pqMzVVZkdQTEdCTkNWcXJ1eUs1UyBHTUJkeDNZVmxoYTBLSExIbnFVdEN0MGVWVTlWdmtDWXlYQnBwU1l0SWg3bURxNlJNcTg5TFEyaHdYN1V2aWhsdFBzZ2V0NHZnL2c5IFYyK1RWM3hac3c1M1NOOCszL0g5RUhuMGt3QzZQdjIzTWtYUmxoRXE5clRteW4yeFc1Q1F0cHJSdzIrSWRmMVVZY0tUVDdVN3FkbFYgOERhaUdqSTJOeUU3eVJ3Z1Q2Q2ZQOTNRRDkwWDZqeWkrR3FMVWhFaTZlNkwwMUpPcTViaHZBZFdrbHBsaTJPazF5cnNZOVBoNmZFVCAvbG5yVmNVUGlpY1FlUml1aDArTE5tYnNTbmpIZ0MrL0FjQUFEcjdtWFlQbFdaTXN2V1JrMlJZYnZEZHE5VjdPMDB2RllwNmErYWhBIEl0YmNHU0dHdUFPSFQxdFZVZ0FLZERxRDhEazk4Tm13bS9nQUFBQWc3QS9Id2FTWHNlT1hVMlVXUGs3Mm4xTWc0aldmVDluaTNLSGQgT0lMOEc2RWZhRWpyZ2dUTWtBeTdja1RzVkVrY2NtTDNYWmsySXZnWWl1cDNMc2pMYUljMnBjMnlMalQ1K2tVYmNhQlQ5aFBERlNmRCBSSUdtcjRjR09xNGJKWkZWOHdndHEraDF5K2NaZmNCYXk3aEFudWdzQ0RVWEFkZ2Z1cTFBclVPV1dqMCtMUElZMjRNcERiYWNxL1VqIFoxc1E4RDJuMklteGUrQzNWV0w0WTVCTXRSRHNHZjhBTTNOODBsNmVpZkNhdTdWYytRZC90MC85Qlk3VHEwRjBQV0diUWRjVndickcgcWhsMTFScTNKV2JXOVQ5K0dpa2J1VHJJWG5HSFJDZSt1QjliVm55c0I3VUd4ZVVMMkduTU8xMk9LQ3dZWTQ3OTdSekE4SWJiWmxlNiBRYUhocUxKZWVudnNNNFdSZWRMTzh0b1Z0UjdsdkRoRDVnaG9lNEo2T0JYL0FNcUxLMFVhR1lZYy9oNFNjRDZFQUFjQlBuOS9nQ1JTIG9zbW5jVEZKSkltUHNNY1cySjJpZXZVQ2g0eTNDMFdVODN3U0YzaU1vZTRnOGNjaWxhdVNXOXBTYjR5d2ZtdlB4elJmRnlKYWZiVlAgcmRmU3ErTmg0Z2NrN2gxUndhQk13V3IwaXJubkFlWVF6RkQzWXlKNjNPNGZxMEJ2aE96QmJSZVN5RDJRM2hzQy93QUJxTGYrcW96SyAwc2hJaDJReHR0ZW03Q2JWUmJiSEJxQTF2TFF3TGt2VnlMK240OTFFOE9QWks1QXI0SEJrZVNmMGI4b213aHdBZi9zRy9nTGRabGlGIE1wWE15bU1EYU5KNVJoVHNKZXM2WHg3dWhGVXdDYmRqaGZGRDArbnpId2Y4NkJSNEdjeUl2UFA5N1ZkNS93QUFCQUh3SFNaUTdjYUkgRmdNb2F4cnlDVnZGaGc2eWNBTGlQdzdjbE5SOXRGSHh3WkUrWXlXUUhUNWtHZXZvZGpTeWZGK1RjSFNRaVRnQXFJQUFYd0hnTVpBTiBSTElzUVI1RWJMUEtYMUV5bGVVTEMrQjJvd0pTdUdMY3FUbHlBRlR5UVJaeURNdW1LeGdKdVJpTWVJM2p6WExEbkZzaGRuampwekdEIEZxVWpIQWhtTlBvRWxLMUxhZUpka1Z1U3RCc0RGTEdMSnBSd3Arck40VHpBY2ZNT0FkUURhY2NFYmk2dXNqUDZKUnNYM1lNSDVBNEMgZlJvTlB2alQ3YUdTcjVSNWtWYmFhaGtTeUxnem5DbkE0RXBYcDZwYlVzRU90dUZWN1I4SnF1a2hTMWNHSGxtYU56WnVFNzN2NEIrNSA4L0lMOXNDWlF4OW9KRjV3OTBoMUxjeXZNSk1OZ0hrbnRrNFZ5aDFrZUtHQi9iZUhXK3BCY1gzQnFRMCtsbmlHTXN4WEtMRHpnYnc4IC9qK3ZuL2Q1VkdsM1JGcGV3cmsxNmtyajczTmFUWWNnUFlWYkNURG01TzhWeWIrU0xhMjRQdTNoemxMTDdiajNmR0M2dS9aSGIvVjcgd0NENTlnaGoyNU5hcVJ4aEpQcDU1YjFKZU9aNUloR1FwYWFlVkpFRUFhVkhpaXJjam95VVNyamxMRHB5OHR1ZHdDSmw5U0NNR1BiUiB5clBHMTVOUlNSdmFjZ3ZGbTNjUU9rYjhabFZpRWRzdHFyZXdnNnFZcjhTSEFwcTlZd3ZoNmZEZk5uWkNIOGd2dmtFd3pFMWNvTUZnIHpmOEFZQUMvdi83OTF4N1F5NVJpd3Q1R2tzbXIrQU5pdmt3Mml3b1pROHY3b3RqM0J3VDdVaDF0WDYyanRvK0FjaHM1TVh0aFBId2cgUStnOEJ4dzMvb0UxRU5yQWgyWUJsTkZoTXRrWlJoa1hySUx6R2lobjFYaTJ4YlJWUHNDWnZGVm9iNHZvbGpOdndIaUd6RENuak5rNyBvMVhpZi9FUjhBQlA5QkpDeUdoTnJmNVd6eVNTdmFiczEyUWVUMmdUREZpL3VRY2hEcmR3WkZ0Yjg0MmtOOTVNVEtGQ2J6NXRKMy8yIFBnRCt3ZENJMlJrbmQ1aThxSzdFU1VEK0I3ZnQ1NStiNnRtYlpNWkNBUjFTaEtrR1JXOXlTL1V2SHQ3VXg3dk9WOVJxdlpqNVh6d2sgVDZIYW5ZUEFUNHpGVzlxTGFldzR5M0xpOWpKOWZ6RTlEcCtIL3FOWmFlZUJvUzBNM1RjOWtTWFlHZ2dFSStBcVB3QitZWUpnT3Z0VyBselhKUHF1TWg1dWNObHI3Sk04eEZQTU1UeUhNS2dNSWkydjRIRU8wTGFndzFtelVOWFdWa0hWd1EyY1BnSDgrQUFlNS9xM1Y0YWIwIGRqWkhaSDVzdDJwbFUrRVhoNkhaMmw5c21SU2paS1BWWFg3SndOd3ArdHg4d0gzQVBja0dlMytXSnY4QTgrUHZ6OXdEcFYxV2gxL3EgQ3NnQ1ppMXZHcmRJRzF1dmN3MVVTQ3hoWGNxOXVTdVVPd0poZ3h2RU53UTlocDk4ZUZzWFJyNXVlK0JLU09QSGFJL3dGKzgvMHd2QSAyY3drUTcrTzg2UllZWUVZV00yeXZKcTVYR3ZtK0ZxclIra1JTSldBL0FJQVB3UHdPckthVjlBdEo2aVJWMTJLdWwzRmZyWE0xRTJhIEZwNklvSzl1YW1RL3FySVo2UVdJUDArbTBhcHNRK0JKU0JwQ1NZQTUyQlRJQXNaVEFSbHRoRWFUeUdXQzNzK2RVTXpMYXAyZ1R6WWkgSlF6L0FCRmIxSC9TYkJsTGZXYmJRN0VMalp3UUxHaCt0bEVVc1dVcThsU3dNYURsSjNvS0M4a2tVbFpDemxaTFQ2MXRxakdVQk96cSAxRktvTTFrQUFuQ3JQSE5aR3ZQUEo4SDhkVVpiSk9QbjkvOEE4Nk8yVXdodTR1eUtsWjhtcGM1a1BhaDNlbjdoY2JZTG1JdXFEVDJWIGl3NnZXcnNUekVNT1FjQWZIM3k4SHl6R1lwYUZaak82Vm9wS1A3bis3djc5MHd0TmEvUWQ4U0dSdHVTeWJhczdXdmFrWmhwZWtocXUgcG9jcTBKWjZtMDhmTXJma2pKRElHSzVzcy8yZGhrMFlvMFBTeUROSkFRR2Z3ZmorL3dDd0grcTYwK3JvOWxsYmFmQUtlTkpac01sZCAwaDJ5YS9kNFpTeHJZYUl0a1dCTWZFUVBhZ2NoRGd2bG9LU1B5Wm1WMWQ1dDlId3RJSThBSDRCdjU4L2dBUHoyWldkb09TL1JwUkR5IFgvVXNCYXFCWWJnc095VmFKTDdqVU5iVlh3OW9ocmVCaERYMCt4Z0hhVlZNYllydEJNWjV2ZkFCL3dBK0ErZ2dBV0dVcEhEQnE1a0MgUEhnMjN1K0pZcFRwMlg2YlVlbnFkb0xJUVk2TVlKV1NxQk5OSWt0VGFTQTFXY0RjeG13S1lncnpJbEhiZXV6SnUxc3VKaXQwOWtmQSBkZTZibkd3dG5xQURhTnNOQklDckZsc29VckpEaW1DRU44bUo1aUVQMk9CWUFHQ0haaGF2eVluMnUyUTV3SFlQMzhBQUtia3VqVEk3IGd6OTBaZDFyamdHaDZvWlNSWVNocDMwelBZR1RWQ0hGeGdWV24zdWhYd3Q0d3daNkJaUUpPcCt6TWFiR3ZHRHJqZzg0SDhHREZnd2YgMEY5Q3N3ZmFsalNLOVF4YktNR3U3aGFJbXdGWmtIMkZXNkdlYkhJb2hqMDRPWVE5NHNDdHppSHhLY3RreGo1VitCTTRFMUR1Mi83QiB3RS92L3VINmQ0OTBKRmR1eWFLSkRVbGNNZHZTRjVKNUNzMXZnZHhnWlZxODhaRTlidFJhWDN5eHVQdHB4YjJ4b2FFWkdlVFlNM3Y0IEFDQVBnT0E5RkJwb29jbGlXR0RjdWVlR0NsZUhWenlTUzZnZ0QrTFBKRis3UGJzWTQxMER6TTFST3J6dU9OeDVCMm9vVVJScXUyY1kgNG93cUt1UjhFOFhRWHNqTHVqTkZqWEtWTWJRTFJaQ1NXWDhUQkJlRGdRT29VQ0xEMmd0bVBoaDNBZVlCcVRBZVJnNjFXWXRvNHlkOSA3UndBUHo5K3dBTmdmME9rMys4eXJoYitsYWgxSXdoNmV3bk1EeGNld3ZtTXFrZTByaGh4Qmx1QlBXeDlXVWZaZHdIbFd0eVpOb1Y5IFBJdzVoc2h4OUFmUVQvSCtqRFZvd1dmcHptVzBCeWlTUlhyYUhrdTZQTTA5dkNRbjZnNHREVmZmSGIrN0szTWNrK3lJOWFXQUFPT0QgTlVDSHVZdzRidEZKQnZ4OCtnL3Yrd1ZRT01tdmhTbHRXanhvY0kxTTFwY0ZYYWUwOERrcjh0UHBzODJVMmVjR0JrcCsxSHhQcmNmaiB6eGdiZU43WTBQZTJJOTJHMG5Eajc4Zi9BTnZuN2xsbW5RQ0ZZWGhibFpMM1lGMGpZN2txeUtCSXNqVXVCU0NUYnhheFpYb1RGQ3JFIE1aZzZiRUt0VzN1VCtwc3ZhbVdNNGpjNFNTVEVzTWlNaGMvZm1XMFQ3TVQ3a1hLVEpRMjE5Tnk3QWhqV0NrVEZYSWRzT1N2WkJCa2YgV1N0OEpnOE40L2c5a0RDYlRWN04yck5wR0gvL0FIejlxRWNwYWpKY0ZiMldIMVVMYnJhRjhhUzJFeFlWd1hCL05LNGtDcnd5TU44byBkUFQ1akE0Yjh2bmtma3lNVmFCbjVST1dpY2ZuNEFmd0FIOGZZYk9ORmJ1N2dTVGNxMmttNXNxdHlUdlpEaFpEaHlRRFNOODZnbWh3IElPRU9xME13K01HRnhkd0xMNUpXYU0wYm16YklrblBBYkJzQUEvdjY5ckpMSVFKbE1odXpMdGZ6YkR3Yk1GdXZWLzhBbzJ6WHhEUSsgTnVGcUxiZ3RrSm41UWdWV3lMTmx0QXRHV1RtTzkrNTgvd0ErNUI1NFpBczBibDBSbndLTXpybmxtVkFOV3RZNG5pemRqa1Z5eU5kaSBTTjFkenVPcXhTSTIzVm1tTEpUWmVWb1pENStUd1NUTGtEbEsvWkE5Tnd3aWV1RXBLbThHRU5QYkhCWHNhMkZkTlpCNWpqY1BUMm4xIGVHMzZ3QjRPWVVaaGJRVFp2MlRrSC9ZT0E5YWdhZXYyMGNBNXFHN0d5VEpDK1c0QnpGa05rd1hGNTRVY0NESW5va08xQTQrWjVEMlcgNnpadnlZTXdTUWpzRC83Qy9BSDdvamZLM2JOMHVXeTIxa2YzWU5waWtzT2xiT3IyOEY3dEs1THlhNWNmaG9hNHR2aUduaDBjQ3dLVSBGa1plTDhHV1FuTmpld1B4OUJRY0QvZ0o0R25sRHltZWl6NGRYV2RYeUhHaVdBQlpDQmFZVXNZVFhOalEyQXpEbUtFTXc0TWlPaHAvIGNVUFdiTmFIYUJHM3U3S1RCLzJEWUFCOCtwVlZJMjFEK25HemwyOE5zenJoUSszUGF5UE5MbVdIQzBBWXkrb3Z4dE9qNUFWSndMcEggK3k3N2pUWFE0RmRMMDVSOTRDMXVtZFYvTUFtbDIwYmF0cXdrK3Q4bFhMVEFMa3c4OFErWWZjR1NxeC8zeXY3YU9JZjFkREp2SndJYSAzdysvWWJBdjgreFg0R2p6RFpROTZMZC9UeVFRbGFyaEdpRURKNk1wclo3NWZLRnZaNWhoT1pKZytHcW9kZ0tWSDJweG5sRE53ZjhBIHY0RHdCOWYyRS9aQTRuMHZRVGd5SkR1NFdqYlNsVXFsTEgyRmZDT2tHQmFha1BseUxhOHlKOE44UW9hK1lWWjdBcEhBL0p0Um4yYmUgM2FyamlEYnUvd0RIMEUrQTZvcnFNMUdHSW9ORHlVMndsczlhQmdLSnNnQ2sxZWtXUEY3ZXlnTmtPRXh3RG1Wc3dQMk95MDhmaFZheSB6Qy9jbjVzSmFnRHdIQWZZK2ZOV2tsRDRpbmVNeHM0NUx5UFcwSzRxOFgrVC93Qk9pMllvWDNnSDJrcnRkOHNDY1J3Y1I3cS93am5wIDJVbURYd0xKVDZtR3BrYlpFcFZzaVhwM1E1aU93NzlLMVlKc3BrSHdrL2toZ3dQaHRZRlA0ckRKazFmOHZnZ2dRM2ovQVAwRkF3YlYgbUE1aGwwU1QxZlhCYUVNODdOc1MwR3JKSHNNejVVUXB3OWhZN0hwK0h4dGc0ci9QMXluckt6cU1LYm1kN284NEFZYkFnbjBIWUQ2VCBaR1I4MUJTT1d1OXAzWlF6Unh0VHNCcVdxbnB6ZEs1TEpzVmt0QjhEOGtyY3l3R05oNGs4TWd6aTZ2ajJPQ2YxQnY4QXdGK0FlL1N4IFpJZHFHa1BUSHFIVGVTSkxIYVpKaGFFL0pqdTdnTFRSTFJWNWh3RDh3RG1BdzhNOEFSNkhjY3htdDhweGpmY1VsSmVOZ2ZqOXVuOS8gUGRIaExxSlpKdy85R1JWMGJwRWQ1MkNCRW16UnBJcnBzV2lkYkpiTU5TMGwyUkkyU3M5eXU4ZGtrZVBQWXhEVmxsVGNmYjFkY2ZhRCBRK0E3M3lseDJ0RndZNWdSZXFlN082R0ZrVkwyOTBseFJEQjlQbUxka0Q3SXJtZW4yWDNJNHlyL0FKTUIyaUVka2JueDkrUDgrZnV2IHFXUG9QS3F1OHJ6MVlYTkdoSGtPaW9rZXQ2bGdTMlI4UE80dDhjT0hwOE44aHA5Z0dQZ01DbHZDTXNsRU9zOEtyZGdsWFBCOSsvOEEgYy8wZ1d3NHRORHd0dHNwd2Y3bVBPRGF3bUxnVlhCSVE0dmNKTkF2bjVnVzVsd0J5Q0dDZ0w3YThJYnlUUTlzUnFyQ2hPY0w3OHdQdyBEOS9ZQnN3RDB2MUxxQXpyYUtEWkpLcjVqYkVNV2NOVjNlRytIbCtLK1BqZ25zZGIyUjQvNTI0S2ZKRmtZTGZiTThJN0pQOEFUK0lBIC9zQi9ySzBNZXBURUx0dVp0NWR2c2RPRnRkTXlqYjAzeHVGSVR1OW1RQVFkUEU3d3M0ZDd6UXFnWXhQRzhiNFl5T2tjc3QzUklWaWggSEpCTjlyeWRLTHl6eGdEbXE5blA3VXgyb1NkNmZhZ05UcnpKWE5qUzFlTGFZK1l0bUszbVBsb2NxdHFuN0xlSVR5TVY4ZFFvdzU5SiBCNytBL1FCNEFEbUthM2hwem9kM251d1RubWNFd2FHU0dIczJaWXd0c2xGSVh6QTdJaHpFOVBoMXlBUUlDcis2QzNuODJCSGE4TGRRIFQrd0lJRGZ3RjBqQlJnWTdBaHJrYWlCcEt1YkMwOFlXQlE5RVUrd2hoWXZUZ2h2aGdneWQ3SmpoRHdNZTJvQkUrWVR2TGdaTWw3Z3cgbkFmUC93Q1dPQUhJZUE5WDFlWUFvY00yU1NNR1NuQnpVK1dEV1JoeUExUFVvdDhubUZ1R3QzWmp3K3VRTlA4QXoyVGpQQTFuWS84QSBwNEFCdi9BZWozRkVpaVFQSnR1anEwYTVJMUdpRmV4ZDhXY2VEOGM4VzBlMVcyMVBKblVPM0xGanR5eVI4eFNvdTJUaFpJYVRJR2ppIEVETlhzNExiRHhUR3l4NnJHR2hrcGNFN0Nuci9BTXg4aWxsY3B5QmJNOHdzZ1BBaC9QWUlBUHRud1BqSXdIaWIyTS93RS84QTViL0cgNWxrVEhLMUtaYUNpVEdQSWFTeUtiVE5KYW1DeWNyNmMzY1hLbUVROTJUR1I4M0J3VmEwcjk4UjBQYTFlcjJhczNnMWh2bmdQb08vZyBPbmtQQjJlMEdIQmN6WFlKbmQxRUQ4d0FVLzVnc1d3MUtyekI4TU90bHc1ajd4VXYxV2sxa1lVNE43RysxeHp6L2dNZVFkVjFGdzZiIFY2dnM0emxYbGYyU2VzbGtyTGhOaEIySmtWOUw5aExCUmtZQTc2dGw1aWVQaC9BUDZlY0RMTVRGb1pOWk80NE94emdIOVA3L0FMQTUgZ3NpeXFqb2p5cGdxcFBWMkFTU2R2a2drVUtGMzVIU28zK25sMDAwZzNFZ2ZNbThLNVhnbW05MWY3VjROOVNSMmkvNHBiWXpxMTBSMSA3MjlxcThuNWVxOGxRSWF6ZmxJWWxvVEVOZ3Nkd1Q2clk3SXdtQTFOZzdjTGRtUE9IR1diR3JzRWtIVVFBQUEvVmZQZ0lkd1Qyd0MrIEorL1dRU2hsRTRsTGFLQnNnZzdoMDArSlRXaUd3TGNNUGpaRU1neWNTK0FxNDdZVUtNM3VrODMzOEJ2NEEvdi9BRVNWTmZsUVY3UzkgMkdiTGZCcmhmdWRWMVpWUHAxcDlmU1dRQ0JpQVhLSHc5OFpBOHd3UHNocVEzRFRTOEIxbXpVTjhac1Fac0did3c0Q3ZnUUYrOEI2NiA5VEdaYWo1UjllMk1yMWpvblR3MXdWZFoxUDN4UnREOGtQSHBjV3IwOWZ0UmsxT1RGdUV3WVRwN2dBNDJ6OG51VDlmQ0hOZ3Q3bndBIEFBUDlMMGNpaVlxNmYzbU12RVo1VWlKYmNpMDhvWlpKWm9kM0hNcVFvN2Uwa2pNVTNVUnVnRXFTN1Y3TXhXSmNMOGtSM2sxUnBaMjEgcnN0dk9YQWh1RWV3U0NxdUZIQnRzNmZrc2dtdDlua080ZXI3UWlYeVVtY1Bxc3c0SWEyd0o2cnFISHozZ09UR1BuMlpITk8zZ1A4QSBZTDl2NTkrMVBtTGJrNFBsU3E5TWttVXlIakZuZ2srUEVOOXBGellVT202VC9uSzNobUdQM1ZWSmdVWnk0TXMwWVVHV1k4SkZvcFBBIFFMOEFQbmtBQXdIMDBmVDNCRGlIdFJpYllVYVp4Vi83UExkOGNzcXROY3Bkb1hJaHNER3lWV1lFV3F3UTUyM25rYTFFWW4vVE95VmMgRVIwRStnN0FmQVB6OEFiTGhSbW1zRFhhMmRNNmhGdGIxU3RWKzJ3a0dOSzVoc3V5K0VLaG90Tm9aR0UzbUM1bnVBKzJLM09PQ09uTCBQQTN2a3gxS2RYWjRYd0NGdjYrQlg5Z05wWW1kY2RRN3phaDBTVEN0UnU1RDFTYktiV2RLQUxlOGYxeXRVa2pCVVJvRWhvUnFpbGFqIE5ZcVQzWGpqd2FGMmVCMGpxck1FTFFCdFZYbnM1MmRwK1FOM0NqY2xmc0prbEZHR1ZiVGc0VExzRHVDZlpGZ01pcUJISHZoczZ4encgWU04M2RpT0F4UDdBZlBuK3VNNkxtVnBsa29zREprd3lBMDNadGZrczVnTFE5K3IyeGtNT1FmR1R1cFZhM3ZFRjhUK0t3L3E2dXNqTiA3OS82QmZqL0FPbVBXbVpSK1dHSVowb1c3eVQwRE8ybXlEekp4T1loeWw1eWNsdGZEdUFkOFR3OWdUQWFHd3dIakRnelEwYllETjc1ICsvZ1BmMzJDSGtUQlo2M0s5UExnQkpyMHlxcmdsSEpMYlJFaHhSZTF5azc0ZmRTRytjd1QrV3I3NU8yd1o5Ry96TmcvZi81ODJMQlMgb1VIUnNBcW16N3pXMmg0UHY3cUk4WThna25vVmlqRHhHUmNOUWppUjJzc1ZqUUROcUFGMWtPTDV2cG5WUXdGREpSdkhpODhrbkhnKyAwdENUVlk5SS9pTWxXRmQyOE1DR0h0U245TVFldnpFN2IwT3VVOTVXYmthS3oyTTJrdXlPQStncisvOEFVWWx2QWhvMDhPQzVtUTM2IDJtZjhVQmx6T2s0R0U3VDdNcVlVbnY3SkMweHZrUzRIRnduVHg0RTM3ck5OcXd3bGlGeHh4QUFRR09BREFBQXhWakkyMDNYeS9ES0EgVlcvaVZYRFZLV0hNQng4U3Q0dnk5UVRRbnVFeGtRdzdJWVlERUVDblZvMUJpZktFUG5LT2JkZ20vdnlEL3E3NzRYdncxUjVldXUwdyA5eHdORkZCQXFIcHF2Nm5ENHpUTlpUSk5ZVjhCcmtNLzJQZGlIYWt4alg4QWFDdjNTMHA2eWpxNVIzck0zZ0VxOEhqanNCN0ZneHg2IEF5d2lRRk5OYVIrcXVvRUd6L0hYdVRVU1FaeVNGdStSSGFzVnlSZUN4TWxMQzMxVzRhamk1TzRJNEUrNjdYMlpWUUhma1JhMXo1NVUgdVlCbisxZEdLVGhpQmNrbHRMMkF0aldDdlU4bzVDWXRvR0Y0UFZhY1lUN1VYNGJ3ZXZDZk9tRFBkWEp2T3lKSnNHZzlvbjUrQVg1MSBaelZKY2tkOG1XMWJRb2E2dmpIVXB2QmZyR0dyeEhDdWE1WHFscS9iekFjT3lVK1hIdzJvQ3dQaXJEZVhsREtlYzgyY1BnSDQvc0gwIERyU2p4dzlHV2pUTGxtNXphaHhja0hxRU0xSkRYNWEyaEFaYWEwSWErbmgxc09ZN1h6SjF0Sjc1T1c3eXJOWFY5enF2c203QTBFK0EgdDFBMy9mOEFwd1BGTjJRbXZGNUJXaGJHMUttSGtBcXJ2bGUxL1lSZzkvWG5IdmhwK0VNejh3NDJzRUJWWkhsbUY4bUorRU5uTGRZRCArRy83QjFGUlduelp0eUhaQ3hpYVd2VG5JM2tVNEh6dHgyZjBCUTZoWm80MlRCNG5FMHJGV0ZZeUx0N2JqemVGdFk0dklXUlhTQkYzIEFEbjNSVXBxZ2c4YXZTYkl0MWtZcGs5R1hxM2ZEMFRVdlhNejRmYmQ4TVVtUE1jdUgyWGFnY1p3TlhKNEE5NzV3L2NmZnZ2d0RvYjAgOTJRMFBsNExlYUJvRzlYRFVqTWRyQzAvNU5NMHV2VE5Qb0YzUE9jTWhNdUJQWkxVbU9Fd0hTMVgxcHMvZkxGWDFNNmVuakIyOC92LyBBSUFDQTJCa05oUmtybFB0clpyZ1c0UjZaL0RMcVFxVjJxOUlyZFhQZDd1WHVENDRWdW4zeENJT0VGU1lKNk9ZUmJNYUZmOEFLZjhBIGZ3R0w5anNIQVQ4Q2x0RDRVdHlacWxxVnd2VXd4aDBpd3JRdFFPSGJERmpQaFo3aXJiQk1tR0dSd21YQWgyTVFyL1k4ZU10SEdkOHggcFFKNEFBdjcrL2JCMW5NRzVGR0dMbDVFTUtUWllmVTR5dW0xTklBMkc3R0lwVWFudzNIU205ek5CVlp5dDI3UExLWTFBV09GMWhlVyBOa1cyL3dDVzZzTEYycHNZMGJjVUZuVVMwNTEzUTdXdHJUZ3J2Q1RmTGdpdFNscWh2alVKVUYwS3I2Q0FxT1pjSVpwRTBYZUt3a04yIFZoZDg2ekNBZXg4MGZNWW5ZVFBobER6RTF5OGNHY3RuWGxWNjExQ3N5ZXpOUUhSMHA2ZzVrcXdyWHlXOXpGQmF5dXllTmMvUmFycm0gbTF0bWZEQTV1SUZqZVIvanhqa2NwSUxmNGpZdG4xNSs5Y2ZETWJ2WElrWjBZMDZnQURWVEFDZ0J4d0JoL3dEcm4vZjhjd3RxUWFiUiB3Z2c4ajhIc3NYWDY4MStmeDA3RmUxS1R0QkxNRUt2UGFoNlp5dE45dE8rb0JrRHVHbkJiMUdWelRqMitUS2ZUOFhDcTBLcSsyKy9FIEVPcTFzb1RGdm1xc21jcTRKd2hnQUgwRS93QSszOUJzVzJXeElwK3pMQ0YxVmJVbWswaGtVa2dmTVpLL3NPN2JRaTNHQmloNnZwOTggdml0Z3hnaERWUU5mMldxekZrbTBWZjJ6ZUxSQ0JLcmZuNm9YNzZEc0dDeEh5TXlxaGpVMFR5U1RWYXZXQVJlWDJScVY2OWg2Z3F2UyBMR3RCYnRCd3JkYmgxWE1JTWlPK2FmOEFVdHh0bXhGMmdzczNhNUpOblAzL0FHQkJBWXI3SXFkTDFNVDRhZm84dTUyUUxJZDNDN0N5IE80ekI1WU9kdENuTlJnSEN2OTRXMzJiaXdmQmdWKytLcklzMW1ydEducXpQN0Z6L0FHQkJmdWZZOU5FV0RmM2lSR1FhbU40M1FSRFogODdSWVJ4Umd4dzkyVWpFbW1GS0tOcVY1Q2p0RStEcnBsVUlZUkx1K3BCRlNzZFBQaklOM0pJNlhjSUl5N2JDbGZKQ3U3aStaV0RXTSBhMUxMSkVpMWdYWW41RFlZVFFPSlJvbUR2bVkxdlZaZ2hEQnFSSGxTMzR1MEdaRzl6ZUdKOCtBMy9mOEFwd0E4eWw0cWZxb296VmVTIGJUeG5tMXNMK250SkRpUTljbmw0bzVUSENHWVc5bkRzQzNCVXZPVldMNVJ1WXp0ZHNtd2Z2Ky84QndycWNPUTdHcGV2V2hjZHFsQW4gZ1FSaHE5a3A5NGxzaXVlcHg4UEtEaFNjU3Q0Y3poNjJjcVhsc0ZPWmZ4ZXpNeHdKK3dQd0RZSDdrRDkxUGJoSERWM2NFQU5aei9ueSBtcXJpMWtWWFhzaFR1Q3hsZDNpeFE0NkgyZlczQU9QTVFZRTl0VlhDekJuNXlSdGtxNTI0L3dDNTgvaDU4QW1IVHFZNjNKcy9xWkdWIDl6MlNReXRGSkV5bGUrTnFSbkZwbHdQdHN2ZlVzb1lsRVhjaFZuaFFZM0hLZlNjdnpkMDlESGpubnFCcitqbmpVT3dwK24wWGtJRGcgR1pCcnhaQmkxTG9iUGxSVjVYdEJQSHA1aHdNdzdUVCs2a0RuaHpqSXlyeGZiUDhBcmJZTmdmajZEMG1XQlR2UzBFdXNSbGwycDNnUyBFbGJVMkNzV1F3V2gyTmFDODBLOE1oTURoL3ZnL25EYW4wdGhXOW1icGdqRXpnUHpuQWZmei9UclpOS2kzZDB4RHRYVFFuMlFIRnA5IEoyRTRXb2trQ3hnQ2VkNVFHR3dUTHNRMDhQaVE5cXpUNjBuQjBZWXI4NVovTnUyQi9nSUR3SG4ySElmSmprNEFiQm51d1JrbERXUkkgcmJoUkN2SmxjZ1dIU3FMVDE4UE00MnRtWEJrYWxLME9Lekhrbnp6a3lPRVNjQWUvbnovQVQvVDBlV1RiMUNNam9FbGRYZDlxZVBIYSBzRFQwK2VmSDlWY2NSN3N1TWJMR2QzTTRUSEN1QkpCcWFCQi93WmJYL2JjL2RkQitZMEhiQktVL1BnYWRQbUJWdlM3RXA5YnIxZlNOIHFWMGhFVFlUQStVL2RreERXeC96ckxUL0FKejRNc3hvYUJuM2JtMkIvd0RZUDFBZGJiSWVLcnErME5Mcy9TKzcyUWVmRENrV2oycGUgVmtSTEl4MCtxZDhTZzZlWWhtSzNUekh6RlgrUlZVTm1SaW1DeXMrRThCdi9BRDQrZTJEcGhvOWtHTEJob2ROMXlueVZ1VlV0a1hIWiBCSnczWXhTTXFJbXl1UHNnZ3doc25JRnQ0bjh0T01oTkg5dVRBOTdkZ2V3SU9HQUFBd0g4YTZzbUZYdERBU3FxVllTU05hUGpPN3dIIGlPSHc1UUZJYUpSZ2d5T0MzRGh6Rjh4WXo0NE5yWHRoUVp0bXgvZCtlbitmZnY0RHFFWWtpWkxoMHFSckp6Nzh2YWZIYUJnYjkzbjkgZE5rWE1xc0p5bW5lUjR6NDI2MjhoWE9STmlqYTFWMStMSXI3UlpqdURBMlc1WE4yZnFDOGx1d2w5d3NKd3IyOTJqYWJHdEJQcS92eCBXNWhEcmRnaHprTlBmSnpKV1ZHdEZvTEt6UjNOdDhYMzVCZmdIOS9VaHlPeUdXZ0RWUlJFR3VGcXpHMVRhU1ZTcDY5RHNZQ0psQVEvIEpPSDJRbnA0OTdzYXlsL0duWHlzaGd2dG1UM3QyZDBmMlA4QW53QUJCUHp5M1ZjaHlIcC9QTE9sUGpia29BbEd6aVRSTDM3RVNCUXogSEd6UGRTR2hrQTg0OHZxV3pvM0E4Um14L3dDbGZQdGdRZWZkS3B3cDRIVGJwbkdmOFp0RzBQV05PV3c4Sk5QaCtlSzlqS2RqY2tYKyBTT0ZWMlFZSUIrNVk4OStyTUxReGpOVlp2K2dlZklMQisvbjFMRXhqWnJoRWhkcFkwaDhHVHNWR1pyL294ckdnNDd6WnRmSFJTU3FXIDdPOUI3WDhaZUw3ZWFyL1Uvd0RucXdESVFiS2d6TWtYY2lyWkZlaXlmNHYrV3J4REFFVzJXZ1ZEa09ZV3BEbXJpK1lSMUs4S0g1aDUgUm9zejhYWTlxN2RRWDc5LzM4K05SN29qMUFRTUdjb3c3S3JkWkZiaWU3UTB3dzFYYUF0ZVRiR1cxK3QxdStKbFBzakJNT1ZMWDArYyBZR2VLODRrcExzY0FQK0Q4Z2dEL0FFU0tkbU5sUVRJWXVWY0JKMjAwbmlRbEhBMkUwWEU0T2RYaWRSamtoajF1K0hDazJSOFgwTTVVIHBEdW9ZWnlmM21qVHFUNE0rQXh4QWMrMzgrc2N5dDZqWE9ZWVpWUDFka3NhU3R4R2pPczRPa0J4Y1g3UUhzQjhVRENlWVF4OE9DZVggMzFIcmY3NTJ5M3dJN2ZmZ0FEZ0o4QXdJSjkwa2tRaURNWGoyazA5U1o3dThKL3BybmdrVUNSTXQvdlJJSnEyMHlkY2w2b2FhZWFlTCBSUVJKTHFaTlNZMWhHMURHenhRdklpeWIwcVJ2bmd3VXRMSHQ5eEc1ZEJuTGJRSE0yQnF1c3QzMUxwTmtXcm5QNG13RW1IWkFoOEEyIGdrQWFiWkI5Sm9TRlQ0Y3dQV3diYmFGMHduQ3pOMHE5WmVYaXJqaVQvWDMvQU9tbGtNQTlYdytrNlJ0L0pxNnVMZWhza3V0OTQ1RFQgOVhwdHh2a1Y4c0Q1bGtUV1d0OFdNNDJrT0s3WU1GODVKZ3pic2I5bjVCUCtmNkd3SDhQZWF5dzdRbzBiVytKU3NkUEM5cXdBMjFZQyBRSEFGRlA0b2RmOEEyZlo2ZlQrNWRnWHhZMHdwV1NHcml5WnozMk0vdjRBQjFpUFQ0Y05wL3dCSmVvSXpYcWtxYVJ0U3RrY2dEMG5iIERZWTFMZDJMdUYxdllINUl1elRlaHI4TTRCNTVYS2Z6bXIxZXMzbzRFQ0cvUHNHd2IrZzFGaGtXV0RZVFZ4eTdhVGxwb0FkUHR5VFkgNllad3Zvekx1UzM5TXRSeUdIYzNEaTNwbTN2cHRTc3I2UXhvWm9zWXBkdWVLWkZ3ckJsbGhhU044KzZ3cmRtUGszMDJtUm9zVFE5RCAxSWFMYVdBMUxZYmJka2FuRWRxczRld3A5b2NzS1Jabkc3VUQ3eEQ0SEJVaHo0cWh5YXlyVVBaZ3paS1RObXo3OGdXNkE4QUE2YWpSIFg4eG9lRnV1V2xWWEUreTZIU2J1c2kxRStwMGlxKzQybnVyM3h3WUdSa1QyUlBXeURnRGJVOURnekVZWWhpK2N2RHQydTM4LzlmUDkgVS9NUjJSdHpEdHRKQzNKQXdLOWtwRWN3N0o1YmhzVmlWMWVHUHJlbjBOa2hoMkF4VmZNSUNOTUpqR2w4L1pEWnNHL2U1OCtBdyt2bSAwUHNtcnVDcUJTR1MwcTNTRDFTcnhBRVNYMnd5ZnRDN3RWVk5HTjRmRERnNFRmQjh3c281RHJNWVVxOW1XZUU3SWNBYkIraC96K3ZiIFVOSVlsU0h5MGdSUDVKSVl0Tkd6bmtWblZnYzRDMXRydnBDU01TU3h1cUMrQlVhOTBhY0RuYmtWSHMrY2NhRjJDUmJ6QmFsTXJHSzcgM0FicjFjRzF4TXI0bERqOGxLUG4zejhiZGszRlBtZk1PVDZQN3hHQ1dQS1AxK2tuTmdBYytBZnY2OUtJK1pGa0dHamg5YnBOSXJhUyAyMGRrbUtmTFRMa3FXWll3R0d2aHc5a0dFTndJR0p4N2xxcmlNWm53cHdibTFYWTQ0Z0Q2RHo0QnY0Q3hUd1FLYUxkUkZBeFNsaFZkIHFoc0daVGRoV0FIcXRYWGtNbzVSQ2xqUTA5Y3NoRXVDeURJNThPTnhBOGpwNHg1KzhqQVpzMmJCK0F4OEJzQitIanZqNWQwTzVrT3QgS1RHbmhWNURiRDFFTlRLbnhFTldpeEpUNEhIMnAzSW1NbmNDbm9ObHVHbmlxK0RNMVhvYnk4MVVraE9jSDBHM1FIUGdBREhwWi9raiBrWHVTVGF4T1VxRTdsZy94eVIzalFQZGQzd0ZvNU1qWm5XVlpEY3pQbkp4V0lORlJYejdXNTQvTmZtQnIrUUhyU1lIbEhsdXlFTXBYIHJzV1h5UjVYRWgrR2x2NU53bUo4eVlZaDg4ZUh4d1BmTUoxQlY1VGM2UENKSnM0ZkFQMkMvaS9BRC9YSGJDZGNqa3QwL1E3a1NwUE8gRElnMWhhQTQwalhwbUswQ1h4b21MNGN3SGNIeUc0Qi9uOHRWVnNtalZlVlJoaHdJYi9ZRC93Qit3WHo0QVB5NzBTMXhmaDgzWkRTRyBtMkgyOStHQk1NTXc5S1lVMVgzQU90aHc4d3dubUViY0ZJNHVJenkwYm04bkhaSjV6L1g3OC9IOS9QeVJnVWpsQTluU21oMlNUeTVuIFJuZ2crS3BCaGNKTGxRM01sdHcvbkU5a2hzQWV4cDYrQlI1aXlzYm9NR2ZzWnozWUFEOXlEOVZKRkZOcUJxSmY2RXJHTlBQcWJMUUYgOHY4QTZVOGk0NC9jVGZGR05OSXVqbTBrY2FDR1ZFamRVR0Z4aVdLYkUrYkc1REd3UEdJVWpuS3dIbytuL1NmYlRaRW9jb0hHNXo0dCBrbUVPU3poN3ZXNVJwMzZ1ZjZ3NUpNWlhEbkFHOEt6cXRiSmpCZFg3WjdPeHZ3Q0NmK2duei9UT1J4K2srZ3JnU1lyazdmNElZYS90IGkvYW1vclRQU08xaSswdG9KL01GdEQ0ZUhUNFlOOFQzd0hNSnJOb0lqeWpXb2svK1AxRmpnZndQcjlGWHlSUWRCWFlCUEJpVC9xY1QgSWVuaXZTR1NIVjRqSUJpbHBSNE80US91QmdPdncycm1GYVRUQ0tURjkzeGlPYmRxdUJuL0FPL253SHRkNnFHQVhZTlpxb3VwYXhqTyAxYU5Wa2JobldvdjJiY0Z5SGl6bVVaSENZSHArNEh3T3dJYlZwYVh3UGsza3FMV1hudlphSVRqNS9ZTmdQOW91dFVramxtUnAwa1NSIEkzWVJkdTNlVkxFYmJhdm5JMDJkTHd1UE9kSTJEQTdTWnBobkZJTnhPK1NHSmNoMlpWbVcrUEIveFdLdTJZRHE4OCthZFRMNHFqYWwgcHNrdDBpanZselNJa094anluWE5qSWM5YnJlMUxUTUJ4OE9kWmRnYkhNSjRGRmNZamcrRW05L1FRSFBqNkRicjhBZ2FucU9xOU9lcCBRYlN5YWtrdFlDdVNKV0VPMDlwOGUyQS9BN05pdVZxRDF1bnpFVGpkZ1Z2MmxjSHl1WHpreFFYdG15WWZxZjhBUDdCMC9TT1pvNVRRIG1wUldaNW1vYXlOVFdjMzFsVyttdXZYRmVtZ1UxVDlQSXdEaGd5UFRJdDRUSnNERjhJYzNSbWpCNlJ0NkNPcU93WXZ3RG41L0REcXUgRnVCNmZxcExkdU9nZU5tUTd2OEF6aWU0TUV4b0Y3V2VNTUNmOHhQaGh0NGVNVTlTcmtNVFdkMDkzalpEZXdZZTMzN2dBQzFaWHlvTSBNWFpDeFhDUVkxeWoyMk4vY0tQZ2M5VUk4R2dkZXpUeXlacVlwckNid1d3UmdNcXhCQnNYYmNDdWJ4NWN5YVVPV0ZWVit1R25oT3QvIG45c2R6cmdjTVdROVY2NmUyZmpjUFRHSG1WdlBtTlRhdm4rU2M1cHUwTnp3Tjcyam4vb0ovZ1BuNmRBN01GdHNQT0RKcGcyeUMzWUsgSmptTTRna1E3UXRDcDNLS3lYQnZGSkdFOHdRcXVxenllZWF6Q3lUS0ZNU1p6WkRaejNBSC9md1BSVURiQ0VTeUZXd2MyeVA4QThZciBkVGtLc05vaVRHZ0MyV01CTU1JZjRiSW9KN0JNNGlRc3RINDBURjdwdm05bXpuQVQvQVVFL2gwK0dTUmREbFVkdE82NDRFa2x5bHFWIDhoNzRzSWV3aHhWWDJFTGNqQkMxSWRWcDlQaHlFejUvTFFlMlZBVW9jWXMvZHZBdndCK1A5Ulcya0dJc3lPaVJvZTFGdThpOHROajUgRkREbWp5RDVPUlVkb2JXa2hoZklnNU8yR0dPRWRMbGZOOTR4b1dUZkJlWTByNnJLQzNqVEk3aDFKcXpiVVVxOWtNaUhVN3ZVRlMxSyBrUGpraDJCVzlielM3ZzRZTGM0RnFRK0N0bENZdmMxbmhKc0lqbnovQUlEZitmZFU2b2VPSGNpaDVEdWxxYmVCdmkwN21LOXIxZmxoIHdNb3RkK3pwOHlHdDN3SHdIdUgrK0UvRjVWMFBrMnlXaTdnd0FEWUFBQStmOXV5czNTdThveGMxMG5qekphbW9LWVNZVmRQcCtweE0gekZOK0xUZFZrSzM1ZzRXUXlNQmk0dFBBL1R4VmI0TSswTFBCd2lTa281OEI0RHdHSFRPamhsOTNaSzlGcGpJT2ZDa3dKTFQ3T1R6SSBuaHNxSlkxMzhQWkpnY08rTWkvREJuazVTbkI5UFROVjc0ODc1c2h2bitBRC92d0M0ektGQ1M0RjVDR1pvMDJrYVFWbXlvekdPUE94IFlrblhrY0ZxTkFGakplVkdkc2NWQ00yYjdmRzJrYTB0NGQyUjRza2NDdVdvbjJRMFFLdnJIS1YzMXR1d3BNcTVnWWJDQTRWazRPVlMgNldoZFN6Q0MyNFZ2TVQxdGdEMk5BcitmL1V6NHJyT0FNSWsvZnRnL2Z6L0lGNnJsQmJROGZLQXBMSmNHYTRSdTVGUHNsYmlUQ0kwRiBuS1Voa0UrR2hodzhOeGZEZ0llaHZHMkV4YlE4NzV6Yll3R3dZZ1VIejZDd2x1dDdBc2ZUM1dMSGxVK1M3Y05WeDE3VjZUazBmYkFhIExjYkRGc1o5Y082aWZkbGI4Z1d3ZDAvYXZKaThHZEZCbTBud0Q4QWZ1QStBNkNYU3M0OWZITzMyU3lEVEdWVzZBa0dLZnM1b3JIbmcgdTJFUGVDRVA0Ymg4d2VZcm0rRjQ4OE9ETXNxNVJZMk01dlp3K0FBSC9vTDhmNlZEQ3BkOFFpYmFaOWlFWlVWRkVxenhIOGd4eVNWWiBCQTdiY2U5Y3o3NTBqZGo1cXZBeWJLVnZubVNSL05xRnRzckZhZHpFTXpjbW51VlVyNVVySkZieVVTUTFMWml2VnNvQ0xIbGYrY0RoIDArSENJVEFkdE1EYURtNERLdktjbFI3UjJUei9BT3ZhSS9qMVNmTUlhZjZic3c5VlF1WmpNdWxEUUw1a1dGVllkc0RnWlVTeGdNT3cgQThPSGFqSk1YMlMxSjVEVFRCV3hqTXJxNk1NdFRBMmN4QWZsMStRUUgyQzEwTmtwZGpzQ3d3MWwzbEpKVy9ENDhZcVV3cnNPMTQyYSArUGpnUW1MWWV5T044RDRsd0lHSFJrWXB3WVlqaEVrSWo5M2RnL3I3RHJ5U3R5aDgxY2VEemxaZWRHVzN5dlg5dGtOVU5vLzJtNUFiIEk0Mkhodmhod0lUSzVudU05cVpFWlpmUHMzQ2NQMy8vQUtIOE9yZ0xUdE9JODAvaVh2aWxqemtZTnRoTnhZOGtreFlwSXQrRGFEaXcgbnJUeHdzVVNSSk04R1dXeWNOc3RrTU9QY0FPVHhZNjlhZEpuL0ZjMDhhZEUrd1U5RGZkY05HK2svYmpRN05OY3FOZTZOejZZRFppNCBkWkhmRlVERHFyakcwaUNIcllWY0RaY3RnajdsbnpoVTdOenZWNmNQWDZNbkt6cW0xaEhRdGZGUmlmT1k2WFFwNGdEQnpaeXQ2TFRiIGxCT2l5VE9kTVA4QXFMMWJLVlhXU3BPVmJOL29LK2h6WDJwUUxIRkwwU1dFbXFySlQxQkZlRENoWjFuazBtdUxzVTE4S0lXT0tiT2wgYkZiRkxsc2k2Qm9HaGZIQXZoc2VxeFJGd3ZGRkY1ZWFBRiszcHE2ZURGaTZvTlc5dFZocXVXNmtvanVGcDVsVjhCemRPRmFRNU5jcSBaTS9ESVBjU3E0WWhEUHVJU3ByUnVnM0N4WjN4Q3Q4WHZlT0tQdndFRGhoaWZBOWNkUmxMRXpVdlQzVXU4WEhRTlM5L3F5MUFaMVlNIEVwYm9jWFhya21oMTlQY0xoUTdVcmNlWHVMYjhZTEp1ZTZJMitKSVEzaHY3OXNHL253SFRzaDZnNnp0cExzNnRHM09XNnJRMnEybFAgVVF5Wk8wdURSVGVuc1dodzhHVDRkYnA4d2dIc2F0R0RnNGprMkJRbVR3TnUzK2RSY0JBYi9qMGt5aEJ3VjNCVmR3T250YkdoczVidyBzaDJWRTkzTVJEMU9DbnZ1ZzRRMCt5RU53dUF4QmdML0FCVXdNc3krTVZsNUIwbTdWZDJEQUh3RlJBRC9BT1hUZVBUSklpaU9ZMGpQIEZwdFFjOVErMURwbzJFaXNETEw3Vkl6bE9HWkMrU1NLN3J4dElYUjVjb2tsMWNja3UyYzg4U3FReVFSbXNXc0txK1JaNmdVdWt6NVMgczc0VXQrZnpDYStTYkRUMlJiSHNNT3ozS3duS20rWVhBaHZsMkliNHdUSndFZUJWYklaaWRvUGhNbWNOaE44OC9VSUEvVVQ4L2RXRCBzdERFTGxkQjgxWmlZV1NNVDVWZlUvQ0F1K282SEUxQXFUT3JxRUI4aFdQaW5USUdOUE50WVBic0l3WmFjdEZHS1dvRUMwcWJZQVFEIEJldHpIL2xRRlhxdklXSmZ0bWFqM0hOZG8xYnZjeGpZTFhKSjJOc2gwNlcyT1N0VmEvaHFFcmRiaVZ1UlpVaUN3SWNHWXNyTllGUnQgbUEwclZFa25ENEErZnhmajl1OUt4bzFFM0l1VnRUSXVVTm9xSGJWUHJkZTZSeHRlbzZuTXJtN3E5UTFkYlR3OE9IcUVEekxBL285OCBuV3ArNkkzQi9OZ3ord0gwRFlNZGdaTnhIcDVSUENpYWpVbkVNL2UyUVFHRmtvYk1qRURibXlmQ205TnI0cVAwNVhTU0o4OU5DcmtuIHRqOUlWdUxKenV4cmxjc1dLWkFwNmdycHRGSGdQWDBlYmplZFkxS0h6YkkrV1BNT0RBNzc5YUFuR0t0cjVnT0hwUGgvdytJandKeHcgV2JNYU56WnY4N1UvZjlnL2Z6eW43Y3pLSGFLWXYyQWVTYkNsT3lTMksrb1NZT2JMVXRvQ3ZWekVXL3lvSDFJZk1YOThVckFnVHZzMyBLRmtZYzdvaE5nd2ZrSEUvano3cnNPSEVPcFJaS2gyMVBvSEpsVEpLUVIwb3JjZTdvZGpGV0ZEc2F0OTRUNlRzaXQzQlBoVnkyang3IFVaWmtab0tFeGxWdXdTN1B2d0FBZjU5ajBxNFlkTHNad0dzYkhwN2RnSzVUOWIxbFYrZFlkZ1M3Z0FpNm4zNll2Sis4YWtLM2hwK0EgU0FQYmJVTU14UGk0c21ETmhPY1AzQVFHSUFCajBvSjlSWVZaaWl1eVdrWDgxMDJtZUNmTTFISkloZkxiYTlvTFhOZ21PMlVWWGhNayBpSzZzelNpT08rSFNXS1dDUGNjeHM2TXF1TnJNTVMyUUJHN1F6SFN0Q2cwRGNsMlNaalFrbXl5c05BdERZdHExU2lYeVZEMmRQcXR3IHBQdzl4ZTZrRGNDZTE4R0puQWdUZk1kL1BnTi9BYitOdWdjUll4QXhRVmd0U2s3TGpnRUxFS2ZtUnhKaFhhRjVvbEIyQmJEb2RxUTQgYkFIc1o4Y08zTmJqQmxZRkJndEhTZDhPSDhiZC9mejc5MGJLQ1d3VnBoTVkyT2gwaElzWjhHMmE4TlVPdjc1bXVSUVNydnNQdFd0TCBkMkliSXZ6RWREK2VjVCs1blBHWW4vRU83Y0gvQUgvWU4vMkJnbkdETmQ5UGI1THBhbVZ0M3pibXVOSXI5MnlVK0pEdVMwRk9yd0FmIG1CZ3hUOXFKemdIbmNmc3RVVHlhTmFEUXNvd05KN0pnd0I4L3dFLzU5K2VId2xXSkJqaE9ZUzEzbmVOTVJRcXFQRm56NTZHT05Xa2EgeWpaSmtNR3l4d3c0UEE5MlhCL1I0NTRFSStaVjZSUzlZWlI2eUpKbHRBaEMybmVHSDAvbG1Sb1Y0ajVGVHlFT3EwT3QzQXhZQzNPNyBIMlp4c25aaXZhRkcyL3duZXpoOEF3YkErL2ZnRFVUNDh5Z3J3Vzd1S0lkdFcwME9CdGVqekE5WHRZZTJuSVRGVFE3QlpFUCtUZkdDIEpCUTdnQWd3NnlNZk1MTEdXb0V0RTI4QUFHQUFCajduejRwRHpOSzhXcTArQUFwaS9xWlRYYXJsNE95T0ZmeElkamdWUFgwbXA3QlogQmlxNWtNd1FEMDdBcjhDRGNPNWpRME16TmdiMlREWUVFQWduOS9ZRDYrWHhkb0xpZlpDUTRrbHRWUFdjcFRLZWZCcWVKTUhrT0pGbCB6RSt5SzNmRU9ZWVlBNXc5ODg1TUdGTjBXU1p3NEVxNUhRUUdMOHZyNS9mOGM3WnpMSzVURjJUQm5XTFprT1FERW8rVDFoR3Nqa1VjIHNBT0xzVnRSb1lVRG9xS2dqalZIaWx0eGlWVW1OemptYm90NHhOQnVhZG1veTY2RGQ3NHV6S1VnOW8yUnBvMVhOdE9JRDRCZUpmOEEgRDRocEdvSzJsc2dIUTlabHdlOWZRL3IvQVBPREx5eGZFYmZQTm83OGZQZ0VId0dCOUd5RGpZMGF2TEl2aDhvMGJwWFYwTlNYcmdNMSA2cmxvaUdyNEhrMmlLL0RRN0hwOWtYRTliQjhmUFBBZDVLZmVmTnBQT1Y5K0FnVCtQZ01PT0cwWmxTMTNEdCsxUTZpQmlvYitKSHpGIHNQRVpMR0tjb0tQZzlrdUJDcCs3RU5nTUhGSmZiVGFmdGl1TEpqRGxYQk82Z0RqK3diKy9QM1QrYzVpZkYwdjE1Vi9iRzBZWm1zYWMgYkxZVzYzSVhIVzlvSWY4QURrZXRSUFkwTzdGc3VuOGtyaWxpQUVFWXJObWZCYk1NcXMyazRmMENnbjkvQUFPaWoyNDJpaXdtazNwSSB3elpibFNDU0tSNUtvVm1ZbEdOL3ZJMVJZeXRLTGFSQmh3bVpxa05CVUI1dkNqWjQ4amdmS2xCaTQ5bGc2M3FyS01iYmI0RWF2TDRGIFZSM2V0K0dpWXRqUThONGZJYWV5TDdLRHJUdG8xSWRaMW1VR2R6QWV5Sk8vNEFENEEvaUFBSCt4WGtMNlpJWkRPbmhEcTZ3bDFWVzMgY2dTcjIyZlBBWWhTMEpsZ0I2M3VEUm5RNGNldGc2bEhVdEJyWlpHV2hjb3orOXZHL3dEcy9IMEVCMFlPQ080T3dNYlBxNXdaRSt5bCBzYTczZzFYWXZ1NmVMUTdaZlNqNVg5YjJSMmZEM0FQK0RQOEFudkJoWktOQ3VUSm83dmFJUUhzQitvY0g0LzFJMVBEWFA0U0liUmFDIEUyVlcyTFpKckh2YzFPVkVTdW1pcUl3RlBnR0dXK0tIZTRaOWFzWnNuempuR0dhNDZjZVNuNisrT0dLL2dBd2ZtRDFNWU1pUFBMTzAgMmNqR09LT0hIVnE3MDJ6R054cWttazNIVWZkeU9NTFlRcDNZb29EdDV3eDd6enlneGlBV1pMWXAyK1YrRGY2cmxmTGR1VkdHampTbSBWYWlsa3RHSVJzSDJFcWgzZUdlVjZSeFY0ZnpBNGR3TU1nL1k3TEgyVzhCMlptVnlpTXpiMmJDWUgzL1lENEIreHg2Y0V5MUNqdWgvIDRTdlQ2a3lXZ0haUGozbGRpK2o0V05WK3dpK1BoNWkyNFF6QkRFR2hzRGJCRG93eERGc3l5RDJSMi9ZTmdQOEFnT2h0VHJ0YmFMRWEgalRjeVdRcWxMcjAzeExRU2RuWVZzV1VweUxhQ0dRbVZXK0dIQnc0ZWpUNlBQSTVoR1Jya1YyWlplTFJDZjcrL1lFRmc2NHhaVmthRiBmSmQwTmtOMHkwV3BHbHI0ZXBhSFlZYjRoTmhTa2JnSUIyUVBERG1MQlpNSURoODViV2RyN21lYk5WY2NRVCtQMzdwWnc3NHdxTTQrIG56UlpMa2lNMllYY1hEdC9qWXIzVTlONHJsaWJzYXBPVWRJbWVSQklSY2I0WUV2QzFpNUV5b05YcDVlR3pvSTJIVVpBeXI1T1ZtZ1MgV2RZS1R5eVFOeVEvK28zeFdoYklUZm1XUXl3MC9BSDRGSFpHYXMyajdPQ0NiSituMEh6L0FMbmsxYnNSb3FOYmdQbWRVcUpXaWVGRSB5S3JXeDhSYmxKdmU0cE1UM0F4TTA5c2plUVpIaERZSjd4VmF5elBtTzVnd24zZytBOEI5ZzYwbUNoQjN0QVBYTVd0NU9tOThQVmRFIGFJZWRZQmFZZUtGbWlWTUlNajQrelRLMHZoemtCUGJaeklUSmkwTjZXZkNCUForNThnNGJBQTZuckV1Z1dac0d2TXFvTlBkWGFleksgM1VyQzBXclh6eFlYS1FKYTVLYmNHRVBEY0Z0a1pDRGhCN1hXMGM0eVRhQmIwVFJ6YnRzZkFYNyt2dC9mb3dZTVNSbWtGQ0pObmN4aiBJQldKV3pGeWRwd1d2VTU1WERrWUZCR0FaVStwZG9KM2tiRk50TWZXbWFqVUVlUjNZNjc4azcxeDVVclFRVzN5WmJVdGp1d2Flbm9hIFRFdGh3dmlRMk9Ea1VhOStRMTlibUxiSlZjTWN5UVo5Z0tYMGJsQ0d6REtydXdJRUJuL0FZWUlKL3dCeVNIU2VuTmNzVjJzRUZxV0ogSWRsNmV5VERkSGJHK0Y0T1VBdGtxdWEzWDRaaGttYk9uaC9uODhnc2hNWWg3blVEdzdKUG4vdjNnUDBjMWx1bmYyM0xDMVNuZ0xhKyB6NzQzV3I5UlEybjFPeUZjQzdnWXEyUXF1R0hNTGN4Z0RxdkgxRlZXeG02Q3hqTnZlOTgrQVB6OEE0Q2Z3UG9jZlUrWXJoMVZwbjZlIHlUSkF0cEE3VDBQWVZQeThhNVBDWlVWOFR6RVBDR1ptY3c0R1E3VlRMTVdTaFNvRms1K1VRZFJIK0Fuei9JTU9tamNqWGNDdkhJRVkgeG82RVRySEdVeGpFRjkyT1JCYmNYNEdQUW95eVBTMk50RURzMDI2alNjNVNPK0NiT2RERmNYdWozZHZOdXRSRXlHTHN4MmNyNHRwUyB6dTFjbnRQTVE5TjdadWlha0liUkRyOHhXL1oreUlkZnZuUEdDZjNJWmhuRjJhczNoMjdYV29md3QwQUFRUHZ3Q3Qrbk5rc0RTcmJrIE9BeDNOSkc1VkFqUk9wQndsb0V1SFEvZU9JTEREMXNQYWdka3VBZXlVRFpkd0FVZDhHRENpSHhuL1JNRy9iRDlndzMvQUs0NnZUNmIgU0FWL0hxVnVDaXFUaVhBN01OZldFaDFlSm1LN1JVOFZYbVU4K0lRZXlGdTdGOWt0VGo4ODUvUWF1amV3UUliUi93QXU4KzM5K1FVRyBYZE8zOWw1Q3FwejlLNlNaZ1Z2YUZybUxzdWFuN2pMMmcwTUlHSXQ0bUVObFdnNWdjeUJEOUlQczViV1hqbmlNdGZka2xIUGNCUHI1IDkreEFBS2xpU1ZGU1IwS0R5RU9kMkVEV2UzRzQya1FWWjd5MzJVMXdob3lKSVVRdUtKTHlGTnVNWTV1QmcyZFdMSGIvQUttNjZqcmcgWkI2bFlCNEMrVzAydzN4d05pVS8rSlpIdGkxSEpYc0lwYlZxTUw1VDc0dHpEQTVrcXZ0ZEFWV1Y1WnF2UTBaWnczdEpCN0FmUG4zNyBuM1RPVjNoUERKeExVRWhxdWt0cUtETlBDUlg3c05SMkhhN2FwRUNMUWlIOFFtOE1qSlI0ZXVIeFBzeXVRNnl6UGlHc2pMVWR0UEZvIHZINkFQOS9IdzhvWXJPcWw4TytSYzZuQnVVMUlFUWhlV2NqMU95TkFHbkxhS0dIQ1pEVG55RytFRzlIUXg5YVBDRzhyUDhSbFpyT0Qgc2ttM2pZSDdnSi8rb0FrZkRiS3B6SFpTWEh5UUJybmNuY2ZOSlVmTG1XTktZWlQ0SFQ3c0Q2dGVOMm9BaG5BSSt5NExJTXJNcFZ5eSBqSTlYTzFvbzRBQUFQNy8rL3dBSmNxaW9QWWlxVCtheEFQNjhIam5pK2VsSUZDdTdpMFhISTM3YlBISHpkVi8yK2Vud3ZodzlRVldOIC9oeStQWVdWbk5seHEyVG5EMnh3VndSYXBRS2VubWFmY0VOd3NoZ01BNTVCdFIvdk5YcTlaak5rU2NEbmdGOUJQL1FhanJlMEM3UWIgZmhXWEtBRXNaNGVOM0FRNjlZQzB3b0FYaWprSFQvc1llSHlCa2d6Ni9mQVFjWjlvUnNOOE4vOEFUREVBZjJBQThkT2FuWGFZVU1WOCBwRTdJU2RTTHRaRERUNEZ3c2o1dHRTbE1ERjQvczZmUStudGJJTWs0Q3dQbGN2aU5qcUxGdkpNNWRuTmpoOC9VUjgrQXdQbitrRXVPIGlmRkh0UUVDN1NsdXkxdHQ0TzdWSzRkNEtSQTFQY2l1K0w2Zjh5MUliSU9zZ0dmVHdLb0gzTVdMc3pZemZlMUh2dytnZ0FIQVFDQy8gUnhXVEFTQjJ4YU5IVERPUHdyaHNtcStiRkd1Qlp2aTFYMkVTYmVtYThXeHp4ckMrTFc3c2ZJNEh6ZDlFaVdVc0JJS095dFhPZDhPQiBxS3E2WXIzblhnZDM4OXRiUnQ2R3lCOW5jUGh0UjZ3Sit6TEx5K0s0ejI1c2s3QUFBWXNHUGdEN0NxY29sTGl1cXl0VXVtL3Z3Qm1WIEsyVmZROVNvSEQ0dFgyRll3c3d3T0hMM3hrY0NIZ2JCVWdlNS9RM24raWRqNUIrdXdkUUxwYkRneDZoRU5qeWlSc01aWkFuZUJrR0IgNWxQN0RXVmNpMXRmVytOcDlrQnVTSExhcjdzNnR2Tm1ZN21NQnUyeW5INEF2b1BQdC9BOVpJVDFkajNnVVVQRE9XL0pZWGxQc0tyMCBmaS9jMG9odUxBSGh6QTVnd1FoMk1wRCtLQjFsNTVRekRQQ2I1c0h0c0cvOURHR2VPRXpMc3U2YWZVbFBmamxsMlpVbDEvaXhIejI4IGRObTIxbW1XRjk2cDNoak9PRzRZZ2dMZTVzYnpISGRYNXF5RS9wdktXSllLbXQxS2VhdGdYQTRTV3Zub2NqamNYVG5wN2FVMXdyOUQgUTdnc2plQ0JpQ1ByODhxbUNiTVVLWW94dzJFZHVBbjkvQUFOL0FBSFpIRmp1TmpTbVZaMWdjdEFxVVFmWkMzWUFtbnhjcHNpeW9ZKyBIVytHbnVaVmZKR285UjZrcTJSM2Z0R3IvQmhFbDJ3OEFnZ04vUGdENlp0bVJYYlFZRHo0dGhTVnRqU1ZLSW51Q1RJTEdGY1hYdTY3IGZDaHc1c1BtQmc0MnArK2NaKytQT3hoQWxvOEIyREJCeC9mN1VPUHlFUFIyZVZ6T0NCUUprT3BDZFRHa1ZWY0Y2SWV0Q1dMS1EyQU0gdHc2MytHdnZoeXl4N2JQaHMzS0ZjbXNnd2dUNkNBUC9BTC9oaDB5YUNkdHA0ZExDc004elFrcXRTZlp2TWt2MmJ0eDJNVFdDOGtIcCBVY3NjU01qTzVtaVF2S1ViREtpaFVFZDllR28yZVNlRGZSNW9ycis5TDRZTEN6VEljYldLYTFFa2hvckZVejJGUFBSYkNWOVFNTWdaIDh3WXNnaERlRzJ3SHVjdHJETlE3UzhveVBWM2d3QURIWUQ3NkFBZEo5d1U0N09RTVpwNmpRaUhjR1R3amJsdStONGNwVVNMU0szOE8gSnlSa01KN0pYUE1VT0FubzFaNGkzblkwazNTWndBZ24wSGYvQUw4ZzFYVDZ6RjFubUt2Y0dHYlQ0dGhqVjZ2MlRPcGN0LzhBZWEwKyBsRnRmWlRDZkRXMlVnWXFzOFErZE1zd1lodmp5TWVQdXdOQkFZZ0FIZ2VuOUl1ZzJrTWZjdE5Hb0JqS3pnamJYK05WMkJiREk1Sm9sIHlWN0lJSjhOYm1VbkRIcmM1U3ErZk9oMUF6Q2lqT3pIQW1OMkkvQWVmYkJ2NERvWWpxWW1sZFZ0Sm5WOU84QnprU0F4eFJPQTFMZ1ogeEVoQm8wVnFqVmszd2RWaEt2QS9PUWRmRmxDT2JGK0QrS3NmbnJ6QTFoM3JxM2Fya3pwajJLVnFmTnhWa0RrWVY3cEZVNk9pMWVDaiBUdlRLUGVyMUZWS1hZTW9yWGxoRTU1bWNWYzBvM2pGTHdaMDNKS1RCdzNFeDZJRWZPdmFGVjE2aGt1VTVab2dqYXRlWkRtNHpubk1yIGFocjZyeXA2d3IvMG14UWFPTldsNUl2SktaN0JIZWpZaHdrem5TcGsrS0hLWmhmY2wwUUlDeVljREp6clVvMHlLaURUZjJsU0lpak8gYVhPbFZSM1pGamthTjJ4Tm55YTZYdmFueTJyMHp0d1dkWFFLeDRKSUN4S29CcmdBQVVUeDBqMkZmWHF0cnVucmZVZ1F5Sll6WmthbyBNK0ExZXZKelBTWlRDRk0rdW4zWmZLQWlVUE5oa0dHYVptT0JwYlllNThxd29ucHJuT3lxdldvcTNYdVg2bHIxM3MwdzZlcTExUmY4IFV6VUpwL3R3R0lrSTZndzZqVUtSSlJFMnVhak9PbVFzVmRVQjRPd3V1YlZLVW1oeVozRWk0VHNUOFllRkVxcnRGZ0M0TDJzTTBQTG0gNU0vT3M2NWVzZHhISTRkZzZwQ0ZjTVF3RnZ3R3V3UDBEWFF4QUNSYUFGNnF6WEZuOG45L3Zyenl2aG5LYVg2dDB2MlRTUHBHS1ZpWCBGL3d2Z0Y4MkU1emdvaHlMbjIzVkN6dUt4Y0lMTnlYbUV5Q01oQ01BRlJYRmhFN0lGNVl4U2pnQi9yV2NCY2o1V2RKdC9kMmsra2o5IDY0V3ZncVJnN0EwTkxVY1BDaFVVVm1LY3BnOVQzbEI1aDRldUdSaGVDc2xDWitQQ3NNam5LZUFMTGtPbytIajZjbkxWTXYxS3VablcgZGFvaWYvVXlsbkI5THFRNjMydUxnNFpmRERrOEVFY25yWTZJMzlqU3N5cXpSemFYYllxQzBlV2VXQkl0Y3FHV05YUXZ3T3FmWnlvaCB0V2t0MmE4YTlUVjBrbmc0ck9uWXFZelBCNWllWmJ4Z1VrWDlhbVZ5WnVZeExZZjFsQW9ncDZGSU1haEoyWk9Hdzh5WXZ5L1JrZW5MIHdHcTBndDl2L3dERUF0V2dzeTRMbHJHcy9UcDVxNXJuQWFXc0FwV2NVeTkraHlXM2Rhc0FxUEIrakFMbk45Zk81ejF0VmRrSTRtTEcgVUo0b0FPRndjdGRDd1FtWG5XZEdwTzJPVHhIS3c1OE11R0xEL010bkUrUlpvOVlTQVBBQTRYd0srQjFmZ09qWm1RbS84V0RMZVhGdSB1eGgwWHk3OHRlaG5TOE0xZHNnOHV2c1FzNUl6VWRtakM2NTZVaWRqWlE5ZUFsblVmbHFNUVpsTW9VUWJUSVNmSkdRTUk5WWRNRi90IGhtbzZqZXM4TXRRenVvRm1MS2J6aUk1UUlpUVVrU3hYT2xabGZwdVFQYUkvcVVhN0w1SHJ6akpaQUVadVNuNXhIUHpCa1FMQ1RzZlEgcmVqT3M2Vzd1MCtweVptcWQ2eVltcnE2c212QS93Q25XdU5WV05NVkMzZDRnQytVODE1OG4vcWV2eEJRaE9iUUZtNS9wbkhJb3NDZSBRSmtKWmhFdlZDWHZRODFwWk5lMVNCdHVQR2paV1hORDJ5UlZmVm41VFk2cnhBTk9ic1p4RWN3WmM1Y0lUQVdjd1VpdEZsdXQyMU1vIG42alh3bVRUclpSWDF3TVR4VWxrQ0NCQlVGcW83TUZTRDhrd1I5Y05XZ2wycVl0QkRFNHNBaUZXcVhObkNpT0sxWDJXbTUxblRmRVUgamozTGhpMzNMWTVvK1JkQzZQUHoxVS84aC8yLy9EcmowOFYyR3ViVC9kVG95eWlBajBxNFRUMUFISnlsNkJJSkN6bzF5S0x1OW52USBSV1BRS2tSNXZxQSttY1RVRlBNek03RDFqVldmaDY1L3FMTlloZGFReVRzUXpsMXBwZlRyY0VBbHNvWmQxY0EzeUZ3NkZpNTZZRExHIENWVEpoVDBnd283YTg3NEJBVllYcjljK0FjSUc0OC9PVUZDUE85TWtUa0h4akRuV2RVNVAwK3E1UDh4LzhnZitPbHA3bC8yLzhKMTYgZHJTN0F4YkxLRkJjMGlwK2lDbmErbXlObXJKT2JDamVnNVdpdFdUZ2lmOEFNdXlzNmNuK3RkV0hlNFhaNUZvWHFYTWE5eUhIUEVzRyBDcGpQQkNzMk5UZlBpNDFUL3dBQi9TanJOWDU1d2hhTHc0MndXejFwaFkyQW5WS3Y2MmpJdExKT1JFV3YvUVRpamxESm41ZGNydVRuIFNnK2ZrRjhZR1liRDduc2pBWEd5ODZ6cEVBQmtqc1g2cUhuOGk2UCtvL1BWdDdKUDNHd1A3QnF3ZjBma2RWY3FsNk1PL3F4UmhucDkgRmFBSUZOYVZMQlhjSzFJTUFjb3F0RnlVYlcxT1hKNnd4czBhWVM4aGN0Q3ZIWW12c1NFZm1HNi9GUm9JYkJLVmxUMGo4UFRtMmNwVSBQTTFGQktKc0M1bkd5SE0xbjEvWDFsenZUalpEc3Ura215V1JETU9MajZ5UlZTT0FHZVpsem1sWmlIUTh6TlA0bTBzaktsWnlLWFdmIDhBVmdNenJPdE9wQVNLQjFBVnRwVXlYaHNIWVpKWW80dFF5VzZhaFlORHBPbUpNbXBzayt0OG0vT04rZno4OVV5dEhMSnJyN2JHbnkgT3lNZWZXa2JJUjVjZUQ2U09BUTVreXk5UXVWN1pFbkxhVlBJWFdIRDFoSHBSQVlqZlJpUXh5SklVZEZGc0dVYzlNYUpuUjdvNm05WSBseDNqU3crenBmcVVhMmY3WFhybHJWN2M2clZZSUJ4TXFhbnBTd3NUQ0Q2WFExNjJWd2djaUs2YmtjU3ora2VlaXhpS3laZHdjZVBCIGpzWHA5VURPczZWSUI5WEVhNUYwZmtmeGVEOGRQajUwT3F2bXRweCtuVVBpdy9ETFp4YnlMTkVkSmovaHhNYnJxMTBvM0VSZWJFc1ogSVl0T3RiVzRJclpycUI2WlVKaWp4U3hDaGNzamtHWmtjalBqbGhSWWZZckNOYWxQTmlaU1JZSHB5d3hpeGxsdVp3ZzA5SGJHZFg4cSBpaHV0WW5Yejg3eGkya2ExckF5cS9JRytITW5wYWNtWTFhWnNqL21zY01hVDVpMmZLd08vVGxtZzJvUUZYWEZlekJxZmdCWWgyU3RRIDhyMTUxblN0UDM2UFU1OS9yL2YzZWJ2emZtaGY1cnB1b0pqblV4a3hrM2VIYjQyNjl0Zms5YjgyZGJiRFlvL09aOVFsdU5FeHFxU3EgdlF3emoyWFY4NlNlUFJSK3FsNUh1VE5oMjB5NDdrendTeHRyaCtyTWRZN0VHTGhXc2lNWXdwcktFcUhxV3JHYVNhYVZ0UkdxaXc2NSBzTFBseGhLeVcwMWVnVVhSeEtaWHpQRkZhbVZSanpHWldnR2s5VUVab0ZJcjljVG9OZlZDanJHVURVMGl2aXJLczdPVWpzQkxOenM2IHpxUkFCWWdBQU83eHg4cDBwdjhBaW5QeWNiUHllZWtKT3FaVU9pbUNuU3ZwbXkxT3ZJTHE5amYxZ1pHY1htdmdFcnFBbkFqd3VLUHkgRlRQVW9OaExlTXIxTHcxYkZRM0NLYUpabG5jOE13bGt3dlFGWlVLdmpOSkdsMlpOYW5ObUwzRG9oMTMyOHdIMm5QVnk1d01WMGFrNyBJU3FkWDFjajZsWEp6QndPT0dPWlhxSWxwbUJPd1I4MExCa3BEd25ibTE1YkpuV2RhR0p5WGs4U3lrZm9zWXNpUHdUUXMvTkMrbHgrIDUwK3hrZ0RKOWpCZHpFTXZnaGJPSUlJRm12SjZNMTJ2am1tM1VQWFVTbXJtdWxKdzFGam9IcHRpU0lieDhHZWFuMGVBU1RLMGVEem8gUUNMS1RHTmk5ZnFNamJBT0p1YUJJdVlac2F4aFhQOEFWSE01MkhvL2NLcDE0ZHFIdU5lOUpBOU5PazlKei9adGkyVVVteENWaFc2MSBXMW9kemRVYnNRZnlVc2ZtQThvbk91QmU5UnFDMUlxOGt2QWFBWGxpUlRURWloMDdCWHpyT3NzWUIxSWNnRjNnaUx1UjNNVnl4TE41IFlyazJKSk5XYXF6MDRFL1Q2SGs4R1FEOUJ0bklEOEJxRjE1b1g0NlNPcUswUFNRUzcvUGpLM3FaUzlGSWFYZFBOOFY4SVZraU5CaUQgbjZRZXVwVG00U3k4eVdSY0p5cVhpQXMweXlwbWN6NExEZTVNTEc3dHd3NjJUbzVpRkVVc3NFYSswUTZWOVlDUTdOYTVjMDNVRGJxMyBreW8rVW9rRmdlTmthSXkxelRzcklXRGlvVkhFTWtoTG5tNittRFQrQmtMNjZ3UEVGdkxGNVU3SUVteG1kWjF1c25UNlppU1diUEppIGJacWFLcko1TldhczhXZnoxa2NBem9TQlp1LzM3ZlA1NllGWitnWmNGSFd0Y2pHSzJ0bFkzSUxSelNQVjJGMURoR1duN0kwelZoYkwgYlhaVDA0dEVvM2tycFVrMFQxV2Q2Qkp3Wk9LSThZY0ROVGlraUxpU3pGWll6VzByaVRSOXZqV1pnejJJNUlzMmxvNFZrTWtIbEdXMSA4WlpScExBbUZsTGU1REtCSG1GOExEaWVvWUxrUkpxSDZ5ZVhuRmlhV1JJRVNzaWZuV2RaazkybS9VU2dmb0FwUUg0QS9IVTFqdXVsIDFHTE10eU1UaXhGbTE1TkVXZjJlZW9XNGRaMXpoRSs2YStGK3RVSGd5dEU2Zlh3OUlHQU5uTEhDU0FzTnFlTUR5Q0FhYVA4QVVLVWkgSTJ5eWVjV1YxakxBaVBrQ1J1UUlqaUJSTnpHTmQxYUpVSWwzVWxwamxIekxVdUVyVzB5MU5mdGp6MUptTDVHVzR0NURYa0Nqa3habyBDeFNXUlRrTFJHU2txaE9SRzlDL2xHc3VhRWk1VU03Rkc1a29mSXpyT3NXcEpUVlJSb1NrYXpSNG9wS290aXpTaWxGbmswT2V1Z2lxIHdreVVOVU1sWkFHclZMcTc4L1BWb05Fdi9EZzA4YW5LVTdrdjNwWXh4MzBPVE1COU9VdXdhM3pNck5oeGN5SVU5R2NRS3R0ZHRqV2IgbTRTakV2SWpTRHJHVHhFQThnT3BnZlNKVWwxZUJDODZ6ck91M0hMS0ZVQ1NTdVB2YjhwKyt1UEpIR1hjbEVKTE1TU3FrazM1SnI5RCAvcDEvLzlrPSAiCiAgICAgICB5PSIwIgogICAgICAgeD0iMCIKICAgICAgIGlkPSJpbWFnZTU2NzgiCiAgICAgICBoZWlnaHQ9IjI2MCIKICAgICAgIHdpZHRoPSIyNjAiIC8+PC9wYXR0ZXJuPjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6c3RvY2tpZD0iU2FuZCAoYml0bWFwKSIKICAgICBpZD0icGF0dGVybjU2NTYiCiAgICAgaGVpZ2h0PSIyNTYiCiAgICAgd2lkdGg9IjI1NiIKICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48IS0tIFNlYW1sZXNzIHRleHR1cmUgcHJvdmlkZWQgYnkgRnJlZVNlYW1sZXNzVGV4dHVyZXMuY29tIC0tPjwhLS0gTGljZW5zZTogY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiAtLT48aW1hZ2UKICAgICAgIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRSUFJd0FqQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQiBBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFILzJ3QkRBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCIEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFIL3dBQVJDQUVFQVFRREFTSUEgQWhFQkF4RUIvOFFBSFFBQUFnSURBUUVCQUFBQUFBQUFBQUFBQmdjRkNBQURCQWtCQXYvRUFFSVFBQUlDQUFVREJBRUNCQVFGQXdFSSBBd1VHQkFjQkF3Z1ZGZ0FYSlFJUkZDWW5JVFVZSkRaRkV6RTNSZ2tTUVZWV0tGRjFaVFE0UjFkaFptZDJoWWFWLzhRQUdRRUFBZ01CIEFBQUFBQUFBQUFBQUFBQUFBZ01BQVFRRi84UUFPeEVBQWdJQkF3TURCQUVCQmdVREJRRUFBUUlERVJJRUV5RUFJakVqTWtFVVFsRmggTTBNRkpGSmljWUUwVTVHaHNSVmpjbk9Dd3RIaDhQL2FBQXdEQVFBQ0VRTVJBRDhBcjJ5QzZuclJMcmUzNit6djhGamZKTFluMGJaQiBnUXRDMmgzdTRvSHAreUtyVzBOYkQyQk1zYmIzdzY0RTBZVytYa01lQWh1cmpnQUJnQXFLZzhEK3dQaVNycEg4ZERqQXU3VDVhTmowIDJTc0M3YVhhNGRJVlBUOWMyTUpQUmEzd1pCRXkxSVZKUUF5cTJzRUVDbnM5bHMrS045SmRxdjJCZ2ZsOWdBZm93VkZIZzYvZ1dvMVUgalAwM2txZjRUVzdDWVZiT2NQbXVTeExLSy9INjIrSFc2ZkxIaDFSREg3NGgyWjNrRis3eHZsWEkvYUlBQTU4ZjgrSHdyY3A5Y3ZpdiBlNWVWVnRKdTZTU2lNQ1M3STllc244TDZRVUtHR0Q3Z25zajUrT0Qybjl0T0xkUUUxZFhacXpPT3dTcmpsdWdENS9ud0R6NHlSeVlUIEdXWjJkSXpJa2tmcFNOQXRiSVZpWHd1M3MwdzhjZm1STEc3d1BHbUNQTkdTMldXNDVIZS9nWTMyMExOZm5wNUo0OTBnWmVUbTFMREMgVVBZS0dreTlOOTJXUVk0SGJUUTcyMXFnTU9DMXpDR251QkNaOENqOVEvQStDb2FIdG40dTRPQVBlQUFNRy80dmk3Tk05SDVWb0orbyBlMzByc1BsV28yc0pBeGhJaUIyaE41NUZNRUliNUNoclljYzRRVkt3SUZxSjdONHNad2ZtMW9vL2dQQVk4QjZXTlQyWURyNjVESm12IGJhSlp6a0hxN3MrQnNJZXBoeWgvczNhSGRCd2NFT0dIdFJnbUhPSHdKM0JpZE50QXdZajlya2tGNS8zKy9kU05aMFcwWEpJRDFMWDEgVjBtK1NudWdZa2dBaDFPd21ISVVYbFJmNXd6cUV0U3lFTWVocXREM0JXand5TFBadFhaaGp3N0JMUi82SCtmbmovVW5jUjR6eHpPciB5bzZhaEREMkxBY053cEl6dEhOWEdRZlRuSHRxc2oxSWl6ckxwcDRGS1JQQzhXZEhIaDh3Q29TVk1xVWt4eUpkZHdhaFNVanE5Zno2IGZtRDdmckdOVEsyN1JyTmthTTdscmVzbnh5UTdCZkFNTWdZbUNFOWtVQjIrVktQZklLZWpQS3VyOG00VCsvNytBK2c0Yi8ySEVkd3ogYk12Snp4dUMva09sZ05YSkE4bFdWZnRuOE5KUmhzYUtZSDJUVzkxbUE4eGgva0I2bFkwemMxZG9Kb3dNMVZ4c0h4OEFnbitBOEI2WSBUNDRhakh5djYzeldqUHNoOFVnTElKVGxVYklyS2JWMVhzTFNCUXgwTkRXNGI1TXI5d2c4L25uRU5tUmlncDVSdnpZazdCK1hkLzhBIFByL1pVY3pMVjZmYXJRZ1ZMVjN6ekQvWVZIdUFINWFlQktDWW9Gd1hqTjhKL3dBT3R5RGg3a0ZLQ3RveU55aXpCbTloUWxxVkRicUMgZmZqK0Q5aWZZUktxeHN4ZjFKRlRDTk1ranY3MHlZeUxJUHRhU1NXdWNRT2NvNndIMDRVeDJrZG1rWnNwSkt3QVY4UWtReDVveHhKZCBuTExpdU9wN1FVM2RYc0lDMnZoSzdMR3NJM2R6eHBwUFd3d2g3dUtVTmJVV1lRWExJWkhEOGY4QUIyMWZiVlhqVE0wQ3hpTURkbmMwIERBUDFCMUZ3SFlIN0Fxck01cUZUYXpHMkRtMXV0bUZ4eE4zZEh0UzJrL3VSMjU3TjFLSCtHSHJkRHdRK1NISzA3bG5MZ3dXU2xOc3cgeEhwTUk3YkFBNS9pdm56NkNnaXQ0UEJDd2N3emI0SEZiczVvVzVLOWREc0JhRk9xM3lMWHRjMDJ5VmV0MVd0Mm9INCtIYW0xZ0FnMyBCWnJOODNUWTdSZHVEb1BQc1AzL0FLZ2J3SHNsZzJvMVdxR3VaQVc0dHFOcGFwMnFaSGJBK25PVkxWendldnc3SUgxSUI2VEhHRWREIHI4OUJoaTNsb0ZFMmI5N3c1OTdmNTRBQmtrWnBTeFozM2FrSkw1eG83VUhpamVobmh4azJLWGEwb0hVaVhFTW1TSmc1UzBqck9zZVMgTXpWWDRzMENlZW9FZGwxUEtyTXdCeW5CdEdxNUtOcDdJRGNuNG54UVBmZ1d5RUUrRytMYTJ0a0RCemtFQkhyZjJhYjRHazBjMjdjNCAyQitRUUhuMEhyZFlHWERxKzRKa0N4azgySDd3VkxZS3VTaU9EdVlWMWV2SHhvb2RnWkVNUHp4OUhtQWY3SHRneERGc3pOd25tMTRmIHJ2OEF3RkJ3QWRpdTZCM3d4VXNBbzF2ODJ4bnhrZDJnT25qNjlRMWVMTFBTbHRncmRQOEFoMm95RDJTdVFKSHZnWVdWa1h4bmZBanQgU1p6OS93RDdCaFB0Z2U2RndwZGliVldjTlZReVMycnlQRGNWZHNobEpiRFhKNWJzQ3R6RXdOTUQxL2c4NDJmYlVFd3pveXUwTE5RSCBPRXV4emdPd0FQMzlnYWl1VlJ2T2JxbFZocUlyb1g5MkdYNDV5SThpdXB1Skswak9NY2M2RjNlMkk3K0I3c2dQMTQ1dmhnMHZWOWQyIFdMdG9XMFdUR1ZLNXlhZGJIQ3QzWXd2TW1ueXBiQzdTcDYvYWwycDRkRHRTdjF1Q2VZRU5HdUFuNy9admRJU1FaLzhBcjQrQUFQeS8gV2xQZUUvdFdrdHI1RHdvMVhzNXRsaDBteUxZcWRrS1VqWWUxdzE4T3lQbERodzQ5Ym5OcWZQZ3pNVmtvTFppZjliZG9nQi93R0w5NyAyRVQydGtyNmxpV1VHdUFsRXJTd2drdGd0U3EzQmVNTkN1dkZMa1c4QTh5R3lRMXRQWkVjQzQ5dWRzUmlsb2pOakNKTytjQlFmZjM2IFhpbkRxc1dZY0UwWHFFYlpsWGplMDhocXVhU1dNTkVyVGdoMWZNSVEvZVl0L3dBNGp0ckFCQnpOc3c0S1Q5dGtlTUdBK0ErL2UzU3IgZlpsV1I4TjJaMlFLTTVIakdHTHhwYTVYWnlHUXhBWGszd0pLclRScmRlNGs0b3Z0ck42T0YwYTdUWkRmanF4Y04wY0JlWTRiTlZaSiBQTW1HMjJWZFB5UjloVEFLYXdsYkdoanpDRzRCL3I3SkJuMTlXalVZdCszMWRYN1Fka3padllOLzREYm9EZ0lDcUlOc3RCSTA3VjdSIFlhdUNjTzZVcHR0Z3cxTlR4WnI1TFEwamZvWkNHK1RJZW1QaDhQc3NuZ1ozQnNXaG81enZmQ2QvMkRmOS9Qb1BSNVVhdlg0R1BrMlggYUY1T3lIZHdkbEUxK3lEV0JlY0t2NVllb2VHd0dGc3dZbU1temc1OVg3NEg0d0xhQmpOdmRYZUEyQUFmOEJoMUR2a2lXa1BoSk5nViBLYnNLa1ljbmxGZTJFNGNicThXV0YvRFlGdHdmRnVHdGp6RUZ0c0RFR3lvd3g4ZkJoUHVrRTJOQi9md0FEd0JRaU5ac0NIbGRLZGxSIEwyYThUR21PV0ZtazR5czl3NEpHVGNDOXZZa25HZm5OT0RJbVBHTjJ2Tm4vQUVQUTJ0c2xmeFlleW5yVTdNMXlIcHluSGlIblYrSm0gQVh4SWNuS3EwK2gzMll0aDJTMEREVWVyL1VQVmJKOW9WeVpNNGsxY0VPSVAwRkI2WVRRdjJBTXRRYldtcUIyVzN5N3FaR2xtQjJoaiA5WGJLQVYyRm9sSWZlejVrTndUeDRaNFBkNmZoakhtci93Qk44Q2VmN1JIOS9BYkFBRzZQcE5EcVdIWHpHcjJSdjJsV3BaTFpIaHUxIGdwTmIyMG0wTlkxako1QXd0aDNEa2lmRE9IU0xiTzJ5c3lxdjJ6dFJKU1RaekUvditIMEUrQVV1V2hwYVFobUVkb1Q3a0pLU1F0NmggY0VOUFlKYUhZeWJYdDJsRENlWVF3OVZ3MDlnVzJydGY5d3hKdm5HV1o0Q0JEWno4UmZmbDkrOXhaWnZRR1NONktSYmtNZTMvQURWdyBrdWJaeGpEMVlzRnpKUVpLT2lpWk1wVzJuR2I1MDgyNTUrQjZhVlZjbm5LL2l1UU8vSm1YWExCTXFXSzFPMHltM3h0cjFmNDNKK0dMIHRwSTM3ajdKaXlHT3o1QXhPbjhSZURBd250aXk4bk1jZUQ4QVA3LysvZ1BXTFVoWUY2V3FobjU5eUVodW0rNlh3SVdSekZoVlJVOFAgYTdEcEY4cXVzQTlidmtPK0dSZzN6ajdZMUo5RzRXZ0xyTW04R3dpU2J0MEJzSFhudmxvNHNXTEd2bHRLcEpQU0dSa1lhMzM1SVUwLyBkS3lGdmhqamJoTTA5aHpLY0hCbm1BQ0QzUGEzd21zby9tM2pmK0FvSi9nTDhmZVV4SHZUVHdMdXlWUGgvTXJrYXBTN0ErR3dNSzJCIDAreXhiUUg1Z1pXNWdmdkFIcnFmWjc1UjRjbXpmcldlOXUzQitBZ0g3K3dkTllSTk91V2F6S2lPR0tlbW1kQ28zeTlTOE80NHBqeHcgY3VHQ040OU14a0NIVHRNcXVROXlLK25yTldqeDlHUlRLdTFKazlXM2IwalVObHVOSXE4Ylgyb0lsYUlFeXRxVmhJOWUycFI5bW1LdiBQS2NwbzQvTU1CNWtPYVFtYzgzNEordkEvQnBOMkJIZ0FmZlFCOStRT3A0b1VqMFlNc2c5VFppNHpHYWh1OWhNQ0huR096NTVvMkg1IGpCTU1HWHhEbVlNaXErYkJPVDNuaTdSK0tyUjJRNkFQb1A4QXBGc0I4OEY2bUwwMDd0RkoyclgxblVCYXJiWkMya01IQ0NDOEhzWlggbHloY053cXREaHZpY3RyNmZPUTdRQW83NXhscFE2ei9BTjdZNy9zQi93RHo2MHR0bUIzSkgxZ2R5OU1iWXEzUzdKSzlIMCtOU2Z3OCBYS3BHVWgyUXdUSHg4b2VxMDlnaHp1SDhIL0dhSGFLTU1PT3hzSnNJRFlBRlJQcC9wQ2hoY0x3dTJta3FacHovQUhsR01sZHNacUwyIFZiSG5JTU9GeDVFc3gzSFNWSTNWeWlsUFJBeHhzMTM1M1lJSEdOZmRuMm15WDNNc3VZQnRxd2RTMXRaS2s0VmRXVWRrR3VFU3E1VjggV0VlaUdOUU96bUVPcXpGZnJZTFZMY0FGNXNnbVRmRmNZOVBBUkpwTjQzKzNmUDhBQVVFQUV4M0JQQTJ3NFp0akdLVXRVTXQrWXp2NCBkN040dWVpSzhyYnc3NEhyZXlFL1MrSFZXMnIxS3VkczRHTHJNbURxN1R4U2ZQd0w5aDdjKzJDSFR4NVNrWmllMjVxMnBNdW5pdDVLIDZRVzNaZ2lMY1VEd01wVzdBNEI2M1QzeERZSnFxUGNMTG85YldSbktOczNzMzkrN3VyOXVINmk2Z1NDM05ybHd5YTBxQVB2QUZsVWIgQ0h0NUtTa1RJdGpDUmNXeU9ZTGJJNFZ1dDJBbjhEeDV3WVJrYTBHZ21NdFR0ZC9VQUQ4dW9JRHBqSXNiNFJqMjFoSCtiQ2s5MzZvZiBCOC9BNkVsbGZka1hFR3R4aWFkYXh4empvNC9JWHVOMFI1SE1qaVZvZVZVYnFyVzBjT0FsZEVzamkxVEUxNVRZMmlwYnRzYTJySEFPIEw0aVJMZzRlblU5dDlhSFRBdTNpaUg2VmdKaTdKV0w5M2UzODZ2b1RCaDlyT3N3aTVtS3VsQjhaQ1FGM3lhbHNKSEpYWGNEdWh5VU0gdGJhYnpCYnJkYlc3SERwNWdHcEo5RFFiSVJsbTBHamMzaDI1dmgrSW40QUE1QXdQeDJuMTJMTW9sekdEMm9OU1pNMkpGcjJvRCtsNSBmWWI0UFhHdzJQRVEwL2pXcHVuNlR4dEhsYWxpUWd3MXBuRmxCZUIzd1lLM3ZkQ2ZVTFlBQUEzMVVUTk45bDEzUTRZVlRKdlN2QXJGIEpYbWhxWkxBc3lJcm5yWTFCUmEzcDhQRCt1UThiSThlZEJReWF4dWhQZkRsb3V4ejlVSDlUNTgrdmV6a1FFT29lMmpDTHViY2h4M1ggUGN0N3Rwd2NjY1BMWDAxNGR0Q3l0U1RIVDFBNEl2VHZuc2JzZCtGcVREdU41TU9DT1VwUlowNVdsZ1dRN1ZleWFxdE91YTFEbCtPeSBMYmdWRGkzTjRQVTVNVG9RZVphdUtHUFpKK2t4dzlzQ1hlUW1qNFBCbzJFZUdBQWZ3dzVCajA1Y3V0NjdGV2hrbVJiSTJ1MCs0YWxiIEpGMk95L0Zodmx0TUo2MEZ1djVsOEdIQ2JEK1lxdmxvcVRVeURkUW90V3FBWWoyaWJDSE9Bb0w5c0MvejZvcTZ1Q09VNHV0bEhOcVUgb2VVa3hpMjVHSy9FTGRqSnRnaTFlSDd2bjVVRGoxdUNlSHdEbmFCNTdvREJtTHRTWVQ5L1A3Qng4LzA0RWQwSVZCRE1MY1hGSnNJcCBUNVB2UU5yM1VBV2ZHZ1g4cUtZVDludFN0b2FndysvSUVOVjJ5czN3cXpESGplMHI4UllIL3dEUGZ5a1RCdnFJb2MzYUVSdXpTeEs3IFNKanN5dThyeDU0WlNZb3E4WkcyRmkxeEZtUkZkcVRUdXBXVC9seHNmVmpxK2Q3Rk8reGp0KzFpM1FmZUZnUjdMcDkyY2xkSnBPc1cgaFZVa2doWHFld0x5M1VxR2tXTlhLSGFEN01odUZ3UGpCdmtCdnRxdWZ2S3ZwZlp5WVB1aWI3dXZ6OTkrQWUyRWJIcTkwMHRPRmIwMiBtMkVOZk5aRmVzdmRBQythY0d4YnUya1hlcjdRb2NqZzNpRTlibVZoeXFmWUNtY01FeGhSRFprWTRsRzlPNXhnOCtBeEFiK3ZzNXNIIGo2ek1Nc3FvTENOcEdiREdsayt6bFdRcHZrV1hFNVF0dUNlNE1pMnlXb1A3Y3R0ZnZ1enN4TVdoak44d3hDSEFDRHo1QTl6L0FFRXIgZExsS1dzVG05VkxkQWg4MWJweElSN09RMWVXWWl4V3phMlJmaDQybUhaYTJIcmdKdEh3SGhrV1VZb0xSbVo0TnBPeDgrMzgrQVFkLyA2SVBJNlJrTjJjWXM0OWM1U3dSbmVXK01keTA1NUFZY1hZb3BHU3BaYm1XOXdnNVJ0WVhIRjZHVlUyWGFLTmRkamhNVDhxUTdRTXJPIGpXMDdQakovRDgxWVVPd3VFb1cyQVh4YnI5Y01VUEQyWndaQWM5UVBQQmdtTWFHanUrai9BSXUyQUI5L1AvNWtsZ0xZOHBIcE94dE8gVnpXUmRrVXhVcll2OGtZSzljTzE2UVUrWVJ3N1Z3ME80R0JrQmdiZ3JTQnRnempIbkVuL0FIOGZRZlArZkZjeXlIUW9DVzNmTkdqWSBkTEI2S1UwZDJRNHpFdGdVTmhQY2tUMDlrRG1HU1lRaHdVT0JkTk9yYXlNRitUQm16ZkJ6NzgvN0FnZ0g3cU50eUdLRFZnSGJSZkNaIGtveEoyL3Q2OFdFNEpwNnNyR0ZiZk1ETGR3T0RKeHZnYkErS3ZCaGxYbEhqZy9OZ2lPZy8yQUFnNGRDZ1liT1l4ZGNsd3V3a1lNWmogUzZGNDkxbWhkK0JYUmxsWkpva2plZEpNRG5HWlE3U2M1dXNNY3NlV2Zid3puREVBR3llbWRXZGdYWmZxRlp5WUxKRWdLYVpOcWEvYSBqNVM5STkyazFkcVhUNmg3T3Q2a0RENG52NkhPN1Bud2QyTTNkQ2gwWlpCMmpWeHRIMkRnUCtyd0RwYnNsZ1EwMUhoOTBNNlNOUXc1IHVYR0pPMWYyYTR5ckcxSGk2NTFVSjlrVExJTVVQdyt5VWRENWFEVzFsbUtVMnpNMjloT0RuMThCYnA5K1h6OVJkTTd2QVVzR283NGQgd044RXRKWlE5VGpDd1djeVZmNVFvN3ZsWHcxOWJNVVBNVDBQa2dORFlMYUNHT1RxNnZXZmhEZkI3ZFBuOS84QVBIK2cvVDIyUW5kSCB6bVBLckhUd05pbUkxM1V1VER2Njh5QVNsODZjN2s3WDJRaDN3bnZoZ2hNZ3dMQW5JNGU4bGxYdEFuYjd4YVBObmpZT1ArM3VBNldGIGlZeFNPMnlpVFJoNFlKYmowOG5PU0JjVnY0NTRMVVRYVnFyczBxM0RKaEMvdjVMNUJQOEFoeC9Wdy9rbjVYYmlWNWU3SEEyMjAxYUggS1AxQjEzaTloRVZ1c0FQdWtmSUhPWG9iOUxkVDhnam0xaGFldlZPeUFscytoM3RBMkZ4ejNET3lrOXBkVGVUTEpvK1dzeGw1ZlZFZyBlckxBbk92SjZ5YjBxZlMrMnpxdVpORWVzUEgwRDhtSmtoQ0ZLM1JKVFVjdEFXSS9vcmtyTGpMUHJwcHVoQkpjUnhSMmtMNnhJa3Q4IE1SREZRUkVqSnhNUUNrcVZuVGNQN1p2MGRVVEZmcG5iOHBhWW4rVDVGSC8vQUhDQi93Q250VE5wQTdNQXpQdkFaRTBTMWJUVlo1cXogWEg0NnYvSU9YSlkybi9Kc3U3dU56SmRrSkx2QUpCMkMyREZTNmxzYkdQTFk4UE1EN3c0Y2tybitRbkxaTzh2eG1NKzdPNk1meHQzRCB3QUFBZmgwOFhYZW5PNDJwRE1wNUtIVjdHTXVPUnRzaFRtQ3hhUXJ2aWU0QitZWFlIVzE3bFZTRUtsZUhDb0ZsOFZ5YU1kNFQ3b1AzIDVCKy9BT2duVG02NStwREJsR1FhTkNGN2ZhZ2t0SFNheHErdm9jcFd1SnlpbDdBTWZxdHNsZ2YwK3BWWHhuMzNObXZCSjJUZ051NHYgMkdDRHdFQXpyTVgxdGpPRWxKdTA2M0d0NXFxYllhdjFGVExBWG9jb3B5aXVhMzQzRE1QdDJCeUYySThDMExhM2daeGZiQ1hoRW1xeiA1OEJidkFMZFFVRUJVY3V3MkFiSkJTdEo3ZHRGSTIweHRzcXQrN0pRZnhmUFRaQXNyWk9VelB1WnpGSGx5b0ZDS0ZMcm04aTFYUXF6IDBwUTdSbVR4NUt5ek5ZeGh0cTVDUzc3eG5TS25tT1VWaHE4cWhqb2FITWhwL01GcWNoM0JXbityN1J5WW53bkhFSHNBQSt3WW4vQUIgTmdFTlZHa0d4REZRSnJoVXFlbWtsS3dxdmFqMm44c25nZWJxOXk0TDRlMUhBUFpFUEVQZzIvQWFuenhZdDVXZndtN2d3SDM0QitwNyBwMlZuRDB4dVNtU3NiVzVjQnZPRFY3Vnp1MExjeWh5M1BIS3dqdFNwNCtrbVJEZkh6QWd5Y0QrZjJyV1Nlbk9yeWZCa2kwY1RuMEYrIDgrZkFkTEY0cWNPNVV1aGhvdGhNalZGbUc0aVFIUTErcHcxSWdaYUhZMVBWZkRjRE9tOHh1QzIxZ1NBR3gyUVpXWlJYSi9oTTI3QXogL2dNUGJEZjRURnFKSFY4OEZ4YkYweWdlUWNSdURiNmJVYlZQYTFKZ0g4cmwzTElsalFJcFQxRVF1QTl5S2pjTkhJbUl3eTRJYkpyeCBianQ2Y3djV2p6OHRiMHlNZW9wU1pESklhcDU5elhLNDd4RjArMWtCUTZyWDYzcXRhdDh4WkRCTU9jd1VvS0c4ak5yUm1aSENiSjUvIEgzUG4xOC8wYktjTmtYS3p0cnVObk1sRHErVEdzMTRHZ0tmaUJ6MFYzbEZIRG1GVjBteXpLM1gvQU9RWDZXbk1oTkdGRkxmWm5oMk4gOEg4QndFK2hZb09LVHJkb0ZtY3ZTalhKcWh3bG5aVmIzSGJLZERxWmYrR0JsWHlMdEI4SUxiNXlTYUhYdysvT0VBNGg4WnVSWFpzVCBuaEFRRGdHUC90QWtDSEtHUldxOG9TUUxnUFhCSnMxSE1LeU9YdUFES3B3b3I4Z21MWWVaVmZNQTlWMlhhQ2lxN1l6SzR2Y3puQ1A3IC93RFFmc0hVS3lveGtVdWVXTHE4ZUFaeExKRTdqdWYzYlNuR3V6Z1czbnBqZDRSV1pHZGFCZEd5dEdpZ2tqUXJRcmIzV1VOa2MvTkwgNDZNSS9yMDJMaFNZR2FLeHRHN0FTMGcyRWprZ0tmRG1vbG9NVmlsRnQvMmdQTS9vNmRBckNmZ3lJd3Nwajk0ODVqdi9BQi8yUElPdyBMRWZNcmhJdnRWaTZsV1dLQTB0TzBXTFgxMXVPbStIdjhxSUI0R1BNSnpJbm9VdkZqdFRHcnA4SlB3M1I4ZVJyd2IzczV6NzN3ZnZaIEJRR2NqbkhoalJ3THUrRFkxekpxR1NMY3dBc0VRT214WmUvQjBDV1ljRERnNE9BYjhnSG9FTVlzcTZIVURNYmRxdWR2djREWUFLQ2YgMytTWDh1bDR0Tm5seERyRmtmTFdNYWtJalFZYWJmOEFtVzBCVTBORE1NRU53cmVZWVQrSE5XM3p3a1BiT0x2SXdHN1dpYjMvQUg4KyBBcUxZTmdaSUd5WE1ZdVhSR1M3TU00b0E1VU10dXlhcGNzaHl0Y3JXTzQwSU1Lb3R5cTFiVzV0WUVyVnQvaUhjQ2FzR2pZcEE2ZHc4IE5OdFRPMDhWVWs2UzdDeW5ZYXZLNEc0THcyYzlwelhtajVoQU80V1JNRDJSWDh5Y3BPQ0dEN1p2TzFyTHo5Mk5nd1A3L3Y4QWlBNjcgSTRleENpblh3SE5yZkhPbnpMUnRoSC9pUTVFWXJtNWJ1dVFDeUw2MkhEbUpnY2VodFhEL0FKeUdzdk5YdEFzWURDSkpzR0EzOC95RCBmK2lTeUVldjZyUjg1akY4YlZRSUVZV0lIb2NkZWhOQjRTQjJjZ1k1SkRaUDloc0dNR1lzakZjb1RKN0lFZGdlUGdOZytnOWJ0UkdZIGxVRVlmR2l5N3lTVW52a2JFbU00OVY3Q3lQbFNsc1BoMDh0dUMyaG1GdFB3Uis0RmxnMlRGbUtGR1pHQmhFazMrckIvUVAzNkNXSmcgS0NOalVzU3hMVWsyMEZ5VllsTHlON2w1Ulh3c1dPUlpSb1ZqQXQyY282T3I3VDRaNFVRWlluODBiQUMyQnlUUXBuTWp3cjFlMlp5bCBjamgybHJTdCszb2V3bkN0OVBjT1ZiUzlYTVd0K0JzaGVaTmg3eEJuMmdCZUlheXN2Z3NtTmVEWnNJOGMrZmdISDZpKy9Ob2dsMS9sIFBoNVhTTHNKVmxXbzBhdzJoWVRKWjlPV200aTlQYlJGWk9OMUF0Mm9ZaGoxdFY3d1hTN3cxbmxPMk02T2twSnZmK1BudnZ3REIrUmwgNmFoVU9lUVNReHJKYlh4U3liUmlrRlhPTUtZWjhzYTR3SjY0Q0ZqclpneHhCUDJOdXZBOVhNeEdXVmY2TWM0VFYzZDBBQVA3K2VBZCBSeEJzUjg1OHVDdm1pNWtDeUtNbURZa2ZPdFNwNmNNVktlWVhJQXR1TEoySGhtRS9oN1UycDdicy9KbnhYc3o5N3V5ajkvZndIc0F3IFB2eXc4akdLYVVwcG5MckpzeUdLV09TTVVFTGJrTFpaYzBBRng4SFBJWXRZeEkwbUozWW84VmFjRGJrU1Eza2lHM3hBc1dlYyszaGEgNUQxT3IxOXlzeXNvQ2toeHJ6c0YyQnkyQjhvSFVCWVUwWEtySUFtclo4UGNGYnVESW5qdzZQdUd4b1l4NTVSeGc0YkNlZjhBQUFOLyAyRHBuVm04cjZibDJvaG5tcTJuWm9HeHJDSEIybTZGNllMRnJ3R0ovcVF0aDZUK3lBd053ZlQrTTJnVTROd20wZmZmOEY4QnlBL2owIEJ0Q0crTnRmMzltdVNxTnJFZXEyMVlZOFpNRVMxb29lTFhLTERqNjNNR0U5OFcwOWsvaUhUNjB0U0h3WkR3R0xQTnZaNDREL0FOTmcgNllWVHZtWWhzQTVJVjdJU1NWbDZiMXRoWUs5cE5mRW9Zc3AvRkE1Y2ZwTU95TW9leUtmVDFWOHI5U2FnN056eFhHVy8rRTlQRHh5QiBBZnQvb1RyS3lUU05NaGwzVUVpeHlmVU5GQnEwa2htaGtaUzBFS1JwN1F0aUlXV3V1MERxNHBZMGsweWc3R29PNDBlUXlqMnpoVHZKIHhobjhEQnZCczhYMVh0czRYOGd3dUhzbXlFOXltUlphL3dEa0NJeXhWZGhpb1lmOFZPSHpDN2hEQnZuOVNreWZGeWZPSGJ6aitBQUEgQUIvRkJQNFJwZ0hZZ1pURDFvdVg4YlBaUjY0eFA0WUQxNnR4VDZSYUJTR3Y0NHVDZkRtRUZ1MUZLOFBuQnhneER3V2Q4U1RaczRBQSBmb2ZmdC94YWpBbnVHVXRzb3NETWsxam1nU1ZaT0RoYWxrTzh6R202blBSUTYreVUvRHVEWjhQZzFMNXg4SjFuVGJRVTJQWlRaeCtRIGY5djcvd0JZdm1LdmNtRE9nVDZUTmg5aENlMVluekRETXNZOFdBbEEvQTI5RGg2a0lZK1o4L1lZVmIvdFl5b09iZjJEWU1jUDMvb0EgTUluSmQzdkNzemVORWVQOWI1LzBINDZ6Z0JKUVlFZVR4aG11MXVVVnV1WHFxRitlVzZXNnVEc2pOS0o1NjdyK3NpMUJsbmZFVDN3QyByc00xWGZCSXQ4TUw4eGJtT0RJWUh6SU1EZm1vUHdhNUdqbkp3MkVkam43Qno0QXY5RzE4RHlsUVprMnVkU1ZTdjFZNmgxVUpiRm9NIG1UcVFkdzdrZXRnQzVRdUhybmF1NEZ0Zk1JNTRnQk9lMzVRUmtZNDdPd1I0NENmQWZRZWZkSjliZUZlNlkveGJCdFIydUNMVzYySlggakszVzlPT0RSVXJZcnRESlgrSzNUOWNNaWZUemhjVkQ0dHFQaHVkb3RDTXo3MmI0T2ZRV0EvNEJCUDhBVnRLL1c4M1dSWWlTdVdyRCBrMmR6QmtyMXc3VnA5c1BwUm9FMWZFTXNHOExiSmFqNVlNejhnTnFQN0xPa3Q4ZWlZUGV6ZXdvUElFRitQZ0g0L25sYloxTUl0STZoIFQzdmlJT2ZBcFR1Wi9yYnhLQTJ4WVUrTmR6VEJra3pta2w3Z3E1YmVuTmY4UWNoczdYTzM3OTRNOWJXM1RxUkR0SE1ESzZmeEt3aHAgaVZNazBqSE1PRGhXWHhYelQwVWxtRTlrTWZSRnRndFE0QXIvQUFPTGF6L1F4TTVhSnovcndIZnovUldQc1JMZ0MwT2VrR0ZMTitHUyBFeDBuSlgxU1pLVitlY2tzQmJNR0puSkI4enRLUXhuWS93Qkw0K3dSSkNjK1g5Ly9BSDgvaTJ0UkZUeklwUlB1UU1reVFLYnFRUUxZIHRDalQxb082SEtpNmo2dlZ3L01BNWhiTUo3QWh0U0hjRStqNWlNTTltWm1CbS9CNytnZ0g0Qno3Z05TOHN3d1dNeWg5aER4bXFBNEUgaEsrdHNrZ3NZbHRGVGkzMkhYNGN3SGNOblgyUTVaWTlTN2tZVkEwV2dNV2NQT0hBR3djQlBnT2ZIOWFqQ0lYS2pJZVdkenRsTWFvViAzWmxyUHl0VVBObWtNdVVoN051M2pUemxlWkl5OEw0cng4L2tkZGhpUmxocVBtRkExa0JFbDNwL1ZGcDdxOFBlVmdyME8rSXFuUTVUIGNIQkRaRnZTWE5UMlRZV0FDODdZaXZsb2pCbXg5a3pnR29nSGQxQmZ2MXVBdmo1aWtoM05hQ3VoMG1uZ2RhUzNFMGozOVdOci9NbFIgUzEzSzdnd1dSRFpOR2FlaC9NVmUwQ2xCc2dtVFYwT3pNRWMzc2xIbndGdTdBL0FNTVg2dExZcGxIeDBXN01mVU5TYXM2bjVLbXJ3MSB0SHB4RHEreG5lbTR1NFdRSDVndHdxdjJPQlY0RUhnTVdTajR6TFBOdjM4L3NBQStBdzM4OHJQTG1HV0RPTWdwa2t4WmVUR3NLMkFPIGxaR1lXU3h0UVM5VXJrSHNCd01KK29TMUZ0aDdxVDNDaDFYL0FGa0tMWDVzd2RqaUNBUDBHL1B4NCtmNnpQemdVOFFzdUVYL0FMaWsgR1dQUC9MMlUyUE9RN1FmTEFoWHR6emZoaXVPT01iVUkzSnMzdVU1SzBNY0NiT1ZDdWswb3dhZmo5TTIvVlRJMm5uRW1iaVNLT2ZHQyBXSHFZbzI3Rk1ZUG1VOG4ycGpYNGV4cTB3VW1wYko0WElyc3d3SFZ4dmZENEIvZmdBRFlPbm1sbkE1NTR0ODhCWkt1ZkxMc2xsaUw5IGtWNlErWUtjcGNXVlpGSDhETUdGdGJUMlNuU0RBQmVPNys2UG1ub253bjd3QVBuejZDZ2dQWStrempZbHRySU5BdWRlamJneGNKTHUgOFdwVzdSRWNIeUxMYUt2RHNCaVlZaHNqSml5UEY4V0JkTUZrcC9nZG9WblpqeHZmOWZmUWFpQWNCQU02SEhkYlcxR1VuZWR5TzFrVyBSS21WdWtCMlRKcjlocmUwTlgxWlNxdlEyQVBNY0xncXVZQXBQWVdEZkZzbVVRbnhtL2U2dWVQMDd1bmtBQWZ3a200clpzcVNJSWNjIDVGRFNia1pCalJtc1pidHZSb0ZNRHcrWGJJL2JnTzUwbURyR3ZNa3NFOVhLaS9PM3RjcGZPWTdsK1cxRHBjNEdwK1lCZ1ExSmIyRi8gWVRCaDJWK1NBU2tzOFZEajVqSk1wK0dISUJ6aUg4RHR0Wml6ZkRRVHN6Q3JyUk9lM3UvVkVmUGdOL1dJdGZNTnBYQmNpZ1haOHVRQyBjaU1GYnBJZkgrSUpwTEljWFRlbjNCUTYySFQzeGZobkovTFVmYzlyYUxNZVhoSjJNSFVYZDNueC9ZQVBYeVk4VWZaWkJKRnJtbU5zIHlXMWtyZGdyZTRLSDAzNjBiSWxYSnFFS1dNbjE5RDJpWk1zaFBUb0w1WVB6cGpNczJnaDBiN25BZFhlQWZqL2FMZ0w5MXZBTW1aUFkgS3JQRk9mcmNDOG0zWjRmSDJ5SFY5amN4Zkh4eE1jd21YQ0hJSWM1Q3NDQnpEYkNndTMxbXEwamZBWjkrUHZ6OEEyQkI2Rkp1MHNYVCBCbloyTHR0NFdGWWdERnNxaldSNzdlSXd0ZDFpYkg3Yy93RHdqeXErMWI3eFdValJ4ai81ay9iUmdjeThIeGNzVE96YzFQV3dNQkRyIGQzanc3NEg4d2ZQaVdocTA0ZmNOVjg4ZkE2K3lJOEJ3bjF5NE15TXIvalA2VGFQNGk5c0g3M3QzbzhJU0ZOU3NDdDU2a3lWdlp6UWUgQ1dGcC9XekZvVWpjRVVwMmJjdHdwL1RHWVE1bmVDSEE0ZjhBQWNGbXpPTDhtUjBsSkNmcjkrdjFCUVFDQ3NjdDBlSytwYkJjRFhZYiBwOUl5YXVkNi9jTTdoRUlvQnhpeGJVd21YQnlUWng1aHFVYmd0cTFROVFMTFErTFBPRWtJNytmUC9RZUE5V1BSNjNiYXZUMldVaVpOIGp5MWFHZ2lLUC80bGRaRjIwUW5PZGZSSXJlT1Q1dFZpTHNmY0xUVmJLUUh4ck1XY0xWeFZab3dWMjJNRmdCZnFqNSsvODh3WUFJdHggbzltTnBab2xDVnRDZkdLT1BlVnU2NUp0dTBncmp1WGRQQklyTHVQcDB4bW4yNDJqVWs1NFJpVnBVVWloNDNXVzdObGJvZUFpTGRmTSB5cE10OGFEMlNOTVR3NlR5Z2xXOGdUTUZ1VmhIdmg0R0llb1JrY0lkWGh3YytqMzI0dHI3eUs2Tlpoem16czhiQWVQMUcvZGRsTjVnICt3YWZzNW96WHkwU1NpQjdJc0ZrSWRmaWNDbFM2Y0s1YVp2ektmRHpFOWt4NE8rTjU1SGhMSlBuaXk4dkd5SklQZnovQVBZQUhSVmUgQy9ETXZsQXk4ck9xVU8wSVkwVFI4TVBiRXU3R2hEc0lXQlpIQVBka09HdHNpL0R0VFMwUGdUa096TGZ2aEQyelpLdTRPZkFQejhmUCAvUWNWdUxTN1FWekRzcnErY2s1TkkyRWFMSTh3YkhzMURLSWJGRnJreXY4QWJkRFpFSVBZQWVqenc4OU9yZmE2SEY0ZlNnbUx5ZndRIGQvMy9BT2dsSVFWWEVaUEc2YmdhZmZraUo5czd5WUpsdDBjVXdYTXZlYTQ5eFJiYVNWTUhFTWlOam11UDFHSlc0UEp3enlXMzd3dEQgdGE3RThZeUV1dm55dkE2UXQ2YjdQcUFiU2FRWXIwYllCYmdZRnNLV3pnNDh3bUIzQ24wK1pCZ0QxSkhtTEl4OEYyWXpiSUU0UHNCLyB3SFFkY09vU3IxZXA4NXlNdFZ0R01uSlVsNnR5V205b3B6ZEJiWkZLc2cvWjA5a1R3Ni8yNG9jZ3BLcTJUc3dXMFZtc25FZzJFNThBIFFmdng5KzZOeWxtU09jTFpubmdRTzcxNFM0L1RMVXZ4UGlnVjlYRmgwK1krUXc4d1BQTVFWSndRemtORzRHTEdJMkNUYUpzNkFYMzUgQlA3Qno3cVhzd1dyL1NXTmNUMUtHNVoxUzFrajJjcTRSS3JUYWxZWEtMM1FtQi9ocC96dzRPZlI3NERUMW5EZEhrWUR3ZHQ4L1ZDUCBQd0h3QXhLem1LT3BsYVN5QkR6bEpjZTQ3RGpITHRvYy9QUDRTejl1YXRDRVNzMm1GMWtRVnhIK3h5NThnZjZHNHRDSGRWdGxWbUJzIFkvTjB5NE1qdmxaWnRuZ2FwYlIxeW9OckMyVExpUkJCMlBQRjZlU1Vxc3lXUk9KQzVCMmVlZ2VyS0tFV2t1eTRHY2pLblIvWDZlczYgOGtKMXJOdHVSeGpPTTA4Ujg0bEZ5Q2dWbG0xSERCcTZsUEp3MlkvSkRaK1FHYm5ITm41V0dTanpsR0FKbHdYdTJoQlJXaEx4U0JZUCBxd21acWFuWjBtcFU3WTlXRlJUU3J0QTRxQ3RDOTNtZ0t2NTVOZUFkWm1ZOGtnaytTWXRMeWZ6L0FNTjFaTWVMVzRGQnVFOURjSXlTIEdmTElFdEdkcFhwZXdueHlwR0lCcEl4YUNlNFRMVmZBNDhQcWFRNi9yUUhaRlpFeGY1TUJoSGFrM2hCZmtEZndQZ0VISTliM1FVUzIgcUs3bUxBV3lpZVJSM2diVzZmYkJqczNjY3FVdGtBOHhrdFN0dzlvVEFkWnVFR0NIUmtXcnlkR3N3UDhBZlFIbndIQVFIUmZNeTBNeSB2dUI2TGszWWs1VzlsdFBGblRCOHVIRnNaSWxLejR3aHc2ZmNFTmtjSzNWWjQrQkJNREdiK0hObVpnZW5qWkVmZnorUElEL3NmaU83IEZzSzZPU2VMQm1YOXFFWStmMkY5cVR4S0VCQTZtckdsR09Zektyc2lHWVQ0ZmVtdjlQRUhBbmIvQUxWbi9tay9pSS9RYUNBUWU3dlIgWEUyWkdCZUVxWlhkOE00NDd2U2dZc08yL3dDV3o1SHA5QVF5QlRsdEkzY0VyTDFPM2NjbXg3K3p0cmdBOG0ra200UTYzYlk1aTJxKyB6amRxU2lTa0p6N0lUaDdETUZ2bFpPUUY4WHpESUlaSmdlcnc2clphL1BwMXhXUmhSb0o3RnpaMjMvWU9mSDkvQWRXVnpHQjh5V0NrIHpTNVNlbThsWHpzazJ3WW8zUnpWK3ppNnZiQ2liK05vZGtha0pnZGV3Z2diQXVuNWd4bVF4ZkpnZmhQMy9GZlA3QUE2WDJaVDdvNU8gaEsyaGFlRW1Vamtrb2hnQzFWdkVNRkpURFhKNHdRWlllTmtRNFpEWkFLZXBJNmVUclBUbStERVpIU2NVazRBeFB2eDgvaUF4NkdvNiBYQURENjlQY3FmNjN6VUt5Q285cXprOVRtRkxhU0dpVW4vTU1jYlEwUGVJUGI4OTh5cy9vYk1UQjRmUjJEL0x6K3dhR0VUcVZZM2RjIDNLdERpLzRwWTd1eDdycWpWYzJ0SkhWZzJMaXZoV2k1dXZPN0JMNHZpZ1BEWGZGRlllR0QzQlBROHBxdlZKclIyc2hoRG1MRERyME0gcUI3Y2NiY0lkd3VDM3FFWkdBT3F3TFFVcDNCbmtvcnJPSENmTm45LzU4L0grclVPZ2VrekxyZjBCdHUxYnM0S3lEYXlYNnJ1Q3dWTyBIOG9UTFY2Myt5V1F5WFduOHdPTnEvQWFqQ05VQ3NMV1ZsNDFEK2NxTHovYUlCNENvbXBSc3V3eURvZWh5bWN0Z1UzVEc3ZklyM1RxIG9KQWVyeGJaWE1xR1BpVEhBeE1jQ0UxNHhYN01WWmpOV1lzV3piNEU1dGg5K3h3eDJEcmtyOWdxOERYOWV2Z3NiVzl3VzBITnRrZEogR09GZXpHaW14TVVYM1FNTWxEM0Foc2poVmJVKzQ4NE1WbWpkME9jdkFUR2srQW9QOWdBQUQ2NUE5eHltVENaM1JJVnh5UEVzTWpFbSB4OFJxcEZlR3Y3YUpRTGJ5Z2hNSTB6WjNrd3FxSUFYRnJ5c2dteFFIZzVjSFljNHBxLzhBZ3VWaEliSUh1N09RS3lEd3lhKzc3RGZDIDlxQ2xPQytIcCtaTWhtQ0syMVFMUVF6aGhHSnZtTHp3WjE5clVmdGdQOW9zTUQ3ODgyQjBmVHpSWHVYUVV5TnBqYlVtdHhLL1FJR2ogNnloT1JSM3ZpcGNQaFdvK1BrTkRJZkEzQ3BVZGJacWdGcTdNdFBCdTdLdU9Qd0IvWVA4QXYxSjVoeGJNeDFWU3JrQzcxNm0yUXliTyBZcXRYWG9jcXhuY0M1QjJDeUxJaGg2ckRweUhWZGwwZnlwUHJQYTZ2OEc3QkVrR2U4K2ZRZC93NnNJRHFxdDc0d21WenBWdjUyUTdRIEpSbE9PbnJsc1ZPeUlRQ1hVb3RrNUpNMU9Wdk0zRHR5aHNDamNSZ21qSzVSWlp2eGM3MVhqc0FBKy9jKzZHTUNhUmpKZ0lRaDNGa2Uga01DMEJDVXJ2OG1ueVhFbjJObFFGbmFNNEErMnJQNTRVK1BqeFhuNTZyU1ByTXhkT1pXTkxBV3JUTlZZQStFWVhqT3Y4Z2tQaWFLcyBKRHRwd1gzeUhEVzdnWkNIRlh4ZlVwMVZrMWxuYUxNR0ErRWhMVTRDZkFMNS93QUJnVlVlREgxVXdaTlFWZmJTM2JjcEQwOFZsYkY1IFRFK25FK1VMWGdMVE1Ic2lmTXhEc2hFT2NQRDFMNnk4dmd0WkoycDRYSEUrZ2dENkNBeFh3SEcyRU5TZVdHemxkSXlYOWtWeHZjRncgWTdySDZoSzNmRTNsRzhXREREdUMyaHcxOVBCdHRZUG04YlpjbTJFa2U3RGZPY2ZBQU5nQUFNVEJRZkxSem50MU14ZE5WQTJDQnM2UCA5cU01N3VoTERRcHlzRkJmcXhQdE95TUVUQVJnMjFmcDVlR041ZU1WY1dzb3h4Mk5ZNG56ekJnd0g4TWNHVExLcXVIaGZCYXlkR2lPIE5teGF5U1JYZEVERW53YnJpNjNNcDhRd2R6UVZmYjhpK1NXNDVITmMzMUczTFRYYXJSK3Q1clMxTGRuU2oyb2k0eUEzT3Bkc1QyZ1cgV1JCaGdlWTRldDFYTVlJYzZ0Q05hV3F5UFBGME5aeHF1cnZ5cHY0RHo1L0hmNUdsSGlQYldXbjErOTB5TnM3U05SdHgwNWJCNUlSNiA5TWFnZFQ2UnA5VFUrd09Cb2I1TUQvRWVKK24rbG5qRGczdlVCTEVJRHc5MEcrejREa0RCZy9qYXV5V0lwVEQxZktTZXlXUUJNWHFwIHA5UzBiYURZK0s2YnFhS05GcUw2RzRHZFBiNGhMNmVqMW9RbjNndVdZVHRCOGVyTVJ3bm5PMFd3WUFOZzJDMFdvTjRSN1V0MmRGcXYgUjJ6YVdGZGNIUkE5aEJsaTQyOXlpZWkyYXVManBjekMwaytuVTNDZXB2NmtyWVBLMjBpMGg2T25Mc0Nua0wyeFByMy9BQytrOUhUUCBHR1k3YnJ1dnAyaEd6WUluMHlUR1lGaWxVWEVVaVN3eVdWbFJ5cU1LU1V4SzdRTmpjS3dTaXZmSDVBL3krb0kzK2Y0OGZuSVVvc2dXIHJnVk80QU5HVnZKMHUxeVNiVk93REZTcDVhWll0WHFaNjBKYWUrTGN3T1oyOHhPb2R3Z1Z3dC9hT1RjNDJSMlI4RDZDQUE4QjJCQmQga3gwc1FXREczZGxXb2s1V295alJ0STFmVXVuVXhEUXdObmxoZG9NdGZwNjNNVzVpZ256RWQ4SVdYVHJJTVptaStDWXlxMGtKYVBnUCBQOW90L3dDbU8yUGtCODBlRGF2ZktmVXFOdDUyTlJMUXliVVgyeHZsSzF4aTR2c24wbGpNTVdUYUFZSFE5b3Zid25zNHRXcHA1eDN0IEoyUUN2NG5rSEg5VDhhVDBBVzVwQ2lLempiS1N5dUN4WmRjY25wcXlLZ2ExeG50cUkwMWc5RHJ0VzVqSGNNMmU0YmdmQXdKcE5sWnggcnVzdk5JMmlsQXNjQUdLRFlIcDlSNDhsWThsV01oNDlTQ0pacEhFUnpLMXViYXh6U1hIUGE0dXpMVzJRRWEyeDBLMzhvWkVtU1JBaiBLc244VTZBQUVuQTN0Wkd1QmxiZTNIbFFFTlRFOWNyeHZxL05yYWs0UUdZN2N2U2JDamw0aDRvdlcxUTRkZVpHVHRZMzBtdnNseGNQIDFEOGIzTW9VSmpBUnNKcUh0VFlQUGdPUWJETzFlUElFN0hTUmdlalF1ZFB2ZTdGUEd6dE1iUmNiaWhwcGJmakErWndNT1lERDRnU3QgU0JDQ1kraGxNQlp3MkU0Ty9BRDRBQndIbndCdC93QXZQT0orVnFXYXJzcE4zRHJZbXdFK1pVKzBWZTVhajZIS1BvOHhNaHdvYWZ6eiBZU0NpYzV5VFYyampQQ1RidDRBQWZBSHovc0FEMXMrNzV6bVpjYXJXMUdKWjlOR2xQQkVNQUdDWll6alliUFNUNFF3NDFaTUl6WDZlIHFJZG4xcWpHR1lXMDNJdEREbUZwRzBjKy9Zb0o4K3djKzZwTkUwY1dwYlRxZzFFdjFHb2lrMU0wc2lRVHZ0WlNscFhmWmdXbDlPUEMgR1A3STF5TnFYVmthclNqVlRUYlVUeHh2dExRT2xBN2xhajl0cUFlU1FUd0s2N0hDSHFFVXFUdko3VW9kSjFMV2pzMjJGb25kdE9vZCBnUXowUzJNQmJoM2dtV3BoWk13Z0hlTVdFQ0RoNG96NFRyUEVHRmRqWDVlcU1BQTVCaGlBcmFFdWZWSFRGZjIvalUxTXFTSEYxQXFiIGFnTnhJY3FSRTF5aHhoYjBTdDR4TXF3UE1ZRnRxZ3VGYU5BaG4zUzBNZWM0Y0pPSU9JRERrQ0FnWW43Yk9DZXAyVytHTUxMbzFTTDYgbG9kbzNKSXM1Ymo2Y0E5UzJNd3ByN003d09DM1pFT1ovcVdQZ1FYd296Sy9HUmxWNmgreVp4QmZ2QW44ZC82U2RUNnNNekt2aXQwTiBTUTdJbVZmYWhHSkd5YXJWMkZ3VjdsYkFJR0dQRDJRdHNpRXRwNWp0TGFBSC9hN1JVQlBoTHNrK0E5ei9BRDQrZnhhc0VqNmFXUFdGIE5aTExNOGdqU002ZkNOc2NZU3dlYklyelRrTGQ4cVBtRjR2cWM5STRpVDZaSUZZeWZVZ3lLZSthc1lzTXUyazd1UmVYWEhYMVYwblogZFZwOU52bW51U2tpNGQ2aVhDd3RWQTlzN3h0RlRxNHRQY0hDWnZGSnA2K1llRHcrZWNjQm5LT1RiNEVwTDJQNytmQWNCMy9va09EeiBJWkxXNVR2V01rYTVOU0FrVi9VcnNyc0tFTHEvZmtOOElWQmRtRmtJZkgyVGx2d0dwUFdlTFBnd1ppa3UzbjhmK3dZZFdFTU5GOHRHIFdldW11VU1KU2NDcTdqcWRvbUI1RkRiV0JzTFZBQk1MK0VReERUMlQrUmZIQzJnZkJoZ3RYUmxuZS84QWZ3QUFncitHQi9HcU5zUGsgaHRPTWpSWU13MmV1NFBKZDdZdURPWUZNeHNKWnhWN1VJVEhDWlpDMjRENWp4V2xQN0d5Y0c3TjdtajhJTjQvWC93Q3Z6NzcwVk5JQyBVelRUOE53K0VpeU5XYnlSNG10d0JjUmtheGF5ZmlqSUI2bWZmSmlDY2ZDUlJ3eHhvUlo5dUxHNzVERVYyMlpqdUFQelE1NVNTSzlxIFVQbXA1S3ZTRmJyWm1XWWFISzQ0b0dHUURzajV2Q0dQVDBmVkxZQ0hPbWNsRnRKVFkzWjJTUWdCQndRZC93RFBnT05Zc0JzZ1d3aG4ga093dGhVZ01tcHpMdG5CbURzaktweDhhTVNDZkRSTGd1eVp3OVdBNDc0eU0zZVFWd1hoS1NrMnAyaTU5NERZRUV3WkRoeXhsOCs3cSA0RUlodmhodGlXUTREWkRFSGlnZmxGR1JmVDNDWk1vZDhZTjhiYXZnUWEzR0RPTDl6QVp0SmRqcURnZlA3QjREcGJ1REFyNU13UGFFIHJPN01Makl5TzRkUE1WZkxEdml2UTJvdXBYejVnZGIrRmU5b1BudVFmRGllTS9vWkdxdDJkamVMOEIvWG4yd1B5V0N2RTBZTjVvVVEgMXlKMncyU0JmNmY1SFBGOU1VU0JrbWtnZkE2bFkzS0hPa1VVeXRRWGlXMUlQMjRlRzZtRWNoVDZTWVc2V01xcTNuUmNrYmNZZUhZUyArN3A0dVZNbGNEWUlhMkdsekdSZ1pLNVVrOUR0VEFZTUtGS3pxQUgrTGpnREhmdkFBRi9va3J1UStJY3hxYmFNU1NWQlpvMXRZYVh5IEZ1T2tKNHRvckk5WExKOTgvaDdaREMrbjNFZXRGRGVHU3pLemFiazR5Y3E0SUVPSHdGdWdjYWk3UTFGMFZaWS9VUVp4ZGdPNVZLcXQgRmJ1L2NHWm5yNlI4VzBXd0NMTU1DM1pDM1pFTzRDRXpmdEg5U3pqRm1FMWZUbThveU9iU1RmQWU3dFJmZmdIUGxqdmkyQlZ4dVZBWiBMSXNLeHFyQ0wya2UxRU92MGx3S0ZOUW0xaDJDNE5QZW9TazY0VzNCa09IcS9wYWRXNnozNDROWm5OallQei9BVUh3SFA0MlpWa2FQIGNjdXlJTEE1VEd6ZUxlY2h4WDdzM3dzTEhHd2w5bG9qOXZFZ0xxZTFKTDdLK1RnMlhIaXVUQ3BEbFhobkFDbTV0UDNaRHVsSjVEY0EgZUd3THkyZXRGM3JrV3lMOE90NmdwTzFFK3dZY0cyN1FiVlY4WmlmUEZtb0FmTnVjSDhFRUJicCtva0pDNkZic3l1elpDWi9pbnBJRSBEYWtuNURYVFBIbHNDK01MUXI5cjBPR2gxdStCeUZrbzgvVmhVdjFtM3haU3Mza0dFU2VjVzcvdjVCMkUrbjYvc1RhcXlUNVR2dVRzIEJtSkJaZnF4YmtXd3lDNVMrNVNndy9DbjN4OERHQ0V4VnRvaFE5amJuNzFmdWFQVndUOS9RYmRBSC9BSDU2b2lpR0ZIc2g2cGEzUUwgYXE5Vmt4SEJQRHNGbTg4ZkliNFVXeDh5eUlhMnlVTzRjNEF1RGJPM041cS9uVHozUnE1SVI5Z2ZnSHZpL2RPajNHS3MzOVJFU1FqdiBpbDJpUW9pazdmVFROcVRFNForNXN1QjdFcFl5aXB4akhJMkVpZTBkeTRuemYvWTlkbG1OR29BV24yMWVhUmhXNERUU1MwOFdFSGRxIGxzbDNaR2dDMks3NWFqQXljRFczeDhwK1ljZkxCK0RUNk16Y0NKa2dic2s4SFlEOVJIL1B2K3dHdHpyZFhuM0RPeEF5NkMxUTZiclUgSk1RN2NyQW1NalRiU25GUElhZ1lNR2JVdUZPcjhScVpBNEtiVVlXWHBuNXl0ZHIvQUd4UDhDUFlQNkRpZWZwODdsMXZuWElCVzRzTyB5Rld0TENTWGZua3doOE5vdG9zQkZ6RjlEWkpsSm1IQmZXd2U0QVdwazd2MWYzZlJrYzNhS1NiKy9JUFB0LzMrdE5rNmpLN3phVE1WIHkrVlhlckpxSGRtMkpJZHIrWDNmZEUxc29lVXR1RnBwNGRieG1WK0grZVFRM2Y2Ti9vYWN0R3JxdTd1b0lBL3NDRDU4cEFqeUtDSHcgVDNDTk4xSk1zS1hjdE1Yam81cGkxRjFOODlSSkhVT00wRnlZWVROaDdNZVpZYWF5YzdVWjlwREd6bHhaQ0VudHA2MGFIcjRYVTFieCBKOWNTb2dlc2F4c2xodFFtcjZnK2VZZHRrTXV4dzhHQmJCZ1Q1NXJtREdkOEtWQ2pZcFdvZkZJQXZ6OWkvWUFEMkI3am1EMGRYZkdvIFhQSlZLSGJVS3JwWStzTElqaVhCTlEyRlg0ZXdKNWloNGZEL0FMejNRMk5rdDhZVUsyWnNaczNzYkJ6NCtmUDcvd0JiYkdTRzNUb2MgeWhsQnRGS2FrNjBQVk1BZndJeEJVN0hsSjB5OTdzMCs0eXFHdnZDcklKTDFZVDdlaDFVdFlldW1TbnVDOVZXbWZVK253WHA5SHI1QiA2Y08wcklzaktpVzFMb0sxQWxrYWIzYTlWNWdxVE9lQlZFZXpEYlF1azJDa21TeU5tbUovd0lCR0Fxd25tek1IM0ZZQmhMczRQaWZmIGtIZjhUNzhmU1M4RFlScEpuTWlCQkpJRmdYUzZlOEdSVlFSeFNOdkhDTkkxM2FOdW9qQTZtQ1RLNW1EbmFjbGpMRkVrZ2tueE1jYlAgRWlicGZhZW1aUmhYQzk1Nk5zeUhNZDlONTRBMndxM3BuVU9xMlRMWHlWa0VFZVpZeFNKS2N0dkRoekJpV1kyZEhQVi9aZThzeXpUWSB2MjNzSUVPY2YyRS96NUJQOVZ2c1N1NUhORldlR3JGa2hxNTRiRXZBQzdENmN2bG9URjREcHptVmVZY0xodXhQUXlBY0h1SHdabmJOIG91VHpuQ2F1T1ZFZkFMNkR2NS9vcVN4YVcrRDNYaVdxaHRyRW9IUUxaVjZmNCtrSjUrMExOaW42M1Q0YjVTWmlxdzlnT0NydUQ1VmIgSVR4RjJnOHMyeUF6ZXdmcUE4QnNFdzJabGZybHNLdGNyZzBsV0ZxdzZUTEo5Ym9XbmRlZklyUnFFVnp5R3c0b2ZlQ1phakI4NUQ0bCBhbUdLenRlNWcrYkcwZEIyQUFmMkJCMkFrVm9HZkNYSkZmVXVxYm01ajYyNFJkTFY3d0FOSDJYWE5BNUcrb2RwWklramR0dXhIMnhuIENLS01ZcHpqL0haN2o3aVBpejBwR2xRNWNZREI1cFZsZzFXcXpEVFFNbVZqUTEzVXd3SjZDV0JNNWNSa0x1Ym42bVo0bTA0L295MXUgSXV6MHIxeVpCcGFQVkpQcmR3VWlNUUF5UWwwRm5SUG4wWFRlb0xPbW41bzdaemlJY2JLbVlWKzFhZFdiWXNaYktJamVmaVpJQnQ5VCBtRW1aZGVFUmdhVUp5TWl0MUQwUWxBUU4rQWNoUmZXV1pEVTZablN6cWtRbERydHNxY1RIc2hzS3hHT1c0dGhhcTZGaStCWm94cDRHIHBtMGhaalJZN25rOFdhMnpWMFRWbXJJdm14TVdTbjJnN3VCSkRyN1VVRXM5a0FxU1FQc2hKWDZ5RDF6WE9zVm5xVlBJUTlRdHdXb3kgT0ZnR0xHQTNBMjRiWXN0QlNzOGRrMWU5cXdHTy93Q0o4QUFmK2trdHJkbU5Bdk9zcW9IWmJEMWZ3Qmh0aVllSFhIWkN1cmlSYXVoayBFTmttWXNpRzRNbnRxQWJhUGNPTWl4YU1qZDBmdkI5QlArM1BUL1Z6WmhBNWQzWWNmWEpna3RuczUyckVPeGtuaXdUQXRvTFJIS0d2IHc2SGZGdHdxcHdRemxTa0xhd1R5YnpWL0pubmhLU2JCL1g4YmR4K2cxRlNka3JjbUJlSFlEVjVJbGt3S2ZXM2RQbWFhWkM4SHRCeWkgTkF1WTRHTlFoaXQyUmtYM3dHMmorVkorNTdXTEtBM2J3YjhnL3FBKy9IN2o1VmxTSkZoaGVKb2k0M01yc01VOW0zSXRER1R2cXoybiBvWkVhQXNKTjRUT2pwSWNaWVBJWEUrckdNOGVlRjhYUkk0SFQ0bzZvMU04bDE3Y2xOMlF0cmNwVnNoVHErd2pGYmlkK3RDbXlsdFE2IC9NVEh2amI0UGgzRmdQUTNqM3JQYS95cHNtSnkzZVFBT0ErM1VDdDBIWkZnMWZiV1ZBaGpjNVNtL0wxVVcxV3hCaERxOGxlcmxYY0wgQVc0ZThXUnVBZEh0c2hTMEdZOGt4ZHk3bitvUkhBQUQ0RDkvWUFDbGZGdXA4MTREdWRTMlJXK29Td2M0YXZNTXlrNm5zSmxGeWtkRCBQVU44eFB2aW55N2dub2Z6eUNHOFlsQmxvVmVqUE5xZmRuZy80QUFmNTkxMk9sczM1VUZnT0dVVXlYWnEwcW5qYlpVN1ZwcXlMWWZKIFVWZVYybGtUM0FQOHhrd3E2SDhCUDc0USs3NVFvVDkzWjNxNTRBVkVmMkRuejkxWlNmSEgwOVJlcVI2a1RzamdCUFlFeU82NmZZdVUgZWRubGNlVnM4TE1xbDVZYzRXaURpWEtSNTJydVI4VkVlNVhjdE43UjNHdXUycjRlcFNvTEVoNmpMTDQzcXUwOExjWlRqMkVOc0N3bCBzcEZ0aERjcWZIdUVNeERFYmh2a0JnK0R0ak1MYUNhemlrbStEZ1BQbjkvMkFBVWcwcGdYRS9PdFZNTVZjazc5SDdYbmxzZXdoeWd0IHNLV01uanpGcUIxdmpaQXhPNGZpcTdtVHE4b1RSam1POW5BRlFud0gwSDlleFBaTXREcjhQbHlZZGJ0U2JUNmtKWUpoSmZzS3Q1VmogMDVjbkpHQ0hNRDJyRFcxOFB2NEEvTzR5czJnTFJ2TjFjYjk4T0ErZjgvQTBtUHBPeGgveXF2YXJhZko1NVNkM0F3bkk3WTRWeks0dSBMdFEraC9raGtocDhPQytFVHlyNzJaK1RLZzNwSjdxSU93QUQ1OCt3WUgyRlZhT1FDUGFRUGcwYXRjYllsY1NpME51c2lTTGE3QnNWIDFjYlpPck5JOHJwL0d6bitPeXBhaDg1VUFlUldOYzljWnhYVHhaU3RzcE5tY0RmTTVTZDE4QzRmTCtMRWlBRDYyd1E3SVc0YzB4aHogbUFub2NFeHlidGV6WW5IZEpTZjZCUVg3d0FEcWVmRWNnTElFbHlmWUtUWVZnMVhVdGV4NlRPaDRqNGVWOVFpdUw1QTQ5N0U5UFpDRCBoT1VyQVBQRmtFeVJRb3NzMVY3SWJlQUFBQWZBQVBBSHlRT1F5N0dIMTZrSm9kYnVDZnFRSk83QlVwaTBIZXQ2NWxib21zaEJqVzZyIE1YeE1YMlJJUEQ1OWNvYXdUeGFQYXE3UjcyUEg3QnNCL1lPZy9NVTJRQ3lXZGxLUmlTdHFUVWdMeXZNSmMzVDB4eUxTZ013ZXRyY08geVEvZUJ3NWE0UGlQTVdlVUMwVXB3bndZQUFBUDcrQTZFc1pGVkVkSGNXeUIyTWVjYlZpNE9MZWFOaXUyaHp6MGNZVkt4ekZQR1h3ZiBIMUl3YzR6Mm04Y2dRM0h1Sng1NlpDL2dEYU9lUG04QkU4WFc5Rkx0OE8yOE82R2VpeXlqbVlId3pGa1F6RVA0YzdqOWwxeXQ4WjJ2IGpPOWhQUG9PL253RDlqMEhnN2NLZHI2OWkyME5TYkNGMHlFWWgrU0hJTDF3VnkwTUlHTUh4TVZ2M1U1aTRCL3hlQjVJTVp5Z3ZqTHcgYngyTkJBZWY2RzdZcjlMZ0toSnQwMHNqSXlIZ0tTa0s3STFXQUpXM3c5V1JTVlpEQUhyY09ZRHZsZ1dvcW54ODhHbnZJdFhLRE9jYiBKc1ovMlA4QW45ZzZ0RVF0eXM3VlV5VUJvVDdzckhXbE1mNWNlSGZ6QmNZZTBOMnErVVlJSjhORGh2amdQTVZ5K2U2ckQyejdOV1lKIEtTVGZQbjVCZnY3QjFtZU9JN1UwdDZuWm1qUVNROTMwdDZVNllwSVBtTk1RN1RXUE9PQTkzV2pjMU1NZXdnamlXZjEwaDFFVVM3aVAgV0xMS2thU0dnRGx1dExXUzRZZ3RralZkSHpXT240YUdtZ1dUVkZxREQyakU0cllWNFdGaUtvaUpROFdZUFpKdEptSzNmUGgwZUJIdCAxVm9hTXpGS3ZaaG5kRUphT0gzNCsvZUFBZFE5Wm5GOWplSHhvdERsb0Yzd3JZczRhYjdDVDE0T0x4N29LOE5mRG9iaHM4elo1OEQ0IEVDSDlERjFtekcrMXdSSDQvd0FCZlQvbitnT3Y3Y3Z5dm5EVVZtMThxVmMrVmZaeVRFVDdPcXp0NllhSXBhdVNreGZyZmtsVi9EY0cgU2QzaHJUWnhuQTBOWkp2QVFJa1BHUDEvd0NEc0V3cE1Eb3BabVRMdEFrRWRxNXF0a1hoOVAzWXdObGtLOHBJRm9hMzhPcTZmY0RFeCBmbVFUeStQVmZkNVF4ZkdUcHUwVGZnUG9QV3BvbkQ2aFpWQ3NYU01TWGVibUtLV09OVm9DT01icFZGeWJDaWJPVkRMdjIwTFl3dHNvIEUvaW9uMm15Y2pYaXE1cWoxeDNCUWRtMk5YOTJHYWdUd2pJQkcxdUo3NVdGSUUxdTBKclpWNTVRNUpFc2ladkMvd0J4Z05vVHp1NUwgTm9YSlVDejRRSWMzN2Z6L0FQbDBwVlBpK1ZaQkpqU0VNNURub2NZVEhTU1E5M2NIS1ZXU3VVaVdBWURyZmNpeUY4dWNzdW4xTFo4UiBsTkZDZkJ6WnRKQjdCNS9mL0FYTHFPekI3a3ZoODFqaGpVT3ZzNnlCTmZuM0FlMmQrQU5tdVVYa0RnWW1iT3lEdzdWUCtlY0Q3WnVnIHg1N1hISFo0NTk5ZlBuOE9oQzlLeWZJb092WithSGpLdGpIaVVyL0dkaDhNUEtLTVAwOGhEWlBtR1ByY0Z0SHoxVndHYm9yckRNY0MgSlA3QXYvMkRmN2tqWmlFYnR3OEh6bGtCOGNWV1A1UG5wUWtSVkRaWGw4SGlxci9XN3Y4QVhRSFY3SmJqdmtmamwySlpOM2FWaHRzRyBLeG1XeExodEZ0ZkZUZUg5eUtUcXVFWWNET3c4N2dzak04azZ2Mnc1d2xKQjRQeUR2NS9wa01Gd1dZa0E4bTBLcWNJdzFqTG9DUVBmIEljZXNySXNaWDNXMms4Z24vRGNHT1l3VEp3RndBMk55WVo5RzhKK3Y3L3dJKy9jQkZRNm1qNVMva3dNbXNlU1hkRFczY1BuNXhDd28gYmxYTmdxN1N5RDRZZXlPSDdoM1U1aHNiZ1Q0dUxXU2V5ZWMvMzk3bjlnamF5MDk1bHRXeG5WSktKU1ZVcWhic0hkbHRYaVRGWVdXNCB1eVhCeVF4aHZGZ0dBYmF3VktxaDlzYVZkR0ovU1FnUGZ3R0cvd0Q2NFRCUlJkOFVIYm5WNFJpaEdsV0x4dHViRmppdU9TY1hrR0NTIFBKUlZXUzdrNDNIQnk3Yyt6aWpXSTUrUkRqdFVDdkt6TWtYbTFXazVPYVlDVjdZS3ExUjVjd0NVTGxITGg0ZVp6RXc0SjBQNmVCYTEgc1p1dk9lRC9BRWtIaS9mdit3UDNUYTFjSTk4QzNDbVZkb2RxdXBtMnE5cTRzSGZCdEhyekllS0pFWGtuZUFPK0dJY1A0YzVTWUFJTSBPTWVoVFFNZVhnMmI4LzRGQjJBQUE2Q0RoRE1xVlBtQlUzNDFoUmJDSWlxSGFrbEhwR0dVQTJGWE1WUGNMSVpKbUQ1Wkh6WUtIWDZrIGNNSTZ5K1UzVUF5cXd1eWJCdjRBL3dEb2Y2blZaU3BWU1FGR1dwMUF4TGhQUFM0ZGdOMXRXZTFPTm40MkRad3NMUE1WV3gxYmpqQmkgMktEVVZJS0hIV2MwRFNXQUIyd3MvSDAra0I2ZmV2OEFGaDlhNHBGQ0s3YjJ6eFIwNXhsZmhieGs1MnFzZmErVi9ianl6NmZ1ZUEraSA1Y21RUzl1RW5hV2pVV2M4S0Z0Mis0ZHY1RjZ2OWZLRU5QTXU3dGdOMjJUc0FHMUI4dHdmRmQzVjk0WDF1NEpoaXQzRGtnS2gyQ3BWIFZEM044dEJaUm5nMmJDSEg0QUEyRFlBQ0QwNE1zdTRBUmQyY2NtSk15dmhyc3AwTzcvaklQS2l4Q2liRFlGc3V0MXU0QitZTlI1ZmIgVlg3TUx0QkdHSEFudnNCOSs5LzdCQXVEb3JxVndRNVZmR0VxeUVnUEo0dWh1RzA5cjVVU3h4ZGJqK052aTJZaHVFUGNQMFpDYXlVdCBESGZQdTFxL2w0OGZRY2QvNk8yQkhyZFhyc09aRnZrYXZiOWZGdFN0aFZXekVNTzBBVjVOcm42Zmlub2N4aytaOCt3Sjd3dUV5WlFYIGNEeWpWY2toQWI4QS9vRS9nZjZpbFpJb1JIbWZxRVdTRXVtR2FXdE1Ca3g1L0h4eCtSMGJMaVNoYU12RlVUS2paMXRnQU1UUXJPelEgbzFSNVBTSW1DeDhDSFRMSFh5MHR6SldkR2x1RElOWUs5Wkh5UzJJWUZQSUllb1NiRG0ycGl5QS8wT0J5YnlydEhKdnhkd2o2Q2dudyBHLzRkT0QxNVlkZEQzTWhpNjlxVzdKV29SUzB0UERKTUkzSFc4V3hvbUJRd3dNa3lZdGh3Nis0TlVCd2JVY09Nck5wS015eThHNnUyIE5CZnJkQVB3QStBMzlHOHNLWnNocVRySHpwTllxUmlMTEhtTENlRk13MFBpOFU0ZTRtTVA1eUdRWkp3RndQWDhISm8zS0NiTnNteVAgQURmei90di9BQjl3UEN2c3paVzlqSzdzay80cEpTU0xZYXBoaVd5SWNVVGR6UkQvQUtiY0szVzhYQ3ViTVlBT0xJVHJOb2ZHWlpPTyB3VHdDQ2ZQN0FmMzhCSDlNcjgzZmN2Ykl0VjdINXh2NTdUZEQ4ZExkWTNMU2UrOFV3QXVSODZHeWkvTzVqM05mWmg3V3ZoVnBkYnI4IFV3N0ZLbGFyUlpMQnZMOEg1bzJQWVZidEVxd2hmSkt2dmk3RU8xQTRmM2d6eUdJTndSbWZFclVDeWo3SmlEQUlQbjJEZndCOXpXQmMgQkduNnJWWUVxd25hc1VqT0NmeEFWdStCMkV4RlRlTDNJdGtHUlAxSUdERmIvRHRUdUEyL0RXVm5kQmd3NTRRNXdId0Q4ZlBvSFNCSSBMNzRrQS9nSGxCYk1RRnVNa2JtU1Y3WWh5b2dseVBXb1FYRU9IZGxrV1FuaDUybW5mcHpJVDhwNXdJRVNlUGdOL3dEYnovUTJqc2xGIHdKRmhDek13SVJ5b1kxZURoMnFyaXpKY29HSkZGMlJYNjNhZ2VoK1lEMlNxM3hmd09Nbk9XajdOc25DZlBuei9BQ0ErQVBnQ21WbmsgTHFybmNyZVZGeXp4SXd2bFF1TnZYQnUvaXVpN1FnVm5RN1NKSHA0bmJiRzJwOW9rYjB4anhaZGtzTndEelRtc3lZdnE0ZXlMQk0xSyBraHdObkpOWkVGVURTQWlZTHFVUytSRU1peWN3RHpGdGdEMk1Cbyt5NFA1ZkZxNVA4bzRXano3Zi93Qi80RDB6aU9ZNktWa1dkYUdWIHh1WUJaUGxtQTlTdEZPTGF2VW9vWGJTMzhOUFE0ZGJobUR1TUJUM3hIUStNL1dXYzRFQ0pJTmdQbndHL0gyQkI2cCtEdXdPZXFmRU4genhKbU9TM1YwU3Q4bXdpQmRiUTFkM2xpNGJnSG1NaGlhK0VNSU0rcnVLcmFOd01vejdHa2hQNkFBSDBIcGtWSWo1UVlXZWxKcVRVdCBoVkJwMlFaZmNHeDYzTE9GSXRBbkcyZzdqTlE4TEg3cURvYlYyL1BQRGdzbzFYN1pzWnZoQ01BUG9Pd1B4LzhBUVpFY2JjUk82NDJvIHRRa2czWkh2K05vMHRhQXA4aFpzRk9SWFVqa2k1ZU5uU3ErbG5EWUpGZGJtNFFHOTNaanlLeEo4OUcxZnBicGxaUzJwSnFxN094NzUgTlpWK1lNU0N3ZG9xK0pYTk53K1lUWWR3VExJSVRRYmFuZ1FWcUUwWkRRMlpHQnV4dmZOZ0FiK2Zmd0FCQlpDdW42ZjUrb2c4QnRXcCBLM21WODFNa3ZzT25wNG1HZTdlM0phS2VRcmVIVzVqZ2RnVElNL0J1TnNpeTh0SGs5bENIRG5hTGZ3QUNvdGdQMHpUMTlzWTZEem1nIERacTNWZXFVUHFyWGtlem5ENGpJbTIwN3BxdW5yN2hXN0l0c2tOd1cvd0QwdnRrQU51YjRyOXN3ZUlUVVB3Ri8zOEFBUWZBT2FPbm8gVzEwbk9kMnFTSGJkUlJKaElIcGl1MlZXTGFDeWFCZkNBZGJzaXQ1azF3UTJxQVFiUWJJekRQeS8vcWliQi84QWZ6K0d3VGNuY3lIZCAyeDZtbUVqR1dDU1hVZGd4YUtXQmFqSG1PUlhmTUY3Vk1Sa1FnVXhFdEE4dHBwNW1kNGZRaDArcjJGMHJtYk0rcE5KT1VraXdBajIxIE9jaGNCVW1Rc2pNcEZ3bUxrOENTVzNlRXlXRlc4UDVDOHRnU2lSYU9NTmZXNWkzOHlHUWhneURCV253OXNWM3g1V1hnSlZ6c2MzL0ggZjkvQWRPMXBaRjkzRjFpN3ZnRUpNUDE2a3hLUHpvYStrYnBLdGlVaG1IQXdIc2Q4VDl3RDF6NTc1YU1zK1RKLzF0NThBQWZ0Z0FBTyBocGdtQ3lqNG4vQW1JTXhkYTBtWFpDcWtYUXZROTBzSVdtOGcyZTRQbVh4dkNxMnNGdEhIQm1LZStub21jQ0czWUhqd0gzN0I5Tm9PICtXcFV1cHdQZnBtbndabXVZZXBCM2tPQUVlMmZGMCtyd0d1cXJYK2Vjd21jZ3RScXRwZlVnYjVXZkYxZit0dTZOVjgvUVFIZ0Q2RUEgaktqS0hrVjNkVWVOMldhV0hjamwyd3luYVphOWdvc1hya0N1YkVQSEdrY1VaU0JDNnNnY3hOVWNWRll4dXd5WGptYlpjRDRCVThVTiBsQ0Q0THRCcDdQNE85TXU5ZTA1d2NhNFV2VHI1VXA1M3B3b3RFSHhQVDdVaDF1NFBrRUNRZkFlMlcrK1h3OC8vQUFBRFlQb1BRSFhiIFJaR3FXbzBNN0FhamJzeDVOa0x5L0QxUk1GaE1nR3h0UFlxTE0rWUdyZnZZeVYrNFRoOWZ6L21XK3pDeXFNekk1enZadi81ZFAwSHYgK3djZVhYZHFXaFE1ZTZWZUc3YVY2REhOckRUQUM2OGJDV290RU5zVW9vWUo3aXRza1BiNW1vMURyODgxZHkxaG9LZHMvd0JreHd3MyAvd0FBZkFkTWh6ckJIQzNJeU9RdWdXU3Zhdlc0Mm1VUGtWTGFHOEFCVlpIc0VNY1lEekljeVlQbTRxVEFlbk9KUDhEazhVZXJVbDJPIFAyd1B4OEEvWXZ4K0tOSzNwTktoMUp6VVM2YWZjckNiVHh6NmFkZHQ5U3VvWDZpTnBFeTFHMVFGK3BmVWI2a0NTVlZjUkxqTUE0Q0cgT1NYbU5rQTlONHhpMkx4eFE3bk5yYWpxUHZrSmRNOTZ5SU5iL3dERUtkcXl6MVZTVDB1ekhDZ1dqMWFkUmVvdTMxTUJEQzJCcUJzZCBSY2JObFMydTNHUXBGOUNVNFdtSnpjNEZZMGV2d3pGQ25tOCtSTFlDMmRYbFVOVEdtTWN0Zy9WYmRueEszWmlBTmVuUUl0cE1WR0cyIEJ5Vk1GNFZCVnJOSDVMaHFDcGtpdHJ0aEI0VWRsRHFrS0M3aFFXWE56WXdsNDlVWEgwcHFiblNQUlhoSUxVVUZPNEJZRmZHUDZQOEEgMS9YVGZvOVRmZUp5MzNmM2JWZWVQL2EvZmovUWZQSGxZUFI3OFYwT3dwUXZLSkhzMHdFbFBCNmdVZDNtQVZlc2lsSUdDQmdQRG1HUCB2aU9CSDFwYWpoK0xpaU9NNXY4QTJBQWZBWWJBL0FMcExhdmNtYldiZ1ZNMWpHRzJEU2FqVTd3QnNpbjZjdFNWcGZVNVNIMi9tTFJpICtGdTFQT1FPVzZjK012TnlGVmw2L1Q5Lzlqd0EvdjhBMHNWc2ZNc0dZaHhRMUdvRnpHZTI3RFQ5WW9jaGhjWFBoQ2Fyc2ZiZGJXNGMgeERIMVdqMld3S1FQL1M5RFpxelJ6WnNJY3Qzd0I4Ky9BSDUraDZyWDZ6WExRTU1hUTRScUg3TUVsUGxUU0hkNGZaSGErU2RrM3g4cyBpdDJPZWg5eTA1RDRlVEdkcjlzT0pQQ1RuQWJkUGdBQ0NmUDlObEVicEp0NEdzRjFMTEZLa2N5TmRSVFBFaytFYjBiREE1a0dpTVQwIHBKcEVraExTeU83WllFdkNYWEVSbHNJNVpJdHkrQzJMREVoYjhpOHNmUnVDdURWcG4yL0tkcXYwaTJDZHNpWFpHcHV5S2ZzSlAyRmUgcWE0Nmc3anpOUWxicDVrZE1nZ2NJQnZrNHpESEJteGRrbzN2eDg4ZjhDZnhQcXUxV0RWZ1pReVZhYndwSHF2bVZ0VHJBbjV6Qkw0YSArQ2JRcmx3LzFVbU9BZGY0clBJYkd5TTJCUlhKc3lPYndTZGc1OEEvWUQvVmlxRDFBUTFKSHJldEswc2xicmR5MHVyZW9TUUJKSTlzIExZRXJmTlgzTFpDZStRNnJEMXVIcjhQQWJTSHdURm1FK0xqRm5teHYrdmtIOUQvMkIyVmNudUNibG5RMWpHSk9UbVVQR3IwZ1lyMjIgTDU1a0xySlhLTjk0Si9HM0JEMjliYXY0Z0o5Y3d5WXlyeWp3ODkwUW5PVDREZ0w4QUFJUFZhTTZ1UlFtbzB5UmFsSG1nZ2ppZUp0VyBJOVB2a1RyZzgwZytwamppa0tTeVBzNWlQTXl4elJyY3doMDhqU2FacG4wK0FMVEJKV2dqazFjY01Na2U3TEhGWWdrbmRjbFU3dXpaIFdMSVZXT1JmbGlRQ0ZldVRhTnBQT3I2Mmh0aEdHTlBYeXlIRktPOW9WSkRIcDYzRDJldHQ0Vmp3L1R4dTZNc0s0dDVXUWFTN0pOVm8gTy9uOS93Q2ZIei93WVNUdFA3KzdXQnBNdFRUT1lPdXRjSHdJRmJDbUYyOWlsT09jaTRsMFRhYmZjTVJpQUY2ZWJqNSt1cFpNbldMTiBpVU8yZjY3UE9BVjZ3Vi8xVjhDWVR1TWRtUXc5alZmYllzb0JHNTBwd1c0aStuNUxqRW1BY1ZPNUR4aGdEbUsyK1l0MWZOZU1XQ2VEIFpHZmRCZkprZEpTZFBEd2ZmdmQrUDFGd0hyY3lDcXJ5a2VqZFBIWi9zeXBLcWt3M3hxb3ZoUHMxYnREYWRoaDJocDdvZFBaSzNaSEMgR2p3R0J0NDBUUnJrNXhXZm0zYkNvajUvd0hWVE9SSnA5T3JPZnF2N3JxRVFSSFlqU0Y1UnFIVnA0NUpJMXdJWVJ4UGpsYnN2YUh1TSA0d1NTR0pQU2pPcGhrVVk1N3BHYUZlNnNjRnByTjJUaU9oV3lHaW81OWtPMWpUeHRKdzY1dFNMWnRIbVhDcDE1RFRVTmhBMmdoc0c4IFBsSnpHUWVZbk52QTk0SnN5Rzlzd3ptd00yRUFJTy9nT1A3QmhhRlRveFB0cTZHT29WM2dOdjJoVzl4dGNoYkdJQlpPUTVkMnB0VFYgV25UTUxycXg4VzRHSUp0ckNmaUhac0h3WGdOMk5LdTFIcUpCd0FBUDBQNFZrRnVqNEdEaDBoU2h5bXBYTUpOT09Hb1RUMjhKQzJLcSAvbmg2azJCa1Q3VEQybWgwL0RlS2xIejdVM041cS9jOThxNjBRaHdCejdIdEQ3SCtoc0c4QTZ6cis3R09zNmx0R0hQc2hKbDluenl1IEpoNGxLbkZ4ZHdobUppRlpHNExmQkxRNE9HV0t6VjJqaktQK3RWVzdib0JmMkIrZmtERFFZM1psY25OMjJvbWFxdXNnR3F6K1R4Zm4gNTU2RVNvRlhjTzRqY2hDTWNaRnh3Y251dkhJbXE1c214MWE1MFQ3TkZvOW5WQ0d6cE5wcmlIcVpySm9yQ3lHQ1dudVRra2ZMcmRmeCBzaFBEdUFmNGJ4MlBmSzVNRThWZkVaNXRKU2RnQUFENkN3SUo4QUFUSzJybU1vZ3FtYnVXN2FQQzg0MldrTlEwaEVNV051MWN5akE5IEREc2lIWkRJdm1Qbjc5OFBGbjU0c2pON0JtOS81QWYvQUxCMURyWXVSQVYyUThCYXRTQWVtOHBTcEZwY0R3OHREcThXajJOSy9HOXEgWHdubUU4ZzRJL2IvQUxqUzd5V2VUck94aERlQ08vZWZQb09IdjA1UTVCWXZpMWRRZW1EVGxwd3RCOGEwbXBGOVAwc01mZTBPQnFhdiBXQUNuK215R01SQ1JKakMrSTEwVTliTFNHVzdlR1ZjOGtjVW5FS2NmY1YvMUw1LzBnVDNxWENsS2tjK2J1TWZVUkx5emxoajVYSVkxIHVBKzQ1VXc0ODlMYkU1T3NtMTU0bWt5Qnhpa2s3VGl0ZnhZdHdiekIrS01RcHRoUUNwOGM1VU5jSlI0SUpJVW1ISUpDZXJsTENsQVUgNGZEbU1pZmFnZWYyNWJXQ0E4T0NLc2kybG0yUFl3bXdjKy96L1VQalhCVjRhbTA4TmZHVEpEenlRMklQYWxVd0pocHA1dHNZQzRFSSBrTmI0ZTRMNmVxOXI2MCtZTXFEaXlNOG5MUkNlejhmUVQ0QStBOThGdXQwKzhYd0RKUGd1bnhzT0JaRmtMMGdQcHZUMkdZK1doRVBOIEZWTC9BTXlZaHpBNC9GcXhIOEhXM2xtMnRaL1pEWnpmMzUrZmdDQy9IejlxOU9Xbm04dFR6ZlcybjRWWXN6VCtNcmZKT2hRTm1IVWcgSlhGT01FUkZVanphKzVtS2U1cU1sb3N6VmMwK200c1g2MUNheFpxT0h4OUhvWW40M1g0UE1ZUFNiQlAxWVY4V2FlVFIvVE9Lbmc5TiBFSzE2RXBzazdmRzNKOTJUMmdybVFDWU1GMllKdHhJNUZNcXk4UnNUakpIdFN4NVJ5VTJMTmVXQm9BQTVDVU5rc1RUNlk3cVdXTmR5IFRHMUpNVEVDQmNHRU9lQXU0dTBJWTZIUTYxak1aRi84bFZlZVZWc1lzb2JRTUo0WUJEWVJCLzdBZjZZVnNjc2dDdzdiVlRLTjdTbm4gYVdua1VraExNSWpsVGg2VkRUNGJJdDFYVDFxT0VNR2U0RzFWdTgxQStET01vNFEya25LaVA0YytQOUkyWlZidzVKKy9BWmlCZnd1dCB3bFRmRHlTRng0WGNWYktiZlRGZ0xkYm1PSGw2L21WejJ2UGRueGp5cjFlekUwYzRrN0dnN0FmMkR3QUF3MC81Y09lNGJ3cnJhUytXIEVlZjJ6aDc0UHJLWUxsUkxHY2s4ZUdNTWhqa2hBTTFQakFCYXNTZkZ4YU1qWXUzTnVmSU9HTDhBZmtFLzFIZEZLOTBJbWp2ZWlNdDcgZVdHREsrQTcrR3dmSHRvbkU1Y0N5TzF5Tkc3Sks3T2hkZHNjbE1nQmJYWGJac2NFOGRLc1B6RC9BQk1tQnlxVERBbm0xc1lQaHVDUSBZYUFLbnpMaitDMzh4UFpIQ1o4QWdlYXc2eXM3V3RiR0U1djcrQWZ2MFBnRS9xa2tOa0NqZzVsb1pKSUU4a2hWTlhyNXdWOVBhZUxyIGxzYUNtMzAvTXArYmFoajRad0RlSGF2bkZ2bEdpM3ZObStEbjdkcUx6LzZMOXhnQnhUbnBZSGx1Y3BRN0dEdTBSb2FnKzB6THVyQzIgQmNxWTRKOXFHRU5iaC9Ec2FlUW4yTXQvbERjMmJlNnV3T2IvQUxBQTltRERGU3NsaU5DbHBqTWFaSUZlcEppdmh3TlRJVEFOZ0NURiBqT1RDNVJTOWZ3dUJ6REV4Z0R0UUJmZkhoakovZkZsRytrbS8yQUIwckhGMTIvVTJwekUvR05SOWhhWDdyeG9kbnpsN2hYSkovRys0IHlSWm9TbWJWazZGY1l4USsvSTkzMjE0Sk5EUmxrTElnTkRJQmdibHFEUFE5U0RZd1hOWjFQL0RhSW9sWCtaMlRtTWlIRFcrQjc4UGIgVWVZVEdGQll4WkJoS3UvRVIvWUFIMEUrQW1aZ04wSU1oN05UVHFTMVdOVmFTcDJncTkyV3g4UEFZbFhvWVpnWkxVRHNoaUhZREppZSBxN0ZxdUJtMnZ4aHp6WncrQXc1OTBqYVRlRjlqc0FaWDBBd3lPMWc1eEpkamg4Qi9EeFpRc1UyZGZyaVc0UStOL3dENGZ0eXFIV2ZxIDR5cytiYkpqc0gzN3ovVHlaQjE4MGkwSGhjVTg3UGs5RGpWbEhWVCswdzdrNFFlMDVzaS8yVE1WV3R3MkRpcDd0TEJoN250WXdac2ogc2MvN0J2OEFpQkFGdXEwcktHUVRTYVl5RFRPK00rRFlGR0NVYnl4YXhmYlE1TjlRQmpHc2pERkk3V1EzbGpKYWhrK0x4b2Qzemw0RiBja2c4Z3IyK1BWYTVzdGtqRGFnUE1qdllHZGdqcVlkb2NyQ1BDNFk5YnF0d1d3N2dQWkFlM3oycHd0OFlMNHlNQm0veXA5K1FmUDQ3IEJwYkdGRGlxZFlnYUh3azUyY05yZDM3cUxjZVc0TkFHSmR3dFEyZTFBNjJIc25lRG5EN2F4bU15eUwvWTlrTi81ZjhBWU9tb2h0QlEgeUwxT050bHJZMnpxcVZVbnVoZkJJZzJHRU1wWVJRcGl3dmkyWXJjT25rSVhiUmdRemt4NXQvZ2VQdUVkZ2dNLzc3QS9Iei9TTXZ2SSBoMHc3elZkaWNOT0RVMmdWeWtuL0FMZUxGMnpiaXErMThaTGtBV2pNeERzZUxQREhRTnZxVThNVWVudXNVWEFHNnBXSHN3cjUrM3EvIFlNR0NvMkpRbVFoMEdMeUJOTTdYdlNWR1paQWxEY3NZV3RydC93Q0pzKzJTZ2hZNUZHVUxiZnFlSzNjdnQ1c0RIOGk3K0s1K3ZBZEggWTB1R0xyckpiVlZYcjJwVWpsVFVQTEIrTHFiUktjQ0Jnd3lPRXd4d00yQnE3NTc0akkza3htOW5LdS9FUi84QVlBSHN3clFtT0VETSBTV2pLVGdsblp0dE1qQ09mRWxvL21pakRLVFdYZUxJaG9lTGpZRXlEQXEvaXI0akl6NHJqR1k1ZGdRMkRRVDZEOUJ3MzgraDYvYlA4IEowQWxMR01zakt1Sjhac2tBYklIaUdRWHFDTGZFRFdCTVE5UGJoTVQyQ0hBUSs3VTViV1dmbEROOUpTWFpIMkIrNENmZm4vcVlCc0UgbERKM00wV0RXN2E3Qlh3SGJOVDUxaFhROFZXTEFpWElYdDhOUGZLcnVDa2lFeURkVndLUU1POUxQRjFsNU9jMkNIZjcvaUF3QUgxeSBRT0JudTcxTzcxdXluSGNDY1hISkZSNEZGZzJWR2d2TmlyeGlrY3ZGazZNQzZWbGdMS0VaZDhaekc0dGl3QnowUzJLMk1rcm0wb01TIE5oNmJhdVBOR1RWWWRzK1U1U3hZdGJIMk9IcmRrcXVZUWNhZDFTcDg5SFpGa1p6eTMvT0d6Z00rZzRvUGQwQnY1OHZSeUxRVWh6YmEgaWgxdk9kenhKaFBzajVVN1luMWZGbDF5ZTVBWXV3eGZGV0xZOWJWZFBDOGgvTXJQSG5nd1o5SkNWVy92ejhmUVg0L3YvUzNwcTZKQyA0NlpNL0ZKVzdQRE9Ga2ZISmNHRXdwVlh5d05jekY0T3lUQTh6K2xVT3dMYStzN1hhQk1ZajJqVjNuLzMvQzNjZXBjZVVJV3IzQ2xKIHRHaENUUm5HMkZQckd2WGhUWlByMW8zSmRpL2RnZEREd3FySWgxWFVzUGdBekhhQXB6bG1SbmNJa3ZKLzZDZ2dBQi9rQ0o1OE10S2sgYnIyUnVaaU94ODhpQkdmdXh4T1I0OXc0NmNzR1pNcnlJK0ptcFVOMXRiVjJlT0d6QkFyakUrYjQ3WkRSV2M5c3J3TmJYRzJyS3JkdCBYdzRGMmtVTkRLZHZuTFVZdHNIekhDMUE5Smp3OWpYei9JdzFsR0tjR1dlRW03UmVQb0ovWUVIendGSVZNdHRzQ243R3locTJIVFpqIHRMMHpwTnpOR3BwUFRUb2s5TFF5TnFMYUg4UVA4ekNmUjZsVmNNWXNvZTJET0VtL0FlKy92Mk9IVHNrV1JRK1U4cWdGc3lkUjlBdHEgNVV6dVlaUTk0ekllRlNsZFNvdDdBVExJcE11dFZ1dXpNTlBPbUJTQ1RHVjRGazl0UmdmQ01RSUhZZm9ISC9VQ1dEU2RYeGJBWkJkMCAzOHBKOWpLdGJpZTVIQjE1YmFMYXIwRHBmY0I5a01xMitHSEJmMk5TcitCWElmazFYOW9HWTRidXhKT0FFRiszL0UrQVBuN0R4bFhWIEJ0UGdaSlZsMDh4TzRNYlpYY1J4dG5kTUlua3d4VU1Sa3BKR0psa0VyRDZvTi9GSkZxSW84Y01WVElSblVraEk1WmtHUlRMZFlqMkYgVHBtVStsMldZem1qVDQrYzJ0V3dtMFRYK2N5V1JFbWkyaGVsQzhTRU5PZklhMm4rRG5XaEFWV1FtOHZnc1o0VCtnUUcvd0Rud0FBKyBOb2NpWWh0bTEyaE1rMUsyM05VcFpmUXBnL1o1WDJpMm4yMEdURXhjRDVXL0QycFNRRzFWTWNHN3lySk40U2RQSDcvd0RZRC9BRmRuIFVvajZHOHJpcG5UNlNvRXhta3BRa2VZVDBlV3Q4RFUwTnlxdGdtQjNCdzVJUFpKeUdRUFlRMGJFV2lleU83V2o3OCtQcjRBLzdudWsgallsZVNJR1hEYUNhZlk5VnE1aW5LY2VLWlQ3ZitHZnU2elUwVlhDL1d4bHZUekxJd0dOaFh4NnJ6ckRFV3pQSno2UzhBVjhDQVFUNiBDQVA0TWFTT1NvYmROejduU2dLcndNdTczYzhpaFI1dmhXTFFzV0VlZUZjU25Pd2FGcWNWdzhjKzYrM3hWbWlGcUJvYmsrT3prZXY2IFN0aG54SnhEbUtydUN3dGhpcVo1RGNCNFpEcE5QWkRGZ1dvOFQwL1l3d3duVGRvTFBCd2dUZzRBQi92N2YrcmFFSzNoME9wb2RhVDEgdHVBNXFlUzRPMzJSSDQwQml0a3A4aGtKaGlZWVpKaEJrc1lEcVE0UC9WQ3V6STFWbTk3cXQrNENmMzlCUVQzVTlXNm1Zc0JzSkxpYSBOcmM5ZExqR2wxK2h3N0FYcGtYRmVQT1JpNEE3NVNjeTFQWmt4UXlIYmtQV2UxbENZdm14dEoxR0lJRG53RGdJQkI2YWp4dkRIY2o1IGJVREoyRzFURWEySkNURHNCc2NITk5Yb3RjeldBUHlXdHJnZk1VODVBWHg1d1Ayejd5ZHpFY0pzaVBVWGdENkNmdzZZZFJsTWtBWEYgSXhrekFRcklaQ1UyblI0b1k4TnUzeVZsa3p5RkZLT1ZHR1JFYVptRHZMTXJMQVY3SGVUK1IzR1JKOEpRcnpmUFBTeHl5bG1YSnB2YSBkTng0Ykd6cU5WSCtZSFE3Z1R5M1p0TmQzeG9NV2hkbHFMZnd6TndjSGJYRFk3SUYyWXJ2aE5HQnUzdWM0Q2hJSUR6Ky9oTEs4Vi9vIG9RcWduenM2eHpOVFpOQlh4WCtUY3htblE0cVZxYU9vYUlRVzJXaDlTRkp5MzlsMkQ0RnByZUtPaFh1VGVUZ1E1aURmajFSTUdIQVQgN0FmMDUrbitwN0hkS3hiWWxrS1JLQTRFdVVBVDFibG1TTWhwSjVOd2NJY095TEkzaFBZMVVDd0FLNVc5enZnV3M3NWRnUUpzSHZpQSBBSU9BRHJzSUs2WExJRWpNWE9DY2tRMGxzVjY5K09XaDJoVGJaM0djQjZIRFpLSGNFNnY2cm5jUGZPTit3dDhzd204V2pzZ1B0Ri8vIEFINUlnaUlaY05NVUxpUUl1bnd4a2FXQ1dSaWR3NVo3S0tCUXdvbm54MFkxVThVOFV1bmsxSWRZekVXZlVaNE9JcElaUVBTSDlPZDEgdS91QitPcTVaT2o5L3NYSTlEQXdXZWlWeFA4QVRtemgrWld2cWVidUZ3cTVreGlVM01NbzRUSnFGeXpVN01YVjFpa0dZSUQxeDh6TiB6OGdWNklzREx6NVEyR09sNStkV1M5UVFaWVFCTUlGRWpUR2VITFN6NmE5VGhsbXFUMWRwaEdSYStPSEZKVVJSRGxXS21pQWNGd0dMIEZaZWFPZ3o2MXJzL255SjA0K1RDc0dCeVBZYnRuUjVhZSs1NFNiNU93Qlp0Yk5abjkvSitmMzFZZWNnSDZtZndENy85UDErai93QlQgMUJXSm1BK0J6RmQ4R3BPYzJrcklFa1liSWp5M0FVbXFVV1V5ZDRMZ2gxdXRobC80TDRQQTF6Tlpua3A3akVlN0FnUkhQZ0FHS0RoZiB1d29PaXowRExQbEM5TEIwbCsxQ0pKOEd3RUlscVo5WjRqQ2JYWFJSd1h6RktQZ1lRWkhRcmlndjkwSTRmSDJmY1hmREZKcTQ0Znh4IHdQQVdEai9UUFQ4eEh6YmdKSnE1a2trK214dGtPN2h3T3lGNHhWNllKcm14ZzdEYWtLcTBPMVliQlpCejhsbkRCUGdZdFpXVGxvN0kgamdlQWdELzdBQTQxOUxMdEZ3RXNwOHlXM1VMWUlja3A2WnBnR3YyeHdWNHRzSnN2aDhPeUU5UGhKN0JUN3doMmhQcDFPclBUMFVLTCBLendtMGFUQlc2ZjdSSU8vOC9maVZsU0tWZ3NKY2hRN1RIMytheEZjVnpmSnV4K09nRE5JeXhOdU5EL3kwWEt2SGxzbDgxeHgrYThEIHJTNlExc3BscEs0NzJvdG5seTFIK3N0UC93QU9ueEtmY2xvTzc0K2NmaGg0YWRxRGNOblI2V3VENEMzV1l4b0Y2aFJtK1lKSU4rdDIgb2o5dXI0RFlENnJ2QkgxVVVqRDR1K0pKc0RZdzJTd2pyNDFGV0JFNWxGdGpWK2VUL21MZFZ6SEFPUW1WekFudHZNQ2FNVGFCbG1BMyBaMkNmbDNnSUQ4UklLQ1ZPbW1DYWowbmtxVDRoeVh5a1dva3ZXdlFLR1FzMkdlcm12YkZBbUNFeUh3OFB1QzNCZkdDcFVjejJ6dEJvIGVkaU5oTjhBSUQ4ZjRDQUFkV1drRUt6elVzRFVEUlErb2NEQVc3MVUyQlAxSUs3RDhWeWRpZ3VIOE83SERVSlQ4eXdKaXJCdkE5UU8gSk5aS2ZvOGIyRU9WRitpQ0EvVHBCa01WU3NuMUtKTnR5Q0JzNUlZK0EwcnBRNWpvYnlaRGJMTDNObHdjYWJ0eEIwMHp0Q0hVeXQyUyBUaXIwdWZGUHlNRGlkeTJPSzQwYTltQjFUdHJSYW1VdWMvVzIwT3BVMll6N1VzaUpNbFBsWlhkS1pLL1Q5U0V3d3RtR0Zic2EyaDQrIGQ0eFhReWJON2RyZ2I4ZkFIL0FZNy9PMkpTZGlIclZyZTVLMDA2c2t5NlJzYTJkT3gramNpdlRIOFB1QXRYRHI5UGgwT3F6R0tleVAgRjBqK0Q4bVJud3BaaXlFZGdsMmRvajc5L1FPL242K3pIeVpsV1hOcnBjcmUyNXNvQ0VVMmk2eVJDSVl4YUN3cjRaQ0dobUZ2Z2ErNCBOUSt2NTlWbUhsbVowSjRaa2NJbEd3bU93Yjk3YkFmc3pWRFZmVk1INk1Kb0ZtWFhVTlhWdWd5VFNla0djQThzcFRqQnFVRWtEWlorIHFwRG1wLzIxQXNuMXJUeDZoUHFGNzVqNlV0M3dZRi9GQVlNRDIvbUEyblVGUzgrUHpJWWxjaXg3bmpoVEx3ZVdVMThWWnRscko2UkUgY2J2V0FRU25LaW9hOXlhU3NSVlkxNU4zeFc4aFdDbndpbjN0NEkwN1NkR1lObGVhTDNhZFg5aEJXaTJkT01aOUR3Ry9GdmUxc3hBaCAwaWVBVmtiTGt1ZXRCVDArbDFTVWxKZmVlNHNJQS82bDllVE9vdGd2RFQ3cUxmSzZ1NXZDRnltblYyckhUL1dXUWtNTXNYR0VKcFdxIHlDRzRXbVpoNEFQVWI5N0xCc25jdkZvWlNudDNTZUR5Q2Zmc2V2c2dldmhrT3NaUzV5VGxCSUd3MWZxalNiQS9IS2F2T1hHK2VWdXkgR0liNVlFeWRaZG9XWWpyWXkzOEZjWXNuTVFsMkhQQUg5K1AxRlVYVWtIVTY3S1p1Y0xzdGt0R3Q4MGRKdGhmVHlWc0pNeUtocEZJMSB6U1pBeERRMXZqUTh4UFEyRG5LMnpGT0I0ck9BUko0T2ZQdjM5ZmIvQU5HTnlVOCt4SFpHZi9EUWpvMTg1V2VMRlVUWnZqT0V4OW1BIC9PY2U1NHFxdGhYZzM1c245VVcvcXN0RE1pbkptVTc1eHRWNVV0MWxIVDhoUFNFL1laYWJGTU9FTkRtVlhEVzJCYitldnovaGpDZG8gYWRFWlo3WE8xbzcrQVA4QWdNZnNDQ1c2TFR4YlFTbjVWaFNTV25oa1pCTWZKdFNPV3ZpcFdoZUEyMG5qNWkzRFQwSXc0TGJVUVQ1OCA0Tmo0cmpKdzRFeEJmcitJdkFZdVlYWkNtYXpGWEtBMWl5YWIyZ2xKaUR6eGdQTG1QcWJYcWE1T0xoTVQrSU1qZ1FodFNHdjkxSWF6IHRlQXdtY0NiMjhBRDZEc0cvd0N3ZGJVb3hNQXVCZ29VeVVteUJkbTFLa1YvcWlwOVBzSmJxOURkeWlHNEVKaGlxMlNITVh6SFpXd0YgSnFEc3l6amlqSTI5RzNiejZEc0Q4L2MrNkhUeXVJWlZDUEdrY20ycU1MZDY4dkNvb1NJZU1YR1BIeDBVa2NVcnhLOGtiUE50N1lnOSBLT1BNZHl6eURNSkl1S2RtSm9rOC9pZXRSRFlBTkh0VnZnU1QvTU02ZXh1bVZmcE8xUGlROU9aV0loMTB1RUp0YjNBK0IwOWdEMk5XIG4vcFlpY1pxOG5XYXo3V2dFL3I0QWZ3My9mNk9JOUJxYVJZRldUMjIxRFovVG1lYlpiZmtxdFROaTIwU25kRGxJWkFPeWZNaDJRUUQgMXpBMUFUem45VU5DTnNidDJ1QnYyREIyaTJEWU9ueGwzckNWNDdVR1BJZGIweXgxNjdOaS9Va01nV1c3SEZxY29wYWxvV29oVERFdyB5dnA5eGRqejN3MlpHZkZkbUoycHphNjZyUWQvQUFLaVA3QjFQR0V5R2VydFBpbEtycTZ5RXhqQ1M2bnFXWW5scGl1ZXVNOUtNY3dzIGhrRGgwLzZQQWNPVk9DeXN0R0l4RzN2OVVId0Q5d0hBK0FreERLSXc3d3pQekF6ckV0T29VNWdTenhaWVppd0Q4Z2tqaXlRS2toblggQ2VzUThhdVRHMGJBWnBJTVRlZEFxZnRvbWpmRzRXRFI2NXA5a1UwaHFVMlRLQXY3RXdVYUJJZXprMFM2NVY4Q0tHK0IyUXpNSGhvTSA5UG5vMVBreWJRcjFtc3ZIc0U4L3YvQVQ2K2ZQN3lnZDhLSlladEN2aEsxRmRQZjE3R3dnNUQ1aFE4cHZsdHd4N0srV1FZK3ZzbGRIIGlCNnhvYU43UGRaczNDYnNONysvY0JBQUFCLzNGR1FoWURSaG5NYVFlQ0ttYWhza3NmTmZFL3VSOFZJZlAyZUZaRzhUQ0Q1c0krZWogdUR5ekMxY1lUT2JKc2VMOSsvZ0FHd01GUEtGRTJHQlhDZ2RURDFwWVRhcEw4eHdYMnhiVGFiZC9paCtZVW5qTWh3eUMzVlo0aEF0UiBrM1BCb2VXWTVnazcyZjhBb0ovZjlnQUNVZEdFam04blJBS3Fzdkp1ejRyeFErZWVPZytvUit4R2VMTHl5UDVxcXZ0SDdyL1UvbnFOIG1Ba3RJb1B2ZEx1QWs3dVZZc2k4UWxvYXZ6Q1UrVmtycTZmeHREeGZJZklPS3ozQ3l6aGhaR2ZXVmg0T0JOOEFBTzdwOEI3SHNSWnMgSGxMR3kwOEFlbU5vRVdZTnFoQnd3NGtIQW5raG80MlFtT0ZKNHA2MlI0cXBMNTdFd1RabWdvTTN3Myt3TUNDZjM4QnNIVU9VUWpIYSBNOEJNMTZTY0pVeFNpR1BoaDVZZUxGbG5xNVhQaDJvSFpIQndIdUZqWXNENGRwOFlURnRHNW8vNVJCbjBIZ1BuMzRBQW5sZVF0dEVOIFBGaTVqYjNWRDhlTVZ1NFhSenc5aExqU3BnOHhpdHpGdGJYKzFkOFdCUEJ1SEdTbTV2S09FTisyUDM3ZnorSFRTelJ2Yk82dkc3TFAgSkUxSTlZNEZXcTMrOFVRTWIrYkFBbnV3MDdJQTdJanhvelpTREk4aVNXaHVBVXRlbWxHelhkd0JUS3lXNTYvazJyQVd4b2VWTXRHdiBkTzhOcUlzTElMdEJlc2F1VThlNE1pZWhoME1mRGc0cDdiWExnamsxY29NMk8wZitxQml2L3dCZ1lSVE1xdVVZeWFIc1lZdDF2ZHpVIE5ZWkJna244d1EwMFR3MVBJTWxibUljTG1CaFZnV2kyZzJRWXpGQlpORzN1cnJzQm5rRStBQWZ2M1VtNlptWUxzQjhRM2V2VW10M0sgWjRlWVNEcjFWdVFIZmdMSVBoaG1Tbjk0WDhhNW5zS0dqMlFqREdqL0FGeGQ3Ujl3QjkrZmtMbndBQjA1cllyL0FHYXFyVTJHdDFLNyBLZjIwVFE2ck1zaVdub1o0U0JsR0Y5RERtSmhpR3ZtSzVvZHdyUTRIV2J4RjFjTVpnYnM3Sk93SDkvOEFQN0IwQmt6cE4zejNLN0xsIElKRnh3ZDNKR2VGdFMwb3NrWDBhbFlBWEMzVldMcStRUE5IL0FGOGVTZXFjNnFBN2hZd3h4bEQwTmxKVmUxUnFjanV3MlBYckloNGIgK0JNRDAvdXBzNWhQY0RtbmkwUEQvYUtIS014d0hpay9mc2QvUFliQWZjMVhnNDlscTlNcmdhZ2F1bDVTVFRsM0Q5Tk5rYWYxTmtjbiBKc3RDVVhyN2dZZXlGdGtUdzlxZGo0RUd0MllaK00wWjROSkp0NEFjKzQrQTUrZjZXSXRYajF5RHM2QUdaTGtHdmpJZ084ZkpEdUJiIGh0U3U3UlhNTWV5VEZ0d1cwUGpZTUR3TnFoakhwWDV5c3ZBUTJiZU1BSGdOL3dDZlkzR3RTWVlBMVhUTiswM3FXSlVucU1jT2JqM0Mgc3EzeFF4ZkV4ZGpMYkFodUhHNGRrTUFjR3BNSDg0emNYeGViTSs3WGFjK2crZnh3UGdIeWFoVlZWRVpTV1pKRWkxQmVrYitQTXYyKyBuamt1SXliTEp1Vks4ckduelAxQWtSblI0NUcweW5LZU4wQkViRkxGM2JnRGo1L1YxWDFHV0l5YzB6bHlmUTlidmI0MU8zZWh3emgxIGhYQUxjckNxOXBXNi90UlAweHVGVjFXUUQ5dExRK0NZSm9yT1VXZDhONGM0QUgvYnU1Z0EzODhyUFdKck4xaHA5SjZjd05lcVZQMUIgVXFsZkUvSnIweDJmUStQSnRqY2hXMDlrVzdJdFJnbVFYeHdvZEg1eXNvYjV3WUk3RzNiZno3OEFQbi9QOUtSUVhybkR1YXRxRzByViBpU3JGbjBwUDFVTHdGaklMMzRiU0dpeDRiQUhtb2NPdDdJK0ZCeEh2alVZR1BPNmY3Si9yNC81Lzc5MHR4RWdQR3RjUmFGNTFYS1RxIGdaRGVNaXd0TlFaM2ZFUlh0Y0RGY09lYnlIaGlHOWxnSG9GbDJNSHMxWmFPRHJCM0EybGIvaUI5L1BuK3Eya1pnQXM1ZEVqZFgvbDIgWjJORVVjYk1WZmtCN0hDNDgyalRHUVJnUmhKWGVTeW15a3FOaGcwYjIrNVZObHdvUWtjbktoY2R4WkZlN21TenJWc1lsYlZ6VmZjeiBzdlY4aHVHbWVXeWJwWVZ5VmZ0OHdPSG1yY053bXZHSkFEVlljbXpLNVFZei93QmJBLzMvQU56NERxdXpSZUdxVEptSks0bTJjRWFxICttYW11K0RUczRsUEZ2bE9YSWhtRjhQOFA4a01DZnYxd1FEazBZOGk4Qmd3NXNoczUraC8rd2RNRmJYcXYzREpzWXludXo0dUI3K2wgL3dDRERWMkdaWE5PQ2ROQjZiM1VXdzlidUFmZU9XamtOVmgxbjJ2K3piMkU5KzBYK1ovcmpFU1FhUmZEVmF1a0hVaGhreitXM0l2aCB6MWZxYWVDc2FKWEthSFg1aTNNdUFRSFQxbzRwTDU2dVhBbU1GMmhpaTdJN2NIK3dBTi9BYys2U0k1b3MvVCtvMkJITnBvWm14MDhPIHhGSEdpcTFOcytDekhGODdBcGNMWTNmK0p4TVl0eUZvOVJQSEp1eVNTZG5xeW5GTHNrbFUrM3U3amZXQTFkZkZuR3JVRmZCaXBiYTcgWW03Q0gyUFJ1b0M3bkJEN3NKcjVaQTU4TWZNbU1wQjdnejJBRFkxd016eVVLbzNCL3dBWEk1OEFmUVdBL3dDZlFZR3dFUExTTlBkUCB3SmRrRWc0RmtKV0UwSkxJSFgxcTVQdml1NEVQd21ZWkREQVl0VHM5V2s2WThvMW9XZ1Q5Z21LU2RRZnZ4OEIwZVVYVjk2TWEzRFNhIDBvRi9aR05KTjA3SHJIT2tXRk1WenludjB4eFQ1Z2VHWVk3UkRnOXVBejNBWXpVMjBjbUI3MjdIT0E3K0FQbitRUHlmcXRES1ZWSDEgT0pyZGsyMVdDUXF2OHRYMUlKOGQzaDhOTFcwcjJRd0xZZHdlNGN4eFpMR0ExL3NaaG5aU2d0YUtISFlKemgvZnZQN0FBUDhBUkdGMyBFckk5WXpUV0s4N2tMUmpuSWNqY0pIQnVxNHV4UW1qVlJHeWxra2hXS09aaEZHZzJwWVpXWnpGRXVONEtvQno4a2hoaVZMKzc4SWJ2IFlGa2FwVTNUSFYxa0pFMFpkeEJWVnBGM1RGZFhoNEhuQmd0U3Q0YTJ5Y2Z3NGszN0doa3lhR2hzeFA4QVpEajgvQUFIQVY4QWdnQlcgbjdRdVMxY3hWemJWczV0Y0FOYmpYZFBxdGtZRzFiaWdkaGlyYSs0VlhNVDdVWkxCZk9lZHBUbTJQTFFoakZrNDZwS1NjQUgvQUdBYiBBZng2M01nOVBxQ2w3T011OWhTYWY1VXBRNjNyRTlJWGxzV21sdmloNmZtQjRZZWFuL0RnMHM0QVFkOERXYitLQm1XWGtKZGlTOGIrIHZ2My9BRTYyeG15U0xyOE9yM1NuM0hXN1FBdVNzZ3dHL2lDOXNLR2tjeXF0Z21RM0N5QStJOWJlUDJNUHprWGFIMGMyN1ZjY1Bud0EgRGZ6L0FKKzJlTEZtVUpMZzVRaGxIRkZPUWJOWldiRmZBNXZ3TVpsVlhpQ3c2WWpHNUdOU1RBa2RwYWh1U0EzdHB4ZVRpeDFKVkFLaiA2bHFRUEpFVzV0Smg2QkRmNmRwQ0hXTGdrcmNyVSs3SWx5WEFQdUJrTDF4VDVpQWhLb0s4UVR4aXo0b1ZvRThBbnBkcVRBKzdBQVFNIFYvQS9pc3N3UFFkeTBua3dFaXZiSUcwL0MxYUpEeG5EUjhzT2h5bXg4UTAvaDh5RzRNbkhqSndDd1h4WEpqZ3FIcHlXZFF1eUJIYXEgMzQvdjRCQVBvT3dNMlRtSytMQUgrZWg2ZUxhUTBNNWJBK3Q1bGJ5cnNUYlFzMDlLRDJBWXArMUZ1R0gvQUo1dCtlQ2NCaU5WOU5yTCBOOTI0T0FQNytnL2Z3SFgweFY5YnJGNEFZcVJrcVVQTkpEVWl3Q1VOcGxtSlFGaGxDN3M1Z3Q4a2lkbjNDbllGd1QvbUV4aFJYOEdiIDhIOUJQbnovQUxvT09SZzhjcFpETkRqTUpveW94ajVySlVmK3I0QVk0cUVzY0hMalNKS0FPV09VTzE3SWg0eDdyaWlpdXI4Tmw0c0UgYzJqYmNoV3pQWjdtQTFVbm9ESnB1ZkxhVStCMUxhTlpNaUVUTEM5UHRxZkQzZ3dHRGZNT0laRGZVOG1zM0lMR0l5T0VDZHE5Z2ZzTyBmQUVIcXkwZStmbFhCWVVxd0t4R29kWDJReVMzREowOW85c0dLNUYxa2h5MXRnRG1LclczeUhWNjJjZkt2UFdOVzZNOCt5d2lvNXZtIDNQdGdBUDUvMzZaRFpYK1pZeTNmR3V2S3oyUmNYQTdJcDEvYzEvY2VtUmJHckt4bWd4eVJrdUN0NjNRMkJ3T1QxL0JIdUNvQm5GM3AgWk9HL0I0UCtIUGorL2dBQ2xDTWlHMFdKTWdGR3AvdkpTckYvZHlIQXpBbERsZDdxYkFvZThZR0ljd09QTVRvQysrSEdRWjdvZTJmMSBzRTRDZmZzUUQ5di9BRmRCaktzTGJUdW1BU01iVG0vbVZMYXFydDVOMjNJQTZHUGRqK256WGNTR2FNdE5LZHlCY3Y4QURNdzNEZUp5IHphUTJCamp6ZTVmNUprWkJLRk9oaFNCT09jTVRpMkZaVVJaZGpWK1BLTlUzTWQ1b3hTTUl4bE95SVFpSm5NL3F3OUExa0JEV3ZPa2UgdVFkS0JWS09iZ0pLem5RSVF0R3NxN2FIdFhYckd2V2xFckY1WldwRHJrRnB0Sk40TUNxMkxPeHNhUGtBVFhwdnNUSXpGejBrMndwbCBLK1JOOUV2UHlGbkpFWVpXZkdnK3FHSkc1MDJsUGtXZms4Y244K09rN2pEZ2NBY0FXVFEvMXNmK09xMEhIeVpmRDZrdTZHdHhhVFErIDZJbGZKWGx5RndwR3BkMGlUQ0FlcTYzaGgxdXdPNHdGZnBacWNGa1lydEF5ekRpVHpZR2cvd0JBb093ZFcwOWZkUlhNUTJpS1kwdVAgbHRhWTQxWlYrTnRxdjJHR21sR0Z5aXJhK3lJYTJHRHA5Z1RBZm5zSzNabGxwZktnL3ZnSStCZnZQZ0Q1L29QaDVqaGFDR1NETnVUVSB0ZW9ZMWJFMXVoekYrc25CeXE4VEVGNGtGckF4REQyUnZDcWVIZVlXQ2F1MEl5TURDSlBPUFA3QUFBZGNaaE9lQmJRbjVya3ExdmFpIDROVWw2bisxYWZFY0VPSzdzNzR0OWszQU9IWk9QaHprOGcrVGVNOStGY1pzZFhPcnR2OEF3SHdIVEp5c200WkFrdm95N2tCM2R4NEogTU1kdmFtaXN5bERua0RoZ3RYa2FLS1F3WHc2NmhKcEpCSWcwelFMSUJxZE5JRHBkVHBOVC9lRjdKQnFVbWp1eXJSR2xaVnZIajVWZyA1aTNwcGxWNC9oNTl6TGRzWFJXN3M3MkVuMDJVWWJ1bFRCOWI2a05QWWNPR3EvMlVyQWJkbnJNWVVGc3hQd2xvbysvL0FPVDhmNlBKIDlxTCtUSW1ORnREYlJaTGZ5WlB5T1lQQmFZS1RVaDhBekhCRFE2M3ZnUE14RHdWSmdnSThQeW0yTXh3M2liUjBIc0dBUVVFQWVQbjMgeFlHWlM5M1hvNjBobXVOUzF1N3pOVE5tbzllMXZYNjZIZkxhMDlucTVtSi9KQS93NFpDWjM0Y0xhK1l6VWFybEJoTkgrNzhCUGdENSA4K0FRUUFEamtXUTZRS3p1QWUrVmphTmhTaVNUWVJpWlc0L2daUVdXZkZmaDZHeUlUaGpaQkF3MVZMalduRzlyN05ySk40TjFjYkNXIDZBdzJCK1BuMzdwWUN0R29DUHZacWxzdUcxblFxcmJkUjhlOVBUc3F2ZDBUbzJSTE9pSXlNN1JSdk5MSDJZVVkxbGxiWWtHZmE2NWUgZVZQRkc2UFdlb0MxWGhKVWhhckdXKzNvTjRxK3ZYeG9zMkdydmtzOUtxdjVqZ3lJYjVXN0I3Z2JRUkVlbjNtekticTk1R1ZXN0JBbSAvb0w5di9zZmZ1cXJVV255RWdnR1hMYVcrNmxhR0pMWnR3Y2ZMY0NsM0NVMThoMWVITUxmdERIcDg3a0NIYW5Ca1lXVUp2UENUYnY5IEJmZ0I4LzhBcml5Rk9oNjdQajIrSzBIcWNob2I0dGxtRFRxMUVLY01IZ0lseUFoeDVpWlQ4TVBNVDF1eGxLcm0ycTRaUHVnMFBQT0UgbXJzQVlCK1Bud0dDRHNIVU9MWkx3UTJUT242YVE1TEpZNnJmOTRoMjBydThLeGsxVGlsSmkvTVc0ZUFkYnRCYkI0cjg4NU1vMFcwViBmWm0rQkFleDgvQUFIN1lUNERxMFhQY0VPeSs0VTIyaGFVT2NidW5rbG53Rk12Z2M4NWVCVlBhdEcyTWl3eDVLeXlORkpFam5ETldXIEtDRFBHaFJZaTc3UUNUWXJJYUFlVTBaTXF5dzl0V2RiK1NOMjhsdkR1NHlvc3VMS3A4aGFpMnlNakp3K1pCKytLcTNjQ04yYlppWU4gM05wSnpIZ0Ivd0RFZm56WmJINWRmQjA5a2xWakdBaHNrYVhER0xDWUJMSWVRNnlQUlErOGN3aHpNR0J3Z3owL0JWbWpiTXhmQmpONSB0SkIvMTkvdDgrSDZuMTlmdWtPN083R3F5YTlQRXRwY0VPNXBDT1lQVzB2T1RSRFllU0o4eGtReDh3SDl0YW1RbXpGRU5sck1Ha3UxIFhjQlBnTmdQbjJEWURWR2hXZktjS2xQQVh4MkwyRGxHMVFBSHlaL0FpY3BoamFYMDl3eHJpckZ1MUdSZ01mQVlJT0ljb1VyQlh0OG0gRE51Mk9MQlVXL3NBQmdBYkFhdXJReGlDTjQ4c3NCS01IaHJDODA1dk83SGNLeHZtK0FLNHlNN25jd3hyR0RkUTVWZUQ3aStQbnQvSCBYSmFEUVVGdWpoUmtxcTJTMUUydlVDbkxZVDJxTUpXM0xVWWticHVENTh3d3lRMTh3am50TjU2RGp0aXVoNGt6bjBuQUJpL0FPZmVBIFF0TmQ0TDZreVZpNVcwa3lTVVV4SmlWZTdFZzloUTBJOXdPTE12RDZleU9BZXYyU2NCSVlBMXNadW1GbURBbitsWi9nUDcvaWVBRlQgV3Z0R2JEUFZVa09ydm5EeVJKMy9BTWFHNFdGTWZGZEljdmhqNWlFSFQ2ck1EM0FIQTRrcTJUWm5zcitjM3Vrem13ZnYrd1l2eXJyZSAxSHdBRHlRd3NhRXM1SW1MY3ZlTFVSM2RrY29yWStORU1mRE0zQWg0TGJnSE9UeUFKVk1jRzR1VEpmU2ZQb09JRSsvYitmNmtaS2hVIEJ4ZEVUZFh6NEphZWYvNzVHWnlsY1o0NUgzRVdWY2l3VjlsdjRnNjRWVlovTFdmYUQ0b1VPYjRPeDlicTlxMVBWZW5PNmNsQUdpazkgdFhtQWxiYXV2YjgwTUthK1E5NHJkODVnSFRwazVUUUswQmNaWnRyR0xJTUphTHR2K3dId1B1d0lLQ0xUR1JQbnE1NkFaSkRIYktKSyBUQ3IweTFJOTNHSlFBU0xGMm80R082bEpoK1FCd2RMT0Q0RDR5VEZxMjU0L2RnZS8vd0JRSHo0RUJ4MmcyZGd1U1hUUm1ycEp5YTBWIFFsZXE4T3poNlJNR1NoSUZvbUw1aHdaYWZRNWcvd0E4d0lUdnVlNkMvWTU0UUh2NEFCdjRBLzA3TE1oMFBYdy80RFJxbzA4VExhZlUgQ0phTElCeUpZZE5zWlRGMmhnUW1CdzlrYnhhRU5IYldCU2dwNnd6Ym9zb3FPN0JjTi83dWdPUHZ3SHBLNm1OR2hSNVV6MXI2aVhUcSA4V1JsazNSTFBncGRKSVkwM29naVNSOGNrTXdMQlhmVEE3c3JCMFRUSkRIS1VhdHFNWmJLbmc1Y0NRZzl2ajk5RDd3czFjVjBlMW5mIDZsa1pENXFOWDd6a1pMalhCbDBqSzFpUk1Lb3hKdCtFSk5ycUd1aHh4SDFIdGpHclEwajZSMlBxczQwZDlHSU05Nk1NMDJ3ZW9YY0IgZ09rWWRNMldaY0ZFOEx1eGJyMVhwbXZhZjFDR2F2aWxxNTFCVENES2h6THNzZ1BSNWpsdHdWSzFCOEVZb3IvbzdoTmlBUHdBL3dEWCB6K3dLZlVvd25iQnQ0RnJmTzZoQmt3OW5qb2ZxRVk4Y2xBUzI2Mkt4Z1VJTXlRb2lHT3RTRzlyd0wvbVIvd0RtWmlTMWg2ZlVGTnIyIEtIZ3dZcngwL2hiMXcwMzFJdVNFbE5ycHFmNnJmSVkyWmRGL1pPc2l2WVlHcFlsbnRBZGZtWHU0cDdJdGpvU3JXZG9LYnV0ckF6RjggR2M1Q0d1Y2dBQi9FK0FRZmNBeUJaSTI5U2VhWkpacDVBREh1U0JKSmQxSW5relhMYk1oVU5pTXJKeFhwYnRITkpOS1VoaVdMYWlrQyBraDVIampqaWFWRXJ2ekVZTExrTnU2eWZLd2VxL0Q3TFV5V3cyY3lOVEdxMWN2VnY4eHdyMWJhSXJEWS9KUG1MZThka3g5cVFmNHNQIDRqSHpCWkZ0RHc4bk9iT3p5ZzhmOTM3MjJDc1pTcTc0Unc2R2sxelZhMmViYzZOTC93QUZrUjBoRCtWRXNhdVE0OVBXekRJWURqNnIgZzhnQXRUSVRHTkgxbEg1c2I1OEFRUUQ5YnZuOFkyOEVjZGNsZDE3YUdhQk4xaVRXN0FzMnB5U2ZVNjhJQXlxOUtGSEJmdmhQVDNCYiBtRDYzQlR5QjZjeWJtcnRDejV1cmdtd1AySGdINEFBQVdLU3grb1M4eW1kWE9ibmI5RnNoYkxEenlUZkNuWkVxbTE0Q3J1RGhmRGgzIDRNT0JEbFNHUUEycERadkY4bVIzWjNTZnYyUDdBZjZHTEVJcUs2ZXBrcmlSdHVTS1NHVjQzUm82YS9hQ0RrUGNSWGJaa3VXOXVQRk0gcnlKSEp4SFViUnVleGtqeXFPNmF4YlhTL2psVmg1QXQzT0pObHFTM3hzenhKM0lPeVR5RXhLdHVYWXhUOEoxdStJZDhUTUZ1ZWhwNiBIZUMyc3MxWDAzdWYzYnovQVAxZnZjQUJyZEYyUmNFZytMeXM0MkJ6Ykl1T3ZRNkhjd2VYRHFXdVdFOGVUMkJQTVZYWkRJWUljVjdnIGNxVHlhejJ2K2oyaWIrZ3YzNytBNEQwMU16VG5EWEtiWTVWMG51SzIxWVJ0aHErMnFOcmVMTUZ4U3o0cncyQ1pXOWtPRXlIWUVOSFAgZkFoTGF6alYrMkxMd0VDSkx4di9BTitQb093ZEo5dGFOVURHOFdwbFJjNnJTUUcxQmxPWitUVEtPMll1U2JxYUY2akZzZnB2VDJSUCBEM3dQTUE2MHVGOFZVL2JMa2ZXWlpCM1lraERtd0FENkN3SHdBQStjU29qR1BjaGxtR21aSklTWXBFVFpDN3JPWGxqaWx3RG9SdFNQIDdqbGhhNWdyWk5EdXBLcUk0akIwN2RrY2JZN2FpUEhqSEZySmJ2dnd0Y3lRcXJOUUZkSTRlZUZ6aUlkSXMwTFpzZGN2TFBpQjRxdlogaC9GT2YxeDhEVFVPeUdGd09mbHRweEpMVDRyZWM5N3JxeEFZQUZ1Z0FEOXNHTWxsZzErVVVvY003MkZSVmVsTEl0cDNyWXhiVkx1OSBieWp5bmJWWDhnWThHUmtUMXZHYWNuMS95cHdKc3l4M2ZSbmZENk9nN0FmOCtnZFBmVStPOUN0YlpjVkJySjNwV05UREdwY3IwK0xEIHVHdmhFMCtBVUlPT3RRUGlpR0c4L0xWSitMQll6NHo0cTlYckN4aGhnN3BIQU1NRHkrZjQrQVRVaFRXM0cyQVB0a25FbWdyQ1FIZG8gWkxPWUY0T1VpeEhMamZ6RnN1eUdHUmZtSEZMaWJWeG5kQmxtRTNqL0FGVUFJUDhBUVAyQmd1TnAzamNOSDlPOHFTSkhKbHU0NXh2RSB4MjJWWTNyY0RWSWplS0dOazlOazJBNmlKOTFCanVLVnh2R1dHVmVjbXIrSmg0UHVKK0tJb2h3N0ZxVjRhb0RtZUpYTnBMaDIwN21LIHJxdTJDM0E2NHRnOEJodURKTVQzeUd5ZHlJRmFFSHc0aExMMVY2R3piRnZlOWdBQURZT2ZkYjdJbUhhNXpNN050RE8rWkFtY1R2Z2wgWjFidGtPTHREUjh3ZkQ0ZVk1aHhzSEI0SE9mQ2J5THRBWjdiMmJPbjBFLzUvSEUvMHdvN0k2WndzOVh4bTRIL0FPZWsya3UyQStEciBKaUxiNG1yelJLVHlJZGtjSWNPWW51RTVTdUFET2g4WkY0bzIrY0txNzlnMy93QS8wcFpHT1VHdHlHK01jeU51aTJiVTJCYnppQ1IzIEdUZTQyOEVXUkRRN0lEUXgvbnFQSVFlYy9hRm5FNEVTTFJSNmlmZ0cvd0Rud0hRa3FKWnBNYWNReDU0dkx0dHRBMWhDOGp4UTN1RzkgcFZ5b1o1WXJpVUhxR09JZHFQTWNSN3NOM0FIOFpWaVB4WnZ4MDJvY3g1RnJkMkliYlhvUWxYeVRhS1E4T3llUGgzQnhlSnoxRFQrQiBzbnpKWTh3cXdHRTlCTUUwYWg3ay9yYnVsaHNCOEFmOXVQOEFTOTVCQ2NqaklwVWlCazVPVWt1eTlWNTdKcUJoTGkyaElUWXZNRTh3IFloT0NKdzhHMmozeWRNL2EyWm0rN2JKc0dLQ2ZQdjNnSkpIT2FqRzIzTEpkek5uU1prWFYwUzNCd0QxdmR5Zll3dHN4YUxzMmRQcmQgOGhwNmZOZUtXWUVOcWNOenE5WGVkajdwQkVjK2c3K0E0RHdMclRNZEpyYXQ5cW90UE51RjNFdFNERFgrY1NYN1l0Vk51NnNrUG5sZiA0aDlNYkpTWm40ZS9ZTnRxR0xNZWF2Zk81andiN3BJNS9vVWZLSjl4dDJZNG1NUVRWbzVvN3h6RWVCQnFSWlk2TEVkbDMzVXNaYW5qIGJKNE1yOWN4MUpEUWo3bE9mRVp1cFgrM3M3V3ZpSGFGKzJLSDFBVjZ4bVJ1SjVwRGpWUGNuYU9KZkUwQkx1NU5aRjk4N3FXcFc5MTggYnNidkJQVlE2TVRhRmNZTEI4SmR1Zlc3OSsyQUJqMG40WnkzQ2pKbkdhcU1WdVlQVEpNc1BaQUZINGVVdHBoaS9ENDI0VEhDWUhIeiBKMWxyNmkxQitjOTBPRFBCdmhKdysvYi9BRkZ2L0lBRjZwQWV6Tk9kc0RMdWJaaTNwN3E5OGt0cU83WndlSXR0RFF2U2xlcTJCdzdWIHpLck1EL2d6OVNHQU5RV1Vab2FCbis5amlDQWZqNTkrZnRnNlNiSm1VV3BMOVZvY1ZWalcxcWdtWEdKc2kyczZSY1llcGE1MUNhWDMgd1BhRXhQaG9aZDhZQTd4M1FQWUxheU1WOXpHSE5qZGtkK0Fmb0FmdGd0ME5KSkJNamFqVFN6VFF2Z29lR1RQMUl6ak1qREVWdHlCbyB3d0p6eExVdFk5VFVyUEcwTU1zQ1pydWhnMFByc1hsMzFZOS9ydTBjcU5JOXgxa3ZhYjZGYkVGMG0yMnBUNmxROWVraHRsbmtDc3BBIDJ2VStWZ1VhQkpRcFZhZStzamhTYUhENTU4QkFiWjFrRXhpdHVheWM3bzFkZ2Y0Q3ZuL1kvdjZya1pjTkRReHVVMFRIL0hLeVVCZXEgY2ExRUhjTzBPU25VdkpFOXhpVW1ZbU1wQ1lxZ2EvUlBKazZ2NE1qQTdSU1RieC9YNER6OVJBSFlVMk9xdXpOWnBydHZ6dUhkcW5zRCBXQXRtRWd4WE5vVWcwSHFySGg3SXA0eGNISUlkamNlQXpud21NRjFlc2pEanR6WUhpL2VBcU1Cc0hVYkkrUGJTK0JwS0JNQ1hBdU5TIGxNdEFiRHI5SG1hZlpSWVhWNmU0TGJJR21za0lneUhBTmdOb01QV2JQY2xYOG1CcE5YQlB2d0FBZjU4ZjYxYm5wd1J1Mjg4V2VFekMgcEJudDVaOG5QMnJqN2NhUG0rRXFPZFRod0hkRk1YL00yN281Mk1helBHSjgrYjU2bmhkcVBqSFVkZTFLblZYcEwwNjZvQTV1K2JZUCBYd3IzR25uckdtYVFGZGtjRERoVzdKTWhrSWVMYnFBck9kOTUzUVl6YzJDSk5WNG4wRUJzQjgvN0tXMExZc1MrWEFPVXpWc2JaMmJEIFc0aXVTczdUdlU4eUxLWGtJWC9KekdRd245cjZlYWtNaEFPWXJOdnREU3pJMVZwUGE0NEFBSDM3L3dBK2NFZXU1RkxXeFowV1VlSmMganlKTmUyRGVWUHRBbGt1NktwbEtIdFFleWRoMlFOOEF4QjIrQkI0TitaT1RmZHFUT2Z2L0FHaUFQK0hSSFQ5MFUvM3MxUXdGY2EvcSB1cHNrdDFsVDRmdC9ZVEpLVjJ6U3EwR1IwTzB3NGVHNEo2M09iVjk4ZURIaXlqTWlwQnVrd2ZuMzYzZC9BZmZrU1lhWVRTTnZPZ2VGIEkxai9BSkZ6eUxCcGVialdoc3g0RGJKZnViTGc0eStwSWppaVVPRWxsbWNqTkJIRkdaQzBjWGJ0MWdRd3pZTUdVMk1LZUMxQVZIZWogUnA3QVV2YjhNazRiTU5FV0JEZDZ2RTQvRllVT3J6RGlZbVVPWURoN0FaSzVyU3dJQ3JhaXp4ZTBGb1k4ZDdlRG9QUHJkOEFmMzkxdyBHM1UzZ2R2aW9IM1BXclRLYUl3dW5BdmFkMldEWHkxcDhQSkt4YlMwbnN3ZVdYcCthb04vYlVodDcyOVZvK1BtSGRRM2FLUWJ0N0hnIE9PL2VmcFJWOUQxUFkwTmtybUtoNmtLcnE4OFNTSy8zSWZZVmNSUU5tN0N0cHhpRjRkUHI5YkJjd1AyTk0vRjVYYTNnMy9RUG44RDUgOEEvZ0xPQjZqdU9CUmRjYWtRdWNTWmZtS2RoQmh4N3VhWXBIVVpjVk5nWEJlcXlaTU1Na3h3dFJIdWhnbnRKa1lNd0YyWXpBallXNyBNVjkvQUFOZ1FmZnBiUktaUXBlRkpvdFZKS2pTTHFwWXhIcnNGR0VrN0NKcEJGREtrc2NEdnQ3aU5Jd0dDdG8zbmtqTFI3eFNhSFRhIGVaSXZwVkFmUnhMR0hQMG1NWWdTUXBxRE50UjRReHpOZytCNnA4WmFBK29ZcVJmVlgvaC9OMThCY2lkTlhZYmpYeFhPcVJMRFJ4a3YgT2tRcTdXMUEycDNRUXl4RmNEWjhKT2drZlErVFEwMk1KeXVMRGc2bmxBeDJSblRjeUNlcXQzRmc4eXVLeXFuTlRsVVBFUndjWk1WZCBVM0U0TUJaeHpZa0wwcms5WmJRSzZXREZJWHJqTVE2V0VCQlJrT0theXdjUVhDeXhHR1Q2YzY2QmZWTWJXTEpTYlU1QVdEalJyRTFmIEhIN1A1SFhFbFlMTElzZzBtNHNqcStXa0RObXJZdGJiNHMzZG1oZmNhSEZiYllaQWJrTE1XTlBRNmxjTEd6cUJxZStLVEFvN3U0SzggVnNaNHI0NFduWkJobGNJYmhNYXU2RmwxWDlad2ZDYk1EU2RVVHRWZUNDZUFIN2R4UWV0eENuMTQ4SG1BUmRwa3FaMUJRMXV3c0VtcyBESHZxTVBNTXBuV3g1Z3d4dzNEbUdBUTg0SWh0d1dWbFd0REFtOEJMUi83QWZZS2lBUDNWbkZac2tTcW5NWlZmREt1dUR1ZHB2ZUNIICtDWUxPRmN1VEJTTmMzWW53dy9KTm5xOFBCQUVMYWFyVVdYa29VdklaZ2IyVDc4ZmZnQjgvd0Fnd1ErTXlxenpJQlYxZERqWkxjN1AgK0k5UDRPV0RsSHkyTjA0Zk1XdzYydDdnSCtCcHZ2akV6dGpRVVJ1Y2MyL1FCejcvQUhCMWgwazI3R2pwMjdYb2tGb255d0FJYTRwWCB4dS9COGZCYm5Ic2FyVDdUTUZWekRJN1BFVk1zUUY0WkQxWVZ6cTE1SGpteHlPcTkyQXZ1aWtMMHh0b1lhRXlia3FXTmZLL2F0d1Z1IEpmRU5vZDdHVG9mZXpGODdxUXg1Z0gzQVEyb1B5WW9MR0UrYmY1L1h3QUErQVBueVMzTElaSlJBT0xmTlBadlQyK1h4eDYwSmxrV0IgTFpKU3VXcHR5V3lIQTd0aGgwOXhjTzlLL0FuV1FzTXVvenVaWnRxWFovWHg4K2Y4QWY2eGtNVEtxT05WYWdTYkl0N0NTK09ZbUo5aCBNaFI4RU9WYzRzRmJyYUdZbU1qQUgrQVFnUWNPMlpUZENSdzN2WU0vejQrZkFiQnNGcUYvTHFTZkQyR1ZxY0pXZEZKU1dHK0NRRzhFIGpBRFl5ODVTZy9HekNmTU1NaENaK0w4SGhrOG9VNU1jcTQyN1lnTmczOC83YkJyWXl4NnFBOXdTT0dTQXMrN0xoSDZlMkFpUXlSa3IgMzJKVU4yTU1lNjh5bU5JWkhqamg3MzNIdUxGQkk5Wk03NUhIS2hpTVQ0UFNaUW5tTzBRNjlYQmRNMUtucG9FSUpSN0l5cll2bm1TSCBMbEFaZytHbjJRaHZsa01DR2NVaDZrcTNZemRyN2tabG80RTg0Z29KOSt0M1lBR3dHcFF4bHU5dVBpNVBHa2srVk1XMnd3cXV4aElmIENsU3NJczh5TUJoRHJlazJTbng0ZWFoOFNSNFpQZ2I1eGs1NFRmd0d3YkI1L3FUNHV0SGsvSmJXTXdnV0U3bjQxZTErNFdGMjkydmsgSUZOVzJDR1kwOXVIMThQQlBNRThIaHA2WnVCclA3M2k4NysvZmY4QXBTcmN4Q1hFTXd1VDl5QVNvYVFKVDJROEhYbHc4aDkwRHo0diB6T1J6SWZINGJWQXNBOEQyeFovR1pPcS8vSVB2M0gvUDR5eVJ5TUloZ25hQkhCRUZqUWc4MUdzZ2pTN0hzUk12dXVnVjFySTlCWkJrIDdJNkdWamNqNUdNMjdzREkrTmNDU1JxSk9PTnRrZUllWllESFc1NGcrcmVEVlY4eGtVNmZKWEF2eTRkSWdhY1BBWmlmRFpMZ2gxdW4gcjRkSHgwM29jNHdzc3pSYUN6NXNKN1liQjRCKzZrbXlzbmc4OEUvK0hoUTl3VTVaelFIYlJJZEpodE1Rd1VvZXdoWURUZllGd1RMSSBNTWt0Z2hvOEJmMDA3UHdab1YvN0phUDVkUVVIZjhlQWdBbU8wRUhKd2RueDhmSGRWdEFreVdFSFNYenRsejJwVk5YaWh3QzN2QWRrIEQvTXJrQ3dOdGNyUXhaNEdUck1IVjNDYXJBSU9QSHo0QUJzQUdIcnUyRmV2N2FwWkRkbjlWU0xPcVdJbjBQTTFFRmx0eU9yMFVXWUggMXVIc2lrMlFQYUFmZ1pDZk9EOWpXaTBOc0JoTU1jTmdQZ0FDL3Y4QWgxcW5pMkk0WEVhWjFHMGVtZGM5dVNTZ3BNdGoxSU1TODBlQSB4aUR5WkhieGJORTZzN0JqZVVJbEUzSk1uK1hENHh2M1pOZVZVS3JxMFFpT1luMlFlWE5oZGpENXBkdEd2VTQ4TmoyRW4yMWR6eGZFIHBQSWJPWlpMVWh1RXljZVR6MXFKNnlUYUt2cURmRFlSS09BRDUvOEFvRS9qMG1WZHNUNHpKWVJSY3lXVEN0RHdTdlhCcWh5SmNLVUwgaVNtZ09vVExJRHA1aVl2clVINkc4Ym1NS05GWms5OE4xZDkrUDcrQTU4ZkFHREJWWVBUU2wxVXVYeE1Obm1SSmY0bFhrcitxK3drSSBDckx6UlY2M2FIZUFQVzZlK09DY2NBMmg4NWJaaWZGM25ZK2JYWno3WVBkQzRDZjZrY3V5TzB0dVpJdGNVSGI1V2NOYkk0Y09yc05QIHVVb3NtaTdnWHpCaHdXMlZESHpGWGNIdzRuMGI0dW9HWjU4MkR4L29IKy9xamhZNTl6eUttRkxwMnVxdllMbXVObjFNZURubWZianogUmJjcEhWSHk3VUxya2R3MWlpOGl0eWpaNXJIZ0U5UVdhNkE0dFo1MUlwQzJwR0xCejR6dUhBcEZnRm9iNG11NTVYdFJ3dFN0MlNrMyB3eFgvQUlCZ24xemd6TEtIcU1XUmh6emFPZ2dOL0FiL0FMLzBFcGJSU2RjMEdZc0VvK1VTNFpwaGJsa05PcVRhQ1JaRy9DSEpEY0hHIEhEK0hmQWVyK0syV3dVdDh3bmVaUkQ4SHZadnRIc0Z1K0FQNysxRERBTHB2TXBtTHp5MnJPc2FtYmE3UG9kVjhoVDhhNUsxemFIY0QgdXBEWlB4K0hzYkZPZ2NiM01XTEo3SHNod0h5QUIvWDNnRkxIdDJ2MGpUK1NxVjNEcmN0OFZZekRJczQ4OE1JY29CWVNqNDRXQTRJZiA0clpQaHZGYVdBcFZXaDFtc2kzemJOa2RzTVQ2RHY1L253RHJSR3oyZHd1aURVeHVYUjhhRGhxQlhIdVBieHlPaWZuRURsOW5ZaVg4IHhxVnhHWCtUbjQ1TEU5b0hRSE1qNmtLcXF2NVdiRFFNOHl5YWgwanZNUzhNQnFYK0hTVW5wOVByZmRRTzRMN0lqb1ovdW95RTNubmggTm1lWGJaSGpuNEJCNERoMWFLWTZNaTVOWkQzSkZKa1kzQWJZU1BxRU1ORmVzZ0JOK1hZd2NpeUlkcVZXaDdnSG5BU0VDRFc2TTgxZiBjbkdRYnNiMzMzMzlCQWU1L3Bldmkyd0xyaE1ETWQ1cVZuQzZmcmNzcjV6N0hkeTlvQ21FREYyOHd0b2JJbnpSNGZubGY4Vm1FOEVNIFhabnRhUENmb08vN0FoWW4rcldraEZFS0pOTzAxVDdxMDRvcmFZcDExZjhBSnpYNnB5MXlQcFZuZlJJNE5qcFpaZTF2cTlMeHgxZWcgVFZxenFkZkdaYTMxSkIrbGd3T29ERjZnQjcwNDU1R2lsYU1PeVFKS2dkaHBYcHlUVkx1VjJZMlNEaTEyZUJYTElZbkhmQ3ZySSsyWiBiNWQxaTA2UnFFK053UnVmY2NmSGQ1Njg4cEZidkZneUJzVThOTmw3QkRrcFpCa3M1WHhEbENqREZGelBocDh4OFE1ZzljdFJTWUo0IE9FemZmZjN2MzhCK2dEWU5nZkMralF6MWI1eklyNVBHMWQyQ0taQThlWDdZWkx1cEdYOFd5TzJ5ZTRXUVlNRDVrQlNjWUFQNnlVR0UgeWZOZ2lUNTg5NERmei9TbEh2a2UxUWVVVXJtWlpCaElXMXRJYUNSamozM0tobnlWTXNDSGFkVm1HVGgvd1h4Zi9uRmhHVjBOWko5ciBzWGM1di80ajJEWUVGOFYydnpMSFM3Z2JYS1pHWkExZXR0ZXlOWFR2UzVZT0F0QlVpMjBZWHpGRHZpZWhwNC81ejRRZk9Cc3l5MFUzICs5NzI4UHo4L0FIN3dIVFpGeHMzN3lQU25ndDVzY1dXNWQwZnhTYmIrdzNWZHQyTThNekRFcU10enp0VDFqaVFlNDdadTc0OFZSOC8gQTQ0TDQ4Tk1BbEdpd3BESWhwRHMySzd0bkwveks1UEZnTmM4dkR6TVppM0RYN2dCMUtPZkRuQjFsRGZLektjSlNRaHhCMkEvOStmdSBveGdyZXdWTE1KMWVtcll3eGszTU5TSkZ0QVZkSW1pME80ME9MdUhBM3hrY0xVWCtWY2VmT1lETE00R01XYXJTUWdTcXdEQUFRZm9JIERweTZwWkF0anF1dHdOY3pCeDdCYnB3U1BtWjNiMXdqSFd4RHNadytZeUdIdTFJYStZZUFCQ2ZCWk9jMWVMWmhoeEpxN1l3R3dmOEEgV29qNm0wLzVaaWVVdHExQ2xWeVZWdDA2cUltUUJKR0d3TWhub2d1MEE3Z0hvWnczaXR5RXhxUFdoZE03azE1SysySXh4Sk51d00rQSBBQUVGQWZ2ZnJQTk96UUs0UjVzc2tRSVpWd3JIWmhPM0xIZVZ2M3RmdE5KOEYwS3B1TW1TUisxV0x0eThiVm1nRmZOQWsyYUl1amRkIERaeXMwTk56TTVjQW9jYk5uZ2ZNVzA0T0RDWXU0cE11UkRaQ0c4UG4xdkV3MUFWOEQ4emMrVUV2Ti9lUFBmNVAzSURBNGNENE5oS0sgWm1LTDR1RFJyQ3JqVU95Q3hnV3NNS0hLRHA2SERaS1RNUXNBNE95L2dLdkJoZ3NvVDJQZTZ1Qm53Qi8rbjM3cGhSNDlxdHREMENHcSBCa29xSFphM0diTlA0R2pZNGxQYUxhc0lEWXdkd21XcHlRUHlEWTdMWC9kUDVOVjc0ekRFZlpOOCtnNy9BT2Z3UHFRZm1weWtoeTdvIFdMZ0hBTXFta2lrclp6cHBoMlVLbHUxZGUzS0duWVZ4TXFDSis5dGtDQkJxd25XWXNtTmV0bDlTUWNZRUhBQmp2d0UvMW9kNDJVQ1EgdlVtOUVJbGZEUEV4V3hjcXdHTmloaWZKNTZGV09lQ3NuWnNUV2tRanV3OUtSazErM2hyNC9INWY2dXB5SjlnVE5QckhYbzJHcnZocSB2VWNrWXZpSk1BMGtKNGJESSt5M010TmJzQndWWUNlMmd3N054ZG9XYXpPY0pObzREMjhBK245Z3F2ZEdaWGR5T0Z0WnRhVEdTaHcxIHRLVU9PVHIydjIwd0xGeXlpYk1IMlF0MXUrR0pqQjhHeS9nTlV6a3lFTFprYnVpYkNHL3hGMVlvV2g2SUl0UnpEenZhbGY1K3JRbGYgK255aGxBYlM4WCtJdlMvaHVnWlBaTzlyZXlTeURoL0V0OENERFpXYTVHaFpaOE9FMmh3SUFmcUlBZndYeng5UDJCVThmTnl5UjVXTSAyUVNuektLN2dNbVMwQ1E5WHVWWkZLbFJIQXduOTFGc09RNHErVmVwVlh4bTMvc3l5OGFoL3dEcUFQbi9BTy8xRTZGeTBKZkhPTm9XIGRNTWNMREZCazJhUGtNSkxYMmtZL2daSTE0VjFRdmc2Tk5GSmNoekNjcTJIcGdZOGp1eko1ckVXNWc3UmJpdlI5WW9aNndyUnprNnAgRzJJUVF4cEFTbjJNZXJJREYyOHhEdFJiWk9QdUZxUGxmYjQ0TTIxcTdOWmxxY0pkdmNCd0h0Q0EzOEJWMXhUN0VNc21TbTV0a01qdCBsRFl5OVY5YjJRNE1Oa05EbDJ2S1BuY2hEbUdPZURwbUNJdm9ad09UL3dCODczdmh6ZjhBWUVFQnNDLzB3aWpBVW9jV1pYWjRCYmhyIGJzRXIydjN5dDVFc3crQVdGbytHd01hSGNFeGtReUNHRGZVK2ZPY0NkbUlhdVRHYkliU0FhQ0JmcUV3UGdPZWdMRlZYWUdaUVZiaDkgVXNvd1NQWm8xU3MydjRic0hsaC81dlVEYlNlUG1RK0g4YklPQU05WHphamlGbFpWeWpNemVFTnZIUGdIQVFDQ2Z3NlFaalFNa1RkNyBva21ZeDNTM3RZY0dzTzdqbThoUkZEcDJ5d1lxczVXdTFtamVrU1FlOE8zOU9XT3hzeVUzTFNkdkhWTTNCZ3NodHRBdytORU1hZWFCIHJhMkVMT1ZiUWxza3ROWUhKbzQrdDF1OXVFT3E5bk5xWHdEWWNZemJXTVdRYVQrbS9uOWcvWU9vMTRycExjakEzNTZyWEZibVQwbnUgeG5HQ012bmg2elhLS1lUL0FLZWg2a01XQ3QwYUE0QWQ0V1daWDdtRXdadlpBWFB2YmYzNzNQdURWbzZBMUt4RTh6VldkcTlQQnJDVSBrZ3pwdjFPdkM4dHBwN21TRzRwOE8xRnVZWVd5RU5JbjEvUHJqQkd3UTMzSDhvK2MyQis1OWdBUVg1QldJTWdWMDhPQitVVUdqVnJoIE1saGp6S2ZNTmhlTFZ5UmFEUXQyaERRM3hQVzRaQXh6eUJVc0Z3Mnp0ZXpFOWt0RkplT2ZBTUVId0d3YWtBRUNKQW0zQ2JJU0dDWGYga2tKVVRPME1xeFp3VFJGbzFWWkRua3pFcmdBNm1TWlppOHczbmltRUpiMkZ5YUtOWGZqaklrY21ObThLeUY1QjJWM1hkTjFWWWx3WCBURmZHUEp2TTgzVEhtMUdWNEV1RjhWS0pGb1ljZndOa21URERBWXhiY0xhM2Q1R0s5eUxUTWN3U0FtLzBHZkFjK2ZrSis2VE15ekh6IE5wZGtNZ2NsQXJlMnRPcHNUSXNJQzRKQ0hVcDZ3bnhvbVYvTVQyVEd5SnQ0UG0vWW9iWHlaRnhLVm1zbzRRSlYyS0R2NzhBUHYzVmogd1duRFZIUkZaNDZscTlCS0t0VldxWlR2bFdYTTZwcW5yZXViUXVLaUdsYXdmV1F2YXFHWHNCdzdaMUFlVktzV0dnb3pyTE04SEVrRiBqNmYwdzVEZ0FZS3ZTT2NVTzRXRlgxZzhiVDF3OC9xWUMwNGRrV0VoeWlrdE5jakMvd0JoKzVESFc3QmFpTzkwOHBJN0t6azdrdVJHIEdBOTdTUWZINzhBSC9ZQjBsRkRSbkhDZUdLb0dXTXhSeG5TUmNTQlVpaFhieGtMcHkwbVdJWVlXVklzWm1LSzJjTTNOWklPWjN4dWggWXZkeDVIMkZCN3I0c1Vwb2VwQVdER3U3NWJWWE5RdHBVck50QWJ3ZElXMml4cFl1cjhWOFAzVTJkRHI5azk4Sjd3eVdiV2I0VUpreiBnVEUzL3dEdURmOEFxU2dVZVF0cTVFK3ZxNXVDeUJ1YWVvcVhmQkw3RHdNQTdxN2tINWd5SndlWk1JQjFXZTR3QWJKNzFlcmsrRGhQIDcvYnUvZ0FEOEFBUU15czRlVmJHelFCcUFIYllkV3FZL1RIYlFhSXlLOFd3cFFzUHhzeENyZUdIc0JiQjNTbjN3Y21kaldpNUZsWlIgd2xvN0gzZFlPQW9OdW56L0FFN0dTUFhiYllGa0hvcVN0amErY0JydmZBWU5VQ200RkVQVGdlRnd4OFBlSmhnT1BUNjU3Z0lsalROeiBWM3pGbVJ3aVNFMkEvZ0FQN0FmeDZrWmFOSUNWeXlVRjFnaHhqTWRwc3hoTXpodDIvZGJibVh0VEhscmtJN0s2MGhwbERISjJja2JzIGp2UzVaMGxMaU1BRzVOOFZMSHA4SXFuMXYrV28xblZwblZjNzJCVzRlajFOYktQa1FDQmNHQlBjSmxxY2tyOWJ4MDhiNjhMYnd6RkMgZ3g1T0pLU2tnOS9xSS9oMmlRai9BRnVWMU5ucTlYSlNxK3NoYlcyaVlTdTZRcTZrSzNkekJSV2xpMmdQWDh5WjRjd1FsK1BBNmpJYSB6dWpRak14enphTy9IMzdBQnovN0FiUjh1Mktxa0VxYkgvR3M0V1NOaVRHYzdPRmV1QlE4cGxEemk0VnVZK1pkZ2RQNVYydjJQQVp3IFBjeVFOSmR3blBqNERENzhmUWVvR1pmSy9tbkZVV3hrdTJLR2h2NmxIQTFXanl3NzRyNlpTaUhhaDl3TU1sYnZpMjRPR3FpdEdFODEgR0Jtb1VvTFdTZTk3MkRBSUFBQmJ1SURxbWtwV2JaU1MzTXFoK2JqY0poZ2Eva2t3YkZQdXh2SVYwVVVLczZuZm1SMTlqWjN5QUNPSyBIaVJJNVBQT0dQRjVDcTJyUnZ0ZHRhS3dja2U2YVFwWWE3VXdxUEU2R3E2bnlsSitsOUp1WjFzWjhiQ1k0UjkwTVRMSGM1d3dxTVdHIHUzc00yTDZub3dxU1pKQ0pnYWhsSk1uT3ZSeFpxS3JMclJFQjJPMlBVc3FCbXJzMkFtem1WZXpvYlNZU01odFo1UUJuWmhHRlhnRGcga3c1K21iSWNzekIwalMzZzdGUHhHNW9LRUNURm1TUFZuWE9UKzJZNGxXUFp2QUJMK3Awb3VnQmRieHEvTldmOWZOYUpQN01pYVIyUSAwck1XVWJPcU5Ba0VEblQvQUtIU3dtS2RrYWZiWU1WZlN6dEpyS3dRTWtzUXlXU21MdURPUUVzbXlsc2U0ZHQyUndXMkJiMzdDZkIvIDJ1VEdBNlQvQU04UUNEanNBRUIxVkVoWDRkeVU2eHNzOE5xNjRNM09wU0phRmhWaXdOZ2V1YlFtVzBCdUN2OEFUM3lSandEcjB5dVkgRGhBblFsa1lycTdNelZYOUpPZTIvbittUXdIVjhPTHlReTVUK25nd0wwNnU3WXJzbGhLOWhXUmNpYnFFQW5tUWdYaHpRNGY2ZkJRNiB1QW5NV1ltcjdaNFBFTHNIUG43ZndHLzlYWTA3NlUzd3JwL3RXL2Y0cUdUUzdlYXFnYzR0UmJzQmVtSnF1MmFWU2lHUG1MYmdIOXZoIDg4bzg4RDhZaDdtVE9WZFYvQndDQ2ZYK2ZBUEFkQ1dYNllQT2doaGxhWVFiczhXM0c4bjlNRnMyeHZ1K0RYNzZYR0F6SWpsNUZLSTggWTA3Mlk4ajNCemp6ZUs0bmp3M0h4MVZHc3c2ZTBSMlIzcXFwZG5YSWRnY3dXekZUc0pmNlJiVlNCK2VCM3lHdDFXUW1jVHI5OGc4RyBlVU44WmxrR2tta253SFB1QS9yMVBKN0EwYW0xOGJRNEdxN0lzSm9XMyt6UTdKcVFIdTVpeDY1Ykl0OEdMUXVIN2dIbWJQQmdZZDFMIEhHUE8xMGJabTl1MzBIZitRZnIwZ2FYbVI1VWZPRnE0RzQxdDNoeWE5ZUdyaTlaSWNyZG1oTlhCNWk0R1hoNjJ3dmdPZnYxVm9aTVkgaHF5d00razdIdjU4QnY0RHBrU0dCZ3loY09VbTNBeWFkY3JtcFl4bldFdmlROWN4bXhOS1RLK1d3N2d0dzRmdzJwdFh6elVIR2NYViAyWkdPYkp2dS9nVDREK3dWcUYrcFpaTC9BTHpDNm5TcVp0aEdqVTh3eXk0U2RudHlHSGZ4N2NlVTZlVkVLQjNjYWRnZDh4eGJzZ3h4IENZeFpwbmR0ZmV0ZnUrck9XUmJralRtcHVCblZBSEdrb3I0U2x5RDFxV1JnWXFXeHF5dENOOVBEcmJKRGg4REJIcC9CMlI1WmxjWDIgek9PMnlPNEErL0FQMEFkTlFKVkMyZUg5dEF5MVJTMmVzSmJzMjhBNTZ3TDVtME9oeTlQb0ZjWDRhMmhwOHZicGlPQllhMG5Xb2pNMSBZTkt5czhKdEdybmdBd1k4Qlh6NytCQVYxYUZxeU5kYUhZU2JxV3lWdGtRME83RWhvdUIyTUNlR3RFUzBMR3JldjYzUWs3aDlicjc1IFl6NHdRQVlmOVJkUWZTTUxSMy9uM3VBQWIvMG1WUGxBdldXdDJNN2pRbGtIaHNsVHArcFNXcEJJTVZLZWxwcWFIbjFXbnA1aW42M28gOFAyMCtxaC9LSWZuRGV4Ny93Q2ZQdng4QnNCd0xHaVBKRzZDV0ZNcDQyakV4ajhCQUlzMDNzNmV6bEhnUjRmUHRmSWlFeEtpU3JwSiBYQ1JCanN5TjdjaTZVK09OakVaRW5JOGl1U29neVpZc09CYUVoMkNROG93dDFrMERiSUhpWllGb1UvbE1sZ0J6RkozeUg1aDlTSHFRIE9aeWI3TVRPV2p2ZkFWOUJmbjd3QjkraDRaRE1sVVBZUzJyZ1g4YTVIamZ5TElxV2pwYTJyMWV2SVpTSFY4T0g4TlB1QmdtSTl0L3ggRHpySVpyZzR2VUNOdmFTYnhQZ0Q2Q0E0RDFaV2V0UGgxSnMxb1UwUmNyN3VFUjFOVDc1WFpJbkNKb3VYeWdCOElhaEVNUW9Xb3REcCBjRlNVQ0ZPcmJOV2hYa3BJRmRhVGFYdjdJQUFBd0lIVlJST3NKOHBPL3dDSnFBcExTS096Y3lSY1NTT3FzYXF0MXEyZE1vVVduTVpHIFdaVDVVVjZKZW12TFlZYjRWVEJSR3c5VElVUmpnTTRqOGdRTVY5L1h6MlBUbFBjeDJOOHJLdHk0QnM5ci9MZlplZjhBaWI4ZU91WlYgTWtidU5QU0xJWXpMamhHU055UU5oNnNZcGNHeFRLendLNWdyb3NSVERVZXFvWm1zVnVzVHllTXNLdG1TSFpGbXJZdTJyWVRYSjhyLyBBSWVHY0U5a0hoNjVyUzBhbFJ1TThYS1BBd0gzUkNWWCsvOEEvZ051cVRoMkpaZGgwL20xekx0RUMrVldFRTArdG1HQ1d5QVZlWHcyIEZZQWRQY0h4YnRUa2lPcFYvd0FxUXlaTlhwc2FULzBUQjI2Z2dENzk5QjJETXJVWnFEc1ZDczdVaHFMZGxKVkE2a0cyN2xkT0FSaXkgR1VQV2FLMUJUSy9oOWhpOWJwN2hqYWtEZ2Rjb1F4WnE4bThrOWovZjkvWHovZ0QvQUZ1ZUs3YUtndENHa05ueWF4Y2xVbHA3cWRxZiBMZ1lYQnlwdUllRncyQXhEUTdVY09ZOW5JRlBxU3E0VkJadW5OV1psZzVhS1M3bkQ0RHU2QTQrZkFQMlIyM0lKSXBTalRCREc2STRsIGhhTnNmcW81RFNiMGFCWWc2MG1XUTVXdWRrSWVLVmRSR0hWRmFOb3B5dTI4ZW9XOXJhTnNVa0pMVS9PTkR0YSsycFpCOGVLNXZDNWsgZ3lOcit5QXlUR1lWK3dqekFKTWFqSXJES0tNaEJQMUlmczN6UGdFUG5CN01Sa01vODFtRENHemFQdjhBd0R3SFZ0TFE1UkZ5NGRqViBmV01uT3RvbWdDWTlQcEtlMkI1VVZoQTNJdGo3VTQyWU1UQjVoVjI0OERtZXl3TFJobVBlejlPZkFBSEFkZzY4L3FJYVErbUIwdFJZIFRyL3JkS242cUd4cjAvV3BXNENaTkZwckNUVEh0Z2U4TEltQjRaQXkxQVYvREFOZ2lxNzRNV2Z1cVE4Yjk3SDkvd0NyeHlOWGluU0ogaFZLMmdZa3A4OWtDS2EvTWlhWjZuTVNsZXA0c1dHUGhtQStFTXd3WU5RL2x2dytNVmR0bjdJYjU5K0l0L3dBYmRQZ0RrbHhNU0xuRSA4VGlSbzQzeGphTTF0TXFZbkRNaDc1YndPb0pGa2prYVJra1Jrd2pTYVBLZUl0N3QxaTR5eXBjYkE5cDU2WHRmc0VjTW5tQURsbkRjIGs5Q1VteEhmQnJ4RURub3RUbnBTM1Y5Vjd4YWlleUQwTnE3WHdFYmJGbW0xZFo0TzdKTHNiUDhBdHY4QWlndjNSaFg5TmFpS3F2aXQgM3pKaG00YnhzbE9CNmZmR2hlaDZnaWtRV1VtTUJoYlczeDc3d1E0SjRmQU56Qm5GM3ovZTNnVUUrQUFBUDM4SmgzUTRYTFU3SkZzYSBZRUcxb0IzWkhNRFdBc1lybHp2bm1jeGY1aER1QjhtRC93QWxqME8xRnRZd1F5aXlUM3ZteHcvdjREQUIrLzJWcWQwVTZ2Y0szaWtNIGlOU2VtNThHM0d2WGtxN1NIRmkySGE3SS9uR1FPNGZyT24xLzNIVCtNaS9LZDBVa0p2OEE5K2Z0L0FBQUJJK0dtbEt3YjZMblBTcHUgSWtZS2lRUlMyTnh6MmtKZ21aSGxhNllZNHRUcVlpSHdyYlFPeStwTElodEVlTEliV1Z0UnprOEhqanFPSVI3Z2kxdkRkMk04dEo4dSB6bVM0MTlxczZSRVduS3VkVXQ4RExnL2lkVGs5YjAzek1WdDRiZWV3V1FuVURSUTZ5amNKNFRoaWZ4dDErQUgzNCtBOC9XUmcxQU50IGdFdFVBWkpTWVlHeUhaNG9ja2VUMU5QVGFscjA4MFE3UU1JYUd0cmN3aHhVOVlBRUZnODltMmhtR25UbFhHL1BnRC83RHY3NHVCZlQgKzZscU1kQmMrdWF0R1EyMlI2M3IxM0xTejByNVY4VEYrWnZDMm52ZytZRHhZTExuSVl6YTJoWmVYaTBqaVNqOEJ0MUJ3QVAyd0FJMSA0cXJWcFFVdXlhV1RYQ3JvWXV3bzFlMmc3YWU1RFl0TkZYcnpSWXlJUEQ5MUlZZDhIR0ZXQTRRUGg4WmZDaE5tKzdPenhzRy92eC9vIDVGamJ1Tnp2Szd5U0J1MlI0d1V5YVNUdUxiTmpFWUM5dzhqbnJGSnVLcFNKbktSUWlFS3paVm1GOVFtaGhHb1h2YWpqMitlckxMOWIgeDIzVHZVcm0rR0RaNjFiQ0p5ekEydDYzaU1rcFhYZ01xSGl5R0xJWkliaDh5Q2gvUDNnbnlobzJ6M05oRGZQai93Qy9uMEVCcFZnOCB5amJ3YVZjVzdJTmVKdU1sVFR4MnJPbUlxRTBSY0ZjQ25zRVI4YjFCa0REek40VDErMnZoMW16YlhoampTVlhPM1B2QS93QkF2d0ZKIDFuWkhaSFRKWjFKQzBNbU5paGpWZTJCelllcHpWZHlMUmF2OXJnUTZIbVdSTVg0Y0NBUm5vOHhsSkllNkRQZDJOKytHL24vZmdQV24gVW9VQjE4OE94a1ducVZTcmlxMnBDK0gwWmg3anRTbkxrWGdMbERJTWpKM1VtSjdCODdoN2E4R0NaTXB5Wm1SL052QURnRy83QjU5TyBvVnhHeXhTQ1I4MlVaTGhIMllBbDVMYkRMTGdZbTZKdjQ2ZUZWMWpLeCt0Z2hlWExoa2xDNVI0NDhYaU83SStDYTZoMDk4MDZKQlJiIGFKN0k3SG9zTjJFdURVWURpWmlIWTZSVXNXYXYxdUhNVnVZaHNDRzFUN0F3VlZzWHhjWHpuWk9FK0EyQis0Q2VBSGxqcUlJSi93QXkgdmJRVGEzQ0xkVkRXMXRzaFB6cEd6eXJsRTAyVTFDTUc4Y3czZ2d0dkRiYUNseVFYK0w2Z0diSWsxZHgvWU4vMzgrZkFNaERxK3dKZSBXN2FmQXdmbllaRFpJZy9KcmZoRXpkSmF1cnNoR0hEcmY3SjlIUTA4RnlSNVp5ajQ4MjhqOTBhdDM4QnYrQjgrQUFJSnNweDlPY3Z2IHd4a0ZXeUREa2VvcUlqMC9WWmgzbU5DSlhyNVl5MlArRzRoNWdkZzdxZ1YvZS9KcS9PY0xVU1VtcmNEL0FML2wzOFFueVp5d1JwZzYgdWRpRXhvbTRFeWtqanlMWko1M2NndVAyRVh6WUV3c3lnS3lZSTdhZ081eHp4MjdRQ21yeHkxbXI5dDhkVksveE5NR2tIVm5uWTZhZyBJVFZQV0RzMnNMZ2hnWGd0L010Z3lLaGo1aUdIMUgwbStWK25Rb0RBZXVKYlp4Z3ZIYXdXT1A4QTdBTWYwUDNZc2xndFN0SkdvK0JhIHRZMWRZV1V0WTA0dm1IdXQyRk9pNmZkS05TbElRQXZEUXFITU9LZE5SMjFQd2hNaU5wN3VUSEFvOEhQZDNmZmNBd1llK0RBbENPbk4gYmdaUksxY3BWUUU1elBZQ1dBbDc4a2FBSmFWK1B4RXpaMXZINWxqY2ZnUEdGbU0vakNZSTM5NEFIejREZndDRDdHeGlSSERWUFZkMyBIcmFXME9yKzB1TlhoekFaM2NPQnkvaU9GZ1RGc3hkaWZXNjlEZ3FROURuSjdOV2F1ckUvdXh0SndBYkI1L2Z6L1ZtUlhraktuMlpCIDJGcElzaENoa1FnQ09QR3dTWTRsenNaRHRGYUlFV09CaGJsNDk2SjRwREZMR1RKR1lsWmxraWF3TXlRb0szaVZKTjJHY2NtWmg0eGkgaDV1Y1NKTkZocExaWkVORGFJaGkwTGFsdEt1SCtIRGh6TjRZSmpVK1ZlMjBEREdNNHQ4c3pZd2xYaERuL3dCQUFiQlcrSFhjd05XYSBUWXdFeDhQT21TVk13Qm1XZ0pRNGlidWtWaytJSDkwK0d2dzFWdFh5RTdrMVppeWhSWjgzN2NCZmovdUE0QWY3QVpSYkFxNm9aREhqIFpJeVNyZFRNZDJqSEQwUDVZRTh0MkFZc2xQVDNCUEFUUHdlZWFtUm5ac1JaTm04MkVlQUFEWU4vd1A3QmkzN05GWjM4VXN0Mk41d1kga05YbGZJemtlV3lQa29TK05FTWdZK0d5R0pqZ3RnOFBnVnpDSjIraHEvblVud2Uvb0lEM0FlZk9EY0Zlbi9KeXR0L1QreHp4OTluaiA0eDhtK3M3Y3N4enk3R2VzYXJIQVY1UG5QL2JFaWpkOVdXcUJNdGpVem5yZGZXWTloYzRvMVZOcVpSczJwZFE3QW9MQ2RwN3htVGNHIDVrdFNxOEZsT0VZMUxiNEVIVDR0NXh4eHJPMU1ES1J5RDFlckZBOUw3aWZ3cTRSWWJzdDJ5NlYwOWFZTDR0UEtrdHo5RnRtcFZYUEsgUks4V1ZQVjZkVHEvY1RKY0w2V0pleHNnR2dxVnByV0ZtSVNyZUFySDFZaFFaNjNGOWZ4UXZiQitLMHV2NmZGVWYvaXdMSVpMT3RBUCBHVXpGaE5UaFh0a09VcGRqU3BqQlZka01oaVl0dUNGeTBoOVA1TVVWMWxtQm13dW5pMUQrR3dXNmY4K0FUOWlJY2UzNlhzOTh0QzJsIHNNR1Q3c3FkZkdvYTlLNWxkelkwSVpqdHUrV1JENGRzNXc4UXFYbUg3VU1HZWJPZi93Q3Z2M1YxcGk0Q3FuMHo4YVdPUkxlTnpWcTQgc1k3dkhObjJIZ2pqcXNXQ0tXWUZvM1dXU1NDVzBralFVekJzZTdDeFFvZTZ1T2xMUjlnU0hkd0d4TmFXcTdiYzZwUnQ4eU01YkhxYyB5eGp4Wm92bXlXQ0hjRmJ6S0hjTEFXd2Y1cGVBNHdZVTdQbyt5R3dod0I0RHIwYVczbm00OE94b1JqaE9veDh1d1NRU2RQYnd3dm5kIEJlcmxFWkY5d0RtQTkyTFpHWThRR0J0YXNCbW5xMEt2cUFuaTdjSnRYeit3WVZGNzlWRlMwZXdLUXpLeDFjOTVnbGhXQ0hzaUlQU1ggWmZZVnV4cFFtVkZNRUlpM3lOYm1FSEVKdDhBNGg5ek4wR0xMd0UrOGIrQTMvcDhDN1F5Mk1tNEgwMVZVcGdidVJFdkRKYWpFdVpLcyBhWFkxM09BOE95Sjh5MUdRZ1krdjg0Y2RzZk9EUFBoRGFQOEFZRDRCZ0FjK3dSSVlwSkdlSjBXRnFUaHM0MUFyZWhlU2hoZHg0dmliIHB1MFk4dGpXVlVJZFh6MlpXeGZkajlOakh0dURIS21XZE53dzdhQUI3eWV0R1l2ZzgxRFcwMjFWWnRBNXVUWDdDT0xwSmd0NEZUS04gRDVzNmZEcDliVHlIOGhWODhIdVl3WHlkWkJtLzl2NElINy8xeUM3b01VaWp0WEl3OGs4cEhxM3FkNERyVFJFL0Y5eHBrV3lHQXpEVyA3SVc5d0RuTE1UK0ttT2NDeWd4WjRTYi9BSC93R0gwRUF6aUZieUlDK0hNMlhERzZiMGpoSmF0ekR0ZUdIQStKbE5uSXJkYnZrdERtIHI4eTFCNitlYWc0enRlMERFWjRDR3pieDUrM1QvVVBUZW45YmNuak9nUlhCSnRTN210a3NJaGJWWTEvTDVRZXJJQ3I0ajYzRHNpR2ggc3BCd3NadHRDQll4anVZTFEvNkoyVDNmL1ByK3dBQUM5dEFtY3h3dmlNVmVUbWlFUElyTDg4OGZCdm9SdUt6RlZTWkZRaVV5SmpKQiBHMkZ5TkhiVjdlRnk3Nkp5V3VpbFRPYVoyaTZDVnlPK1MvMVdMaDFMTEhaTFVITEI5UVVWZUExTE1BYzhtTWpoQ1RxcmFqeWVCK1lVIEdjWDhHaytEUFluMTgvc0NEMG9GY2ZETWxBNmE1MlJLWktsenJJZDhYeUc0V0ZEcmxvbG9hWVk3cVhCVzRkazFJZkRCdHVQYmt4eVogb1Z4Z3poT3liQWZBZWY4QVA5RFk5TGNNNXdhbTFTRzJSWHI1bk1seDFPdG5sOWRUeWdzU0JLR1BoL0REekZDcjA4NS9JTlJrWXpGRSBNbXpIRWtJYk9IOWdQZ0QvQUlEQlYxdVlPV000VEF6dm5hYnhvR3ZWdDNrTldsZlVSdkQ1U0tRME5DZGFLR0hEQjF1WTRRL25yL0J3IC9mSll1Ukdabmp6WndDQThBZjMvQUdCeVJORHVsNU0wU0ZJOHF4MjVQc2xySTNWdDIyUFB1SG5xQXhrUnNzWFl6cTZ0bUxiYnhzVUYgRmU4RzdQUE5mSFZqSEJPVGFDY21xcmo2VWxNY2dDV3k1TUtRblhCU2RpQ1lBazJLR21ob24xdFRZUUhZelpzT1BQdzlXZkhXQWEwayBqL1JuWlVGVFd3Z21Qa3djck91ZGF1V2g2N2lFcXlaTkV1bW0vTXl0MlpzVkJsd0F0WTk0aUZkOEgraGxLR3M0NG1EQU9TcmhSNlJuIEdUSmZMVG9VR0tUellhM2xEWXhoaE9NR1VXbjV1ZEE4Z0RzRzArUkRrRnZwNnNncUxyY05YZml6L3dDYjFKRXpLckNhRlFRQ0JtVFEgT1BGOFhXWDRIanFzZDZ0RU1wUThPZXhnYlJBd0xIU1ZNaGFqdFYrbytIR1BPNzVLMit5QStMSlZiNS9QVDdBQW5FOUdlU2d2K3llZiBma0FBQUFId0Q5MWFqVWJZRjZab2Z1WEVha200SUdtL1NycDdwK3EwOHhFVHdCN0NNVVc3UlQ0YklIc2hiSU9FSThQNVZNV1NmRnhtIHh1OTJjSFFmMCtnNy9qRHZENURwRFQvZnk1ZkNTN05Xb3l2aHRPR0taUEIxT0hGVFphYnpBZ25tSWRrR0dUemxhRUZLdWVDdkl0OFogbGhIL0FCY0Q0Q0E1OVVTQy9IMzUvYWlLUGJGMnhFOWNpdmxKbm9HZFRna09rNTBCMzd0VnpZU2EwY2ZtSWFmVlpkbEg0VGoxZ1B1SiBoWlJsZkVtVDlra0lEUHNBREh0RnNBQkJCbTBtN0JBV1FUVEk4aVJUeFJKSThjVXVram1taEVRajNJSXhxRVo1U2ZKUUtvc25wQ0NWIG9wWlRJeVZnSFZHb283V1lrdXU0U1U0Qm9ZNCtHeTRTYUFRRjZrYTdzSThuUXdsUHp4dFhGdTN1bnNPSmNMdUZ5OEFOdzRXK25yZnogREJCYjM2djU0UDZ6endtVC93QTdVQUFPMFd3QVBQdzdqRGo1cnJNZkxHUTR5ZlNNd2J4ZERvMVhyTGk1U3NwVW9PUCtoMXUrQnlLRyBqZ1YvNExnellvYXZ6bEczczNnZjVBZi9BR0RZWWRMWDYzU0pBRkRkM2FOU2VWMmN0ZU9CdTBPNzNZQktNTm9QajVYN0lIaHcreWZKIEFkTEVJRlY4NVJtZ3F6TEp5cmdqczhZYitCUDcvd0JhVnM1YUYwdzg1Y3locEpxeXBxQlp0d0RjaVEyR0NpR3cxekdXNnY1THdPR24gL1ZUMWYxbzhUR2JsRm9FOWpOaFBQN0FBcUwvZjJxSm9sV1pRK3FrMjNRSzBqbU41SXhIREhISVdwc3M5cG14cjB6WXllNzZKbGxhTyBBczZETE9saU9VYTBZL2FsTGdUZlBKeUZEaXVwalQydnNsY2tRK3I3VGRjRlNQbHYxajNDcmVaVzVoVFpIdlZCWHREZ0h6WjRiSStMIGN3aFpCeFNZRzJ1WWZHZm9yenZhUlZ6dy9jQlAvWHovQUxMMWdmTFFNc0NlK05ESS9nYmF1QjJzMWZQRXNlWVcwTFV6ejR5ajNDcTIgU3EzQzFIQXcxZG41Nm90akNmUEhrWnZleVBHd2YyRGtIV1JHdGswZTJvbGFvSzB4QzVMYldOa2FmSGM3cHZzQ3diVFRwVFkrTkdtOSB3RFdRK0ltSWdlK05UWVBzcTB6RDA4dmd3WVN4NFRWNXZqNzloeDkreHh3bUZNd2J2T09Ic0ZuVDZ1eVRGaFNiWU1XcitUVEQ1VjdZIDVOREpZRDM4eDhwL2o5cU5XbmpUL1A1NE1HSWF1TThKNE0rL0w1LzM1OTBJa2tqMVVxdnBwQkRoRFdzVnM4Nnp1SjRzUlVrRmpLYmMgOWZjdmJpMis5RFJvVUs3eUxNanNGamZ0M0krMEpJR3MxbFJ0Y1RYSGNiNmt1NzVEajU1WGxHTFJ0cWg2OVpHdXlLOWlmVzVTSlgxbyBIbHNlSTdxS0JoUDJkNEFNQ0hCWEJ2QTJmYXdkWEJNY1g3Z0w4QVA0NytmNGhZYlZmVUNvMzBTQm9iQndyVzZ5Tk82aHc5S05NT0UwIFBvaTR5eWhQNGhaQzB5SjU4UFkvejhXdFpaU1pWQ0dmNlg0bThQZkFCamhnd0gyclcrbGU3RElET2xVRWVKQjYwcCs0Nm5xZDJzNnYgNWFlZUtMeUc1TWc5RFE3VXF0d2NDRU1IUFg2MHRSUEpyTFFMV1NZUFkwa0h2NzhnNytmUDRBQ1E1YWxiM2M2UG13c2p0ZjhBcUN5WCBhd2s5MlBYQXZHRmg4VXFscVdHd01pM1pDZXlKNUNhcXR2TFlLMzNmVjFjWmovWXovd0QvQUJDL0FEazI0MmFTRzFoa2RtRWc1OWM0IGZUaXZ5UFU1dm5qanFzWGtnR2NybkJFaktnMUhJaC9rV1JPY3N1MHFjaGhUY05sMjFYVzQ2V2gxSGNDUTVaSnR3MUFwOFpUejZydG8gZ3d2bGpQaTlWOWN1SkN5TElyZFBRc1hDWkJnT050VTdNWnVVYm9UKzdWY0QvWU5nOC8xYWl2OEFnNTVjVlVOWEEzNnFsSFp0WVk5ViBxdHNWNlhjaGN1VWVEc0RnNHAvelhEQU9xN2VlTm1HWW1ocTlaN0diU2YwOXQvNEMvbitsdXBrQ0FHM0VrWEtWQXUvTlMycG8vYkd2IDViSVVWMTQ5TGhyNGVxMXVFWVpONGFyYVgzeEhaQmd4RFZoak4vV3h6ZjhBai82ZnFlQ2x2TFhBNGVxbkprbFdFQlZmNWdQVEpoaE0gSzR1VzVWelpKQkQyZDhjRnRnVDJxQVFVbmhrWm1aRGFGbDVkN1JwTjJOL3YrQURBQnZ3c3p5cXpZUDJPMHFoMXh3a2ZBcGdiUHB4VSBjSS9nc1RsejAyTXEwY1lTTkM0UlFWMDR6dEkvZkk1N2NjY2x4V2psYmR3cmxKbktuUTd1VTA5alBLbzRQbExadXphbmF1NURZaGkzIE5obFZMTUlPREl5SWNOOHNDSHZ6ZzNJL09TaXVNSitFU0haSFFVSGYrMFd3YkE1c3V2NURIVjluYVh6MWJ4cGlHbjNaWVY4dzdVajEgbERjajFUMTBlcmI4RHJUSXQ4Z1E3R0JKNUE1Vy9KaWhSWjN6elp6OVAyQStmd3JvWUIwMnJrWHc4R0F1N3RsQVRsT084TzVrZFRESiBrcVhYS3ZEWDVsd2NEUS9yYXFlWUVQa20yUG5CbWJaQW5zQUFBQUg3QS9INW0xTElZTlByWWsyL1ZXU05EdTllcmV6NU9janFiSEZpIDNlcnhYemVEQ0hNK0dQNE8rTDRFM01KN3BpU0pnM1lKVjMvZi93QmdBU1I1SkdqZDVIWklya2haR3d1TkNpR0pnUTM5S1NSQTk4YmwgbGVDcEdPUFkzSXlkdC9VZ2xGWlpJMklZWFlyTGo0TkFmUFRDOEllS3NnR2RaQnNhMjZpaVV6RU9TTXk1a1hUbkVlM0tFUStYczYyeSBKNjN4SmZyUUhnVHJQSHRBekk1dmUrMFI5QkFIL3dCZ1Fma094TXdNNkFUTXF6dUV4UTdKRWtIZzlmbHJVZkUzRUNlN1BwOE44K0doIHI4eWRXbUNrcXpNSGtvK0kzQi9OMGVmOEErdngvb3JYMDluaWgrRzErTmRyeUlOVC9NRElhU1k1R0xWMTZ4bGNQYUV4T1c0YjU3cmQgNEFiQm5nMXY2R2gyK01CbXphU2puL1AvQUxCMUpXUTRVM0ZxZGJQWlRzTVBYU1l0R0lRUFVhdnIweE5RNjlxOURoL01NR0laaUdueiBYaWxuQTgxSi9HZVVMTE1jMk5KT0gwRzNRSDM1Z3c2V1pkelVMSzhqU3d5M0NGU083M01iWmpueGpYYUs3clBJcmxnQ0JIalJNY2M3IGRUbEhJWXpGN0dwYnZQdTQ3ZVBPWENyYWFqVExwUjc0VE1yT2R1L0dUYVBza3ZpUXBzaWRVckZWNHRrVHRuMVVURU13bnc1MDhlQjIgZEdHSW5HVWJ1aURONy92NS9qK08vdnhoTURORmFCMnJTWGNqaEpxVW9rc2pDWXViT0lxYklVdEdYYlF1bjAvZ1ljTytHR0R0elBxOSA4VmJKZVdaWVYvWUhqLzU5N0FINUI2SkxJUjdBQXBpZVpuaDcxRC9XMnhnY0E3Qkxobm9xbTBLLzg0WVd3NmZEOEhQNEhZekl6WW9lIExNVGVEUVQvQU5qNit3Yi9BTk93cFJaK2VRdHJ2ZE1OMUtlcDlBWHRVQzJISVhHNE04VnNUUU1NZkRjQTlWbVdSd3dhb0Z3ZHhvWlIgWnRDcnlhenNtSGdBQy84QTlnNnZkUVNSdE9pU1l6R2VPVjF5K25rdFFBaThlbU9NRXNZMGVUZkY3REN0ckJPeEk1TVl3QklnUGRuMyBjdTkyei81Ym8xMTUrbExRTVlMYjJlS2JhdDJPeUlBbjVtZFg5WkdMUXE4dFkzZFJlRHA0ZUZNbUo3SUMwOFZlMnpwaE1ZcmxQM3pFIEo5Qy9ZTmdQOWVqVFFoMUVGc0NtUXpIY0JMVlJWNDJyck41SU5zaXNvZGpXZ3ZIbks0QjdJbjFWRGNGdHZaQVFGZ2dUbkQrbDdNSmcgNnUyU3EvWUFBNTZmUDlJeGtMM0ZsYU5iK1NraXpFZ1BwL0xzY1d4N0JzcFhySENyMm0xN3RUdzlQT01SaXd4ZkdBTzFLVStwcCtGRiA4cEtJd3dIaGoveTRZMUZ2L1BjTWNLK0IwOVg0dVN5andHTkRpall5bTRRd3dkZWh0RVZlc2FYU2FlWVdqQmVIdURKT1BwNTVxVzdNIGVlemRaa3dmbXdlRnVnTmdRZjJBWldhYmJsRW0zZzhxUlNnZW9hMnNpa2lsWkl2dHlDT012a25GYUFKVWxJdjhpSTVOK0x1aDQ1cjQgNlBNY3VxeGNnYmxYZERHMlFtclp1d2w4TzdEN0NNRkFMdlNKUlBJZk5tQm1TeUY4TzFQbFh2bUgramhRbjlKTjdIdi9BTy84QjZmQiBpM0ZzOGgxN0svMDJ5aVRJdzJCY0dvcGdpUXoxMzJhaHRFMWZjTlBkVnNreERzRDIzR3krTm96Tnp3bVQ5NnVka2Y2LzRBKy9BQUNsIHhCNmI3VlYzWjNWMnBBMHUycENKY2dtVjdYNm8rUldoZXRENGZ3NnJUNnJUL3Nod0VRYmJHM1B1aDltT0pJVG5BRDdCdi83QkFwK2ogY3dHSVdFa1pwaDJwK3k2M0NOandIUTJoVDNSRHMyVXJCMTh4TVEzd3dudURKdnpncFVkeVo1YU9NczNtOWpma0gyUWRnMkFBTERjbiAzVEtpb2F5RWh3ZUwyMWFjKzduN2hXSlBUSFdSSXlRYVIwamFGK2UvVG5pTVZZckh1NXMzZkFGV1FPNExJc3h1TU5XYTA1Mm05azFEIHUxdFJBN1ZjeEJldUJFbEtiNXA5RE1LZmNISk9IK0NxVzBHMEdZUm1aN3EvOWZ5aUQ3dStmMy82REkxL3BEYktSRjhTVW5hcGJhdFYgd1pMTkR3ME5QRW9aUW9XQWk2Zkk4ayt5VE41Vko1QTlqTStoOFpadnV4czUvVDRCK0FBRC9VZE0xRU9DUllFeXZtakpOMytHK1NrViB2Wjh4ZllVTkRpdTZ2WEtHUERya09Zbi9BQUhBNGVzRUMxVE56VnlqTnZudi93Q2ZIOEQvQUU3QmRvSUJSSFNhNUtMZFhBZFMxUGtwIGJBTmNUQWt4WFA4QUV6VGRvTWpBeVdSVzVnUnlEWXdPb0Q0T0JTekZmVVk4NEhBaVNrKzIvd0Q3L3dDZkJKMmpNU3JBOE1UN1Z5TTggU3dKbmRldEs4VzVXSnVsRkR5Qlk2alJ4eXNaaE1qb2pzaWlTNG43Y2J5UzVNZklvV2ZIbnBiMUJwMHNRVTRYeG1sQUpzYXhtS21MVyB1Tm1GMGRrcHV1V0d1YWxVT2VRM0JrUWpBOWJucVI4OGppQmd6RXFNR1dwYUhOUWV3NHNIdGd3TUhUQ0hzQWZLWDNEZ1ZHc2xWY1BiIGFudUJidWFPSmZGZlJHMlJaVlBwOVZtSWxxS0Q0b1REbEwzaFpjSDNyTW8rY0dPQkVrMkRRUGZud0E4L3Z6OHEwZG9kRTJRZVBhYWIgYXNoUHZoMmJSSmpKdWFPdlBkWG9jdEVhRTlndUJ3MHhRME44SU1saXdQNGVHcGIyeENhT1RXcGpkcVNEK2dnRC9VazZaYTNZSWZUciBVQzRrMjA0WnBKc2lCM0RsQWtPbTF5a0lkeW1Ldm1MZDJVblQ4enVwc0krMnFCTWRzeGROaktndFRoUEIvd0JnUC9zRDgrV09WOVN3IGVrMDBybVZaZExKTkZJWE1NRVV2MUJsMDhlL0hKdFJzRVhISHVCYmtFaEU2UXdTQ0VvSm80VWhacDMzSTEzdFVRSk5PK0tYSXUrU1cgcnR4QTUzT3cxUTA5TW5oeDJicHpoTGRoWlJlcnkxb1BtVFcvOFFiTzBVT0xQb1krcTVtalJqbUJrQ3lPeXplUUI0akZob1Y3Z1pVYSByOWx3WU4vUCt3RERFQldTc3pLVzIyNW5DMmltV1RPdHNQZ1dhS2ZQVi9MVzJpeG5aOEtReUFjT25tQTVpMEppcUJJSHVTREZsOGZPIE1uRWxKMlBZRDMvMEM3RmZ2RU90Q0FFWHB1em5aYlRZYVM3dEZxYWIzaUk0ZHBST3FCRERqME95RnREaHZsb1ZYWEw1c1AwWmwwNSsgTU9jSk5neitIbjlnK2cwNXFldm8vWXNQbTlzYUJEejBsYjVSTWNIQ3pROHRYYkpSNllRZkRGd0lWa1RONE9kd0xMMmNtakMxZG1KKyBFZHZvSi9ESHRGNStReUs2N2lzNmg2N3BJOEhlaVBkSGsyRlh4M05ZSjl0VjFVeFZUU0xTUlZpQWNrYlBEMnlVTXNhQVBieHgxdU1JIDhmS1N6QlROdmhKcmNDQmphaEVjTzFHSmI1K1FydXB1dDErWUhyZDhobWVIL0FzQThxc25ZMW9GMllNQjRtelp3QUE5K2ZIOS9QbTIgWlc2SGR5K1Rjc1Urbk1tekE2M3hlN084SGV3WFkxVHVRc093VEtmb2RiY0lhL2FsYzZoOExwQnA3eXpvZkpoaU83Ry9kZkFZdnlDLyBBTi9QdVlId1BLajIxQXJsbFNVL0RWRlc2bWpXcDhlbkljdDhVM0t1VENmY0ZWUGdlcTJRZ0dlRHhENTBNbnlob2VVWUhTWVQ2Q0FQIDI2L2VBUDhBVUMyVlBKYlZ1dHg3UUJzaXBYTGpaYTZGVVA4QUwySm9kNmxGMlFRaG9iNFkvTUQ1T3N0UFE1MjV2UEtHVzMrRTlydC8gN1JBRjgrL2JBZk16SmxHMEFSSGpkU3JoZlVlUTFoSEl3YnV6N2dyVU1DQ01XeU5RS3lxME13dDByai9DU0w4MGJ2OEEyOGZOanBQciBhdkhsTDZxa1pVMWtUN0xNS1M4cjJFQnRoVGNMNUtDYkhsTGZKRVBUR256T1h3N0c0KzJxcGlzMmFtcjR3c3dHRTluallBSDdBQTMrIDRFYzVwNlBMNUpYbjE3YlNxN3VEYkxZSmpVMEpGcUliUnBsUXlqNHdWVzRPREp2QTlQZU1iUXFheHVNMlkrRkdabTgzdm13YitBL3IgN3Fvc044ZEhkVEpXRGRPRWExRU96V1NzbWl5Q1c3MVhGUFhJVVBURThPK1BreDhYSEM0RWdEZ2VCcDVQMktEQmlPRUNXamFpQ0EyQSBBL0FBSFZoTXUyRk94aW1kWmRRVFcxUERibFp0OEIyUzJHSCtKYUxZUlN4bnorRzl3RHpFKzFDSDVhWUorbVR0QXN2bUR5OG5PRTNaIHB6ZmdCOEFBUG53RDhmVXNkdWpCcVNLOEltU0o0Mnl4dmNSME1ackFZN1VjUGs1Wjl1TlJzUFZzNGJtQ2xsNGtFWXNPaVA4QWJuYWwgalI5bzROZEI1QmZtcERBZWJUMmM3T0U2cTlwUmhydElFNFBrVVNyaTRiZ0hmREZ3VW5NK0hYSitlK0k4emNrUGpPR095QkVmRStnOCArZmdBQis2M0dEQXV2bzhPbGlpM0dhak5EMXU3eUdyT1lObWxIaE44QzhMUDQyK1dTNEliZytITExYNTROOEdjRHRFWXpuQW5nK0FuIDE5QjRDL1AzU0hUeUVoM3VCUDB0OXpsSmtzeHdDOEhQR0t2Yk82SUYzR0FLZklkeURGRFh4RElWdlFKNGVCVlJINVFWN01lS3I3WE8gMndlM1ArZlc3MC9xN3V4TDR2bjZmckJEMzhlUEI2M1hsZXBiT3RqZUpVWFRnK0hzYlFaTlFsYnNreWs3Z3dPSGsrK09Ock5acTl5UCBMenZZUUljd2ZyZDJBQWcrZmNzalI4Q1Y4eldjYWtSeVIxV080dFA3dWNlZklZLzZVSW1ERkN5TWl1eUpORzJjY21PQUpVMHZpeFk1IHEvUFN5SE1oWXF1SnpCQjAxRWJTT3RDZXVzejI0RDd5ek1tYVFkRGcvTG56c3huQk02UzRHbGh1bEM4ME9TWWhPYm5CQmN3aFB6R1YgWEIrbFRQZ3pCak9vdHZzKzBLS0l4YTlzNnFYR3gyb1lMaDRZTUN0WTlhVS82c3Rjalk1b2xMSEhnZG90UzA1bHlrWlBGZzgwWVhuSyBhN0FHcDBsVlNRUHBad1NnT2ZHM09saFlLSG82MXZITWVnMHJvZlp5ajRya3BvVTFDd2Jyb055WThtbEpva2NtandhdWhkZkJyNEhSIDZZQmxXMG9CbE1ZRkpyZG9zNXQweW84eXlPRU9CNTkwNFl0SHZNV3pGa0I3NElMZGpQbFAwUFl6SXNyS3UwZHpIaXJnZ1JIUHZ3QS8gc0NDZzBIMXZSNnJxTlNIdmVWYXR3VmRNVjNZM0VyZTFMQ2FFaTFLNXRwSWNuTndZREZWektmcXREcStaQnVuem5KN2ZwdG8wOUxJSSBJRVNRWjlCZmo0RGdOUmV5MkYzNW1aVEFORnVXbTlTdFFEWHNkVHJmT1E3UWJMZ3JBOXNLYUhjSWRrV1ErUGt4d2g3OHdBV293ak0xIG9GR2JmRGRYSktPQXFMWVVGQ0FId0hYWUx6TDhud3pDdlB6Z2cxRG1CR0c2QnJVd05oaTBMa1NCWXFhbnAvRzYzdFF3bjhxYlY5dGEgV1FXczNKcHpSaWJ3YjVzajkzZm9QUGorSitra21WQWtVVTJuN0k1WWhMSGhIREllMU5oQ1QyUlJxa2VHUTlvYkx1b1BrbGpkaXp1bSBvTHV6eUJIcnpqaUR3YXFtQVB6eWE0NTJ6eUF1TGhrTGpJZEhQZE9FaUphU3QyYUlVMi9DbTVVcE5tZkRmTHJwU1kzcCtPQjZyME5WIFR5Wk45S00yTHk2cExzRFAreUVBL3I3cWZ2QmJ1UTlZaWZLYUtOQ1VEbTV5a3AxdTFFaUVSYUF0Q1FMdHFrMStIMjNjQTZHdmI0cE8gRTlIWEdaNWFLdkZySjAyN1VtY1BuejRBQnY0RUFBVE55eE5RRlN0a0pjZHoycXVaYUEyU3BvL0d3NlBNQXhaWUZ5bUVHVXd0OFBENyB5OEtROENEaGxHWkRLY1ovL3dBQjkrOCtiV3BYYXZGczI1clFBbnBOYm1Va2E3NUdkUm8vVGd0eFNnaXBkbllIQXg0ZUducmVEYTNnIFRqaDJ6VjJnWmI1emhJVFlIMjNlUG9QZ09qdlVUeDR6UXBHc2tJdFY1dmN4OGhnWTJ3Q2c5OGJlU1JqemtDWXFDOFR2MllpU09RMjYgeWNCa1phN01hRkd6bmZoY2U3c2gyQkkxTjNvTTA1M1Rrb0ZlbEE2a3B0RTBDbnhJYXNVc0tMVjh3ZXlRM0FPdG1QbVZ5aDJCUFZvWSB6bERSeVpJZHRrQm4vd0Q0QStZTDdJcHRGZmdaNVN3bElRME9Gb3NNZER2Z2dXMnRvS3BsWHJmQXBsUHZ0Smh5SHdRRGdlc2JjK0x0IENNOG5EZmE3Z1I4L1VXd0g5ZzZjRmlVK3l2a2Q4MWFSZTVEaHFNc2l0bE1obk9HZytZK09WY3BDSGFFTWV0dzAvVUpjSWRnTUk2R24gZ0tyaGNaRjA1VUNNY3RHcmtsNEFIOEg0K0FQNy9naDZub3ZUZmxhVDJTZTVOVlhKSjZHMjNIVThNUDJuY1hLVmJHd3JhKzRHRE5WVyBwTUhRdTB2YVJIRDhaYUJaTW5hbnVFeHhBUDJ3ZTRBQjBsSGlpU01hT1pJdE83ckRHclE3dFRuZ3hnbVNQeHhiZURZN1JSdHJ4VHRMIEsycGgzcG5RNnhodXpSYmVuYkdzdHAxdVFVUkpHYnc0cGlHSjZoaFk5YnlyWWh4UTJjcGFoSUFkL3dERG9WZ083NE1pc0t2VXJnUGggdzF1eUZ0UGNJWVA5SnkzdG5GN01Sbmp1alNlLy9RZWZiQ2ZBUkRwSmZGelZJZVhOUmxlK1paTFFzNXdKRGEzTFl5azJ2QU1XR3dURCBQYXVINWxxN2ZJZnd5WXdvc2VjTjhKT2Y1SU93ZE5TWlgrbjlTSUxlVlphNDJ6RElGUytRU3M2UGJCZzhMMUNZSnNOaGZFOThNZk1zIENXcW9hZWVuQjBZWVUzTVk4SklURGY4QVlQOEFNQjFYc2ZWZFByRjhjY3N2Sk4yUWh6THNpU1Z1d2g4dGtWbktYWEw1Tlg1amd5VnMgdDNaVjYyamdYQ0JCM05HS0RHWkdCNzVzZmdOZzM4QjdNRVNscDJFbnZoWnlnam1LUTdlUHJJa1NTK3pQbFdLWms4TU1UMHUyZElJMCBYc2htanhHNUVLeUl2K1I0N3ZBZTIrZk5XTFlRTmdxKzFhL2F1MVRVY0cxOHl0ckRIMDY1eStwMlJ1anZ4ZGtUNGVDZWgycUhYdzZyIGhZRkRnekZaTXpSempaTms0Uno0QWZBYkJpQjZzaFY1eU9rUHI1V21VZVNSdHdYeHFIb2ZVaFNWNUw1YXExZmFUd3NPNEJ6RXpqZDIgT0JpZDl0VmNGbmk0dXpOanhOODQzOSs5bjdGQjd2Q3FPMkxGOFd4cDFUYXYweDFMeVJQazJ4VTVJa3dObGIvRjFqT1dENFFtVnZETSBCdzVBUFhDbGNDR0Q1TXNsTFFSbWJtdTluVDRCQmZnQ0RzQi9wUDYxRk8xRmRvZk0wenhMT0YxaWJLc0JpbjQ2UW5sRTFUcStLWmNOIDRULzV3Z1kvbjRGalRCbjFmazNoQWh4K0FIejREWVBQNWRRa1dzbmgwTDZmY1RUN09zZW1HbWtFNlN4UzZhRGErcGlFNGwycG85VW0gWjI0bk1ENFRTU1J3NnRNMzBrRTJvam1oRHk1YVJvU1ltTHdOVzlNcnl3eSttdEpnUWk3aFpySzRqcXlFTlB2QzZTb0lXQnpuOVZWNyBzZDJ4d1Exc2gySFRhNXNKOEtMZFgybzloNGEyNEw2Zi93Q244OU9UMllZVVF4YXlEQ1ltL3YzdDU5K3g2cUt2MWZZbTFqY29YWHZKIGRJMmNFVTNDMm9ieEVzZ1c1UkJaNThIekE1aGJNR0dCODJHcjIxSCt6Ym9qTTIrZTd3ZkFjLzhBMkRxQnJ1L1piNFlQSG90d0xka1MgcXhDTDFINXg1NFNGdXhuTHMxMjNZWEJiVzYzbWJndDdDdmdYaGtKakJmdVQ4Myt3ZnYyLzg5SkxBMVVBNU15SFZWZW9iczRXVXFrdSA0Q2VCYVBZWFY5aEFTaGdldDQyUnc5REgxdThZRUcyRHViTXJpN01yTDZUc1g5Z1FmQWRPaWJ1YzFqZUtxU2RVOGFvdDRDVi83elVuIEp5a3hUZG9Vblowa21FS290OWxMWmxiYmVSWkh4TG1HT0tHQzQyeEFFWlk3VkVCbXpOWnZpbUdaRU5qK1pxaW1HUnNuVGhaR2NYZUMgeGpTK1Z1NmtTZ2NlbnNoaWszemNGdTFmQXRRY21zaTdQV0JmWk9rNnVCNy9BTDlpZmZ0LzZzaFY4Z3hZSld5QXpHNExlY2tBa0IzZSBBOTVENWRidVhIajJ6ci9BNmZmTElUMkRmT1lOdXp2TFB5aFoyUHVqcUhSMzd0RnNHL3NISU4wZlBPSG5SUHB1MzcrSkljV3lRakF3IEpLMlFpY294cWg4c2FaWHhlSFQ4UndsMThIcm10ZEo5dE5UM2d6TkF0YUpuT0VoRWI2Q0FBSHo2L3dCQk1Oa3BkM3NRd0xTSzNyZVogYXA5a2lORmhUSy9sODhwR3NnS3VocDdJR2ZBNzRIVDRkcVFLL2Jad2F6R1o4VjNuZkFsWEpSejhSQVQ0QUFnOVJ0dFdEQm8xbGpqUiBKdDJHSVZSN0RMdExIczMzWWhoTm1RUjI0bklVVnFMQ0ZObDVJR2dDVWgzQkVrb2pOM2VlOEFHNHhLWlVjNldCT09qd3BJNTdGY2NMIGptV1dlU2VMMm9uMlFXM1dLN2k3a1pCOE54NGZNMi9DQ0JIdmlPdHJCUGk2eU01czdZZ3o0RHU2ZjM4K0F3bUppMktiZGhGcEZrYWsgSmpHdGtpdzlQVDFkSW1WZmR6dmFCNzYzZzRNbkpDSHptMGUyZzJURGF4YXpabXhtemJ3QTMvejZENTl5MnBEVzRFZEVzVW9ZcVhUZSBodXQxdTlYcEtxMDN4all6M1EyQUthUldwaWZmRmNPSkQ0Q25XRUJxcmRuV1ZpNDJZbWNDNGI0QVFXQUFnQUdCQWZrS29BZXhDQjVUIEQvNFFkYnhVczViVXlFeXQ5cVpHZ1hVNTVYVHlIekxVMDkvY09WTnBDcFlLMk10L2E5ekI3NDdjK1FrRS9zREFmUWNkY1RHSkpURWQgT1hNejd1cWtjWVJnWTRxNjE3SkxiSkw3eW83bHg2VStiT0dsamQwSDA4NmJYZklZek1rVXBFZGk5cmRSaWN1U1FPUFBUc3pLN3V5NyBteWszS0JjeTN4S2dVa3RJc2s4WTJjRFkxaFNtaDlIMXVodUJod2hXRE1WWitvQ2U4c25Ca08wQ2V4cEtUYUlQWUg0K0FBYkJ5REpnICtzNEQ1YWl1QlEzWlZ0QkROMU9RaDAvSXRpay81czZMRFYvRGNIQ1pNY0xBNXh5QUNEdFRjNmE0TWluRGJzRTU5LzFBSCtwaTBIQ0cgVXZRUFlLdW5YWmMxVlUvR2lNQUVPOE5sVnRGY0ZxdkYyUVFUM0RHeDNDWnkrNHFIcSs2VWRQWnY5VE1VYzM5NDU5d0gzMkRwQTV0eSBMYTVxWXliUVZ4bzNPNFJKZDJCVkEwL1owdzhlWG90M1dRd0o4eXEyU3lJaEdaYWtCUGdUbVRrM2VVWjNVcTYwYXVPY0JQN0J6N2YrIGxxcXhLZ1JFd1JBNmlOYmQ5K1dTVWhaTEcvdDJGSndqeHNHam5TMDdiaE5qdmtySi9ONGtWeHgrVDg5UnNkYlM3Zm1RM3l2YWZzaVkgZUF5V3d3eU1raXdsdE5BbFlxdStFSWI1Z0hoekUrSDc3ODhUSGxtRnE3TnNmdC9zRUFBUC9RZXJFclV6OGJybEk1dEJJTElZY1ZKVCBSNnh2NnY4QVVKZ21ubElvaG1HKzRCREl4cmJlL3dDRUVEWjl0S3ExaWpsRVBIM1NRZ1ZJWUVIa0Q4ZTU2Z0w2VWVPWUpGZjB5dUFYIGUvUUZYMjFhSW13SnVTUEU4eVEzZERWMXNmTVQ0YTJ0dmhBUGNVQ3Y1OWpQaXlNNVJ1YnhWeHVyWGhCKytuejlSUDNSNFVyTjB0VWcgZWlzZWN5YWU3R3NoU2JGOGtTTUwweXVRSWpVWkZ0UWUrTWdma2xicjdJMUFTQUhBT01aeWd0R1dkN1NYYkRmMzdEQUIrd2dqcUZJUyBKMFROaXJ0TG52OEFDMjdydHJ0NThiMm10L0VmcW5yUWR3VjNJUHRiQ1BIR1JheUE3ajN4Mk51VDdjajJtK2pZV0x2VE56RU8yc3JKIGZ4cFFPZ1N1ZVRCNlFubEZkVGZNQkJDWW5tQTdpSElCNjU3ZjFOWXpod1o4VjNrWitwdllLaWYvQUtEc0hYRzBGS1RkOWhGbExEc2kgbWEwcmVuTENzaGtQTkR2Q3RyYVR6UVk3cUliaHBMWmRKWS8rd3pwak15cTlYMit6QXdaczJEeDd1b1BnRCsvcGt3UWE2ME1hYVlHdCB5bjM4eFMyVEpzMWdKT0RSWnR3V044VGRId2VuOTFFL2piQlcvTFdIbkFkWldVUERqR0d5ZDhNZS9tLzgrQWNCWVZacGZvK1pNc0dnIG9lb2VuNjV6cnN4a0xhcThLYjVLYUY0ODVReUh3NjM3cUlkWG1LZEFzSDhtalhrK0MzblkzWTJrMm9lQUgrZkh3R3dIeVo1TzhrWTUgWStqakUrNVZmMUhobGlHUHh0TTk1ZDlVdHJSWTdKODdUcys3L3dBdlp4NHgrZDNQemtNQWw5MlhiZ09IcWt1bXQ3KzFTYndrMlFrMSBpU3JJaGVUNFgrSFhLdFpyMjRzcDh4aXlPQ2Voa1prN2NBTHh0Wk44YU9USTRSSjhBL0lQNGlQNHNIUzNoMlFITXI4TklGN0k3YmFFIHJLUVlKRUxOUkFNVklvZHlRL2h6TFVNYWhHUmc0ckFIZ2JHRGpFWW9yM2xXV3liSThiQS9IOEg3WUQ1L3FzMjRiTzByb0tsQzB4ZW4gVU1DRjZqSmRVTFdyWkt1R3UwNHRUclJaS2N3dWJ5eVB5d1l4VDlqSGVyRUQ2NjNJTEEzMGpNUFU3SXZyOWZwUEg4YS9RZ09HTFdJSiBlcEQrQThrTFRWUjJRLzhBaDlraVZzUjZaY0ZmaDc0K1ZsRmZMSVg0ZXBEZUVPdDJGd2FycG8rQmVFUGt3c1h0bUhDUW0vMjc5K3dYIDBCQjZpelRDV1VOQWdScGsyR1I1UmxCSmUyWFdWNXJrVUtjblVydVdBUU1SMG1SSXl5SkUyVHhiVFRMVmQ2bjMzWnJkTjhjNEJQTFggdzVzdExLV1d0alcxalQ5L3pXUnRZUjVLd284UkRjcXZscTZ1aHI5Ymg5U0NHWlErSDl5MDk4djdjMlo4ckNvRWJBSHNtd0lQOUFnUCBZL1MwUElGclpocWJWZXdtMm56d0cybmNlbjhmRW1CZkhuSTgranpDMlltVEVPOEdTRFBIbmpoZ216RkJiTXNnN1J3Q0hQNytBKy9BIEcwdm1YaXVWTURhR25OdzduV1dOTjBqL0FJS1NQaUNFTW92Rkh5bitOekRBZHhyZHhETlRiZUUrNGtOR0o0cTdNVC9LSnY4QUVXd2IgOXo1QmZkM2VTbzdHcWNPTHVtc2ZtT1dTTlh0NDVRV2ZHaERYbndXaDhEbWN3bUIxL0d4Z0xlZTFGdUhkOW9WK2M4SmRqU09mb00rZiAyRFlENEJhTVFzZ1l1NkY5dUowanM0UkVVckxsd1JueHp6ZGZIVHBSSEpMRVZrMm5WQWpwdFJVS3FpVEVrTjNiZTROVmNFV2JDV2pMIFJ6eXZUOXJWOHlwSUpjaGtsT3Q0WmhQWHBqazVMemtMZk9OdUV6VUlodzluNGt2MXBPTU0vUExrWmxsNDN2WXZhb3RoMkJCUG4yb2MgdUJnVGU3VlNnYVpTWGFLazBtdy80eVRZRENZRnlvaFNrV1JnMHh6SEZEMUNKK0tlcXRxZ0IyZkVYdGJ5TUIwbWI3VmdBR0lEOHVvSiAvcUhCcDdZR21WTGJWWG9kU3cxeThpVHZIc2lqTk43Qyt4UmRaV2hWODBoVzRjd1ltTGRmMm9qZ2EvUTRJZmN4ZERqR2M0YjN6Z1AvIEFNQWZWVVMzS0FSNWFVbTJVbktMdFlXY2tSRWV3UUZiNG1KTDNwUXNmbUMvVlpkOHJpdUpZNkpYTmxKOWwxWWhqR1ZYMDZXV3luYVQgU0hiWUFGdVlBUUI4L1VRQW80cU1Za2RKS3RVd2tpZTNiRXFqQ09SNnlJTkUxV0pvTnpWelNSdGFPQkJsTUNUVXN0eHZSa2VvNG0vaSBLclFKR2U1d1JpYkJGY3htSGtzOVBYS1RqSjVSVjVEWDZUbk9ERE1mR2hoS3hVTWdHZklZaGJNTDRkVmJXQ2VEbWNaSzduZ0RxN2UwIGZnSUErL0h3SFQ0SE1HbnUwR2hEcVdCY3h1alJjTzdPUDF2WU5zRms5OFRhUjBsbEZzZ3Q4a2gycEMzaWZVdDRBZFcvY3g1UTlzMk8gcmtrMmM0Qy9XN3NEQUEyQi9Xb3lRek5Yekw0S0lkRmFuTEJ1YU5NdmhWdE9qMkVQOFhTSVU0SHdORHA5OHBPRzRHSzVyT3dKOWpZRCBIa28wQzdNT0ErNk9MOWloZS9nTi9ySGRBdGdWMnlxeWFHSFcwbXdiZ05xYWZSdVMzcnllVXRCM2NqMzRyY09TTWkyd0xhcTIxL2RMIFV5b3JPTCtqQkFnUkpCZ0g2b3VBdndEd0NsbWlta3REcUM4ZTdNc3p4NzE1R01sTjNKTndkbzV4WEd4d2I0WmhMcGxXVTdNa0kyWVogVWJ1a0hCQ3M0L3BYM1VPN09pQVJYZFBFWmxJV1crSG1oOG1ZVURkMU1xVFlRQTZycS90anR5ZXRkTlY0WkJiRHNqZ25yWkRuSDhVRiB0SEp2WTFEcTlaR2Y2V3ZCOEFncjRBQUEzL284YkRGbVY2UHJHeG9waEFjSHhQMHVxWmpKRGg4VnRvVFpaK3VuQmcwOWg2cnZpdHc5IGdWczFBYmdBMXpaSHUwUGpNekhPNkp2WUFBQUI1L2dPQ3F0UlhzUnlaR3F3V09xNHFSbEJ3aGFObkh6Rm05N3BTbUxybDg3UHpBN0kgSGZMZ1c3VXN1djIyMUptTE1MMndtYys3dkhJT1FZb0w4ZjZDbldSTVVvNGV2bWltYTM3cXcrUTJBSFBWK1dmTVR6Q3J1Uml2OU4rTiBidzYzTUw5Y1VELzl2RHM1UDZ5eXZHTHNjZUVGQkFmZnZBZEdZMkVrWTFLcHFFamhPbnFWTUpIMDdZM0cwMERReXVhVWN6Tk5qZHhpIFBKODFiekxrWWh0NVBISmlEMkxKRmxneUpReHJOckZtK09SWE12WmRXNU5xSGh6Vy9vdWgyRXd5RkZPd3poR3BzVllrQ3hsakttclkgNDVpaXc1MTNMWlI1WlV5dVpSaVZYcXF5ZWgxZjFJaEJWL1ZsSWg4S25SUXRmSk9kS2QvdFM5bUVtS0RKZVErSVFpdDEwVldXZkFIcCBGc0UyVXdYVk1NN0xMc0ZsTWNnTzNGajlnekowdk9pRk1vNFVpa1VnUVBCVmJsZ0ZrWWhEbDhiblZ4cHFDaUZCL2FNS0ZWd2hpZ0t4IHhMU1l4b3VacEVGS09mSCsvVnZKdU96blhRQXV4WTgzeVNDZkREOS9INS9QVmpkUHVxKzBOT3RscXQ1TGsxQnMxb21EZFIwZHFyaDMgYmJJT2pJYXVLaVlHV1RHNElrS24vd0NmSGFod2pJeTJaV0hwUnhtUHB4d0I0K2tGaGpoeUJmdDZmQnZHa3lzMWhLcm0zOUtVYytyTiBacStMSFRuUllzS1ZROXNpRDJBZkhnbFdGMXN1UURlcXkwQ21Ea1N5OE1hYVd2VThPdTllbW9RQzlVQjNIL21Bc01ScHZtWmM5eDAwIHJtcGJjajFTZ1l4YXYyVVBpdlE2NWZLbmlySDU0cmR3UXc1ampaditGK3RONEdET1VFeVlQOEpvNzkvUU5CMUY0RGpvdVJaRnlqOVEgWjZldDIzYWpSM0lMWTIxTUlyM0tKVzZhZlZ1MEhDeUxJdFI4L0pGYzFvbjc0eU0xWi9pQW56WTJrbkY4K0FBYy9QOEFUV01VY2hqRSBzd2VOOUt6Z0x0WHU3dUpidWZja09Kems3Y3UzdEhRQU15UWxzQm45UldENTFzYkFOOXExbHVBajhWODN3VlI4dzRoMGZwTFk0cWZXIDU0ellYeEI2VGVWWDN5dFBsakZtZ0N5ZHlONFpFSXg5cUEzaFMySWNuV2I0VWViTUJoT0V2SGFJK2ZZSDUrNkQ3b0lPREhIVzdHMWYgRFNRMjMzeTJraTBJZDhENjlsbmdOWkMzeHdYMXRsZkhCUFpIQ1phaDZuM3lqLzhBUzhYVUF3SGFJTTNWWUJDZjhENERIeitqVFlKcyB1ZFpoTE8weTZjRkZaelNTRFlET25VRWtNU0VLc2IrSFZnUkgrcWJlcDc0ZDI3eDNNSTFQRHUwWFplRnh2TytlK0lSZnI5QVgzOUN4IFBiQzI4dkxwZDNRMVZpbmtxM2FnT1RWMXNhWDY5VlpGVDlrYTZiRTBBdHVFeXQzd09uNEw2RzFJZG9VczhUQmxtUGxvZWMzdDI0RHkgRHNHZjJEWUFDeVJORXM3T0hDR05ZZ3NWeG9rc3NxeHhhZEo1NG5rVGV4bVdVSENveXBPYkFNMjRwRW1LQjNRVEhHVmx6amVvb0l6OSBVMlF1dG9HUGpqSng5dG5TWVI3Y3JTaHcrbjJvSFdUZVdnQndmNGhFQzRWdXB6S2IrV0xpdmhCd3Nod1R6Q2VRVzhLbHZEL2N5djN5IFpuamUwZ0dnOEJRVUhwRDZmd1pqdVl5TGxEZ2JhZTJpdlFnbTZKaTVHcjNoc29URVBNWkN5TzZrTms3Z0dNVzBlUDVJVHdmTFFXZUQgaExzU2RnQUFQN0J2NndWN1lPYWVLbnNtcFpXVFc5NDZlRG8wUzhXRUgvS2dHMmhKU3VVUGdkYmg3cytac3pVQmNGSnEyeDU0dldlKyBCTjdCZ0FCKzNkZzMvbjFoYlVmTlVHYURHdm5OcXVXek9IeXg3dFpBZXdnNmJYSW1rZG5IdzNEU3VITVUrd2VmSG5vTU1ZVEZxNU41IEJkcjNZNC9iQityOTFOTjlUSW1xTDZXTk5NcnZsTWg5Q2ZieDlWNWNmU2tlemxEakp0RUQxSk0rMEpoRXV5NnpYTW1BZGNQNFpKZmMgbDVkK09BNTdTMStCOHJHK1FhM2I4ZFBub2RQcVdrdERKVklwMlFlZkdBczRORVZzbEZLcllMSXF1eUE3S25rTUxVZ09GOFRtUVh3TiBXWi83MjhmL0FKdW4zN1lIQjNQY0w0WDhuTnNhdDBBRFBNU1lnZEpoaDJ3eEVmQk1wOFc2L2NPSHd3NGNjeVRqK20rZXFwNDBaVjZ1IFRKdkhDZUQrZmZnSGdPa2JYOXNXNExwdWphTTArMVdiVDBmVVUydTVEV01OcWNzbnRGYzdXQnAvdHVIWTZUWkM3QjNVVWtEK0hKODMgTzVQY240UUp2NzhnOGYyQS93Qk0zTkl3MXhQSXdBTi9hWGM4RFhGYjBsUHlOd2xDTVQxZTc4eU1IMEtyT1I0UkxGdGtkUHNheDJkbSBzOVl4S1lHamFVRFFIMTlQZ01jVi9Eb0lHZFlvWTRFMU1TUjdrTU0wczBydSt6TTBUU1NQTzBza2p2Z3JNelM4V0JYM0c1UXJ5U1NoIG9TN0pFNzdBeFR1eUFBU3poVkhtemwrQlhRSStITlA5cWthUzdRVU83TWdiSkNhZTNpN01tUWtRd0o1c0tBWmhEa2tNTytQakF0N0Mgd2dmNlpWeGl5VDJUMjJDb2tBK2c4QjZ2STBLNi9tc0I2L1FzeitGNERuY2gyM0oxSWRxaW5JV2hvbVYraG1ROWJyZS91RTRDbm5uaCBrM044S0xPUENRaHo4dkhqN0JzRDhnZFVWVjJWZnNLWkRYRDBOQXpyQkczWkx0QnFxdVJ6dzl5Rlhpekc5UDQzRG1RK044RDRHand4IGd4WEZzek1EQ0cvOS9MNTkrOTM1KzdCN1lZelhCVmR6SzNHZHMyR3R4RmNhdHNGc0dLbE9pYkdpc2pBWW1RdzlrVE40Z252bzh4bTQgSFY3TVQ0VWttLzM4QWZQK0F3TFRReXltSFBVT1VqaGJLVCswaHVSM0hqUmtPU1paMzVOWTRuemx3eWFhTm1sSWdTTjlSdVl4NlUvVCB4aklyWnFwT1Y0cnhaSjhkVER4UTlVVjh2cmE1UzZUZXRrWG1BcTJ6VmZWUU5yOFN0Z1pTUmNndUhYNWluNGFITWhwNWc0MjErZWVIIDBZVGZGY1k4bk9iSlBhSS9zQjkrNEV2OVBMVTVNcXZ2UTFMb0c1a0ZrVnpBeTdsZStOU0ZQcnhjREtLeXlrd2U0cmZlQjhUeURJOFcgWDlxcDRZTUZxNndzK2FxN2Z6NTkrQUgzN3BEckZMZzhiN1ZXaXBScTNYMXFWVzJxWi9BeGtOaklCMVFGanI1eUNJdVBuSkptOEkvYiA2QUVFTXl5VmFCZ3o2U2s3QUF4UVQrSURnUFI3WDlSMS9wOXJPd2pWZk9BMThzRjI3eHZHZlh1b0dKYWtyNGxvV05NSUo1aW42cjJlIHIwUDg0VDUwS3N5ZG9DL2ExQWp0andFK2dmaUorZmo0QWpOdTZxU1Jaa1pGUTVOZWM2enowMGtFL2ptR05kUEtrbjlUZmNZSnRYSXMgdC9kbzRuVjF6Y1NOR0Z4MDdJaEFSb0RaOHlHZU54WGFZa2JuTEZlS0d3U0lCaVpBVXF4UUdwM3lZc090ekdkZzJRN1FUSzlxWFVaViBhL0RwTkREc3JJd09EVzI4RGFqQk5HUTJnWVQzdkhZdUE3L2ova0FOY3UyTFlzWmdaTU1xb0tCcjF5c0prbDEreVRhL3JJd0xsV2JZIDBXazE5YmNOTjYyNFBpL3NZRlBucXFHczJZTEtEQm05MWNiZUFCOUJBSHovQUlCZ0VEQlNQUFFxOXVtcGFycmN1QjV0MlB6aHJBdlggWWhuKy9BR2E0UTdJTU9CaDhZSmxqYmUybzh4WnZKb3ErczNuaENTYitnbi9BR1BvTDhmNjNXQkljR08yR3JOMURtSXlTeG1Gc1RncSBodzlUaDR0WVdGS3NhWXdCMXZ1UXlwN2c0WWtDRmxoQTZ5VFY3UXN3WjNSMlRmOEE3OXdGQkFQM1MzQ0xna21aMzBWNEVTV1VidjhBIHpDK21nZEpabzRza0RTS0gyc3hhamNGaWhvTmk5T3N5eFNKWHRzMnJYZk4wZUtIenp6MXBReUNXMFZuY0ZYaTlLOU9IcTVNV2pwN00gM0NlanNSaHB1NWVUWlRnbnNreVpUN0pjRmYxWlhKQzBEeXFoRTFsWEtQTHpzbnVjQUFQdjJHLzcvTVhKeXpUY2xaMEJ0cXNiWVF1RSBOczJwNk9oMmVXdUNrYmFVL2kyUW52aTNjSEF3NCt0M2g4WHoxTzNBc3JPMXMyeDdIYVg2b1BuL0FOL1cyK1dRQkI4Um51RnhwS1JXIDQwUXZtRDVENWhROEpBeFdSd2hWV1loUXpISkhpZXdBWjNKMGJpL2d6ZU8rZWY4QUFiK2Y2TVRDMnlhM0xRTVZKS0R2OTJYN2MzY0sgMGJDc0llV1cwMG93N0N0Zk1RM0J3Y0szWUpsT25oOUxlTTdYOEdadGw0VGh3SGYwRStmUGdPamN2dUJIVjQ0VjhGNWQzRExHeUJnZyA1NHZrV1FQMmVnWnJXUjQzeTFMWTFrTGpmODVwWXlJdWw3aDVJNTg5THlvTmJlcWRKckM1TkhGSTBtT28wUGNtTkpWKzB1eGlMaVR3IHMxb0I3aE1mYkltMlBkYml0emEySGFscTRoNERDYUVVNXpWd01MejFncUk4QXhQNFlucnB1bVd5MkMwR0Vpd1dTU2VuNlVVbStkUUYgL0xkUHU2MUZLYWIwMjBDNUF4YWdkUGZVOWc3Vm5rK0FFTURDYXVockt6dlp0SjM5Qi9yNC92OEExVXUvSkdveTFDQ3JaYjRHR2dXaSB2Z2xUeDg3VVVqL01ReGRoQWs1YitKVzZHK1RFTnhXMVdCOENxK2RjbkY0RE43QjdIdjhBc0FEMjYwejVGRjVYRDU2a2t1dGVxL2JaIElWMVVEVzdZNG5wUzlxTVEyVDVrelVoZGx3ZnpoekFoWlp3eFdaTm80eWpmZGtqWUFBRGZ2MzgrdEZTTlk1RU8zdVd6cy9kbkoyRm4gbW00cThoZ3VCcW1ObnBzVGI3T3N2S0xNc0cyYVNRSURjUWRRTzNia1ZIRms1aFN2YldYVGdxTzJJOWNyY09LQkpLS2VVcnhTcHlPTiByR3lZamh6S3ZiYWxMZXp6RS9UZk10UmhjSGdEby84QW5kelNaUGMzbnNsL1gzZ0VId0NEMU1XUUhqbEJlU3J1N1V0MzlBZkJydVlyIDEySHkrZVdnamdWZGtYMXZqYWZNTWtNTEduN0RPY1NmaTNsbVI3Unh3MkR0RUF0MUJBZUFTVjBXQkRucVlldVUybnY4Rm9XMzRzUWggMmNZU0VNOFVkN0dwdDk0ZkRtYWU3VGg4RU53S1BuenBiTnlmRjVaZnV3UkhBYitBWCtRWTcrYng5VGJvNUw3Z2tCcXgwMzV3YW45UyBGbXlGdWdVZWhsdVdVaVdNMEo3aERjRnVIVDhPd0h5dVh6VGZzY1B4YlFVOTBxcnJzZUVFL2ovc0VBZzFodHlJU3VhYzVOZUlTaXRjIGM1Wldma1ZqODN4SGNTcVZkOGFLa21peEVlM0RMSTlDcnd6VVZZeUp1eGRBa3ArSGRqR2oyRUJ2M1VJeWY0UUdTV3E1VUpLNVpQdVQgc2lMdVNrMkMrUEQwbnR5M09iUi9tQ2JNK0lmZzlrTjlvdnNBRGdJRFlFUFJiUmNqdlY5ZmFaRmZWYzJwMVFKTVpzY0FMNUhYcTN1UyBwV3dYWTRkZ1c0YmhxY2V6QytZZ3FYRW9LZTg3WHprbURDVmNrbyt3QUQ0RHdEOTBhcGN5d0xBWDdhalpWRDZrQU55YWV3bERPRGc0IEw5M1VPcmdValJ2WEtmWDVoa3haQTdnUVhQOEExSWFkNXN4Wlp1NkN5c0hMUk4vNytQOEE5L1lHVFZiQVBZem1yVHNqcXVkcWxxcFYgMUlLYkFubUtYdGlZbXlsM21WYjJpK01scVUvVDRmallPeXEvbjBldHZLeStmM3MzKy9nRC9nTWNlcmY2ZVcxYUNIKzc2bUhWYWVGViBxT0xWaVZJdXdXYTJOME0zbmNzRHNxeXhGZU5GcDVaTjJJeFRNWk8vVVFISEZuY3FmZGJFREU0aStXQjZwbUR2MUhERDlSV2FadFIyIGZFZXZLdVlYaTJtcFhYbHVyM0ozaTJNK0wrbnN4MnJEN2V0d1h4UGJaemd6UFBGMFpaQi9pN3o3OWJ2UGtFQjFibEJkYTVESXRLUEcgUkx0bVJSVk1NYW1qMjlxUGd6WHowdUVWK2NvVGpEZTczeFVZVDgvSzF6NFFRa3lzck12bjFDL1NGT0F6U1JzT0IzSEZCQUw1OU5BaiBBT0JVWWV0R09wWk5uU3M2VVdUM2I1RERpQlRkUWdINGpBWlc1aTJ0aHg2MU81Z2hid3NyUGE5NTN5cm5aSkJnTGRRVC9QdW0rakxGIHFCaGRCRk5RUktQVmFhZFFVaWZYdDVHUkRpMEhuZlQ2QmI4RkRUZTRTNlVxd2M0WVV2UFVxNGlNeE5EV01GbElCbXppUGl2di9IOFggMERoZ2VvVnNYTWF1ZXpVTVp0dUp0c3NJUURwNG5TYVdlUVltNUlsVFpzWmh0eGNWNmZ0Y1BtVXB0R2xreVJwNk1vazlTVlpZb2xqZiBDbWpsWUJ2S3QyTURYeTZMOHpKNGZVN0tnRWlWa0huWmtZYS90U3ZiQVV6RXVVN25nTjhNR0VQV0Fob2NOZ3A4NUFjSUhHK0RLNnVUIFd0N1NhdWVQKy9uMzVnUHoxQnJVTmpocCtvZE5TYWNKSVloa3IxSDFGSjdPMk9BRjhMUlFOYmpyVVpHUmtyZGtyNlkxVkxWOThiT1UgSnZsWFZvekhQTm5Qb1BnTi9QbjM4anZsTjJNTFBvWlM0RGJ0cTBEM0pMRHVHVGNFc3pLVjlRcDVvdFM4TElUNWdmZUY5d25mK29layBKaXp3T3J4bmF1cnU2SnpZRjlCOCsvZEFiUXJ3MUxVb1lUVzFQSkFaVU50ckt2MVVhMFM2M1BTcGNvOVd4Q0pOaHVFUGo2M2dodUVCIFZtRENnc1dzMllEOElEOC8va0Fmc0lyS3JUVE9lODV6TWY4QUZSWHQvVldlYlBueHgxQTdTT3FFSVVPekJFcnBudFJybFFCdGN2UFAgQy9INDZGU0ZxWFpQclBPU00wQ2JmSzFEa29nZEpTYS9weVpWNEhUM0tzYVlBdFN5TzFhMjREME5WUEQzdzQrY1pweFhKMlp6YndmLyBBSUZzSFU4dDViUkFZSVo2MEFOcFRGeW1VbSthM21wTlBxWWZ2Y3ZTcmtyY2VoaDBOa3VDeUNIYXV0S1BQSEhEak5ObFB2RHNENFB5IEFCVVNEM2RQKy9abHRsUHFSekhVWlh3MlQvT2Jzcm1GclVSV1cxMU03cTZ1WklJZGtCNFllWXdiRzIyQnNkVnJObWJXVEtBM2J6bUggbjlneHgyRHNkWkNuZkNHK0NzMEM3RWg0MkxVeGgyVlI4dVdlVFN3QVhhaEF3K0o3akREdUMzQmdMOERHWXM5bTFmakp3M2diQi9maiA2RHo0QjBLaFF5TW9taWwrZFFEdDZodmFRelNkMmNuSkR2aU11TzBkWDdNMmxsU1J4amxHNUUyQnV4VFdsWjF5YU4wUEZjL0I2M2FGIGpLZGVtWjZUb1ZxV3BWckFUcEhxVVBWNGtQOEFLdGkwSzUyK3lPOWxrVnNudUV6NEd3Zk1yUzhtbmMyYlpBbXhnRUgvQUNZTi93QVkgNGVIck5YTWFlNkN2MGFiR3ByNC9xZG9NZDVXd3B2bUl5bkFQTU9TUXc2R0gyOWtkNTQ1OHAxUEpveFFXTEpvL0NUZDRWQ2ZBZlFRSCBVYkRiY1Z3WUJ6VkpEU2QwQXhwWkE4WWNDMWtTdVdhZlR4aFBMaDF1R0hocC9GWUNlQitZODdXTEprL3UyK0lPd2YzOC93Qk5xekZOIDRjb2RlejgxMkpXY3h1MGFYWDhPWklsaDAyMnE5cTlEVzA5OHF1R1ltVnV2bUdvOG5nV3JjM2xYS2NaNXNiQ2JBLzhBZDMzUVg4QWYgak5QREpFckZGMHlSU01aUzlhdUo0b2pGRVZPSitvamI2aGpOSGNYOGFBc2NyVXdzYzJZdmJtWEJXWSt5ZU53TTBkK05tc1JSeGx5cyA4REhuZlgwTzJMM3VtNXp6SE1Vcm1pb1lSaGVOUWxuSzhReFVyUTcwMm11SGJjUHFvTVVPbmtFT3h1K0YwMDd4bXpId1dzUElUL1N2IHdBREEvc0hRUUh6S3pzc1hjRXF0TWsyQnJSd0pXRUh6ck9EcWJJcmxQbFZLeXIrOFVQZGt4OFQ1alZVaWUyd2FHL2lGS05CTlpPSkogdTdMVTdSSDdkUG42RDMvb1BxZWozeUxiQjVTbDV4SzJqeVMyM0dRWkh5dDE1azU1WG9zcERIN1AvSncyQ0djODlBV3hqTnVnc1ljQyBiMERQN0Joc0Q5NTlrRDRiYlhNeVk1VlZlVnRKK2FlcHhoTVdGazJSRER1WUNaY2o1WkErK1Boc2kyeU9ERzhXMm4zVDJUV2NiUTFHIEkzQnpmKzRINWY4QThxaTZqbG8xalpuY1pJRUFkcy80eU9mQzFlZkk1NCtlaGphOC9UenRERzNkamhJU3VhK0RlSEhQRjNmRlVRU3QgVmJKdGNCT2FuUFdmcDVwZzU2bWhyaTU2WGJUODVaN3RuNFpoNmNWOWJwTnpwbW1wa2dabyt4cEpTUStoUFd1Wmd0ZjJkaWhZUXh1YiBKd21HUytkYWF6VGJUc0d1a29lY3VlcUsvbDFzQ3lrT0t1WG94NTlCejRBYk9seTM4Q05ySlh6bHJPTkhxVVd3cjNCVDYwYUQzcGhaIG16TG5yVmxrT0JRRlpQQmpzNjNqU3hVTEtFMExNbjluN2toUEh2ZjZwYzI1RnRpTFBORHJIOVJJT01JZU9QOEFpUVBGRHh0ZnYveCsgNkkyU200Y0NtN1V1U2pQamRxbkRWcFpxUFc0RmdZWmxvVkxFVFZkUElPRmJzakpjRU53ZkFaN2lVNE04ckhqRm5tLysvajREWUQvZCAzcmpwL1ZvOEFWOXdsVlU0RXJhYmE5VW15dDNCOFYxTlBGTEg4RnRvQjZmNEhNVzJSUHEvR2NCc0FDYldpZFpxNVJtR1BHeUd6blBqICt3QU4vUVQvQUdJYWxWOFZzdFJTcURPTmh5aVNETE1GZXNsa0wweXIzeVdydEhiL0FKNFlmRENldm1GVlM0SFZhZXpEQlRRc296d0UgZFRhT0FxSzNWL0IrZmdGUkwrNUxZRU5YeXd3dXpLclNhQkszTlc4dEh5anpSM0lLTkVzOXA5ZkUrcTN3d2hyWDJRNEIxSVFHcGt3ZSBYeWh5YXk4VW1FcTMzKy9maUxybmF2U3g2dlJyRktKcDBpbWlrMUt4OFI2cU5iS3d6cHoyYmdTWmU0MVBERzlIQ2pyajFEeFN2SkY2IGMwa01rS1REbVNEY3dCa2lOQ3BCaUNyZkgvZnBlMkJiRFErTkNHK1Q2bEdwT1ZUTGIybm1FcW5pY0RWMkZObGJlWWNLMzFDT0RIY0UgT2RiVlAyMWl5ZjhBcWdGRTJiN3Nid1lQQUlQc2Zmais2dkxFSVhjTHRtQXh1Mi9Ic2wvTFZ3a3c2UGlHTWU3RDRNaHA4eGJxdlovRCB6a1BnY0V3c3JDRzBMSk1Hay9Sd0FEbjJCL3ovQUU0S3JGM2drVlpETTNtWUNaMUJhbkRaYTZFTXhWOHVIVW9HelNqUTRENGVNem5rIHorZVV1QndMVXQ5R0tLL3NqaE5rOEEvSUw4Zy9ZT294Z0lBMWVQWHRqSWV5RTN5YTdjd0pURTlTRGdVT3doYjRuNE1qSk00NEhJbUEgYWpiNEZxTUV4ZTFrMWtIVit5QXdCL0VCL2tmNklMY1NpTUkrb0VKcVNKODQ1TmtqdGpPSzVPMmZZbGMwZWVPYUF4ZHBadzdhYmVYZSBCVENRYjNLYmFaTnVWdHRuM0pWcitldnRxYWFsTklhSWNCQ1BOdHpab0g0bW44YTdTS25aRU1YYkI0V3RzQmd4VmJJeWJoTlZSOXdBIFhtWXpMTDRyazk4ZGpZUkgzL1lENERmK3F1NWpJaEpzT1pQaWh5U1RGK05FTWMySHBDSEZmSWpRQW1FRnVaM1VxdmNPRG42LzV3aDggRjVRekxJTUk3cE8vL3dCQThCOCthcTlnT3RvVmZjQWUrSHgvaG9UdFpIS05OTXlSZDN5cUhpWEk1UGllWVE3VWZHUVBBRGd3RGhQYSB2Nm9LRXhtOXBCdmYvd0Jnd1A4QW4rMlJXWWV1VnVIbFdxeUVxOTdZcVYzTUFFeGpFZkgwWGZPMW1HQmJaRStIRDdmd3prNGVlVmJJIFppZlBDYk5qK0x1N3I4ZzRnUGMvc0RqS01WU1VwMld5UVo1WXh2aUZhZVBFZnlZOWd5NENQeWI2RGFWSGtNSWRFTzNUT2xmM2lLV08gWmFGbkxiaUVaUEl2Nmo0dzcyRllscU5GUzJETFNDajVVcUdlemxJdkgxT0FWZXpaa1d4aFBjYVluc2xxVlhNUXpBKzFBWUZ3cVU1TCAvRi9hQm5Sd2dUZzc4QVF2b0o4K0F4RDdvdVNHdWF1T2Jocm1aRDZReUc3Q01NalZZSFBLYnErK2RQb3lHM3A3SXlPRlZyakF0bkczIGdlRXhtR1hJcjFtVDcydXdSNFBIK0FuL0FENEFBVzFkcXkwbVZQVlZzMW5ZQ05LMU1YbUdveHFFYWFxNHpZVEVtMU5TVm5rbk05T2YgUWxWdzU1MDJQUGVqTUh3a2l5R3UwS3o5SnoxaERDVGlCTkExdk13OVBydy9icFc5UHVTdlhySEVUeVVNQytXZ3c0bUdyVUJadGoyZyBtMkZTSXRsVDAvZUw0RHpIQU5PZ09DR2RyZDV0OXBmRm1zL0NoTmc4K3diQjRCVVRMSmJSeHVtWDA4TWN4WDAyb3VHYVB4dVZZTEN4IFZyeWI0T1ZYV3dXU1pDZDEwUnFCM0twU2FOWTRHbW8zZmhhczd0UDdBQ3B1bTN5QVVBMDROTTZoSFplUjBrdzBZYlhiUyttM2NZWUQgRnEyUnc5a1lERmN6MkNBcXA0d1g5R1p0a1NiUnhBZUE4K0F3NmpiWU9BeGQyTlZTMDNuWFkrTWJVL3d4NDNKa1ZrWXFVRHFFcEd4cSAzWUliZ252aWRDNDJEcVZ3N2pGMlpaOXUyZStmMzhBZVgvUGdFR1NUMCtPWjBaMWpYd1pEZjN5VWtqb2p3ZXpnNm5XOVh4VjZVME9NIDlQTVE3c2hyYkErNzlhR0hEK3hxRytjbVNEWVJKcXRCZmo2Q0FQZ0VJK2Zha3hidnkzMU95SEswSmxmdTFnMGJTZEkzUkRhckFpQjYgUWxhY0UycFRCQzFKZ2VHSFQxL2c4QmZ1bnVxVFdXaFg1TUR0SUpqd0hIWUg3WUQrd0ZHWkk0M2xrZmZkcHBMRExqRzFGQU13cDNEViA4YmNzZnpsbHhpdVRDVXdJSW45SXFHS0RjQTBrWjcwWWR0VmtLUE4zNDQ1ckdqc0F0TnpNNkJhQmdJMUpzT05McThQblhSOE1tcjBpIGVjakZYdzdnbU1pSUhYN0p2Qjh3YlFjUGJFTVdzMllqMmlrdTRNK0FQK2Z0M1lPcktnOU9lc0RUelhrT3IyS2xEVlpLV3NaYnJJeE0gVDZtVStVV05ZVVd1TElIbUU5a21zbGtXQVpuMFBZQUE3Y0F6YkJieVRCbXpmc0FRVDUrb3VQN0FmcXdSTTZ3M1o4enE2MHkyU050UiBqMHIwNWE3aFNjd3pwOHArTHlLbkpmUDRMZTkzQXQycW5zbUQ1QUlVODR2S3hoZzhZZzNiRUx4LzJYejl2SHdIUkpSZHFRMjFYNzA2IHZ0Vkc4WnRZMDVRMVhqYTNqc0w1Y2txN2xldVdRZGR0Vm9hMzhPMEE3VUJzQ0ExR01Ia1YzTTV5RUNPd1A5UEFBTUVIb2pMUDJ2Z2ogYlRxVldzdFFJMTVTT0E4WTQyYzJvMmNlMFk4Z3F3cW1BZDF5b0ZsRVhmSHdzcUhjaWxyMUF5QXFSUWpMRUhJS2dyV1l0Z3dtTGRJMiBxazErR24yUmFSWkhKekhEZ2RYeXBlcFpYaHVFd3dubU81Szh0bktINEhCVDFsbVZxYldXWjRxNDNxSE9iL1VSL0Urd2NCNmZHVzBYIEJLQjM5V2xhQVZJUGxIbjllWUFLMm54TEpLQzd1QS9NVDArcTZmaDFYcUUzaUVCVDRId3lkdjFmaDk0L0YyQ0NBMkFBQVFQYnFTamsgRmNvcHJabUxuVnRaTmcyZEhzMHhhbFltV3l0NHRpaVFKUmJjSzNXdFBkd1Brd2MrQXozZHFkK1gxY1dqSXh6emRWdndENkR2NEIrUSBaaFRlTlFCbTJLeEthZUQycEJ3MVNyYTJKUndPZEhVNWtwb2xPVmMvY0h4RGNBOXFmTUJjZnJUNnlzOFhlYk05amFUNThCNEErZzgrIEJveHFqbXBSMER4U2JhYWpFSklrc2NyeU8yMGJTVGJWV2ZFYk5XUkpsU3ZhUXhxVmRrUm82eVZJOFIzVlY5eC9IL2MvbnFOa01GZnAgRlIwL1hMNVc5dEpOdFZMaGNWUHRVSlgrWTVIbDYwSHhQWCtCbUZ1WTREKzhTSC9JekJneG9Gdk94NzM3L1FVSFlQUGdJRE5PYWxJRiBxWjJiVGIzYUllQXlMY3RmZHJJUjRrT3BRTVJOUFF5RGd0cm5HdzdBdC9BWHA4Nkd6YlcwTEtNY3RFM3Nld2V4OC9zR0lCejIzYWRtIFBZdmtWbFdwWkQzckN6dml0Tmh1QVlUV3dxdVdGT3JyRndFd3hDZXlVa240YkRRQkRGbEcxbzAyait1eW5NY2QvZmdPSURGZ0FMZFQgb05rc0ZseVFNK1lFb2R0eVFkaFI2OVBQQll4ekpoUFNqQTlrVzRlR3pNR3hubDl0Qm1SaU1MM05tZU1UYnM4Yi93Q0FQK2Y2a09sMCAybWpHN05xWk54NVhEYStZTklNcG1sS0krSXVPTGRFY2EwTnVGSVV0aXVmVjZrNm1XYktLS0NERklsWklZOXVQbU9LUUVKa2NhTW1OIFdiQXUrYUNyaDQxZXVENW16Wncwd0xUNnVFcDYyMUI3WVd4WXVJaEs3SXdjbGNHUkREai9BSjJKQTlCc2dtVDVSdG05cEp0NC9McjggQXc1OGY2WkNWV2J4VUZpSjdHNUlhbG5WTGttN1lJVGJtc0NHK0FhbUxDendkZ1Q5NHJlN0ZzZUhybXRCNkY3MllNVjJnWU01czdHeiBpQ0FYd0RCdjRCZlB4cllQTUFVY2JGclJEVzlQWmxrdEdXR1BUS3ZFMC9qY2k5Y2tWUGNFSndNY3daR0FQODlmbnFzTW4rRytTOEo1IHM4SHdDQ2Zmc0FHUFVrMk1sdWRrbFY4ZkNVa3hWU3JKcHdPcWpTQzl6S0tKVnVTTUFka1phZm1yWTh3cWdlZUEzRGs3NHJyT3hwSnUgay83QituZ0c2NkRGSllVa3ZQR0VzazB1bTFDN25ob1ZpZnZvanVWbS93QU5FV2VsYVRVTThna01NY1R4eHU2RS93QUhBVElUaWhZNCBHSitPOFViNlhxTzZBNENua3hXTlBHM1laU1RmS0szQU5DbmZCNERFNVErRHpENVpGYm1FOGVuZzlQQ2Y3TW01dEZYUEt5Y1NiczN4IEJ4QWIvc0FEb3FLVlBYNVE1RFhBTm5KTi9JN1VEN2IvQU9DbjBqVll0OExDeXVvVmZtekRGa1EzREduNEtrd1BsSHJaTjVvZStGbDUgQm05a09iQSsrQSsvZEorczRhbjhjRG0wMmt1d2ZWZE1zaVZIRFpWZ1U2SFBVTzhGVU13NHZtSmluM0R1Z1l3bjRIcTREckJPejBObSBSOFVuSHRYaXZvSjVmMkQ5ZXF3OVFXWHJSWGRMV25CSTBqNUFtdGRKR0hwdGl3bCtBeEo0c1RxQ1ZZYmV2NFhaWTlqV25iNStGZ2hMIDhFSkRhRnJFYmNIL0FESmZxT0hmWmdZc1Y3MCtoZVhoYVRHUUZCV05aYlVPR25XOFFNdTl0b2tqajM1VWZHUExHQk5DVnFydXlLNVMgR01CZHgzWVZsaGEwS0hMSG5xVXRDdDBlVlU5VnZrQ1l5WEJwcFNZdEloN21EcTZSTXE4OUxRMmh3WDdVdmlobHRQc2dldDR2Zy9nOSBWMitUVjN4WnN3NTNTTjgrMy9IOUVIbjBrd0M2UHYyM01rWFJsaEVxOXJUbXluMnhXNUNRdHByUncyK0lkZjFVWWNLVFQ3VTdxZGxWIDhEYWlHakkyTnlFN3lSd2dUNkNmUDkzUUQ5MFg2anlpK0dxTFVoRWk2ZTZMMDFKT3E1Ymh2QWRXa2xwbGkyT2sxeXJzWTlQaDZmRVQgL2xuclZjVVBpaWNRZVJpdWgwK0xObWJzU25qSGdDKy9BY0FBRHI3bVhZUGxXWk1zdldSazJSWWJ2RGRxOVY3TzAwdkZZcDZhK2FoQSBJdGJjR1NHR3VBT0hUMXRWVWdBS2REcUQ4RGs5OE5td20vZ0FBQUFnN0EvSHdhU1hzZU9YVTJVV1BrNzJuMU1nNGpXZlQ5bmkzS0hkIE9JTDhHNkVmYUVqcmdnVE1rQXk3Y2tUc1ZFa2NjbUwzWFprMkl2Z1lpdXAzTHNqTGFJYzJwYzJ5TGpUNStrVWJjYUJUOWhQREZTZkQgUklHbXI0Y0dPcTRiSlpGVjh3Z3RxK2gxeStjWmZjQmF5N2hBbnVnc0NEVVhBZGdmdXExQXJVT1dXajArTFBJWTI0TXBEYmFjcS9VaiBaMXNROEQybjJJbXhlK0MzVldMNFk1Qk10UkRzR2Y4QU0zTjgwbDZlaWZDYXU3VmMrUWQvdDAvOUJZN1RxMEYwUFdHYlFkY1Z3YnJHIHFobDExUnEzSldiVzlUOStHaWtidVRySVhuR0hSQ2UrdUI5YlZueXNCN1VHeGVVTDJHbk1PMTJPS0N3WVk0Nzk3UnpBOEliYlpsZTYgUWFIaHFMSmVlbnZzTTRXUmVkTE84dG9WdFI3bHZEaEQ1Z2hvZTRKNk9CWC9BTXFMSzBVYUdZWWMvaDRTY0Q2RUFBY0JQbjkvZ0NSUyBvc21uY1RGSkpJbVBzTWNXMkoyaWV2VUNoNHkzQzBXVTgzd1NGM2lNb2U0ZzhjY2lsYXVTVzlwU2I0eXdmbXZQeHpSZkZ5SmFmYlZQIHJkZlNxK05oNGdjazdoMVJ3YUJNd1dyMGlybm5BZVlRekZEM1l5SjYzTzRmcTBCdmhPekJiUmVTeUQyUTNoc0Mvd0FCcUxmK3FveksgMHNoSWgyUXh0dGVtN0NiVlJiYkhCcUExdkxRd0xrdlZ5TCtuNDkxRThPUFpLNUFyNEhCa2VTZjBiOG9td2h3QWYvc0cvZ0xkWmxpRiBNcFhNeW1NRGFOSjVSaFRzSmVzNlh4N3VoRlV3Q2JkamhmRkQwK256SHdmODZCUjRHY3lJdlBQOTdWZDUvd0FBQkFId0hTWlE3Y2FJIEZnTW9heHJ5Q1Z2RmhnNnljQUxpUHc3Y2xOUjl0Rkh4d1pFK1l5V1FIVDVrR2V2b2RqU3lmRitUY0hTUWlUZ0FxSUFBWHdIZ01aQU4gUkxJc1FSNUViTFBLWDFFeWxlVUxDK0Iyb3dKU3VHTGNxVGx5QUZUeVFSWnlETXVtS3hnSnVSaU1lSTNqelhMRG5Gc2hkbmpqcHpHRCBGcVVqSEFobU5Qb0VsSzFMYWVKZGtWdVN0QnNERkxHTEpwUndwK3JONFR6QWNmTU9BZFFEYWNjRWJpNnVzalA2SlJzWDNZTUg1QTRDIGZSb05QdmpUN2FHU3I1UjVrVmJhYWhrU3lMZ3puQ25BNEVwWHA2cGJVc0VPdHVGVjdSOEpxdWtoUzFjR0hsbWFOelp1RTczdjRCKzUgOC9JTDlzQ1pReDlvSkY1dzkwaDFMY3l2TUpNTmdIa250azRWeWgxa2VLR0IvYmVIVytwQmNYM0JxUTArbG5pR01zeFhLTER6Z2J3OCAvait2bi9kNVZHbDNSRnBld3JrMTZrcmo3M05hVFljZ1BZVmJDVERtNU84VnliK1NMYTI0UHUzaHpsTEw3YmozZkdDNnUvWkhiL1Y3IHdDRDU5Z2hqMjVOYXFSeGhKUHA1NWIxSmVPWjVJaEdRcGFhZVZKRUVBYVZIaWlyY2pveVVTcmpsTERweTh0dWR3Q0psOVNDTUdQYlIgeXJQRzE1TlJTUnZhY2d2Rm0zY1FPa2I4WmxWaUVkc3RxcmV3ZzZxWXI4U0hBcHE5WXd2aDZmRGZOblpDSDhndnZrRXd6RTFjb01GZyB6ZjhBWUFDL3YvNzkxeDdReTVSaXd0NUdrc21yK0FOaXZrdzJpd29aUTh2N290ajNCd1Q3VWgxdFg2Mmp0bytBY2hzNU1YdGhQSHdnIFErZzhCeHczL29FMUVOckFoMllCbE5GaE10a1pSaGtYcklMekdpaG4xWGkyeGJSVlBzQ1p2RlZvYjR2b2xqTnZ3SGlHekRDbmpOazcgbzFYaWYvRVI4QUJQOUJKQ3lHaE5yZjVXenlTU3ZhYnMxMlFlVDJnVERGaS91UWNoRHJkd1pGdGI4NDJrTjk1TVRLRkNiejV0SjMvMiBQZ0Qrd2RDSTJSa25kNWk4cUs3RVNVRCtCN2Z0NTUrYjZ0bWJaTVpDQVIxU2hLa0dSVzl5Uy9Vdkh0N1V4N3ZPVjlScXZaajVYendrIFQ2SGFuWVBBVDR6Rlc5cUxhZXc0eTNMaTlqSjlmekU5RHArSC9xTlphZWVCb1MwTTNUYzlrU1hZR2dnRUkrQXFQd0IrWVlKZ092dFcgbHpYSlBxdU1oNXVjTmxyN0pNOHhGUE1NVHlITUtnTUlpMnY0SEVPMExhZ3cxbXpVTlhXVmtIVndRMmNQZ0g4K0FBZTUvcTNWNGFiMCBkalpIWkg1c3QycGxVK0VYaDZIWjJsOXNtUlNqWktQVlhYN0p3TndwK3R4OHdIM0FQY2tHZTMrV0p2OEE4K1B2ejl3RHBWMVdoMS9xIENzZ0NaaTF2R3JkSUcxdXZjdzFVU0N4aFhjcTl1U3VVT3dKaGd4dkVOd1E5aHA5OGVGc1hScjV1ZStCS1NPUEhhSS93Ris4LzB3dkEgMmN3a1E3K084NlJZWVlFWVdNMnl2SnE1WEd2bStGcXJSK2tSU0pXQS9BSUFQd1B3T3JLYVY5QXRKNmlSVjEyS3VsM0ZmclhNMUUyYSBGcDZJb0s5dWFtUS9xcklaNlFXSVAwK20wYXBzUStCSlNCcENTWUE1MkJUSUFzWlRBUmx0aEVhVHlHV0MzcytkVU16TGFwMmdUellpIEpRei9BQkZiMUgvU2JCbExmV2JiUTdFTGpad1FMR2grdGxFVXNXVXE4bFN3TWFEbEozb0tDOGtrVWxaQ3psWkxUNjF0cWpHVUJPenEgMUZLb00xa0FBbkNyUEhOWkd2UFBKOEg4ZFVaYkpPUG45LzhBODZPMlV3aHU0dXlLbFo4bXBjNWtQYWgzZW43aGNiWUxtSXVxRFQyViBpdzZ2V3JzVHpFTU9RY0FmSDN5OEh5ekdZcGFGWmpPNlZvcEtQN24rN3Y3OTB3dE5hL1FkOFNHUnR1U3liYXM3V3Zha1pocGVraHF1IHBvY3EwSlo2bTA4Zk1yZmtqSkRJR0s1c3MvMmRoazBZbzBQU3lETkpBUUdmd2ZqKy93Q3dIK3E2MCtybzlsbGJhZkFLZU5KWnNNbGQgMGgyeWEvZDRaU3hyWWFJdGtXQk1mRVFQYWdjaERndmxvS1NQeVptVjFkNXQ5SHd0SUk4QUg0QnY1OC9nQVB6MlpXZG9PUy9ScFJEeSBYL1VzQmFxQlliZ3NPeVZhSkw3alVOYlZYdzlvaHJlQmhEWDAreGdIYVZWTWJZcnRCTVo1dmZBQi93QStBK2dnQVdHVXBIREJxNWtDIFBIZzIzdStKWXBUcDJYNmJVZW5xZG9MSVFZNk1ZSldTcUJOTklrdFRhU0ExV2NEY3htd0tZZ3J6SWxIYmV1ekp1MXN1Sml0MDlrZkEgZGU2Ym5Hd3RucUFEYU5zTkJJQ3JGbHNvVXJKRGltQ0VOOG1KNWlFUDJPQllBR0NIWmhhdnlZbjJ1MlE1d0hZUDM4QUFLYmt1alRJNyBnejkwWmQxcmpnR2g2b1pTUllTaHAzMHpQWUdUVkNIRnhnVlduM3VoWHd0NHd3WjZCWlFKT3Arek1hYkd2R0Ryamc4NEg4R0RGZ3dmIDBGOUNzd2ZhbGpTSzlReGJLTUd1N2hhSW13RlprSDJGVzZHZWJISW9oajA0T1lROTRzQ3R6aUh4S2N0a3hqNVYrQk00RTFEdTIvN0Igd0Uvdi91SDZkNDkwSkZkdXlhS0pEVWxjTWR2U0Y1SjVDczF2Z2R4Z1pWcTg4WkU5YnRSYVgzeXh1UHRweGIyeG9hRVpHZVRZTTN2NCBBQ0FQZ09BOUZCcG9vY2xpV0dEY3VlZUdDbGVIVnp5U1M2Z2dEK0xQSkYrN1Bic1k0MTBEek0xUk9yenVPTng1QjJvb1VSUnF1MmNZIDRvd3FLdVI4RThYUVhzakx1ak5GalhLVk1iUUxSWkNTV1g4VEJCZURnUU9vVUNMRDJndG1QaGgzQWVZQnFUQWVSZzYxV1l0bzR5ZDkgN1J3QVB6OSt3QU5nZjBPazMrOHlyaGIrbGFoMUl3aDZld25NRHhjZXd2bU1xa2UwcmhoeEJsdUJQV3g5V1VmWmR3SGxXdHlaTm9WOSBQSXc1aHNoeDlBZlFUL0grakRWb3dXZnB6bVcwQnlpU1JYcmFIa3U2UE0wOXZDUW42ZzR0RFZmZkhiKzdLM01jayt5STlhV0FBT09EIE5VQ0h1WXc0YnRGSkJ2eDgrZy92K3dWUU9NbXZoU2x0V2p4b2NJMU0xcGNGWGFlMDhEa3I4dFBwczgyVTJlY0dCa3ArMUh4UHJjZmogenhnYmVON1kwUGUySTkyRzBuRGo3OGYvQU52bjdsbG1uUUNGWVhoYmxaTDNZRjBqWTdrcXlLQklzalV1QlNDVGJ4YXhaWG9URkNyRSBNWmc2YkVLdFczdVQrcHN2YW1XTTRqYzRTU1RFc01pTWhjL2ZtVzBUN01UN2tYS1RKUTIxOU55N0FoaldDa1RGWElkc09TdlpCQmtmIFdTdDhKZzhONC9nOWtEQ2JUVjdOMnJOcEdILy9BSHo5cUVjcGFqSmNGYjJXSDFVTGJyYUY4YVMyRXhZVndYQi9OSzRrQ3J3eU1OOG8gZFBUNWpBNGI4dm5rZmt5TVZhQm41Uk9XaWNmbjRBZndBSDhmWWJPTkZidTdnU1RjcTJrbTVzcXR5VHZaRGhaRGh5UURTTjg2Z21odyBJT0VPcTBNdytNR0Z4ZHdMTDVKV2FNMGJtemJJa25QQWJCc0FBL3Y2OXJKTElRSmxNaHV6THRmemJEd2JNRnV2Vi84QW8yelh4RFErIE51RnFMYmd0a0puNVFnVld5TE5sdEF0R1dUbU85KzU4L3dBKzVCNTRaQXMwYmwwUm53S016cm5sbVZBTld0WTRuaXpkamtWeXlOZGkgU04xZHp1T3F4U0kyM1ZtbUxKVFplVm9aRDUrVHdTVExrRGxLL1pBOU53d2lldUVwS204R0VOUGJIQlhzYTJGZE5aQjVqamNQVDJuMSBlRzM2d0I0T1lVWmhiUVRadjJUa0gvWU9BOWFnYWV2MjBjQTVxRzdHeVRKQytXNEJ6RmtOa3dYRjU0VWNDRElub2tPMUE0K1o1RDJXIDZ6WnZ5WU13U1Fqc0QvN0MvQUg3b2pmSzNiTjB1V3kyMWtmM1lOcGlrc09sYk9yMjhGN3RLNUx5YTVjZmhvYTR0dmlHbmgwY0N3S1UgRmtaZUw4R1dRbk5qZXdQeDlCUWNEL2dKNEdubER5bWVpejRkWFdkWHlIR2lXQUJaQ0JhWVVzWVRYTmpRMkF6RG1LRU13NE1pT2hwLyBjVVBXYk5hSGFCRzN1N0tUQi8yRFlBQjgrcFZWSTIxRCtuR3psMjhOc3pyaFErM1BheVBOTG1XSEMwQVl5K292eHRPajVBVkp3THBIICt5NzdqVFhRNEZkTDA1Ujk0QzF1bWRWL01BbWwyMGJhdHF3ayt0OGxYTFRBTGt3ODhRK1lmY0dTcXgvM3l2N2FPSWYxZERKdkp3SWEgM3crL1liQXY4K3hYNEdqekRaUTk2TGQvVHlRUWxhcmhHaUVESjZNcHJaNzVmS0Z2WjVoaE9aSmcrR3FvZGdLVkgycHhubEROd2Y4QSB2NER3QjlmMkUvWkE0bjB2UVRneUpEdTRXamJTbFVxbExIMkZmQ09rR0JhYWtQbHlMYTh5SjhOOFFvYStZVlo3QXBIQS9KdFJuMmJlIDNhcmppRGJ1L3dESDBFK0E2b3JxTTFHR0lvTkR5VTJ3bHM5YUJnS0pzZ0NrMWVrV1BGN2V5Z05rT0V4d0RtVnN3UDJPeTA4ZmhWYXkgekMvY241c0phZ0R3SEFmWStmTldrbEQ0aW5lTXhzNDVMeVBXMEs0cThYK1Qvd0JPaTJZb1gzZ0gya3J0ZDhzQ2NSd2NSN3Evd2pucCAyVW1EWHdMSlQ2bUdwa2JaRXBWc2lYcDNRNWlPdzc5SzFZSnNwa0h3ay9raGd3UGh0WUZQNHJESmsxZjh2Z2dnUTNqL0FQMEZBd2JWIG1BNWhsMFNUMWZYQmFFTTg3TnNTMEdySkhzTXo1VVFwdzloWTdIcCtIeHRnNHIvUDF5bnJLenFNS2JtZDdvODRBWWJBZ24wSFlENlQgWkdSODFCU09XdTlwM1pRelJ4dFRzQnFXcW5wemRLNUxKc1ZrdEI4RDhrcmN5d0dOaDRrOE1nemk2dmoyT0NmMUJ2OEF3RitBZS9TeCBaSWRxR2tQVEhxSFRlU0pMSGFaSmhhRS9KanU3Z0xUUkxSVjVod0Q4d0RtQXc4TThBUjZIY2N4bXQ4cHhqZmNVbEplTmdmajl1bjkvIFBkSGhMcUpaSncvOUdSVjBicEVkNTJDQkVtelJwSXJwc1dpZGJKYk1OUzBsMlJJMlNzOXl1OGRra2VQUFl4RFZsbFRjZmIxZGNmYUQgUStBNzN5bHgydEZ3WTVnUmVxZTdPNkdGa1ZMMjkwbHhSREI5UG1MZGtEN0lybWVuMlgzSTR5ci9BSk1CMmlFZGtibng5K1A4K2Z1diBxV1BvUEtxdThyejFZWE5HaEhrT2lva2V0NmxnUzJSOFBPNHQ4Y09IcDhOOGhwOWdHUGdNQ2x2Q01zbEVPczhLcmRnbFhQQjkrLzhBIGMvMGdXdzR0TkR3dHRzcHdmN21QT0Rhd21MZ1ZYQklRNHZjSk5Bdm41Z1c1bHdCeUNHQ2dMN2E4SWJ5VFE5c1JxckNoT2NMNzh3UHcgRDkvWUJzd0QwdjFMcUF6cmFLRFpKS3I1amJFTVdjTlYzZUcrSGwrSytQamduc2RiMlI0LzUyNEtmSkZrWUxmYk04STdKUDhBVCtJQSAvc0IvckswTWVwVEVMdHVadDVkdnNkT0Z0ZE15amIwM3h1RklUdTltUUFRZFBFN3dzNGQ3elFxZ1l4UEc4YjRZeU9rY3N0M1JJVmloIEhKQk45cnlkS0x5enhnRG1xOW5QN1V4Mm9TZDZmYWdOVHJ6SlhOalMxZUxhWStZdG1LM21QbG9jcXRxbjdMZUlUeU1WOGRRb3c1OUogQjcrQS9RQjRBRG1LYTNocHpvZDNudXdUbm1jRXdhR1NHSHMyWll3dHNsRklYekE3SWh6RTlQaDF5QVFJQ3IrNkMzbjgyQkhhOExkUSBUK3dJSURmd0YwakJSZ1k3QWhya2FpQnBLdWJDMDhZV0JROUVVK3doaFl2VGdodmhnZ3lkN0pqaER3TWUyb0JFK1lUdkxnWk1sN2d3IG5BZlAvd0NXT0FISWVBOVgxZVlBb2NNMlNTTUdTbkJ6VStXRFdSaHlBMVBVb3Q4bm1GdUd0M1pqdyt1UU5QOEF6MlRqUEExblkvOEEgcDRBQnYvQWVqM0ZFaWlRUEp0dWpxMGE1STFHaUZleGQ4V2NlRDhjOFcwZTFXMjFQSm5VTzNMRmp0eXlSOHhTb3UyVGhaSWFUSUdqaSBFRE5YczRMYkR4VEd5eDZyR0doa3BjRTdDbnIvQU14OGlsbGNweUJiTTh3c2dQQWgvUFlJQVB0bndQakl3SGliMk0vd0UvOEE1Yi9HIDVsa1RISzFLWmFDaVRHUElhU3lLYlROSmFtQ3ljcjZjM2NYS21FUTkyVEdSODNCd1ZhMHI5OFIwUGExZXIyYXMzZzFodm5nUG9PL2cgT25rUEIyZTBHSEJjelhZSm5kMUVEOHdBVS81Z3NXdzFLcnpCOE1PdGx3NWo3eFV2MVdrMWtZVTRON0crMXh6ei9nTWVRZFYxRnc2YiBWNnZzNHpsWGxmMlNlc2xrckxoTmhCMkprVjlMOWhMQlJrWUE3NnRsNWllUGgvQVA2ZWNETE1URm9aTlpPNDRPeHpnSDlQNy9BTEE1IGdzaXlxam9qeXBncXBQVjJBU1Nkdmtna1VLRjM1SFNvMytubDAwMGczRWdmTW04SzVYZ21tOTFmN1Y0TjlTUjJpLzRwYll6cTEwUjEgNzI5cXE4bjVlcThsUUlhemZsSVlsb1RFTmdzZHdUNnJZN0l3bUExTmc3Y0xkbVBPSEdXYkdyc0VrSFVRQUFBL1ZmUGdJZHdUMndDKyBKKy9XUVNobEU0bExhS0JzZ2c3aDAwK0pUV2lHd0xjTVBqWkVNZ3ljUytBcTQ3WVVLTTN1azgzMzhCdjRBL3YvQUVTVk5mbFFWN1M5IDJHYkxmQnJoZnVkVjFaVlBwMXA5ZlNXUUNCaUFYS0h3OThaQTh3d1BzaHFRM0RUUzhCMW16VU44WnNRWnNHYnd3NEN2Z1FGKzhCNjYgOVRHWmFqNVI5ZTJNcjFqb25UdzF3VmRaMVAzeFJ0RDhrUEhwY1dyMDlmdFJrMU9URnVFd1lUcDdnQTQyejhudVQ5ZkNITmd0N253QSBBQVA5TDBjaWlZcTZmM21NdkVaNVVpSmJjaTA4b1paSlpvZDNITXFRbzdlMGtqTVUzVVJ1Z0VxUzdWN014V0pjTDhrUjNrMVJwWjIxIHJzdHZPWEFodUVld1NDcXVGSEJ0czZma3NnbXQ5bmtPNGVyN1FpWHlVbWNQcXN3NElhMndKNnJxSEh6M2dPVEdQbjJaSE5PM2dQOEEgWUw5djU5KzFQbUxiazRQbFNxOU1rbVV5SGpGbmdrK1BFTjlwRnpZVU9tNlQvbkszaG1HUDNWVkpnVVp5NE1zMFlVR1dZOEpGb3BQQSBRTDhBUG5rQUF3SDAwZlQzQkRpSHRSaWJZVWFaeFYvN1BMZDhjc3F0TmNwZG9YSWhzREd5VldZRVdxd1E1MjNua2ExRVluL1RPeVZjIEVSMEUrZzdBZkFQejhBYkxoUm1tc0RYYTJkTTZoRnRiMVN0Visyd2tHTks1aHN1eStFS2hvdE5vWkdFM21DNW51QSsySzNPT0NPbkwgUEEzdmt4MUtkWFo0WHdDRnY2K0JYOWdOcFltZGNkUTd6YWgwU1RDdFJ1NUQxU2JLYldkS0FMZThmMXl0VWtqQlVSb0Vob1JxaWxhaiBOWXFUM1hqandhRjJlQjBqcXJNRUxRQnRWWG5zNTJkcCtRTjNDamNsZnNKa2xGR0dWYlRnNFRMc0R1Q2ZaRmdNaXFCSEh2aHM2eHp3IFlNODNkaU9BeFA3QWZQbit1TTZMbVZwbGtvc0RKa3d5QTAzWnRma3M1Z0xROStyMnhrTU9RZkdUdXBWYTN2RUY4VCtLdy9xNnVzak4gNzkvNkJmai9BT21QV21aUitXR0laMG9XN3lUMERPMm15RHpKeE9ZaHlsNXljbHRmRHVBZDhUdzlnVEFhR3d3SGpEZ3pRMGJZRE43NSArL2dQZjMyQ0hrVEJaNjNLOVBMZ0JKcjB5cXJnbEhKTGJSRWh4UmUxeWs3NGZkU0crY3dUK1dyNzVPMndaOUcvek5nL2YvNTgyTEJTIG9VSFJzQXFtejd6VzJoNFB2N3FJOFk4Z2tub1ZpakR4R1JjTlFqaVIyc3NWalFETnFBRjFrT0w1dnBuVlF3RkRKUnZIaTg4a25IZysgMHRDVFZZOUkvaU1sV0ZkMjhNQ0dIdFNuOU1RZXZ6RTdiME91VTk1V2JrYUt6Mk0ya3V5T0ErZ3IrLzhBVVlsdkFobzA4T0M1bVEzNiAybWY4VUJsek9rNEdFN1Q3TXFZVW52N0pDMHh2a1M0SEZ3blR4NEUzN3JOTnF3d2xpRnh4eEFBUUdPQURBQUF4VmpJMjAzWHkvREtBIFZXL2lWWERWS1dITUJ4OFN0NHZ5OVFUUW51RXhrUXc3SVlZREVFQ25WbzFCaWZLRVBuS09iZGdtL3Z5RC9xNzc0WHZ3MVI1ZXV1MHcgOXh3TkZGQkFxSHBxdjZuRDR6VE5aVEpOWVY4QnJrTS8yUGRpSGFreGpYOEFhQ3YzUzBwNnlqcTVSM3JNM2dFcThIampzQjdGZ3h4NiBBeXdpUUZOTmFSK3F1b0VHei9IWHVUVVNRWnlTRnUrUkhhc1Z5UmVDeE1sTEMzMVc0YWppNU80STRFKzY3WDJaVlFIZmtSYTF6NTVVIHVZQm4rMWRHS1RoaUJja2x0TDJBdGpXQ3ZVOG81Q1l0b0dGNFBWYWNZVDdVWDRid2V2Q2ZPbURQZFhKdk95SkpzR2c5b241K0FYNTEgWnpWSmNrZDhtVzFiUW9hNnZqSFVwdkJmckdHcnhIQ3VhNVhxbHEvYnpBY095VStYSHcyb0N3UGlyRGVYbERLZWM4MmNQZ0g0L3NIMCBEclNqeHc5R1dqVExsbTV6YWh4Y2tIcUVNMUpEWDVhMmhBWmFhMElhK25oMXNPWTdYekoxdEo3NU9XN3lyTlhWOXpxdnNtN0EwRStBIHQxQTMvZjhBcHdQRk4yUW12RjVCV2hiRzFLbUhrQXFydmxlMS9ZUmc5L1huSHZocCtFTXo4dzQyc0VCVlpIbG1GOG1KK0VObkxkWUQgK0cvN0IxRlJXbnpadHlIWkN4aWFXdlRuSTNrVTRIenR4MmYwQlE2aFpvNDJUQjRuRTByRldGWXlMdDdianplRnRZNHZJV1JYU0JGMyBBRG4zUlVwcWdnOGF2U2JJdDFrWXBrOUdYcTNmRDBUVXZYTXo0ZmJkOE1VbVBNY3VIMlhhZ2Nad05YSjRBOTc1dy9jZmZ2dndEb2IwIDkyUTBQbDRMZWFCb0c5WERVak1kckMwLzVOTTB1dlROUG9GM1BPY01oTXVCUFpMVW1PRXdIUzFYMXBzL2ZMRlgxTTZlbmpCMjgvdi8gQUlBQ0EyQmtOaFJrcmxQdHJacmdXNFI2Wi9ETHFRcVYycTlJcmRYUGQ3dVh1RDQ0VnVuM3hDSU9FRlNZSjZPWVJiTWFGZjhBS2Y4QSBmd0dMOWpzSEFUOENsdEQ0VXR5WnFscVZ3dlV3eGgwaXdyUXRRT0hiREZqUGhaN2lyYkJNbUdHUndtWEFoMk1Rci9ZOGVNdEhHZDh4IHBRSjRBQXY3Ky9iQjFuTUc1RkdHTGw1RU1LVFpZZlU0eXVtMU5JQTJHN0dJcFVhbnczSFNtOXpOQlZaeXQyN1BMS1kxQVdPRjFoZVcgTmtXMi93Q1c2c0xGMnBzWTBiY1VGblVTMDUxM1E3V3RyVGdydkNUZkxnaXRTbHFodmpVSlVGMEtyNkNBcU9aY0lacEUwWGVLd2tOMiBWaGQ4NnpDQWV4ODBmTVluWVRQaGxEekUxeThjR2N0blhsVjYxMUNzeWV6TlFIUjBwNmc1a3F3clh5Vzl6RkJheXV5ZU5jL1JhcnJtIG0xdG1mREE1dUlGamVSL2p4amtjcElMZjRqWXRuMTUrOWNmRE1idlhJa1owWTA2Z0FEVlRBQ2dCeHdCaC93RHJuL2Y4Y3d0cVFhYlIgd2dnOGo4SHNzWFg2ODErZngwN0ZlMUtUdEJMTUVLdlBhaDZaeXROOXRPK29Ca0R1R25CYjFHVnpUajIrVEtmVDhYQ3EwS3ErMisvRSBFT3Exc29URnZtcXNtY3E0SndoZ0FIMEUvd0ErMzlCc1cyV3hJcCt6TENGMVZiVW1rMGhrVWtnZk1aSy9zTzdiUWkzR0JpaDZ2cDk4IHZpdGd4Z2hEVlFOZjJXcXpGa20wVmYyemVMUkNCS3JmbjZvWDc2RHNHQ3hIeU15cWhqVTBUeVNUVmF2V0FSZVgyUnFWNjloNmdxdlMgTEd0QmJ0QndyZGJoMVhNSU1pTythZjhBVXR4dG14RjJnc3MzYTVKTm5QMy9BR0JCQVlyN0lxZEwxTVQ0YWZvOHU1MlFMSWQzQzdDeSBPNHpCNVlPZHRDbk5SZ0hDdjk0VzMyYml3ZkJnVisrS3JJczFtcnRHbnF6UDdGei9BR0JCZnVmWTlORVdEZjNpUkdRYW1ONDNRUkRaIDg3UllSeFJneHc5MlVqRW1tRktLTnFWNUNqdEUrRHJwbFVJWVJMdStwQkZTc2RQUGpJTjNKSTZYY0lJeTdiQ2xmSkN1N2krWldEV00gYTFMTEpFaTFnWFluNURZWVRRT0pSb21Edm1ZMXZWWmdoREJxUkhsUzM0dTBHWkc5emVHSjgrQTMvZjhBcHdBOHlsNHFmcW9velZlUyBiVHhubTFzTCtudEpEaVE5Y25sNG81VEhDR1lXOW5Ec0MzQlV2T1ZXTDVSdVl6dGRzbXdmdisvOEJ3cnFjT1E3R3BldldoY2RxbEFuIGdRUmhxOWtwOTRsc2l1ZXB4OFBLRGhTY1N0NGN6aDYyY3FYbHNGT1pmeGV6TXh3Sit3UHdEWUg3a0Q5MVBiaEhEVjNjRUFOWnovbnkgbXFyaTFrVlhYc2hUdUN4bGQzaXhRNDZIMmZXM0FPUE1RWUU5dFZYQ3pCbjV5UnRrcTUyNC93QzU4L2g1OEFtSFRxWTYzSnMvcVpHViA5ejJTUXl0RkpFeWxlK05xUm5GcGx3UHRzdmZVc29ZbEVYY2hWbmhRWTNIS2ZTY3Z6ZDA5REhqbm5xQnIram5qVU93cCtuMFhrSURnIEdaQnJ4WkJpMUxvYlBsUlY1WHRCUEhwNWh3TXc3VFQrNmtEbmh6akl5cnhmYlA4QXJiWU5nZmo2RDBtV0JUdlMwRXVzUmxsMnAzZ1MgRWxiVTJDc1dRd1doMk5hQzgwSzhNaE1EaC92Zy9uRGFuMHRoVzltYnBnakV6Z1B6bkFmZnovVHJaTktpM2QweER0WFRRbjJRSEZwOSBKMkU0V29ra0N4Z0NlZDVRR0d3VExzUTA4UGlROXF6VDYwbkIwWVlyODVaL051MkIvZ0lEd0huMkhJZkpqazRBYkJudXdSa2xEV1JJIHJiaFJDdkpsY2dXSFNxTFQxOFBNNDJ0bVhCa2FsSzBPS3pIa256emt5T0VTY0FlL256L0FUL1QwZVdUYjFDTWpvRWxkWGQ5cWVQSGEgc0RUMCtlZkg5VmNjUjdzdU1iTEdkM000VEhDdUJKQnFhQkIvd1piWC9iYy9kZEIrWTBIYkJLVS9QZ2FkUG1CVnZTN0VwOWJyMWZTTiBxVjBoRVRZVEErVS9ka3hEV3gvenJMVC9BSno0TXN4b2FCbjNibTJCL3dEWVAxQWRiYkllS3JxKzBOTHMvUys3MlFlZkRDa1dqMnBlIFZrUkxJeDArcWQ4U2c2ZVlobUszVHpIekZYK1JWVU5tUmltQ3lzK0U4QnYvQUQ0K2UyRHBobzlrR0xCaG9kTjF5bnlWdVZVdGtYSFogQkp3M1l4U01xSW15dVBzZ2d3aHNuSUZ0NG44dE9NaE5IOXVUQTk3ZGdld0lPR0FBQXdIOGE2c21GWHREQVNxcVZZU1NOYVBqTzd3SCBpT0h3NVFGSWFKUmdneU9DM0RoekY4eFl6NDROclh0aFFadG14L2QrZW4rZmZ2NERxRVlraVpMaDBxUnJKejc4dmFmSGFCZ2I5M245IGROa1hNcXNKeW1uZVI0ejQyNjI4aFhPUk5pamExVjErTElyN1JaanVEQTJXNVhOMmZxQzhsdXdsOXdzSndyMjkyamFiR3RCUHEvdnggVzVoRHJkZ2h6a05QZkp6SldWR3RGb0xLelIzTnQ4WDM1QmZnSDkvVWh5T3lHV2dEVlJSRUd1RnF6RzFUYVNWU3A2OURzWUNKbEFRLyBKT0gyUW5wNDk3c2F5bC9Hblh5c2hndnRtVDN0MmQwZjJQOEFud0FCQlB6eTNWY2h5SHAvUExPbFBqYmtvQWxHemlUUkwzN0VTQlF6IEhHelBkU0doa0E4NDh2cVd6bzNBOFJteC93Q2xmUHRnUWVmZEtwd3A0SFRicG5HZjhadEcwUFdOT1d3OEpOUGgrZUs5aktkamNrWCsgU09GVjJRWUlCKzVZODkrck1MUXhqTlZaditnZWZJTEIrL24xTEV4alpyaEVoZHBZMGg4R1RzVkdaci9veHJHZzQ3elp0ZkhSU1NxVyA3TzlCN1g4WmVMN2Vhci9VL3dEbnF3RElRYktnek1rWGNpclpGZWl5ZjR2K1dyeERBRVcyV2dWRGtPWVdwRG1yaStZUjFLOEtINWg1IFJvc3o4WFk5cTdkUVg3OS8zOCtOUjdvajFBUU1HY293N0tyZFpGYmllN1Ewd3cxWGFBdGVUYkdXMSt0MXUrSmxQc2pCTU9WTFgwK2MgWUdlSzg0a3BMc2NBUCtEOGdnRC9BRVNLZG1ObFFUSVl1VmNCSjIwMG5pUWxIQTJFMFhFNE9kWGlkUmpraGoxdStIQ2syUjhYME01VSBwRHVvWVp5ZjNtalRxVDRNK0F4eEFjKzM4K3NjeXQ2alhPWVlaVlAxZGtzYVN0eEdqT3M0T2tCeGNYN1FIc0I4VURDZVlReDhPQ2VYIDMxSHJmNzUyeTN3STdmZmdBRGdKOEF3SUo5MGtrUWlETVhqMmswOVNaN3U4Si9wcm5na1VDUk10L3ZSSUpxMjB5ZGNsNm9hYWVhZUwgUlFSSkxxWk5TWTFoRzFER3p4UXZJaXliMHFSdm5nd1V0TEh0OXhHNWRCbkxiUUhNMkJxdXN0MzFMcE5rV3JuUDRtd0VtSFpBaDhBMiBna0FhYlpCOUpvU0ZUNGN3UFd3YmJhRjB3bkN6TjBxOVplWGlyamlUL1gzL0FPbWxrTUE5WHcrazZSdC9KcTZ1TGVoc2t1dDk0NURUIDlYcHR4dmtWOHNENWxrVFdXdDhXTTQya09LN1lNRjg1Smd6YnNiOW41QlArZjZHd0g4UGVheXc3UW8wYlcrSlNzZFBDOXF3QTIxWUMgUUhBRkZQNG9kZjhBMmZaNmZUKzVkZ1h4WTB3cFdTR3JpeVp6MzJNL3Y0QUIxaVBUNGNOcC93Qkplb0l6WHFrcWFSdFN0a2NnRDBuYiBEWVkxTGQyTHVGMXZZSDVJdXpUZWhyOE00QjU1WEtmem1yMWVzM280RUNHL1BzR3diK2cxRmhrV1dEWVRWeHk3YVRscG9BZFB0eVRZIDZZWnd2b3pMdVMzOU10UnlHSGMzRGkzcG0zdnB0U3NyNlF4b1pvc1lwZHVlS1pGd3JCbGxoYVNOOCs2d3JkbVBrMzAybVJvc1RROUQgMUlhTGFXQTFMWWJiZGthbkVkcXM0ZXdwOW9jc0tSWm5HN1VEN3hENEhCVWh6NHFoeWF5clVQWmd6WktUTm16NzhnVzZBOEFBNmFqUiBYOHhvZUZ1dVdsVlhFK3k2SFNidXNpMUUrcDBpcSs0Mm51cjN4d1lHUmtUMlJQV3lEZ0RiVTlEZ3pFWVloaStjdkR0MnUzOC85ZlA5IFUvTVIyUnR6RHR0SkMzSkF3SzlrcEVjdzdKNWJoc1ZpVjFlR1ByZW4wTmtoaDJBeFZmTUlDTk1KakdsOC9aRFpzRy9lNTgrQXcrdm0gMFBzbXJ1Q3FCU0dTMHEzU0QxU3J4QUVTWDJ3eWZ0Qzd0VlZOR040ZkREZzRUZkI4d3NvNURyTVlVcTltV2VFN0ljQWJCK2gveit2YiBVTklZbFNIeTBnUlA1SklZdE5Hem5rVm5WZ2M0QzF0cnZwQ1NNU1N4dXFDK0JVYTkwYWNEbmJrVkhzK2NjYUYyQ1JiekJhbE1yR0s3IDNBYnIxY0cxeE1yNGxEajhsS1BuM3o4YmRrM0ZQbWZNT1Q2UDd4R0NXUEtQMStrbk5nQWMrQWZ2NjlLSStaRmtHR2poOWJwTklyYVMgMjBka21LZkxUTGtxV1pZd0dHdmh3OWtHRU53SUdKeDdscXJpTVpud3B3Ym0xWFk0NGdENkR6NEJ2NEN4VHdRS2FMZFJGQXhTbGhWZCBxaHNHWlRkaFdBSHF0WFhrTW81UkNsalEwOWNzaEV1Q3lESTU4T054QThqcDR4NSs4akFaczJiQitBeDhCc0IrSGp2ajVkME81a090IEtUR25oVjVEYkQxRU5US254RU5XaXhKVDRISDJwM0ltTW5jQ25vTmx1R25pcStETTFYb2J5ODFVa2hPY0gwRzNRSFBnQURIcFova2oga1h1U1RheE9VcUU3bGcveHlSM2pRUGRkM3dGbzVNalpuV1ZaRGN6UG5KeFdJTkZSWHo3VzU0L05mbUJyK1FIclNZSGxIbHV5RU1wWCByc1dYeVI1WEVoK0dsdjVOd21KOHlZWWg4OGVIeHdQZk1KMUJWNVRjNlBDSkpzNGZBUDJDL2kvQUQvWEhiQ2Rjamt0MC9RN2tTcFBPIERJZzFoYUE0MGpYcG1LMENYeG9tTDRjd0hjSHlHNEIvbjh0VlZzbWpWZVZSaGh3SWIvWUQvd0Ird1h6NEFQeTcwUzF4Zmg4M1pEU0cgbTJIMjkrR0JNTU13OUtZVTFYM0FPdGh3OHd3bm1FYmNGSTR1SXp5MGJtOG5IWko1ei9YNzgvSDkvUHlSZ1VqbEE5blNtaDJTVHk1biBSbmdnK0twQmhjSkxsUTNNbHR3L25FOWtoc0FleHA2K0JSNWl5c2JvTUdmc1p6M1lBRDl5RDlWSkZGTnFCcUpmNkVyR05QUHFiTFFGIDh2OEE2VThpNDQvY1RmRkdOTkl1am0wa2NhQ0dWRWpkVUdGeGlXS2JFK2JHNURHd1BHSVVqbkt3SG8rbi9TZmJUWkVvY29IRzV6NHQga21FT1N6aDd2VzVScDM2dWY2dzVKTVpYRG5BRzhLenF0YkpqQmRYN1o3T3h2d0NDZitnbnovVE9SeCtrK2dyZ1NZcms3ZjRJWWEvdCBpL2Ftb3JUUFNPMWkrMHRvSi9NRnRENGVIVDRZTjhUM3dITUpyTm9JanlqV29rLytQMUZqZ2Z3UHI5Rlh5UlFkQlhZQlBCaVQvcWNUIEllbml2U0dTSFY0aklCaWxwUjRPNFEvdUJnT3Z3MnJtRmFUVENLVEY5M3hpT2JkcXVCbi9BTy9ud0h0ZDZxR0FYWU5acW91cGF4ak8gMWFOVmtiaG5Xb3YyYmNGeUhpem1VWkhDWUhwKzRId093SWJWcGFYd1BrM2txTFdYbnZaYUlUajUvWU5nUDlvdXRVa2psbVJwMGtTUiBJM1lSZHUzZVZMRWJiYXZuSTAyZEx3dVBPZEkyREE3U1pwaG5GSU54TytTR0pjaDJaVm1XK1BCL3hXS3UyWURxODgrYWRUTDRxamFsIHBza3QwaWp2bHpTSWtPeGp5blhOakljOWJyZTFMVE1CeDhPZFpkZ2JITUo0RkZjWWpnK0VtOS9RUUhQajZEYnI4QWdhbnFPcTlPZXAgUWJTeWFra3RZQ3VTSldFTzA5cDhlMkEvQTdOaXVWcUQxdW56RVRqZGdWdjJsY0h5dVh6a3hRWHRteVlmcWY4QVA3QjAvU09abzVUUSBtcFJXWjVtb2F5TlRXYzMxbFcrbXV2WEZlbWdVMVQ5UEl3RGhneVBUSXQ0VEpzREY4SWMzUm1qQjZSdDZDT3FPd1l2d0RuNS9ERHF1IEZ1QjZmcXBMZHVPZ2VObVE3djhBemllNE1FeG9GN1dlTU1DZjh4UGhodDRlTVU5U3JrTVRXZDA5M2paRGV3WWUzMzdnQUMxWlh5b00gTVhaQ3hYQ1FZMXlqMjJOL2NLUGdjOVVJOEdnZGV6VHl5WnFZcHJDYndXd1JnTXF4QkJzWGJjQ3VieDVjeWFVT1dGVlYrdUduaE90LyBuOXNkenJnY01XUTlWNjZlMmZqY1BUR0htVnZQbU5UYXZuK1NjNXB1ME56d043MmpuL29KL2dQbjZkQTdNRnRzUE9ESnBnMnlDM1lLIEpqbU00Z2tRN1F0Q3AzS0t5WEJ2RkpHRTh3UXF1cXp5ZWVhekN5VEtGTVNaelpEWnozQUgvZndQUlVEYkNFU3lGV3djMnlQOEE4WXIgZFRrS3NOb2lUR2dDMldNQk1NSWY0YklvSjdCTTRpUXN0SDQwVEY3cHZtOW16bkFUL0FVRS9oMCtHU1JkRGxVZHRPNjQ0RWtseWxxViA4aDc0c0lld2h4VlgyRUxjakJDMUlkVnA5UGh5RXo1L0xRZTJWQVVvY1lzL2R2QXZ3QitQOVJXMmtHSXN5T2lSb2UxRnU4aTh0Tmo1IEZERG1qeUQ1T1JVZG9iV2toaGZJZzVPMkdHT0VkTGxmTjk0eG9XVGZCZVkwcjZyS0MzalRJN2gxSnF6YlVVcTlrTWlIVTd2VUZTMUsga1Bqa2gyQlc5YnpTN2c0WUxjNEZxUStDdGxDWXZjMW5oSnNJam56L0FJRGYrZmRVNm9lT0hjaWg1RHVscWJlQnZpMDdtSzlyMWZsaCB3TW90ZCt6cDh5R3Qzd0h3SHVIKytFL0Y1VjBQazJ5V2k3Z3dBRFlBQUErZjl1eXMzU3U4b3hjMTBuanpKYW1vS1lTWVZkUHArcHhNIHpGTitMVGRWa0szNWc0V1F5TUJpNHRQQS9UeFZiNE0rMExQQndpU2tvNThCNER3R0hUT2pobDkzWks5RnBqSU9mQ2t3SkxUN09UekkgbmhzcUpZMTM4UFpKZ2NPK01pL0RCbms1U25COVBUTlY3NDg3NXNodm4rQUQvdndDNHpLRkNTNEY1Q0dabzAya2FRVm15b3pHT1BPeCBZa25Ya2NGcU5BRmpKZVZHZHNjVkNNMmI3Zkcya2EwdDRkMlI0c2tjQ3VXb24yUTBRS3ZySEtWMzF0dXdwTXE1Z1liQ0E0Vms0T1ZTIDZXaGRTekNDMjRWdk1UMXRnRDJOQXIrZi9VejRyck9BTUlrL2Z0Zy9mei9JRjZybEJiUThmS0FwTEpjR2E0UnU1RlBzbGJpVENJMEYgbktVaGtFK0doaHc4TnhmRGdJZWh2RzJFeGJRODc1emJZd0d3WWdVSHo2Q3dsdXQ3QXNmVDNXTEhsVStTN2NOVngxN1Y2VGswZmJBYSBMY2JERnNaOWNPNmlmZGxiOGdXd2QwL2F2Smk4R2RGQm0wbndEOEFmdUErQTZDWFNzNDlmSE8zMlN5RFRHVlc2QWtHS2ZzNW9ySG5nIHUyRVBlQ0VQNGJoOHdlWXJtK0Y0ODhPRE1zcTVSWTJNNXZadytBQUgvb0w4ZjZWRENwZDhRaWJhWjlpRVpVVkZFcXp4SDhneHlTVlogQkE3YmNlOWN6NzUwamRqNXF2QXliS1Z2bm1TUi9OcUZ0c3JGYWR6RU16Y21udVZVcjVVckpGYnlVU1ExTFppdlZzb0NMSGxmK2NEaCAwK0hDSVRBZHRNRGFEbTRES3ZLY2xSN1IyVHovQU92YUkvajFTZk1JYWY2YnN3OVZRdVpqTXVsRFFMNWtXRlZZZHNEZ1pVU3hnTU93IEE4T0hhakpNWDJTMUo1RFRUQld4ak1ycTZNTXRUQTJjeEFmbDErUVFIMkMxME5rcGRqc0N3dzFsM2xKSlcvRDQ4WXFVd3JzTzE0MmEgK1BqZ1FtTFlleU9OOEQ0bHdJR0hSa1lwd1lZamhFa0lqOTNkZy9yN0RyeVN0eWg4MWNlRHpsWmVkR1czeXZYOXRrTlVOby8ybTVBYiBJNDJIaHZoaHdJVEs1bnVNOXFaRVpaZlBzM0NjUDMvL0FLSDhPcmdMVHRPSTgwL2lYdmlsanprWU50aE54WThra3hZcEl0K0RhRGl3IG5yVHh3c1VTUkpNOEdXV3ljTnN0a01PUGNBT1R4WTY5YWRKbi9GYzA4YWRFK3dVOURmZGNORytrL2JqUTdOTmNxTmU2Tno2WURaaTQgZFpIZkZVRERxcmpHMGlDSHJZVmNEWmN0Z2o3bG56aFU3Tnp2VjZjUFg2TW5LenFtMWhIUXRmRlJpZk9ZNlhRcDRnREJ6Wnl0NkxUYiBsQk9peVRPZE1QOEFxTDFiS1ZYV1NwT1ZiTi9vSytoelgycFFMSEZMMFNXRW1xckpUMUJGZURDaFoxbmswbXVMc1UxOEtJV09LYk9sIGJGYkZMbHNpNkJvR2hmSEF2aHNlcXhSRnd2RkZGNWVhQUYrM3BxNmVERmk2b05XOXRWaHF1VzZrb2p1RnA1bFY4QnpkT0ZhUTVOY3EgWk0vRElQY1NxNFloRFB1SVNwclJ1ZzNDeFozeEN0OFh2ZU9LUHZ3RURoaGlmQTljZFJsTEV6VXZUM1V1OFhIUU5TOS9xeTFBWjFZTSBFcGJvY1hYcmttaDE5UGNMaFE3VXJjZVh1TGI4WUxKdWU2STIrSklRM2h2NzlzRy9ud0hUc2g2ZzZ6dHBMczZ0RzNPVzZyUTJxMmxQIFVReVpPMHVEUlRlbnNXaHc4R1Q0ZGJwOHdnSHNhdEdEZzRqazJCUW1Ud051MytkUmNCQWIvajBreWhCd1YzQlZkd09udGJHaHM1Yncgc2gyVkU5M01SRDFPQ252dWc0UTAreUVOd3VBeEJnTC9BQlV3TXN5K01WbDVCMG03VmQyREFId0ZSQUQvQU9YVGVQVEpJaWlPWTBqUCBGcHRRYzlRKzFEcG8yRWlzRExMN1ZJemxPR1pDK1NTSzdyeHRJWFI1Y29rbDFjY2t1MmM4OFNxUXlRUm1zV3NLcStSWjZnVXVrejVTIHM3NFV0K2Z6Q2ErU2JEVDJSYkhzTU96M0t3bkttK1lYQWh2bDJJYjR3VEp3RWVCVmJJWmlkb1BoTW1jTmhOODgvVUlBL1VUOC9kV0Qgc3RERUxsZEI4MVppWVdTTVQ1VmZVL0NBdStvNkhFMUFxVE9ycUVCOGhXUGluVElHTlBOdFlQYnNJd1phY3RGR0tXb0VDMHFiWUFRRCBCZXR6SC9sUUZYcXZJV0pmdG1hajNITmRvMWJ2Y3hqWUxYSkoyTnNoMDZXMk9TdFZhL2hxRXJkYmlWdVJaVWlDd0ljR1lzck5ZRlJ0IG1BMHJWRWtuRDRBK2Z4Zmo5dTlLeG8xRTNJdVZ0VEl1VU5vcUhiVlByZGU2Unh0ZW82bk1ybTdxOVExZGJUdzhPSHFFRHpMQS9vOTggbldwKzZJM0IvTmd6K3dIMERZTWRnWk54SHA1UlBDaWFqVW5FTS9lMlFRR0Zrb2JNakVEYm15ZkNtOU5yNHFQMDVYU1NKODlOQ3JrbiB0ajlJVnVMSnp1eHJsY3NXS1pBcDZncnB0RkhnUFgwZWJqZWRZMUtIemJJK1dQTU9EQTc3OWFBbkdLdHI1Z09IcFBoL3crSWp3Snh3IFdiTWFOelp2ODdVL2Y5Zy9menluN2N6S0hhS1l2MkFlU2JDbE95UzJLK29TWU9iTFV0b0N2VnpFVy95b0gxSWZNWDk4VXJBZ1R2czMgS0ZrWWM3b2hOZ3dma0hFL2p6N3JzT0hFT3BSWktoMjFQb0hKbFRKS1FSMG9yY2U3b2RqRldGRHNhdDk0VDZUc2l0M0JQaFZ5Mmp4NyBVWlprWm9LRXhsVnV3UzdQdndBQWY1OWowcTRZZExzWndHc2JIcDdkZ0s1VDliMWxWK2RZZGdTN2dBaTZuMzZZdkorOGFrSzNocCtBIFNBUGJiVU1NeFBpNHNtRE5oT2NQM0FRR0lBQmowb0o5UllWWmlpdXlXa1g4MTAybWVDZk0xSEpJaGZMYmE5b0xYTmdtTzJVVlhoTWsgaUs2c3pTaU9PK0hTV0tXQ1BjY3hzNk1xdU5yTU1TMlFCRzdRekhTdENnMERjbDJTWmpRa215eXNOQXREWXRxMVNpWHlWRDJkUHF0dyBwUHc5eGU2a0RjQ2UxOEdKbkFnVGZNZC9QZ04vQWIrTnVnY1JZeEF4UVZndFNrN0xqZ0VMRUtmbVJ4SmhYYUY1b2xCMkJiRG9kcVE0IGJBSHNaOGNPM05iakJsWUZCZ3RIU2Q4T0g4YmQvZno3OTBiS0NXd1ZwaE1ZMk9oMGhJc1o4RzJhOE5VT3Y3NW11UlFTcnZzUHRXdEwgZDJJYkl2ekVkRCtlY1QrNW5QR1luL0VPN2NIL0FIL1lOLzJCZ25HRE5kOVBiNUxwYW1WdDN6Ym11TklyOTJ5VStKRHVTMEZPcndBZiBtQmd4VDlxSnpnSG5jZnN0VVR5YU5hRFFzb3dOSjdKZ3dCOC93RS81OStlSHdsV0pCamhPWVMxM25lTk1SUXFxUEZuejU2R09OV2thIHlqWkprTUd5eHd3NFBBOTJYQi9SNDU0RUkrWlY2UlM5WVpSNnlKSmx0QWhDMm5lR0gwL2xtUm9WNGo1RlR5RU9xME90M0F4WUMzTzcgSDJaeHNuWml2YUZHMi93bmV6aDhBd2JBKy9mZ0RVVDQ4eWdyd1c3dUtJZHRXMDBPQnRlanpBOVh0WWUybklURlRRN0JaRVArVGZHQyBKQlE3Z0FndzZ5TWZNTExHV29FdEUyOEFBR0FBQmo3bno0cER6Tks4V3EwK0FBcGkvcVpUWGFybDRPeU9GZnhJZGpnVlBYMG1wN0JaIEJpcTVrTXdRRDA3QXI4Q0RjTzVqUTBNek5nYjJURFlFRUFnbjkvWUQ2K1h4ZG9MaWZaQ1E0a2x0VlBXY3BUS2VmQnFlSk1Ia09KRmwgekUreUszZkVPWVlZQTV3OTg4NU1HRk4wV1NadzRFcTVIUVFHTDh2cjUvZjhjN1p6TEs1VEYyVEJuV0xaa09RREVvK1QxaEdzamtVYyBzQU9Mc1Z0Um9ZVURvcUtnampWSGlsdHhpVlVtTnpqbWJvdDR4TkJ1YWRtb3k2NkRkNzR1ektVZzlvMlJwbzFYTnRPSUQ0QmVKZjhBIEQ0aHBHb0sybHNnSFE5Wmx3ZTlmUS9yL0FQT0RMeXhmRWJmUE5vNzhmUGdFSHdHQjlHeURqWTBhdkxJdmg4bzBicFhWME5TWHJnTTEgNnJsb2lHcjRIazJpSy9EUTdIcDlrWEU5YkI4ZlBQQWQ1S2ZlZk5wUE9WOStBZ1QrUGdNT09HMFpsUzEzRHQrMVE2aUJpb2IrSkh6RiBzUEVaTEdLY29LUGc5a3VCQ3ArN0VOZ01IRkpmYlRhZnRpdUxKakRsWEJPNmdEait3YisvUDNUK2M1aWZGMHYxNVYvYkcwWVptc2FjIGJMWVc2M0lYSFc5b0lmOEFEa2V0UlBZME83RnN1bjhrcmlsaUFFRVlyTm1mQmJNTXFzMms0ZjBDZ245L0FBT2lqMjQyaWl3bWszcEkgd3paYmxTQ1NLUjVLb1ZtWWxHTi92STFSWXl0S0xhUkJod21acWtOQlVCNXZDalo0OGpnZktsQmk0OWxnNjNxcktNYmJiNEVhdkw0RiBWUjNldCtHaVl0alE4TjRmSWFleUw3S0RyVHRvMUlkWjFtVUdkekFleUpPLzRBRDRBL2lBQUgreFhrTDZaSVpET25oRHE2d2wxVlczIGNnU3IyMmZQQVloUzBKbGdCNjN1RFJuUTRjZXRnNmxIVXRCclpaR1doY296Kzl2Ry93RHMvSDBFQjBZT0NPNE93TWJQcTV3WkUreWwgc2E3M2cxWFl2dTZlTFE3WmZTajVYOWIyUjJmRDNBUCtEUDhBbnZCaFpLTkN1VEpvN3ZhSVFIc0Irb2NINC8xSTFQRFhQNFNJYlJhQyBFMlZXMkxaSnJIdmMxT1ZFU3VtaXFJd0ZQZ0dHVytLSGU0Wjlhc1pzbnpqbkdHYTQ2Y2VTbjYrK09HSy9nQXdmbUQxTVlNaVBQTE8wIDJjakdPS09ISFZxNzAyekdOeHFrbWszSFVmZHlPTUxZUXAzWW9vRHQ1d3g3enp5Z3hpQVdaTFlwMitWK0RmNnJsZkxkdVZHR2pqU20gVmFpbGt0R0lSc0gyRXFoM2VHZVY2UnhWNGZ6QTRkd01NZy9ZN0xIMlc4QjJabVZ5aU16YjJiQ1lIMy9ZRDRCK3h4NmNFeTFDanVoLyA0U3ZUNmt5V2dIWlBqM2xkaStqNFdOVit3aStQaDVpMjRRekJERUdoc0RiQkRvd3hERnN5eUQyUjIvWU5nUDhBZ09odFRydGJhTEVhIGpUY3lXUXFsTHIwM3hMUVNkbllWc1dVcHlMYUNHUW1WVytHSEJ3NGVqVDZQUEk1aEdScmtWMlpaZUxSQ2Y3Ky9ZRUZnNjR4WlZrYUYgZkpkME5rTjB5MFdwR2xyNGVwYUhZWWI0aE5oU2tiZ0lCMlFQRERtTEJaTUlEaDg1YldkcjdtZWJOVmNjUVQrUDM3cFp3NzR3cU00KyBuelJaTGtpTTJZWGNYRHQvallyM1U5TjRybGlic2FwT1VkSW1lUkJJUmNiNFlFdkMxaTVFeW9OWHA1ZUd6b0kySFVaQXlyNU9WbWdTIFdkWUtUeXlRTnlRLytvM3hXaGJJVGZtV1F5dzAvQUg0RkhaR2FzMmo3T0NDYkorbjBIei9BTG5rMWJzUm9xTmJnUG1kVXFKV2llRkUgeUtyV3g4UmJsSnZlNHBNVDNBeE0wOXNqZVFaSGhEWUo3eFZheXpQbU81Z3duM2crQThCOWc2MG1DaEIzdEFQWE1XdDVPbTk4UFZkRSBhSWVkWUJhWWVLRm1pVk1JTWo0K3pUSzB2aHprQlBiWnpJVEppME42V2ZDQlBaKzU4ZzRiQUE2bnJFdWdXWnNHdk1xb05QZFhhZXpLIDNVckMwV3JYenhZWEtRSmE1S2JjR0VQRGNGdGtaQ0RoQjdYVzBjNHlUYUJiMFRSemJ0c2ZBWDcrdnQvZm93WU1TUm1rRkNKTm5jeGogSUJXSld6RnlkcHdXdlU1NVhEa1lGQkdBWlUrcGRvSjNrYkZOdE1mV21halVFZVIzWTY3OGs3MXg1VXJRUVczeVpiVXRqdXdhZW5vYSBURXRod3ZpUTJPRGtVYTkrUTE5Ym1MYkpWY01jeVFaOWdLWDBibENHekRLcnV3SUVCbi9BWVlJSi93QnlTSFNlbk5jc1Yyc0VGcVdKIElkbDZleVREZEhiRytGNE9VQXRrcXVhM1g0WmhrbWJPbmgvbjg4Z3NoTVloN25VRHc3SlBuL3YzZ1AwYzFsdW5mMjNMQzFTbmdMYSsgejc0M1dyOVJRMm4xT3lGY0M3Z1lxMlFxdUdITUxjeGdEcXZIMUZWV3htNkN4ak52ZTk4K0FQejhBNENmd1BvY2ZVK1lyaDFWcG42ZSB5VEpBdHBBN1QwUFlWUHk4YTVQQ1pVVjhUekVQQ0dabWN3NEdRN1ZUTE1XU2hTb0ZrNStVUWRSSCtBbnovSU1PbWpjalhjQ3ZISUVZIHhvNkVUckhHVXhqRUY5Mk9SQmJjWDRHUFFveXlQUzJOdEVEczAyNmpTYzVTTytDYk9kREZjWHVqM2R2TnV0UkV5R0xzeDJjcjR0cFMgenUxY250UE1ROU43WnVpYWtJYlJEcjh4Vy9aK3lJZGZ2blBHQ2YzSVpobkYyYXMzaDI3WFdvZnd0MEFBUVB2d0N0K25Oa3NEU3JiayBPQXgzTkpHNVZBalJPcEJ3bG9FdUhRL2VPSUxERDFzUGFnZGt1QWV5VURaZHdBVWQ4R0RDaUh4bi9STUcvYkQ5Z3czL0FLNDZ2VDZiIFNBVi9IcVZ1Q2lxVGlYQTdNTmZXRWgxZUptSzdSVThWWG1VOCtJUWV5RnU3RjlrdFRqODg1L1FhdWpld1FJYlIvd0F1OCszOStRVUcgWGRPMzlsNUNxcHo5SzZTWmdWdmFGcm1Mc3VhbjdqTDJnME1JR0l0NG1FTmxXZzVnY3lCRDlJUHM1YldYam5pTXRmZGtsSFBjQlByNSA5K3hBQUtsaVNWRlNSMEtEeUVPZDJFRFdlM0c0MmtRVlo3eTMyVTF3aG95SklVUXVLSkx5Rk51TVk1dUJnMmRXTEhiL0FLbTY2anJnIFpCNmxZQjRDK1cwMnczeHdOaVUvK0paSHRpMUhKWHNJcGJWcU1MNVQ3NHR6REE1a3F2dGRBVldWNVpxdlEwWlp3M3RKQjdBZlBuMzcgbjNUT1YzaFBESnhMVUVocXVrdHFLRE5QQ1JYN3NOUjJIYTdhcEVDTFFpSDhRbThNakpSNGV1SHhQc3l1UTZ5elBpR3NqTFVkdFBGbyB2SDZBUDkvSHc4b1lyT3FsOE8rUmM2bkJ1VTFJRVFoZVdjajFPeU5BR25MYUtHSENaRFRueUcrRUc5SFF4OWFQQ0c4clA4Umxack9EIHNrbTNqWUg3Z0ovK29Ba2ZEYktwekhaU1hIeVFCcm5jbmNmTkpVZkxtV05LWVpUNEhUN3NENnRlTjJvQWhuQUkreTRMSU1yTXBWeXkgakk5WE8xb280QUFBUDcvKy93QUpjcWlvUFlpcVQrYXhBUDY4SGpuaStlbElGQ3U3aTBYSEkzN2JQSEh6ZFYvMitlbnd2aHc5UVZXTiAvaHkrUFlXVm5ObHhxMlRuRDJ4d1Z3UmFwUUtlbm1hZmNFTndzaGdNQTU1QnRSL3ZOWHE5WmpOa1NjRG5nRjlCUC9RYWpyZTBDN1FiIGZoV1hLQUVzWjRlTjNBUTY5WUMwd29BWGlqa0hUL3NZZUh5QmtnejYvZkFRY1o5b1JzTjhOLzhBVERFQWYyQUE4ZE9hblhhWVVNVjggcEU3SVNkU0x0WkREVDRGd3NqNXR0U2xNREY0L3M2ZlErbnRiSU1rNEN3UGxjdmlOanFMRnZKTTVkbk5qaDgvVVI4K0F3UG4ra0V1TyBpZkZIdFFFQzdTbHV5MXR0NE83Vks0ZDRLUkExUGNpdStMNmY4eTFJYklPc2dHZlR3S29IM01XTHN6WXpmZTFIdncrZ2dBSEFRQ0MvIFJ4V1RBU0IyeGFOSFRET1B3cmhzbXErYkZHdUJadmkxWDJFU2JlbWE4V3h6eHJDK0xXN3NmSTRIemQ5RWlXVXNCSUtPeXRYT2Q4T0IgcUtxNllyM25YZ2QzODl0YlJ0Nkd5QjluY1BodFI2d0orekxMeStLNHoyNXNrN0FBQVlzR1BnRDdDcWNvbExpdXF5dFV1bS92d0JtViBLMlZmUTlTb0hENHRYMkZZd3N3d09ITDN4a2NDSGdiQlVnZTUvUTNuK2lkajVCK3V3ZFFMcGJEZ3g2aEVOanlpUnNNWlpBbmVCa0dCIDVsUDdEV1ZjaTF0ZlcrTnA5a0J1U0hMYXI3czZ0dk5tWTdtTUJ1MnluSDRBdm9QUHQvQTlaSVQxZGozZ1VVUERPVy9KWVhsUHNLcjAgZmkvYzBvaHVMQUhoekE1Z3dRaDJNcEQrS0IxbDU1UXpEUENiNXNIdHNHLzlER0dlT0V6THN1NmFmVWxQZmpsbDJaVWwxL2l4SHoyOCBkTm0yMW1tV0Y5NnAzaGpPT0c0WWdnTGU1c2J6SEhkWDVxeUUvcHZLV0pZS210MUtlYXRnWEE0U1d2bm9jampjWFRucDdhVTF3cjlEIFE3Z3NqZUNCaUNQcjg4cW1DYk1VS1lveHcyRWR1QW45L0FBTi9BQUhaSEZqdU5qU21WWjFnY3RBcVVRZlpDM1lBbW54Y3BzaXlvWSsgSFcrR251WlZmSkdvOVI2a3EyUjNmdEdyL0JoRWwydzhBZ2dOL1BnRDZadG1SWGJRWUR6NHRoU1Z0alNWS0ludUNUSUxHRmNYWHU2NyBmQ2h3NXNQbUJnNDJwKytjWisrUE94aEFsbzhCMkRCQngvZjdVT1B5RVBSMmVWek9DQlFKa09wQ2RUR2tWVmNGNklldENXTEtRMkFNIHR3NjMrR3Z2aHl5eDdiUGhzM0tGY21zZ3dnVDZDQVAvQUwvaGgweWFDZHRwNGRMQ3NNOHpRa3F0U2Zadk1rdjJidHgyTVRXQzhrSHAgVWNzY1NNak81bWlRdktVYkRLaWhVRWQ5ZUdvMmVTZURmUjVvcnIrOUw0WUxDelRJY2JXS2ExRWtob3JGVXoyRlBQUmJDVjlRTU1nWiA4d1lzZ2hEZUcyd0h1Y3RyRE5RN1M4b3lQVjNnd0FESFlENzZBQWRKOXdVNDdPUU1acDZqUWlIY0dUd2pibHUrTjRjcFVTTFNLMzhPIEp5UmtNSjdKWFBNVU9Bbm8xWjRpM25ZMGszU1p3QWduMEhmL0FMOGcxWFQ2ekYxbm1LdmNHR2JUNHRoalY2djJUT3BjdC84QWVhMCsgbEZ0ZlpUQ2ZEVzJVZ1lxczhRK2RNc3dZaHZqeU1lUHV3TkJBWWdBSGdlbjlJdWcya01mY3ROR29Cakt6Z2piWCtOVjJCYkRJNUpvbCB5VjdJSUo4TmJtVW5ESHJjNVNxK2ZPaDFBekNpak96SEFtTjJJL0FlZmJCdjREb1lqcVltbGRWdEpuVjlPOEJ6a1NBeHhST0ExTGdaIHhFaEJvMFZxalZrM3dkVmhLdkEvT1FkZkZsQ09iRitEK0tzZm5yekExaDNycTNhcmt6cGoyS1ZxZk54VmtEa1lWN3BGVTZPaTFlQ2ogVHZUS1BlcjFGVktYWU1vclhsaEU1NW1jVmMwbzNqRkx3WjAzSktUQnczRXg2SUVmT3ZhRlYxNmhrdVU1Wm9namF0ZVpEbTR6bm5NciBhaHI2cnlwNndyLzBteFFhT05XbDVJdkpLWjdCSGVqWWh3a3puU3BrK0tIS1poZmNsMFFJQ3lZY0RKenJVbzB5S2lEVGYybFNJaWpPIGFYT2xWUjNaRmprYU4yeE5ueWE2WHZhbnkycjB6dHdXZFhRS3g0SklDeEtvQnJnQUFVVHgwajJGZlhxdHJ1bnJmVWdReUpZelprYW8gTStBMWV2SnpQU1pUQ0ZNK3VuM1pmS0FpVVBOaGtHR2FabU9CcGJZZTU4cXdvbnBybk95cXZXb3EzWHVYNmxyMTNzMHc2ZXExMVJmOCBVelVKcC90d0dJa0k2Z3c2alVLUkpSRTJ1YWpPT21Rc1ZkVUI0T3d1dWJWS1VtaHlaM0VpNFRzVDhZZUZFcXJ0RmdDNEwyc00wUExtIDVNL09zNjVlc2R4SEk0ZGc2cENGY01Rd0Z2d0d1d1AwRFhReEFDUmFBRjZxelhGbjhuOS92cnp5dmhuS2FYNnQwdjJUU1BwR0tWaVggRi93dmdGODJFNXpnb2h5TG4yM1ZDenVLeGNJTE55WG1FeUNNaENNQUZSWEZoRTdJRjVZeFNqZ0IvcldjQmNqNVdkSnQvZDJrK2tqOSA2NFd2Z3FSZzdBME5MVWNQQ2hVVVZtS2NwZzlUM2xCNWg0ZXVHUmhlQ3NsQ1orUENzTWpuS2VBTExrT28rSGo2Y25MVk12MUt1Wm5XIGRhb2lmL1V5bG5COUxxUTYzMnVMZzRaZkREazhFRWNuclk2STM5alNzeXF6UnphWGJZcUMwZVdlV0JJdGNxR1dOWFF2d09xZlp5b2ggdFdrdDJhOGE5VFYwa25nNHJPbllxWXpQQjVpZVpieGdVa1g5YW1WeVp1WXhMWWYxbEFvZ3A2RklNYWhKMlpPR3c4eVl2eS9Sa2VuTCB3R3EwZ3Q5di93REVBdFdnc3k0TGxyR3MvVHA1cTVybkFhV3NBcFdjVXk5K2h5VzNkYXNBcVBCK2pBTG5OOWZPNXoxdFZka0k0bUxHIFVKNG9BT0Z3Y3RkQ3dRbVhuV2RHcE8yT1R4SEt3NThNdUdMRC9NdG5FK1JabzlZU0FQQUE0WHdLK0IxZmdPalptUW0vOFdETGVYRnUgdXhoMFh5Nzh0ZWhuUzhNMWRzZzh1dnNRczVJelVkbWpDNjU2VWlkalpROWVBbG5VZmxxTVFabE1vVVFiVElTZkpHUU1JOVlkTUYvdCBobW82amVzOE10UXp1b0ZtTEtiemlJNVFJaVFVa1N4WE9sWmxmcHVRUGFJL3FVYTdMNUhyempKWkFFWnVTbjV4SFB6QmtRTENUc2ZRIHJlak9zNlc3dTArcHlabXFkNnlZbXJxNnNtdkEvd0NuV3VOVldOTVZDM2Q0Z0MrVTgxNThuL3FldnhCUWhPYlFGbTUvcG5ISW9zQ2UgUUprSlpoRXZWQ1h2UTgxcFpOZTFTQnR1UEdqWldYTkQyeVJWZlZuNVRZNnJ4QU5PYnNaeEVjd1pjNWNJVEFXY3dVaXRGbHV0MjFNbyBuNmpYd21UVHJaUlgxd01UeFVsa0NDQkJVRnFvN01GU0Q4a3dSOWNOV2dsMnFZdEJERTRzQWlGV3FYTm5DaU9LMVgyV201MW5UZkVVIGpqM0xoaTMzTFk1bytSZEM2UFB6MVUvOGgvMi8vRHJqMDhWMkd1YlQvZFRveXlpQWowcTRUVDFBSEp5bDZCSUpDem8xeUtMdTludlEgUldQUUtrUjV2cUErbWNUVUZQTXpNN0QxalZXZmg2NS9xTE5ZaGRhUXlUc1F6bDFwcGZUcmNFQWxzb1pkMWNBM3lGdzZGaTU2WURMRyBDVlRKaFQwZ3dvN2E4NzRCQVZZWHI5YytBY0lHNDgvT1VGQ1BPOU1rVGtIeGpEbldkVTVQMCtxNVA4eC84Z2YrT2xwN2wvMi84SjE2IGRyUzdBeGJMS0ZCYzBpcCtpQ25hK215Tm1ySk9iQ2plZzVXaXRXVGdpZjhBTXV5czZjbit0ZFdIZTRYWjVGb1hxWE1hOXlISFBFc0cgQ3BqUEJDczJOVGZQaTQxVC93QUIvU2pyTlg1NXdoYUx3NDJ3V3oxcGhZMkFuVkt2NjJqSXRMSk9SRVd2L1FUaWpsREpuNWRjcnVUbiBTZytma0Y4WUdZYkQ3bnNqQVhHeTg2enBFQUJranNYNnFIbjhpNlArby9QVnQ3SlAzR3dQN0Jxd2YwZmtkVmNxbDZNTy9xeFJobnA5IEZhQUlGTmFWTEJYY0sxSU1BY29xdEZ5VWJXMU9YSjZ3eHMwYVlTOGhjdEN2SFltdnNTRWZtRzYvRlJvSWJCS1ZsVDBqOFBUbTJjcFUgUE0xRkJLSnNDNW5HeUhNMW4xL1gxbHp2VGpaRHN1K2tteVdSRE1PTGo2eVJWU09BR2VabHptbFppSFE4ek5QNG0wc2pLbFp5S1hXZiA4QVZnTXpyT3RPcEFTS0IxQVZ0cFV5WGhzSFlaSllvNHRReVc2YWhZTkRwT21KTW1wc2srdDhtL09OK2Z6ODlVeXRITEpycjdiR255IE95TWVmV2tiSVI1Y2VENlNPQVE1a3l5OVF1VjdaRW5MYVZQSVhXSEQxaEhwUkFZamZSaVF4eUpJVWRGRnNHVWM5TWFKblI3bzZtOVkgbHgzalN3K3pwZnFVYTJmN1hYcmxyVjdjNnJWWUlCeE1xYW5wU3dzVENENlhRMTYyVndnY2lLNmJrY1N6K2tlZWl4aUt5WmR3Y2VQQiBqc1hwOVVET3M2VklCOVhFYTVGMGZrZnhlRDhkUGo1ME9xdm10cHgrblVQaXcvRExaeGJ5TE5FZEpqL2h4TWJycTEwbzNFUmViRXNaIElZdE90Ylc0SXJacnFCNlpVSmlqeFN4Q2hjc2prR1prY2pQamxoUllmWXJDTmFsUE5pWlNSWUhweXd4aXhsbHVad2cwOUhiR2RYOHEgaWh1dFluWHo4N3hpMmthMXJBeXEvSUcrSE1ucGFjbVkxYVpzai9tc2NNYVQ1aTJmS3dPL1RsbWcyb1FGWFhGZXpCcWZnQlloMlN0USA4cjE1MW5TdFAzNlBVNTkvci9mM2VidnpmbWhmNXJwdW9Kam5VeGt4azNlSGI0MjY5dGZrOWI4MmRiYkRZby9PWjlRbHVORXhxcVNxIHZRd3pqMlhWODZTZVBSUitxbDVIdVROaDIweTQ3a3p3U3h0cmgrck1kWTdFR0xoV3NpTVl3cHJLRXFIcVdyR2FTYWFWdFJHcWl3NjUgc0xQbHhoS3lXMDFlZ1VYUnhLWlh6UEZGYW1WUmp6R1pXZ0drOVVFWm9GSXI5Y1RvTmZWQ2pyR1VEVTBpdmlyS3M3T1Vqc0JMTnpzNiB6cVJBQllnQUFPN3h4OHAwcHY4QWluUHljYlB5ZWVrSk9xWlVPaW1DblN2cG15MU92SUxxOWpmMWdaR2NYbXZnRXJxQW5Band1S1B5IEZUUFVvTmhMZU1yMUx3MWJGUTNDS2FKWmxuYzhNd2xrd3ZRRlpVS3ZqTkpHbDJaTmFuTm1MM0RvaDEzMjh3SDJuUFZ5NXdNVjBhazcgSVNxZFgxY2o2bFhKekJ3T09HT1pYcUlscG1CT3dSODBMQmtwRHduYm0xNWJKbldkYUdKeVhrOFN5a2Zvc1lzaVB3VFFzL05DK2x4KyA1MCt4a2dESjlqQmR6RU12Z2hiT0lJSUZtdko2TTEydmptbTNVUFhVU21ybXVsSncxRmpvSHB0aVNJYng4R2VhbjBlQVNUSzBlRHpvIFFDTEtUR05pOWZxTWpiQU9KdWFCSXVZWnNheGhYUDhBVkhNNTJIby9jS3AxNGRxSHVOZTlKQTlOT2s5SnovWnRpMlVVbXhDVmhXNjEgVzFvZHpkVWJzUWZ5VXNmbUE4b25PdUJlOVJxQzFJcThrdkFhQVhsaVJUVEVpaDA3Qlh6ck9zc1lCMUljZ0YzZ2lMdVIzTVZ5eExONSBZcmsySkpOV2FxejA0RS9UNkhrOEdRRDlCdG5JRDhCcUYxNW9YNDZTT3FLMFBTUVM3L1BqSzNxWlM5RklhWGRQTjhWOElWa2lOQmlEIG42UWV1cFRtNFN5OHlXUmNKeXFYaUFzMHl5cG1jejRMRGU1TUxHN3R3dzYyVG81aUZFVXNzRWErMFE2VjlZQ1E3TmE1YzAzVURicTMga3lvK1Vva0ZnZU5rYUl5MXpUc3JJV0Rpb1ZIRU1raExubTYrbURUK0JrTDY2d1BFRnZMRjVVN0lFbXhtZFoxdXNuVDZaaVNXYlBKaSBiWnFhS3JKNU5XYXM4V2Z6MWtjQXpvU0JadS8zN2ZQNTZZRlorZ1pjRkhXdGNqR0sydGxZM0lMUnpTUFYyRjFEaEdXbjdJMHpWaGJMIGJYWlQwNHRFbzNrcnBVazBUMVdkNkJKd1pPS0k4WWNETlRpa2lMaVN6RlpZelcwcmlUUjl2aldaZ3oySTVJczJsbzRWa01rSGxHVzEgOFpaUnBMQW1GbExlNURLQkhtRjhMRGllb1lMa1JKcUg2eWVYbkZpYVdSSUVTc2lmbldkWms5Mm0vVVNnZm9BcFFINEEvSFUxanV1bCAxR0xNdHlNVGl4Rm0xNU5FV2YyZWVvVzRkWjF6aEUrNmErRit0VUhneXRFNmZYdzlJR0FObkxIQ1NBc05xZU1EeUNBYWFQOEFVS1VpIEkyeXllY1dWMWpMQWlQa0NSdVFJamlCUk56R05kMWFKVUlsM1VscGpsSHpMVXVFclcweTFOZnRqejFKbUw1R1c0dDVEWGtDamt4Wm8gQ3hTV1JUa0xSR1NrcWhPUkc5Qy9sR3N1YUVpNVVNN0ZHNWtvZkl6ck9zV3BKVFZSUm9Ta2F6UjRvcEtvdGl6U2lsRm5rME9ldWdpcSB3a3lVTlVNbFpBR3JWTHE3OC9QVm9ORXYvRGcwOGFuS1U3a3YzcFl4eDMwT1RNQjlPVXV3YTN6TXJOaHhjeUlVOUdjUUt0dGR0aldiIG00U2pFdklqU0RyR1R4RUE4Z09wZ2ZTSlVsMWVCQzg2enJPdTNITEtGVUNTU3VQdmI4cCsrdVBKSEdYY2xFSkxNU1Nxa2szNUpyOUQgL3AxLy85az0gIgogICAgICAgeT0iMCIKICAgICAgIHg9IjAiCiAgICAgICBpZD0iaW1hZ2U1NjU4IgogICAgICAgaGVpZ2h0PSIyNjAiCiAgICAgICB3aWR0aD0iMjYwIiAvPjwvcGF0dGVybj48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQzODIxIj48c3RvcAogICAgICAgaWQ9InN0b3AzODIzIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY1NjU2NTtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM4YjhiOGI7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjAzMDU2NzQzIgogICAgICAgaWQ9InN0b3AzODI1IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MjciCiAgICAgICBvZmZzZXQ9IjAuMDYwMzc1MDMiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWU5ZTllO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3YzdjNztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMDk4MjUxNDQiCiAgICAgICBpZD0ic3RvcDM4MjkiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlYWVhZWE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICBvZmZzZXQ9IjAuMjIzMzk4OTIiCiAgICAgICBpZD0ic3RvcDM4MzEiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzgzOSIKICAgICAgIG9mZnNldD0iMC4zODI1NDUwNSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MzMiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTJlMmUyO3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzk5Ij48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM4MDEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzODAzIiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM3ODMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjlmOWY5O3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3AzNzg1IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTU5NTk1O3N0b3Atb3BhY2l0eToxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzg3IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3MyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM2NTY1NjU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3AzNzc1IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3OTMiCiAgICAgICBvZmZzZXQ9IjAuMDMwNTY3NDMiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOGI4YjhiO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzllOWU5ZTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMDYwMzc1MDMiCiAgICAgICBpZD0ic3RvcDM3OTUiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzc5MSIKICAgICAgIG9mZnNldD0iMC4wOTgyNTE0NCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjN2M3Yzc7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3NzciCiAgICAgICBvZmZzZXQ9IjAuMjU5OTc3NTgiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2U5ZTllOTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDM3NzkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzQwIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM3NDIiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzQ1IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3BhdHRlcm42NDkzIgogICAgIGlkPSJwYXR0ZXJuMjk2NCIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTg3OTI0NiwtNDcuMzY5MjM4LC0zNi41MDQ5MTIpIiAvPjxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDY0IDogMSIKICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgaW5rc2NhcGU6dnBfej0iMTI4IDogNjQgOiAxIgogICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI2NCA6IDQyLjY2NjY2NyA6IDEiCiAgICAgaWQ9InBlcnNwZWN0aXZlMTgwIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzQyIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2I4ZjRmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDM3NDQiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNiOGY0ZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3AzNzQ2IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3BhdHRlcm42NDkzIgogICAgIGlkPSJwYXR0ZXJuNDQ4OSIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJtYXRyaXgoMC4xMTk3MzAxMSwwLDAsMC4xMTg3OTI0NiwxMTQuNzU3MDksLTM2LjUwNDkxMikiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwNzUiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNzA3NyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDcwNzkiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAwNyI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A3MDA5IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNzAxMSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5MTMiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOWFkOWUyO3N0b3Atb3BhY2l0eTowLjMxOTk5OTk5OyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNjkxNSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzlhZDllMjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDY5MTciIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjgyOSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxYjU4NjA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2ODMxIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMWI1ODYwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjgzMyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY3NjIiPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjk2NDZiO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIGlkPSJzdG9wNjc2NCIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzI5NjQ2YjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBpZD0ic3RvcDY3NjYiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc0NSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2NzQ3IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjc0OSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NzMxIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDY3MzMiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A2NzM1IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjUxMSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDMyMzk7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A2NTEzIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNjUxNSIgLz48L2xpbmVhckdyYWRpZW50PjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNzYW5kX2JpdG1hcCIKICAgICBpZD0icGF0dGVybjY0OTMiCiAgICAgcGF0dGVyblRyYW5zZm9ybT0ibWF0cml4KDAuMTE5NzMwMTEsMCwwLDAuMTE4NzkyNDYsMTE0Ljc1NzA5LC0zNi41MDQ5MTIpIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NDYzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDY0NjUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A2NDY3IiAvPjwvbGluZWFyR3JhZGllbnQ+PHBhdHRlcm4KICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI3NhbmRfYml0bWFwIgogICAgIGlkPSJwYXR0ZXJuNjQwNiIKICAgICBwYXR0ZXJuVHJhbnNmb3JtPSJzY2FsZSgwLjEzOTIyMTMxLDAuMTM5MjIxMzEpIiAvPjxwYXR0ZXJuCiAgICAgaW5rc2NhcGU6c3RvY2tpZD0iU2FuZCAoYml0bWFwKSIKICAgICBpZD0ic2FuZF9iaXRtYXAiCiAgICAgaGVpZ2h0PSIyNTYiCiAgICAgd2lkdGg9IjI1NiIKICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIHBhdHRlcm5UcmFuc2Zvcm09Im1hdHJpeCgwLjExOTczMDExLDAsMCwwLjExOTczMDExLDExNC45MzgzNSwtMzUuMTgxOTU2KSI+PCEtLSBTZWFtbGVzcyB0ZXh0dXJlIHByb3ZpZGVkIGJ5IEZyZWVTZWFtbGVzc1RleHR1cmVzLmNvbSAtLT48IS0tIExpY2Vuc2U6IGNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gLS0+PGltYWdlCiAgICAgICB4bGluazpocmVmPSJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUlBSXdBakFBRC8yd0JEQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIgQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC8yd0JEQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQiBBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC93QUFSQ0FFRUFRUURBU0lBIEFoRUJBeEVCLzhRQUhRQUFBZ0lEQVFFQkFBQUFBQUFBQUFBQUJnY0ZDQUFEQkFrQkF2L0VBRUlRQUFJQ0FBVURCQUVDQkFRRkF3RUkgQXdVR0JBY0JBd2dWRmdBWEpRSVJGQ1luSVRVWUpEWkZFekUzUmdrU1FWVldLRkYxWlRRNFIxZGhabWQyaFlhVi84UUFHUUVBQWdNQiBBQUFBQUFBQUFBQUFBQUFBQWdNQUFRUUYvOFFBT3hFQUFnSUJBd01EQkFFQkJnVURCUUVBQVFJREVSSUVFeUVBSWpFak1rRVVRbEZoIE0wTUZKRkppY1lFMFU1R2hzUlZqY25PQ3d0SGg4UC9hQUF3REFRQUNFUU1SQUQ4QXIyeUM2bnJSTHJlMzYrenY4RmpmSkxZbjBiWkIgZ1F0QzJoM3U0b0hwK3lLclcwTmJEMkJNc2JiM3c2NEUwWVcrWGtNZUFodXJqZ0FCZ0FxS2c4RCt3UGlTcnBIOGREakF1N1Q1YU5qMCAyU3NDN2FYYTRkSVZQVDljMk1KUFJhM3daQkV5MUlWSlFBeXEyc0VFQ25zOWxzK0tOOUpkcXYyQmdmbDlnQWZvd1ZGSGc2L2dXbzFVIGpQMDNrcWY0VFc3Q1lWYk9jUG11U3hMS0svSDYyK0hXNmZMSGgxUkRINzRoMloza0YrN3h2bFhJL2FJQUE1OGY4K0h3cmNwOWN2aXYgZTVlVlZ0SnU2U1NpTUNTN0k5ZXNuOEw2UVVLR0dEN2duc2o1K09EMm45dE9MZFFFMWRYWnF6T093U3JqbHVnRDUvbndEejR5UnlZVCBHV1oyZEl6SWtrZnBTTkF0YklWaVh3dTNzMHc4Y2ZtUkxHN3dQR21DUE5HUzJXVzQ1SGUvZ1kzMjBMTmZucDVKNDkwZ1plVG0xTERDIFVQWUtHa3k5TjkyV1FZNEhiVFE3MjFxZ01PQzF6Q0dudUJDWjhDajlRL0ErQ29hSHRuNHU0T0FQZUFBTUcvNHZpN05NOUg1Vm9KK28gZTMwcnNQbFdvMnNKQXhoSWlCMmhONTVGTUVJYjVDaHJZY2M0UVZLd0lGcUo3TjRzWndmbTFvby9nUEFZOEI2V05UMllEcjY1REptdiBiYUpaemtIcTdzK0JzSWVwaHloL3MzYUhkQndjRU9HSHRSZ21IT0h3SjNCaWROdEF3WWo5cmtrRjUvMysvZFNOWjBXMFhKSUQxTFgxIFYwbStTbnVnWWtnQWgxT3dtSElVWGxSZjV3enFFdFN5RU1laHF0RDNCV2p3eUxQWnRYWmhqdzdCTFIvNkgrZm5qL1VuY1I0enh6T3IgeW82YWhERDJMQWNOd3BJenRITlhHUWZUbkh0cXNqMUlpenJMcHA0RktSUEM4V2RISGg4d0NvU1ZNcVVreHlKZGR3YWhTVWpxOWZ6NiBmbUQ3ZnJHTlRLMjdSck5rYU03bHJlc254eVE3QmZBTU1nWW1DRTlrVUIyK1ZLUGZJS2VqUEt1cjhtNFQrLzcrQStnNGIvMkhFZHd6IGJNdkp6eHVDL2tPbGdOWEpBOGxXVmZ0bjhOSlJoc2FLWUgyVFc5MW1BOHhoL2tCNmxZMHpjMWRvSm93TTFWeHNIeDhBZ24rQThCNlkgVDQ0YWpIeXY2M3pXalBzaDhVZ0xJSlRsVWJJcktiVjFYc0xTQlF4ME5EVzRiNU1yOXdnOC9ubkVObVJpZ3A1UnZ6WWs3QitYZC84QSBQci9aVWN6TFY2ZmFyUWdWTFYzenpEL1lWSHVBSDVhZUJLQ1lvRndYak44Si93QU90eURoN2tGS0N0b3lOeWl6Qm05aFFscVZEYnFDIGZmaitEOWlmWVJLcXhzeGYxSkZUQ05Na2p2NzB5WXlMSVB0YVNTV3VjUU9jbzZ3SDA0VXgya2Rta1pzcEpLd0FWOFFrUXg1b3h4SmQgbkxMaXVPcDdRVTNkWHNJQzJ2aEs3TEdzSTNkenhwcFBXd3doN3VLVU5iVVdZUVhMSVpIRDhmOEFCMjFmYlZYalRNMEN4aU1EZG5jMCBEQVAxQjFGd0hZSDdBcXJNNXFGVGF6RzJEbTF1dG1GeHhOM2RIdFMyay91UjI1N04xS0grR0hyZER3UStTSEswN2xuTGd3V1NsTnN3IHhIcE1JN2JBQTUvaXZuejZDZ2l0NFBCQ3djd3piNEhGYnM1b1c1SzlkRHNCYUZPcTN5TFh0YzAyeVZldDFXdDJvSDQrSGFtMWdBZzMgQlpyTjgzVFk3UmR1RG9QUHNQMy9BS2did0hzbGcybzFXcUd1WkFXNHRxTnBhcDJxWkhiQStuT1ZMVnp3ZXZ3N0lIMUlCNlRIR0VkRCByODlCaGkzbG9GRTJiOTd3NTk3ZjU0QUJra1pwU3haMzNha0pMNXhvN1VIaWplaG5oeGsyS1hhMG9IVWlYRU1tU0pnNVMwanJPc2VTIE16Vlg0czBDZWVvRWRsMVBLck13QnluQnRHcTVLTnA3SURjbjRueFFQZmdXeUVFK0crTGEydGtEQnprRUJIcmYyYWI0R2swYzI3YzQgMkIrUVFIbjBIcmRZR1hEcSs0SmtDeGs4Mkg3d1ZMWUt1U2lPRHVZVjFldkh4b29kZ1pFTVB6eDlIbUFmN0h0Z3hERnN6TndubTE0ZiBydjhBd0ZCd0FkaXU2QjN3eFVzQW8xdjgyeG54a2QyZ09uajY5UTFlTExQU2x0Z3JkUDhBaDJveUQyU3VRSkh2Z1lXVmtYeG5mQWp0IFNaejkvd0Q3QmhQdGdlNkZ3cGRpYlZXY05WUXlTMnJ5UERjVmRzaGxKYkRYSjVic0N0ekV3Tk1EMS9nODQyZmJVRXd6b3l1MExOUUggT0V1eHpnT3dBUDM5Z2FpdVZSdk9icWxWaHFJcm9YOTJHWDQ1eUk4aXVwdUpLMGpPTWNjNkYzZTJJNytCN3NnUDE0NXZoZzB2VjlkMiBXTHRvVzBXVEdWSzV5YWRiSEN0M1l3dk1tbnlwYkM3U3A2L2FsMnA0ZER0U3YxdUNlWUVOR3VBbjcvWnZkSVNRWi84QXI0K0FBUHkvIFdsUGVFL3RXa3RyNUR3bzFYczV0bGgwbXlMWXFka0tValllMXcxOE95UGxEaHc0OWJuTnFmUGd6TVZrb0xaaWY5YmRvZ0Ivd0dMOTcgMkVUMnRrcjZsaVdVR3VBbEVyU3dna3RndFNxM0JlTU5DdXZGTGtXOEE4eUd5UTF0UFpFY0M0OXVkc1JpbG9qTmpDSk8rY0JRZmYzNiBYaW5EcXNXWWNFMFhxRWJabFhqZTA4aHF1YVNXTU5FclRnaDFmTUlRL2VZdC93QTRqdHJBQkJ6TnN3NEtUOXRrZU1HQStBKy9lM1NyIGZabFdSOE4yWjJRS001SGpHR0x4cGE1WFp5R1F4QVhrM3dKS3JUUnJkZTRrNG92dHJONk9GMGE3VFpEZmpxeGNOMGNCZVk0Yk5WWkogUE1tRzIyVmRQeVI5aFRBS2F3bGJHaGp6Q0c0Qi9yN0pCbjE5V2pVWXQrMzFkWDdRZGt6WnZZTi80RGJvRGdJQ3FJTnN0QkkwN1Y3UiBZYXVDY082VXB0dGd3MU5UeFpyNUxRMGpmb1pDRytUSWVtUGg4UHNzbmdaM0JzV2hvNXp2ZkNkLzJEZjkvUG9QUjVVYXZYNEdQazJYIGFGNU95SGR3ZGxFMSt5RFdCZWNLdjVZZW9lR3dHRnN3WW1NbXpnNTlYNzRINHdMYUJqTnZkWGVBMkFBZjhCaDFEdmtpV2tQaEpOZ1YgS2JzS2tZY25sRmUyRTRjYnE4V1dGL0RZRnR3ZkZ1R3RqekVGdHNERUd5b3d4OGZCaFB1a0UyTkIvZndBRHdCUWlOWnNDSGxkS2RsUiBMMmE4VEdtT1dGbWs0eXM5dzRKR1RjQzl2WWtuR2ZuTk9ESW1QR04ydk5uL0FFUFEydHNsZnhZZXluclU3TTF5SHB5bkhpSG5WK0ptIEFYeEljbktxMCtoMzJZdGgyUzBERFVlci9VUFZiSjlvVnlaTTRrMWNFT0lQMEZCNllUUXYyQU10UWJXbXFCMlczeTdxWkdsbUIyaGogOVhiS0FWMkZvbElmZXo1a053VHg0WjRQZDZmaGpIbXIvd0JOOENlZjdSSDkvQWJBQUc2UHBORHFXSFh6R3IyUnYybFdwWkxaSGh1MSBncE5iMjBtME5ZMWpKNUF3dGgzRGtpZkRPSFNMYk8yeXN5cXYyenRSSlNUWnpFL3YrSDBFK0FVdVdocGFRaG1FZG9UN2tKS1NRdDZoIGNFTlBZSmFIWXliWHQybERDZVlRdzlWdzA5Z1cycnRmOXd4SnZuR1daNENCRFp6OFJmZmw5Kzl4Wlp2UUdTTjZLUmJrTWUzL0FEVncga3ViWnhqRDFZc0Z6SlFaS09paVpNcFcybkdiNTA4MjU1K0I2YVZWY25uSy9pdVFPL0ptWFhMQk1xV0sxTzB5bTN4dHIxZjQzSitHTCB0cEkzN2o3Sml5R096NUF4T244UmVEQXdudGl5OG5NY2VEOEFQNy8rL2dQV0xVaFlGNldxaG41OXlFaHVtKzZYd0lXUnpGaFZSVThQIGE3RHBGOHF1c0E5YnZrTytHUmczemo3WTFKOUc0V2dMck1tOEd3aVNidDBCc0hYbnZsbzRzV0xHdmx0S3BKUFNHUmtZYTMzNUlVMC8gZEt5RnZoampiaE0wOWh6S2NIQm5tQUNEM1BhM3dtc28vbTNqZitBb0ovZ0w4ZmVVeEh2VFR3THV5VlBoL01ya2FwUzdBK0d3TUsyQiAwK3l4YlFINWdaVzVnZnZBSHJxZlo3NVI0Y216ZnJXZTl1M0IrQWdINyt3ZE5ZUk5PdVdhektpT0dLZW1tZENvM3k5UzhPNDRwanh3IGN1R0NONDlNeGtDSFR0TXF1UTl5Sytuck5Xang5R1JUS3UxSms5VzNiMGpVTmx1TklxOGJYMm9JbGFJRXl0cVZoSTllMnBSOW1tS3YgUEtjcG80L01NQjVrT2FRbWM4MzRKK3ZBL0JwTjJCSGdBZmZRQjkrUU9wNG9VajBZTXNnOVRaaTR6R2FodTloTUNIbkdPejU1bzJINSBqQk1NR1h4RG1ZTWlxK2JCT1Qzbmk3UitLclIyUTZBUG9QOEFwRnNCODhGNm1MMDA3dEZKMnJYMW5VQmFyYlpDMmtNSENDQzhIc1pYIGx5aGNOd3F0RGh2aWN0cjZmT1E3UUFvNzV4bHBRNnovQU43WTcvc0Ivd0R6NjB0dG1CM0pIMWdkeTlNYllxM1M3Sks5SDArTlNmdzggWEtwR1VoMlF3VEh4OG9lcTA5Z2h6dUg4SC9HYUhhS01NT094c0pzSURZQUZSUHAvcENoaGNMd3UybWtxWnB6L0FIbEdNbGRzWnFMMiBWYkhuSU1PRng1RXN4M0hTVkkzVnlpbFBSQXh4czEzNTNZSUhHTmZkbjJteVgzTXN1WUJ0cXdkUzF0WktrNFZkV1Vka0d1RVNxNVY4IFdFZWlHTlFPem1FT3F6RmZyWUxWTGNBRjVzZ21UZkZjWTlQQVJKcE40MyszZlA4QUFVRUFFeDNCUEEydzRadGpHS1V0VU10K1l6djQgZDdONHVlaUs4cmJ3NzRIcmV5RS9TK0hWVzJyMUt1ZHM0R0xyTW1EcTdUeFNmUHdMOWg3YysyQ0hUeDVTa1ppZTI1cTJwTXVuaXQ1SyA2UVczWmdpTGNVRHdNcFc3QTRCNjNUM3hEWUpxcVBjTExvOWJXUm5LTnMzczM5Kzd1cjl1SDZpNmdTQzNOcmx3eWEwcUFQdkFGbFViIENIdDVLU2tUSXRqQ1JjV3lPWUxiSTRWdXQyQW44RHg1d1lSa2EwR2dtTXRUdGQvVUFEOHVvSURwaklzYjRSajIxaEgrYkNrOTM2b2YgQjgvQTZFbGxmZGtYRUd0eGlhZGF4eHpqbzQvSVh1TjBSNUhNamlWb2VWVWJxclcwY09BbGRFc2ppMVRFMTVUWTJpcGJ0c2EyckhBTyBMNGlSTGc0ZW5VOXQ5YUhUQXUzaWlINlZnSmk3SldMOTNlMzg2dm9UQmg5ck9zd2k1bUt1bEI4WkNRRjN5YWxzSkhKWFhjRHVoeVVNIHRiYWJ6QmJyZGJXN0hEcDVnR3BKOURRYklSbG0wR2pjM2gyNXZoK0luNEFBNUF3UHgybjEyTE1vbHpHRDJvTlNaTTJKRnIyb0QrbDUgZlliNFBYR3cyUEVRMC9qV3B1bjZUeHRIbGFsaVFndzFwbkZsQmVCM3dZSzN2ZENmVUxZQUFBMzFVVE5OOWwxM1E0WVZUSnZTdkFyRiBKWG1ocVpMQXN5SXJuclkxQlJhM3A4UEQrdVE4Ykk4ZWRCUXlheHVoUGZEbG91eHo5VUg5VDU4K3ZlemtRRU9vZTJqQ0x1YmNoeDNYIFBjdDd0cHdjY2NQTFgwMTRkdEN5dFNUSFQxQTRJdlR2bnNic2QrRnFURHVONU1PQ09VcFJaMDVXbGdXUTdWZXlhcXRPdWExRGwrT3kgTGJnVkRpM040UFU1TVRvUWVaYXVLR1BaSitreHc5c0NYZVFtajRQQm8yRWVHQUFmd3c1QmowNWN1dDY3Rldoa21SYkkydTArNGFsYiBKRjJPeS9GaHZsdE1KNjBGdXY1bDhHSENiRCtZcXZsb3FUVXlEZFFvdFdxQVlqMmliQ0hPQW9MOXNDL3o2b3E2dUNPVTR1dGxITnFVIG9lVWt4aTI1R0svRUxkakp0Z2kxZUg3dm41VURqMXVDZUh3RG5hQjU3b0RCbUx0U1lUOS9QN0J4OC8wNEVkMElWQkRNTGNYRkpzSXAgVDVQdlFOcjNVQVdmR2dYOHFLWVQ5bnRTdG9hZ3crL0lFTlYyeXMzd3F6REhqZTByOFJZSC93RFBmeWtUQnZxSW9jM2FFUnV6U3hLNyBTSmpzeXU4cng1NFpTWW9xOFpHMkZpMXhGbVJGZHFUVHVwV1QvbHhzZlZqcStkN0ZPK3hqdCsxaTNRZmVGZ1I3THA5MmNsZEpwT3NXIGhWVWtnaFhxZXdMeTNVcUdrV05YS0hhRDdNaHVGd1BqQnZrQnZ0cXVmdkt2cGZaeVlQdWliN3V2ejk5K0FlMkViSHE5MDB0T0ZiMDIgbTJFTmZOWkZlc3ZkQUMrYWNHeGJ1MmtYZXI3UW9jamczaUU5Ym1WaHlxZllDbWNNRXhoUkRaa1k0bEc5TzV4ZzgrQXhBYit2czVzSCBqNnpNTXNxb0xDTnBHYkRHbGsremxXUXB2a1dYRTVRdHVDZTRNaTJ5V29QN2N0dGZ2dXpzeE1XaGpOOHd4Q0hBQ0R6NUE5ei9BRUVyIGRMbEtXc1RtOVZMZEFoODFicHhJUjdPUTFlV1lpeFd6YTJSZmg0Mm1IWmEySHJnSnRId0hoa1dVWW9MUm1aNE5wT3g4KzM4K0FRZC8gNklQSTZSa04yY1lzNDljNVN3Um5lVytNZHkwNTVBWWNYWW9wR1NwWmJtVzl3ZzVSdFlYSEY2R1ZVMlhhS05kZGpoTVQ4cVE3UU1yTyBqVzA3UGpKL0Q4MVlVT3d1RW9XMkFYeGJyOWNNVVBEMlp3WkFjOVFQUEJnbU1hR2p1K2ovQUl1MkFCOS9QLzVrbGdMWThwSHBPeHRPIFZ6V1Jka1V4VXJZdjhrWUs5Y08xNlFVK1lSdzdWdzBPNEdCa0JnYmdyU0J0Z3pqSG5Fbi9BSDhmUWZQK2ZGY3l5SFFvQ1czZk5HalkgZExCNktVMGQyUTR6RXRnVU5oUGNrVDA5a0RtR1NZUWh3VU9CZE5PcmF5TUYrVEJtemZCejc4LzdBZ2dIN3FOdHlHS0RWZ0hiUmZDWiBrb3hKMi90NjhXRTRKcDZzckdGYmZNRExkd09ESnh2Z2JBK0t2QmhsWGxIamcvTmdpT2cvMkFBZzRkQ2dZYk9ZeGRjbHd1d2tZTVpqIFM2RjQ5MW1oZCtCWFJsbFpKb2tqZWRKTURuR1pRN1NjNXVzTWNzZVdmYnd6bkRFQUd5ZW1kV2RnWFpmcUZaeVlMSkVnS2FaTnFhL2EgajVTOUk5MmsxZHFYVDZoN090NmtERDRudjZITzdQbndkMk0zZENoMFpaQjJqVnh0SDJEZ1ArcndEcGJzbGdRMDFIaDkwTTZTTlF3NSB1WEdKTzFmMmE0eXJHMUhpNjUxVUo5a1RMSU1VUHcreVVkRDVhRFcxbG1LVTJ6TTI5aE9EbjE4QmJwOStYejlSZE03dkFVc0dvNzRkIHdOOEV0SlpROVRqQ3dXY3lWZjVRbzd2bFh3MTliTVVQTVQwUGtnTkRZTGFDR09UcTZ2V2ZoRGZCN2RQbjkvOEFQSCtnL1QyMlFuZEggem1QS3JIVHdOaW1JMTNVdVREdjY4eUFTbDg2YzdrN1gyUWgzd252aGdoTWd3TEFuSTRlOGxsWHRBbmI3eGFQTm5qWU9QKzN1QTZXRiBpWXhTTzJ5aVRSaDRZSmJqMDhuT1NCY1Z2NDU0TFVUWFZxcnMwcTNESmhDL3Y1TDVCUDhBaHgvVncva241WGJpVjVlN0hBMjIwMWFIIEtQMUIxM2k5aEVWdXNBUHVrZklIT1hvYjlMZFQ4Z2ptMWhhZXZWT3lBbHMraDN0QTJGeHozRE95azlwZFRlVExKbytXc3hsNWZWRWcgZXJMQW5Pdko2eWIwcWZTKzJ6cXVaTkVlc1BIMEQ4bUpraENGSzNSSlRVY3RBV0kvb3JrckxqTFBycHB1aEJKY1J4UjJrTDZ4SWt0OCBNUkRGUVJFakp4TVFDa3FWblRjUDdadjBkVVRGZnBuYjhwYVluK1Q1RkgvL0FIQ0Ivd0NudFROcEE3TUF6UHZBWkUwUzFiVFZaNXF6IFhINDZ2L0lPWEpZMm4vSnN1N3VOekpka0pMdkFKQjJDMkRGUzZsc2JHUExZOFBNRDd3NGNrcm4rUW5MWk84dnhtTSs3TzZNZnh0M0Qgd0FBQWZoMDhYWGVuTzQycERNcDVLSFY3R011T1J0c2hUbUN4YVFydmllNEIrWVhZSFcxN2xWU0VLbGVIQ29GbDhWeWFNZDRUN29QMyA1QisvQU9nblRtNjUrcERCbEdRYU5DRjdmYWdrdEhTYXhxK3ZvY3BXdUp5aWw3QU1mcXRzbGdmMCtwVlh4bjMzTm12QkoyVGdOdTR2IDJHQ0R3RUF6ck1YMXRqT0VsSnUwNjNHdDVxcWJZYXYxRlRMQVhvY29weWl1YTM0M0RNUHQyQnlGMkk4QzBMYTNnWnhmYkNYaEVtcXogNThCYnZBTGRRVUVCVWN1dzJBYkpCU3RKN2R0RkkyMHh0c3F0KzdKUWZ4ZlBUWkFzclpPVXpQdVp6RkhseW9GQ0tGTHJtOGkxWFFxeiAwcFE3Um1UeDVLeXpOWXhodHE1Q1M3N3huU0tubU9VVmhxOHFoam9hSE1ocC9NRnFjaDNCV24rcjdSeVlud25IRUhzQUErd1luL0FCIE5nRU5WR2tHeERGUUpyaFVxZW1rbEt3cXZhajJuOHNuZ2VicTl5NEw0ZTFIQVBaRVBFUGcyL0Fhbnp4WXQ1V2Z3bTdnd0gzNEIrcDcgcDJWbkQweHVTbVNzYlc1Y0J2T0RWN1Z6dTBMY3loeTNQSEt3anRTcDQra21SRGZIekFneWNEK2YycldTZW5PcnlmQmtpMGNUbjBGKyA4K2ZBZExGNHFjTzVVdWhob3RoTWpWRm1HNGlRSFExK3B3MUlnWmFIWTFQVmZEY0RPbTh4dUMyMWdTQUd4MlFaV1pSWEovaE0yN0F6IC9nTVBiRGY0VEZxSkhWODhGeGJGMHlnZVFjUnVEYjZiVWJWUGExSmdIOHJsM0xJbGpRSXBUMUVRdUE5eUtqY05ISW1Jd3k0SWJKcnggYmp0NmN3Y1dqejh0YjB5TWVvcFNaREpJYXA1OXpYSzQ3eEYwKzFrQlE2clg2M3F0YXQ4eFpEQk1PY3dVb0tHOGpOclJtWkhDYko1LyBIM1BuMTgvMGJLY05rWEt6dHJ1Tm5NbERxK1RHczE0R2dLZmlCejBWM2xGSERtRlYwbXl6SzNYL0FPUVg2V25NaE5HRkZMZlpuaDJOIDhIOEJ3RStoWW9PS1RyZG9GbWN2U2pYSnFod2xuWlZiM0hiS2REcVpmK0dCbFh5THRCOElMYjV5U2FIWHcrL09FQTRoOFp1Ulhac1QgbmhBUURnR1AvdEFrQ0hLR1JXcThvU1FMZ1BYQkpzMUhNS3lPWHVBREtwd29yOGdtTFllWlZmTUE5VjJYYUNpcTdZeks0dmN6bkNQNyAvd0RRZnNIVUt5b3hrVXVlV0xxOGVBWnhMSkU3anVmM2JTbkd1emdXM25wamQ0UldaR2RhQmRHeXRHaWdralFyUXJiM1dVTmtjL05MIDQ2TUkvcjAyTGhTWUdhS3h0RzdBUzBnMkVqa2dLZkRtb2xvTVZpbEZ0LzJnUE0vbzZkQXJDZmd5SXdzcGo5NDg1anYvQUIvMlBJT3cgTEVmTXJoSXZ0Vmk2bFdXS0EwdE8wV0xYMTF1T20rSHY4cUlCNEdQTUp6SW5vVXZGanRUR3JwOEpQdzNSOGVScndiM3M1ejczd2Z2WiBCUUdjam5IaGpSd0x1K0RZMXpKcUdTTGN3QXNFUU9teFplL0IwQ1dZY0REZzRPQWI4Z0hvRU1Zc3E2SFVETWJkcXVkdnY0RFlBS0NmIDMrU1g4dWw0dE5ubHhEckZrZkxXTWFrSWpRWWFiZjhBbVcwQlUwTkRNTUVOd3JlWVlUK0hOVzN6d2tQYk9Mdkl3RzdXaWIzL0FIOCsgQXFMWU5nWklHeVhNWXVYUkdTN01NNG9BNVVNdHV5YXBjc2h5dGNyV080MElNS290eXExYlc1dFlFclZ0L2lIY0Nhc0dqWXBBNmR3OCBOTnRUTzA4VlVrNlM3Q3luWWF2SzRHNEx3MmM5cHpYbWo1aEFPNFdSTUQyUlg4eWNwT0NHRDdadk8xckx6OTJOZ3dQNy92OEFpQTY3IEk0ZXhDaW5Yd0hOcmZIT256TFJ0aEgvaVE1RVlybTVidXVRQ3lMNjJIRG1KZ2NlaHRYRC9BSnlHc3ZOWHRBc1lEQ0pKc0dBMzgveUQgZitpU3lFZXY2clI4NWpGOGJWUUlFWVdJSG9jZGVoTkI0U0IyY2dZNUpEWlA5aHNHTUdZc2pGY29USjdJRWRnZVBnTmcrZzlidFJHWSBsVUVZZkdpeTd5U1VudmtiRW1NNDlWN0N5UGxTbHNQaDA4dHVDMmhtRnRQd1IrNEZsZzJURm1LRkdaR0JoRWszK3JCL1FQMzZDV0pnIEtDTmpVc1N4TFVrMjBGeVZZbEx5TjdsNVJYd3NXT1JaUm9WakF0MmNvNk9yN1Q0WjRVUVpZbjgwYkFDMkJ5VFFwbk1qd3IxZTJaeWwgY2poMmxyU3QrM29ld25DdDlQY09WYlM5WE1XdCtCc2hlWk5oN3hCbjJnQmVJYXlzdmdzbU5lRFpzSThjK2ZnSEg2aSsvTm9nbDEvbCBQaDVYU0xzSlZsV28wYXcyaFlUSlo5T1dtNGk5UGJSRlpPTjFBdDJvWWhqMXRWN3dYUzd3MW5sTzJNNk9rcEp2ZitQbnZ2d0RCK1JsIDZhaFVPZVFTUXhySmJYeFN5YlJpa0ZYT01LWVo4c2E0d0o2NENGanJaZ3h4QlAyTnV2QTlYTXhHV1ZmNk1jNFRWM2QwQUFQNytlQWQgUnhCc1I4NTh1Q3ZtaTVrQ3lLTW1EWWtmT3RTcDZjTVZLZVlYSUF0dUxKMkhobUUvaDdVMnA3YnMvSm54WHN6OTd1eWo5L2Z3SHNBdyBQdnl3OGpHS2FVcHBuTHJKc3lHS1dPU01VRUxia0xaWmMwQUZ4OEhQSVl0WXhJMG1KM1lvOFZhY0Ria1NRM2tpRzN4QXNXZWMrM2hhIDVEMU9yMTl5c3lzb0NraHhyenNGMkJ5MkI4b0hVQllVMFhLcklBbXJaOFBjRmJ1REluanc2UHVHeG9ZeDU1UnhnNGJDZWY4QUFBTi8gMkRwblZtOHI2Ymwyb2hubXEyblpvR3hyQ0hCMm02RjZZTEZyd0dKL3FRdGg2VCt5QXdOd2ZUK00yZ1U0TndtMGZmZjhGOEJ5QS9qMCBCdENHK050ZjM5bXVTcU5yRWVxMjFZWThaTUVTMW9vZUxYS0xEajYzTUdFOThXMDlrL2lIVDYwdFNId1pEd0dMUE52WjQ0RC9BTk5nIDZZVlR2bVloc0E1SVY3SVNTVmw2YjF0aFlLOXBOZkVvWXNwL0ZBNWNmcE1PeU1vZXlLZlQxVjhyOVNhZzdOenhYR1cvK0U5UER4eUIgQWZ0L29Uckt5VFNOTWhsM1VFaXh5ZlVORkJxMGtobWhrWlMwRUtScDdRdGlJV1d1dTBEcTRwWTBrMHlnN0dvTzQwZVF5ajJ6aFR2SiB4aG44REJ2QnM4WDFYdHM0WDhnd3VIc215RTl5bVJaYS93RGtDSXl4VmRoaW9ZZjhWT0h6QzdoREJ2bjlTa3lmRnlmT0hiemorQUFBIEFCL0ZCUDRScGdIWWdaVEQxb3VYOGJQWlI2NHhQNFlEMTZ0eFQ2UmFCU0d2NDR1Q2ZEbUVGdTFGSzhQbkJ4Z3hEd1dkOFNUWnM0QUEgZm9mZnQveGFqQW51R1V0c29zRE1rMWptZ1NWWk9EaGFsa084ekdtNm5QUlE2K3lVL0R1RFo4UGcxTDV4OEoxblRiUVUyUFpUWngrUSBmOXY3L3dCWXZtS3ZjbURPZ1Q2VE5oOWhDZTFZbnpERE1zWThXQWxBL0EyOURoNmtJWStaOC9ZWVZiL3RZeW9PYmYyRFlNY1AzL29BIE1JbkpkM3ZDc3plTkVlUDliNS8wSDQ2emdCSlFZRWVUeGhtdTF1VVZ1dVhxcUYrZVc2VzZ1RHNqTktKNTY3citzaTFCbG5mRVQzd0MgcnNNMVhmQkl0OE1MOHhibU9ESVlIeklNRGZtb1B3YTVHam5KdzJFZGpuN0J6NEF2OUcxOER5bFFaazJ1ZFNWU3YxWTZoMVVKYkZvTSBtVHFRZHc3a2V0Z0M1UXVIcm5hdTRGdGZNSTU0Z0JPZTM1UVJrWTQ3T3dSNDRDZkFmUWVmZEo5YmVGZTZZL3hiQnRSMnVDTFc2MkpYIGpLM1c5T09EUlVyWXJ0REpYK0szVDljTWlmVHpoY1ZENHRxUGh1ZG90Q016NzJiNE9mUVdBLzRCQlA4QVZ0Sy9XODNXUllpU3VXckQgazJkekJrcjF3N1ZwOXNQcFJvRTFmRU1zRzhMYkphajVZTXo4Z05xUDdMT2t0OGVpWVBlemV3b1BJRUYrUGdINC9ubGJaMU1JdEk2aCBUM3ZpSU9mQXBUdVovcmJ4S0EyeFlVK05kelRCa2t6bWtsN2dxNWJlbk5mOFFjaHM3WE8zNzk0TTliVzNUcVJEdEhNREs2ZnhLd2hwIGlWTWswakhNT0RoV1h4WHpUMFVsbUU5a01mUkZ0Z3RRNEFyL0FBT0xhei9ReE01YUp6L3J3SGZ6L1JXUHNSTGdDME9la0dGTE4rR1MgRXgwbkpYMVNaS1YrZWNrc0JiTUdKbkpCOHp0S1F4blkvd0JMNCt3UkpDYytYOS8vQUg4L2kydFJGVHpJcFJQdVFNa3lRS2JxUVFMWSB0Q2pUMW9PNkhLaTZqNnZWdy9NQTVoYk1KN0FodFNIY0UrajVpTU05bVptQm0vQjcrZ2dINEJ6N2dOUzhzd3dXTXloOWhEeG1xQTRFIGhLK3Rza2dzWWx0RlRpMzJIWDRjd0hjTm5YMlE1Wlk5UzdrWVZBMFdnTVdjUE9IQUd3Y0JQZ09mSDlhakNJWEtqSWVXZHp0bE1hb1YgM1psclB5dFVQTm1rTXVVaDdOdTNqVHpsZVpJeThMNHJ4OC9rZGRoaVJsaHFQbUZBMWtCRWwzcC9WRnA3cThQZVZncjBPK0lxblE1VCBjSEJEWkZ2U1hOVDJUWVdBQzg3WWl2bG9qQm14OWt6Z0dvZ0hkMUJmdjF1QXZqNWlraDNOYUN1aDBtbmdkYVMzRTBqMzlXTnIvTWxSIFMxM0s3Z3dXUkRaTkdhZWgvTVZlMENsQnNnbVRWME96TUVjM3NsSG53RnU3QS9BTU1YNnRMWXBsSHgwVzdNZlVOU2FzNm41S21ydzEgdEhweERxK3huZW00dTRXUUg1Z3R3cXYyT0JWNEVIZ01XU2o0ekxQTnYzOC9zQUErQXczODhyUExtR1dET01ncGtreFplVEdzSzJBTyBsWkdZV1N4dFFTOVVya0hzQndNSitvUzFGdGg3cVQzQ2gxWC9BRmtLTFg1c3dkamlDQVAwRy9QeDQrZjZ6UHpnVThRc3VFWC9BTGlrIEdXUFAvTDJVMlBPUTdRZkxBaFh0enpmaGl1T09NYlVJM0pzM3VVNUswTWNDYk9WQ3VrMG93YWZqOU0yL1ZUSTJubkVtYmlTS09mR0MgV0hxWW8yN0ZNWVBtVThuMnBqWDRleHEwd1VtcGJKNFhJcnN3d0hWeHZmRDRCL2ZnQURZT25tbG5BNTU0dDg4QlpLdWZMTHNsbGlMOSBrVjZRK1lLY3BjV1ZaRkg4RE1HRnRiVDJTblNEQUJlTzcrNlBtbm9ud243d0FQbno2Q2dnUFkra3pqWWx0cklOQXVkZWpiZ3hjSkx1IDhXcFc3UkVjSHlMTGFLdkRzQmlZWWhzakppeVBGOFdCZE1Ga3AvZ2RvVm5aanh2ZjlmZlFhaUFjQkFNNkhIZGJXMUdVbmVkeU8xa1cgUkttVnVrQjJUSnI5aHJlME5YMVpTcXZRMkFQTWNMZ3F1WUFwUFlXRGZGc21VUW54bS9lNnVlUDA3dW5rQUFmd2ttNHJac3FTSUljYyA1RkRTYmtaQmpSbXNaYnR2Um9GTUR3K1hiSS9iZ081MG1Eckd2TWtzRTlYS2kvTzN0Y3BmT1k3bCtXMURwYzRHcCtZQmdRMUpiMkYvIFlUQmgyVitTQVNrczhWRGo1akpNcCtHSElCemlIOER0dFppemZEUVRzekNyclJPZTN1L1ZFZlBnTi9XSXRmTU5wWEJjaWdYWjh1UUMgY2lNRmJwSWZIK0lKcExJY1hUZW4zQlE2MkhUM3hmaG5KL0xVZmM5cmFMTWVYaEoyTUhVWGQzbngvWUFQWHlZOFVmWlpCSkZybW1OcyB5VzFrcmRncmU0S0gwMzYwYklsWEpxRUtXTW4xOUQyaVpNc2hQVG9MNVlQenBqTXMyZ2gwYjduQWRYZUFmai9hTGdMOTF2QU1tWlBZIEtyUEZPZnJjQzhtM1o0ZkgyeUhWOWpjeGZIeHhNY3dtWENISUljNUNzQ0J6RGJDZ3UzMW1xMGpmQVo5K1B2ejhBMkJCNkZKdTBzWFQgQm5aMkx0dDRXRllnREZzcWpXUjc3ZUl3dGQxaWJIN2Mvd0R3anlxKzFiN3hXVWpSeGovNWsvYlJnY3k4SHhjc1RPemMxUFd3TUJEciBkM2p3NzRIOHdmUGlXaHEwNGZjTlY4OGZBNit5SThCd24xeTRNeU1yL2pQNlRhUDRpOXNINzN0M284SVNGTlNzQ3Q1Nmt5VnZaelFlIENXRnAvV3pGb1VqY0VVcDJiY3R3cC9UR1lRNW5lQ0hBNGY4QUFjRm16T0w4bVIwbEpDZnI5K3YxQlFRQ0NzY3QwZUsrcGJCY0RYWWIgcDlJeWF1ZDYvY003aEVJb0J4aXhiVXdtWEJ5VFp4NWhxVWJndHExUTlRTExRK0xQT0VrSTcrZlAvUWVBOVdQUjYzYmF2VDJXVWlaTiBqeTFhR2dpS1AvNGxkWkYyMFFuT2RmUklyZU9UNXRWaUxzZmNMVFZiS1FIeHJNV2NMVnhWWm93VjIyTUZnQmZxajUrLzg4d1lBSXR4IG85bU5wWm9sQ1Z0Q2ZHS09QZVZ1NjVKdHUwZ3JqdVhkUEJJckx1UHAweG1uMjQyalVrNTRSaVZwVVVpaDQzV1c3Tmxib2VBaUxkZk0geXBNdDhhRDJTTk1UdzZUeWdsVzhnVE1GdVZoSHZoNEdJZW9Sa2NJZFhod2MrajMyNHRyN3lLNk5aaHptenM4YkFlUDFHL2RkbE41ZyArd2FmczVvelh5MFNTaUI3SXNGa0lkZmljQ2xTNmNLNWFadnpLZkR6RTlreDRPK041NUhoTEpQbml5OHZHeUpJUGZ6L0FQWUFIUlZlIEMvRE12bEF5OHJPcVVPMElZMFRSOE1QYkV1N0doRHNJV0JaSEFQZGtPR3RzaS9EdFRTMFBnVGtPekxmdmhEMnpaS3U0T2ZBUHo4ZlAgL1FjVnVMUzdRVnpEc3JxK2NrNU5JMkVhTEk4d2JIczFES0liRkZya3l2OEFiZERaRUlQWUFlanp3ODlPcmZhNkhGNGZTZ21MeWZ3USBkLzMvQU9nbElRVlhFWlBHNmJnYWZma2lKOXM3eVlKbHQwY1V3WE12ZWE0OXhSYmFTVk1IRU1pTmptdVAxR0pXNFBKd3p5VzM3d3REIHRhN0U4WXlFdXZueXZBNlF0NmI3UHFBYlNhUVlyMGJZQmJnWUZzS1d6ZzQ4d21CM0NuMCtaQmdEMUpIbUxJeDhGMll6YklFNFBzQi8gd0hRZGNPb1NyMWVwODV5TXRWdEdNbkpVbDZ0eVdtOW9wemRCYlpGS3NnL1owOWtUdzYvMjRvY2dwS3EyVHN3VzBWbXNuRWcyRTU4QSBRZnZ4OSs2TnlsbVNPY0xabm5nUU83MTRTNC9UTFV2eFBpZ1Y5WEZoMCtZK1F3OHdQUE1RVkp3UXprTkc0R0xHSTJDVGFKczZBWDM1IEJQN0J6N3FYc3dXci9TV05jVDFLRzVaMVMxa2oyY3E0UktyVGFsWVhLTDNRbUIvaHAvenc0T2ZSNzREVDFuRGRIa1lEd2R0OC9WQ1AgUHdId0F4S3ptS09wbGFTeUJEemxKY2U0N0RqSEx0b2MvUFA0U3o5dWF0Q0VTczJtRjFrUVZ4SCt4eTU4Z2Y2RzR0Q0hkVnRsVm1CcyBZL04weTRNanZsWlp0bmdhcGJSMXlvTnJDMlRMaVJCQjJQUEY2ZVNVcXN5V1JPSkM1QjJlZWdlcktLRVdrdXk0R2NqS25SL1g2ZXM2IDhrSjFyTnR1UnhqT00wOFI4NGxGeUNnVmxtMUhEQnE2bFBKdzJZL0pEWitRR2JuSE5uNVdHU2p6bEdBSmx3WHUyaEJSV2hMeFNCWVAgcXdtWnFhblowbXBVN1k5V0ZSVFNydEE0cUN0QzkzbWdLdjU1TmVBZFptWThrZ2srU1l0THlmei9BTU4xWk1lTFc0RkJ1RTlEY0l5UyBHZkxJRXRHZHBYcGV3bnh5cEdJQnBJeGFDZTRUTFZmQTQ4UHFhUTYvclFIWkZaRXhmNU1CaEhhazNoQmZrRGZ3UGdFSEk5YjNRVVMyIHFLN21MQVd5aWVSUjNnYlc2ZmJCanMzY2NxVXRrQTh4a3RTdHc5b1RBZFp1RUdDSFJrV3J5ZEdzd1A4QWZRSG53SEFRSFJmTXkwTXkgdnVCNkxrM1lrNVc5bHRQRm5UQjh1SEZzWklsS3o0d2h3NmZjRU5rY0szVlo0K0JCTURHYitITm1aZ2VualpFZmZ6K1BJRC9zZmlPNyBGc0s2T1NlTEJtWDlxRVkrZjJGOXFUeEtFQkE2bXJHbEdPWXpLcnNpR1lUNGZlbXY5UEVIQW5iL0FMVm4vbWsvaUkvUWFDQVFlN3ZSIFhFMlpHQmVFcVpYZDhNNDQ3dlNnWXNPMi93Q1d6NUhwOUFReUJUbHRJM2NFckwxTzNjY214Nyt6dHJnQThtK2ttNFE2M2JZNWkycSsgempkcVNpU2tKejdJVGg3RE1GdmxaT1FGOFh6RElJWkpnZXJ3NnJaYS9QcDF4V1JoUm9KN0Z6WjIzL1lPZkg5L0FkV1Z6R0I4eVdDayB6UzVTZW04bFh6c2syd1lvM1J6Vit6aTZ2YkNpYitOb2RrYWtKZ2Rld2dnYkF1bjVneG1ReGZKZ2ZoUDMvRmZQN0FBNlgyWlQ3bzVPIGhLMmhhZUVtVWpra29oZ0MxVnZFTUZKVERYSjR3UVpZZU5rUTRaRFpBS2VwSTZlVHJQVG0rREVaSFNjVWs0QXhQdng4L2lBeDZHbzYgWEFERDY5UGNxZjYzelVLeUNvOXF6azlUbUZMYVNHaVVuL01NY2JRMFBlSVBiODk4eXMvb2JNVEI0ZlIyRC9Meit3YUdFVHFWWTNkYyAzS3REaS80cFk3dXg3cnFqVmMydEpIVmcyTGl2aFdpNXV2TzdCTDR2aWdQRFhmRkZZZUdEM0JQUThwcXZWSnJSMnNoaERtTEREcjBNIHFCN2NjYmNJZHd1QzNxRVpHQU9xd0xRVXAzQm5rb3JyT0hDZk5uOS81OC9IK3JVT2dla3pMcmYwQnR1MWJzNEt5RGF5WDZydUN3Vk8gSDhvVExWNjMreVdReVhXbjh3T05xL0FhakNOVUNzTFdWbDQxRCtjcUx6L2FJQjRDb21wUnN1d3lEb2VoeW1jdGdVM1RHN2ZJcjNUcSBvSkFlcnhiWlhNcUdQaVRIQXhNY0NFMTR4WDdNVlpqTldZc1d6YjRFNXRoOSt4d3gyRHJrcjlncThEWDlldmdzYlc5d1cwSE50a2RKIEdPRmV6R2lteE1VWDNRTU1sRDNBaHNqaFZiVSs0ODRNVm1qZDBPY3ZBVEdrK0FvUDlnQUFENjVBOXh5bVRDWjNSSVZ4eVBFc01qRW0geDhScXBGZUd2N2FKUUxieWdoTUkweloza3dxcUlBWEZyeXNnbXhRSGc1Y0hZYzRwcS84QWd1VmhJYklIdTdPUUt5RHd5YSs3N0RmQyA5cUNsT0MrSHArWk1obUNLMjFRTFFRemhoR0p2bUx6d1oxOXJVZnRnUDlvc01ENzg4MkIwZlR6Ulh1WFFVeU5wamJVbXR4Sy9RSUdqIDZ5aE9SUjN2aXBjUGhXbytQa05ESWZBM0NwVWRiWnFnRnE3TXRQQnU3S3VPUHdCL1lQOEF2MUo1aHhiTXgxVlNya0M3MTZtMlF5Yk8gWXF0WFhvY3F4bmNDNUIyQ3lMSWhoNnJEcHlIVmRsMGZ5cFByUGE2djhHN0JFa0dlOCtmUWQvdzZzSURxcXQ3NHdtVnpwVnY1MlE3USBKUmxPT25ybHNWT3lJUUNYVW90azVKTTFPVnZNM0R0eWhzQ2pjUmdtaks1UlpadnhjNzFYanNBQSsvYys2R01DYVJqSmdJUWgzRmtlIGtNQzBCQ1VydjhtbnlYRW4yTmxRRm5hTTRBKzJyUDU0VStQanhYbjU2clNQck14ZE9aV05MQVdyVE5WWUErRVlYak92OGdrUGlhS3MgSkR0cHdYM3lIRFc3Z1pDSEZYeGZVcDFWazFsbmFMTUdBK0VoTFU0Q2ZBTDUvd0FCZ1ZVZURIMVV3Wk5RVmZiUzNiY3BEMDhWbGJGNSBURStuRStVTFhnTFRNSHNpZk14RHNoRU9jUEQxTDZ5OHZndFpKMnA0WEhFK2dnRDZDQXhYd0hHMkVOU2VXR3psZEl5WDlrVnh2Y0Z3IFk3ckg2aEszZkUzbEc4V0RERHVDMmh3MTlQQnR0WVBtOGJaY20yRWtlN0RmT2NmQUFOZ0FBTVRCUWZMUnpudDFNeGROVkEyQ0JzNlAgOXFNNTd1aExEUXB5c0ZCZnF4UHRPeU1FVEFSZzIxZnA1ZUdONWVNVmNXc294eDJOWTRuenpCZ3dIOE1jR1RMS3F1SGhmQmF5ZEdpTyBObXhheVNSWGRFREVud2JyaTYzTXA4UXdkelFWZmI4aStTVzQ1SE5jMzFHM0xUWGFyUit0NXJTMUxkblNqMm9pNHlBM09wZHNUMmdXIFdSQmhnZVk0ZXQxWE1ZSWM2dENOYVdxeVBQRjBOWnhxdXJ2eXB2NER6NS9IZjVHbEhpUGJXV24xKzkweU5zN1NOUnR4MDViQjVJUjYgOU1hZ2RUNlJwOVRVK3dPQm9iNU1EL0VlSituK2xuakRnM3ZVQkxFSUR3OTBHK3o0RGtEQmcvamF1eVdJcFREMWZLU2V5V1FCTVhxcCBwOVMwYmFEWStLNmJxYUtORnFMNkc0R2RQYjRoTDZlajFvUW4zZ3VXWVR0Qjhlck1Sd25uTzBXd1lBTmcyQzBXb040UjdVdDJkRnF2IFIyemFXRmRjSFJBOWhCbGk0Mjl5aWVpMmF1TGpwY3pDMGsrblUzQ2VwdjZrcllQSzIwaTBoNk9uTHNDbmtMMnhQcjMvQUMrazlIVFAgR0dZN2JydXZwMmhHellJbjB5VEdZRmlsVVhFVWlTd3lXVmxSeXFNS1NVeEs3UU5qY0t3U2l2Zkg1QS95K29JMytmNDhmbklVb3NnVyByZ1ZPNEFOR1Z2SjB1MXlTYlZPd0RGU3A1YVpZdFhxWjYwSmFlK0xjd09aMjh4T29kd2dWd3QvYU9UYzQyUjJSOEQ2Q0FBOEIyQkJkIGt4MHNRV0RHM2RsV29rNVdveWpSdEkxZlV1blV4RFF3Tm5saGRvTXRmcDYzTVc1aWduekVkOElXWFRySU1abWkrQ1l5cTBrSmFQZ1AgUDlvdC93Q21PMlBrQjgwZURhdmZLZlVxTnQ1Mk5STFF5YlVYMnh2bEsxeGk0dnNuMGxqTU1XVGFBWUhROW92YnduczR0V3BwNXgzdCBKMlFDdjRua0hIOVQ4YVQwQVc1cENpS3pqYktTeXVDeFpkY2NucHF5S2dhMXhudHFJMDFnOURydFc1akhjTTJlNGJnZkF3SnBObFp4IHJ1c3ZOSTJpbEFzY0FHS0RZSHA5UjQ4bFk4bFdNaDQ5U0NKWnBIRVJ6SzF1YmF4elNYSFBhNHV6TFcyUUVhMngwSzM4b1pFbVNSQWogS3NuOFU2QUFFbkEzdFpHdUJsYmUzSGxRRU5URTljcnh2cS9OcmFrNFFHWTdjdlNiQ2psNGg0b3ZXMVE0ZGVaR1R0WTMwbXZzbHhjUCAxRDhiM01vVUpqQVJzSnFIdFRZUFBnT1FiRE8xZVBJRTdIU1JnZWpRdWRQdmU3RlBHenRNYlJjYmlocHBiZmpBK1p3TU9ZREQ0Z1N0IFNCQ0NZK2hsTUJadzJFNE8vQUQ0QUJ3SG53QnQvd0F2UE9KK1ZxV2Fyc3BOM0RyWW13RStaVSswVmU1YWo2SEtQbzh4TWh3b2FmenogWVNDaWM1eVRWMmpqUENUYnQ0QUFmQUh6L3NBRDFzKzc1em1aY2FyVzFHSlo5TkdsUEJFTUFHQ1pZempZYlBTVDRRdzQxWk1Jelg2ZSBxSWRuMXFqR0dZVzAzSXRERG1GcEcwYysvWW9KOCt3Yys2cE5FMGNXcGJUcWcxRXYxR29pazFNMHNpUVR2dFpTbHBYZlpnV2w5T1BDIEdQN0kxeU5xWFZrYXJTalZUVGJVVHh4dnRMUU9sQTdsYWo5dHFBZVNRVHdLNjdIQ0hxRVVxVHZKN1VvZEoxTFdqczIyRm9uZHRPb2QgZ1F6MFMyTUJiaDNnbVdwaFpNd2dIZU1XRUNEaDRvejRUclBFR0Zkalg1ZXFNQUE1QmhpQXJhRXVmVkhURmYyL2pVMU1xU0hGMUFxYiBhZ054SWNxUkUxeWh4aGIwU3Q0eE1xd1BNWUZ0cWd1RmFOQWhuM1MwTWVjNGNKT0lPSUREa0NBZ1luN2JPQ2VwMlcrR01MTG8xU0w2IGxvZG8zSklzNWJqNmNBOVMyTXdwcjdNN3dPQzNaRU9aL3FXUGdRWHdveksvR1JsVjZoK3laeEJmdkFuOGQvNlNkVDZzTXpLdml0ME4gU1E3SW1WZmFoR0pHeWFyVjJGd1Y3bGJBSUdHUEQyUXRzaUV0cDVqdExhQUgvYTdSVUJQaExzaytBOXovQUQ0K2Z4YXNFajZhV1BXRiBOWkxMTThnalNNNmZDTnNjWVN3ZWJJcnpUa0xkOHFQbUY0dnFjOUk0aVQ2WklGWXlmVWd5S2UrYXNZc011Mms3dVJlWFhIWDFWMG5aIGRWcDlOdm1udVNraTRkNmlYQ3d0VkE5czd4dEZUcTR0UGNIQ1p2RkpwNitZZUR3K2VjY0JuS09UYjRFcEwyUDcrZkFjQjMvb2tPRHogSVpMVzVUdldNa2E1TlNBa1YvVXJzcnNLRUxxL2ZrTjhJVkJkbUZrSWZIMlRsdndHcFBXZUxQZ3daaWt1M244Zit3WWRXRU1ORjh0RyBXZXVtdVVNSlNjQ3E3anFkb21CNUZEYldCc0xWQUJNTCtFUXhEVDJUK1JmSEMyZ2ZCaGd0WFJsbmUvOEFmd0FBZ3IrR0IvR3FOc1BrIGh0T01qUllNdzJldTRQSmQ3WXVET1lGTXhzSlp4VjdVSVRIQ1paQzI0RDVqeFdsUDdHeWNHN043bWo4SU40L1gvd0N2ejc3MFZOSUMgVXpUVDhOdytFaXlOV2J5UjRtdHdCY1JrYXhheWZpaklCNm1mZkppQ2NmQ1JSd3h4b1JaOXVMRzc1REVWMjJaanVBUHpRNTVTU0s5cSBVUG1wNUt2U0ZiclptV1lhSEs0NG9HR1FEc2o1dkNHUFQwZlZMWUNIT21jbEZ0SlRZM1oyU1FnQkJ3UWQvd0RQZ09OWXNCc2dXd2huIGtPd3RoVWdNbXB6THRuQm1Ec2pLcHg4YU1TQ2ZEUkxndXladzlXQTQ3NHlNM2VRVndYaEtTazJwMmk1OTREWUVFd1pEaHl4bDgrN3EgNEVJaHZoaHRpV1E0RFpERUhpZ2ZsRkdSZlQzQ1pNb2Q4WU44YmF2Z1FhM0dET0w5ekFadEpkanFEZ2ZQN0I0RHBidURBcjVNd1BhRSByTzdNTGpJeU80ZFBNVmZMRHZpdlEyb3VwWHo1Z2RiK0ZlOW9QbnVRZkRpZU0vb1pHcXQyZGplTDhCL1huMndQeVdDdkUwWU41b1VRIDF5SjJ3MlNCZjZmNUhQRjlNVVNCa21rZ2ZBNmxZM0tIT2tVVXl0UVhpVzFJUDI0ZUc2bUVjaFQ2U1lXNldNcXEzblJja2JjWWVIWVMgKzdwNHVWTWxjRFlJYTJHbHpHUmdaSzVVazlEdFRBWU1LRkt6cUFIK0xqZ0RIZnZBQUYvb2tydVErSWN4cWJhTVNTVkJabzF0WWFYeSBGdU9rSjR0b3JJOVhMSjk4L2g3WkRDK24zRWV0RkRlR1N6S3phYms0eWNxNElFT0h3RnVnY2FpN1ExRjBWWlkvVVFaeGRnTzVWS3F0IEZidS9jR1pucjZSOFcwV3dDTE1NQzNaQzNaRU80Q0V6ZnRIOVN6akZtRTFmVG04b3lPYlNUZkFlN3RSZmZnSFBsanZpMkJWeHVWQVogTElzS3hxckNMMmtlMUVPdjBsd0tGTlFtMWgyQzROUGVvU2s2NFczQmtPSHEvcGFkVzZ6MzQ0TlpuTmpZUHovQVVId0hQNDJaVmthUCBjY3V5SUxBNVRHemVMZWNoeFg3czN3c0xIR3dsOWxvajl2RWdMcWUxSkw3SytUZzJYSGl1VENwRGxYaG5BQ201dFAzWkR1bEo1RGNBIGVHd0x5MmV0RjNya1d5TDhPdDZncE8xRSt3WWNHMjdRYlZWOFppZlBGbW9BZk51Y0g4RUVCYnArb2tKQzZGYnN5dXpaQ1ovaW5wSUUgRGFrbjVEWFRQSGxzQytNTFFyOXIwT0doMXUrQnlGa284L1ZoVXYxbTN4WlNzM2tHRVNlY1c3L3Y1QjJFK242L3NUYXF5VDVUdnVUcyBCbUpCWmZxeGJrV3d5QzVTKzVTZ3cvQ24zeDhER0NFeFZ0b2hROWpibjcxZnVhUFZ3VDkvUWJkQUgvQUg1Nm9paUdGSHNoNnBhM1FMIGFxOVZreEhCUERzRm04OGZJYjRVV3g4eXlJYTJ5VU80YzRBdURiTzNONXEvblR6M1JxNUlSOWdmZ0h2aS9kT2ozR0tzMzlSRVNRanYgaWwyaVFvaWs3ZlRUTnFURTRaKzVzdUI3RXBZeWlweGpISTJFaWUwZHk0bnpmL1k5ZGxtTkdvQVduMjFlYVJoVzREVFNTMDhXRUhkcSBsc2wzWkdnQzJLNzVhakF5Y0RXM3g4cCtZY2ZMQitEVDZNemNDSmtnYnNrOEhZRDlSSC9Qdit3R3R6cmRYbjNET3hBeTZDMVE2YnJVIEpNUTdjckFtTWpUYlNuRlBJYWdZTUdiVXVGT3I4UnFaQTRLYlVZV1hwbjV5dGRyL0FHeFA4Q1BZUDZEaWVmcDg3bDF2blhJQlc0c08geUZXdExDU1hmbmt3aDhOb3Rvc0JGekY5RFpKbEptSEJmV3dlNEFXcGs3djFmM2ZSa2MzYUtTYisvSVBQdC8zK3ROazZqSzd6YVRNViB5K1ZYZXJKcUhkbTJKSWRyK1gzZmRFMXNvZVV0dUZwcDRkYnhtVitIK2VRUTNmNk4vb2FjdEdycXU3dW9JQS9zQ0Q1OHBBanlLQ0h3IFQzQ05OMUpNc0tYY3RNWGpvNXBpMUYxTjg5UkpIVU9NMEZ5WVlUTmg3TWVaWWFheWM3VVo5cERHemx4WkNFbnRwNjBhSHI0WFUxYnggSjljU29nZXNheHNsaHRRbXI2ZytlWWR0a011eHc4R0JiQmdUNTVybURHZDhLVkNqWXBXb2ZGSUF2ejlpL1lBRDJCN2ptRDBkWGZHbyBYUEpWS0hiVUtycFkrc0xJamlYQk5RMkZYNGV3SjVpaDRmRC9BTHozUTJOa3Q4WVVLMlpzWnMzc2JCejQrZlA3L3dCYmJHU0czVG9jIHlobEJ0RkthazYwUFZNQWZ3SXhCVTdIbEoweTk3czArNHlxR3Z2Q3JJSkwxWVQ3ZWgxVXRZZXVtU251QzlWV21mVStud1hwOUhyNUIgNmNPMHJJc2pLaVcxTG9LMUFsa2FiM2E5VjVncVRPZUJWRWV6RGJRdWsyQ2ttU3lObW1KL3dJQkdBcXdubXpNSDNGWUJoTHM0UGlmZiBrSGY4VDc4ZlNTOERZUnBKbk1pQkJKSUZnWFM2ZThHUlZRUnhTTnZIQ05JMTNhTnVvakE2bUNUSzVtRG5hY2xqTEZFa2drbnhNY2JQIEVpYnBmYWVtWlJoWEM5NTZOc3lITWQ5TjU0QTJ3cTNwblVPcTJUTFh5VmtFRWVaWXhTSktjdHZEaHpCaVdZMmRIUFYvWmU4c3l6VFkgdjIzc0lFT2NmMkUvejVCUDlWdnNTdTVITkZXZUdyRmtocTU0YkV2QUM3RDZjdmxvVEY0RHB6bVZlWWNMaHV4UFF5QWNIdUh3Wm5iTiBvdVR6bkNhdU9WRWZBTDZEdjUvb3FTeGFXK0QzWGlXcWh0ckVvSFFMWlY2ZjQra0o1KzBMTmluNjNUNGI1U1ppcXc5Z09DcnVENVZiIElUeEYyZzhzMnlBemV3ZnFBOEJzRXcyWmxmcmxzS3RjcmcwbFdGcXc2VExKOWJvV25kZWZJclJxRVZ6eUd3NG9mZUNaYWpCODVENGwgYW1HS3p0ZTVnK2JHMGRCMkFBZjJCQjJBa1ZvR2ZDWEpGZlV1cWJtNWo2MjRSZExWN3dBTkgyWFhOQTVHK29kcFpJa2pkdHV4SDJ4biBDS0tNWXB6ai9IWjdqN2lQaXowcEdsUTVjWURCNXBWbGcxV3F6RFRRTW1WalExM1V3d0o2Q1dCTTVjUmtMdWJuNm1aNG0wNC9veTF1IEl1ejByMXlaQnBhUFZKUHJkd1VpTVFBeVFsMEZuUlBuMFhUZW9MT21uNW83WnppSWNiS21ZVisxYWRXYllzWmJLSWplZmlaSUJ0OVQgbUVtWmRlRVJnYVVKeU1pdDFEMFFsQVFOK0FjaFJmV1daRFU2Wm5TenFrUWxEcnRzcWNUSHNoc0t4R09XNHRoYXE2RmkrQlpveHA0RyBwbTBoWmpSWTduazhXYTJ6VjBUVm1ySXZteE1XU24yZzd1QkpEcjdVVUVzOWtBcVNRUHNoSlg2eUQxelhPc1ZucVZQSVE5UXR3V295IE9GZ0dMR0EzQTI0YllzdEJTczhkazFlOXF3R08vd0NKOEFBZitra3RyZG1OQXZPc3FvSFpiRDFmd0JodGlZZUhYSFpDdXJpUmF1aGsgRU5rbVlzaUc0TW50cUFiYVBjT01peGFNamQwZnZCOUJQKzNQVC9WelpoQTVkM1ljZlhKZ2t0bnM1MnJFT3hrbml3VEF0b0xSSEtHdiB3NkhmRnR3cXB3UXpsU2tMYXdUeWJ6Vi9Kbm5oS1NiQi9YOGJkeCtnMUZTZGtyY21CZUhZRFY1SWxrd0tmVzNkUG1hYVpDOEh0QnlpIE5BdVk0R05RaGl0MlJrWDN3RzJqK1ZKKzU3V0xLQTNid2I4Zy9xQSsvSDdqNVZsU0pGaGhlSm9pNDNNcnNNVTltM0l0REdUdnF6Mm4gb1pFYUFzSk40VE9qcEljWllQSVhFK3JHTThlZUY4WFJJNEhUNG82bzFNOGwxN2NsTjJRdHJjcFZzaFRxK3dqRmJpZCt0Q215bHRRNiAvTVRIdmpiNFBoM0ZnUFEzajNyUGEveXBzbUp5M2VRQU9BKzNVQ3QwSFpGZzFmYldWQWhqYzVTbS9MMVVXMVd4QmhEcThsZXJsWGNMIEFXNGU4V1J1QWRIdHNoUzBHWThreGR5N24rb1JIQUFENEQ5L1lBQ2xmRnVwODE0RHVkUzJSVytvU3djNGF2TU15azZuc0psRnlrZEQgUFVOOHhQdmlueTdnbm9menlDRzhZbEJsb1ZlalBOcWZkbmcvNEFBZjU5MTJPbHMzNVVGZ09HVVV5WFpxMHFuamJaVTdWcHF5TFlmSiBVVmVWMmxrVDNBUDh4a3dxNkg4QlA3NFErNzVRb1Q5M1ozcTU0QVZFZjJEbno5MVpTZkhIMDlSZXFSNmtUc2pnQlBZRXlPNjZmWXVVIGVkbmxjZVZzOExNcWw1WWM0V2lEaVhLUjUycnVSOFZFZTVYY3RON1IzR3V1MnI0ZXBTb0xFaDZqTEw0M3F1MDhMY1pUajJFTnNDd2wgc3BGdGhEY3FmSHVFTXhERWJodmtCZytEdGpNTGFDYXppa20rRGdQUG45LzJBQVVnMHBnWEUvT3RWTU1WY2s3OUg3WG5sc2V3aHlndCBzS1dNbmp6RnFCMXZqWkF4TzRmaXE3bVRxOG9UUmptTzluQUZRbndIMEg5ZXhQWk10RHI4UGx5WWRidFNiVDZrSllKaEpmc0t0NVZqIDA1Y25KR0NITUQyckRXMThQdjRBL080eXMyZ0xSdk4xY2I5OE9BK2Y4L0EwbVBwT3hoL3lxdmFyYWZKNTVTZDNBd25JN1k0VnpLNHUgTHRRK2gva2hraHA4T0MrRVR5cjcyWitUS2czcEo3cUlPd0FENTgrd1lIMkZWYU9RQ1BhUVBnMGF0Y2JZbGNTaTBOdXNpU0xhN0JzViAxY2JaT3JOSThycC9Hem4rT3lwYWg4NVVBZVJXTmM5Y1p4WFR4WlN0c3BObWNEZk01U2QxOEM0ZkwrTEVpQUQ2MndRN0lXNGMweGh6IG1Bbm9jRXh5YnRlelluSGRKU2Y2QlFYN3dBRHFlZkVjZ0xJRWx5ZllLVFlWZzFYVXRleDZUT2g0ajRlVjlRaXVMNUE0OTdFOVBaQ0QgaE9VckFQUEZrRXlSUW9zczFWN0liZUFBQUFmQUFQQUh5UU9ReTdHSDE2a0pvZGJ1Q2ZxUUpPN0JVcGkwSGV0NjVsYm9tc2hCalc2ciBNWHhNWDJSSVBENTljb2F3VHhhUGFxN1I3MlBIN0JzQi9ZT2cvTVUyUUN5V2RsS1JpU3RxVFVnTHl2TUpjM1QweHlMU2dNd2V0cmNPIHlRL2VCdzVhNFBpUE1XZVVDMFVwd253WUFBQVA3K0E2RXNaRlZFZEhjV3lCMk1lY2JWaTRPTGVhTml1Mmh6ejBjWVZLeHpGUEdYd2YgSDFJd2M0ejJtOGNnUTNIdUp4NTZaQy9nRGFPZVBtOEJFOFhXOUZMdDhPMjhPNkdlaXl5am1ZSHd6RmtRekVQNGM3ajlsMXl0OFoydiBqTzloUFBvTy9ud0Q5ajBIZzdjS2RyNjlpMjBOU2JDRjB5RVloK1NISUwxd1Z5ME1JR01IeE1WdjNVNWk0Qi94ZUI1SU1aeWd2akx3IGJ4Mk5CQWVmNkc3WXI5TGdLaEp0MDBzakl5SGdLU2tLN0kxV0FKVzN3OVdSU1ZaREFIcmNPWUR2bGdXb3FueDg4R252SXRYS0RPY2IgSnNaLzJQOEFuOWc2dEVRdHlzN1ZVeVVCb1Q3c3JIV2xNZjVjZUhmekJjWWUwTjJxK1VZSUo4TkRodmpnUE1WeStlNnJEMno3TldZSiBLU1RmUG41QmZ2N0IxbWVPSTdVMHQ2blptalFTUTkzMHQ2VTZZcElQbU5NUTdUV1BPT0E5M1dqYzFNTWV3Z2ppV2YxMGgxRVVTN2lQIFdMTEtrYVNHZ0RsdXRMV1M0WWd0a2pWZEh6V09uNGFHbWdXVFZGcUREMmpFNHJZVjRXRmlLb2lKUThXWVBaSnRKbUszZlBoMGVCSHQgMVZvYU16Rkt2WmhuZEVKYU9IMzQrL2VBQWRROVpuRjlqZUh4b3REbG9GM3dyWXM0YWI3Q1QxNE9MeDdvSzhOZkRvYmhzOHpaNThENCBFQ0g5REYxbXpHKzF3Ukg0L3dBQmZUL24rZ092N2N2eXZuRFVWbTE4cVZjK1ZmWnlURVQ3T3F6dDZZYUlwYXVTa3hmcmZrbFYvRGNHIFNkM2hyVFp4bkEwTlpKdkFRSWtQR1AxL3dDRHNFd3BNRG9wWm1UTHRBa0VkcTVxdGtYaDlQM1l3TmxrSzhwSUZvYTM4T3E2ZmNERXggZm1RVHkrUFZmZDVReGZHVHB1MFRmZ1BvUFdwb25ENmhaVkNzWFNNU1hlYm1LS1dPTlZvQ09NYnBWRnliQ2liT1ZETHYyMExZd3RzbyBFL2lvbjJteWNqWGlxNXFqMXgzQlFkbTJOWDkyR2FnVHdqSUJHMXVKNzVXRklFMXUwSnJaVjU1UTVKRXNpWnZDL3dCeGdOb1R6dTVMIE5vWEpVQ3o0UUljMzdmei9BUGwwcFZQaStWWkJKalNFTTVEbm9jWVRIU1NROTNjSEtWV1N1VWlXQVlEcmZjaXlGOHVjc3VuMUxaOFIgbE5GQ2ZCelp0SkI3QjUvZi9BWExxT3pCN2t2aDgxamhqVU92czZ5Qk5mbjNBZTJkK0FObXVVWGtEZ1ltYk95RHc3VlArZWNEN1p1ZyB4NTdYSEhaNDU5OWZQbjhPaEM5S3lmSW9PdlorYUhqS3RqSGlVci9HZGg4TVBLS01QMDhoRFpQbUdQcmNGdEh6MVZ3R2JvcnJETWNDIEpQN0F2LzJEZjdralppRWJ0dzhIemxrQjhjVldQNVBucFFrUlZEWlhsOEhpcXIvVzd2OEFYUUhWN0pianZrZmpsMkpaTjNhVmh0c0cgS3htV3hMaHRGdGZGVGVIOXlLVHF1RVljRE93ODdnc2pNOGs2djJ3NXdsSkI0UHlEdjUvcGtNRndXWWtBOG0wS3FjSXcxakxvQ1FQZiBJY2VzcklzWlgzVzJrOGduL0RjR09Zd1RKd0Z3QTJOeVlaOUc4Sit2Ny93SSsvY0JGUTZtajVTL2t3TW1zZVNYZERXM2NQbjV4Q3dvIGJsWE5ncTdTeUQ0WWV5T0g3aDNVNWhzYmdUNHVMV1NleWVjLzM5N245Z2pheTA5NWx0V3huVkpLSlNWVXFoYnNIZGx0WGlURllXVzQgdXlYQnlReGh2RmdHQWJhd1ZLcWg5c2FWZEdKL1NRZ1Bmd0dHL3dENjRUQlJSZDhVSGJuVjRSaWhHbFdMeHR1YkZqaXVPU2NYa0dDUyBQSlJWV1M3azQzSEJ5N2MremlqV0k1K1JEanRVQ3ZLek1rWG0xV2s1T2FZQ1Y3WUtxMVI1Y3dDVUxsSExoNGVaekV3NEowUDZlQmExIHNadXZPZUQvQUVrSGkvZnYrd1AzVGExY0k5OEMzQ21WZG9kcXVwbTJxOXE0c0hmQnRIcnpJZUtKRVhrbmVBTytHSWNQNGM1U1lBSU0gT01laFRRTWVYZzJiOC80RkIyQUFBNkNEaERNcVZQbUJVMzQxaFJiQ0lpcUhha2xIcEdHVUEyRlhNVlBjTElaSm1ENVpIellLSFg2ayBjTUk2eStVM1VBeXF3dXliQnY0QS93RG9mNm5WWlNwVlNRRkdXcDFBeExoUFBTNGRnTjF0V2UxT05uNDJEWndzTFBNVld4MWJqakJpIDJLRFVWSUtISFdjMERTV0FCMndzL0gwK2tCNmZldjhBRmg5YTRwRkNLN2IyenhSMDV4bGZoYnhrNTJxc2ZhK1YvYmp5ejZmdWVBK2kgNWNtUVM5dUVuYVdqVVdjOEtGdDIrNGR2NUY2djlmS0VOUE11N3RnTjIyVHNBRzFCOHR3ZkZkM1Y5NFgxdTRKaGl0M0RrZ0toMkNwViBWRDNOOHRCWlJuZzJiQ0hINEFBMkRZQUNEMDRNc3U0QVJkMmNjbUpNeXZocnNwME83L2pJUEtpeENpYkRZRnN1dDF1NEIrWU5SNWZiIFZYN01MdEJHR0hBbnZzQjkrOS83QkF1RG9ycVZ3UTVWZkdFcXlFZ1BKNHVodUcwOXI1VVN4eGRiaitOdmkyWWh1RVBjUDBaQ2F5VXQgREhmUHUxcS9sNDhmUWNkLzZPMkJIcmRYcnNPWkZ2a2F2YjlmRnRTdGhWV3pFTU8wQVY1TnJuNmZpbm9jeGsrWjgrd0o3d3VFeVpRWCBjRHlqVmNraEFiOEEvb0UvZ2Y2aWxaSW9SSG1mcUVXU0V1bUdhV3RNQmt4NS9IeHgrUjBiTGlTaGFNdkZVVEtqWjF0Z0FNVFFyT3pRIG8xUjVQU0ltQ3g4Q0hUTEhYeTB0ekpXZEdsdURJTllLOVpIeVMySVlGUElJZW9TYkRtMnBpeUEvME9CeWJ5cnRISnZ4ZHdqNkNnbncgRy80ZE9EMTVZZGREM01oaTY5cVc3SldvUlMwdFBESk1JM0hXOFd4b21CUXd3TWt5WXRodzYrNE5VQndiVWNPTXJOcEtNeXk4RzZ1MiBOQmZyZEFQd0ErQTM5RzhzS1pzaHFUckh6cE5ZcVJpTExIbUxDZUZNdzBQaThVNGU0bU1QNXlHUVpKd0Z3UFg4SEpvM0tDYk5zbXlQIEFEZnovdHYvQUI5d1BDdnN6Wlc5aks3c2svNHBKU1NMWWFwaGlXeUljVVRkelJEL0FLYmNLM1c4WEN1Yk1ZQU9MSVRyTm9mR1paT08gd1R3Q0NmUDdBZjM4Qkg5TXI4M2ZjdmJJdFY3SDV4djU3VGREOGRMZFkzTFNlKzhVd0F1Ujg2R3lpL081ajNOZlpoN1d2aFZwZGJyOCBVdzdGS2xhclJaTEJ2TDhINW8yUFlWYnRFcXdoZkpLdnZpN0VPMUE0ZjNnenlHSU53Um1mRXJVQ3lqN0ppREFJUG4yRGZ3Qjl6V0JjIEJHbjZyVllFcXduYXNVak9DZnhBVnUrQjJFeEZUZUwzSXRrR1JQMUlHREZiL0R0VHVBMi9EV1ZuZEJndzU0UTV3SHdEOGZQb0hTQkkgTDc0a0EvZ0hsQmJNUUZ1TWtibVNWN1loeW9nbHlQV29RWEVPSGRsa1dRbmg1Mm1uZnB6SVQ4cDV3SUVTZVBnTi93RGJ6L1EyanNsRiB3SkZoQ3pNd0lSeW9ZMWVEaDJxcml6SmNvR0pGRjJSWDYzYWdlaCtZRDJTcTN4ZndPTW5PV2o3TnNuQ2ZQbnovQUNBK0FQZ0NtVm5rIExxcm5jcmVWRnl6eEl3dmxRdU52WEJ1L2l1aTdRZ1ZuUTdTSkhwNG5iYkcycDlva2IweGp4WmRrc053RHpUbXN5WXZxNGV5TEJNMUsga2h3Tm5KTlpFRlVEU0FpWUxxVVMrUkVNaXljd0R6RnRnRDJNQm8reTRQNWZGcTVQOG80V2p6N2Yvd0IvNEQwemlPWTZLVmtXZGFHViB4dVlCWlBsbUE5U3RGT0xhdlVvb1hiUzM4TlBRNGRiaG1EdU1CVDN4SFErTS9XV2M0RUNKSU5nUG53Ry9IMkJCNnArRHV3T2VxZkVOIHp4Sm1PUzNWMFN0OG13aUJkYlExZDNsaTRiZ0htTWhpYStFTUlNK3J1S3JhTndNb3o3R2toUDZBQUgwSHBrVklqNVFZV2VsSnFUVXQgaFZCcDJRWmZjR3g2M0xPRkl0QW5HMmc3ak5ROExIN3FEb2JWMi9QUERnc28xWDdac1p2aENNQVBvT3dQeC84QVFaRWNiY1JPNjQybyB0UWtnM1pIditObzB0YUFwOGhac0ZPUlhVamtpNWVOblNxK2xuRFlKRmRibTRRRzkzWmp5S3hKODlHMWZwYnBsWlMycEpxcTdPeDc1IE5aVitZTVNDd2RvcStKWE5OdytZVFlkd1RMSUlUUWJhbmdRVnFFMFpEUTJaR0J1eHZmTmdBYitmZndBQkJaQ3VuNmY1K29nOEJ0V3AgSzNtVjgxTWt2c09ucDRtR2U3ZTNKYUtlUXJlSFc1amdkZ1RJTS9CdU5zaXk4dEhrOWxDSERuYUxmd0FDb3RnUDB6VDE5c1k2RHptZyBEWnEzVmVxVVBxclhrZXpuRDRqSW0yMDdwcXVucjdoVzdJdHNrTndXL3dEMHZ0a0FOdWI0cjlzd2VJVFVQd0YvMzhBQVFmQU9hT25vIFcxMG5PZDJxU0hiZFJSSmhJSHBpdTJWV0xhQ3lhQmZDQWRic2l0NWsxd1EycUFRYlFiSXpEUHkvL3FpYkIvOEFmeitHd1RjbmN5SGQgMng2bW1FakdXQ1NYVWRneGFLV0JhakhtT1JYZk1GN1ZNUmtRZ1V4RXRBOHRwcDVtZDRmUWgwK3IyRjBybWJNK3BOSk9Va2l3QWoyMSBPY2hjQlVtUXNqTXBGd21MazhDU1czZUV5V0ZXOFA1Qzh0Z1NpUmFPTU5mVzVpMzh5R1FoZ3lEQldudzlzVjN4NVdYZ0pWenNjMy9IIGY5L0FkTzFwWkY5M0YxaTd2Z0VKTVAxNmt4S1B6b2Era2JwS3RpVWhtSEF3SHNkOFQ5d0QxejU3NWFNcytUSi8xdDU4QUFmdGdBQU8gaHBnbUN5ajRuL0FtSU14ZGEwbVhaQ3FrWFF2UTkwc0lXbThnMmU0UG1YeHZDcTJzRnRISEJtS2Urbm9tY0NHM1lIandIMzdCOU5vTyArV3BVdXB3UGZwbW53Wm11WWVwQjNrT0FFZTJmRjArcndHdXFyWCtlY3dtY2d0UnF0cGZVZ2I1V2ZGMWYrdHU2TlY4L1FRSGdENkVBIGpLaktIa1YzZFVlTjJXYVdIY2psMnd5bmFaYTlnb3NYcmtDdWJFUEhHa2NVWlNCQzZzZ2N4TlVjVkZZeHV3eVhqbWJaY0Q0QlU4VU4gbENENEx0QnA3UDRPOU11OWUwNXdjYTRVdlRyNVVwNTNwd290RUh4UFQ3VWgxdTRQa0VDUWZBZTJXKytYdzgvL0FBQURZUG9QUUhYYiBSWkdxV28wTTdBYWpic3g1TmtMeS9EMVJNRmhNZ0d4dFBZcUxNK1lHcmZ2WXlWKzRUaDlmei9tVyt6Q3lxTXpJNXp2WnYvNWRQMEh2ICt3Y2VYWGRxV2hRNWU2VmVHN2FWNkRITnJEVEFDNjhiQ1dvdEVOc1Vvb1lKN2l0c2tQYjVtbzFEcjg4MWR5MWhvS2RzL3dCa3h3dzMgL3dBQWZBZE1oenJCSEMzSXlPUXVnV1N2YXZXNDJtVVBrVkxhRzhBQlZaSHNFTWNZRHpJY3lZUG00cVRBZW5PSlA4RGs4VWVyVWwyTyBQMndQeDhBL1l2eCtLTkszcE5LaDFKelVTNmFmY3JDYlR4ejZhZGR0OVN1b1g2aU5wRXkxRzFRRitwZlViNmtDU1ZWY1JMak1BNENHIE9TWG1Oa0E5TjR4aTJMeHhRN25OcmFqcVB2a0pkTTk2eUlOYi93REVLZHF5ejFWU1QwdXpIQ2dXajFhZFJlb3UzMU1CREMyQnFCc2QgUmNiTmxTMnUzR1FwRjlDVTRXbUp6YzRGWTBldnd6RkNubTgrUkxZQzJkWGxVTlRHbU1jdGcvVmJkbnhLM1ppQU5lblFJdHBNVkdHMiBCeVZNRjRWQlZyTkg1TGhxQ3BraXRydGhCNFVkbERxa0tDN2hRV1hOell3bDQ5VVhIMHBxYm5TUFJYaElMVVVGTzRCWUZmR1A2UDhBIDEvWFRmbzlUZmVKeTMzZjNiVmVlUC9hL2ZqL1FmUEhsWVBSNzhWME93cFF2S0pIczB3RWxQQjZnVWQzbUFWZXNpbElHQ0JnUERtR1AgdmlPQkgxcGFqaCtMaWlPTTV2OEEyQUFmQVliQS9BTHBMYXZjbWJXYmdWTTFqR0cyRFNhalU3d0JzaW42Y3RTVnBmVTVTSDIvbUxSaSArRnUxUE9RT1c2YytNdk55RlZsNi9UOS85andBL3Y4QTBzVnNmTXNHWWh4UTFHb0Z6R2UyN0RUOVlvY2hoY1hQaENhcnNmYmRiVzRjIHhESDFXajJXd0tRUC9TOURacXpSelpzSWN0M3dCOCsvQUg1K2g2clg2elhMUU1NYVE0UnFIN01FbFBsVFNIZDRmWkhhK1NkazN4OHMgaXQyT2VoOXkwNUQ0ZVRHZHI5c09KUENUbkFiZFBnQUNDZlA5TmxFYnBKdDRHc0YxTExGS2tjeU5kUlRQRWsrRWIwYkRBNWtHaU1UMCBwSnBFa2hMU3lPN1pZRXZDWFhFUmxzSTVaSXR5K0MyTERFaGI4aThzZlJ1Q3VEVnBuMi9LZHF2MGkyQ2RzaVhaR3B1eUtmc0pQMkZlIHFhNDZnN2p6TlFsYnA1a2RNZ2djSUJ2azR6REhCbXhka28zdng4OGY4Q2Z4UHF1MVdEVmdaUXlWYWJ3cEhxdm1WdFRyQW41ekJMNGEgK0NiUXJsdy8xVW1PQWRmNHJQSWJHeU0yQlJYSnN5T2J3U2RnNThBL1lEL1ZpcUQxQVExSkhyZXRLMHNsYnJkeTB1cmVvU1FCSkk5cyBMWUVyZk5YM0xaQ2UrUTZyRDF1SHI4UEFiU0h3VEZtRStMakZubXh2K3ZrSDlELzJCMlZjbnVDYmxuUTFqR0pPVG1VUEdyMGdZcjIyIEw1NWtMckpYS045NEovRzNCRDI5YmF2NGdKOWN3eVl5cnlqdzg5MFFuT1Q0RGdMOEFBSVBWYU02dVJRbW8weVJhbEhtZ2dqaWVKdFcgSTlQdmtUcmc4MGcrcGpqaWtLU3lQczVpUE15eHpScmN3aDA4alNhWnBuMCtBTFRCSldnamsxY2NNTWtlN0xIRllna25kY2xVN3V6WiBXTElWV09SZmxpUUNGZXVUYU5wUE9yNjJodGhHR05QWHl5SEZLTzlvVkpESHA2M0QyZXR0NFZqdy9UeHU2TXNLNHQ1V1FhUzdKTlZvIE8vbjkvd0NmSHovd1lTVHRQNys3V0JwTXRUVE9ZT3V0Y0h3SUZiQ21GMjlpbE9PY2k0bDBUYWJmY01SaUFGNmViajUrdXBaTW5XTE4gaVVPMmY2N1BPQVY2d1YvMVY4Q1lUdU1kbVF3OWpWZmJZc29CRzUwcHdXNGkrbjVMakVtQWNWTzVEeGhnRG1LMitZdDFmTmVNV0NlRCBaR2ZkQmZKa2RKU2RQRHdmZnZkK1AxRndIcmN5Q3FyeWtlamRQSFovc3lwS3FrdzN4cW92aFBzMWJ0RGFkaGgyaHA3b2RQWkszWkhDIEdqd0dCdDQwVFJyazV4V2ZtM2JDb2o1L3dIVlRPUkpwOU9yT2ZxdjdycUVRUkhZalNGNVJxSFZwNDVKSTF3SVlSeFBqbGJzdmFIdU0gNHdTU0dKUFNqT3Boa1VZNTdwR2FGZTZzY0Zwck4yVGlPaFd5R2lvNTlrTzFqVHh0Snc2NXRTTFp0SG1YQ3AxNURUVU5oQTJnaHNHOCBQbEp6R1FlWW5OdkE5NEpzeUc5c3d6bXdNMkVBSU8vZ09QN0JoYUZUb3hQdHE2R09vVjNnTnYyaFc5eHRjaGJHSUJaT1E1ZDJwdFRWIFduVE1McnF4OFc0R0lKdHJDZmlIWnNId1hnTjJOS3UxSHFKQndBQVAwUDRWa0Z1ajRHRGgwaFNoeW1wWE1KTk9PR29UVDI4SkMyS3EgL25oNmsyQmtUN1REMm1oMC9EZUtsSHo3VTNONXEvYzk4cTYwUWh3Qno3SHREN0graHNHOEE2enIrN0dPczZsdEdIUHNoSmw5bnp5dSBKaDRsS25GeGR3aG1KaUZaRzRMZkJMUTRPR1dLelYyampLUCt0Vlc3Ym9CZjJCK2ZrRERRWTNabGNuTjIyb21hcXVzZ0dxeitUeGZuIDU1NkVTb0ZYY080amNoQ01jWkZ4d2NudXZISW1xNXNteDFhNTBUN05GbzluVkNHenBOcHJpSHFackpvckN5R0NXbnVUa2tmTHJkZnggc2hQRHVBZjRieDJQZks1TUU4VmZFWjV0SlNkZ0FBRDZDd0lKOEFBVEsycm1Nb2dxbWJ1VzdhUEM4NDJXa05RMGhFTVdOdTFjeWpBOSBERHNpSFpESXZtUG43OThQRm41NHNqTjdCbTkvNUFmL0FMQjFEcll1UkFWMlE4QmF0U0FlbThwU3BGcGNEdzh0RHE4V2oyTksvRzlxIFh3bm1FOGc0SS9iL0FMalM3eVdlVHJPeGhEZUNPL2VmUG9PSHYwNVE1Qll2aTFkUWVtRFRscHd0QjhhMG1wRjlQMHNNZmUwT0JxYXYgV0FDbitteUdNUkNSSmpDK0kxMFU5YkxTR1c3ZUdWYzhrY1VuRUtjZmNWLzFMNS8wZ1QzcVhDbEtrYytidU1mVVJMeXpsaGo1WElZMSB1QSs0NVV3NDg5TGJFNU9zbTE1NG1reUJ4aWtrN1RpdGZ4WXR3YnpCK0tNUXB0aFFDcDhjNVVOY0pSNElKSVVtSElKQ2VybExDbEFVIDRmRG1NaWZhZ2VmMjViV0NBOE9DS3NpMmxtMlBZd213Yysvei9VUGpYQlY0YW0wOE5mR1RKRHp5UTJJUGFsVXdKaHBwNXRzWUM0RUkga05iNGU0TDZlcTlyNjArWU1xRGl5TThuTFJDZXo4ZlFUNEErQTk4RnV0MCs4WHdESlBndW54c09CWkZrTDBnUHB2VDJHWStXaEVQTiBGVkwvQU15WWh6QTQvRnF4SDhIVzNsbTJ0Wi9aRFp6ZjM1K2ZnQ0MvSHo5cTlPV25tOHRUemZXMm40VllzelQrTXJmSk9oUU5tSFVnIEpYRk9NRVJGVWp6YSs1bUtlNXFNbG9zelZjMCttNHNYNjFDYXhacU9IeDlIb1luNDNYNFBNWVBTYkJQMVlWOFdhZVRSL1RPS25nOU4gRUsxNkVwc2s3ZkczSjkyVDJncm1RQ1lNRjJZSnR4STVGTXF5OFJzVGpKSHRTeDVSeVUyTE5lV0JvQUE1Q1VOa3NUVDZZN3FXV05keSBURzFKTVRFQ0JjR0VPZUF1NHUwSVk2SFE2MWpNWkYvOGxWZWVWVnNZc29iUU1KNFlCRFlSQi83QWY2WVZzY3NnQ3c3YlZUS043U25uIGFXbmtVa2hMTUlqbFRoNlZEVDRiSXQxWFQxcU9FTUdlNEcxVnU4MUErRE9NbzRRMmtuS2lQNGMrUDlJMlpWYnc1SisvQVppQmZ3dXQgd2xUZkR5U0Z4NFhjVmJLYmZURmdMZGJtT0hsNi9tVnoydlBkbnhqeXIxZXpFMGM0azdHZzdBZjJEd0FBdzAvNWNPZTRid3JyYVMrVyBFZWYyemg3NFByS1lMbFJMR2NrOGVHTU1oamtoQU0xUGpBQmFzU2ZGeGFNall1M051ZklPR0w4QWZrRS8xSGRGSzkwSW1qdmVpTXQ3IGVXR0RLK0E3K0d3Zkh0b25FNWNDeU8xeU5HN0pLN09oZGRzY2xNZ0JiWFhiWnNjRThkS3NQekQvQUJNbUJ5cVREQW5tMXNZUGh1Q1EgWWFBS256TGorQzM4eFBaSENaOEFnZWF3NnlzN1d0YkdFNXY3K0FmdjBQZ0UvcWtrTmtDamc1bG9aSklFOGtoVk5YcjV3VjlQYWVMciBsc2FDbTMwL01wK2JhaGo0WndEZUhhdm5GdmxHaTN2Tm0rRG43ZHFMei82TDl4Z0J4VG5wWUhsdWNwUTdHRHUwUm9hZyswekx1ckMyIEJjcVk0SjlxR0VOYmgvRHNhZVFuMk10L2xEYzJiZTZ1d09iL0FMQUE5bURERlNzbGlOQ2xwak1hWklGZXBKaXZod05USVRBTmdDVEYgak9UQzVSUzlmd3VCekRFeGdEdFFCZmZIaGpKL2ZGbEcra20vMkFCMHJIRjEyL1UycHpFL0dOUjloYVg3cnhvZG56bDdoWEpKL0crNCB5UlpvU21iVms2RmNZeFErL0k5MzIxNEpORFJsa0xJZ05ESUJnYmxxRFBROVNEWXdYTloxUC9EYUlvbFgrWjJUbU1pSERXK0I3OFBiIFVlWVRHRkJZeFpCaEt1L0VSL1lBSDBFK0FtWmdOMElNaDdOVFRxUzFXTlZhU3AyZ3E5Mld4OFBBWWxYb1laZ1pMVURzaGlIWURKaWUgcTdGcXVCbTJ2eGh6elp3K0F3NTkwamFUZUY5anNBWlgwQXd5TzFnNXhKZGpoOEIvRHhaUXNVMmRmcmlXNFErTi93RDRmdHlxSFdmcSA0eXMrYmJKanNIMzd6L1R5WkIxODBpMEhoY1U4N1BrOURqVmxIVlQrMHc3azRRZTA1c2kvMlRNVld0dzJEaXA3dExCaDdudFl3WnNqIHNjLzdCdjhBaUJBRnVxMHJLR1FUU2FZeURUTytNK0RZRkdDVWJ5eGF4ZmJRNU45UUJqR3NqREZJN1dRM2xqSmFoaytMeG9kM3psNEYgY2tnOGdyMitQVmE1c3RrakRhZ1BNanZZR2RnanFZZG9jckNQQzRZOWJxdHdXdzdnUFpBZTN6MnB3dDhZTDR5TUJtL3lwOStRZlA0NyBCcGJHRkRpcWRZZ2FId2s1MmNOcmQzN3FMY2VXNE5BR0pkd3RRMmUxQTYySHNuZURuRDdheG1NeXlML1k5a04vNWY4QVlPbW9odEJRIHlMMU9OdGxyWTJ6cXFWVW51aGZCSWcyR0VNcFlSUXBpd3ZpMllyY09ua0lYYlJnUXpreDV0L2dlUHVFZGdnTS83N0EvSHovU012dkkgaDB3N3pWZGljTk9EVTJnVnlrbi9BTGVMRjJ6YmlxKzE4WkxrQVdqTXhEc2VMUERIUU52cVU4TVVlbnVzVVhBRzZwV0hzd3I1KzNxLyBZTUdDbzJKUW1RaDBHTHlCTk03WHZTVkdaWkFsRGNzWVd0cnQvd0NKcysyU2doWTVGR1VMYmZxZUszY3Z0NXNESDhpNytLNSt2QWRIIFkwdUdMcnJKYlZWWHIycFVqbFRVUExCK0xxYlJLY0NCZ3d5T0V3eHdNMkJxNzU3NGpJM2t4bTluS3UvRVIvOEFZQUhzd3JRbU9FRE0gU1dqS1RnbG5adHRNakNPZkVsby9taWpES1RXWGVMSWhvZUxqWUV5REFxL2lyNGpJejRyakdZNWRnUTJEUVQ2RDlCdzM4K2g2L2JQOCBKMEFsTEdNc2pLdUo4WnNrQWJJSGlHUVhxQ0xmRURXQk1ROVBiaE1UMkNIQVErN1U1YldXZmxETjlKU1haSDJCKzRDZmZuL3FZQnNFIGxESjNNMFdEVzdhN0JYd0hiTlQ1MWhYUThWV0xBaVhJWHQ4TlBmS3J1Q2tpRXlEZFZ3S1FNTzlMUEYxbDVPYzJDSGY3L2lBd0FIMXkgUU9CbnU3MU83MXV5bkhjQ2NYSEpGUjRGRmcyVkdndk5pcnhpa2N2Rms2TUM2VmxnTEtFWmQ4WnpHNHRpd0J6MFMySzJNa3JtMG9NUyBOaDZiYXVQTkdUVllkcytVNVN4WXRiSDJPSHJka3F1WVFjYWQxU3A4OUhaRmtaenkzL09HemdNK2c0b1BkMEJ2NTh2UnlMUVVoemJhIGloMXZPZHp4SmhQc2o1VTdZbjFmRmwxeWU1QVl1d3hmRldMWTliVmRQQzhoL01yUEhuZ3daOUpDVlcvdno4ZlFYNC92L1MzcHE2SkMgNDZaTS9GSlc3UERPRmtmSEpjR0V3cFZYeXdOY3pGNE95VEE4eitsVU93TGErczdYYUJNWWoyalYzbi8zL0MzY2VwY2VVSVdyM0NsSiB0R2hDVFJuRzJGUHJHdlhoVFpQcjFvM0pkaS9kZ2RERHdxckloMVhVc1BnQXpIYUFwemxtUm5jSWt2Si82Q2dnQUIva0NKNThNdEtrIGJyMlJ1WmlPeDg4aUJHZnV4eE9SNDl3NDZjc0daTXJ5SStKbXBVTjF0YlYyZU9HekJBcmpFK2I0N1pEUldjOXNyd05iWEcycktyZHQgWHc0RjJrVU5ES2R2bkxVWXRzSHpIQzFBOUpqdzlqWHovSXcxbEdLY0dXZUVtN1JlUG9KL1lFSHp3RklWTXR0c0NuN0d5aHEySFRaaiB0TDB6cE56TkdwcFBUVG9rOUxReU5xTGFIOFFQOHpDZlI2bFZjTVlzb2UyRE9FbS9BZSsvdjJPSFRza1dSUStVOHFnRnN5ZFI5QXRxIDVVenVZWlE5NHpJZUZTbGRTb3Q3QVRMSXBNdXRWdXV6TU5QT21CU0NUR1Y0Rms5dFJnZkNNUUlIWWZvSEgvVUNXRFNkWHhiQVpCZDAgMzhwSjlqS3RiaWU1SEIxNWJhTGFyMERwZmNCOWtNcTIrR0hCZjJOU3IrQlhJZmsxWDlvR1k0YnV4Sk9BRUYrMy9FK0FQbjdEeGxYViBCdFBnWkpWbDA4eE80TWJaWGNSeHRuZE1Jbmt3eFVNUmtwSkdKbGtFckQ2b04vRkpGcUlvOGNNVlRJUm5Va2hJNVprR1JUTGRZajJGIFRwbVUrbDJXWXptalQ0K2MydFd3bTBUWCtjeVdSRW1pMmhlbEM4U0VOT2ZJYTJuK0RuV2hBVldRbTh2Z3NaNFQrZ1FHL3dEbndBQSsgTm9jaVlodG0xMmhNazFLMjNOVXBaZlFwZy9aNVgyaTJuMjBHVEV4Y0Q1Vy9EMnBTUUcxVk1jRzd5ckpONFNkUEg3L3dEWUQvQUZkbiBVb2o2RzhyaXBuVDZTb0V4bWtwUWtlWVQwZVd0OERVME55cXRnbUIzQnc1SVBaSnlHUVBZUTBiRVdpZXlPN1dqNzgrUHI0QS83bnVrIGpZbGVTSUdYRGFDYWZZOVZxNWluS2NlS1pUN2YrR2Z1NnpVMFZYQy9XeGx2VHpMSXdHTmhYeDZyenJERVd6UEp6NlM4QVY4Q0FRVDYgQ0FQNE1hU09Tb2JkTno3blNnS3J3TXU3M2M4aWhSNXZoV0xRc1dFZWVGY1NuT3dhRnFjVnc4Yys2KzN4Vm1pRnFCb2JrK096a2V2NiBTdGhueEp4RG1LcnVDd3RoaXFaNURjQjRaRHBOUFpERmdXbzhUMC9Zd3d3blRkb0xQQndnVGc0QUIvdjdmK3JhRUszaDBPcG9kYVQxIHR1QTVxZVM0TzMyUkg0MEJpdGtwOGhrSmhpWVlaSmhCa3NZRHFRNFAvVkN1ekkxVm05N3F0KzRDZjM5QlFUM1U5VzZtWXNCc0pMaWEgTnJjOWRMakdsMStodzdBWHBrWEZlUE9SaTRBNzVTY3kxUFpreFF5SGJrUFdlMWxDWXZteHRKMUdJSURud0RnSUJCNmFqeHZESGNqNSBiVURKMkcxVEVhMkpDVERzQnNjSE5OWG90Y3pXQVB5V3RyZ2ZNVTg1QVh4NXdQMno3eWR6RWNKc2lQVVhnRDZDZnc2WWRSbE1rQVhGIEl4a3pBUXJJWkNVMm5SNG9ZOE51M3lWbGt6eUZGS09WR0dSRWFabUR2TE1yTEFWN0hlVCtSM0dSSjhKUXJ6ZlBQU3h5eWxtWEpwdmEgZE54NGJHenFOVkgrWUhRN2dUeTNadE5kM3hvTVdoZGxxTGZ3ek53Y0hiWERZN0lGMllydmhOR0J1M3VjNENoSUlEeisvaExLOFYvbyBvUXFnbnpzNnh6TlRaTkJYeFgrVGN4bW5RNHFWcWFPb2FJUVcyV2g5U0ZKeTM5bDJENEZwcmVLT2hYdVRlVGdRNWlEZmoxUk1HSEFUIDdBZjA1K24rcDdIZEt4Yllsa0tSS0E0RXVVQVQxYmxtU01ocEo1TndjSWNPeUxJM2hQWTFVQ3dBSzVXOXp2Z1dzNzVkZ1FKc0h2aUEgQUlPQURyc0lLNlhMSUVqTVhPQ2NrUTBsc1Y2OStPV2gyaFRiWjNHY0I2SERaS0hjRTZ2NnJuY1BmT04rd3Q4c3dtOFdqc2dQdEYvLyBBSDVJZ2lJWmNOTVVMaVFJdW53eGthV0NXUmlkdzVaN0tLQlF3b25ueDBZMVU4VThVdW5rMUlkWXpFV2ZVWjRPSXBJWlFQU0g5T2QxIHUvdUIrT3E1Wk9qOS9zWEk5REF3V2VpVnhQOEFUbXpoK1pXdnFlYnVGd3E1a3hpVTNNTW80VEpxRnl6VTdNWFYxaWtHWUlEMXg4ek4gejhnVjZJc0RMejVRMkdPbDUrZFdTOVFRWllRQk1JRkVqVEdlSExTejZhOVRobG1xVDFkcGhHUmErT0hGSlVSUkRsV0ttaUFjRndHTCBGWmVhT2d6NjFycy9ueUowNCtUQ3NHQnlQWWJ0blI1YWUrNTRTYjVPd0JadGJOWm45L0orZjMxWWVjZ0g2bWZ3RDcvOVAxK2ovd0JUIDFCV0ptQStCekZkOEdwT2Mya3JJRWtZYklqeTNBVW1xVVdVeWQ0TGdoMXV0aGwvNEw0UEExek5abmtwN2pFZTdBZ1JIUGdBR0tEaGYgdXdvT2l6MERMUGxDOUxCMGwrMUNKSjhHd0VJbHFaOVo0akNiWFhSUndYekZLUGdZUVpIUXJpZ3Y5MEk0ZkgyZmNYZkRGSnE0NGZ4eCB3UEFXRGovVFBUOHhIemJnSkpxNWtraytteHRrTzdod095RjR4VjZZSnJteGc3RGFrS3EwTzFZYkJaQno4bG5EQlBnWXRaV1RsbzdJIGpnZUFnRC83QUE0MTlMTHRGd0VzcDh5VzNVTFlJY2twNlpwZ0d2Mnh3VjR0c0pzdmg4T3lFOVBoSjdCVDd3aDJoUHAxT3JQVDBVS0wgS3p3bTBhVEJXNmY3UklPLzgvZmlWbFNLVmdzSmNoUTdUSDMrYXhGY1Z6Zkp1eCtPZ0ROSXl4TnVORC95MFhLdkhsc2w4MXh4K2E4RCByUzZRMXNwbHBLNDcyb3RubHkxSCtzdFAvd0FPbnhLZmNsb083NCtjZmhoNGFkcURjTm5SNld1RDRDM1dZeG9GNmhSbStZSklOK3QyIG9qOXVyNERZRDZydkJIMVVVakQ0dStKSnNEWXcyU3dqcjQxRldCRTVsRnRqVitlVC9tTGRWekhBT1FtVnpBbnR2TUNhTVRhQmxtQTMgWjJDZmwzZ0lEOFJJS0NWT21tQ2FqMG5rcVQ0aHlYeWtXb2t2V3ZRS0dRczJHZXJtdmJGQW1DRXlIdzhQdUMzQmZHQ3BVY3oyenRCbyBlZGlOaE44QUlEOGY0Q0FBZFdXa0VLenpVc0RVRFJRK29jREFXNzFVMkJQMUlLN0Q4VnlkaWd1SDhPN0hEVUpUOHl3SmlyQnZBOVFPIEpOWktmbzhiMkVPVkYraUNBL1RwQmtNVlNzbjFLSk50eUNCczVJWStBMHJwUTVqb2J5WkRiTEwzTmx3Y2FidHhCMDB6dENIVXl0MlMgVGlyMHVmRlB5TURpZHkyT0s0MGE5bUIxVHRyUmFtVXVjL1cyME9wVTJZejdVc2lKTWxQbFpYZEtaSy9UOVNFd3d0bUdGYnNhMmg0KyBkNHhYUXliTjdkcmdiOGZBSC9BWTcvTzJKU2RpSHJWcmU1SzAwNnNreTZSc2EyZE94K2pjaXZUSDhQdUF0WERyOVBoME9xekdLZXlQIEYwaitEOG1SbndwWml5RWRnbDJkb2o3OS9RTy9uNit6SHlabFdYTnJwY3JlMjVzb0NFVTJpNnlSQ0lZeGFDd3I0WkNHaG1GdmdhKzQgTlErdjU5Vm1IbG1aMEo0WmtjSWxHd21Pd2I5N2JBZnN6VkRWZlZNSDZNSm9GbVhYVU5YVnVneVRTZWtHY0E4c3BUakJxVUVrRFpaKyBxcERtcC8yMUFzbjFyVHg2aFBxRjc1ajZVdDN3WUYvRkFZTUQyL21BMm5VRlM4K1B6SVlsY2l4N25qaFRMd2VXVTE4Vlp0bHJKNlJFIGNidldBUVNuS2lvYTl5YVNzUlZZMTVOM3hXOGhXQ253aW4zdDRJMDdTZEdZTmxlYUwzYWRYOWhCV2kyZE9NWjlEd0cvRnZlMXN4QWggMGllQVZrYkxrdWV0QlQwK2wxU1VsSmZlZTRzSUEvNmw5ZVRPb3RndkRUN3FMZks2dTV2Q0Z5bW5WMnJIVC9XV1FrTU1zWEdFSnBXcSB5Q0c0V21aaDRBUFViOTdMQnNuY3ZGb1pTbnQzU2VEeUNmZnNldnNnZXZoa09zWlM1eVRsQklHdzFmcWpTYkEvSEthdk9YRytlVnV5IEdJYjVZRXlkWmRvV1lqcll5MzhGY1lzbk1RbDJIUEFIOStQMUZVWFVrSFU2N0tadWNMc3RrdEd0ODBkSnRoZlR5VnNKTXlLaHBGSTEgelNaQXhEUTF2alE4eFBRMkRuSzJ6Rk9CNHJPQVJKNE9mUHYzOWZiL0FOR055VTgreEhaR2YvRFFqbzE4NVdlTEZVVFp2ak9FeDltQSAvT2NlNTRxcXRoWGczNXNuOVVXL3FzdERNaW5KbVU3NXh0VjVVdDFsSFQ4aFBTRS9ZWmFiRk1PRU5EbVZYRFcyQmIrZXZ6L2hqQ2RvIGFkRVpaN1hPMW83K0FQOEFnTWZzQ0NXNkxUeGJRU241VmhTU1duaGtaQk1mSnRTT1d2aXBXaGVBMjBuajVpM0RUMEl3NExiVVFUNTggNE5qNHJqSnc0RXhCZnIrSXZBWXVZWFpDbWF6RlhLQTFpeWFiMmdsSmlEenhnUExtUHFiWHFhNU9MaE1UK0lNamdRaHRTR3Y5MUlheiB0ZUF3bWNDYjI4QUQ2RHNHL3dDd2RiVW94TUF1QmdvVXlVbXlCZG0xS2tWL3FpcDlQc0picTlEZHlpRzRFSmhpcTJTSE1YekhaV3dGIEpxRHN5emppakkyOUczYno2RHNEOC9jKzZIVHl1SVpWQ1BHa2NtMnFNTGQ2OHZDb29TSWVNWEdQSHgwVWtjVXJ4SzhrYlBOdDdZZzkgS09QTWR5enlETUpJdUtkbUpvazgvaWV0UkRZQU5IdFZ2Z1NUL01NNmV4dW1WZnBPMVBpUTlPWldJaDEwdUVKdGIzQStCMDlnRDJOVyBuL3BZaWNacThuV2F6N1dnRS9yNEFmdzMvZjZPSTlCcWFSWUZXVDIyMURaL1RtZWJaYmZrcXRUTmkyMFNuZERsSVpBT3lmTWgyUVFEIDF6QTFBVHpuOVVOQ05zYnQydUJ2MkRCMmkyRFlPbnhsM3JDVjQ3VUdQSWRiMHl4MTY3TmkvVWtNZ1dXN0hGcWNvcGFsb1dvaFRERXcgeXZwOXhkanozdzJaR2ZGZG1KMnB6YTY2clFkL0FBS2lQN0IxUEdFeUdlcnRQaWxLcnE2eUV4akNTNm5xV1lubHBpdWV1TTlLTWN3cyBoa0RoMC82UEFjT1ZPQ3lzdEdJeEczdjlVSHdEOXdIQStBa3hES0l3N3d6UHpBenJFdE9vVTVnU3p4WllaaXdEOGdraml5UUtraG5YIENlc1E4YXVURzBiQVpwSU1UZWRBcWZ0b21qZkc0V0RSNjVwOWtVMGhxVTJUS0F2N0V3VWFCSWV6azBTNjVWOENLRytCMlF6TUhob00gOVBubzFQa3liUXIxbXN2SHNFOC92L0FUNitmUDd5Z2Q4S0pZWnRDdmhLMUZkUGYxN0d3ZzVENWhROHB2bHR3eDdLK1dRWSt2c2xkSCBpQjZ4b2FON1BkWnMzQ2JzTjcrL2NCQUFBQi8zRkdRaFlEUmhuTWFRZUNLbWFoc2tzZk5mRS91UjhWSWZQMmVGWkc4VENENXNJK2VqIHVEeXpDMWNZVE9iSnNlTDkrL2dBR3dNRlBLRkUyR0JYQ2dkVEQxcFlUYXBMOHh3WDJ4YlRhYmQvaWgrWVVuak1od3lDM1ZaNGhBdFIgazNQQm9lV1k1Z2s3MmY4QW9KL2Y5Z0FDVWRHRWptOG5SQUtxc3ZKdXo0cnhRK2VlT2crb1IreEdlTEx5eVA1cXF2dEg3ci9VL25xTiBtQWt0SW9QdmRMdUFrN3VWWXNpOFFsb2F2ekNVK1ZrcnE2Znh0RHhmSWZJT0t6M0N5emhoWkdmV1ZoNE9CTjhBQU83cDhCN0hzUlpzIEhsTEd5MDhBZW1Ob0VXWU5xaEJ3dzRrSEFua2hvNDJRbU9GSjRwNjJSNHFwTDU3RXdUWm1nb00zdzMrd01DQ2YzOEJzSFVPVVFqSGEgTThCTTE2U2NKVXhTaUdQaGg1WWVMRmxucTVYUGgyb0haSEJ3SHVGallzRDRkcDhZVEZ0RzVvLzVSQm4wSGdQbjM0QUFubGVRdHRFTiBQRmk1amIzVkQ4ZU1WdTRYUnp3OWhMalNwZzh4aXR6RnRiWCsxZDhXQlBCdUhHU201dktPRU4rMlAzN2Z6K0hUU3pSdmJPNnZHN0xQIEpFMUk5WTRGV3EzKzhVUU1iK2JBQW51dzA3SUE3SWp4b3paU0RJOGlTV2h1QVV0ZW1sR3pYZHdCVEt5VzU2L2syckFXeG9lVk10R3YgZE84TnFJc0xJTHRCZXNhdVU4ZTRNaWVoaDBNZkRnNHA3YlhMZ2prMWNvTTJPMGYrcUJpdi93QmdZUlRNcXVVWXlhSHNZWXQxdmR6VSBOWVpCZ2tuOHdRMDBUdzFQSU1sYm1JY0xtQmhWZ1dpMmcyUVl6RkJaTkczdXJyc0Jua0UrQUFmdjNVbTZabVlMc0I4UTNldlVtdDNLIFo0ZVlTRHIxVnVRSGZnTElQaGhtU245NFg4YTVuc0tHajJRakRHai9BRnhkN1I5d0I5K2ZrTG53QUIwNXJZci9BR2FxclUyR3QxSzcgS2YyMFRRNnJNc2lXbm9aNFNCbEdGOUREbUpoaUd2bUs1b2R3clE0SFdieEYxY01aZ2JzN0pPd0g5LzhBUDdCMEJrenBOM3ozSzdMbCBJSkZ4d2QzSkdlRnRTMG9za1gwYWxZQVhDM1ZXTHErUVBOSC9BRjhlU2VxYzZxQTdoWXd4eGxEME5sSlZlMVJxY2p1dzJQWHJJaDRiICtCTUQwL3VwczVoUGNEbW5pMFBEL2FLSEtNeHdIaWsvZnNkL1BZYkFmYzFYZzQ5bHE5TXJnYWdhdWw1U1RUbDNEOU5Oa2FmMU5rY24gSnN0Q1VYcjdnWWV5RnRrVHc5cWRqNEVHdDJZWitNMFo0TkpKdDRBYys0K0E1K2Y2V0l0WGoxeURzNkFHWkxrR3ZqSWdPOGZKRHVCYiBodFN1N1JYTU1leVRGdHdXMFBqWU1Ed05xaGpIcFg1eXN2QVEyYmVNQUhnTi93Q2ZZM0d0U1lZQTFYVE4rMDNxV0pVbnFNY09iajNDIHNxM3hReGZFeGRqTGJBaHVIRzRka01BY0dwTUg4NHpjWHhlYk0rN1hhYytnK2Z4d1BnSHlhaFZWVkVaU1daSkVpMUJla2IrUE12MisgbmprdUl5YkxKdVZLOHJHbnpQMUFrUm5SNDVHMHluS2VOMEJFYkZMRjNiZ0RqNS9WMVgxR1dJeWMwemx5ZlE5YnZiNDFPM2Vod3poMSBoWEFMY3JDcTlwVzYvdFJQMHh1RlYxV1FEOXRMUStDWUpvck9VV2Q4TjRjNEFIL2J1NWdBMzg4clBXSnJOMWhwOUo2Y3dOZXFWUDFCIFVxbGZFL0pyMHgyZlErUEp0amNoVzA5a1c3SXRSZ21RWHh3b2RINXlzb2I1d1lJN0czYmZ6NzhBUG4vUDlLUlFYcm5EdWF0cUcwclYgaVNyRm4wcFAxVUx3RmpJTDM0YlNHaXg0YkFIbW9jT3Q3SStGQnhIdmpVWUdQTzZmN0ovcjQvNS83OTB0eEVnUEd0Y1JhRjUxWEtUcSBnWkRlTWl3dE5RWjNmRVJYdGNERmNPZWJ5SGhpRzlsZ0hvRmwyTUhzMVphT0RyQjNBMmxiL2lCOS9QbitxMmtaZ0FzNWRFamRYL2wyIFoyTkVVY2JNVmZrQjdIQzQ4MmpUR1FSZ1JoSlhlU3lteWtxTmhnMGIyKzVWTmx3b1FrY25LaGNkeFpGZTdtU3pyVnNZbGJWelZmY3ogc3ZWOGh1R21lV3licFlWeVZmdDh3T0htcmNOd212R0pBRFZZY216SzVRWXovd0JiQS8zL0FOejREcXV6UmVHcVRKbUpLNG0yY0VhcSArbWFtdStEVHM0bFBGdmxPWElobUY4UDhQOGtNQ2Z2MXdRRGswWThpOEJndzVzaHM1K2gvK3dkTUZiWHF2M0RKc1l5bnV6NHVCNytsIC93Q0REVjJHWlhOT0NkTkI2YjNVV3c5YnVBZmVPV2prTlZoMW4ydit6YjJFOSswWCtaL3JqRVNRYVJmRFZhdWtIVWhoa3orVzNJdmggejFmcWFlQ3NhSlhLYUhYNWkzTXVBUUhUMW80cEw1NnVYQW1NRjJoaWk3STdjSCt3QU4vQWMrNlNJNW9zL1QrbzJCSE5wb1pteDA4TyB4RkhHaXExTnMrQ3pIRjg3QXBjTFkzZitKeE1ZdHlGbzlSUEhKdXlTU2RucXluRkxza2xVKzN1N2pmV0ExZGZGbkdyVUZmQmlwYmE3IFltN0NIMlBSdW9DN25CRDdzSnI1WkE1OE1mTW1NcEI3Z3oyQURZMXdNenlVS28zQi93QVhJNThBZlFXQS93Q2ZRWUd3RVBMU05QZFAgd0pka0VnNEZrSldFMEpMSUhYMXE1UHZpdTRFUHdtWVpEREFZdFRzOVdrNlk4bzFvV2dUOWdtS1NkUWZ2eDhCMGVVWFY5Nk1hM0RTYSAwb0YvWkdOSk4wN0hySE9rV0ZNVnp5bnYweHhUNWdlR1lZN1JEZzl1QXozQVl6VTIwY21CNzI3SE9BNytBUG4rUVB5ZnF0REtWVkgxIE9KcmRrMjFXQ1Fxdjh0WDFJSjhkM2g4TkxXMHIyUXdMWWR3ZTRjeHhaTEdBMS9zWmhuWlNndGFLSEhZSnpoL2Z2UDdBQVA4QVJHRjMgRXJJOVl6VFdLODdrTFJqbkljamNKSEJ1cTR1eFFtalZSR3lsa2toV0tPWmhGR2cycFlaV1p6RkV1TjRLb0J6OGtoaGlWTCs3OElidiBZRmthcFUzVEhWMWtKRTBaZHhCVlZwRjNURmRYaDRIbkJndFN0NGEyeWNmdzRrMzdHaGt5YUdoc3hQOEFaRGo4L0FBSEFWOEFnZ0JXIG43UXVTMWN4VnpiVnM1dGNBTmJqWGRQcXRrWUcxYmlnZGhpcmErNFZYTVQ3VVpMQmZPZWRwVG0yUExRaGpGazQ2cEtTY0FIL0FHQWIgQWZ4NjNNZzlQcUNsN09NdTloU2FmNVVwUTYzckU5SVhsc1dtbHZpaDZmbUI0WWVhbi9EZzBzNEFRZDhEV2IrS0JtV1hrSmRpUzhiKyB2djMvQUU2MnhteVNMcjhPcjNTbjNIVzdRQXVTc2d3Ry9pQzlzS0drY3lxdGdtUTNDeUErSTliZVAyTVB6a1hhSDBjMjdWY2NQbndBIERmei9BSisyZUxGbVVKTGc1UWhsSEZGT1FiTlpXYkZmQTV2d01abFZYaUN3NllqRzVHTlNUQWtkcGFodVNBM3RweGVUaXgxSlZBS2ogNmxxUVBKRVc1dEpoNkJEZjZkcENIV0xna3JjclUrN0lseVhBUHVCa0wxeFQ1aUFoS29LOFFUeGl6NG9Wb0U4QW5wZHFUQSs3QUFRTSBWL0EvaXNzd1BRZHkwbmt3RWl2YklHMC9DMWFKRHhuRFI4c09oeW14OFEwL2g4eUc0TW5Iakp3Q3dYeFhKamdxSHB5V2RRdXlCSGFxIDM0L3Y0QkFQb093TTJUbUsrTEFIK2VoNmVMYVEwTTViQSt0NWxieXJzVGJRczA5S0QyQVlwKzFGdUdIL0FKNXQrZUNjQmlOVjlOckwgTjkyNE9BUDcrZy9md0hYMHhWOWJyRjRBWXFSa3FVUE5KRFVpd0NVTnBsbUpRRmhsQzdzNWd0OGtpZG4zQ25ZRndUL21FeGhSWDhHYiA4SDlCUG56L0FMb09PUmc4Y3BaRE5Eak1Kb3lveGo1ckpVZityNEFZNHFFc2NITGpTSktBT1dPVU8xN0loNHg3cmlpaXVyOE5sNHNFIGMyamJjaFd6UFo3bUExVW5vREpwdWZMYVUrQjFMYU5aTWlFVExDOVB0cWZEM2d3R0RmTU9JWkRmVThtczNJTEdJeU9FQ2RxOWdmc08gZkFFSHF5MGUrZmxYQllVcXdLeEdvZFgyUXlTM0RKMDlvOXNHSzVGMWtoeTF0Z0RtS3JXM3lIVjYyY2ZLdlBXTlc2TTgreXdpbzV2bSAzUHRnQVA1LzM2WkRaWCtaWXkzZkd1dkt6MlJjWEE3SXAxL2MxL2NlbVJiR3JLeG1neHlSa3VDdDYzUTJCd09UMS9CSHVDb0JuRjNwIFpPRy9CNFArSFBqKy9nQUNsQ01pRzBXSk1nRkdwL3ZKU3JGL2R5SEF6QWxEbGQ3cWJBb2U4WUdJY3dPUE1Ub0MrK0hHUVo3b2UyZjEgc0U0Q2Zmc1FEOXYvQUZkQmpLc0xiVHVtQVNNYlRtL21WTGFxcnQ1TjIzSUE2R1BkaituelhjU0dhTXROS2R5QmN2OEFETXczRGVKeSB6YVEyQmpqemU1ZjVKa1pCS0ZPaGhTQk9PY01UaTJGWlVSWmRqVitQS05VM01kNW94U01JeGxPeUlRaUpuTS9xdzlBMWtCRFd2T2tlIHVRZEtCVktPYmdKS3puUUlRdEdzcTdhSHRYWHJHdldsRXJGNVpXcERya0ZwdEpONE1DcTJMT3hzYVBrQVRYcHZzVEl6RnowazJ3cGwgSytSTjlFdlB5Rm5KRVlaV2ZHZytxR0pHNTAybFBrV2ZrOGNuOCtPazdqRGdjQWNBV1RRLzFzZitPcTBISHlaZkQ2a3U2R3R4YVRRKyA2SWxmSlhseUZ3cEdwZDBpVENBZXE2M2hoMXV3TzR3RmZwWnFjRmtZcnRBeXpEaVR6WUdnL3dCQW9Pd2RXMDlmZFJYTVEyaUtZMHVQIGx0YVk0MVpWK050cXYyR0dtbEdGeWlyYSt5SWEyR0RwOWdUQWZuc0szWmxscGZLZy92Z0krQmZ2UGdENS9vUGg1amhhQ0dTRE51VFUgdGVvWTFiRTF1aHpGK3NuQnlxOFRFRjRrRnJBeEREMlJ2Q3FlSGVZV0NhdTBJeU1EQ0pQT1BQN0FBQWRjWmhPZUJiUW41cmtxMXZhaSA0TlVsNm4rMWFmRWNFT0s3czc0dDlrM0FPSFpPUGh6azhnK1RlTTkrRmNac2RYT3J0djhBd0h3SFRKeXNtNFpBa3ZveTdrQjNkeDRKIE1NZHZhbWlzeWxEbmtEaGd0WGthS0tRd1h3NjZoSnBKQklnMHpRTElCcWROSURwZFRwTlQvZUY3SkJxVW1qdXlyUkdsWlZ2SGo1VmcgNWkzcHBsVjQvaDU5ekxkc1hSVzdzNzJFbjAyVVlidWxUQjliNmtOUFljT0dxLzJVckFiZG5yTVlVRnN4UHdsb28rLy9BT1Q4ZjZQSiA5cUwrVEltTkZ0RGJSWkxmeVpQeU9ZUEJhWUtUVWg4QXpIQkRRNjN2Z1BNeER3VkpnZ0k4UHltMk14dzNpYlIwSHNHQVFVRUFlUG4zIHhZR1pTOTNYbzYwaG11TlMxdTd6TlRObW85ZTF2WDY2SGZMYTA5bnE1bUovSkEvdzRaQ1ozNGNMYStZelVhcmxCaE5IKzc4QlBnRDUgOCtBUVFBRGprV1E2UUt6dUFlK1ZqYU5oU2lTVFlSaVpXNC9nWlFXV2ZGZmg2R3lJVGhqWkJBdzFWTGpXbkc5cjdOckpONE4xY2JDVyA2QXcyQitQbjM3cFlDdEdvQ1B2WnFsc3VHMW5RcXJiZFI4ZTlQVHNxdmQwVG8yUkxPaUl5TTdSUnZOTEgyWVVZMWxsYllrR2ZhNjVlIGVWUEZHNlBXZW9DMVhoSlVoYXJHVyszb040cSt2WHhvczJHcnZrczlLcXY1amd5SWI1VzdCN2diUVJFZW4zbXpLYnE5NUdWVzdCQW0gL29MOXYvc2ZmdXFyVVdueUVnZ0dYTGFXKzZsYUdKTFp0d2NmTGNDbDNDVTE4aDFlSE1MZnRESHA4N2tDSGFuQmtZV1VKdlBDVGJ2OSBCZmdCOC84QXJpeUZPaDY3UGoyK0swSHFjaG9iNHRsbURUcTFFS2NNSGdJbHlBaHg1aVpUOE1QTVQxdXhsS3JtMnE0WlB1ZzBQUE9FIG1yc0FZQitQbndHQ0RzSFVPTFpMd1EyVE9uNmFRNUxKWTZyZjk0aDIwcnU4S3hrMVRpbEppL01XNGVBZGJ0QmJCNHI4ODVNbzBXMFYgZlptK0JBZXg4L0FBSDdZVDREcTBYUGNFT3krNFUyMmhhVU9jYnVua2xud0ZNdmdjODVlQlZQYXRHMk1pd3g1S3l5TkZKRWpuRE5XVyBLQ0RQR2hSWWk3N1FDVFlySWFBZVUwWk1xeXc5dFdkYitTTjI4bHZEdTR5b3N1TEtwOGhhaTJ5TWpKdytaQisrS3EzY0NOMmJaaVlOIDNOcEp6SGdCL3dERWZuelpiSDVkZkIwOWtsVmpHQWhza2FYREdMQ1lCTEllUTZ5UFJRKzhjd2h6TUdCd2d6MC9CVm1qYk14ZkJqTjUgdEpCLzE5L3Q4K0g2bjE5ZnVrTzdPN0dxeWE5UEV0cGNFTzVwQ09ZUFcwdk9UUkRZZVNKOHhrUXg4d0g5dGFtUW16RkVObHJNR2t1MSBYY0JQZ05nUG4yRFlEVkdoV2ZLY0tsUEFYeDJMMkRsRzFRQUh5Wi9BaWNwaGphWDA5d3hyaXJGdTFHUmdNZkFZSU9JY29VckJYdDhtIEROdTJPTEJVVy9zQUJnQWJBYXVyUXhpQ040OHNzQktNSGhyQzgwNXZPN0hjS3h2bStBSzR5TTduY3d4ckdEZFE1VmVEN2krUG50L0ggWEphRFFVRnVqaFJrcXEyUzFFMnZVQ25MWVQycU1KVzNMVVlrYnB1RDU4d3d5UTE4d2pudE41NkRqdGl1aDRrem4wbkFCaS9BT2ZlQSBRdE5kNEw2a3lWaTVXMGt5U1VVeEppVmU3RWc5aFEwSTl3T0xNdkQ2ZXlPQWV2MlNjQklZQTFzWnVtRm1EQW4rbFovZ1A3L2llQUZUIFd2dEdiRFBWVWtPcnZuRHlSSjMvQU1hRzRXRk1mRmRJY3ZoajVpRUhUNnJNRDNBSEE0a3EyVFpuc3IrYzN1a3ptd2Z2K3dZdnlycmUgMUh3QUR5UXdzYUVzNUltTGN2ZUxVUjNka2NvclkrTkVNZkRNM0FoNExiZ0hPVHlBSlZNY0c0dVRKZlNmUG9PSUUrL2IrZjZrWktoVSBCeGRFVGRYejRKYWVmLzc1R1p5bGNaNDVIM0VXVmNpd1Y5bHY0ZzY0VlZaL0xXZmFENG9VT2I0T3g5YnE5cTFQVmVuTzZjbEFHaWs5IHRYbUFsYmF1dmI4ME1LYStROTRyZDg1Z0hUcGs1VFFLMEJjWlp0ckdMSU1KYUx0dit3SHdQdXdJS0NMVEdSUG5xNTZBWkpESGJLSksgVENyMHkxSTkzR0pRQVNMRjJvNEdPNmxKaCtRQndkTE9ENEQ0eVRGcTI1NC9kZ2UvL3dCUUh6NEVCeDJnMmRndVNYVFJtcnBKeWEwViBRbGVxOE96aDZSTUdTaElGb21MNWh3WmFmUTVnL3dBOHdJVHZ1ZTZDL1k1NFFIdjRBQnY0QS8wN0xNaDBQWHcvNERScW8wOFRMYWZVIENKYUxJQnlKWWROc1pURjJoZ1FtQnc5a2J4YUVOSGJXQlNncDZ3emJvc29xTzdCY04vN3VnT1B2d0hwSzZtTkdoUjVVejFyNmlYVHEgOFdSbGszUkxQZ3BkSklZMDNvZ2lTUjhja013TEJYZlRBN3NyQjBUVEpESEtVYXRxTVpiS25nNWNDUWc5dmo5OUQ3d3MxY1YwZTFuZiA2bGtaRDVxTlg3emtaTGpYQmwwaksxaVJNS294SnQrRUpOcnFHdWh4eEgxSHRqR3JRMGo2UjJQcXM0MGQ5R0lNOTZNTTAyd2VvWGNCIGdPa1lkTTJXWmNGRThMdXhicjFYcG12YWYxQ0dhdmlscTUxQlRDREtoekxzc2dQUjVqbHR3VksxQjhFWW9yL283aE5pQVB3QS93RFggeit3S2ZVb3duYkJ0NEZyZk82aEJrdzluam9mcUVZOGNsQVMyNjJLeGdVSU15UW9pR090U0c5cndML21SL3dEbVppUzFoNmZVRk5yMiBLSGd3WXJ4MC9oYjF3MDMxSXVTRWxOcnBxZjZyZklZMlpkRi9aT3NpdllZR3BZbG50QWRmbVh1NHA3SXRqb1NyV2RvS2J1dHJBekY4IEdjNUNHdWNnQUIvRStBUWZjQXlCWkkyOVNlYVpKWnA1QURIdVNCSkpkMUlua3pYTGJNaFVOaU1ySnhYcGJ0SE5KTktVaGlXTGFpa0Mga2g1SGpqamlhVkVydnpFWUxMa051NnlmS3dlcS9EN0xVeVd3MmN5TlRHcTFjdlZ2OHh3cjFiYUlyRFkvSlBtTGU4ZGt4OXFRZjRzUCA0akh6QlpGdER3OG5PYk96eWc4ZjkzNzIyQ3NaU3E3NFJ3NkdrMXpWYTJlYmM2Tkwvd0FGa1IwaEQrVkVzYXVRNDlQV3pESVlEajZyIGc4Z0F0VElUR05IMWxINXNiNThBUVFEOWJ2bjhZMjhFY2RjbGQxN2FHYUJOMWlUVzdBczJweVNmVTY4SUF5cTlLRkhCZnZoUFQzQmIgbUQ2M0JUeUI2Y3libXJ0Q3o1dXJnbXdQMkhnSDRBQUFXS1N4K29TOHltZFhPYm5iOUZzaGJMRHp5VGZDblpFcW0xNENydURoZkRoMyA0TU9CRGxTR1FBMnBEWnZGOG1SM1ozU2Z2MlA3QWY2R0xFSXFLNmVwa3JpUnR1U0tTR1Y0M1JvNmEvYUNEa1BjUlhiWmt1Vzl1UEZNIHJ5SkhKeEhVYlJ1ZXhranlxTzZheGJYUy9qbFZoNUF0M09KTmxxUzN4c3p4SjNJT3lUeUV4S3R1WFl4VDhKMXUrSWQ4VE1GdWVocDYgSGVDMnNzMVgwM3VmM2J6L0FQMWZ2Y0FCcmRGMlJjRWcrTHlzNDJCemJJdU92UTZIY3dlWERxV3VXRThlVDJCUE1WWFpESVlJY1Y3ZyBjcVR5YXoyditqMmliK2d2MzcrQTREMDFNelRuRFhLYlk1VjBudUsyMVlSdGhxKzJxTnJlTE1GeFN6NHJ3MkNaVzlrT0V5SFlFTkhQIGZBaExhempWKzJMTHdFQ0pMeHYvQU4rUG9Pd2RKOXRhTlVERzhXcGxSYzZyU1FHMUJsT1orVFRLTzJZdVNicWFGNmpGc2ZwdlQyUlAgRDN3UE1BNjB1RjhWVS9iTGtmV1paQjNZa2hEbXdBRDZDd0h3QUErY1NvakdQY2hsbUdtWkpJU1lwRVRaQzdyT1hsamlsd0RvUnRTUCA3amxoYTVnclpORHVwS3FJNGpCMDdka2NiWTdhaVBIakhGckpidnZ3dGN5UXFyTlFGZEk0ZWVGemlJZElzMExac2RjdkxQaUI0cXZaIGgvRk9mMXg4RFRVT3lHRndPZmx0cHhKTFQ0cmVjOTdycXhBWUFGdWdBRDlzR01sbGcxK1VVb2NNNzJGUlZlbExJdHAzcll4YlZMdTkgYnlqeW5iVlg4Z1k4R1JrVDF2R2FjbjEveXB3SnN5eDNmUm5mRDZPZzdBZjgrZ2RQZlUrTzlDdGJaY1ZCckozcFdOVERHcGNyMCtMRCB1R3ZoRTArQVVJT090UVBpaUdHOC9MVkorTEJZejR6NHE5WHJDeGhoZzdwSEFNTUR5K2Y0K0FUVWhUVzNHMkFQdGtuRW1nckNRSGRvIFpMT1lGNE9VaXhITGpmekZzdXlHR1JmbUhGTGliVnhuZEJsbUUzai9BRlVBSVA4QVFQMkJndU5wM2pjTkg5TzhxU0pISmx1NDV4dkUgeDIyVlkzcmNEVklqZUtHTms5TmsyQTZpSjkxQmp1S1Z4dkdXR1ZlY21yK0poNFB1SitLSW9odzdGcVY0YW9EbWVKWE5wTGgyMDdtSyBycXUyQzNBNjR0ZzhCaHVESk1UM3lHeWR5SUZhRUh3NGhMTDFWNkd6YkZ2ZTlnQUFEWU9mZGI3SW1IYTV6TTdOdERPK1pBbWNUdmdsIFoxYnRrT0x0RFI4d2ZENGVZNWh4c0hCNEhPZkNieUx0QVo3YjJiT24wRS81L0hFLzB3bzdJNlp3czlYeG00SC9BT2VrMmt1MkErRHIgSmlMYjRtcnpSS1R5SWRrY0ljT1ludUU1U3VBRE9oOFpGNG8yK2NLcTc5ZzMvd0EvMHBaR09VR3R5RytNY3lOdWkyYlUyQmJ6aUNSMyBHVGU0MjhFV1JEUTdJRFF4L25xUElRZWMvYUZuRTRFU0xSUjZpZmdHL3dEbndIUWtxSlpwTWFjUXg1NHZMdHR0QTFoQzhqeFEzdUc5IHBWeW9aNVlyaVVIcUdPSWRxUE1jUjdzTjNBSDhaVmlQeFp2eDAyb2N4NUZyZDJJYmJYb1FsWHlUYUtROE95ZVBoM0J4ZUp6MURUK0Igc256Slk4d3F3R0U5Qk1FMGFoN2svcmJ1bGhzQjhBZjl1UDhBUzk1QkNjampJcFVpQms1T1VrdXk5VjU3SnFCaExpMmhJVFl2TUU4dyBZaE9DSnc4RzJqM3lkTS9hMlptKzdiSnNHS0NmUHYzZ0pKSE9hakcyM0xKZHpOblNaa1hWMFMzQndEMXZkeWZZd3RzeGFMczJkUHJkIDhocDZmTmVLV1lFTnFjTnpxOVhlZGo3cEJFYytnNytBNER3THJUTWRKcmF0OXFvdFBOdUYzRXRTRERYK2NTWDdZdFZOdTZza1BubGYgNGg5TWJKU1puNGUvWU50cUdMTWVhdmZPNWp3YjdwSTUvb1VmS0o5eHQyWTRtTVFUVm81bzd4ekVlQkJxUlpZNkxFZGwzM1VzWmFuaiBiSjRNcjljeDFKRFFqN2xPZkVadXBYKzNzN1d2aUhhRisyS0gxQVY2eG1SdUo1cERqVlBjbmFPSmZFMEJMdTVOWkY5ODdxV3BXOTE4IGJzYnZCUFZRNk1UYUZjWUxCOEpkdWZXNzkrMkFCajBuNFp5M0NqSm5HYXFNVnVZUFRKTXNQWkFGSDRlVXRwaGkvRDQyNFRIQ1lISHogSjFscjZpMUIrYzkwT0RQQnZoSncrL2IvQUZGdi9JQUY2cEFlek5PZHNETHViWmkzcDdxOThrdHFPN1p3ZUl0dERRdlNsZXEyQnc3ViB6S3JNRC9nejlTR0FOUVdVWm9hQm4rOWppQ0FmajU5K2Z0ZzZTYkptVVdwTDlWb2NWVmpXMXFnbVhHSnNpMnM2UmNZZXBhNTFDYVgzIHdQYUV4UGhvWmQ4WUE3eDNRUFlMYXlNVjl6R0hOamRrZCtBZm9BZnRndDBOSkpCTWphalRTelRRdmdvZUdUUDFJempNakRFVnR5Qm8gd3dKenhMVXRZOVRVclBHME1Nc0NacnVoZzBQcnNYbDMxWTkvcnUwY3FOSTl4MWt2YWI2RmJFRjBtMjJwVDZsUTlla2h0bG5rQ3NwQSAydlUrVmdVYUJKUXBWYWUrc2poU2FIRDU1OEJBYloxa0V4aXR1YXljN28xZGdmNEN2bi9ZL3Y2cmtaY05EUXh1VTBUSC9IS3lVQmVxIGNhMUVIY08wT1NuVXZKRTl4aVVtWW1NcENZcWdhL1JQSms2djRNakE3UlNUYngvWDREejlSQUhZVTJPcXV6TlpwcnR2enVIZHFuc0QgV0F0bUVneFhOb1VnMEhxckhoN0lwNHhjSElJZGpjZUF6bndtTUYxZXNqRGp0ellIaS9lQXFNQnNIVWJJK1BiUytCcEtCTUNYQXVOUyBsTXRBYkRyOUhtYWZaUllYVjZlNExiSUdtc2tJZ3lIQU5nTm9NUFdiUGNsWDhtQnBOWEJQdndBQWY1OGY2MWJucHdSdTI4OFdlRXpDIHBCbnQ1WjhuUDJyajdjYVBtK0VxT2RUaHdIZEZNWC9NMjdvNTJNYXpQR0o4K2I1Nm5oZHFQakhVZGUxS25WWHBMMDY2b0E1dStiWVAgWHdyM0dubnJHbWFRRmRrY0REaFc3Sk1oa0llTGJxQXJPZDk1M1FZemMyQ0pOVjRuMEVCc0I4LzdLVzBMWXNTK1hBT1V6VnNiWjJiRCBXNGl1U3M3VHZVOHlMS1hrSVgvSnpHUXduOXI2ZWFrTWhBT1lyTnZ0RFN6STFWcFBhNDRBQUgzNy93QStjRWV1NUZMV3haMFdVZUpjIGp5Sk5lMkRlVlB0QWxrdTZLcGxLSHRRZXlkaDJRTjhBeEIyK0JCNE4rWk9UZmRxVE9mdi9BR2lBUCtIUkhUOTBVLzNzMVF3RmNhL3EgdXBza3QxbFQ0ZnQvWVRKS1YyelNxMEdSME8wdzRlRzRKNjNPYlY5OGVESGl5ak1pcEJ1a3dmbjM2M2QvQWZma1NZYVlUU052T2dlRiBJMWovQUpGenlMQnBlYmpXaHN4NERiSmZ1YkxnNHkrcElqaWlVT0VsbG1jak5CSEZHWkMwY1hidDFnUXd6WU1HVTJNS2VDMUFWSGVqIFJwN0FVdmI4TWs0Yk1ORVdCRGQ2dkU0L0ZZVU9yekRpWW1VT1lEaDdBWks1clN3SUNyYWl6eGUwRm9ZOGQ3ZURvUFByZDhBZjM5MXcgRzNVM2dkdmlvSDNQV3JUS2FJd3VuQXZhZDJXRFh5MXA4UEpLeGJTMG5zd2VXWHArYW9OL2JVaHQ3MjlWbytQbUhkUTNhS1FidDdIZyBPTy9lZnBSVjlEMVBZME5rcm1LaDZrS3JxODhTU0svM0lmWVZjUlFObTdDdHB4aUY0ZFByOWJCY3dQMk5NL0Y1WGEzZzMvUVBuOEQ1IDhBL2dMT0I2anVPQlJkY2FrUXVjU1pmbUtkaEJoeDd1YVlwSFVaY1ZOZ1hCZXF5Wk1NTWt4d3RSSHVoZ250SmtZTXdGMll6QWpZVzcgTVY5L0FBTmdRZmZwYlJLWlFwZUZKb3RWSktqU0xxcFl4SHJzRkdFazdDSnBCRkRLa3NjRHZ0N2lOSXdHQ3RvM25rakxSN3hTYUhUYSBlWkl2cFZBZlJ4TEdIUDBtTVlnU1FwcUROdFI0UXh6TmcrQjZwOFphQStvWXFSZlZYL2gvTjE4QmNpZE5YWWJqWHhYT3FSTERSeGt2IE9rUXE3VzFBMnAzUVF5eEZjRFo4Sk9na2ZRK1RRMDJNSnl1TERnNm5sQXgyUm5UY3lDZXF0M0ZnOHl1S3lxbk5UbFVQRVJ3Y1pNVmQgVTNFNE1CWnh6WWtMMHJrOVpiUUs2V0RGSVhyak1RNldFQkJSa09LYXl3Y1FYQ3l4R0dUNmM2NkJmVk1iV0xKU2JVNUFXRGpSckUxZiBISDdQNUhYRWxZTExJc2cwbTRzanErV2tETm1yWXRiYjRzM2RtaGZjYUhGYmJZWkFia0xNV05QUTZsY0xHenFCcWUrS1RBbzd1NEs4IFZzWjRyNDRXblpCaGxjSWJoTWF1NkZsMVg5WndmQ2JNRFNkVVR0VmVDQ2VBSDdkeFFldHhDbjE0OEhtQVJkcGtxWjFCUTF1d3NFbXMgREh2cU1QTU1wbld4NWd3eHczRG1HQVE4NElodHdXVmxXdERBbThCTFIvN0FmWUtpQVAzVm5GWnNrU3FuTVpWZkRLdXVEdWRwdmVDSCArQ1lMT0ZjdVRCU05jM1lud3cvSk5ucThQQkFFTGFhclVXWGtvVXZJWmdiMlQ3OGZmZ0I4L3dBZ3dRK015cXp6SUJWMWREalpMYzdQICtJOVA0T1dEbEh5Mk4wNGZNV3c2MnQ3Z0grQnB2dmpFenRqUVVSdWNjMi9RQno3L0FIQjFoMGsyN0dqcDI3WG9rRm9ueXdBSWE0cFggeHUvQjhmQmJuSHNhclQ3VE1GVnpESTdQRVZNc1FGNFpEMVlWenExNUhqbXh5T3E5MkF2dWlrTDB4dG9ZYUV5YmtxV05mSy9hdHdWdSBKZkVOb2Q3R1RvZmV6Rjg3cVF4NWdIM0FRMm9QeVlvTEdFK2JmNS9Yd0FBK0FQbnlTM0xJWkpSQU9MZk5QWnZUMitYeHg2MEpsa1dCIExaSlN1V3B0eVd5SEE3dGhoMDl4Y085Sy9BbldRc011b3p1Wlp0cVhaL1h4OCtmOEFmNnhrTVRLcU9OVmFnU2JJdDdDUytPWW1KOWggTWhSOEVPVmM0c0ZicmFHWW1NakFIK0FRZ1FjTzJaVGRDUnczdllNL3o0K2ZBYkJzRnFGL0xxU2ZEMkdWcWNKV2RGSlNXRytDUUc4RSBqQURZeTg1U2cvR3pDZk1NTWhDWitMOEhoazhvVTVNY3E0MjdZZ05nMzgvN2JCcll5eDZxQTl3U09HU0FzKzdMaEg2ZTJBaVF5UmtyIDMySlVOMk1NZTY4eW1OSVpIampoNzMzSHVMRkJJOVpNNzVISEtoaU1UNFBTWlFubU8wUTY5WEJkTTFLbnBvRUlKUjdJeXJZdm5tU0ggTGxBWmcrR24yUWh2bGtNQ0djVWg2a3EzWXpkcjdrWmxvNEU4NGdvSjkrdDNZQUd3R3BReGx1OXVQaTVQR2trK1ZNVzJ3d3F1eGhJZiBDbFNzSXM4eU1CaERyZWsyU254NGVhaDhTUjRaUGdiNXhrNTRUZndHd2JCNS9xVDR1dEhrL0piV013Z1dFN240MWUxKzRXRjI5MnZrIElGTlcyQ0dZMDl1SDE4UEJQTUU4SGhwNlp1QnJQNzNpODcrL2ZmOEFwU3JjeENYRU13dVQ5eUFTb2FRSlQyUThIWGx3OGg5MER6NHYgek9SeklmSDRiVkFzQThEMnhaL0daT3EvL0lQdjNIL1A0eXlSeU1JaGduYUJIQkVGalFnODFHc2dqUzdIc1JNdnV1Z1Yxckk5QlpCayA3STZHVmpjajVHTTI3c0RJK05jQ1NScUpPT050a2VJZVpZREhXNTRnK3JlRFZWOHhrVTZmSlhBdnk0ZElnYWNQQVppZkRaTGdoMXVuIHI0ZEh4MDNvYzR3c3N6UmFDejVzSjdZYkI0Qis2a215c25nODhFLytIaFE5d1U1WnpRSGJSSWRKaHRNUXdVb2V3aFlEVGZZRndUTEkgTU1rdGdobzhCZjAwN1B3Wm9WLzdKYVA1ZFFVSGY4ZUFnQW1PMEVISndkbng4ZkhkVnRBa3lXRUhTWHp0bHoycFZOWGlod0MzdkFkayBEL01ya0N3TnRjclF4WjRHVHJNSFYzQ2FyQUlPUEh6NEFCc0FHSHJ1MkZldjdhcFpEZG45VlNMT3FXSW4wUE0xRUZsdHlPcjBVV1lIIDF1SHNpazJRUGFBZmdaQ2ZPRDlqV2kwTnNCaE1NY05nUGdBQy92OEFoMXFuaTJJNFhFYVoxRzBlbWRjOXVTU2dwTXRqMUlNUzgwZUEgeGlEeVpIYnhiTkU2czdCamVVSWxFM0pNbitYRDR4djNaTmVWVUtycTBRaU9ZbjJRZVhOaGRqRDVwZHRHdlU0OE5qMkVuMjFkenhmRSBwUEliT1paTFVodUV5Y2VUejFxSjZ5VGFLdnFEZkRZUktPQUQ1LzhBb0UvajBtVmRzVDR6SllSUmN5V1RDdER3U3ZYQnFoeUpjS1VMIGlTbWdPb1RMSURwNWlZdnJVSDZHOGJtTUtORlprOThOMWQ5K1A3K0E1OGZBR0RCVllQVFNsMVV1WHhNTm5tUkpmNGxYa3IrcSt3a0kgQ3JMelJWNjNhSGVBUFc2ZStPQ2NjQTJoODViWmlmRjNuWStiWFp6N1lQZEM0Q2Y2a2N1eU8wdHVaSXRjVUhiNVdjTmJJNGNPcnNOUCB1VW9zbWk3Z1h6Qmh3VzJWREh6RlhjSHc0bjBiNHVvR1o1ODJEeC9vSCsvcWpoWTU5enlLbUZMcDJ1cXZZTG11Tm4xTWVEbm1mYmp6IFJiY3BIVkh5N1VMcmtkdzFpaThpdHlqWjVySGdFOVFXYTZBNHRaNTFJcEMycEdMQno0enVIQXBGZ0ZvYjRtdTU1WHRSd3RTdDJTazMgd3hYL0FJQmduMXpnekxLSHFNV1JoenphT2dnTi9BYi9BTC8wRXBiUlNkYzBHWXNFbytVUzRacGhibGtOT3FUYUNSWkcvQ0hKRGNIRyBIRCtIZkFlcitLMld3VXQ4d25lWlJEOEh2WnZ0SHNGdStBUDcrMUREQUxwdk1wbUx6eTJyT3NhbWJhN1BvZFY4aFQ4YTVLMXphSGNEIHVwRFpQeCtIc2JGT2djYjNNV0xKN0hzaHdIeUFCL1gzZ0ZMSHQydjBqVCtTcVYzRHJjdDhWWXpESXM0ODhNSWNvQllTajQ0V0E0SWYgNHJaUGh2RmFXQXBWV2gxbXNpM3piTmtkc01UNkR2NS9ud0RyUkd6MmR3dWlEVXh1WFI4YURocUJYSHVQYnh5T2lmbkVEbDluWWlYOCB4cVZ4R1grVG40NUxFOW9IUUhNajZrS3FxdjVXYkRRTTh5eWFoMGp2TVM4TUJxWCtIU1VucDlQcmZkUU80TDdJam9aL3VveUUzbm5oIE5tZVhiWkhqbjRCQjREaDFhS1k2TWk1TlpEM0pGSmtZM0FiWVNQcUVNTkZlc2dCTitYWXdjaXlJZHFWV2g3Z0huQVNFQ0RXNk04MWYgY25HUWJzYjMzMzM5QkFlNS9wZXZpMndMcmhNRE1kNXFWbkM2ZnJjc3I1ejdIZHk5b0NtRURGMjh3dG9iSW56UjRmbmxmOFZtRThFTSBYWm50YVBDZm9PLzdBaFluK3JXa2hGRUtKTk8wMVQ3cTA0b3JhWXAxMWY4QUp6WDZweTF5UHBWbmZSSTROanBaWmUxdnE5THh4MWVnIFRWcXpxZGZHWmEzMUpCK2xnd09vREY2Z0I3MDQ1NUdpbGFNT3lRSktnZGhwWHB5VFZMdVYyWTJTRGkxMmVCWExJWW5IZkN2ckkrMlogYjVkMWkwNlJxRStOd1J1ZmNjZkhkNTY4OHBGYnZGZ3lCc1U4Tk5sN0JEa3BaQmtzNVh4RGxDakRGRnpQaHA4eDhRNWc5Y3RSU1lKNCBPRXpmZmYzdjM4QitnRFlOZ2ZDK2pRejFiNXpJcjVQRzFkMkNLWkE4ZVg3WVpMdXBHWDhXeU8yeWU0V1FZTUQ1a0JTY1lBUDZ5VUdFIHlmTmdpVDU4OTREZnovU2xIdmtlMVFlVVVybVpaQmhJVzF0SWFDUmpqMzNLaG55Vk1zQ0hhZFZtR1RoL3dYeGYvbkZoR1YwTlpKOXIgc1hjNXYvNGoyRFlFRjhWMnZ6TEhTN2diWEtaR1pBMWV0dGV5TlhUdlM1WU9BdEJVaTIwWVh6RkR2aWVocDQvNXo0UWZPQnN5eTBVMyArOTcyOFB6OC9BSDd3SFRaRnhzMzd5UFNuZ3Q1c2NXVzVkMGZ4U2JiK3czVmR0Mk04TXpERXFNdHp6dFQxamlRZTQ3WnU3NDhWUjgvIEE0NEw0OE5NQWxHaXdwRElocERzMks3dG5ML3pLNVBGZ05jOHZEek1aaTNEWDdnQjFLT2ZEbkIxbERmS3pLY0pTUWh4QjJBLzkrZnUgb3hncmV3VkxNSjFlbXJZd3hrM01OU0pGdEFWZEltaTBPNDBPTHVIQTN4a2NMVVgrVmNlZk9ZRExNNEdNV2FyU1FnU3F3REFBUWZvSSBEcHk2cFpBdGpxdXR3TmN6Qng3QmJwd1NQbVozYjF3akhXeERzWncrWXlHSHUxSWErWWVBQkNmQlpPYzFlTFpoaHhKcTdZd0d3ZjhBIFdvajZtMC81WmllVXRxMUNsVnlWVnQwNnFJbVFCSkdHd01obm9ndTBBN2dIb1p3M2l0eUV4cVBXaGRNN2sxNUsrMkl4eEpOdXdNK0EgQUFFRkFmdmZyUE5PelFLNFI1c3NrUUlaVndySFpoTzNMSGVWdjN0ZnROSjhGMEtwdU1tU1IrMVdMdHk4YlZtZ0ZmTkFrMmFJdWpkZCBEWnlzME5Oek01Y0FvY2JObmdmTVcwNE9EQ1l1NHBNdVJEWkNHOFBuMXZFdzFBVjhEOHpjK1VFdk4vZVBQZjVQM0lEQTRjRDROaEtLIFptS0w0dURSckNyalVPeUN4Z1dzTUtIS0RwNkhEWktUTVFzQTRPeS9nS3ZCaGdzb1QyUGU2dUJud0IvK24zN3BoUjQ5cXR0RDBDR3EgQmtvcUhaYTNHYk5QNEdqWTRsUGFMYXNJRFl3ZHdtV3B5UVB5RFk3TFgvZFA1TlY3NHpERWZaTjgrZzcvQU9md1BxUWZtcHlraHk3byBXTGdIQU1xbWtpa3JaenBwaDJVS2x1MWRlM0tHbllWeE1xQ0orOXRrQ0JCcXduV1lzbU5ldGw5U1FjWUVIQUJqdndFLzFvZDQyVUNRIHZVbTlFSWxmRFBFeFd4Y3F3R05paGlmSjU2RldPZUNzblpzVFdrUWp1dzlLUmsxKzNocjQvSDVmNnVweUo5Z1ROUHJIWG8yR3J2aHEgdlVja1l2aUpNQTBrSjRiREkreTNNdE5ic0J3VllDZTJndzdOeGRvV2F6T2NKTm80RDI4QStuOWdxdmRHWlhkeU9GdFp0YVRHU2h3MSB0S1VPT1RyMnYyMHdMRnl5aWJNSDJRdDF1K0dKakI4R3kvZ05Vemt5RUxaa2J1aWJDRy94RjFZb1doNklJdFJ6RHp2YWxmNStyUWxmICtueWhsQWJTOFgrSXZTL2h1Z1pQWk85cmV5U3lEaC9FdDhDRERaV2E1R2haWjhPRTJod0lBZnFJQWZ3WHp4OVAyQlU4Zk55eVI1V00gMlFTbnpLSzdnTW1TMENROVh1VlpGS2xSSEF3bjkxRnNPUTRxK1ZlcFZYeG0zL3N5eThhaC93RHFBUG4vQU8vMUU2RnkwSmZIT05vVyBkTU1jTERGQmsyYVBrTUpMWDJrWS9nWkkxNFYxUXZnNk5ORkpjaHpDY3EySHBnWThqdXpKNXJFVzVnN1JiaXZSOVlvWjZ3clJ6azZwIEcySVFReHBBU24yTWVySURGMjh4RHRSYlpPUHVGcVBsZmI0NE0yMXE3TlpscWNKZHZjQndIdENBMzhCVjF4VDdFTXNtU201dGtNanQgbERZeTlWOWIyUTRNTmtORGwydktQbmNoRG1HT2VEcG1DSXZvWndPVC93Qjg3M3ZoemY4QVlFRUJzQy8wd2lqQVVvY1daWFo0QmJociBic0VyMnYzeXQ1RXN3K0FXRm8rR3dNYUhjRXhrUXlDR0RmVStmT2NDZG1JYXVUR2JJYlNBYUNCZnFFd1BnT2VnTEZWWFlHWlFWYmg5IFVzb3dTUFpvMVNzMnY0YnNIbGgvNXZVRGJTZVBtUStIOGJJT0FNOVh6YWppRmxaVnlqTXplRU52SFBnSEFRQ0NmdzZRWmpRTWtUZDcgb2ttWXgzUzN0WWNHc083am04aFJGRHAyeXdZcXM1V3UxbWpla1NRZThPMzlPV094c3lVM0xTZHZIVk0zQmdzaHR0QXcrTkVNYWVhQiByYTJFTE9WYlFsc2t0TllISm80K3QxdTl1RU9xOW5OcVh3RFljWXpiV01XUWFUK20vbjlnL1lPbzE0cnBMY2pBMzU2clhGYm1UMG51IHhuR0NNdm5oNnpYS0tZVC9BS2VoNmtNV0N0MGFBNEFkNFdXWlg3bUV3WnZaQVhQdmJmMzczUHVEVm82QTFLeEU4elZXZHE5UEJyQ1Uga2d6cHYxT3ZDOHRwcDdtU0c0cDhPMUZ1WVlXeUVOSW4xL1ByakJHd1EzM0g4bytjMkIrNTlnQVFYNUJXSU1nVjA4T0IrVVVHalZyaCBNbGhqektmTU5oZUxWeVJhRFF0MmhEUTN4UFc0WkF4enlCVXNGdzJ6dGV6RTlrdEZKZU9mQU1FSHdHd2FrQUVDSkFtM0NiSVNHQ1hmIGtrSlVUTzBNcXhad1RSRm8xVlpEbmt6RXJnQTZtU1paaTh3M25pbUVKYjJGeWFLTlhmampJa2NtTm04S3lGNUIyVjNYZE4xVllsd1ggVEZmR1BKdk04M1RIbTFHVjRFdUY4VktKRm9ZY2Z3TmttVEREQVl4YmNMYTNkNUdLOXlMVE1jd1NBbS8wR2ZBYytma0orNlRNeXpIeiBOcGRrTWdjbEFyZTJ0T3BzVElzSUM0SkNIVXA2d254b21WL01UMlRHeUp0NFBtL1lvYlh5WkZ4S1Ztc280UUpWMktEdjc4QVB2M1ZqIHdXbkRWSFJGWjQ2bHE5QktLdFZXcVpUdmxXWE02cHFucmV1YlF1S2lHbGF3ZldRdmFxR1hzQnc3WjFBZVZLc1dHZ296ckxNOEhFa0YgajZmMHc1RGdBWUt2U09jVU80V0ZYMWc4YlQxdzgvcVlDMDRka1dFaHlpa3ROY2pDL3dCaCs1REhXN0JhaU85MDhwSTdLems3a3VSRyBHQTk3U1FmSDc4QUgvWUIwbEZEUm5IQ2VHS29HV014UnhuU1JjU0JVaWhYYnhrTHB5MG1XSVlZV1ZJc1ptS0syY00zTlpJT1ozeHVoIFl2ZHg1SDJGQjdyNHNVcG9lcEFXREd1NzViVlhOUXRwVXJOdEFid2RJVzJpeHBZdXI4VjhQM1UyZERyOWs5OEo3d3lXYldiNFVKa3ogZ1RFMy93RHVEZjhBcVNnVWVRdHE1RSt2cTV1Q3lCdWFlb3FYZkJMN0R3TUE3cTdrSDVneUp3ZVpNSUIxV2U0d0FiSjcxZXJrK0RoUCA3L2J1L2dBRDhBQVFNeXM0ZVZiR3pRQnFBSGJZZFdxWS9USGJRYUl5SzhXd3BRc1B4c3hDcmVHSHNCYkIzU24zd2NtZGpXaTVGbFpSIHdsbzdIM2RZT0FvTnVuei9BRTdHU1BYYmJZRmtIb3FTdGphK2NCcnZmQVlOVUNtNEZFUFRnZUZ3eDhQZUpoZ09QVDY1N2dJbGpUTnogVjN6Rm1Sd2lTRTJBL2dBUDdBZng2a1phTklDVnl5VUYxZ2h4ak1kcHN4aE16aHQyL2RiYm1YdFRIbHJrSTdLNjBocGxESEoyY2ticyBqdlM1WjBsTGlNQUc1TjhWTEhwOElxbjF2K1dvMW5WcG5WYzcyQlc0ZWoxTmJLUGtRQ0JjR0JQY0pscWNrcjlieDA4YjY4TGJ3ekZDIGd4NU9KS1NrZzkvcUkvaDJpUWovQUZ1VjFObnE5WEpTcStzaGJXMmlZU3U2UXE2a0szZHpCUldsaTJnUFg4eVo0Y3dRbCtQQTZqSWEgenVqUWpNeHp6YU8vSDM3QUJ6LzdBYlI4dTJLcWtFcWJIL0dzNFdTTmlUR2M3T0ZldUJROHBsRHppNFZ1WStaZGdkUDVWMnYyUEFadyBQY3lRTkpkd25QajRERDc4ZlFlb0daZksvbW5GVVd4a3UyS0dodjZsSEExV2p5dzc0cjZaU2lIYWg5d01NbGJ2aTI0T0dxaXRHRTgxIEdCbW9Vb0xXU2U5NzJEQUlBQUJidUlEcW1rcFdiWlNTM01xaCtiamNKaGdhL2trd2JGUHV4dklWMFVVS3M2bmZtUjE5alozeUFDT0sgSGlSSTVQUE9HUEY1Q3EyclJ2dGR0YUt3Y2tlNmFRcFlhN1V3cVBFNkdxNm55bEorbDlKdVoxc1o4YkNZNFI5ME1UTEhjNXd3cU1XRyB1M3NNMkw2bm93cVNaSkNKZ2FobEpNbk92UnhacUtyTHJSRUIyTzJQVXNxQm1yczJBbXptVmV6b2JTWVNNaHRaNVFCblpoR0ZYZ0RnIGt3NSttYkljc3pCMGpTM2c3RlB4RzVvS0VDVEZtU1BWblhPVCsyWTRsV1BadkFCTCtwMG91Z0JkYnhxL05XZjlmTmFKUDdNaWFSMlEgMHJNV1ViT3FOQWtFRG5UL0FLSFN3bUtka2FmYllNVmZTenRKckt3UU1rc1F5V1NtTHVET1FFc215bHNlNGR0MlJ3VzJCYjM3Q2ZCLyAydVRHQTZUL0FNOFFDRGpzQUVCMVZFaFg0ZHlVNnhzczhOcTY0TTNPcFNKYUZoVml3TmdldWJRbVcwQnVDdjhBVDN5Ump3RHIweXVZIERoQW5RbGtZcnE3TXpWWDlKT2UyL24rbVF3SFY4T0x5UXk1VCtuZ3dMMDZ1N1lyc2xoSzloV1JjaWJxRUFubVFnWGh6UTRmNmZCUTYgdUFuTVdZbXI3WjRQRUxzSFBuN2Z3Ry85WFkwNzZVM3dycC90Vy9mNHFHVFM3ZWFxZ2M0dFJic0JlbUpxdTJhVlNpR1BtTGJnSDl2aCA4OG84OEQ4WWg3bVRPVmRWL0J3Q0NmWCtmQVBBZENXWDZZUE9naGhsYVlRYnM4VzNHOG45TUZzMnh2dStEWDc2WEdBeklqbDVGS0k4IFkwNzJZOGozQnpqemVLNG5qdzNIeDFWR3N3NmUwUjJSM3FxcGRuWElkZ2N3V3pGVHNKZjZSYlZTQitlQjN5R3QxV1FtY1RyOThnOEcgZVVOOFpsa0drbWtud0hQdUEvcjFQSjdBMGFtMThiUTRHcTdJc0pvVzMrelE3SnFRSHU1aXg2NWJJdDhHTFF1SDdnSG1iUEJnWWQxTCBIR1BPMTBiWm05dTMwSGYrUWZyMGdhWG1SNVVmT0ZxNEc0MXQzaHlhOWVHcmk5WkljcmRtaE5YQjVpNEdYaDYyd3ZnT2Z2MVZvWk1ZIGhxeXdNK2s3SHY1OEJ2NERwa1NHQmd5aGNPVW0zQXlhZGNybXBZeG5XRXZpUTljeG14TktUSytXdzdndHc0ZncycHRYenpVSEdjWFYgMlpHT2JKdnUvZ1Q0RCt3VnFGK3BaWkwvQUx6QzZuU3FadGhHalU4d3l5NFNkbnR5R0hmeDdjZVU2ZVZFS0IzY2FkZ2Q4eHhic2d4eCBDWXhacG5kdGZldGZ1K3JPV1Jia2pUbXB1Qm5WQUhHa29yNFNseUQxcVdSZ1lxV3hxeXRDTjlQRHJiSkRoOERCSHAvQjJSNVpsY1gyIHpPTzJ5TzRBKy9BUDBBZE5RSlZDMmVIOXRBeTFSUzJlc0piczI4QTU2d0w1bTBPaHk5UG9GY1g0YTJocDh2YnBpT0JZYTBuV29qTTEgWU5LeXM4SnRHcm5nQXdZOEJYejcrQkFWMWFGcXlOZGFIWVNicVd5VnRrUTBPN0Vob3VCMk1DZUd0RVMwTEdyZXY2M1FrN2g5YnI3NSBZejR3UUFZZjlSZFFmU01MUjMvbjN1QUFiLzBtVlBsQXZXV3QyTTdqUWxrSGhzbFRwK3BTV3BCSU1WS2VscHFhSG4xV25wNWluNjNvIDhQMjArcWgvS0lmbkRleDcvd0NmUHZ4OEJzQndMR2lQSkc2Q1dGTXA0MmpFeGo4QkFJczAzczZlemxIZ1I0ZlB0ZklpRXhLaVNycEogWENSQmpzeU43Y2k2VStPTmpFWkVuSThpdVNvZ3laWXNPQmFFaDJDUThvd3QxazBEYklIaVpZRm9VL2xNbGdCekZKM3lINWg5U0hxUSBPWnliN01UT1dqdmZBVjlCZm43d0I5K2g0WkRNbFVQWVMycmdYOGE1SGpmeUxJcVdqcGEycjFldklaU0hWOE9IOE5QdUJnbUk5dC94IER6cklacmc0dlVDTnZhU2J4UGdENkNBNEQxWldldFBoMUpzMW9VMFJjcjd1RVIxTlQ3NVhaSW5DSm91WHlnQjhJYWhFTVFvV290RHAgY0ZTVUNGT3JiTldoWGtwSUZkYVRhWHY3SUFBQXdJSFZSUk9zSjhwTy93Q0pxQXBMU0tPemN5UmNTU09xc2FxdDFxMmRNb1VXbk1aRyBXWlQ1VVY2SmVtdkxZWWI0VlRCUkd3OVRJVVJqZ000ajhnUU1WOS9YejJQVGxQY3gyTjhyS3R5NEJzOXIvTGZaZWY4QWliOGVPdVpWIE1rYnVOUFNMSVl6TGpoR1NOeVFOaDZzWXBjR3hUS3p3SzVncm9zUlREVWVxb1ptc1Z1c1R5ZU1zS3RtU0haRm1yWXUycllUWEo4ci8gQUllR2NFOWtIaDY1clMwYWxSdU04WEtQQXdIM1JDVlgrLzhBL2dOdXFUaDJKWmRoMC9tMXpMdEVDK1ZXRUUwK3RtR0NXeUFWZVh3MiBGWUFkUGNIeGJ0VGtpT3BWL3dBcVF5Wk5YcHNhVC8wVEIyNmdnRDc5OUIyRE1yVVpxRHNWQ3M3VWhxTGRsSlZBNmtHMjdsZE9BUml5IEdVUFdhSzFCVEsvaDloaTlicDdoamFrRGdkY29ReFpxOG04azlqL2Y5L1h6L2dEL0FGdWVLN2FLZ3RDR2tObnlheGNsVWxwN3FkcWYgTGdZWEJ5cHVJZUZ3MkF4RFE3VWNPWTluSUZQcVNxNFZCWnVuTldabGc1YUtTN25ENER1NkE0K2ZBUDJSMjNJSklwU2pUQkRHNkk0bCBoYU5zZnFvNURTYjBhQllnNjBtV1E1V3Vka0llS1ZkUkdIVkZhTm9weXUyOGVvVzlyYU5zVWtKTFUvT05EdGErMnBaQjhlSzV2QzVrIGd5TnIreUF5VEdZVit3anpBSk1haklyREtLTWhCUDFJZnMzelBnRVBuQjdNUmtNbzgxbURDR3phUHY4QXdEd0hWdExRNVJGeTRkalYgZldNbk90b21nQ1k5UHBLZTJCNVVWaEEzSXRqN1U0MllNVEI1aFYyNDhEbWV5d0xSaG1QZXo5T2ZBQUhBZGc2OC9xSWFRK21CMHRSWSBUci9yZEtuNnFHeHIwL1dwVzRDWk5GcHJDVFRIdGdlOExJbUI0WkF5MUFWL0RBTmdpcTc0TVdmdXFROGI5N0g5L3dDcnh5TlhpblNKIGhWSzJnWWtwODlrQ0thL01pYVo2bk1TbGVwNHNXR1BobUErRU13d1lOUS9sdncrTVZkdG43SWI1OStJdC93QWJkUGdEa2x4TVNMbkUgOFRpUm80M3hqYU0xdE1xWW5ETWg3NWJ3T29KRmtqa2FSa2tSa3dqU2FQS2VJdDd0MWk0eXlwY2JBOXA1Nlh0ZnNFY01ubUFEbG5EYyBrOUNVbXhIZkJyeEVEbm90VG5wUzNWOVY3eGFpZXlEME5xN1h3RWJiRm1tMWRaNE83SkxzYlA4QXR2OEFpZ3YzUmhYOU5haUtxdml0IDN6SmhtNGJ4c2xPQjZmZkdoZWg2Z2lrUVdVbU1CaGJXM3g3N3dRNEo0ZkFOekJuRjN6L2UzZ1VFK0FBQVAzOEpoM1E0WExVN0pGc2EgWUVHMW9CM1pITURXQXNZcmx6dm5tY3hmNWhEdUI4bUQvd0FsajBPMUZ0WXdReWl5VDN2bXh3L3Y0REFCKy8yVnFkMFU2dmNLM2lrTSBpTlNlbTU4RzNHdlhrcTdTSEZpMkhhN0kvbkdRTzRmck9uMS8zSFQrTWkvS2QwVWtKdjhBOStmdC9BQUFCSStHbWxLd2I2TG5QU3B1IElrWUtpUVJTMk54ejJrSmdtWkhsYTZZWTR0VHFZaUh3cmJRT3krcExJaHRFZUxJYldWdFJ6azhIampxT0lSN2dpMXZEZDJNOHRKOHUgem1TNDE5cXM2UkVXbkt1ZFV0OERMZy9pZFRrOWIwM3pNVnQ0YmVld1dRblVEUlE2eWpjSjRUaGlmeHQxK0FIMzQrQTgvV1JnMUFOdCBnRXRVQVpKU1lZR3lIWjRvY2tlVDFOUFRhbHIwODBRN1FNSWFHdHJjd2h4VTlZQUVGZzg5bTJobUduVGxYRy9QZ0QvN0R2NzR1QmZUICs2bHFNZEJjK3VhdEdRMjJSNjNyMTNMU3owcjVWOFRGK1p2QzJudmcrWUR4WUxMbklZemEyaFplWGkwamlTajhCdDFCd0FQMndBSTEgNHFyVnBRVXV5YVdUWENyb1l1d28xZTJnN2FlNURZdE5GWHJ6Ull5SVBEOTFJWWQ4SEdGV0E0UVBoOFpmQ2hObSs3T3p4c0cvdngvbyA1RmpidU56dks3eVNCdTJSNHdVeWFTVHVMYk5qRVlDOXc4am5yRkp1S3BTSm5LUlFpRUt6WlZtRjlRbWhoR29YdmFqajIrZXJMTDliIHgyM1R2VXJtK0dEWjYxYkNKeXpBMnQ2M2lNa3BYWGdNcUhpeUdMSVpJYmg4eUNoL1AzZ255aG8yejNOaERmUGovd0MvbjBFQnBWZzggeWpid2FWY1c3SU5lSnVNbFRUeDJyT21JcUUwUmNGY0Nuc0VSOGIxQmtERHpONFQxKzJ2aDFtemJYaGpqU1ZYTzNQdkEvd0JBdndGSiAxblpIWkhUSloxSkMwTW1OaWhqVmUyQnpZZXB6VmR5TFJhdjlyZ1E2SG1XUk1YNGNDQVJubzh4bEpJZTZEUGQyTisrRy9uL2ZnUFduIFVvVUIxODhPeGtXbnFWU3JpcTJwQytIMFpoN2p0U25Ma1hnTGxESU1qSjNVbUo3Qjg3aDdhOEdDWk1weVptUi9OdkFEZ0cvN0I1OU8gb1Z4R3l4U0NSODJVWkxoSDJZQWw1TGJETExnWW02SnY0NmVGVjFqS3grdGdoZVhMaGtsQzVSNDQ4WGlPN0krQ2E2aDA5ODA2SkJSYiBhSjdJN0hvc04yRXVEVVlEaVppSFk2UlVzV2F2MXVITVZ1WWhzQ0cxVDdBd1ZWc1h4Y1h6blpPRStBMkIrNENlQUhsanFJSUovd0F5IHZiUVRhM0NMZFZEVzF0c2hQenBHenlybEUwMlUxQ01HOGN3M2dndHZEYmFDbHlRWCtMNmdHYklrMWR4L1lOLzM4K2ZBTWhEcSt3SmUgVzdhZkF3Zm5ZWkRaSWcvSnJmaEV6ZEphdXJzaEdIRHJmN0o5SFEwOEZ5UjVaeWo0ODI4ajkwYXQzOEJ2K0I4K0FBSUpzcHg5T2N2diB3eGtGV3lERGtlb3FJajAvVlpoM21OQ0pYcjVZeTJQK0c0aDVnZGc3cWdWL2UvSnEvT2NMVVNVbXJjRC9BTC9sMzhRbnlaeXdScGc2IHVkaUV4b200RXlramp5TFpKNTNjZ3VQMkVYellFd3N5Z0t5WUk3YWdPNXh6eDI3UUNtcnh5MW1yOXQ4ZFZLL3hOTUdrSFZublk2YWcgSVRWUFdEczJzTGdoZ1hndC9NdGd5S2hqNWlHSDFIMG0rVituUW9EQWV1SmJaeGd2SGF3V09QOEE3QU1mMFAzWXNsZ3RTdEpHbytCYSB0WTFkWVdVdFkwNHZtSHV0MkZPaTZmZEtOU2xJUUF2RFFxSE1PS2ROUjIxUHdoTWlOcDd1VEhBbzhIUGQzZmZjQXdZZStEQWxDT25OIGJnWlJLMWNwVlFFNXpQWUNXQWw3OGthQUphVitQeEV6WjF2SDVsamNmZ1BHRm1NL2pDWUkzOTRBSHo0RGZ3Q0Q3R3hpUkhEVlBWZDMgSHJhVzBPciswdU5YaHpBWjNjT0J5L2lPRmdURnN4ZGlmVzY5RGdxUTlEbko3TldhdXJFL3V4dEp3QWJCNS9mei9WbVJYa2pLbjJaQiAyRnBJc2hDaGtRZ0NPUEd3U1k0bHpzWkR0RmFJRVdPQmhibDQ5Nko0cERGTEdUSkdZbFpsa2lhd015UW9LM2lWSk4yR2NjbVpoNHhpIGg1dWNTSk5GaHBMWlpFTkRhSWhpMExhbHRLdUgrSERoek40WUpqVStWZTIwRERHTTR0OHN6WXdsWGhEbi93QkFBYkJXK0hYY3dOV2EgVFl3RXg4UE9tU1ZNd0JtV2dKUTRpYnVrVmsrSUg5MCtHdncxVnRYeUU3azFaaXloUlo4MzdjQmZqL3VBNEFmN0FaUmJBcTZvWkRIaiBaSXlTcmRUTWQyakhEMFA1WUU4dDJBWXNsUFQzQlBBVFB3ZWVhbVJuWnNSWk5tODJFZUFBRFlOL3dQN0JpMzdORlozOFVzdDJONXdZIGtOWGxmSXprZVd5UGtvUytORU1nWStHeUdKamd0ZzhQZ1Z6Q0oyK2hxL25VbndlL29JRDNBZWZPRGNGZW4vSnl0dC9UK3h6eDk5bmogNHg4bStzN2NzeHp5N0dlc2FySEFWNVBuUC9iRWlqZDlXV3FCTXRqVXpucmRmV1k5aGM0bzFWTnFaUnMycGRRN0FvTENkcDd4bVRjRyA1a3RTcThGbE9FWTFMYjRFSFQ0dDV4eHhyTzFNREtSeUQxZXJGQTlMN2lmd3E0Ullic3QyeTZWMDlhWUw0dFBLa3R6OUZ0bXBWWFBLIFJLOFdWUFY2ZFRxL2NUSmNMNldKZXhzZ0dncVZwcldGbUlTcmVBckgxWWhRWjYzRjlmeFF2YkIrSzB1djZmRlVmL2l3TElaTE90QVAgR1V6RmhOVGhYdGtPVXBkalNwakJWZGtNaGlZdHVDRnkwaDlQNU1VVjFsbUJtd3VuaTFEK0d3VzZmOCtBVDlpSWNlMzZYczk4dEMybCBzTUdUN3NxZGZHb2E5SzVsZHpZMElaanR1K1dSRDRkczV3OFFxWG1IN1VNR2ViT2Yvd0N2djNWMXBpNENxbjB6OGFXT1JMZU56VnE0IHNZN3ZITm4ySGdqanFzV0NLV1lGbzNXV1NTQ1cwa2pRVXpCc2U3Q3hRb2U2dU9sTFI5Z1NIZHdHeE5hV3E3YmM2cFJ0OHlNNWJIcWMgeXhqeFpvdm15V0NIY0ZiektIY0xBV3dmNXBlQTR3WVU3UG8reUd3aHdCNERyMGFXM25tNDhPeG9SamhPb3g4dXdTUVNkUGJ3d3ZuZCBCZXJsRVpGOXdEbUE5MkxaR1k4UUdCdGFzQm1ucTBLdnFBbmk3Y0p0WHord1lWRjc5VkZTMGV3S1F6S3gxYzk1Z2xoV0NIc2lJUFNYIFpmWVZ1eHBRbVZGTUVJaTN5TmJtRUhFSnQ4QTRoOXpOMEdMTHdFKzhiK0EzL3A4QzdReTJNbTRIMDFWVXBnYnVSRXZESmFqRXVaS3MgYVhZMTNPQThPeUo4eTFHUWdZK3Y4NGNkc2ZPRFBQaERhUDhBWUQ0QmdBYyt3UklZcEpHZUowV0ZxVGhzNDFBcmVoZVNoaGR4NHZpYiBwdTBZOHRqV1ZVSWRYejJaV3hmZGo5TmpIdHVESEttV2ROd3c3YUFCN3lldEdZdmc4MURXMDIxVlp0QTV1VFg3Q09McEpndDRGVEtOIEQ1czZmRHA5YlR5SDhoVjg4SHVZd1h5ZFpCbS85djRJSDcvMXlDN29NVWlqdFhJdzhrOHBIcTNxZDREclRSRS9GOXhwa1d5R0F6RFcgN0lXOXdEbkxNVCtLbU9jQ3lneFo0U2IvQUgvd0dIMEVBemlGYnlJQytITTJYREc2YjBqaEphdHpEdGVHSEErSmxObklyZGJ2a3REbSByOHkxQjYrZWFnNHp0ZTBERVo0Q0d6Yng1KzNUL1VQVGVuOWJjbmpPZ1JYQkp0UzdtdGtzSWhiVlkxL0w1UWVySUNyNGo2M0RzaUdoIHNwQndzWnR0Q0JZeGp1WUxRLzZKMlQzZi9Qcit3QUFDOXRBbWN4d3ZpTVZlVG1pRVBJckw4ODhmQnZvUnVLekZWU1pGUWlVeUpqSkIgRzJGeU5IYlY3ZUZ5NzZKeVd1aWxUT2FaMmk2Q1Z5TytTLzFXTGgxTExIWkxVSExCOVFVVmVBMUxNQWM4bU1qaENUcXJhanllQitZVSBHY1g4R2srRFBZbjE4L3NDRDBvRmNmRE1sQTZhNTJSS1pLbHpySWQ4WHlHNFdGRHJsb2xvYVlZN3FYQlc0ZGsxSWZEQnR1UGJreHlaIG9WeGd6aE95YkFmQWVmOEFQOURZOUxjTTV3YW0xU0cyUlhyNW5NbHgxT3RubDlkVHlnc1NCS0dQaC9ERHpGQ3IwODUvSU5Sa1l6RkUgTW16SEVrSWJPSDlnUGdEL0FJREJWMXVZT1dNNFRBenZuYWJ4b0d2VnQza05XbGZVUnZENVNLUTBOQ2RhS0dIREIxdVk0US9uci9CdyAvZkpZdVJHWm5qelp3Q0E4QWYzL0FHQnlSTkR1bDVNMFNGSThxeDI1UHNsckkzVnQyMlBQdUhucUF4a1Jzc1hZenE2dG1MYmJ4c1VGIEZlOEc3UFBOZkhWakhCT1RhQ2NtcXJqNlVsTWNnQ1d5NU1LUW5YQlNkaUNZQWsyS0dtaG9uMXRUWVFIWXpac09QUHc5V2ZIV0FhMGsgai9SblpVRlRXd2dtUGt3Y3JPdWRhdVdoNjdpRXF5Wk5FdW1tL015dDJac1ZCbHdBdFk5NGlGZDhIK2hsS0dzNDRtREFPU3JoUjZSbiBHVEpmTFRvVUdLVHpZYTNsRFl4aGhPTUdVV241dWRBOGdEc0cwK1JEa0Z2cDZzZ3FMcmNOWGZpei93Q2IxSkV6S3JDYUZRUUNCbVRRIE9QRjhYV1g0SGpxc2Q2dEVNcFE4T2V4Z2JSQXdMSFNWTWhhanRWK28rSEdQTzc1SzIreUErTEpWYjUvUFQ3QUFuRTlHZVNndit5ZWYgZmtBQUFBSHdEOTFhalViWUY2Wm9mdVhFYWttNElHbS9TcnA3cCtxMDh4RVR3QjdDTVVXN1JUNGJJSHNoYklPRUk4UDVWTVdTZkZ4bSB4dTkyY0hRZjArZzcvakR2RDVEcERUL2Z5NWZDUzdOV295dmh0T0dLWlBCMU9IRlRaYWJ6QWdubUlka0dHVHpsYUVGS3VlQ3ZJdDhaIGxoSC9BQmNENENBNTlVU0MvSDM1L2FpS1BiRjJ4RTljaXZsSm5vR2RUZ2tPazUwQjM3dFZ6WVNhMGNmbUlhZlZaZGxINFRqMWdQdUogaFpSbGZFbVQ5a2tJRFBzQURIdEZzQUJCQm0wbTdCQVdRVFRJOGlSVHhSSkk4Y1V1a2ptbWhFUWozSUl4cUVaNVNmSlFLb3NucENDViBvcFpUSXlWZ0hWR29vN1dZa3V1NFNVNEJvWTQrR3k0U2FBUUY2a2E3c0k4blF3bFB6eHRYRnUzdW5zT0pjTHVGeThBTnc0VytucmZ6IERCQmIzNnY1NFA2enp3bVQvd0E3VUFBTzBXd0FQUHc3akRqNXJyTWZMR1E0eWZTTXdieGREbzFYckxpNVNzcFVvT1AraDF1K0J5S0cgamdWLzRMZ3pZb2F2emxHM3MzZ2Y1QWYvQUdEWVlkTFg2M1NKQUZEZDNhTlNlVjJjdGVPQnUwTzczWUJLTU5vUGo1WDdJSGh3K3lmSiBBZExFSUZWODVSbWdxekxKeXJnanM4WWIrQlA3L3dCYVZzNWFGMHc4NWN5aHBKcXlwcUJadHdEY2lRMkdDaUd3MXpHVzZ2NUx3T0duIC9WVDFmMW84VEdibEZvRTlqTmhQUDdBQXFML2YycUpvbFdaUStxazIzUUswam1ONUl4SERISElXcHNzOXBteHIwell5ZTc2SmxsYU8gQXM2RExPbGlPVWEwWS9hbExnVGZQSnlGRGl1cGpUMnZzbGNrUStyN1RkY0ZTUGx2MWozQ3JlWlc1aFRaSHZWQlh0RGdIelo0YkkrTCBjd2haQnhTWUcydVlmR2Zvcnp2YVJWencvY0JQL1h6L0FMTDFnZkxRTXNDZStOREkvZ2JhdUIyczFmUEVzZVlXMExVeno0eWozQ3EyIFNxM0MxSEF3MWRuNTZvdGpDZlBIa1p2ZXlQR3dmMkRrSFdSR3RrMGUyb2xhb0sweEM1TGJXTmthZkhjN3B2c0N3YlRUcFRZK05HbTkgd0RXUStJbUlnZStOVFlQc3EwekQwOHZnd1lTeDRUVjV2ajc5aHg5K3h4d21GTXdidk9PSHNGblQ2dXlURmhTYllNV3IrVFRENVY3WSA1TkRKWUQzOHg4cC9qOXFOV25qVC9QNTRNR0lhdU04SjRNKy9MNS8zNTkwSWtrajFVcXZwcEJEaERXc1ZzODZ6dUo0c1JVa0ZqS2JjIDlmY3ZiaTIrOURSb1VLN3lMTWpzRmpmdDNJKzBKSUdzMWxSdGNUWEhjYjZrdTc1RGo1NVhsR0xSdHFoNjlaR3V5SzlpZlc1U0pYMW8gSGxzZUk3cUtCaFAyZDRBTUNIQlhCdkEyZmF3ZFhCTWNYN2dMOEFQNDcrZjRoWWJWZlVDbzMwU0JvYkJ3clc2eU5PNmh3OUtOTU9FMCBQb2k0eXloUDRoWkMweUo1OFBZL3o4V3RaWlNaVkNHZjZYNG04UGZBQmpoZ3dIMnJXK2xlN0RJRE9sVUVlSkI2MHArNDZucWQyczZ2IDVhZWVLTHlHNU1nOURRN1VxdHdjQ0VNSFBYNjB0UlBKckxRTFdTWVBZMGtIdjc4ZzcrZlA0QUNRNWFsYjNjNlBtd3NqdGY4QXFDeVggYXdrOTJQWEF2R0ZoOFVxbHFXR3dNaTNaQ2V5SjVDYXF0dkxZSzMzZlYxY1pqL1l6L3dEL0FCQy9BRGsyNDJhU0cxaGtkbUVnNTljNCBmVGl2eVBVNXZuampxc1hrZ0djcm5CRWpLZzFISWgva1dST2NzdTBxY2hoVGNObDIxWFc0NldoMUhjQ1E1Wkp0dzFBcDhaVHo2cnRvIGd3dmxqUGk5VjljdUpDeUxJcmRQUXNYQ1pCZ09OdFU3TVp1VWJvVCs3VmNEL1lOZzgvMWFpdjhBZzU1Y1ZVTlhBMzZxbEhadFlZOVYgcXRzVjZYY2hjdVVlRHNEZzRwL3pYREFPcTdlZU5tR1ltaHE5WjdHYlNmMDl0LzRDL24rbHVwa0NBRzNFa1hLVkF1L05TMnBvL2JHdiA1YklVVjE0OUxocjRlcTF1RVlaTjRhcmFYM3hIWkJneERWaGpOL1d4emY4QWovNmZxZUNsdkxYQTRlcW5Ka2xXRUJWZjVnUFRKaGhNIEs0dVc1VnpaSkJEMmQ4Y0Z0Z1QycUFRVW5oa1ptWkRhRmw1ZDdScE4yTi92K0FEQUJ2d3N6eXF6WVAyTzBxaDF4d2tmQXBnYlBweFUgY0kvZ3NUbHowMk1xMGNZU05DNFJRVjA0enRJL2ZJNTdjY2NseFdqbGJkd3JsSm5LblE3dVUwOWpQS280UGxMWnV6YW5hdTVEWWhpMyBOaGxWTE1JT0RJeUljTjhzQ0h2emczSS9PU2l1TUorRVNIWkhRVUhmKzBXd2JBNXN1djVESFY5bmFYejFieHBpR24zWllWOHc3VWoxIGxEY2oxVDEwZXJiOERyVEl0OGdRN0dCSjVBNVcvSmloUlozenpaejlQMkErZndyb1lCMDJya1h3OEdBdTd0bEFUbE9POE81a2RUREoga3FYWEt2RFg1bHdjRFEvcmFxZVlFUGttMlBuQm1iWkFuc0FBQUFIN0EvSDVtMUxJWU5QcllrMi9WV1NORHU5ZXJlejVPY2pxYkhGaSAzZXJ4WHplRENITStHUDRPK0w0RTNNSjdwaVNKZzNZSlYzL2Yvd0JnQVNSNUpHamQ1SFpJcmtoWkd3dU5DaUdKZ1EzOUtTUkE5OGJsIGxlQ3BHT1BZM0l5ZHQvVWdsRlpaSTJJWVhZckxqNE5BZlBUQzhJZUtzZ0dkWkJzYTI2aWlVekVPU015NWtYVG5FZTNLRVErWHM2MnkgSjYzeEpmclFIZ1RyUEh0QXpJNXZlKzBSOUJBSC93QmdRZmtPeE13TTZBVE1xenVFeFE3SkVrSGc5ZmxyVWZFM0VDZTdQcDhOOCtHaCByOHlkV21Da3F6TUhrbytJM0IvTjBlZjhBK3Z4L29yWDA5bmloK0cxK05kcnlJTlQvTURJYVNZNUdMVjE2eGxjUGFFeE9XNGI1N3JkIDRBYkJuZzF2NkdoMitNQm16YVNqbi9QL0FMQjFKV1E0VTNGcWRiUFpUc01QWFNZdEdJUVBVYXZyMHhOUTY5cTlEaC9NTUdJWmlHbnogWGlsbkE4MUovR2VVTExNYzJOSk9IMEczUUgzNWd3NldaZHpVTEs4alN3eTNDRlNPNzNNYlpqbnhqWGFLN3JQSXJsZ0NCSGpSTWNjNyBkVGxISVl6RjdHcGJ2UHU0N2VQT1hDcmFhalRMcFI3NFRNck9kdS9HVGFQc2t2aVFwc2lkVXJGVjR0a1R0bjFVVEVNd253NTA4ZUIyIGRHR0luR1VidWlETjcvdjUvaitPL3Z4aE1ETkZhQjJyU1hjamhKcVVva3NqQ1l1Yk9JcWJJVXRHWGJRdW4wL2dZY08rR0dEdHpQcTkgOFZiSmVXWllWL1lIai81OTdBSDVCNkpMSVI3QUFwaWVabmg3MUQvVzJ4Z2NBN0JMaG5vcW0wSy84NFlXdzZmRDhIUDRIWXpJellvZSBMTVRlRFFUL0FOajYrd2IvQU5Pd3BSWitlUXRydmRNTjFLZXA5QVh0VUMySElYRzRNOFZzVFFNTWZEY0E5Vm1XUnd3YW9Gd2R4b1pSIFp0Q3J5YXpzbUhnQUMvOEE5ZzZ2ZFFTUnRPaVNZekdlT1YxeStua3RRQWk4ZW1PTUVzWTBlVGZGN0RDdHJCT3hJNU1Zd0JJZ1BkbjMgY3U5MnovNWJvMTE1K2xMUU1ZTGIyZUtiYXQyT3lJQW41bWRYOVpHTFFxOHRZM2RSZURwNGVGTW1KN0lDMDhWZTJ6cGhNWXJsUDN6RSBKOUMvWU5nUDllalRRaDFFRnNDbVF6SGNCTFZSVjQycnJONUlOc2lzb2RqV2d2SG5LNEI3SW4xVkRjRnR2WkFRRmdnVG5EK2w3TUpnIDZ1MlNxL1lBQTU2ZlA5SXhrTDNGbGFOYitTa2l6RWdQcC9Mc2NXeDdCc3BYckhDcjJtMTd0VHc5UE9NUml3eGZHQU8xS1UrcHArRkYgOHBLSXd3SGhqL3k0WTFGdi9QY01jSytCMDlYNHVTeWp3R05EaWpZeW00UXd3ZGVodEVWZXNhWFNhZVlXakJlSHVESk9QcDU1cVc3TSBlZXpkWmt3Zm13ZUZ1Z05nUWYyQVpXYWJibEVtM2c4cVJTZ2VvYTJzaWtpbFpJdnR5Q09NdmtuRmFBSlVsSXY4aUk1TitMdWg0NXI0IDZQTWN1cXhjZ2JsWGRERzJRbXJadXdsOE83RDdDTUZBTHZTSlJQSWZObUJtU3lGOE8xUGxYdm1IK2poUW45Sk43SHYvQU8vOEI2ZkIgaTNGczhoMTdLLzAyeWlUSXcyQmNHb3BnaVF6MTMyYWh0RTFmY05QZFZza3hEc0QyM0d5K05vek56d21UOTZ1ZGtmNi80QSsvQUFDbCB4QjZiN1ZWM1ozVjJwQTB1MnBDSmNnbVY3WDZvK1JXaGV0RDRmdzZyVDZyVC9zaHdFUWJiRzNQdWg5bU9KSVRuQUQ3QnYvN0JBcCtqIGN3R0lXRWtacGgycCt5NjNDTmp3SFEyaFQzUkRzMlVyQjE4eE1RM3d3bnVESnZ6Z3BVZHlaNWFPTXMzbTlqZmtIMlFkZzJBQUxEY24gM1RLaW9heUVod2VMMjFhYys3bjdoV0pQVEhXUkl5UWFSMGphRitlL1RuaU1WWXJIdTVzM2ZBRldRTzRMSXN4dU1OV2EwNTJtOWsxRCB1MXRSQTdWY3hCZXVCRWxLYjVwOURNS2ZjSEpPSCtDcVcwRzBHWVJtWjdxLzlmeWlEN3UrZjMvNkRJMS9wRGJLUkY4U1VuYXBiYXRWIHdaTE5EdzBOUEVvWlFvV0FpNmZJOGsreVRONVZKNUE5ak0raDhaWnZ1eHM1L1Q0QitBQUQvVWRNMUVPQ1JZRXl2bWpKTjMrRytTa1Ygdlo4eGZZVU5EaXU2dlhLR1BEcmtPWW4vQUFIQTRlc0VDMVROelZ5ak52bnYvd0NmSDhEL0FFN0Jkb0lCUkhTYTVLTGRYQWRTMVBrcCBiQU5jVEFreFhQOEFFelRkb01qQXlXUlc1Z1J5RFl3T29ENE9CU3pGZlVZODRIQWlTaysyL3dENy93Q2ZCSjJqTVNyQThNVDdWeU04IFN3Sm5kZXRLOFc1V0p1bEZEeUJZNmpSeHlzWmhNam9qc2lpUzRuN2NieVM1TWZJb1dmSG5wYjFCcDBzUVU0WHhtbEFKc2F4bUttTFcgdU5tRjBka3B1dVdHdWFsVU9lUTNCa1FqQTlibnFSODhqaUJnekVxTUdXcGFITlFldzRzSHRnd01IVENIc0FmS1gzRGdWR3NsVmNQYiBhbnVCYnVhT0pmRmZSRzJSWlZQcDlWbUlscUtENG9URGxMM2haY0gzck1vK2NHT0JFazJEUVBmbndBOC92ejhxMGRvZEUyUWVQYWFiIGFzaFB2aDJiUkpqSnVhT3ZQZFhvY3RFYUU5Z3VCdzB4UTBOOElNbGl3UDRlR3BiMnhDYU9UV3BqZHFTRCtnZ0QvVWs2WmEzWUlmVHIgVUM0azIwNFpwSnNpQjNEbEFrT20xeWtJZHltS3ZtTGQyVW5UOHp1cHNJKzJxQk1kc3hkTmpLZ3RUaFBCL3dCZ1Avc0Q4K1dPVjlTdyBlazAwcm1WWmRMSk5GSVhNTUVVdjFCbDA4ZS9ISnRSc0VYSEh1QmJrRWhFNlF3U0NFb0pvNFVoWnAzM0kxM3RVUUpOTytLWEl1K1NXIHJ0eEE1M093MVEwOU1uaHgyYnB6aExkaFpSZXJ5MW9QbVRXLzhRYk8wVU9MUG9ZK3E1bWpSam1Ca0N5T3l6ZVFCNGpGaG9WN2daVWEgcjlsd1lOL1Ard0RERUJXU3N6S1cyMjVuQzJpbVdUT3RzUGdXYUtmUFYvTFcyaXhuWjhLUXlBY09ubUE1aTBKaXFCSUh1U0RGbDhmTyBNbkVsSjJQWUQzLzBDN0ZmdkVPdENBRVhwdXpuWmJUWWFTN3RGcWFiM2lJNGRwUk9xQkREajBPeUZ0RGh2bG9WWFhMNXNQMFpsMDUrIE1PY0pOZ3orSG45ZytnMDVxZXZvL1lzUG05c2FCRHowbGI1Uk1jSEN6UTh0WGJKUjZZUWZERndJVmtUTjRPZHdMTDJjbWpDMWRtSisgRWR2b0ovREh0RjUrUXlLNjdpczZoNjdwSThIZWlQZEhrMkZYeDNOWUo5dFYxVXhWVFNMU1JWaUFja2JQRDJ5VU1zYUFQYnh4MXVNSSA4ZktTekJUTnZoSnJjQ0JqYWhFY08xR0piNStRcnVwdXQxK1lIcmQ4aG1lSC9Bc0E4cXNuWTFvRjJZTUI0bXpad0FBOStmSDkvUG0yIFpXNkhkeStUY3NVK25NbXpBNjN4ZTdPOEhld1hZMVR1UXNPd1RLZm9kYmNJYS9hbGM2aDhMcEJwN3l6b2ZKaGlPN0cvZGZBWXZ5Qy8gQU4vUHVZSHdQS2oyMUFybGxTVS9EVkZXNm1qV3A4ZW5JY3Q4VTNLdVRDZmNGVlBnZXEyUWdHZUR4RDUwTW55aG9lVVlIU1lUNkNBUCAyNi9lQVA4QVVDMlZQSmJWdXR4N1FCc2lwWExqWmE2RlVQOEFMMkpvZDZsRjJRUWhvYjRZL01ENU9zdFBRNTI1dlBLR1czK0U5cnQvIDdSQUY4Ky9iQWZNekpsRzBBUkhqZFNyaGZVZVExaEhJd2J1ejdnclVNQ0NNV3lOUUt5cTBNd3QwcmovQ1NMODBidjhBMjhmTmpwUHIgYXZIbEw2cWtaVTFrVDdMTUtTOHIyRUJ0aFRjTDVLQ2JIbExmSkVQVEduek9YdzdHNCsycXBpczJhbXI0d3N3R0U5bmpZQUg3QUEzKyA0RWM1cDZQTDVKWG4xN2JTcTd1RGJMWUpqVTBKRnFJYlJwbFF5ajR3Vlc0T0RKdkE5UGVNYlFxYXh1TTJZK0ZHWm04M3Ztd2IrQS9yIDdxb3NOOGRIZFRKV0RkT0VhMUVPeldTc21peUNXNzFYRlBYSVVQVEU4TytQa3g4WEhDNEVnRGdlQnA1UDJLREJpT0VDV2phaUNBMkEgQS9BQUhWaE11MkZPeGltZFpkUVRXMVBEYmxadDhCMlMyR0grSmFMWVJTeG56K0c5d0R6RSsxQ0g1YVlKK21UdEFzdm1EeThuT0UzWiBwemZnQjhBQVBud0Q4ZlVzZHVqQnFTSzhJbVNKNDJ5eHZjUjBNWnJBWTdVY1BrNVo5dU5Sc1BWczRibUNsbDRrRVlzT2lQOEFibmFsIGpSOW80TmRCNUJmbXBEQWViVDJjN09FNnE5cFJocnRJRTRQa1VTcmk0YmdIZkRGd1VuTStIWEorZStJOHpja1BqT0dPeUJFZkUrZzggK2ZnQUIrNjNHREF1dm84T2xpaTNHYWpORDF1N3lHck9ZTm1sSGhOOEM4TFA0MitXUzRJYmcrSExMWDU0TjhHY0R0RVl6bkFuZytBbiAxOUI0Qy9QM1NIVHlFaDN1QlAwdDl6bEprc3h3QzhIUEdLdmJPNklGM0dBS2ZJZHlERkRYeERJVnZRSjRlQlZSSDVRVjdNZUtyN1hPIDJ3ZTNQK2ZXNzAvcTd1eEw0dm42ZnJCRDM4ZVBCNjNYbGVwYk90amVKVVhUZytIc2JRWk5RbGJza3lrN2d3T0hrKytPTnJOWnE5eVAgTHp2WVFJY3dmcmQyQUFnK2Zjc2pSOENWOHpXY2FrUnlSMVdPNHRQN3VjZWZJWS82VUltREZDeU1pdXlKTkcyY2NtT0FKVTB2aXhZNSBxL1BTeUhNaFlxdUp6QkIwMUViU090Q2V1c3oyNEQ3eXpNbWFRZERnL0xuenN4bkJNNlM0R2xodWxDODBPU1loT2JuQkJjd2hQekdWIFhCK2xUUGd6QmpPb3R2cyswS0tJeGE5czZxWEd4Mm9ZTGg0WU1DdFk5YVUvNnN0Y2pZNW9sTEhIZ2RvdFMwNWx5a1pQRmc4MFlYbksgYTdBR3AwbFZTUVBwWndTZ09mRzNPbGhZS0hvNjF2SE1lZzByb2ZaeWo0cmtwb1UxQ3dicm9OeVk4bWxKb2tjbWp3YXVoZGZCcjRIUiA2WUJsVzBvQmxNWUZKcmRvczV0MHlvOHl5T0VPQjU5MDRZdEh2TVd6RmtCNzRJTGRqUGxQMFBZeklzckt1MGR6SGlyZ2dSSFB2d0EvIHNDQ2cwSDF2UjZycU5TSHZlVmF0d1ZkTVYzWTNFcmUxTENhRWkxSzV0cEljbk53WURGVnpLZnF0RHErWkJ1bnpuSjdmcHRvMDlMSUkgSUVTUVo5QmZqNERnTlJleTJGMzVtWlRBTkZ1V205U3RRRFhzZFRyZk9RN1FiTGdyQTlzS2FIY0lka1dRK1BreHdoNzh3QVdvd2pNMSBvRkdiZkRkWEpLT0FxTFlVRkNBSHdIWFlMekw4bnd6Q3ZQemdnMURtQkdHNkJyVXdOaGkwTGtTQllxYW5wL0c2M3RRd244cWJWOXRhIFdRV3MzSnB6Umlid2I1c2o5M2ZvUFBqK0ora2ttVkFrVVUybjdJNVloTEhoSERJZTFOaENUMlJScWtlR1E5b2JMdW9Qa2xqZGl6dW0gb0x1enlCSHJ6amlEd2FxbUFQenlhNDUyenlBdUxoa0xqSWRIUGRPRWlKYVN0MmFJVTIvQ201VXBObWZEZkxycFNZM3ArT0I2cjBOViBUeVpOOUtNMkx5NnBMc0RQK3lFQS9yN3FmdkJidVE5WWlmS2FLTkNVRG01eWtwMXUxRWlFUmFBdENRTHRxazErSDIzY0E2R3ZiNHBPIEU5SFhHWjVhS3ZGckowMjdVbWNQbno0QUJ2NEVBQVROeXhOUUZTdGtKY2R6MnF1WmFBMlNwby9HdzZQTUF4WllGeW1FR1V3dDhQRDcgeThLUThDRGhsR1pES2NaLy93QUI5KzgrYldwWGF2RnMyNXJRQW5wTmJtVWthNzVHZFJvL1RndHhTZ2lwZG5ZSEF4NGVHbnJlRGEzZyBUamgyelYyZ1piNXpoSVRZSDIzZVBvUGdPanZVVHg0elFwR3NrSXRWNXZjeDhoZ1kyd0NnOThiZVNSanprQ1lxQzhUdjJZaVNPUTI2IHljQmtaYTdNYUZHem5maGNlN3NoMkJJMU4zb00wNTNUa29GZWxBNmtwdEUwQ254SWFzVXNLTFY4d2V5UTNBT3RtUG1WeWgyQlBWb1kgemxEUnlaSWR0a0JuL3dENEErWUw3SXB0RmZnWjVTd2xJUTBPRm9zTWREdmdnVzJ0b0twbFhyZkFwbFB2dEpoeUh3UURnZXNiYytMdCBDTThuRGZhN2dSOC9VV3dIOWc2Y0ZpVSt5dmtkODFhUmU1RGhxTXNpdGxNaG5PR2crWStPVmNwQ0hhRU1ldHcwL1VKY0lkZ01JNkduIGdLcmhjWkYwNVVDTWN0R3JrbDRBSDhINCtBUDcvZ2g2bm92VGZsYVQyU2U1TlZYSko2RzIzSFU4TVAybmNYS1ZiR3dyYSs0R0ROVlcgcE1IUXUwdmFSSEQ4WmFCWk1uYW51RXh4QVAyd2U0QUIwbEhpaVNNYU9aSXRPN3JER3JRN3RUbmd4Z21TUHh4YmVEWTdSUnRyeFR0TCBLMnBoM3BuUTZ4aHV6UmJlbmJHc3RwMXVRVVJKR2J3NHBpR0o2aGhZOWJ5clloeFEyY3BhaElBZC93RERvVmdPNzRNaXNLdlVyZ1BoIHcxdXlGdFBjSVlQOUp5M3RuRjdNUm5qdWpTZS8vUWVmYkNmQVJEcEpmRnpWSWVYTlJsZStaWkxRczV3SkRhM0xZeWsydkFNV0d3VEQgUGF1SDVscTdmSWZ3eVl3b3NlY044Sk9mNUlPd2ROU1pYK245U0lMZVZaYTQyekRJRlMrUVNzNlBiQmc4TDFDWUpzTmhmRTk4TWZNcyBDV3FvYWVlbkIwWVlVM01ZOEpJVERmOEFZUDhBTUIxWHNmVmRQckY4Y2NzdkpOMlFoekxzaVNWdXdoOHRrVm5LWFhMNU5YNWpneVZzIHQzWlY2MmpnWENCQjNOR0tER1pHQjc1c2ZnTmczOEI3TUVTbHAyRW52aFp5Z2ptS1E3ZVBySWtTUyt6UGxXS1prOE1NVDB1MmRJSTAgWHNobWp4RzVFS3lJditSNDd2QWUyK2ZOV0xZUU5ncSsxYS9hdTFUVWNHMTh5dHJESDA2NXkrcDJSdWp2eGRrVDRlQ2VoMnFIWHc2ciBoWUZEZ3pGWk16UnpqWk5rNFJ6NEFmQWJCaUI2c2hWNXlPa1ByNVdtVWVTUnR3WHhxSG9mVWhTVjVMNWFxMWZhVHdzTzRCekV6amQyIE9CaWQ5dFZjRm5pNHV6Tmp4Tjg0MzkrOW43RkI3dkNxTzJMRjhXeHAxVGF2MHgxTHlSUGsyeFU1SWt3TmxiL0Yxak9XRDRRbVZ2RE0gQnc1QVBYQ2xjQ0dENU1zbExRUm1ibXU5blQ0QkJmZ0NEc0IvcFA2MUZPMUZkb2ZNMHp4TE9GMWliS3NCaW40NlFubEUxVHErS1pjTiA0VC81d2dZL240RmpUQm4xZmszaEFoeCtBSHo0RFlQUDVkUWtXc25oMEw2ZmNUVDdPc2VtR21rRTZTeFM2YURhK3BpRTRsMnBvOVVtIFoyNG5NRDRUU1NSdzZ0TTMwa0Uyb2ptaER5NWFSb1NZbUx3Tlc5TXJ5d3krbXRKZ1FpN2hacks0anF5RU5QdkM2U29JV0J6bjlWVjcgc2QyeHdRMXNoMkhUYTVzSjhLTGRYMm85aDRhMjRMNmYvd0NuODlPVDJZWVVReGF5RENZbS92M3Q1OSt4NnFLdjFmWW0xamNvWFh2SiBkSTJjRVUzQzJvYnhFc2dXNVJCWjU4SHpBNWhiTUdHQjgyR3IyMUgremJvak0yK2U3d2ZBYy84QTJEcUJydS9aYjRZUEhvdHdMZGtTIHF4Q0wxSDV4NTRTRnV4bkxzMTIzWVhCYlc2M21iZ3Q3Q3ZnWGhrSmpCZnVUODMrd2Z2Mi84OUpMQTFVQTVNeUhWVmVvYnM0V1Vxa3UgNENlQmFQWVhWOWhBU2hnZXQ0MlJ3OURIMXU4WUVHMkR1Yk1yaTdNckw2VHNYOWdRZkFkT2lidWMxamVLcVNkVThhb3Q0Q1YvN3pVbiBKeWt4VGRvVW5aMGttRUtvdDlsTFpsYmJlUlpIeExtR09LR0M0MnhBRVpZN1ZFQm16Tlp2aW1HWkVOaitacWltR1JzblRoWkdjWGVDIHhqUytWdTZrU2djZW5zaGlrM3pjRnUxZkF0UWNtc2k3UFdCZlpPazZ1QjcvQUw5aWZmdC82c2hWOGd4WUpXeUF6RzRMZWNrQWtCM2UgQTk1RDVkYnVYSGoyenIvQTZmZkxJVDJEZk9ZTnV6dkxQeWhaMlB1anFIUjM3dEZzRy9zSElOMGZQT0huUlBwdTM3K0pJY1d5UWpBdyBKSzJRaWNveHFoOHNhWlh4ZUhUOFJ3bDE4SHJtdGRKOXROVDNnek5BdGFKbk9FaEViNkNBQUh6Ni93QkJNTmtwZDNzUXdMU0szcmVaIGFwOWtpTkZoVEsvbDg4cEdzZ0t1aHA3SUdmQTc0SFQ0ZHFRSy9iWndhekdaOFYzbmZBbFhKUno4UkFUNEFBZzlSdHRXREJvMWxqalIgSnQyR0lWUjdETHRMSHMzM1loaE5tUVIyNG5JVVZxTENGTmw1SUdnQ1VoM0JFa29qTjNlZThBRzR4S1pVYzZXQk9PandwSTU3RmNjTCBqbVdXZVNlTDJvbjJRVzNXSzdpN2taQjhOeDRmTTIvQ0NCSHZpT3RyQlBpNnlNNXM3WWd6NER1NmYzOCtBd21KaTJLYmRoRnBGa2FrIEpqR3RraXc5UFQxZEltVmZkenZhQjc2M2c0TW5KQ0h6bTBlMmcyVERheGF6Wm14bXpid0EzL3o2RDU5eTJwRFc0RWRFc1VvWXFYVGUgaHV0MXU5WHBLcTAzeGpZejNRMkFLYVJXcGlmZkZjT0pENENuV0VCcXJkbldWaTQyWW1jQzRiNEFRV0FBZ0FHQkFma0tvQWV4Q0I1VCBELzRRZGJ4VXM1YlV5RXl0OXFaR2dYVTU1WFR5SHpMVTA5L2NPVk5wQ3BZSzJNdC9hOXpCNzQ3YytRa0Uvc0RBZlFjZGNUR0pKVEVkIE9YTXo3dXFrY1lSZ1k0cTYxN0pMYkpMN3lvN2x4NlUrYk9HbGpkMEgwODZiWGZJWXpNa1VwRWRpOXJkUmljdVNRT1BQVHN6Szd1eTcgbXlrM0tCY3kzeEtnVWt0SXNrOFkyY0RZMWhTbWg5SDF1aHVCaHdoV0RNVlorb0NlOHNuQmtPMENleHBLVGFJUFlINCtBQWJCeURKZyArczRENWFpdUJRM1pWdEJETjFPUWgwL0l0aWsvNXM2TERWL0RjSENaTWNMQTV4eUFDRHRUYzZhNE1pbkRic0U1OS8xQUgrcGkwSENHIFV2UVBZS3VuWFpjMVZVL0dpTUFFTzhObFZ0RmNGcXZGMlFRVDNER3gzQ1p5KzRxSHErNlVkUFp2OVRNVWMzOTQ1OXdIMzJEcEE1dHkgTGE1cVl5YlFWeG8zTzRSSmQyQlZBMC9aMHc4ZVhvdDNXUXdKOHlxMlN5SWhHWmFrQlBnVG1UazNlVVozVXE2MGF1T2NCUDdCejdmKyBscXF4S2dSRXdSQTZpTmJkOStXU1VoWkxHL3QyRkp3anhzR2puUzA3YmhOanZrckovTjRrVnh4K1Q4OVJzZGJTN2ZtUTN5dmFmc2lZIGVBeVd3d3lNa2l3bHROQWxZcXUrRUliNWdIaHpFK0g3Nzg4VEhsbUZxN05zZnQvc0VBQVAvUWVyRXJVejhicmxJNXRCSUxJWWNWSlQgUjZ4djZ2OEFVSmdtbmxJb2htRys0QkRJeHJiZS93Q0VFRFo5dEtxMWlqbEVQSDNTUWdWSVlFSGtEOGU1NmdMNlVlT1lKRmYweXVBWCBlL1FGWDIxYUltd0p1U1BFOHlRM2REVjFzZk1UNGEydHZoQVBjVUN2NTlqUGl5TTVSdWJ4Vnh1clhoQisrbno5UlAzUjRVck4wdFVnIGVpc2VjeWFlN0dzaFNiRjhrU01MMHl1UUlqVVpGdFFlK01nZmtsYnI3STFBU0FIQU9NWnlndEdXZDdTWGJEZjM3REFCK3dnanFGSVMgSjBUTmlydExudjhBQzI3cnRydDU4YjJtdC9FZnFuclFkd1YzSVB0YkNQSEdSYXlBN2ozeDJOdVQ3Y2oybStqWVdMdlROekVPMnNySiBmeHBRT2dTdWVUQjZRbmxGZFRmTUJCQ1lubUE3aUhJQjY1N2YxTll6aHdaOFYza1orcHZZS2lmL0FLRHNIWEcwRktUZDloRmxMRHNpIG1hMHJlbkxDc2hrUE5EdkN0cmFUelFZN3FJYmhwTFpkSlkvK3d6cGpNeXE5WDIrekF3WnMyRHg3dW9QZ0QrL3Brd1FhNjBNYWFZR3QgeW4zOHhTMlRKczFnSk9EUlp0d1dOOFRkSHdlbjkxRS9qYkJXL0xXSG5BZFpXVVBEakdHeWQ4TWUvbS84K0FjQllWWnBmbytaTXNHZyBvZW9lbjY1enJzeGtMYXE4S2I1S2FGNDg1UXlIdzYzN3FJZFhtS2RBc0g4bWpYaytDM25ZM1kyazJvZUFIK2ZId0d3SHlaNU84a1k1IFkrampFKzVWZjFIaGxpR1B4dE05NWQ5VXRyUlk3Sjg3VHMrNy93QXZaeDR4K2QzUHprTUFsOTJYYmdPSHFrdW10NysxU2J3azJRazEgaVNySWhlVDRYK0hYS3RacjI0c3A4eGl5T0NlaGtaazdjQUx4dFpOOGFPVEk0Uko4QS9JUDRpUDRzSFMzaDJRSE1yOE5JRjdJN2JhRSByS1FZSkVMTlJBTVZJb2R5US9oekxVTWFoR1JnNHJBSGdiR0RqRVlvcjNsV1d5Ykk4YkEvSDhIN1lENS9xczI0Yk8wcm9LbEMweGVuIFVNQ0Y2akpkVUxXclpLdUd1MDR0VHJSWktjd3VieXlQeXdZeFQ5akhlckVENjYzSUxBMzBqTVBVN0l2cjlmcFBIOGEvUWdPR0xXSUogZXBEK0E4a0xUVlIyUS84QWg5a2lWc1I2WmNGZmg3NCtWbEZmTElYNGVwRGVFT3QyRndhcnBvK0JlRVBrd3NYdG1IQ1FtLzI3OSt3WCAwQkI2aXpUQ1dVTkFnUnBrMkdSNVJsQkplMlhXVjVya1VLY25VcnVXQVFNUjBtUkl5eUpFMlR4YlRUTFZkNm4zM1pyZE44YzRCUExYIHc1c3RMS1dXdGpXMWpUOS96V1J0WVI1S3dvOFJEY3F2bHE2dWhyOWJoOVNDR1pRK0g5eTA5OHY3YzJaOHJDb0ViQUhzbXdJUDlBZ1AgWS9TMFBJRnJaaHFiVmV3bTJuendHMm5jZW44ZkVtQmZIbkk4K2p6QzJZbVRFTzhHU0RQSG5qaGdtekZCYk1zZzdSd0NIUDcrQSsvQSBHMHZtWGl1Vk1EYUduTnc3bldXTk4wai9BSUtTUGlDRU1vdkZIeW4rTnpEQWR4cmR4RE5UYmVFKzRrTkdKNHE3TVQvS0p2OEFFV3diIDl6NUJmZDNlU283R3FjT0x1bXNmbU9XU05YdDQ1UVdmR2hEWG53V2g4RG1jd21CMS9HeGdMZWUxRnVIZDlvVitjOEpkalNPZm9NK2YgMkRZRDRCYU1Rc2dZdTZGOXVKMGpzNFJFVXJMbHdSbnh6emRmSFRwUkhKTEVWazJuVkFqcHRSVUtxaVRFa04zYmU0TlZjRVdiQ1dqTCBSenl2VDlyVjh5cElKY2hrbE90NFpoUFhwams1THprTGZPTnVFelVJaHc5bjRrdjFwT01NL1BMa1psbDQzdll2YW90aDJCQlBuMm9jIHVCZ1RlN1ZTZ2FaU1hhS2swbXcvNHlUWURDWUZ5b2hTa1dSZzB4ekhGRDFDSitLZXF0cWdCMmZFWHRieU1CMG1iN1ZnQUdJRDh1b0ogL3FIQnA3WUdtVkxiVlhvZFN3MXk4aVR2SHNpak5ON0MreFJkWldoVjgwaFc0Y3dZbUxkZjJvamdhL1E0SWZjeGREakdjNGIzemdQLyBBTUFmVlVTM0tBUjVhVW0yVW5LTHRZV2NrUkVld1FGYjRtSkwzcFFzZm1DL1ZaZDhyaXVKWTZKWE5sSjlsMVloakdWWDA2V1d5bmFUIFNIYllBRnVZQVFCOC9VUUFvNHFNWWtkSkt0VXdraWUzYkVxakNPUjZ5SU5FMVdKb056VnpTUnRhT0JCbE1DVFVzdHh2UmtlbzRtL2kgS3JRSkdlNXdSaWJCRmN4bUhrczlQWEtUako1UlY1RFg2VG5PRERNZkdoaEt4VU1nR2ZJWWhiTUw0ZFZiV0NlRG1jWks3bmdEcTdlMCBmZ0lBKy9Id0hUNEhNR251MEdoRHFXQmN4dWpSY083T1AxdllOc0ZrOThUYVIwbGxGc2d0OGtoMnBDM2lmVXQ0QWRXL2N4NVE5czJPIHJrazJjNEMvVzdzREFBMkIvV295UXpOWHpMNEtJZEZhbkxCdWFOTXZoVnRPajJFUDhYU0lVNEh3TkRwOThwT0c0R0s1ck93SjlqWUQgSGtvMEM3TU9BKzZPTDlpaGUvZ04vckhkQXRnVjJ5cXlhR0hXMG13YmdOcWFmUnVTM3J5ZVV0QjNjajM0cmNPU01pMndMYXEyMS9kTCBVeW9yT0wrakJBZ1JKQmdINm91QXZ3RHdDbG1pbWt0RHFDOGU3TXN6eDcxNUdNbE4zSk53ZG81eFhHeHdiNFpoTHBsV1U3TWtJMllaIFVidWtIQkNzNC9wWDNVTzdPaUFSWGRQRVpsSVdXK0htaDhtWVVEZDFNcVRZUUE2cnEvdGp0eWV0ZE5WNFpCYkRzamduclpEbkg4VUYgdEhKdlkxRHE5WkdmNld2QjhBZ3I0QUFBMy9vOGJERm1WNlByR3hvcGhBY0h4UDB1cVpqSkRoOFZ0b1RaWit1bkJnMDloNnJ2aXR3OSBnVnMxQWJnQTF6Wkh1MFBqTXpITzZKdllBQUFCNS9nT0NxdFJYc1J5Wkdxd1dPcTRxUmxCd2hhTm5IekZtOTdwU21Mcmw4N1B6QTdJIEhmTGdXN1VzdXYyMjFKbUxNTDJ3bWMrN3ZISU9RWW9MOGY2Q25XUk1VbzRldm1pbWEzN3F3K1EyQUhQVitXZk1UekNydVJpdjlOK04gYnc2M01MOWNVRC85dkRzNVA2eXl2R0xzY2VFRkJBZmZ2QWRHWTJFa1kxS3BxRWpoT25xVk1KSDA3WTNHMDBEUXl1YVVjek5OamR4aSBQSjgxYnpMa1lodDVQSEppRDJMSkZsZ3lKUXhyTnJGbStPUlhNdlpkVzVOcUhoelcvb3VoMkV3eUZGT3d6aEdwc1ZZa0N4bGpLbXJZIDQ1aWl3NTEzTFpSNVpVeXVaUmlWWHFxeWVoMWYxSWhCVi9WbEloOEtuUlF0ZkpPZEtkL3RTOW1FbUtESmVRK0lRaXQxMFZXV2ZBSHAgRnNFMlV3WFZNTTdMTHNGbE1jZ08zRmo5Z3pKMHZPaUZNbzRVaWtVZ1FQQlZibGdGa1loRGw4Ym5WeHBxQ2lGQi9hTUtGVndoaWdLeCB4TFNZeG91WnBFRktPZkgrL1Z2SnVPem5YUUF1eFk4M3lTQ2ZERDkvSDUvUFZqZFB1cSswTk90bHF0NUxrMUJzMW9tRGRSMGRxcmgzIGJiSU9qSWF1S2lZR1dURzRJa0tuL3dDZkhhaHdqSXkyWldIcFJ4bVBweHdCNCtrRmhqaHlCZnQ2ZkJ2R2t5czFoS3JtMzlLVWMrck4gWnErTEhUblJZc0tWUTlzaUQyQWZIZ2xXRjFzdVFEZXF5MENtRGtTeThNYWFXdlU4T3U5ZW1vUUM5VUIzSC9tQXNNUnB2bVpjOXgwMCBybXBiY2oxU2dZeGF2MlVQaXZRNjVmS25pckg1NHJkd1F3NWpqWnYrRit0TjRHRE9VRXlZUDhKbzc5L1FOQjFGNERqb3VSWkZ5ajlRIFo2ZXQyM2FqUjNJTFkyMU1JcjNLSlc2YWZWdTBIQ3lMSXRSOC9KRmMxb243NHlNMVovaUFuelkya25GOCtBQWMvUDhBVFdNVWNoakUgc3dlTjlLemdMdFh1N3VKYnVmY2tPSnprN2N1M3RIUUFNeVFsc0JuOVJXRDUxc2JBTjlxMWx1QWo4Vjgzd1ZSOHc0aDBmcExZNHFmVyA1NHpZWHhCNlRlVlgzeXRQbGpGbWdDeWR5TjRaRUl4OXFBM2hTMkljbldiNFVlYk1CaE9FdkhhSStmWUg1KzZEN29JT0RISFc3RzFmIERTUTIzM3kya2kwSWQ4RDY5bG5nTlpDM3h3WDF0bGZIQlBaSENaYWg2bjN5ai84QVM4WFVBd0hhSU0zVllCQ2Y4RDRESHoralRZSnMgdWRaaExPMHk2Y0ZGWnpTU0RZRE9uVUVrTVNFS3NiK0hWZ1JIK3FiZXA3NGQyN3gzTUkxUER1MFhaZUZ4dk8rZStJUmZyOUFYMzlDeCBQYkMyOHZMcGQzUTFWaW5rcTNhZ09UVjFzYVg2OVZaRlQ5a2E2YkUwQXR1RXl0M3dPbjRMNkcxSWRvVXM4VEJsbVBsb2VjM3QyNER5IERzR2YyRFlBQ3lSTkVzN09IQ0dOWWdzVnhva3NzcXh4YWRKNTRua1RleG1XVUhDb3lwT2JBTTI0cEVtS0IzUVRIR1Zsemplb29JejkgVTJRdXRvR1Bqakp4OXRuU1lSN2NyU2h3K24yb0hXVGVXZ0J3ZjRoRUM0VnVwektiK1dMaXZoQndzaHdUekNlUVc4S2x2RC9jeXYzeSBabmplMGdHZzhCUVVIcEQ2ZndaanVZeUxsRGdiYWUyaXZRZ202Smk1R3IzaHNvVEVQTVpDeU82a05rN2dHTVcwZVA1SVR3ZkxRV2VEIGhMc1NkZ0FBUDdCdjZ3VjdZT2FlS25zbXBaV1RXOTQ2ZURvMFM4V0VIL0tnRzJoSlN1VVBnZGJoN3MrWnN6VUJjRkpxMng1NHZXZSsgQk43QmdBQiszZGczL24xaGJVZk5VR2FER3ZuTnF1V3pPSHl4N3RaQWV3ZzZiWElta2RuSHczRFN1SE1VK3dlZkhub01NWVRGcTVONSBCZHIzWTQvYkIrcjkxTk45VEltcUw2V05OTXJ2bE1oOUNmYng5VjVjZlNrZXpsRGpKdEVEMUpNKzBKaEV1eTZ6WE1tQWRjUDRaSmZjIGw1ZCtPQTU3UzErQjhyRytRYTNiOGRQbm9kUHFXa3RESlZJcDJRZWZHQXM0TkVWc2xGS3JZTElxdXlBN0tua01MVWdPRjhUbVFYd04gV1ovNzI4Zi9BSnVuMzdZSEIzUGNMNFg4bk5zYXQwQURQTVNZZ2RKaGgyd3hFZkJNcDhXNi9jT0h3dzRjY3lUaittK2VxcDQwWlY2dSBUSnZIQ2VEK2ZmZ0hnT2tiWDlzVzRMcHVqYU0wKzFXYlQwZlVVMnU1RFdNTnFjc250RmM3V0JwL3R1SFk2VFpDN0IzVVVrRCtISjgzIE81UGNuNFFKdjc4ZzhmMkEvd0JNM05JdzF4UEl3QU4vYVhjOERYRmIwbFB5TndsQ01UMWU3OHlNSDBLck9SNFJMRnRrZFBzYXgyZG0gczlZeEtZR2phVURRSDE5UGdNY1YvRG9JR2RZb1k0RTFNU1I3a01NMHMwcnUrek0wVFNTUE8wc2tqdmdyTXpTOFdCWDNHNVFyeVNTaCBvUzdKRTc3QXhUdXlBQVN6aFZIbXpsK0JYUUkrSE5QOXFrYVM3UVVPN01nYkpDYWUzaTdNbVFrUXdKNXNLQVpoRGtrTU8rUGpBdDdDIHdnZjZaVnhpeVQyVDIyQ29rQStnOEI2dkkwSzYvbXNCNi9Rc3orRjREbmNoMjNKMUlkcWluSVdob21WK2htUTlicmUvdUU0Q25ubmggazNOOEtMT1BDUWh6OHZIajdCc0Q4Z2RVVlYyVmZzS1pEWEQwTkF6ckJHM1pMdEJxcXVSenc5eUZYaXpHOVA0M0RtUStOOEQ0R2p3eCBneFhGc3pNRENHLzkvTDU5KzkzNSs3QjdZWXpYQlZkekszR2RzMkd0eEZjYXRzRnNHS2xPaWJHaXNqQVltUXc5a1RONGdudm84eG00IEhWN01UNFVrbS8zOEFmUCtBd0xUUXl5bUhQVU9VamhiS1QrMGh1UjNIalJrT1NaWjM1Tlk0bnpsd3lhYU5tbElnU045UnVZeDZVL1QgeGpJclpxcE9WNHJ4Wko4ZFREeFE5VVY4dnJhNVM2VGV0a1htQXEyelZmVlFOcjhTdGdaU1JjZ3VIWDVpbjRhSE1ocDVnNDIxK2VlSCAwWVRmRmNZOG5PYkpQYUkvc0I5KzRFdjlQTFU1TXF2dlExTG9HNWtGa1Z6QXk3bGUrTlNGUHJ4Y0RLS3l5a3dlNHJmZUI4VHlESThXIFg5cXA0WU1GcTZ3cythcTdmejU5K0FIMzdwRHJGTGc4YjdWV2lwUnEzWDFxVlcycVovQXhrTmpJQjFRRmpyNXlDSXVQbkpKbThJL2IgNkFFRU15eVZhQmd6NlNrN0FBeFFUK0lEZ1BSN1g5UjEvcDlyT3dqVmZPQTE4c0YyN3h2R2ZYdW9HSmFrcjRsb1dOTUlKNWluNnIyZSByMFA4NFQ1MEtzeWRvQy9hMUFqdGp3RStnZmlKK2ZqNEFqTnU2cVNSWmtaRlE1TmVjNnp6MDBrRS9qbUdOZFBLa245VGZjWUp0WElzIHQvZG80blYxemNTTkdGeDA3SWhBUm9EWjh5R2VOeFhhWWtibkxGZUtHd1NJQmlaQVVxeFFHcDN5WXNPdHpHZGcyUTdRVEs5cVhVWlYgYS9EcE5ERHNySXdPRFcyOERhakJOR1EyZ1lUM3ZIWXVBNy9qL2tBTmN1MkxZc1pnWk1NcW9LQnIxeXNKa2wxK3lUYS9ySXdMbFdiWSAwV2sxOWJjTk42MjRQaS9zWUZQbnFxR3MyWUxLREJtOTFjYmVBQjlCQUh6L0FJQmdFREJTUFBRcTl1bXBhcnJjdUI1dDJQemhyQXZYIFlobisvQUdhNFE3SU1PQmg4WUpsamJlMm84eFp2Sm9xK3MzbmhDU2IrZ24vQUdQb0w4ZjYzV0JJY0dPMkdyTjFEbUl5U3htRnNUZ3EgaHc5VGg0dFlXRktzYVl3QjF2dVF5cDdnNFlrQ0ZsaEE2eVRWN1Fzd1ozUjJUZjhBNzl3RkJBUDNTM0NMZ2ttWjMwVjRFU1dVYnY4QSB6QyttZ2RKWm80c2tEU0tIMnN4YWpjRmlob05pOU9zeXhTSlh0czJyWGZOMGVLSHp6ejFwUXlDVzBWbmNGWGk5SzlPSHE1TVdqcDdNIDNDZWpzUmhwdTVlVFpUZ25za3laVDdKY0ZmMVpYSkMwRHlxaEUxbFhLUEx6c251Y0FBUHYyRy83L01YSnl6VGNsWjBCdHFzYllRdUUgTnMycDZPaDJlV3VDa2JhVS9pMlFudmkzY0hBdzQrdDNoOFh6MU8zQXNyTzFzMng3SGFYNm9Qbi9BTi9XMitXUUJCOFJudUZ4cEtSVyA0MFF2bUQ1RDVoUThKQXhXUndoVldZaFF6SEpIaWV3QVozSjBiaS9nemVPK2VmOEFBYitmNk1UQzJ5YTNMUU1WSktEdjkyWDdjM2NLIDBiQ3NJZVdXMDBvdzdDdGZNUTNCd2NLM1lKbE9uaDlMZU03WDhHWnRsNFRod0hmMEUrZlBnT2pjdnVCSFY0NFY4RjVkM0RMR3lCZ2cgNTR2a1dRUDJlZ1pyV1I0M3kxTFkxa0xqZjg1cFl5SXVsN2g1STU4OUx5b05iZXFkSnJDNU5IRkkwbU9vMFBjbU5KViswdXhpTGlUdyBzMW9CN2hNZmJJbTJQZGJpdHphMkhhbHE0aDREQ2FFVTV6VndNTHoxZ3FJOEF4UDRZbnJwdW1XeTJDMEdFaXdXU1NlbjZVVW0rZFFGIC9MZFB1NjFGS2FiMDIwQzVBeGFnZFBmVTlnN1ZuaytBRU1EQ2F1aHJLenZadEozOUIvcjQvdjhBMVV1L0pHb3kxQ0NyWmI0R0dnV2kgdmdsVHg4N1VVai9NUXhkaEFrNWIrSlc2RytURU54VzFXQjhDcStkY25GNERON0I3SHY4QXNBRDI2MHo1RkY1WEQ1NmtrdXRlcS9iWiBJVjFVRFc3WTRucFM5cU1RMlQ1a3pVaGRsd2Z6aHpBaFpad3hXWk5vNHlqZmRrallBQURmdjM4K3RGU05ZNUVPM3VXenMvZG5KMkZuIG1tNHE4aGd1QnFtTm5wc1RiN09zdktMTXNHMmFTUUlEY1FkUU8zYmtWSEZrNWhTdmJXWFRncU8ySTljcmNPS0JKS0tlVXJ4U3B5T04gckd5WWpoekt2YmFsTGV6ekUvVGZNdFJoY0hnRG8vOEFuZHpTWlBjM25zbC9YM2dFSHdDRDFNV1FIamxCZVNydTdVdDM5QWZCcnVZciAxMkh5K2VXZ2pnVmRrWDF2amFmTU1rTUxHbjdET2NTZmkzbG1SN1J4dzJEdEVBdDFCQWVBU1YwV0JEbnFZZXVVMm52OEZvVzM0c1FoIDJjWVNFTThVZDdHcHQ5NGZEbWFlN1RoOEVOd0tQbnpwYk55ZkY1WmZ1d1JIQWIrQVgrUVk3K2J4OVRibzVMN2drQnF4MDM1d2FuOVMgRm15RnVnVWVobHVXVWlXTTBKN2hEY0Z1SFQ4T3dIeXVYelRmc2NQeGJRVTkwcXJyc2VFRS9qL3NFQWcxaHR5SVN1YWM1TmVJU2l0YyBjNVpXZmtWajgzeEhjU3FWZDhhS2ttaXhFZTNETEk5Q3J3elVWWXlKdXhkQWtwK0hkakdqMkVCdjNVSXlmNFFHU1dxNVVKSzVaUHVUIHNpTHVTazJDK1BEMG50eTNPYlIvbUNiTStJZmc5a045b3ZzQURnSURZRVBSYlJjanZWOWZhWkZmVmMycDFRSk1ac2NBTDVIWHEzdVMgcFd3WFk0ZGdXNGJocWNlekMrWWdxWEVvS2U4N1h6a21EQ1Zja28rd0FENER3RDkwYXBjeXdMQVg3YWpaVkQ2a0FOeWFld2xET0RnNCBMOTNVT3JnVWpSdlhLZlg1aGt4WkE3Z1FYUDhBMUlhZDVzeFpadTZDeXNITFJOLzcrUDhBOS9ZR1RWYkFQWXptclRzanF1ZHFscXBWIDFJS2JBbm1LWHRpWW15bDNtVmIyaStNbHFVL1Q0ZmpZT3lxL24wZXR2S3krZjNzMysvZ0QvZ01jZXJmNmVXMWFDSCs3Nm1IVmFlRlYgcU9MVmlWSXV3V2EyTjBNM25jc0RzcXl4RmVORnA1Wk4ySXhUTVpPL1VRSEhGbmNxZmRiRURFNGkrV0I2cG1EdjFIREQ5UldhWnRSMiBmRWV2S3VZWGkybXBYWGx1cjNKM2kyTStMK25zeDJyRDdldHdYeFBiWnpnelBQRjBaWkIvaTd6NzlidlBrRUIxYmxCZGE1REl0S1BHIFJMdG1SUlZNTWFtajI5cVBnelh6MHVFVitjb1RqRGU3M3hVWVQ4L0sxejRRUWt5c3JNdm4xQy9TRk9BelNSc09CM0hGQkFMNTlOQWogQU9CVVlldEdPcFpOblNzNlVXVDNiNUREaUJUZFFnSDRqQVpXNWkydGh4NjFPNWdoYndzclBhOTUzeXJuWkpCZ0xkUVQvUHVtK2pMRiBxQmhkQkZOUVJLUFZhYWRRVWlmWHQ1R1JEaTBIbmZUNkJiOEZEVGU0UzZVcXdjNFlVdlBVcTRpTXhORFdNRmxJQm16aVBpdnYvSDhYIDBEaGdlb1ZzWE1hdWV6VU1adHVKdHNzSVFEcDRuU2FXZVFZbTVJbFRac1podHhjVjZmdGNQbVVwdEdsa3lScDZNb2s5U1ZaWW9samYgQ21qbFlCdkt0Mk1EWHk2TDh6SjRmVTdLZ0VpVmtIblprWWEvdFN2YkFVekV1VTduZ044TUdFUFdBaG9jTmdwODVBY0lIRytESzZ1VCBXdDdTYXVlUCsvbjM1Z1B6MUJyVU5qaHArb2ROU2FjSklZaGtyMUgxRko3TzJPQUY4TFJRTmJqclVaR1JrcmRrcjZZMVZMVjk4Yk9VIEp2bFhWb3pIUE5uUG9QZ04vUG4zOGp2bE4yTUxQb1pTNERidHEwRDNKTER1R1RjRXN6S1Y5UXA1b3RTOExJVDVnZmVGOXduZitvZWsgSml6d09yeG5hdXJ1Nkp6WUY5QjgrL2RBYlFydzFMVW9ZVFcxUEpBWlVOdHJLdjFVYTBTNjNQU3BjbzlXeENKTmh1RVBqNjNnaHVFQiBWbURDZ3NXczJZRDhJRDgvL2tBZnNJcktyVFRPZTg1ek1mOEFGUlh0L1ZXZWJQbnh4MUE3U09xRUlVT3pCRXJwbnRScmxRQnRjdlBQIEMvSDQ2RlNGcVhaUHJQT1NNMENiZksxRGtvZ2RKU2EvcHlaVjRIVDNLc2FZQXRTeU8xYTI0RDBOVlBEM3c0K2NacHhYSjJaemJ3Zi8gQUlGc0hVOHQ1YlJBWUlaNjBBTnBURnltVW0rYTNtcE5QcVlmdmN2U3JrcmNlaGgwTmt1Q3lDSGF1dEtQUEhIRGpOTmxQdkRzRDRQeSBBQlVTRDNkUCsvWmx0bFBxUnpIVVpYdzJUL09ic3JtRnJVUldXMTFNN3E2dVpJSWRrQjRZZVl3YkcyMkJzZFZyTm1iV1RLQTNiem1IIG45Z3h4MkRzZFpDbmZDRytDczBDN0VoNDJMVXhoMlZSOHVXZVRTd0FYYWhBdytKN2pERHVDM0JnTDhER1lzOW0xZmpKdzNnYkIvZmogNkR6NEIwS2hReU1vbWlsK2RRRHQ2aHZhUXpTZDJjbkpEdmlNdU8wZFg3TTJsbFNSeGpsRzVFMkJ1eFRXbFoxeWFOMFBGYy9CNjNhRiBqS2RlbVo2VG9WcVdwVnJBVHBIcVVQVjRrUDhBS3RpMEs1Mit5Tzlsa1ZzbnVFejRHd2ZNclM4bW5jMmJaQW14Z0VIL0FDWU4vd0FZIDRlSHJOWE1hZTZDdjBhYkdwcjQvcWRvTWQ1V3dwdm1JeW5BUE1PU1F3NkdIMjlrZDU0NThwMVBKb3hRV0xKby9DVGQ0VkNmQWZRUUggVWJEYmNWd1lCelZKRFNkMEF4cFpBOFljQzFrU3VXYWZUeGhQTGgxdUdIaHAvRllDZUIrWTg3V0xKay91MitJT3dmMzgvd0JOcXpGTiA0Y29kZXo4MTJKV2N4dTBhWFg4T1pJbGgwMjJxOXE5RFcwOThxdUdZbVZ1dm1HbzhuZ1dyYzNsWEtjWjVzYkNiQS84QWQzM1FYOEFmIGpOUERKRXJGRjB5UlNNWlM5YXVKNG9qRkVWT0orb2piNmhqTkhjWDhhQXNjclV3c2MyWXZibVhCV1kreWVOd00wZCtObXNSUnhseXMgOERIbmZYME8yTDN1bTV6ekhNVXJtaW9ZUmhlTlFsbks4UXhVclE3MDJtdUhiY1Bxb01VT25rRU94dStGMDA3eG16SHdXc1BJVC9TdiB3QURBL3NIUVFIekt6c3NYY0VxdE1rMkJyUndKV0VIenJPRHFiSXJsUGxWS3lyKzhVUGRreDhUNWpWVWllMndhRy9pRktOQk5aT0pKIHU3TFU3Ukg3ZFBuNkQzL29QcWVqM3lMYkI1U2w1eEsyanlTMjNHUVpIeXQxNWs1NVhvc3BESDdQL0p3MkNHYzg5QVd4ak51Z3NZY0MgYjBEUDdCaHNEOTU5a0Q0YmJYTXlZNVZWZVZ0SithZXB4aE1XRmsyUkREdVlDWmNqNVpBKytQaHNpMnlPREc4VzJuM1QyVFdjYlExRyBJM0J6Zis0SDVmOEE4cWk2amxvMWpabmNaSUVBZHMvNHlPZkMxZWZJNTQrZWhqYTgvVHp0REczZGpoSVN1YStEZUhIUEYzZkZVUVN0IFZiSnRjQk9hblBXZnA1cGc1Nm1ocmk1NlhiVDg1Wjd0bjRaaDZjVjlicE56cG1tcGtnWm8reHBKU1EraFBXdVpndGYyZGloWVF4dWIgSndtR1MrZGFhelRiVHNHdWtvZWN1ZXFLL2wxc0N5a09LdVhveDU5Qno0QWJPbHkzOENOckpYemxyT05IcVVXd3IzQlQ2MGFEM3BoWiBtekxuclZsa09CUUZaUEJqczYzalN4VUxLRTBMTW45bjdraFBIdmY2cGMyNUZ0aUxQTkRySDlSSU9NSWVPUDhBaVFQRkR4dGZ2L3grIDZJMlNtNGNDbTdVdVNqUGpkcW5EVnBacVBXNEZnWVpsb1ZMRVRWZFBJT0Zic2pKY0VOd2ZBWjdpVTRNOHJIakZubS8rL2o0RFlEL2QgM3JqcC9WbzhBVjl3bFZVNEVyYWJhOVVteXQzQjhWMU5QRkxIOEZ0b0I2ZjRITVcyUlBxL0djQnNBQ2JXaWRacTVSbUdQR3lHem5QaiArd0FOL1FUL0FHSWFsVjhWc3RSU3FET05oeWlTRExNRmVzbGtMMHlyM3lXcnRIYi9BSjRZZkRDZXZtRlZTNEhWYWV6REJUUXNvendFIGRUYU9BcUszVi9CK2ZnRlJMKzVMWUVOWHl3d3V6S3JTYUJLM05XOHRIeWp6UjNJS05FczlwOWZFK3Ezd3doclgyUTRCMUlRR3Brd2UgWHloeWF5OFVtRXEzMysvZmlMcm5hdlN4NnZSckZLSnAwaW1pazFLeDhSNnFOYkt3enB6MmJnU1plNDFQREc5SENqcmoxRHhTdkpGNiBjMGtNa0tURG1TRGN3QmtpTkNwQmlDcmZIL2ZwZTJCYkRRK05DRytUNmxHcE9WVExiMm5tRXFuaWNEVjJGTmxiZVljSzMxQ09ESGNFIE9kYlZQMjFpeWY4QXFnRkUyYjdzYndZUEFJUHNmZmorNnZMRUlYY0x0bUF4dTIvSHNsL0xWd2t3NlBpR01lN0Q0TWhwOHhicXZaL0QgemtQZ2NFd3NyQ0cwTEpNR2svUndBRG4yQi96L0FFNEtyRjNna1ZaRE0zbVlDWjFCYW5EWmE2RU14Vjh1SFVvR3pTalE0RDRlTXpuayB6K2VVdUJ3TFV0OUdLSy9zamhOazhBL0lMOGcvWU9veGdJQTFlUFh0aklleUUzeWE3Y3dKVEU5U0RnVU93aGI0bjRNakpNNDRISW1BIGFqYjRGcU1FeGUxazFrSFYreUF3Qi9FQi9rZjZJTGNTaU1JK29FSnFTSjg0NU5ranRqT0s1TzJmWWxjMGVlT2FBeGRwWnc3YWJlWGUgQlRDUWIzS2JhWk51VnR0bjNKVnIrZXZ0cWFhbE5JYUljQkNQTnR6Wm9ING1uOGE3U0tuWkVNWGJCNFd0c0JneFZiSXliaE5WUjl3QSBYbVl6TEw0cms5OGRqWVJIMy9ZRDREZitxdTVqSWhKc09aUGloeVNURitORU1jMkhwQ0hGZklqUUFtRUZ1WjNVcXZjT0RuNi81d2g4IEY1UXpMSU1JN3BPLy93QkE4QjgrYXE5Z090b1ZmY0FlK0h4L2hvVHRaSEtOTk15UmQzeXFIaVhJNVBpZVlRN1VmR1FQQURnd0RoUGEgdjZvS0V4bTlwQnZmL3dCZ3dQOEFuKzJSV1lldVZ1SGxXcXlFcTk3WXFWM01BRXhqRWZIMFhmTzFtR0JiWkUrSEQ3Znd6azRlZVZiSSBaaWZQQ2JOaitMdTdyOGc0Z1BjL3NEaktNVlNVcDJXeVFaNVl4dmlGYWVQRWZ5WTlneTRDUHliNkRhVkhrTUlkRU8zVE9sZjNpS1dPIFphRm5MYmlFWlBJdjZqNHc3MkZZbHFORlMyRExTQ2o1VXFHZXpsSXZIMU9BVmV6WmtXeGhQY2FZbnNscVZYTVF6QSsxQVlGd3FVNUwgL0YvYUJuUndnVGc3OEFRdm9KOCtBeEQ3b3VTR3VhdU9iaHJtWkQ2UXlHN0NNTWpWWUhQS2JxKytkUG95RzNwN0l5T0ZWcmpBdG5HMyBnZUV4bUdYSXIxbVQ3MnV3UjRQSCtBbi9BRDRBQVcxZHF5MG1WUFZWczFuWUNOSzFNWG1Hb3hxRWFhcTR6WVRFbTFOU1Zua25NOU9mIFFsVnc1NTAyUFBlak1Id2tpeUd1MEt6OUp6MWhEQ1RpQk5BMXZNdzlQcncvYnBXOVB1U3ZYckhFVHlVTUMrV2d3NG1HclVCWnRqMmcgbTJGU0l0bFQwL2VMNER6SEFOT2dPQ0dkcmQ1dDlwZkZtcy9DaE5nOCt3YkI0QlVUTEpiUnh1bVgwOE1jeFgwMm91R2FQeHVWWUxDeCBWcnliNE9WWFd3V1NaQ2QxMFJxQjNLcFNhTlk0R21vM2ZoYXM3dFA3QUNwdW0zeUFVQTA0Tk02aEhaZVIwa3cwWWJYYlMrbTNjWVlEIEZxMlJ3OWtZREZjejJDQXFwNHdYOUdadGtTYlJ4QWVBOCtBdzZqYllPQXhkMk5WUzAzblhZK01iVS93eDQzSmtWa1lxVURxRXBHeHEgM1lJYmdudmlkQzQyRHFWdzdqRjJaWjl1MmUrZjM4QWVYL1BnRUdTVDArT1owWjFqWHdaRGYzeVVram9qd2V6ZzZuVzlYeFY2VTBPTSA5UE1RN3NocmJBKzc5YUdIRCt4cUcrY21TRFlSSnF0QmZqNkNBUGdFSStmYWt4YnZ5MzFPeUhLMEpsZnUxZzBiU2RJM1JEYXJBaUI2IFFsYWNFMnBUQkMxSmdlR0hUMS9nOEJmdW51cVRXV2hYNU1EdElKandISFlIN1lEK3dGR1pJNDNsa2ZmZHBwTERMakcxRkFNd3AzRFYgOGJjc2Z6bGx4aXVUQ1V3SUluOUlxR0tEY0Ewa1o3MFlkdFZrS1BOMzQ0NXJHanNBdE56TTZCYUJnSTFKc09OTHE4UG5YUjhNbXIwaSBlY2pGWHc3Z21NaUlIWDdKdkI4d2JRY1BiRU1XczJZajJpa3U0TStBUCtmdDNZT3JLZzlPZXNEVHpYa09yMktsRFZaS1dzWmJySXhNIFQ2bVUrVVdOWVVXdUxJSG1FOWttc2xrV0FabjBQWUFBN2NBemJCYnlUQm16ZnNBUVQ1K291UDdBZnF3Uk02dzNaOHpxNjB5MlNOdFIgajByMDVhN2hTY3d6cDhwK0x5S25KZlA0TGU5M0F0MnFuc21ENUFJVTg0dkt4aGc4WWczYkVMeC8yWHo5dkh3SFJKUmRxUTIxWDcwNiB2dFZHOFp0WTA1UTFYamEzanNMNWNrcTdsZXVXUWRkdFZvYTM4TzBBN1VCc0NBMUdNSGtWM001eUVDT3dQOVBBQU1FSG9qTFAydmdqIGJUcVZXc3RRSTE1U09BOFk0MmMybzJjZTBZOGdxd3FtQWQxeW9GbEVYZkh3c3FIY2lscjFBeUFxUlFqTEVISUtncldZdGd3bUxkSTIgcWsxK0duMlJhUlpISnpIRGdkWHlwZXBaWGh1RXd3bm1PNUs4dG5LSDRIQlQxbG1WcWJXV1o0cTQzcUhPYi9VUi9FK3djQjZmR1cwWCBCS0IzOVdsYUFWSVBsSG45ZVlBSzJueExKS0M3dUEvTVQwK3E2ZmgxWHFFM2lFQlQ0SHd5ZHYxZmg5NC9GMkNDQTJBQUFRUGJxU2prIEZjb3ByWm1MblZ0Wk5nMmRIczB4YWxZbVd5dDR0aWlRSlJiY0szV3RQZHdQa3djK0F6M2RxZCtYMWNXakl4enpkVnZ3RDZEdjRCK1EgWmhUZU5RQm0yS3hLYWVEMnBCdzFTcmEySlJ3T2RIVTVrcG9sT1ZjL2NIeERjQTlxZk1CY2ZyVDZ5czhYZWJNOWphVDU4QjRBK2c4KyBCb3hxam1wUjBEeFNiYWFqRUpJa3NjcnlPMjBiU1RiVldmRWJOV1JKbFN2YVF4cVZka1JvNnlWSThSM1ZWOXgvSC9jL25xTmtNRmZwIEZSMC9YTDVXOXRKTnRWTGhjVlB0VUpYK1k1SGw2MEh4UFgrQm1GdVk0RCs4U0gvSXpCZ3hvRnZPeDczNy9RVUhZUFBnSUROT2FsSUYgcVoyYlRiM2FJZUF5TGN0ZmRySVI0a09wUU1STlBReURndHJuR3c3QXQvQVhwODZHemJXMExLTWN0RTNzZXdleDgvc0dJQnoyM2FkbSBQWXZrVmxXcFpEM3JDenZpdE5odUFZVFd3cXVXRk9yckZ3RXd4Q2V5VWtuNGJEUUJERmxHMW8wMmordXluTWNkL2ZnT0lERmdBTGRUIG9Oa3NGbHlRTStZRW9kdHlRZGhSNjlQUEJZeHpKaFBTakE5a1c0ZUd6TUd4bmw5dEJtUmlNTDNObWVNVGJzOGIvd0NBUCtmNmtPbDAgMm1qRzdOcVpOeDVYRGErWU5JTXBtbEtJK0l1T0xkRWNhME51RklVdGl1ZlY2azZtV2JLS0tDREZJbFpJWTl1UG1PS1FFSmtjYU1tTiBXYkF1K2FDcmg0MWV1RDVtelp3MHdMVDZ1RXA2MjFCN1lXeFl1SWhLN0l3Y2xjR1JERGovQUoySkE5QnNnbVQ1UnRtOXBKdDQvTHI4IEF3NThmNlpDVldieFVGaUo3RzVJYWxuVkxrbTdZSVRibXNDRytBYW1MQ3p3ZGdUOTRyZTdGc2VIcm10QjZGNzJZTVYyZ1lNNXM3R3ogaUNBWHdEQnY0QmZQeHJZUE1BVWNiRnJSRFc5UFpsa3RHV0dQVEt2RTAvamNpOWNrVlBjRUp3TWN3WkdBUDg5Zm5xc01uK0crUzhKNSBzOEh3Q0NmZnNBR1BVazJNbHVka2xWOGZDVWt4VlNySnB3T3FqU0M5ektLSlZ1U01BZGtaYWZtclk4d3FnZWVBM0RrNzRyck94cEp1IGsvN0IrbmdHNjZERkpZVWt2UEdFc2swdW0xQzduaG9WaWZ2b2p1Vm0vd0FORVdlbGFUVU04Z2tNTWNUeHh1NkUvd0FIQVRJVGloWTQgR0orTzhVYjZYcU82QTRDbmt4V05QRzNZWlNUZktLM0FOQ25mQjRERTVRK0R6RDVaRmJtRThlbmc5UENmN01tNXRGWFBLeWNTYnMzeCBCeEFiL3NBRG9xS1ZQWDVRNURYQU5uSk4vSTdVRDdiL0FPQ24walZZdDhMQ3l1b1ZmbXpERmtRM0RHbjRLa3dQbEhyWk41b2UrRmw1IEJtOWtPYkErK0ErL2RKK3M0YW44Y0RtMDJrdXdmVmRNc2lWSERaVmdVNkhQVU84RlVNdzR2bUppbjNEdWdZd240SHE0RHJCT3owTm0gUjhVbkh0WGl2b0o1ZjJEOWVxdzlRV1hyUlhkTFduQkkwajVBbXRkSkdIcHRpd2wrQXhKNHNUcUNWWWJldjRYWlk5alduYjUrRmdoTCA4RUpEYUZyRWJjSC9BREpmcU9IZlpnWXNWNzAraGVYaGFUR1FGQldOWmJVT0duVzhRTXU5dG9ramozNVVmR1BMR0JOQ1ZxcnV5SzVTIEdNQmR4M1lWbGhhMEtITEhucVV0Q3QwZVZVOVZ2a0NZeVhCcHBTWXRJaDdtRHE2Uk1xODlMUTJod1g3VXZpaGx0UHNnZXQ0dmcvZzkgVjIrVFYzeFpzdzUzU044KzMvSDlFSG4wa3dDNlB2MjNNa1hSbGhFcTlyVG15bjJ4VzVDUXRwclJ3MitJZGYxVVljS1RUN1U3cWRsViA4RGFpR2pJMk55RTd5UndnVDZDZlA5M1FEOTBYNmp5aStHcUxVaEVpNmU2TDAxSk9xNWJodkFkV2tscGxpMk9rMXlyc1k5UGg2ZkVUIC9sbnJWY1VQaWljUWVSaXVoMCtMTm1ic1NuakhnQysvQWNBQURyN21YWVBsV1pNc3ZXUmsyUllidkRkcTlWN08wMHZGWXA2YSthaEEgSXRiY0dTR0d1QU9IVDF0VlVnQUtkRHFEOERrOThObXdtL2dBQUFBZzdBL0h3YVNYc2VPWFUyVVdQazcybjFNZzRqV2ZUOW5pM0tIZCBPSUw4RzZFZmFFanJnZ1RNa0F5N2NrVHNWRWtjY21MM1haazJJdmdZaXVwM0xzakxhSWMycGMyeUxqVDUra1ViY2FCVDloUERGU2ZEIFJJR21yNGNHT3E0YkpaRlY4d2d0cStoMXkrY1pmY0JheTdoQW51Z3NDRFVYQWRnZnVxMUFyVU9XV2owK0xQSVkyNE1wRGJhY3EvVWogWjFzUThEMm4ySW14ZStDM1ZXTDRZNUJNdFJEc0dmOEFNM044MGw2ZWlmQ2F1N1ZjK1FkL3QwLzlCWTdUcTBGMFBXR2JRZGNWd2JyRyBxaGwxMVJxM0pXYlc5VDkrR2lrYnVUcklYbkdIUkNlK3VCOWJWbnlzQjdVR3hlVUwyR25NTzEyT0tDd1lZNDc5N1J6QThJYmJabGU2IFFhSGhxTEplZW52c000V1JlZExPOHRvVnRSN2x2RGhENWdob2U0SjZPQlgvQU1xTEswVWFHWVljL2g0U2NENkVBQWNCUG45L2dDUlMgb3NtbmNURkpKSW1Qc01jVzJKMmlldlVDaDR5M0MwV1U4M3dTRjNpTW9lNGc4Y2NpbGF1U1c5cFNiNHl3Zm12UHh6UmZGeUphZmJWUCByZGZTcStOaDRnY2s3aDFSd2FCTXdXcjBpcm5uQWVZUXpGRDNZeUo2M080ZnEwQnZoT3pCYlJlU3lEMlEzaHNDL3dBQnFMZitxb3pLIDBzaEloMlF4dHRlbTdDYlZSYmJIQnFBMXZMUXdMa3ZWeUwrbjQ5MUU4T1BaSzVBcjRIQmtlU2YwYjhvbXdod0FmL3NHL2dMZFpsaUYgTXBYTXltTURhTko1UmhUc0plczZYeDd1aEZVd0NiZGpoZkZEMCtuekh3Zjg2QlI0R2N5SXZQUDk3VmQ1L3dBQUJBSHdIU1pRN2NhSSBGZ01vYXhyeUNWdkZoZzZ5Y0FMaVB3N2NsTlI5dEZIeHdaRStZeVdRSFQ1a0dldm9kalN5ZkYrVGNIU1FpVGdBcUlBQVh3SGdNWkFOIFJMSXNRUjVFYkxQS1gxRXlsZVVMQytCMm93SlN1R0xjcVRseUFGVHlRUlp5RE11bUt4Z0p1UmlNZUkzanpYTERuRnNoZG5qanB6R0QgRnFVakhBaG1OUG9FbEsxTGFlSmRrVnVTdEJzREZMR0xKcFJ3cCtyTjRUekFjZk1PQWRRRGFjY0ViaTZ1c2pQNkpSc1gzWU1INUE0QyBmUm9OUHZqVDdhR1NyNVI1a1ZiYWFoa1N5TGd6bkNuQTRFcFhwNnBiVXNFT3R1RlY3UjhKcXVraFMxY0dIbG1hTnpadUU3M3Y0Qis1IDgvSUw5c0NaUXg5b0pGNXc5MGgxTGN5dk1KTU5nSGtudGs0VnloMWtlS0dCL2JlSFcrcEJjWDNCcVEwK2xuaUdNc3hYS0xEemdidzggL2ordm4vZDVWR2wzUkZwZXdyazE2a3JqNzNOYVRZY2dQWVZiQ1REbTVPOFZ5YitTTGEyNFB1M2h6bExMN2JqM2ZHQzZ1L1pIYi9WNyB3Q0Q1OWdoajI1TmFxUnhoSlBwNTViMUplT1o1SWhHUXBhYWVWSkVFQWFWSGlpcmNqb3lVU3JqbExEcHk4dHVkd0NKbDlTQ01HUGJSIHlyUEcxNU5SU1J2YWNndkZtM2NRT2tiOFpsVmlFZHN0cXJld2c2cVlyOFNIQXBxOVl3dmg2ZkRmTm5aQ0g4Z3Z2a0V3ekUxY29NRmcgemY4QVlBQy92Lzc5MXg3UXk1Uml3dDVHa3NtcitBTml2a3cyaXdvWlE4djdvdGozQndUN1VoMXRYNjJqdG8rQWNoczVNWHRoUEh3ZyBRK2c4Qnh3My9vRTFFTnJBaDJZQmxORmhNdGtaUmhrWHJJTHpHaWhuMVhpMnhiUlZQc0NadkZWb2I0dm9sak52d0hpR3pEQ25qTms3IG8xWGlmL0VSOEFCUDlCSkN5R2hOcmY1V3p5U1N2YWJzMTJRZVQyZ1RERmkvdVFjaERyZHdaRnRiODQya045NU1US0ZDYno1dEozLzIgUGdEK3dkQ0kyUmtuZDVpOHFLN0VTVUQrQjdmdDU1K2I2dG1iWk1aQ0FSMVNoS2tHUlc5eVMvVXZIdDdVeDd2T1Y5UnF2Wmo1WHp3ayBUNkhhbllQQVQ0ekZXOXFMYWV3NHkzTGk5ako5ZnpFOURwK0gvcU5aYWVlQm9TME0zVGM5a1NYWUdnZ0VJK0FxUHdCK1lZSmdPdnRXIGx6WEpQcXVNaDV1Y05scjdKTTh4RlBNTVR5SE1LZ01JaTJ2NEhFTzBMYWd3MW16VU5YV1ZrSFZ3UTJjUGdIOCtBQWU1L3EzVjRhYjAgZGpaSFpINXN0MnBsVStFWGg2SFoybDlzbVJTalpLUFZYWDdKd053cCt0eDh3SDNBUGNrR2UzK1dKdjhBOCtQdno5d0RwVjFXaDEvcSBDc2dDWmkxdkdyZElHMXV2Y3cxVVNDeGhYY3E5dVN1VU93SmhneHZFTndROWhwOThlRnNYUnI1dWUrQktTT1BIYUkvd0YrOC8wd3ZBIDJjd2tRNytPODZSWVlZRVlXTTJ5dkpxNVhHdm0rRnFyUitrUlNKV0EvQUlBUHdQd09yS2FWOUF0SjZpUlYxMkt1bDNGZnJYTTFFMmEgRnA2SW9LOXVhbVEvcXJJWjZRV0lQMCttMGFwc1ErQkpTQnBDU1lBNTJCVElBc1pUQVJsdGhFYVR5R1dDM3MrZFVNekxhcDJnVHpZaSBKUXovQUJGYjFIL1NiQmxMZldiYlE3RUxqWndRTEdoK3RsRVVzV1VxOGxTd01hRGxKM29LQzhra1VsWkN6bFpMVDYxdHFqR1VCT3pxIDFGS29NMWtBQW5DclBITlpHdlBQSjhIOGRVWmJKT1BuOS84QTg2TzJVd2h1NHV5S2xaOG1wYzVrUGFoM2VuN2hjYllMbUl1cURUMlYgaXc2dldyc1R6RU1PUWNBZkgzeThIeXpHWXBhRlpqTzZWb3BLUDduKzd2Nzkwd3ROYS9RZDhTR1J0dVN5YmFzN1d2YWtaaHBla2hxdSBwb2NxMEpaNm0wOGZNcmZrakpESUdLNXNzLzJkaGswWW8wUFN5RE5KQVFHZndmaisvd0N3SCtxNjArcm85bGxiYWZBS2VOSlpzTWxkIDBoMnlhL2Q0WlN4cllhSXRrV0JNZkVRUGFnY2hEZ3Zsb0tTUHlabVYxZDV0OUh3dElJOEFINEJ2NTgvZ0FQejJaV2RvT1MvUnBSRHkgWC9Vc0JhcUJZYmdzT3lWYUpMN2pVTmJWWHc5b2hyZUJoRFgwK3hnSGFWVk1iWXJ0Qk1aNXZmQUIvd0ErQStnZ0FXR1VwSERCcTVrQyBQSGcyM3UrSllwVHAyWDZiVWVucWRvTElRWTZNWUpXU3FCTk5Ja3RUYVNBMVdjRGN4bXdLWWdyeklsSGJldXpKdTFzdUppdDA5a2ZBIGRlNmJuR3d0bnFBRGFOc05CSUNyRmxzb1VySkRpbUNFTjhtSjVpRVAyT0JZQUdDSFpoYXZ5WW4ydTJRNXdIWVAzOEFBS2JrdWpUSTcgZ3o5MFpkMXJqZ0doNm9aU1JZU2hwMzB6UFlHVFZDSEZ4Z1ZXbjN1aFh3dDR3d1o2QlpRSk9wK3pNYWJHdkdEcmpnODRIOEdERmd3ZiAwRjlDc3dmYWxqU0s5UXhiS01HdTdoYUltd0Zaa0gyRlc2R2ViSElvaGowNE9ZUTk0c0N0emlIeEtjdGt4ajVWK0JNNEUxRHUyLzdCIHdFL3YvdUg2ZDQ5MEpGZHV5YUtKRFVsY01kdlNGNUo1Q3MxdmdkeGdaVnE4OFpFOWJ0UmFYM3l4dVB0cHhiMnhvYUVaR2VUWU0zdjQgQUNBUGdPQTlGQnBvb2NsaVdHRGN1ZWVHQ2xlSFZ6eVNTNmdnRCtMUEpGKzdQYnNZNDEwRHpNMVJPcnp1T054NUIyb29VUlJxdTJjWSA0b3dxS3VSOEU4WFFYc2pMdWpORmpYS1ZNYlFMUlpDU1dYOFRCQmVEZ1FPb1VDTEQyZ3RtUGhoM0FlWUJxVEFlUmc2MVdZdG80eWQ5IDdSd0FQejkrd0FOZ2YwT2szKzh5cmhiK2xhaDFJd2g2ZXduTUR4Y2V3dm1NcWtlMHJoaHhCbHVCUFd4OVdVZlpkd0hsV3R5Wk5vVjkgUEl3NWhzaHg5QWZRVC9IK2pEVm93V2Zwem1XMEJ5aVNSWHJhSGt1NlBNMDl2Q1FuNmc0dERWZmZIYis3SzNNY2sreUk5YVdBQU9PRCBOVUNIdVl3NGJ0RkpCdng4K2cvdit3VlFPTW12aFNsdFdqeG9jSTFNMXBjRlhhZTA4RGtyOHRQcHM4MlUyZWNHQmtwKzFIeFByY2ZqIHp4Z2JlTjdZMFBlMkk5MkcwbkRqNzhmL0FOdm43bGxtblFDRllYaGJsWkwzWUYwalk3a3F5S0JJc2pVdUJTQ1RieGF4WlhvVEZDckUgTVpnNmJFS3RXM3VUK3BzdmFtV000amM0U1NURXNNaU1oYy9mbVcwVDdNVDdrWEtUSlEyMTlOeTdBaGpXQ2tURlhJZHNPU3ZaQkJrZiBXU3Q4Smc4TjQvZzlrRENiVFY3TjJyTnBHSC8vQUh6OXFFY3BhakpjRmIyV0gxVUxicmFGOGFTMkV4WVZ3WEIvTks0a0Nyd3lNTjhvIGRQVDVqQTRiOHZua2ZreU1WYUJuNVJPV2ljZm40QWZ3QUg4ZlliT05GYnU3Z1NUY3Eya201c3F0eVR2WkRoWkRoeVFEU044NmdtaHcgSU9FT3EwTXcrTUdGeGR3TEw1SldhTTBibXpiSWtuUEFiQnNBQS92NjlySkxJUUpsTWh1ekx0ZnpiRHdiTUZ1dlYvOEFvMnpYeERRKyBOdUZxTGJndGtKbjVRZ1ZXeUxObHRBdEdXVG1POSs1OC93QSs1QjU0WkFzMGJsMFJud0tNenJubG1WQU5XdFk0bml6ZGprVnl5TmRpIFNOMWR6dU9xeFNJMjNWbW1MSlRaZVZvWkQ1K1R3U1RMa0RsSy9aQTlOd3dpZXVFcEttOEdFTlBiSEJYc2EyRmROWkI1ampjUFQybjEgZUczNndCNE9ZVVpoYlFUWnYyVGtIL1lPQTlhZ2FldjIwY0E1cUc3R3lUSkMrVzRCekZrTmt3WEY1NFVjQ0RJbm9rTzFBNCtaNUQyVyA2elp2eVlNd1NRanNELzdDL0FIN29qZkszYk4wdVd5MjFrZjNZTnBpa3NPbGJPcjI4Rjd0SzVMeWE1Y2Zob2E0dHZpR25oMGNDd0tVIEZrWmVMOEdXUW5OamV3UHg5QlFjRC9nSjRHbmxEeW1laXo0ZFhXZFh5SEdpV0FCWkNCYVlVc1lUWE5qUTJBekRtS0VNdzRNaU9ocC8gY1VQV2JOYUhhQkczdTdLVEIvMkRZQUI4K3BWVkkyMUQrbkd6bDI4TnN6cmhRKzNQYXlQTkxtV0hDMEFZeStvdnh0T2o1QVZKd0xwSCAreTc3alRYUTRGZEwwNVI5NEMxdW1kVi9NQW1sMjBiYXRxd2srdDhsWExUQUxrdzg4UStZZmNHU3F4LzN5djdhT0lmMWRESnZKd0lhIDN3Ky9ZYkF2OCt4WDRHanpEWlE5NkxkL1R5UVFsYXJoR2lFREo2TXByWjc1ZktGdlo1aGhPWkpnK0dxb2RnS1ZIMnB4bmxETndmOEEgdjREd0I5ZjJFL1pBNG4wdlFUZ3lKRHU0V2piU2xVcWxMSDJGZkNPa0dCYWFrUGx5TGE4eUo4TjhRb2ErWVZaN0FwSEEvSnRSbjJiZSAzYXJqaURidS93REgwRStBNm9ycU0xR0dJb05EeVUyd2xzOWFCZ0tKc2dDazFla1dQRjdleWdOa09FeHdEbVZzd1AyT3kwOGZoVmF5IHpDL2NuNXNKYWdEd0hBZlkrZk5Xa2xENGluZU14czQ1THlQVzBLNHE4WCtUL3dCT2kyWW9YM2dIMmtydGQ4c0NjUndjUjdxL3dqbnAgMlVtRFh3TEpUNm1HcGtiWkVwVnNpWHAzUTVpT3c3OUsxWUpzcGtId2sva2hnd1BodFlGUDRyREprMWY4dmdnZ1Ezai9BUDBGQXdiViBtQTVobDBTVDFmWEJhRU04N05zUzBHckpIc016NVVRcHc5aFk3SHArSHh0ZzRyL1AxeW5yS3pxTUtibWQ3bzg0QVliQWduMEhZRDZUIFpHUjgxQlNPV3U5cDNaUXpSeHRUc0JxV3FucHpkSzVMSnNWa3RCOEQ4a3JjeXdHTmg0azhNZ3ppNnZqMk9DZjFCdjhBd0YrQWUvU3ggWklkcUdrUFRIcUhUZVNKTEhhWkpoYUUvSmp1N2dMVFJMUlY1aHdEOHdEbUF3OE04QVI2SGNjeG10OHB4amZjVWxKZU5nZmo5dW45LyBQZEhoTHFKWkp3LzlHUlYwYnBFZDUyQ0JFbXpScElycHNXaWRiSmJNTlMwbDJSSTJTczl5dThka2tlUFBZeERWbGxUY2ZiMWRjZmFEIFErQTczeWx4MnRGd1k1Z1JlcWU3TzZHRmtWTDI5MGx4UkRCOVBtTGRrRDdJcm1lbjJYM0k0eXIvQUpNQjJpRWRrYm54OStQOCtmdXYgcVdQb1BLcXU4cnoxWVhOR2hIa09pb2tldDZsZ1MyUjhQTzR0OGNPSHA4TjhocDlnR1BnTUNsdkNNc2xFT3M4S3JkZ2xYUEI5Ky84QSBjLzBnV3c0dE5Ed3R0c3B3ZjdtUE9EYXdtTGdWWEJJUTR2Y0pOQXZuNWdXNWx3QnlDR0NnTDdhOElieVRROXNScXJDaE9jTDc4d1B3IEQ5L1lCc3dEMHYxTHFBenJhS0RaSktyNWpiRU1XY05WM2VHK0hsK0srUGpnbnNkYjJSNC81MjRLZkpGa1lMZmJNOEk3SlA4QVQrSUEgL3NCL3JLME1lcFRFTHR1WnQ1ZHZzZE9GdGRNeWpiMDN4dUZJVHU5bVFBUWRQRTd3czRkN3pRcWdZeFBHOGI0WXlPa2NzdDNSSVZpaCBISkJOOXJ5ZEtMeXp4Z0RtcTluUDdVeDJvU2Q2ZmFnTlRyekpYTmpTMWVMYVkrWXRtSzNtUGxvY3F0cW43TGVJVHlNVjhkUW93NTlKIEI3K0EvUUI0QURtS2EzaHB6b2QzbnV3VG5tY0V3YUdTR0hzMlpZd3RzbEZJWHpBN0loekU5UGgxeUFRSUNyKzZDM244MkJIYThMZFEgVCt3SUlEZndGMGpCUmdZN0FocmthaUJwS3ViQzA4WVdCUTlFVSt3aGhZdlRnaHZoZ2d5ZDdKamhEd01lMm9CRStZVHZMZ1pNbDdndyBuQWZQL3dDV09BSEllQTlYMWVZQW9jTTJTU01HU25CelUrV0RXUmh5QTFQVW90OG5tRnVHdDNaancrdVFOUDhBejJUalBBMW5ZLzhBIHA0QUJ2L0FlajNGRWlpUVBKdHVqcTBhNUkxR2lGZXhkOFdjZUQ4YzhXMGUxVzIxUEpuVU8zTEZqdHl5Ujh4U291MlRoWklhVElHamkgRUROWHM0TGJEeFRHeXg2ckdHaGtwY0U3Q25yL0FNeDhpbGxjcHlCYk04d3NnUEFoL1BZSUFQdG53UGpJd0hpYjJNL3dFLzhBNWIvRyA1bGtUSEsxS1phQ2lUR1BJYVN5S2JUTkphbUN5Y3I2YzNjWEttRVE5MlRHUjgzQndWYTByOThSMFBhMWVyMmFzM2cxaHZuZ1BvTy9nIE9ua1BCMmUwR0hCY3pYWUpuZDFFRDh3QVUvNWdzV3cxS3J6QjhNT3RsdzVqN3hVdjFXazFrWVU0TjdHKzF4enovZ01lUWRWMUZ3NmIgVjZ2czR6bFhsZjJTZXNsa3JMaE5oQjJKa1Y5TDloTEJSa1lBNzZ0bDVpZVBoL0FQNmVjRExNVEZvWk5aTzQ0T3h6Z0g5UDcvQUxBNSBnc2l5cWpvanlwZ3FwUFYyQVNTZHZrZ2tVS0YzNUhTbzMrbmwwMDBnM0VnZk1tOEs1WGdtbTkxZjdWNE45U1IyaS80cGJZenExMFIxIDcyOXFxOG41ZXE4bFFJYXpmbElZbG9URU5nc2R3VDZyWTdJd21BMU5nN2NMZG1QT0hHV2JHcnNFa0hVUUFBQS9WZlBnSWR3VDJ3QysgSisvV1FTaGxFNGxMYUtCc2dnN2gwMCtKVFdpR3dMY01QalpFTWd5Y1MrQXE0N1lVS00zdWs4MzM4QnY0QS92L0FFU1ZOZmxRVjdTOSAyR2JMZkJyaGZ1ZFYxWlZQcDFwOWZTV1FDQmlBWEtIdzk4WkE4d3dQc2hxUTNEVFM4QjFtelVOOFpzUVpzR2J3dzRDdmdRRis4QjY2IDlUR1phajVSOWUyTXIxam9uVHcxd1ZkWjFQM3hSdEQ4a1BIcGNXcjA5ZnRSazFPVEZ1RXdZVHA3Z0E0Mno4bnVUOWZDSE5ndDdud0EgQUFQOUwwY2lpWXE2ZjNtTXZFWjVVaUpiY2kwOG9aWkpab2QzSE1xUW83ZTBrak1VM1VSdWdFcVM3VjdNeFdKY0w4a1IzazFScFoyMSByc3R2T1hBaHVFZXdTQ3F1RkhCdHM2ZmtzZ210OW5rTzRlcjdRaVh5VW1jUHFzdzRJYTJ3SjZycUhIejNnT1RHUG4yWkhOTzNnUDhBIFlMOXY1OSsxUG1MYms0UGxTcTlNa21VeUhqRm5naytQRU45cEZ6WVVPbTZUL25LM2htR1AzVlZKZ1VaeTRNczBZVUdXWThKRm9wUEEgUUw4QVBua0FBd0gwMGZUM0JEaUh0UmliWVVhWnhWLzdQTGQ4Y3NxdE5jcGRvWEloc0RHeVZXWUVXcXdRNTIzbmthMUVZbi9UT3lWYyBFUjBFK2c3QWZBUHo4QWJMaFJtbXNEWGEyZE02aEZ0YjFTdFYrMndrR05LNWhzdXkrRUtob3ROb1pHRTNtQzVudUErMkszT09DT25MIFBBM3ZreDFLZFhaNFh3Q0Z2NitCWDlnTnBZbWRjZFE3emFoMFNUQ3RSdTVEMVNiS2JXZEtBTGU4ZjF5dFVrakJVUm9FaG9ScWlsYWogTllxVDNYamp3YUYyZUIwanFyTUVMUUJ0VlhuczUyZHArUU4zQ2pjbGZzSmtsRkdHVmJUZzRUTHNEdUNmWkZnTWlxQkhIdmhzNnh6dyBZTTgzZGlPQXhQN0FmUG4rdU02TG1WcGxrb3NESmt3eUEwM1p0ZmtzNWdMUTkrcjJ4a01PUWZHVHVwVmEzdkVGOFQrS3cvcTZ1c2pOIDc5LzZCZmovQU9tUFdtWlIrV0dJWjBvVzd5VDBETzJteUR6SnhPWWh5bDV5Y2x0ZkR1QWQ4VHc5Z1RBYUd3d0hqRGd6UTBiWURONzUgKy9nUGYzMkNIa1RCWjYzSzlQTGdCSnIweXFyZ2xISkxiUkVoeFJlMXlrNzRmZFNHK2N3VCtXcjc1TzJ3WjlHL3pOZy9mLzU4MkxCUyBvVUhSc0FxbXo3elcyaDRQdjdxSThZOGdrbm9WaWpEeEdSY05RamlSMnNzVmpRRE5xQUYxa09MNXZwblZRd0ZESlJ2SGk4OGtuSGcrIDB0Q1RWWTlJL2lNbFdGZDI4TUNHSHRTbjlNUWV2ekU3YjBPdVU5NVdia2FLejJNMmt1eU9BK2dyKy84QVVZbHZBaG8wOE9DNW1RMzYgMm1mOFVCbHpPazRHRTdUN01xWVVudjdKQzB4dmtTNEhGd25UeDRFMzdyTk5xd3dsaUZ4eHhBQVFHT0FEQUFBeFZqSTIwM1h5L0RLQSBWVy9pVlhEVktXSE1CeDhTdDR2eTlRVFFudUV4a1F3N0lZWURFRUNuVm8xQmlmS0VQbktPYmRnbS92eUQvcTc3NFh2dzFSNWV1dTB3IDl4d05GRkJBcUhwcXY2bkQ0elROWlRKTllWOEJya00vMlBkaUhha3hqWDhBYUN2M1MwcDZ5anE1UjNyTTNnRXE4SGpqc0I3Rmd4eDYgQXl3aVFGTk5hUitxdW9FR3ovSFh1VFVTUVp5U0Z1K1JIYXNWeVJlQ3hNbExDMzFXNGFqaTVPNEk0RSs2N1gyWlZRSGZrUmExejU1VSB1WUJuKzFkR0tUaGlCY2tsdEwyQXRqV0N2VThvNUNZdG9HRjRQVmFjWVQ3VVg0YndldkNmT21EUGRYSnZPeUpKc0dnOW9uNStBWDUxIFp6Vkpja2Q4bVcxYlFvYTZ2akhVcHZCZnJHR3J4SEN1YTVYcWxxL2J6QWNPeVUrWEh3Mm9Dd1BpckRlWGxES2VjODJjUGdINC9zSDAgRHJTanh3OUdXalRMbG01emFoeGNrSHFFTTFKRFg1YTJoQVphYTBJYStuaDFzT1k3WHpKMXRKNzVPVzd5ck5YVjl6cXZzbTdBMEUrQSB0MUEzL2Y4QXB3UEZOMlFtdkY1QldoYkcxS21Ia0FxcnZsZTEvWVJnOS9Ybkh2aHArRU16OHc0MnNFQlZaSGxtRjhtSitFTm5MZFlEICtHLzdCMUZSV256WnR5SFpDeGlhV3ZUbkkza1U0SHp0eDJmMEJRNmhabzQyVEI0bkUwckZXRll5THQ3Ymp6ZUZ0WTR2SVdSWFNCRjMgQURuM1JVcHFnZzhhdlNiSXQxa1lwazlHWHEzZkQwVFV2WE16NGZiZDhNVW1QTWN1SDJYYWdjWndOWEo0QTk3NXcvY2ZmdnZ3RG9iMCA5MlEwUGw0TGVhQm9HOVhEVWpNZHJDMC81Tk0wdXZUTlBvRjNQT2NNaE11QlBaTFVtT0V3SFMxWDFwcy9mTEZYMU02ZW5qQjI4L3YvIEFJQUNBMkJrTmhSa3JsUHRyWnJnVzRSNlovRExxUXFWMnE5SXJkWFBkN3VYdUQ0NFZ1bjN4Q0lPRUZTWUo2T1lSYk1hRmY4QUtmOEEgZndHTDlqc0hBVDhDbHRENFV0eVpxbHFWd3ZVd3hoMGl3clF0UU9IYkRGalBoWjdpcmJCTW1HR1J3bVhBaDJNUXIvWThlTXRIR2Q4eCBwUUo0QUF2NysvYkIxbk1HNUZHR0xsNUVNS1RaWWZVNHl1bTFOSUEyRzdHSXBVYW53M0hTbTl6TkJWWnl0MjdQTEtZMUFXT0YxaGVXIE5rVzIvd0NXNnNMRjJwc1kwYmNVRm5VUzA1MTNRN1d0clRncnZDVGZMZ2l0U2xxaHZqVUpVRjBLcjZDQXFPWmNJWnBFMFhlS3drTjIgVmhkODZ6Q0FleDgwZk1ZbllUUGhsRHpFMXk4Y0djdG5YbFY2MTFDc3llek5RSFIwcDZnNWtxd3JYeVc5ekZCYXl1eWVOYy9SYXJybSBtMXRtZkRBNXVJRmplUi9qeGprY3BJTGY0all0bjE1KzljZkRNYnZYSWtaMFkwNmdBRFZUQUNnQnh3Qmgvd0Rybi9mOGN3dHFRYWJSIHdnZzhqOEhzc1hYNjgxK2Z4MDdGZTFLVHRCTE1FS3ZQYWg2Wnl0Tjl0TytvQmtEdUduQmIxR1Z6VGoyK1RLZlQ4WENxMEtxKzIrL0UgRU9xMXNvVEZ2bXFzbWNxNEp3aGdBSDBFL3dBKzM5QnNXMld4SXArekxDRjFWYlVtazBoa1VrZ2ZNWksvc083YlFpM0dCaWg2dnA5OCB2aXRneGdoRFZRTmYyV3F6RmttMFZmMnplTFJDQktyZm42b1g3NkRzR0N4SHlNeXFoalUwVHlTVFZhdldBUmVYMlJxVjY5aDZncXZTIExHdEJidEJ3cmRiaDFYTUlNaU8rYWY4QVV0eHRteEYyZ3NzM2E1Sk5uUDMvQUdCQkFZcjdJcWRMMU1UNGFmbzh1NTJRTElkM0M3Q3kgTzR6QjVZT2R0Q25OUmdIQ3Y5NFczMmJpd2ZCZ1YrK0tySXMxbXJ0R25xelA3RnovQUdCQmZ1Zlk5TkVXRGYzaVJHUWFtTjQzUVJEWiA4N1JZUnhSZ3h3OTJVakVtbUZLS05xVjVDanRFK0RycGxVSVlSTHUrcEJGU3NkUFBqSU4zSkk2WGNJSXk3YkNsZkpDdTdpK1pXRFdNIGExTExKRWkxZ1hZbjVEWVlUUU9KUm9tRHZtWTF2VlpnaERCcVJIbFMzNHUwR1pHOXplR0o4K0EzL2Y4QXB3QTh5bDRxZnFvb3pWZVMgYlR4bm0xc0wrbnRKRGlROWNubDRvNVRIQ0dZVzluRHNDM0JVdk9WV0w1UnVZenRkc213ZnYrLzhCd3JxY09RN0dwZXZXaGNkcWxBbiBnUVJocTlrcDk0bHNpdWVweDhQS0RoU2NTdDRjemg2MmNxWGxzRk9aZnhlek14d0ord1B3RFlIN2tEOTFQYmhIRFYzY0VBTlp6L255IG1xcmkxa1ZYWHNoVHVDeGxkM2l4UTQ2SDJmVzNBT1BNUVlFOXRWWEN6Qm41eVJ0a3E1MjQvd0M1OC9oNThBbUhUcVk2M0pzL3FaR1YgOXoyU1F5dEZKRXlsZStOcVJuRnBsd1B0c3ZmVXNvWWxFWGNoVm5oUVkzSEtmU2N2emQwOURIam5ucUJyK2pualVPd3ArbjBYa0lEZyBHWkJyeFpCaTFMb2JQbFJWNVh0QlBIcDVod013N1RUKzZrRG5oempJeXJ4ZmJQOEFyYllOZ2ZqNkQwbVdCVHZTMEV1c1JsbDJwM2dTIEVsYlUyQ3NXUXdXaDJOYUM4MEs4TWhNRGgvdmcvbkRhbjB0aFc5bWJwZ2pFemdQem5BZmZ6L1RyWk5LaTNkMHhEdFhUUW4yUUhGcDkgSjJFNFdva2tDeGdDZWQ1UUdHd1RMc1EwOFBpUTlxelQ2MG5CMFlZcjg1Wi9OdTJCL2dJRHdIbjJISWZKams0QWJCbnV3UmtsRFdSSSByYmhSQ3ZKbGNnV0hTcUxUMThQTTQydG1YQmthbEswT0t6SGtuenpreU9FU2NBZS9uei9BVC9UMGVXVGIxQ01qb0VsZFhkOXFlUEhhIHNEVDArZWZIOVZjY1I3c3VNYkxHZDNNNFRIQ3VCSkJxYUJCL3daYlgvYmMvZGRCK1kwSGJCS1UvUGdhZFBtQlZ2UzdFcDlicjFmU04gcVYwaEVUWVRBK1UvZGt4RFd4L3pyTFQvQUp6NE1zeG9hQm4zYm0yQi93RFlQMUFkYmJJZUtycSswTkxzL1MrNzJRZWZEQ2tXajJwZSBWa1JMSXgwK3FkOFNnNmVZaG1LM1R6SHpGWCtSVlVObVJpbUN5cytFOEJ2L0FENCtlMkRwaG85a0dMQmhvZE4xeW55VnVWVXRrWEhaIEJKdzNZeFNNcUlteXVQc2dnd2hzbklGdDRuOHRPTWhOSDl1VEE5N2RnZXdJT0dBQUF3SDhhNnNtRlh0REFTcXFWWVNTTmFQak83d0ggaU9IdzVRRklhSlJnZ3lPQzNEaHpGOHhZejQ0TnJYdGhRWnRteC9kK2VuK2ZmdjREcUVZa2laTGgwcVJySno3OHZhZkhhQmdiOTNuOSBkTmtYTXFzSnltbmVSNHo0MjYyOGhYT1JOaWphMVYxK0xJcjdSWmp1REEyVzVYTjJmcUM4bHV3bDl3c0p3cjI5MmphYkd0QlBxL3Z4IFc1aERyZGdoemtOUGZKekpXVkd0Rm9MS3pSM050OFgzNUJmZ0g5L1VoeU95R1dnRFZSUkVHdUZxekcxVGFTVlNwNjlEc1lDSmxBUS8gSk9IMlFucDQ5N3NheWwvR25YeXNoZ3Z0bVQzdDJkMGYyUDhBbndBQkJQenkzVmNoeUhwL1BMT2xQamJrb0FsR3ppVFJMMzdFU0JReiBIR3pQZFNHaGtBODQ4dnFXem8zQThSbXgvd0NsZlB0Z1FlZmRLcHdwNEhUYnBuR2Y4WnRHMFBXTk9XdzhKTlBoK2VLOWpLZGpja1grIFNPRlYyUVlJQis1WTg5K3JNTFF4ak5WWnYrZ2VmSUxCKy9uMUxFeGpacmhFaGRwWTBoOEdUc1ZHWnIvb3hyR2c0N3padGZIUlNTcVcgN085QjdYOFplTDdlYXIvVS93RG5xd0RJUWJLZ3pNa1hjaXJaRmVpeWY0ditXcnhEQUVXMldnVkRrT1lXcERtcmkrWVIxSzhLSDVoNSBSb3N6OFhZOXE3ZFFYNzkvMzgrTlI3b2oxQVFNR2NvdzdLcmRaRmJpZTdRMHd3MVhhQXRlVGJHVzErdDF1K0psUHNqQk1PVkxYMCtjIFlHZUs4NGtwTHNjQVArRDhnZ0QvQUVTS2RtTmxRVElZdVZjQkoyMDBuaVFsSEEyRTBYRTRPZFhpZFJqa2hqMXUrSENrMlI4WDBNNVUgcER1b1laeWYzbWpUcVQ0TStBeHhBYyszOCtzY3l0NmpYT1lZWlZQMWRrc2FTdHhHak9zNE9rQnhjWDdRSHNCOFVEQ2VZUXg4T0NlWCAzMUhyZjc1Mnkzd0k3ZmZnQURnSjhBd0lKOTBra1FpRE1YajJrMDlTWjd1OEovcHJuZ2tVQ1JNdC92UklKcTIweWRjbDZvYWFlYWVMIFJRUkpMcVpOU1kxaEcxREd6eFF2SWl5YjBxUnZuZ3dVdExIdDl4RzVkQm5MYlFITTJCcXVzdDMxTHBOa1dyblA0bXdFbUhaQWg4QTIgZ2tBYWJaQjlKb1NGVDRjd1BXd2JiYUYwd25Dek4wcTlaZVhpcmppVC9YMy9BT21sa01BOVh3K2s2UnQvSnE2dUxlaHNrdXQ5NDVEVCA5WHB0eHZrVjhzRDVsa1RXV3Q4V000MmtPSzdZTUY4NUpnemJzYjluNUJQK2Y2R3dIOFBlYXl3N1FvMGJXK0pTc2RQQzlxd0EyMVlDIFFIQUZGUDRvZGY4QTJmWjZmVCs1ZGdYeFkwd3BXU0dyaXlaejMyTS92NEFCMWlQVDRjTnAvd0JKZW9Jelhxa3FhUnRTdGtjZ0QwbmIgRFlZMUxkMkx1RjF2WUg1SXV6VGVocjhNNEI1NVhLZnptcjFlczNvNEVDRy9Qc0d3YitnMUZoa1dXRFlUVnh5N2FUbHBvQWRQdHlUWSA2WVp3dm96THVTMzlNdFJ5R0hjM0RpM3BtM3ZwdFNzcjZReG9ab3NZcGR1ZUtaRndyQmxsaGFTTjgrNndyZG1QazMwMm1Sb3NUUTlEIDFJYUxhV0ExTFliYmRrYW5FZHFzNGV3cDlvY3NLUlpuRzdVRDd4RDRIQlVoejRxaHlheXJVUFpnelpLVE5tejc4Z1c2QThBQTZhalIgWDh4b2VGdXVXbFZYRSt5NkhTYnVzaTFFK3AwaXErNDJudXIzeHdZR1JrVDJSUFd5RGdEYlU5RGd6RVlZaGkrY3ZEdDJ1MzgvOWZQOSBVL01SMlJ0ekR0dEpDM0pBd0s5a3BFY3c3SjViaHNWaVYxZUdQcmVuME5raGgyQXhWZk1JQ05NSmpHbDgvWkRac0cvZTU4K0F3K3ZtIDBQc21ydUNxQlNHUzBxM1NEMVNyeEFFU1gyd3lmdEM3dFZWTkdONGZERGc0VGZCOHdzbzVEck1ZVXE5bVdlRTdJY0FiQitoL3ordmIgVU5JWWxTSHkwZ1JQNUpJWXROR3pua1ZuVmdjNEMxdHJ2cENTTVNTeHVxQytCVWE5MGFjRG5ia1ZIcytjY2FGMkNSYnpCYWxNckdLNyAzQWJyMWNHMXhNcjRsRGo4bEtQbjN6OGJkazNGUG1mTU9UNlA3eEdDV1BLUDEra25OZ0FjK0FmdjY5S0krWkZrR0dqaDlicE5JcmFTIDIwZGttS2ZMVExrcVdaWXdHR3ZodzlrR0VOd0lHSng3bHFyaU1abndwd2JtMVhZNDRnRDZEejRCdjRDeFR3UUthTGRSRkF4U2xoVmQgcWhzR1pUZGhXQUhxdFhYa01vNVJDbGpRMDljc2hFdUN5REk1OE9OeEE4anA0eDUrOGpBWnMyYkIrQXg4QnNCK0hqdmo1ZDBPNWtPdCBLVEduaFY1RGJEMUVOVEtueEVOV2l4SlQ0SEgycDNJbU1uY0Nub05sdUduaXErRE0xWG9ieTgxVWtoT2NIMEczUUhQZ0FESHBaL2tqIGtYdVNUYXhPVXFFN2xnL3h5UjNqUVBkZDN3Rm81TWpabldWWkRjelBuSnhXSU5GUlh6N1c1NC9OZm1CcitRSHJTWUhsSGx1eUVNcFggcnNXWHlSNVhFaCtHbHY1TndtSjh5WVloODhlSHh3UGZNSjFCVjVUYzZQQ0pKczRmQVAyQy9pL0FEL1hIYkNkY2prdDAvUTdrU3BQTyBESWcxaGFBNDBqWHBtSzBDWHhvbUw0Y3dIY0h5RzRCL244dFZWc21qVmVWUmhod0liL1lEL3dCK3dYejRBUHk3MFMxeGZoODNaRFNHIG0ySDI5K0dCTU1NdzlLWVUxWDNBT3Rodzh3d25tRWJjRkk0dUl6eTBibThuSFpKNXovWDc4L0g5L1B5UmdVamxBOW5TbWgyU1R5NW4gUm5nZytLcEJoY0pMbFEzTWx0dy9uRTlraHNBZXhwNitCUjVpeXNib01HZnNaejNZQUQ5eUQ5VkpGRk5xQnFKZjZFckdOUFBxYkxRRiA4djhBNlU4aTQ0L2NUZkZHTk5JdWptMGtjYUNHVkVqZFVHRnhpV0tiRStiRzVER3dQR0lVam5Ld0hvK24vU2ZiVFpFb2NvSEc1ejR0IGttRU9Temg3dlc1UnAzNnVmNnc1Sk1aWERuQUc4S3pxdGJKakJkWDdaN094dndDQ2YrZ256L1RPUngraytncmdTWXJrN2Y0SVlhL3QgaS9hbW9yVFBTTzFpKzB0b0ovTUZ0RDRlSFQ0WU44VDN3SE1Kck5vSWp5aldvay8rUDFGamdmd1ByOUZYeVJRZEJYWUJQQmlUL3FjVCBJZW5pdlNHU0hWNGpJQmlscFI0TzRRL3VCZ092dzJybUZhVFRDS1RGOTN4aU9iZHF1Qm4vQU8vbndIdGQ2cUdBWFlOWnFvdXBheGpPIDFhTlZrYmhuV292MmJjRnlIaXptVVpIQ1lIcCs0SHdPd0liVnBhWHdQazNrcUxXWG52WmFJVGo1L1lOZ1A5b3V0VWtqbG1ScDBrU1IgSTNZUmR1M2VWTEViYmF2bkkwMmRMd3VQT2RJMkRBN1NacGhuRklOeE8rU0dKY2gyWlZtVytQQi94V0t1MllEcTg4K2FkVEw0cWphbCBwc2t0MGlqdmx6U0lrT3hqeW5YTmpJYzlicmUxTFRNQng4T2RaZGdiSE1KNEZGY1lqZytFbTkvUVFIUGo2RGJyOEFnYW5xT3E5T2VwIFFiU3lha2t0WUN1U0pXRU8wOXA4ZTJBL0E3Tml1VnFEMXVuekVUamRnVnYybGNIeXVYemt4UVh0bXlZZnFmOEFQN0IwL1NPWm81VFEgbXBSV1o1bW9heU5UV2MzMWxXK211dlhGZW1nVTFUOVBJd0RoZ3lQVEl0NFRKc0RGOEljM1JtakI2UnQ2Q09xT3dZdndEbjUvRERxdSBGdUI2ZnFwTGR1T2dlTm1RN3Y4QXppZTRNRXhvRjdXZU1NQ2Y4eFBoaHQ0ZU1VOVNya01UV2QwOTNqWkRld1llMzM3Z0FDMVpYeW9NIE1YWkN4WENRWTF5ajIyTi9jS1BnYzlVSThHZ2RlelR5eVpxWXByQ2J3V3dSZ01xeEJCc1hiY0N1Yng1Y3lhVU9XRlZWK3VHbmhPdC8gbjlzZHpyZ2NNV1E5VjY2ZTJmamNQVEdIbVZ2UG1OVGF2bitTYzVwdTBOendONzJqbi9vSi9nUG42ZEE3TUZ0c1BPREpwZzJ5QzNZSyBKam1NNGdrUTdRdENwM0tLeVhCdkZKR0U4d1FxdXF6eWVlYXpDeVRLRk1TWnpaRFp6M0FIL2Z3UFJVRGJDRVN5Rld3YzJ5UDhBOFlyIGRUa0tzTm9pVEdnQzJXTUJNTUlmNGJJb0o3Qk00aVFzdEg0MFRGN3B2bTltem5BVC9BVUUvaDArR1NSZERsVWR0TzY0NEVrbHlscVYgOGg3NHNJZXdoeFZYMkVMY2pCQzFJZFZwOVBoeUV6NS9MUWUyVkFVb2NZcy9kdkF2d0IrUDlSVzJrR0lzeU9pUm9lMUZ1OGk4dE5qNSBGRERtanlENU9SVWRvYldraGhmSWc1TzJHR09FZExsZk45NHhvV1RmQmVZMHI2cktDM2pUSTdoMUpxemJVVXE5a01pSFU3dlVGUzFLIGtQamtoMkJXOWJ6UzdnNFlMYzRGcVErQ3RsQ1l2YzFuaEpzSWpuei9BSURmK2ZkVTZvZU9IY2loNUR1bHFiZUJ2aTA3bUs5cjFmbGggd01vdGQrenA4eUd0M3dId0h1SCsrRS9GNVYwUGsyeVdpN2d3QURZQUFBK2Y5dXlzM1N1OG94YzEwbmp6SmFtb0tZU1lWZFBwK3B4TSB6Rk4rTFRkVmtLMzVnNFdReU1CaTR0UEEvVHhWYjRNKzBMUEJ3aVNrbzU4QjREd0dIVE9qaGw5M1pLOUZwaklPZkNrd0pMVDdPVHpJIG5oc3FKWTEzOFBaSmdjTytNaS9EQm5rNVNuQjlQVE5WNzQ4NzVzaHZuK0FEL3Z3QzR6S0ZDUzRGNUNHWm8wMmthUVZteW96R09QT3ggWWtuWGtjRnFOQUZqSmVWR2RzY1ZDTTJiN2ZHMmthMHQ0ZDJSNHNrY0N1V29uMlEwUUt2ckhLVjMxdHV3cE1xNWdZYkNBNFZrNE9WUyA2V2hkU3pDQzI0VnZNVDF0Z0QyTkFyK2YvVXo0cnJPQU1Jay9mdGcvZnovSUY2cmxCYlE4ZktBcExKY0dhNFJ1NUZQc2xiaVRDSTBGIG5LVWhrRStHaGh3OE54ZkRnSWVodkcyRXhiUTg3NXpiWXdHd1lnVUh6NkN3bHV0N0FzZlQzV0xIbFUrUzdjTlZ4MTdWNlRrMGZiQWEgTGNiREZzWjljTzZpZmRsYjhnV3dkMC9hdkppOEdkRkJtMG53RDhBZnVBK0E2Q1hTczQ5ZkhPMzJTeURUR1ZXNkFrR0tmczVvckhuZyB1MkVQZUNFUDRiaDh3ZVlybStGNDg4T0RNc3E1UlkyTTV2WncrQUFIL29MOGY2VkRDcGQ4UWliYVo5aUVaVVZGRXF6eEg4Z3h5U1ZaIEJBN2JjZTljejc1MGpkajVxdkF5YktWdm5tU1IvTnFGdHNyRmFkekVNemNtbnVWVXI1VXJKRmJ5VVNRMUxaaXZWc29DTEhsZitjRGggMCtIQ0lUQWR0TURhRG00REt2S2NsUjdSMlR6L0FPdmFJL2oxU2ZNSWFmNmJzdzlWUXVaak11bERRTDVrV0ZWWWRzRGdaVVN4Z01PdyBBOE9IYWpKTVgyUzFKNURUVEJXeGpNcnE2TU10VEEyY3hBZmwxK1FRSDJDMTBOa3BkanNDd3cxbDNsSkpXL0Q0OFlxVXdyc08xNDJhICtQamdRbUxZZXlPTjhENGx3SUdIUmtZcHdZWWpoRWtJajkzZGcvcjdEcnlTdHloODFjZUR6bFplZEdXM3l2WDl0a05VTm8vMm01QWIgSTQySGh2aGh3SVRLNW51TTlxWkVaWmZQczNDY1AzLy9BS0g4T3JnTFR0T0k4MC9pWHZpbGp6a1lOdGhOeFk4a2t4WXBJdCtEYURpdyBuclR4d3NVU1JKTThHV1d5Y05zdGtNT1BjQU9UeFk2OWFkSm4vRmMwOGFkRSt3VTlEZmRjTkcray9ialE3Tk5jcU5lNk56NllEWmk0IGRaSGZGVUREcXJqRzBpQ0hyWVZjRFpjdGdqN2xuemhVN056dlY2Y1BYNk1uS3pxbTFoSFF0ZkZSaWZPWTZYUXA0Z0RCelp5dDZMVGIgbEJPaXlUT2RNUDhBcUwxYktWWFdTcE9WYk4vb0sraHpYMnBRTEhGTDBTV0VtcXJKVDFCRmVEQ2haMW5rMG11THNVMThLSVdPS2JPbCBiRmJGTGxzaTZCb0doZkhBdmhzZXF4UkZ3dkZGRjVlYUFGKzNwcTZlREZpNm9OVzl0VmhxdVc2a29qdUZwNWxWOEJ6ZE9GYVE1TmNxIFpNL0RJUGNTcTRZaERQdUlTcHJSdWczQ3haM3hDdDhYdmVPS1B2d0VEaGhpZkE5Y2RSbExFelV2VDNVdThYSFFOUzkvcXkxQVoxWU0gRXBib2NYWHJrbWgxOVBjTGhRN1VyY2VYdUxiOFlMSnVlNkkyK0pJUTNodjc5c0cvbndIVHNoNmc2enRwTHM2dEczT1c2clEycTJsUCBVUXlaTzB1RFJUZW5zV2h3OEdUNGRicDh3Z0hzYXRHRGc0amsyQlFtVHdOdTMrZFJjQkFiL2owa3loQndWM0JWZHdPbnRiR2hzNWJ3IHNoMlZFOTNNUkQxT0NudnVnNFEwK3lFTnd1QXhCZ0wvQUJVd01zeStNVmw1QjBtN1ZkMkRBSHdGUkFEL0FPWFRlUFRKSWlpT1kwalAgRnB0UWM5USsxRHBvMkVpc0RMTDdWSXpsT0daQytTU0s3cnh0SVhSNWNva2wxY2NrdTJjODhTcVF5UVJtc1dzS3ErUlo2Z1V1a3o1UyBzNzRVdCtmekNhK1NiRFQyUmJIc01PejNLd25LbStZWEFodmwySWI0d1RKd0VlQlZiSVppZG9QaE1tY05oTjg4L1VJQS9VVDgvZFdEIHN0REVMbGRCODFaaVlXU01UNVZmVS9DQXUrbzZIRTFBcVRPcnFFQjhoV1BpblRJR05QTnRZUGJzSXdaYWN0RkdLV29FQzBxYllBUUQgQmV0ekgvbFFGWHF2SVdKZnRtYWozSE5kbzFidmN4allMWEpKMk5zaDA2VzJPU3RWYS9ocUVyZGJpVnVSWlVpQ3dJY0dZc3JOWUZSdCBtQTByVkVrbkQ0QStmeGZqOXU5S3hvMUUzSXVWdFRJdVVOb3FIYlZQcmRlNlJ4dGVvNm5Ncm03cTlRMWRiVHc4T0hxRUR6TEEvbzk4IG5XcCs2STNCL05neit3SDBEWU1kZ1pOeEhwNVJQQ2lhalVuRU0vZTJRUUdGa29iTWpFRGJteWZDbTlOcjRxUDA1WFNTSjg5TkNya24gdGo5SVZ1TEp6dXhybGNzV0taQXA2Z3JwdEZIZ1BYMGViamVkWTFLSHpiSStXUE1PREE3NzlhQW5HS3RyNWdPSHBQaC93K0lqd0p4dyBXYk1hTnpadjg3VS9mOWcvZnp5bjdjektIYUtZdjJBZVNiQ2xPeVMySytvU1lPYkxVdG9DdlZ6RVcveW9IMUlmTVg5OFVyQWdUdnMzIEtGa1ljN29oTmd3ZmtIRS9qejdyc09IRU9wUlpLaDIxUG9ISmxUSktRUjBvcmNlN29kakZXRkRzYXQ5NFQ2VHNpdDNCUGhWeTJqeDcgVVpaa1pvS0V4bFZ1d1M3UHZ3QUFmNTlqMHE0WWRMc1p3R3NiSHA3ZGdLNVQ5YjFsVitkWWRnUzdnQWk2bjM2WXZKKzhha0szaHArQSBTQVBiYlVNTXhQaTRzbUROaE9jUDNBUUdJQUJqMG9KOVJZVlppaXV5V2tYODEwMm1lQ2ZNMUhKSWhmTGJhOW9MWE5nbU8yVVZYaE1rIGlLNnN6U2lPTytIU1dLV0NQY2N4czZNcXVOck1NUzJRQkc3UXpIU3RDZzBEY2wyU1pqUWtteXlzTkF0RFl0cTFTaVh5VkQyZFBxdHcgcFB3OXhlNmtEY0NlMThHSm5BZ1RmTWQvUGdOL0FiK051Z2NSWXhBeFFWZ3RTazdMamdFTEVLZm1SeEpoWGFGNW9sQjJCYkRvZHFRNCBiQUhzWjhjTzNOYmpCbFlGQmd0SFNkOE9IOGJkL2Z6NzkwYktDV3dWcGhNWTJPaDBoSXNaOEcyYThOVU92NzVtdVJRU3J2c1B0V3RMIGQySWJJdnpFZEQrZWNUKzVuUEdZbi9FTzdjSC9BSC9ZTi8yQmduR0ROZDlQYjVMcGFtVnQzemJtdU5JcjkyeVUrSkR1UzBGT3J3QWYgbUJneFQ5cUp6Z0huY2ZzdFVUeWFOYURRc293Tko3Smd3Qjgvd0UvNTkrZUh3bFdKQmpoT1lTMTNuZU5NUlFxcVBGbno1NkdPTldrYSB5alpKa01HeXh3dzRQQTkyWEIvUjQ1NEVJK1pWNlJTOVlaUjZ5SkpsdEFoQzJuZUdIMC9sbVJvVjRqNUZUeUVPcTBPdDNBeFlDM083IEgyWnhzblppdmFGRzIvd25lemg4QXdiQSsvZmdEVVQ0OHlncndXN3VLSWR0VzAwT0J0ZWp6QTlYdFllMm5JVEZUUTdCWkVQK1RmR0MgSkJRN2dBZ3c2eU1mTUxMR1dvRXRFMjhBQUdBQUJqN256NHBEek5LOFdxMCtBQXBpL3FaVFhhcmw0T3lPRmZ4SWRqZ1ZQWDBtcDdCWiBCaXE1a013UUQwN0FyOENEY081alEwTXpOZ2IyVERZRUVBZ245L1lENitYeGRvTGlmWkNRNGtsdFZQV2NwVEtlZkJxZUpNSGtPSkZsIHpFK3lLM2ZFT1lZWUE1dzk4ODVNR0ZOMFdTWnc0RXE1SFFRR0w4dnI1L2Y4YzdaekxLNVRGMlRCbldMWmtPUURFbytUMWhHc2prVWMgc0FPTHNWdFJvWVVEb3FLZ2pqVkhpbHR4aVZVbU56am1ib3Q0eE5CdWFkbW95NjZEZDc0dXpLVWc5bzJScG8xWE50T0lENEJlSmY4QSBENGhwR29LMmxzZ0hROVpsd2U5ZlEvci9BUE9ETHl4ZkViZlBObzc4ZlBnRUh3R0I5R3lEalkwYXZMSXZoOG8wYnBYVjBOU1hyZ00xIDZybG9pR3I0SGsyaUsvRFE3SHA5a1hFOWJCOGZQUEFkNUtmZWZOcFBPVjkrQWdUK1BnTU9PRzBabFMxM0R0KzFRNmlCaW9iK0pIekYgc1BFWkxHS2NvS1BnOWt1QkNwKzdFTmdNSEZKZmJUYWZ0aXVMSmpEbFhCTzZnRGord2IrL1AzVCtjNWlmRjB2MTVWL2JHMFlabXNhYyBiTFlXNjNJWEhXOW9JZjhBRGtldFJQWTBPN0ZzdW44a3JpbGlBRUVZck5tZkJiTU1xczJrNGYwQ2duOS9BQU9pajI0Mmlpd21rM3BJIHd6WmJsU0NTS1I1S29WbVlsR04vdkkxUll5dEtMYVJCaHdtWnFrTkJVQjV2Q2paNDhqZ2ZLbEJpNDlsZzYzcXJLTWJiYjRFYXZMNEYgVlIzZXQrR2lZdGpROE40ZklhZXlMN0tEclR0bzFJZFoxbVVHZHpBZXlKTy80QUQ0QS9pQUFIK3hYa0w2WklaRE9uaERxNndsMVZXMyBjZ1NyMjJmUEFZaFMwSmxnQjYzdURSblE0Y2V0ZzZsSFV0QnJaWkdXaGNveis5dkcvd0RzL0gwRUIwWU9DTzRPd01iUHE1d1pFK3lsIHNhNzNnMVhZdnU2ZUxRN1pmU2o1WDliMlIyZkQzQVArRFA4QW52QmhaS05DdVRKbzd2YUlRSHNCK29jSDQvMUkxUERYUDRTSWJSYUMgRTJWVzJMWkpySHZjMU9WRVN1bWlxSXdGUGdHR1crS0hlNFo5YXNac256am5HR2E0NmNlU242KytPR0svZ0F3Zm1EMU1ZTWlQUExPMCAyY2pHT0tPSEhWcTcwMnpHTnhxa21rM0hVZmR5T01MWVFwM1lvb0R0NXd4N3p6eWd4aUFXWkxZcDIrVitEZjZybGZMZHVWR0dqalNtIFZhaWxrdEdJUnNIMkVxaDNlR2VWNlJ4VjRmekE0ZHdNTWcvWTdMSDJXOEIyWm1WeWlNemIyYkNZSDMvWUQ0Qit4eDZjRXkxQ2p1aC8gNFN2VDZreVdnSFpQajNsZGkrajRXTlYrd2krUGg1aTI0UXpCREVHaHNEYkJEb3d4REZzeXlEMlIyL1lOZ1A4QWdPaHRUcnRiYUxFYSBqVGN5V1FxbExyMDN4TFFTZG5ZVnNXVXB5TGFDR1FtVlcrR0hCdzRlalQ2UFBJNWhHUnJrVjJaWmVMUkNmNysvWUVGZzY0eFpWa2FGIGZKZDBOa04weTBXcEdscjRlcGFIWVliNGhOaFNrYmdJQjJRUEREbUxCWk1JRGg4NWJXZHI3bWViTlZjY1FUK1AzN3Badzc0d3FNNCsgbnpSWkxraU0yWVhjWER0L2pZcjNVOU40cmxpYnNhcE9VZEltZVJCSVJjYjRZRXZDMWk1RXlvTlhwNWVHem9JMkhVWkF5cjVPVm1nUyBXZFlLVHl5UU55US8rbzN4V2hiSVRmbVdReXcwL0FINEZIWkdhczJqN09DQ2JKK24wSHovQUxuazFic1JvcU5iZ1BtZFVxSldpZUZFIHlLcld4OFJibEp2ZTRwTVQzQXhNMDlzamVRWkhoRFlKN3hWYXl6UG1PNWd3bjNnK0E4QjlnNjBtQ2hCM3RBUFhNV3Q1T205OFBWZEUgYUllZFlCYVllS0ZtaVZNSU1qNCt6VEswdmh6a0JQYlp6SVRKaTBONldmQ0JQWis1OGc0YkFBNm5yRXVnV1pzR3ZNcW9OUGRYYWV6SyAzVXJDMFdyWHp4WVhLUUphNUtiY0dFUERjRnRrWkNEaEI3WFcwYzR5VGFCYjBUUnpidHNmQVg3K3Z0L2Zvd1lNU1Jta0ZDSk5uY3hqIElCV0pXekZ5ZHB3V3ZVNTVYRGtZRkJHQVpVK3Bkb0oza2JGTnRNZldtYWpVRWVSM1k2NzhrNzF4NVVyUVFXM3laYlV0anV3YWVub2EgVEV0aHd2aVEyT0RrVWE5K1ExOWJtTGJKVmNNY3lRWjlnS1gwYmxDR3pES3J1d0lFQm4vQVlZSUovd0J5U0hTZW5OY3NWMnNFRnFXSiBJZGw2ZXlURGRIYkcrRjRPVUF0a3F1YTNYNFpoa21iT25oL244OGdzaE1ZaDduVUR3N0pQbi92M2dQMGMxbHVuZjIzTEMxU25nTGErIHo3NDNXcjlSUTJuMU95RmNDN2dZcTJRcXVHSE1MY3hnRHF2SDFGVld4bTZDeGpOdmU5OCtBUHo4QTRDZndQb2NmVStZcmgxVnBuNmUgeVRKQXRwQTdUMFBZVlB5OGE1UENaVVY4VHpFUENHWm1jdzRHUTdWVExNV1NoU29GazUrVVFkUkgrQW56L0lNT21qY2pYY0N2SElFWSB4bzZFVHJIR1V4akVGOTJPUkJiY1g0R1BRb3l5UFMyTnRFRHMwMjZqU2M1U08rQ2JPZERGY1h1ajNkdk51dFJFeUdMc3gyY3I0dHBTIHp1MWNudFBNUTlON1p1aWFrSWJSRHI4eFcvWit5SWRmdm5QR0NmM0laaG5GMmFzM2gyN1hXb2Z3dDBBQVFQdndDdCtuTmtzRFNyYmsgT0F4M05KRzVWQWpST3BCd2xvRXVIUS9lT0lMREQxc1BhZ2RrdUFleVVEWmR3QVVkOEdEQ2lIeG4vUk1HL2JEOWd3My9BSzQ2dlQ2YiBTQVYvSHFWdUNpcVRpWEE3TU5mV0VoMWVKbUs3UlU4VlhtVTgrSVFleUZ1N0Y5a3RUajg4NS9RYXVqZXdRSWJSL3dBdTgrMzkrUVVHIFhkTzM5bDVDcXB6OUs2U1pnVnZhRnJtTHN1YW43akwyZzBNSUdJdDRtRU5sV2c1Z2N5QkQ5SVBzNWJXWGpuaU10ZmRrbEhQY0JQcjUgOSt4QUFLbGlTVkZTUjBLRHlFT2QyRURXZTNHNDJrUVZaN3kzMlUxd2hveUpJVVF1S0pMeUZOdU1ZNXVCZzJkV0xIYi9BS202NmpyZyBaQjZsWUI0QytXMDJ3M3h3TmlVLytKWkh0aTFISlhzSXBiVnFNTDVUNzR0ekRBNWtxdnRkQVZXVjVacXZRMFpadzN0SkI3QWZQbjM3IG4zVE9WM2hQREp4TFVFaHF1a3RxS0ROUENSWDdzTlIySGE3YXBFQ0xRaUg4UW04TWpKUjRldUh4UHN5dVE2eXpQaUdzakxVZHRQRm8gdkg2QVA5L0h3OG9Zck9xbDhPK1JjNm5CdVUxSUVRaGVXY2oxT3lOQUduTGFLR0hDWkRUbnlHK0VHOUhReDlhUENHOHJQOFJsWnJPRCBza20zallIN2dKLytvQWtmRGJLcHpIWlNYSHlRQnJuY25jZk5KVWZMbVdOS1laVDRIVDdzRDZ0ZU4yb0FobkFJK3k0TElNck1wVnl5IGpJOVhPMW9vNEFBQVA3Lysvd0FKY3Fpb1BZaXFUK2F4QVA2OEhqbmkrZWxJRkN1N2kwWEhJMzdiUEhIemRWLzIrZW53dmh3OVFWV04gL2h5K1BZV1ZuTmx4cTJUbkQyeHdWd1JhcFFLZW5tYWZjRU53c2hnTUE1NUJ0Ui92TlhxOVpqTmtTY0RuZ0Y5QlAvUWFqcmUwQzdRYiBmaFdYS0FFc1o0ZU4zQVE2OVlDMHdvQVhpamtIVC9zWWVIeUJrZ3o2L2ZBUWNaOW9Sc044Ti84QVRERUFmMkFBOGRPYW5YYVlVTVY4IHBFN0lTZFNMdFpERFQ0RndzajV0dFNsTURGNC9zNmZRK250YklNazRDd1BsY3ZpTmpxTEZ2Sk01ZG5Oamg4L1VSOCtBd1BuK2tFdU8gaWZGSHRRRUM3U2x1eTF0dDRPN1ZLNGQ0S1JBMVBjaXUrTDZmOHkxSWJJT3NnR2ZUd0tvSDNNV0xzell6ZmUxSHZ3K2dnQUhBUUNDLyBSeFdUQVNCMnhhTkhURE9Qd3Joc21xK2JGR3VCWnZpMVgyRVNiZW1hOFd4enhyQytMVzdzZkk0SHpkOUVpV1VzQklLT3l0WE9kOE9CIHFLcTZZcjNuWGdkMzg5dGJSdDZHeUI5bmNQaHRSNndKK3pMTHkrSzR6MjVzazdBQUFZc0dQZ0Q3Q3Fjb2xMaXVxeXRVdW0vdndCbVYgSzJWZlE5U29IRDR0WDJGWXdzd3dPSEwzeGtjQ0hnYkJVZ2U1L1EzbitpZGo1Qit1d2RRTHBiRGd4NmhFTmp5aVJzTVpaQW5lQmtHQiA1bFA3RFdWY2kxdGZXK05wOWtCdVNITGFyN3M2dHZObVk3bU1CdTJ5bkg0QXZvUFB0L0E5WklUMWRqM2dVVVBET1cvSllYbFBzS3IwIGZpL2Mwb2h1TEFIaHpBNWd3UWgyTXBEK0tCMWw1NVF6RFBDYjVzSHRzRy85REdHZU9FekxzdTZhZlVsUGZqbGwyWlVsMS9peEh6MjggZE5tMjFtbVdGOTZwM2hqT09HNFlnZ0xlNXNiekhIZFg1cXlFL3B2S1dKWUttdDFLZWF0Z1hBNFNXdm5vY2pqY1hUbnA3YVUxd3I5RCBRN2dzamVDQmlDUHI4OHFtQ2JNVUtZb3h3MkVkdUFuOS9BQU4vQUFIWkhGanVOalNtVloxZ2N0QXFVUWZaQzNZQW1ueGNwc2l5b1krIEhXK0dudVpWZkpHbzlSNmtxMlIzZnRHci9CaEVsMnc4QWdnTi9QZ0Q2WnRtUlhiUVlEejR0aFNWdGpTVktJbnVDVElMR0ZjWFh1NjcgZkNodzVzUG1CZzQycCsrY1orK1BPeGhBbG84QjJEQkJ4L2Y3VU9QeUVQUjJlVnpPQ0JRSmtPcENkVEdrVlZjRjZJZXRDV0xLUTJBTSB0dzYzK0d2dmh5eXg3YlBoczNLRmNtc2d3Z1Q2Q0FQL0FML2hoMHlhQ2R0cDRkTENzTTh6UWtxdFNmWnZNa3YyYnR4Mk1UV0M4a0hwIFVjc2NTTWpPNW1pUXZLVWJES2loVUVkOWVHbzJlU2VEZlI1b3JyKzlMNFlMQ3pUSWNiV0thMUVraG9yRlV6MkZQUFJiQ1Y5UU1NZ1ogOHdZc2doRGVHMndIdWN0ckROUTdTOG95UFYzZ3dBREhZRDc2QUFkSjl3VTQ3T1FNWnA2alFpSGNHVHdqYmx1K040Y3BVU0xTSzM4TyBKeVJrTUo3SlhQTVVPQW5vMVo0aTNuWTBrM1Nad0FnbjBIZi9BTDhnMVhUNnpGMW5tS3ZjR0diVDR0aGpWNnYyVE9wY3QvOEFlYTArIGxGdGZaVENmRFcyVWdZcXM4UStkTXN3WWh2anlNZVB1d05CQVlnQUhnZW45SXVnMmtNZmN0TkdvQmpLemdqYlgrTlYyQmJESTVKb2wgeVY3SUlKOE5ibVVuREhyYzVTcStmT2gxQXpDaWpPekhBbU4ySS9BZWZiQnY0RG9ZanFZbWxkVnRKblY5TzhCemtTQXh4Uk9BMUxnWiB4RWhCbzBWcWpWazN3ZFZoS3ZBL09RZGZGbENPYkYrRCtLc2ZucnpBMWgzcnEzYXJrenBqMktWcWZOeFZrRGtZVjdwRlU2T2kxZUNqIFR2VEtQZXIxRlZLWFlNb3JYbGhFNTVtY1ZjMG8zakZMd1owM0pLVEJ3M0V4NklFZk92YUZWMTZoa3VVNVpvZ2phdGVaRG00em5uTXIgYWhyNnJ5cDZ3ci8wbXhRYU9OV2w1SXZKS1o3Qkhlallod2t6blNwaytLSEtaaGZjbDBRSUN5WWNESnpyVW8weUtpRFRmMmxTSWlqTyBhWE9sVlIzWkZqa2FOMnhObnlhNlh2YW55MnIwenR3V2RYUUt4NEpJQ3hLb0JyZ0FBVVR4MGoyRmZYcXRydW5yZlVnUXlKWXpaa2FvIE0rQTFldkp6UFNaVENGTSt1bjNaZktBaVVQTmhrR0dhWm1PQnBiWWU1OHF3b25wcm5PeXF2V29xM1h1WDZscjEzczB3NmVxMTFSZjggVXpVSnAvdHdHSWtJNmd3NmpVS1JKUkUydWFqT09tUXNWZFVCNE93dXViVktVbWh5WjNFaTRUc1Q4WWVGRXFydEZnQzRMMnNNMFBMbSA1TS9PczY1ZXNkeEhJNGRnNnBDRmNNUXdGdndHdXdQMERYUXhBQ1JhQUY2cXpYRm44bjkvdnJ6eXZobkthWDZ0MHYyVFNQcEdLVmlYIEYvd3ZnRjgyRTV6Z29oeUxuMjNWQ3p1S3hjSUxOeVhtRXlDTWhDTUFGUlhGaEU3SUY1WXhTamdCL3JXY0JjajVXZEp0L2QyaytrajkgNjRXdmdxUmc3QTBOTFVjUENoVVVWbUtjcGc5VDNsQjVoNGV1R1JoZUNzbENaK1BDc01qbktlQUxMa09vK0hqNmNuTFZNdjFLdVpuVyBkYW9pZi9VeWxuQjlMcVE2MzJ1TGc0WmZERGs4RUVjbnJZNkkzOWpTc3lxelJ6YVhiWXFDMGVXZVdCSXRjcUdXTlhRdndPcWZaeW9oIHRXa3QyYThhOVRWMGtuZzRyT25ZcVl6UEI1aWVaYnhnVWtYOWFtVnladVl4TFlmMWxBb2dwNkZJTWFoSjJaT0d3OHlZdnkvUmtlbkwgd0dxMGd0OXYvd0RFQXRXZ3N5NExsckdzL1RwNXE1cm5BYVdzQXBXY1V5OStoeVczZGFzQXFQQitqQUxuTjlmTzV6MXRWZGtJNG1MRyBVSjRvQU9Gd2N0ZEN3UW1YbldkR3BPMk9UeEhLdzU4TXVHTEQvTXRuRStSWm85WVNBUEFBNFh3SytCMWZnT2pabVFtLzhXRExlWEZ1IHV4aDBYeTc4dGVoblM4TTFkc2c4dXZzUXM1SXpVZG1qQzY1NlVpZGpaUTllQWxuVWZscU1RWmxNb1VRYlRJU2ZKR1FNSTlZZE1GL3QgaG1vNmplczhNdFF6dW9GbUxLYnppSTVRSWlRVWtTeFhPbFpsZnB1UVBhSS9xVWE3TDVIcnpqSlpBRVp1U241eEhQekJrUUxDVHNmUSByZWpPczZXN3UwK3B5Wm1xZDZ5WW1ycTZzbXZBL3dDbld1TlZXTk1WQzNkNGdDK1U4MTU4bi9xZXZ4QlFoT2JRRm01L3BuSElvc0NlIFFKa0paaEV2VkNYdlE4MXBaTmUxU0J0dVBHalpXWE5EMnlSVmZWbjVUWTZyeEFOT2JzWnhFY3daYzVjSVRBV2N3VWl0Rmx1dDIxTW8gbjZqWHdtVFRyWlJYMXdNVHhVbGtDQ0JCVUZxbzdNRlNEOGt3UjljTldnbDJxWXRCREU0c0FpRldxWE5uQ2lPSzFYMldtNTFuVGZFVSBqajNMaGkzM0xZNW8rUmRDNlBQejFVLzhoLzIvL0RyajA4VjJHdWJUL2RUb3l5aUFqMHE0VFQxQUhKeWw2QklKQ3pvMXlLTHU5bnZRIFJXUFFLa1I1dnFBK21jVFVGUE16TTdEMWpWV2ZoNjUvcUxOWWhkYVF5VHNRemwxcHBmVHJjRUFsc29aZDFjQTN5Rnc2Rmk1NllETEcgQ1ZUSmhUMGd3bzdhODc0QkFWWVhyOWMrQWNJRzQ4L09VRkNQTzlNa1RrSHhqRG5XZFU1UDArcTVQOHgvOGdmK09scDdsLzIvOEoxNiBkclM3QXhiTEtGQmMwaXAraUNuYStteU5tckpPYkNqZWc1V2l0V1RnaWY4QU11eXM2Y24rdGRXSGU0WFo1Rm9YcVhNYTl5SEhQRXNHIENwalBCQ3MyTlRmUGk0MVQvd0FCL1Nqck5YNTV3aGFMdzQyd1d6MXBoWTJBblZLdjYyakl0TEpPUkVXdi9RVGlqbERKbjVkY3J1VG4gU2crZmtGOFlHWWJEN25zakFYR3k4NnpwRUFCa2pzWDZxSG44aTZQK28vUFZ0N0pQM0d3UDdCcXdmMGZrZFZjcWw2TU8vcXhSaG5wOSBGYUFJRk5hVkxCWGNLMUlNQWNvcXRGeVViVzFPWEo2d3hzMGFZUzhoY3RDdkhZbXZzU0VmbUc2L0ZSb0liQktWbFQwajhQVG0yY3BVIFBNMUZCS0pzQzVuR3lITTFuMS9YMWx6dlRqWkRzdStrbXlXUkRNT0xqNnlSVlNPQUdlWmx6bWxaaUhROHpOUDRtMHNqS2xaeUtYV2YgOEFWZ016ck90T3BBU0tCMUFWdHBVeVhoc0hZWkpZbzR0UXlXNmFoWU5EcE9tSk1tcHNrK3Q4bS9PTitmejg5VXl0SExKcnI3YkdueSBPeU1lZldrYklSNWNlRDZTT0FRNWt5eTlRdVY3WkVuTGFWUElYV0hEMWhIcFJBWWpmUmlReHlKSVVkRkZzR1VjOU1hSm5SN282bTlZIGx4M2pTdyt6cGZxVWEyZjdYWHJsclY3YzZyVllJQnhNcWFucFN3c1RDRDZYUTE2MlZ3Z2NpSzZia2NTeitrZWVpeGlLeVpkd2NlUEIganNYcDlVRE9zNlZJQjlYRWE1RjBma2Z4ZUQ4ZFBqNTBPcXZtdHB4K25VUGl3L0RMWnhieUxORWRKai9oeE1icnExMG8zRVJlYkVzWiBJWXRPdGJXNElyWnJxQjZaVUppanhTeENoY3Nqa0daa2NqUGpsaFJZZllyQ05hbFBOaVpTUllIcHl3eGl4bGx1WndnMDlIYkdkWDhxIGlodXRZblh6ODd4aTJrYTFyQXlxL0lHK0hNbnBhY21ZMWFac2ovbXNjTWFUNWkyZkt3Ty9UbG1nMm9RRlhYRmV6QnFmZ0JZaDJTdFEgOHIxNTFuU3RQMzZQVTU5L3IvZjNlYnZ6Zm1oZjVycHVvSmpuVXhreGszZUhiNDI2OXRmazliODJkYmJEWW8vT1o5UWx1TkV4cXFTcSB2UXd6ajJYVjg2U2VQUlIrcWw1SHVUTmgyMHk0N2t6d1N4dHJoK3JNZFk3RUdMaFdzaU1Zd3ByS0VxSHFXckdhU2FhVnRSR3FpdzY1IHNMUGx4aEt5VzAxZWdVWFJ4S1pYelBGRmFtVlJqekdaV2dHazlVRVpvRklyOWNUb05mVkNqckdVRFUwaXZpcktzN09VanNCTE56czYgenFSQUJZZ0FBTzd4eDhwMHB2OEFpblB5Y2JQeWVla0pPcVpVT2ltQ25TdnBteTFPdklMcTlqZjFnWkdjWG12Z0VycUFuQWp3dUtQeSBGVFBVb05oTGVNcjFMdzFiRlEzQ0thSlpsbmM4TXdsa3d2UUZaVUt2ak5KR2wyWk5hbk5tTDNEb2gxMzI4d0gyblBWeTV3TVYwYWs3IElTcWRYMWNqNmxYSnpCd09PR09aWHFJbHBtQk93UjgwTEJrcER3bmJtMTViSm5XZGFHSnlYazhTeWtmb3NZc2lQd1RRcy9OQytseCsgNTAreGtnREo5akJkekVNdmdoYk9JSUlGbXZKNk0xMnZqbW0zVVBYVVNtcm11bEp3MUZqb0hwdGlTSWJ4OEdlYW4wZUFTVEswZUR6byBRQ0xLVEdOaTlmcU1qYkFPSnVhQkl1WVpzYXhoWFA4QVZITTUySG8vY0twMTRkcUh1TmU5SkE5Tk9rOUp6L1p0aTJVVW14Q1ZoVzYxIFcxb2R6ZFVic1FmeVVzZm1BOG9uT3VCZTlScUMxSXE4a3ZBYUFYbGlSVFRFaWgwN0JYenJPc3NZQjFJY2dGM2dpTHVSM01WeXhMTjUgWXJrMkpKTldhcXowNEUvVDZIazhHUUQ5QnRuSUQ4QnFGMTVvWDQ2U09xSzBQU1FTNy9QakszcVpTOUZJYVhkUE44VjhJVmtpTkJpRCBuNlFldXBUbTRTeTh5V1JjSnlxWGlBczB5eXBtY3o0TERlNU1MRzd0d3c2MlRvNWlGRVVzc0VhKzBRNlY5WUNRN05hNWMwM1VEYnEzIGt5bytVb2tGZ2VOa2FJeTF6VHNySVdEaW9WSEVNa2hMbm02K21EVCtCa0w2NndQRUZ2TEY1VTdJRW14bWRaMXVzblQ2WmlTV2JQSmkgYlpxYUtySjVOV2FzOFdmejFrY0F6b1NCWnUvMzdmUDU2WUZaK2daY0ZIV3RjakdLMnRsWTNJTFJ6U1BWMkYxRGhHV243STB6VmhiTCBiWFpUMDR0RW8za3JwVWswVDFXZDZCSndaT0tJOFljRE5UaWtpTGlTekZaWXpXMHJpVFI5dmpXWmd6Mkk1SXMybG80VmtNa0hsR1cxIDhaWlJwTEFtRmxMZTVES0JIbUY4TERpZW9ZTGtSSnFINnllWG5GaWFXUklFU3NpZm5XZFprOTJtL1VTZ2ZvQXBRSDRBL0hVMWp1dWwgMUdMTXR5TVRpeEZtMTVORVdmMmVlb1c0ZFoxemhFKzZhK0YrdFVIZ3l0RTZmWHc5SUdBTm5MSENTQXNOcWVNRHlDQWFhUDhBVUtVaSBJMnl5ZWNXVjFqTEFpUGtDUnVRSWppQlJOekdOZDFhSlVJbDNVbHBqbEh6TFV1RXJXMHkxTmZ0anoxSm1MNUdXNHQ1RFhrQ2preFpvIEN4U1dSVGtMUkdTa3FoT1JHOUMvbEdzdWFFaTVVTTdGRzVrb2ZJenJPc1dwSlRWUlJvU2thelI0b3BLb3RpelNpbEZuazBPZXVnaXEgd2t5VU5VTWxaQUdyVkxxNzgvUFZvTkV2L0RnMDhhbktVN2t2M3BZeHgzME9UTUI5T1V1d2Ezek1yTmh4Y3lJVTlHY1FLdHRkdGpXYiBtNFNqRXZJalNEckdUeEVBOGdPcGdmU0pVbDFlQkM4NnpyT3UzSExLRlVDU1N1UHZiOHArK3VQSkhHWGNsRUpMTVNTcWtrMzVKcjlEIC9wMS8vOWs9ICIKICAgICAgIHk9IjAiCiAgICAgICB4PSIwIgogICAgICAgaWQ9ImltYWdlOSIKICAgICAgIGhlaWdodD0iMjYwIgogICAgICAgd2lkdGg9IjI2MCIgLz48L3BhdHRlcm4+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDkyNSI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkyNyIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhOGE4YTg7c3RvcC1vcGFjaXR5OjEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNGQ0ZDQ7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjEzMTc5NjAzIgogICAgICAgaWQ9InN0b3A0OTI5IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5MzEiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTllOWU5O3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTI1IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ4ODAiCiAgICAgeDE9Ijc2LjMwNjY3OSIKICAgICB5MT0iMTUzLjEzMTEzIgogICAgIHgyPSI3Ni4zMDY2NzkiCiAgICAgeTI9Ijc0LjMyMDUwMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODU5OTk4NDUsMCwwLDAuODUzMjYzNTMsLTE2Mi4zMjQ2NywtMzYuNTA0OTEyKSIgLz48Y2xpcFBhdGgKICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0iY2xpcFBhdGg2NDAyIj48cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MC4wNTQ0NTU0NTtmaWxsOnVybCgjcGF0dGVybjY0MDYpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAtMTA2Ljk1MDYyLDcyLjY4NzUwMSBjIC0zLjA2MDE5LDAgLTQuODk5NzEsMi4wNTI3NzkgLTUuNSw0LjQzNzUgbCAtMTYsNjMuNTYyNDk5IGMgLTAuNDIyODUsMS42Nzk4NCAwLjUwNTY1LDguMjQ5MiAwLjYxMzc5LDguODMyMTQgMC4zODk1LDIuMDk5NjggMi44MzA5MiwzLjYwNTM2IDUuNTExMjEsMy42MDUzNiBsIDExMi43MTg3NTM4LDAgYyAyLjQ3NzgzMDEsMC4xMTYyNyA0LjgyMjQ4NTUsLTEuNDM5NjcgNS40MjI1NTYzLC0zLjE1NjI1IDAuMjUzODcyNiwtMC43MjYyMyAwLjU1MzYwNTcsLTQuMDUxNTggMC43MjcxNzU4LC04LjM0MTAyIDAuMDEyMjA5LC0wLjMwNDAyIDAuMDQzODM3LC0wLjYxNjY5IC0wLjAyNDc2NywtMC45NDAyMyBMIC0xOS40ODE4NSw3Ny4xMjUwMDEgYyAtMC42MDAyODMsLTIuMzg0NzIxIC0yLjQzOTgwOSwtNC40Mzc1IC01LjQ5OTk5OSwtNC40Mzc1IGwgLTgxLjk2ODc1MSwwIC0zZS01LDAgeiIKICAgICAgIGlkPSJwYXRoNjQwNCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2Njc3Njc2NjYyIgLz48L2NsaXBQYXRoPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NDYzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY0NjkiCiAgICAgeDE9IjUxNS4xMjA0OCIKICAgICB5MT0iNDk0LjM0MDI3IgogICAgIHgyPSItNy4zODE2NjI0IgogICAgIHkyPSItMjguMTYxODc1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2NTExIgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDY2MzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjUxMTI1ODYsMC4zODk1NzMzMiwtMC4yMjI4NjIwMiwwLjg2NDU0MTExLC0yMy40OTU3NDgsLTYuMjAxMDg5KSIKICAgICBjeD0iNTguMDMxMjUiCiAgICAgY3k9IjI3LjY5OTc2OCIKICAgICBmeD0iNTguMDMxMjUiCiAgICAgZnk9IjI3LjY5OTc2OCIKICAgICByPSI0MS4xODA1NDIiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3MzEiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50NjczNyIKICAgICBjeD0iNjMuNTUxMjI4IgogICAgIGN5PSIxMDIuNzIwOTMiCiAgICAgZng9IjYzLjU1MTIyOCIKICAgICBmeT0iMTAyLjcyMDkzIgogICAgIHI9IjU1LjI0MjcyMiIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDk3MzkyNCwwLDAsMC4wOTkxOTk5OSwtNjkuNzQwNjM2LDkyLjUzMTAxOSkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3NDUiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc1MSIKICAgICB4MT0iODEuMDkzMyIKICAgICB5MT0iODYuODE0OTgiCiAgICAgeDI9IjgxLjA5MzMiCiAgICAgeTI9Ijc1LjQ5OTU4OCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNjIuMTI2MzMsMCkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY3NjIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njc2OCIKICAgICB4MT0iOTIiCiAgICAgeTE9Ijc2IgogICAgIHgyPSItMi4yMDc5OTk3IgogICAgIHkyPSIyMi4wNzk2ODkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkwNjI1LDAsMCwwLjkwNjI1LC0xNjIuMTI2MzMsMC4zNjI1KSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njc2MiIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2ODA3IgogICAgIHgxPSI1NiIKICAgICB5MT0iMTQwLjI0OTc2IgogICAgIHgyPSI1NiIKICAgICB5Mj0iMTIiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkwNjI1LDAsMCwwLjkwNjI1LC0xNjIuMTI2MzMsMCkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY4MjkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjgzNSIKICAgICB4MT0iODIuNjk1MzEyIgogICAgIHkxPSIzNC44OTA2MjUiCiAgICAgeDI9IjkwLjIwMDE5NSIKICAgICB5Mj0iMzQuODkwNjI1IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE2Mi4xMjYzMywwKSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTE5IgogICAgIHgxPSI0NSIKICAgICB5MT0iNjQiCiAgICAgeDI9Ijg0IgogICAgIHkyPSI2NCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTYyNjY4MSwwLDAsMS4xOTQ2NDE2LC0xOTAuNDQ3MzcsLTI1LjkzNzcxNikiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkyMSIKICAgICB4MT0iNTYuMzM3OTE0IgogICAgIHkxPSIzOS4zMTQyODUiCiAgICAgeDI9Ijc2LjExMjE4MyIKICAgICB5Mj0iNTEuNjQ1NzY3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTMxIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIKICAgICB4MT0iNzYuMjcwNjA3IgogICAgIHkxPSI1OS4xNTQ4OTIiCiAgICAgeDI9IjYyLjA1NjM1MSIKICAgICB5Mj0iNTIuODg4MDUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkzMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjEzODMyMSwwLDAsMS4zNTY5MzQ2LC0xODYuNDA3NTYsLTMwLjA5MzMzMSkiCiAgICAgeDE9IjU2LjIxNzE3OCIKICAgICB5MT0iNjYuNTEwMDcxIgogICAgIHgyPSIzOC44MTI2MDMiCiAgICAgeTI9IjM5LjQ1MDE4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDY5MzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjIxMzgzMjEsMCwwLDEuMzU2OTM0NiwtMTg2LjQwNzU2LC0zMC4wOTMzMzEpIgogICAgIHgxPSIzOC41OTQ0NjciCiAgICAgeTE9IjM5LjMxNDI4NyIKICAgICB4Mj0iNzguMzExNzgzIgogICAgIHkyPSIzOS4zMTQyODciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjkzNyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjEzODMyMSwwLDAsMS4zNTY5MzQ2LC0xODYuNDA3NTYsLTMwLjA5MzMzMSkiCiAgICAgeDE9IjM4LjU5NDQ2NyIKICAgICB5MT0iMzkuMzE0Mjg3IgogICAgIHgyPSI3OC4zMTE3ODMiCiAgICAgeTI9IjM5LjMxNDI4NyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NzAwNyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDMwIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MTM5MjY3NiwwLDAsMC44MTM5MDM3MiwtMTYyLjg4Nzg4LDQuNTM1MDE2MykiCiAgICAgeDE9IjU0LjUzMDc2MiIKICAgICB5MT0iLTMyLjI2NjYwOSIKICAgICB4Mj0iNTQuNTMwNzYyIgogICAgIHkyPSIzOS44NjMxMjkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDcwMDciCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzA0MCIKICAgICB4MT0iMTAuMjUzMDUiCiAgICAgeTE9IjMuMzcyNDMwMyIKICAgICB4Mj0iOTYuMTY2NTE5IgogICAgIHkyPSI1MC43NDg1ODUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjczNzYyMTEyLDAsMCwwLjczNzYwMDI3LC0xNjMuMDM1NCwzLjk0NDkzNjEpIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3MDc1IgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDcwODEiCiAgICAgY3g9IjY0LjUyMzQ5MSIKICAgICBjeT0iMzUuMjA2MTEyIgogICAgIGZ4PSI2NC41MjM0OTEiCiAgICAgZnk9IjM1LjIwNjExMiIKICAgICByPSIzMy40MzQ4MjMiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjc2NDcxOTQ3LDAsMTEuOTgxNzQ2KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MTA5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yMTM4MzIxLDAsMCwxLjM1NjkzNDYsLTE4Ni40MDc1NiwtMzAuMDkzMzMxKSIKICAgICB4MT0iNzYuMjcwNjA3IgogICAgIHkxPSI1OS4xNTQ4OTIiCiAgICAgeDI9IjYyLjA1NjM1MSIKICAgICB5Mj0iNTIuODg4MDUiIC8+PGNsaXBQYXRoCiAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImNsaXBQYXRoNDQ4NSI+PHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMDU0NDU1NDU7ZmlsbDp1cmwoI3BhdHRlcm40NDg5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMjIuNzc5NzI1LDI1LjM3NSBjIC0yLjYzMTc1OCwwIC00LjIyMjk0NywwLjg0Mjk5NiAtNC43Mjk5ODEsMi44ODAxMDcgTCA0LjI4OTc2ODYsODMuNTM4NjA1IGMgLTAuMzU3MTYyNCwxLjQzNDk3MiAwLjQzNDg1MzIsNy4wMzg3MzQgMC41Mjc4NTE3LDcuNTM2MTM2IDAuMzM0OTc0NywxLjc5MTU4NSAyLjQzNDU5NTEsMy4wNzYzMjQgNC43Mzk2Mzc3LDMuMDc2MzI0IGwgOTYuOTM3OTQyLDAgYyAyLjEzMDkzLDAuMDk5MjEgNC4xNDczMywtMS4yMjg0MTcgNC42NjMzOSwtMi42OTMxMTEgMC4yMTgzMywtMC42MTk2NyAwLjQ3NjEsLTMuNDU3MDcxIDAuNjI1MzcsLTcuMTE3MDg4IDAuMDEwNSwtMC4yNTk0MTIgMC4wMzc3LC0wLjUyNjIwNCAtMC4wMjEzLC0wLjgwMjI2MSBMIDk4LjAwMjczOSwyOC4yNTUxMDcgQyA5Ny40OTU3MDcsMjYuMjE3OTk2IDk1LjkwNDUwNywyNS4zNzUgOTMuMjcyNzQ5LDI1LjM3NSBsIC03MC40OTI5OTksMCAtMi41ZS01LDAgeiIKICAgICAgIGlkPSJwYXRoNDQ4NyIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc2Njc3Njc2NjYyIgLz48L2NsaXBQYXRoPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ1NTEiCiAgICAgeDE9IjczLjUiCiAgICAgeTE9IjY3Ljc1IgogICAgIHgyPSI5OSIKICAgICB5Mj0iNjcuNzUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDU4NSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICB4MT0iNzMuNSIKICAgICB5MT0iNjcuNzUiCiAgICAgeDI9Ijk5IgogICAgIHkyPSI2Ny43NSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjkxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NjA2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4yOTQxMTc2LDAsMCwxLjI5NDExNzYsLTI1LjM2NzY0NywtMjEuMTc2NDcxKSIKICAgICB4MT0iNzYuOTYzNzIyIgogICAgIHkxPSI2Ny43NSIKICAgICB4Mj0iOTkiCiAgICAgeTI9IjY3Ljc1IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ2MTAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjI5NDExNzYsMCwwLDEuMjk0MTE3NiwtMjUuMzY3NjQ3LC0yMS4xNzY0NzEpIgogICAgIHgxPSI5NC45NDgxNjYiCiAgICAgeTE9IjYwLjU3NjA2OSIKICAgICB4Mj0iODYuNDA5MDEyIgogICAgIHkyPSI2NS41MDYxNDkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDYyMCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjk0MTE3NiwwLDAsMS4yOTQxMTc2LC0yNS4zNjc2NDcsLTIxLjE3NjQ3MSkiCiAgICAgeDE9IjczLjUiCiAgICAgeTE9IjY3Ljc1IgogICAgIHgyPSI5OSIKICAgICB5Mj0iNjcuNzUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NDIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc0OCIKICAgICB4MT0iMTA0LjUyNjUxIgogICAgIHkxPSIzNi44NDg4NTgiCiAgICAgeDI9IjEwNC41OTQxNiIKICAgICB5Mj0iNTMuMDYyNSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc5OSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzODA1IgogICAgIHgxPSI5Ny40MTQyMTQiCiAgICAgeTE9IjQ0IgogICAgIHgyPSIxMjAiCiAgICAgeTI9IjQ0IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjM4MDciPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjU2NTM2MTQ4IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyMzgwOSIgLz48L2ZpbHRlcj48Y2xpcFBhdGgKICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0iY2xpcFBhdGgzODEzIj48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiCiAgICAgICBpZD0icGF0aDM4MTUiCiAgICAgICBkPSJtIDg4LDMyIDcuOTAxMzU4LDAgQyAxMDAsMzIgMTIwLDUwLjE5NzA1MiAxMjAsNTUuOTYzNDk2IEwgMTIwLDcyIDg4LDcyIDg4LDMyIHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzgxNyk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PC9jbGlwUGF0aD48cmFkaWFsR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc3MyIKICAgICBpZD0icmFkaWFsR3JhZGllbnQzODE3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4yODk0MTkzLC0xLjMwNDU2OTRlLTgsMCwxLjkzMjg3OTgsLTk0LjM1NjU1NSwtMzcuMDczNTgxKSIKICAgICBjeD0iOTAuMTM0ODk1IgogICAgIGN5PSIzOS44NzUiCiAgICAgZng9Ijk1LjM3NjM5NiIKICAgICBmeT0iNDMuMzc3MzE2IgogICAgIHI9IjUwLjc1IiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzODIxIgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDM4MTkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCg2OC40OTIzMzUsMCwtMy4yOTUwNjAyZS03LDU3LjgyNTc3OCwtNjE4OC4wOTE2LC0yMjczLjE3NzkpIgogICAgIGN4PSI5MS44ODIwNTciCiAgICAgY3k9IjM5Ljg3NSIKICAgICBmeD0iOTcuMTIzNTU4IgogICAgIGZ5PSI0My4zNzczMTYiCiAgICAgcj0iNTAuNzUiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4MjEiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50Mzg0NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDc0Nzg2MiwtMS4xODIyNjZlLTgsMCwxLjc1MTY3MjMsLTg1LjUxMDYyOCwtMzMuNTk3OTMzKSIKICAgICBjeD0iOTMuMTkyNDM2IgogICAgIGN5PSIzNi4yNTM0NiIKICAgICBmeD0iOTguNDMzOTM3IgogICAgIGZ5PSIzOS43NTU3NzUiCiAgICAgcj0iNTAuNzUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3ODMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg1NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICB4MT0iMTA4IgogICAgIHkxPSI0NCIKICAgICB4Mj0iMTE0IgogICAgIHkyPSIzNiIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iLTEyNi4xOTk1MiIKICAgICB4Mj0iOTEuMjkyODMxIgogICAgIHkxPSItMTEwIgogICAgIHgxPSI5MS4yOTI4MzEiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAxMjQ1OTgsMCwwLDEuMDEyNDU5OSwtMi43NTc5MTYyLDApIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM2ODkiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA0MSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE0NC4wNTcwOCIKICAgICB4Mj0iNDcxLjgwNDM1IgogICAgIHkxPSIxNDEuNDc1MSIKICAgICB4MT0iNDcxLjgwMDM4IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40MDgyMjIzLDAsMCwwLjM3MzkxNjEsLTMwMi44Nzc0OCwtMTc3LjY4OTQxKSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjgzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NjkuMTA1NjIiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40NjU0MjcxLC0yLjU2MjUzNGUtMyw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzQ5IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMi40MTk3NjI2ZS0zLC0xLjY3MjM4NTIsMjAxLjMwODc3LDI2My40OTU5NSkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc0NyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTE9IjMxLjk5OTk5OCIKICAgICB4MT0iMTM4LjUwODI0IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40NTA2OTMzLDAsMCwwLjY3OTk0ODMsNTAuNTc1MjYzLDIzLjI4MTQ5NykiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mjc0NCIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTMwIgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMTkiCiAgICAgeDI9IjExNiIKICAgICB5MT0iMjAuNTc0NTI0IgogICAgIHgxPSIxMTYiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjgzMzMzMzMsMCwwLDAuODAzMTM3NywxOS4yNSwzMC45NTI5MzQpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3NDEiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE0NC4wNTcwOCIKICAgICB4Mj0iNDcxLjgwNDM1IgogICAgIHkxPSIxNDEuNDc1MSIKICAgICB4MT0iNDcxLjgwMDM4IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMjg4NjExLDAsMCw3LjYyNzQ0NThlLTIsLTI2NS45NzE3NiwzNi4wNDE3NTYpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MzgiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjMxLjk5OTk5OCIKICAgICB4Mj0iMTQ5LjYwMjI2IgogICAgIHkxPSIzMS45OTk5OTgiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDkuMDEzODY1ZS0yLDAsMCwwLjgzMzMzMzYsMTAyLjUxNTA1LDEzLjgzMzMyNikiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjczNSIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0ODg0IgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48bGluZWFyR3JhZGllbnQKICAgICB5Mj0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODkyLC0zLjkxOTg1MTVlLTQsNi41MDA4ODA0ZS0zLC0wLjk3MDk3NzcsMTc0LjI4MTE4LDIwMi42NzA4KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzMxIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwyNykiCiAgICAgeTI9IjM2Ljk5OTk5OSIKICAgICB4Mj0iMTIxLjEwMjI2IgogICAgIHkxPSIzNi45OTk5OTkiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzE3IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwNzkiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjE4ODM4LDcuOTk1ODYyOWUtNSwyLjY3NzY4MzFlLTIsMC4xOTgwNjM3LDE3MS41MTA4NiwzMC45MzczMDIpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MTMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjE5LjUxNzE4NyIKICAgICB4Mj0iMTE2IgogICAgIHkxPSIyMy4wNzk2ODciCiAgICAgeDE9IjExNiIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LDE5LjI1LC01OS4xMjY3NTMpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MDgiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgeTI9IjQ2LjU5NTI5OSIKICAgICB4Mj0iMTQ2LjkyODEiCiAgICAgeTE9IjMzLjQ0NzI3MyIKICAgICB4MT0iMTQ2LjkyODEiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjY5NTY1MjIsMCwwLDAuNjk1NjUyMiwxNC4zMDc2MDksMzYuMzI2MDg3KSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQyNzA1IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NzYiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIHkyPSIzMy43MTg3NSIKICAgICB4Mj0iMTQzLjQwNjI1IgogICAgIHkxPSI0Ni42ODg0NDIiCiAgICAgeDE9IjE0My40MDYyNSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNjk1NjUyMiwwLDAsMC42OTU2NTIyLDE0LjMwNzYwOSwzNi4zMjYwODcpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDI3MDIiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk3NiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+PGZpbHRlcgogICAgIGhlaWdodD0iMS4wMDU4OTU2IgogICAgIHk9Ii0wLjAwMjk0Nzc3NzQiCiAgICAgd2lkdGg9IjEuNDg4NDM2OSIKICAgICB4PSItMC4yNDQyMTg0NiIKICAgICBpZD0iZmlsdGVyNDg2MiIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNDg2NCIKICAgICAgIHN0ZERldmlhdGlvbj0iMC4xMTYwMjYxNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz48L2ZpbHRlcj48ZmlsdGVyCiAgICAgaGVpZ2h0PSIxLjAwNTk5NjkiCiAgICAgeT0iLTAuMDAyOTk4NDQ0MSIKICAgICB3aWR0aD0iMS4yMDM1MjAxIgogICAgIHg9Ii0wLjEwMTc2MDA3IgogICAgIGlkPSJmaWx0ZXI0ODM4IgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+PGZlR2F1c3NpYW5CbHVyCiAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI0ODQwIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjExODAzMzYzIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjwvZmlsdGVyPjxjbGlwUGF0aAogICAgIGlkPSJjbGlwUGF0aDM3NjEiCiAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPjxwYXRoCiAgICAgICBpZD0icGF0aDM3NjMiCiAgICAgICBkPSJNIDE3MC43NSwxMTIuMjEyNSBMIDE3MC43NSwyMDcuODY4NzUgTCAzMDQuNDA2MjUsMjA3Ljg2ODc1IEwgMzA0LjQwNjI1LDExMi4yMTI1IEwgMTcwLjc1LDExMi4yMTI1IHogTSAyNTMuOTY4NzUsMTI1LjI3NSBDIDI2My4wOTI0OSwxMjUuMTE3MzkgMjcyLjM5MTA2LDEyNi44MTczNCAyNzkuNTYyNSwxMzAuOSBDIDI4MS4yNTgyMSwxMzEuODY1MzYgMjgyLjgzMDI1LDEzMi45NTkyNyAyODQuMjgxMjUsMTM0LjI0Mzc1IEMgMjkxLjczNjk2LDE0MC44NDM3NCAyOTYuNTM2MywxNTAuMTEyNzIgMjkwLjA5Mzc1LDE1OC4wNTYyNSBDIDI4NS4xMzQ1MiwxNjQuMTcwOSAyNzUuNTQ0NDcsMTYwLjc3ODc4IDI3Ni4zNDM3NSwxNTUuNTg3NSBDIDI3Ni43Mjc4MSwxNTMuMDkzMDQgMjc4LjQwODYzLDE0OS4wNjE1MyAyNzUuNTkzNzUsMTQ3Ljc0Mzc1IEMgMjY4Ljk0MjA4LDE0NC42MzYwMyAyNjEuMjg1MDgsMTQ5Ljc3NDAzIDI1OC41LDE1NC4zMDYyNSBDIDI1Ny43ODI0LDE1NS40NzQ3OSAyNTYuNDM5NTEsMTU3Ljg5NTgzIDI1Ny43NSwxNTkuMTgxMjUgQyAyNTkuNzM2OTEsMTYxLjEzMDE0IDI2Mi4wOTczMSwxNTkuNTIzNjIgMjY0LDE2MS4zMzc1IEMgMjY4LjU1MjI1LDE2NS42NzcyOSAyNjMuMDQxNTksMTc3LjQyMjIxIDI1Ny4xNTYyNSwxODIuMDg3NSBDIDI0OC4zMTU0NywxODkuMDk1NTUgMjM2LjQ0MzU3LDE5My42NTk4NSAyMjQuMDkzNzUsMTkzLjkzMTI1IEMgMjExLjM2OTczLDE5NC4yMTA4OCAxOTguMTI0NywxOTAuMDMzMTcgMTg3LjE1NjI1LDE3OS4xNSBDIDE4Ni40Njc3NywxNzguNDY2ODggMTg1LjQyNTAxLDE3Ny4xNjQ4OSAxODQuNzgxMjUsMTc2LjExODc1IEMgMTc2LjA4OTYzLDE2MS45OTQ1NyAxNzkuNDE4OTgsMTQwLjA3NjM0IDE5Ny41MzEyNSwxNDIuMjQzNzUgQyAyMDMuMzU4OTIsMTQyLjk0MTEyIDIxMy4xNjA2OSwxNTAuNjc1MjIgMjA2LjkzNzUsMTYxLjQzMTI1IEMgMjA1LjE4ODE1LDE2NC40NTQ3OSAyMDYuODEyNDYsMTY2Ljg4MDgyIDIxMC43MTg3NSwxNjcuMzM3NSBDIDIxNC4wOTA5NywxNjcuODMwOTMgMjIwLjEwNTg1LDE2Ni4zMjQzMyAyMjQuNTYyNSwxNjMuMTE4NzUgQyAyMjYuOTc3NDEsMTYxLjM4MTc2IDIyOC44ODQxMywxNTkuMzQ3MDEgMjI5LjM0Mzc1LDE1Ny4wODc1IEMgMjI5Ljk2NTYzLDE1NC4wMzAyNSAyMjguMjM4NjIsMTUwLjg0MzY2IDIyNS41OTM3NSwxNTAuMDU2MjUgQyAyMjQuNjM0MTUsMTQ5Ljc3MDU3IDIyMy4xODg1LDE1MC41MDEgMjIzLjc1LDE1MS41MjUgQyAyMjQuMzE5NjUsMTUyLjU2Mzg1IDIyMi42NDY1NCwxNTMuNzYwNzQgMjIxLjEyNSwxNTMuMTE4NzUgQyAyMTMuNTI5ODIsMTQ5LjkxNDE1IDIxNi43OTE1OSwxNDAuMDE3NzIgMjI0LjM3NSwxMzMuOSBDIDIzMC43ODU1NiwxMjguNzI4NDQgMjQyLjIzODIzLDEyNS40Nzc2NCAyNTMuOTY4NzUsMTI1LjI3NSB6IE0gMTk1LjE4NzUsMTUzLjQzMTI1IEMgMTkzLjc3OTczLDE1My41MjQyMyAxOTIuMjI1MjgsMTU0LjE1NTA2IDE5MS4yNSwxNTUuMTE4NzUgQyAxODcuNjI3NTEsMTU4LjY5ODIxIDE4OC45NDI5NCwxNjUuNDM1ODYgMTkxLjg0Mzc1LDE2OS43NzUgQyAxOTcuNTM0MDksMTc4LjI4Njg2IDIxMy44OTA0MSwxODguMDA4NjYgMjM3LjI4MTI1LDE4MC4xMTg3NSBDIDI0NC4yMTc1MiwxNzcuNzc5MSAyNDkuMjM5MjIsMTcwLjgxODYxIDI0Ni42ODc1LDE2Ny4xMTg3NSBDIDI0NS43Nzc5OSwxNjUuODAwMDEgMjQ0LjE2OTE5LDE2Ni41ODc0OSAyNDEuNjI1LDE2Ni41ODc1IEMgMjM4Ljc0NDg0LDE2Ni41ODc1IDIzNy40MDcyMiwxNjUuNjU5OSAyMzYuMzc1LDE2Ny4wODc1IEMgMjI5Ljg3NTExLDE3Ni4wNzcwNyAyMTguNTA1MDYsMTc4LjcyNDg0IDIwNS42MjUsMTc0LjgzNzUgQyAxOTkuMDM1NDgsMTcyLjg0ODcgMTk1LjIxMDUxLDE2Ni44NzEzMyAxOTUuMjUsMTYxLjkzMTI1IEMgMTk1LjExODk5LDE1OS40NTc1MSAxOTUuODI5LDE1Ny44MzY0MyAxOTcuMDYyNSwxNTcuNjgxMjUgQyAxOTguMTkyMzIsMTU3LjUzOTExIDE5OC40OTg3MSwxNTUuODM2MDcgMTk4LjE4NzUsMTU0Ljg2ODc1IEMgMTk3LjgzNTE0LDE1My43NzM1IDE5Ni41OTUyNywxNTMuMzM4MjcgMTk1LjE4NzUsMTUzLjQzMTI1IHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjM2NjMzNjY2O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC4zMDAwMDAwMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiAvPjwvY2xpcFBhdGg+PGxpbmVhckdyYWRpZW50CiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgeTI9IjQuNzUiCiAgICAgeDI9IjcuOTM3NSIKICAgICB5MT0iMTgiCiAgICAgeDE9IjcuOTM3NSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2OTY0IgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY0MTciCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzNzAiPjxzdG9wCiAgICAgICBpZD0ic3RvcDMzNzIiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGUyOTY1O3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3AzMzc2IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzA5MWU2YTtzdG9wLW9wYWNpdHk6MTsiIC8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICByPSIxMzkuNTU4NTkiCiAgICAgY3k9IjExMi4zMDQ3IgogICAgIGN4PSIxMDIiCiAgICAgaWQ9IlhNTElEXzhfIj48c3RvcAogICAgICAgaWQ9InN0b3A0MSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZmVmZWY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ3IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Y5ZjlmOTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMTg4NTEwNDkiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojRkFGQUZBIgogICAgICAgb2Zmc2V0PSIwLjI1NzE4MTQ3IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDUxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRiIKICAgICAgIG9mZnNldD0iMC4zMDExMTI3NyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MyIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNGQUZBRkEiCiAgICAgICBvZmZzZXQ9IjAuNTMxMyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNFQkVDRUMiCiAgICAgICBvZmZzZXQ9IjAuODQ0OSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1NyIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNFMUUyRTMiCiAgICAgICBvZmZzZXQ9IjEiIC8+PC9yYWRpYWxHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ2NDE3Ij48c3RvcAogICAgICAgaWQ9InN0b3A2NDE5IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzU1ZGRmZjtzdG9wLW9wYWNpdHk6MSIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M3ZWNmNDtzdG9wLW9wYWNpdHk6MSIKICAgICAgIG9mZnNldD0iMC44MzQ5MjI2MSIKICAgICAgIGlkPSJzdG9wNjQyNSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A2NDIxIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Q4ZWRmMjtzdG9wLW9wYWNpdHk6MSIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MDAiPjxzdG9wCiAgICAgICBpZD0ic3RvcDM4MDIiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2UzZTNlMztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNTA1ODc4NjkiCiAgICAgICBpZD0ic3RvcDM4MDQiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wMzgwNiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhMGEwYTA7c3RvcC1vcGFjaXR5OjE7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPjxzdG9wCiAgICAgICBpZD0ic3RvcDM3NjEiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3AzNzYzIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0ODg0Ij48c3RvcAogICAgICAgaWQ9InN0b3A0ODg2IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzdjN2M3YztzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MzQzNDM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjAzMTI1IgogICAgICAgaWQ9InN0b3A0ODg4IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC4yNSIKICAgICAgIGlkPSJzdG9wNDg5MCIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0ODkyIgogICAgICAgb2Zmc2V0PSIwLjM3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC41IgogICAgICAgaWQ9InN0b3A0ODk0IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ4OTYiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDg5OCIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkZmRmZGY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojOTA5MDkwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC44NzUiCiAgICAgICBpZD0ic3RvcDQ5MDAiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDkwMiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0ZjRmNGY7c3RvcC1vcGFjaXR5OjE7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDkzMCI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3YzdjN2M7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A0OTMyIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5MzQiCiAgICAgICBvZmZzZXQ9IjAuMDMxMjUiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDM0MzQzO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0OTM2IgogICAgICAgb2Zmc2V0PSIwLjMwMTU1OTg0IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjQzMzkyNTU0IgogICAgICAgaWQ9InN0b3A0OTM4IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5NDAiCiAgICAgICBvZmZzZXQ9IjAuNTM2ODI4NDYiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgaWQ9InN0b3A0OTQyIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGZkZmRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIGlkPSJzdG9wNDk0NCIgLz48c3RvcAogICAgICAgaWQ9InN0b3A0OTQ2IgogICAgICAgb2Zmc2V0PSIwLjg3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5MDkwOTA7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNGY0ZjRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNDk0OCIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj48c3RvcAogICAgICAgaWQ9InN0b3A0OTU0IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDk1NiIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDk3NiI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDk3OCIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDQ5ODAiCiAgICAgICBvZmZzZXQ9IjEiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwNDEiCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj48c3RvcAogICAgICAgaWQ9InN0b3A1MDQzIgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RiZGJkYjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTA0NSIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkYmRiZGI7c3RvcC1vcGFjaXR5OjA7IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTA1OSI+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM3YzdjN2M7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwIgogICAgICAgaWQ9InN0b3A1MDYxIiAvPjxzdG9wCiAgICAgICBpZD0ic3RvcDUwNjMiCiAgICAgICBvZmZzZXQ9IjAuMDg0Nzg5MDgiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNDM0MzQzO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDY1IgogICAgICAgb2Zmc2V0PSIwLjI1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5YzljOWM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgb2Zmc2V0PSIwLjM3NSIKICAgICAgIGlkPSJzdG9wNTA2NyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDY5IgogICAgICAgb2Zmc2V0PSIwLjUiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzE3MTcxO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2EwYTBhMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuNjI1IgogICAgICAgaWQ9InN0b3A1MDcxIiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZGZkZmRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NSIKICAgICAgIGlkPSJzdG9wNTA3MyIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDc1IgogICAgICAgb2Zmc2V0PSIwLjg3NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM5MDkwOTA7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNGY0ZjRmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNTA3NyIgLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudAogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUwNzkiPjxzdG9wCiAgICAgICBpZD0ic3RvcDUwODEiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzYwMDAwO3N0b3Atb3BhY2l0eToxOyIgLz48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmNGY0ZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAuMTg0NTE0NjQiCiAgICAgICBpZD0ic3RvcDUwODciIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNTA4OSIKICAgICAgIG9mZnNldD0iMC41MDIxMTg2NSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhZDI2MjY7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZTQzZTNlO3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC43NTEwNTkyOSIKICAgICAgIGlkPSJzdG9wNTA5MSIgLz48c3RvcAogICAgICAgaWQ9InN0b3A1MDgzIgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzVlMDAwMDtzdG9wLW9wYWNpdHk6MTsiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MDkzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDUwOTUiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgb2Zmc2V0PSIxIgogICAgICAgaWQ9InN0b3A1MDk3IiAvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50CiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDA2MSI+PHN0b3AKICAgICAgIGlkPSJzdG9wNDA2NCIKICAgICAgIG9mZnNldD0iMCIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NWRkZmY7c3RvcC1vcGFjaXR5OjEiIC8+PHN0b3AKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjN2VjZjQ7c3RvcC1vcGFjaXR5OjEiCiAgICAgICBvZmZzZXQ9IjAuNTQzNzAwNTgiCiAgICAgICBpZD0ic3RvcDQwNjYiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDA2OCIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOGVkZjI7c3RvcC1vcGFjaXR5OjEiIC8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQKICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NzEzIj48c3RvcAogICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2FmYmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICBvZmZzZXQ9IjAiCiAgICAgICBpZD0ic3RvcDQ3MTUiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDM1NCIKICAgICAgIG9mZnNldD0iMC4xMjgzNTY1IgogICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzIwNTBhYztzdG9wLW9wYWNpdHk6MTsiIC8+PHN0b3AKICAgICAgIGlkPSJzdG9wNDcxNyIKICAgICAgIG9mZnNldD0iMC40ODEzNTU0OSIKICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MDg1ZDE7c3RvcC1vcGFjaXR5OjE7IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMjA0Nzk1O3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMC45MTQyNjUxIgogICAgICAgaWQ9InN0b3A0MzU2IiAvPjxzdG9wCiAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwOTU5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgIG9mZnNldD0iMSIKICAgICAgIGlkPSJzdG9wNDcxOSIgLz48L2xpbmVhckdyYWRpZW50PjxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgIGlkPSJwZXJzcGVjdGl2ZTIwMiIKICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNjQgOiA0Mi42NjY2NjcgOiAxIgogICAgIGlua3NjYXBlOnZwX3o9IjEyOCA6IDY0IDogMSIKICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDY0IDogMSIKICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPjxyYWRpYWxHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDU5IgogICAgIGlkPSJyYWRpYWxHcmFkaWVudDUwOTkiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjA4MzQ5ODQsLTEuMTI2NDAwM2UtNiwxLjM1NTI1MDZlLTYsMi41MDY4MDE4LC0xMjUuMTQ0MDgsLTE1LjE2MjcxMykiCiAgICAgY3g9IjExNS41IgogICAgIGN5PSIxMC4wNzI1MTYiCiAgICAgZng9IjExNS41IgogICAgIGZ5PSIxMC4wNzI1MTYiCiAgICAgcj0iMC41IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTMwIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMDEiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQ1MDY5MzMsMCwwLDAuNjc5OTQ4MywtNDUuMTk2NjE1LDAuMjIxODgyODIpIgogICAgIHgxPSIxMzguNTA4MjQiCiAgICAgeTE9IjMxLjk5OTk5OCIKICAgICB4Mj0iMTQ5LjYwMjI2IgogICAgIHkyPSIzMS45OTk5OTgiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEwMyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LC03Ni41MjE4NzUsNy44OTMzMTk4KSIKICAgICB4MT0iMTE2IgogICAgIHkxPSIyMC41NzQ1MjQiCiAgICAgeDI9IjExNiIKICAgICB5Mj0iMTkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEwNSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMzI4ODYxMDksMCwwLDAuMDc2Mjc0NDYsLTE3MC4zNTI0NCwxMi45NDc2NTkpIgogICAgIHgxPSI0NzEuODAwMzgiCiAgICAgeTE9IjE0MS40NzUxIgogICAgIHgyPSI0NzEuODA0MzUiCiAgICAgeTI9IjE0NC4wNTcwOCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDg4NCIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTA3IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4xMjI1MzI2NywwLDAsMC44NzU4MTQwOCwyLjA1OTQ1MzYsLTEwLjcxMzEwNSkiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICB5MT0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTI9IjMxLjk5OTk5OCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTA5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODkyLC00LjYyODg4NTVlLTQsMC4wMDY1MDA4OCwtMS4xNDY2MTA5LDc4LjUwOTMwNSwyMDMuNjA5MDcpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExMSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQ2NTQyNzEsLTAuMDAyNTYyNTMsNy4xMzE1Mjc3ZS00LC0xLjY3MjM5NDQsMzU3LjM0OTk0LDI2NC4zNTUwNikiCiAgICAgeDE9IjQ2OS4xMDU2MiIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NjAuMDYzNjMiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTEzIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIyNjIzMywtNi43NTEzNTMxZS00LDAuMDAyNDE5NzYsLTEuNjcyMzg1MiwyMDEuMzA4NzcsMjYzLjQ5NTk1KSIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzU5IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMTUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQwODIyMjQ5LDAsMCwwLjQ0MTU1MDksLTIwNy4wNTUyMiwtMTc0LjI2NzY1KSIKICAgICB4MT0iNDcxLjMwMzQ3IgogICAgIHkxPSIxNDEuMjUyMDMiCiAgICAgeDI9IjQ3MS4zMDQxNyIKICAgICB5Mj0iMTQxLjcwMDk5IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0NzEzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMTciCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtOTUuNzcxODc1LDMuOTQwMzg1OCkiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICB5MT0iMzciCiAgICAgeDI9IjEyMS4xMDIyNiIKICAgICB5Mj0iMzciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTExOSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjEyMTg4MzgsNy45OTU4NjI5ZS01LDAuMDI2Nzc2ODMsMC4xOTgwNjM3LDc1LjczODk4NSw3Ljg3NzY4NzgpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwOTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEyMSIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQ2NTQyNzEsLTAuMDAyNTYyNTMsNy4xMzE1Mjc3ZS00LC0xLjY3MjM5NDQsMzU3LjM0OTk0LDI2NC4zNTUwNikiCiAgICAgeDE9IjQ2OS4xMDU2MiIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NjAuMDYzNjMiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MTIzIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIyNjIzMywtNi43NTEzNTMxZS00LDAuMDAyNDE5NzYsLTEuNjcyMzg1MiwyMDEuMzA4NzcsMjYzLjQ5NTk1KSIKICAgICB4MT0iNDQ2LjI1NzE0IgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ3MC43MzgyNSIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0OTUyIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxMjUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjgzMzMzMzMsMCwwLDAuODAzMTM3NywtNzYuNTIxODc1LC0zNi4wNjcxMzkpIgogICAgIHgxPSIxMTYiCiAgICAgeTE9IjIzLjA3OTY4NyIKICAgICB4Mj0iMTE2IgogICAgIHkyPSIxOS41MTcxODciIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ3MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTEyNyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuOTA3NTA0NCwwLDAsMC4zMDIwODMzOSwtODUuMTM0NzI5LC0xMTkuMDIwODMpIgogICAgIHgxPSIxMTAuMDA4MjQiCiAgICAgeTE9IjM3IgogICAgIHgyPSIxMjEuMTAyMjYiCiAgICAgeTI9IjM3IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTUzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxNTkiCiAgICAgeDE9IjEwMi41IgogICAgIHkxPSI1MS41IgogICAgIHgyPSIxMDciCiAgICAgeTI9IjQ5IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUxNjciCiAgICAgeD0iLTAuMDExOTMyMzkyIgogICAgIHdpZHRoPSIxLjAyMzg2NDgiCiAgICAgeT0iLTAuNDc4NjAwNDMiCiAgICAgaGVpZ2h0PSIxLjk1NzIwMDkiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjU1ODA4NTUiCiAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXI1MTY5IiAvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MTgzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUxODkiCiAgICAgeDE9IjEwMS41IgogICAgIHkxPSI5OC43ODEyNSIKICAgICB4Mj0iMTAxLjUiCiAgICAgeTI9IjEwOC4zMzQ1NyIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz48ZmlsdGVyCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJmaWx0ZXI1MjAzIgogICAgIHg9Ii0wLjA0NzcyOTU2NyIKICAgICB3aWR0aD0iMS4wOTU0NTkxIgogICAgIHk9Ii0xLjkxNDQwMTciCiAgICAgaGVpZ2h0PSI0LjgyODgwMzUiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIyLjIzMjM0MiIKICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjUyMDUiIC8+PC9maWx0ZXI+PGZpbHRlcgogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICBpZD0iZmlsdGVyNTI0MiIKICAgICB4PSItMC4wNzEzOTM3NzkiCiAgICAgd2lkdGg9IjEuMTQyNzg3NiIKICAgICB5PSItNS4xOTYzNDM4IgogICAgIGhlaWdodD0iMTEuMzkyNjg4Ij48ZmVHYXVzc2lhbkJsdXIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHN0ZERldmlhdGlvbj0iMi45ODk0OTI3IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTI0NCIgLz48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTI2NyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MjczIgogICAgIHgxPSItODgiCiAgICAgeTE9IjIwOCIKICAgICB4Mj0iNDgiCiAgICAgeTI9IjU2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUyODMiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjk4MzAwOTcxIgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTI4NSIgLz48L2ZpbHRlcj48ZmlsdGVyCiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIGlkPSJmaWx0ZXI1Mjk5IgogICAgIHg9Ii0wLjAzMzcyNTA4OSIKICAgICB3aWR0aD0iMS4wNjc0NTAyIgogICAgIHk9Ii0wLjY0MDc3NjciCiAgICAgaGVpZ2h0PSIyLjI4MTU1MzQiPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjEzMzQ5NTE1IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTMwMSIgLz48L2ZpbHRlcj48cmFkaWFsR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTMwMyIKICAgICBpZD0icmFkaWFsR3JhZGllbnQ1MzA5IgogICAgIGN4PSIyMS41NTU2MDkiCiAgICAgY3k9IjExOC43NzU2IgogICAgIGZ4PSIyMS41NTU2MDkiCiAgICAgZnk9IjExOC43NzU2IgogICAgIHI9IjUuMDcwMzg4NCIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMjMyNjQ3MywwLjA0OTMwNTk0LC0wLjAxMDEyNDEzLDAuMjUzMTAyOTksLTMuODY3OTYzMiw4Ni44NzQ3MjEpIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPjxmaWx0ZXIKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgaWQ9ImZpbHRlcjUzMTEiCiAgICAgeD0iLTAuMDYwODczNzg2IgogICAgIHdpZHRoPSIxLjEyMTc0NzYiCiAgICAgeT0iLTAuNjA4NzM3ODYiCiAgICAgaGVpZ2h0PSIyLjIxNzQ3NTciPjxmZUdhdXNzaWFuQmx1cgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgc3RkRGV2aWF0aW9uPSIwLjI1MzY0MDc4IgogICAgICAgaWQ9ImZlR2F1c3NpYW5CbHVyNTMxMyIgLz48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTM0MCIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzQ2IgogICAgIHgxPSI5Ny44NzUiCiAgICAgeTE9IjM4LjA2MjUiCiAgICAgeDI9IjEwMy4zMTI1IgogICAgIHkyPSIzMi42MjUiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+PHJhZGlhbEdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDUwNTkiCiAgICAgaWQ9InJhZGlhbEdyYWRpZW50NTM2NiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDgzNDk4NCwtMS4xMjY0MDAzZS02LDEuMzU1MjUwNmUtNiwyLjUwNjgwMTgsLTEyNS4xNDQwOCwtMTUuMTYyNzEzKSIKICAgICBjeD0iMTE1LjUiCiAgICAgY3k9IjEwLjA3MjUxNiIKICAgICBmeD0iMTE1LjUiCiAgICAgZnk9IjEwLjA3MjUxNiIKICAgICByPSIwLjUiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5MzAiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM2OCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDUwNjkzMywwLDAsMC42Nzk5NDgzLC00NS4xOTY2MTUsMC4yMjE4ODI4MikiCiAgICAgeDE9IjEzOC41MDgyNCIKICAgICB5MT0iMzEuOTk5OTk4IgogICAgIHgyPSIxNDkuNjAyMjYiCiAgICAgeTI9IjMxLjk5OTk5OCIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDk1MiIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzcwIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC44MzMzMzMzLDAsMCwwLjgwMzEzNzcsLTc2LjUyMTg3NSw3Ljg5MzMxOTgpIgogICAgIHgxPSIxMTYiCiAgICAgeTE9IjIwLjU3NDUyNCIKICAgICB4Mj0iMTE2IgogICAgIHkyPSIxOSIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc1OSIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1MzcyIgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMjg4NjEwOSwwLDAsMC4wNzYyNzQ0NiwtMTcwLjM1MjQ0LDEyLjk0NzY1OSkiCiAgICAgeDE9IjQ3MS44MDAzOCIKICAgICB5MT0iMTQxLjQ3NTEiCiAgICAgeDI9IjQ3MS44MDQzNSIKICAgICB5Mj0iMTQ0LjA1NzA4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ0ODg0IgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzNzQiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjEyMjUzMjY3LDAsMCwwLjg3NTgxNDA4LDIuMDU5NDUzNiwtMTAuNzEzMTA1KSIKICAgICB4MT0iMTM4LjUwODI0IgogICAgIHkxPSIzMS45OTk5OTgiCiAgICAgeDI9IjE0OS42MDIyNiIKICAgICB5Mj0iMzEuOTk5OTk4IiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzNzYiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjE4OTIsLTQuNjI4ODg1NWUtNCwwLjAwNjUwMDg4LC0xLjE0NjYxMDksNzguNTA5MzA1LDIwMy42MDkwNykiCiAgICAgeDE9IjQ0Ni4yNTcxNCIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzc4IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDY1NDI3MSwtMC4wMDI1NjI1Myw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICB4MT0iNDY5LjEwNTYyIgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzODAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMC4wMDI0MTk3NiwtMS42NzIzODUyLDIwMS4zMDg3NywyNjMuNDk1OTUpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NTkiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM4MiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDA4MjIyNDksMCwwLDAuNDQxNTUwOSwtMjA3LjA1NTIyLC0xNzQuMjY3NjUpIgogICAgIHgxPSI0NzEuMzAzNDciCiAgICAgeTE9IjE0MS4yNTIwMyIKICAgICB4Mj0iNDcxLjMwNDE3IgogICAgIHkyPSIxNDEuNzAwOTkiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ3MTMiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM4NCIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC05NS43NzE4NzUsMy45NDAzODU4KSIKICAgICB4MT0iMTEwLjAwODI0IgogICAgIHkxPSIzNyIKICAgICB4Mj0iMTIxLjEwMjI2IgogICAgIHkyPSIzNyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzg2IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTIxODgzOCw3Ljk5NTg2MjllLTUsMC4wMjY3NzY4MywwLjE5ODA2MzcsNzUuNzM4OTg1LDcuODc3Njg3OCkiCiAgICAgeDE9IjQ0Ni4yNTcxNCIKICAgICB5MT0iMTA4LjAyMDUyIgogICAgIHgyPSI0NzAuNzM4MjUiCiAgICAgeTI9IjEwOC4wMjA1MiIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NTA5MyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzg4IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDY1NDI3MSwtMC4wMDI1NjI1Myw3LjEzMTUyNzdlLTQsLTEuNjcyMzk0NCwzNTcuMzQ5OTQsMjY0LjM1NTA2KSIKICAgICB4MT0iNDY5LjEwNTYyIgogICAgIHkxPSIxMDguMDIwNTIiCiAgICAgeDI9IjQ2MC4wNjM2MyIKICAgICB5Mj0iMTA4LjAyMDUyIiAvPjxsaW5lYXJHcmFkaWVudAogICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ1MDkzIgogICAgIGlkPSJsaW5lYXJHcmFkaWVudDUzOTAiCiAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xMjI2MjMzLC02Ljc1MTM1MzFlLTQsMC4wMDI0MTk3NiwtMS42NzIzODUyLDIwMS4zMDg3NywyNjMuNDk1OTUpIgogICAgIHgxPSI0NDYuMjU3MTQiCiAgICAgeTE9IjEwOC4wMjA1MiIKICAgICB4Mj0iNDcwLjczODI1IgogICAgIHkyPSIxMDguMDIwNTIiIC8+PGxpbmVhckdyYWRpZW50CiAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ5NTIiCiAgICAgaWQ9ImxpbmVhckdyYWRpZW50NTM5MiIKICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuODMzMzMzMywwLDAsMC44MDMxMzc3LC03Ni41MjE4NzUsLTM2LjA2NzEzOSkiCiAgICAgeDE9IjExNiIKICAgICB5MT0iMjMuMDc5Njg3IgogICAgIHgyPSIxMTYiCiAgICAgeTI9IjE5LjUxNzE4NyIgLz48bGluZWFyR3JhZGllbnQKICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDcxMyIKICAgICBpZD0ibGluZWFyR3JhZGllbnQ1Mzk0IgogICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45MDc1MDQ0LDAsMCwwLjMwMjA4MzM5LC04NS4xMzQ3MjksLTExOS4wMjA4MykiCiAgICAgeDE9IjExMC4wMDgyNCIKICAgICB5MT0iMzciCiAgICAgeDI9IjEyMS4xMDIyNiIKICAgICB5Mj0iMzciIC8+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODYzIgogICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEwOTgiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGd1aWRldG9sZXJhbmNlPSIxMC4wIgogICBncmlkdG9sZXJhbmNlPSIxMC4wIgogICBvYmplY3R0b2xlcmFuY2U9IjEwLjAiCiAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgaWQ9ImJhc2UiCiAgIHdpZHRoPSIxMjhweCIKICAgaGVpZ2h0PSIxMjhweCIKICAgaW5rc2NhcGU6em9vbT0iMi44Mjg0MjciCiAgIGlua3NjYXBlOmN4PSIxNTIuNjY0MTQiCiAgIGlua3NjYXBlOmN5PSIxMjAuNTg0NTQiCiAgIGlua3NjYXBlOndpbmRvdy14PSI1MjAiCiAgIGlua3NjYXBlOndpbmRvdy15PSIyNjAiCiAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9IkxpdmVsbG9fMSIKICAgc2hvd2dyaWQ9InRydWUiCiAgIHNob3dndWlkZXM9InRydWUiCiAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgIGlua3NjYXBlOnNuYXAtbm9kZXM9InRydWUiCiAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJ0cnVlIj48aW5rc2NhcGU6Z3JpZAogICAgIHR5cGU9Inh5Z3JpZCIKICAgICBpZD0iZ3JpZDQwNzYiCiAgICAgc3BhY2luZ3g9IjFweCIKICAgICBzcGFjaW5neT0iMXB4IgogICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICBlbmFibGVkPSJ0cnVlIiAvPjwvc29kaXBvZGk6bmFtZWR2aWV3PgoKPGcKICAgaWQ9Imc1MjE5IgogICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjE2NzIwMTU4LDAsODEuNzAyMTIpIgogICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyNTI0MikiPjxwYXRoCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44OTUyOTAzNCwwLDAsMC40OTMzNjkxMywwLjcwMDM5NTU1LDQzLjk5MjA3NikiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1MTY3KSIKICAgICBkPSJtIDcuNzgxODU0MiwxMDYuODg3MDMgMTEyLjI0OTUxNTgsMCAwLDIuNzk0NDIgYyAtMzUuMDE1MDE4LC0wLjAxNDMgLTcyLjQ2Mjc5MiwwLjAxNDQgLTExMi4yNDk1MTU4LDAgbCAwLC0yLjc5NDQyIHoiCiAgICAgaWQ9InBhdGg1MTYxIgogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+PC9nPjxwYXRoCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk1MjkwMzQsMCwwLDAuMTE1MDkyODMsMC43MDAzOTU1NSw4NS44MzgzNTcpIgogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjUyMDMpIgogICBkPSJtIDcuNzgxODU0MiwxMDYuODg3MDMgMTEyLjI0OTUxNTgsMCAwLDIuNzk0NDIgYyAtMzUuMDE1MDE4LC0wLjAxNDMgLTcyLjQ2Mjc5MiwwLjAxNDQgLTExMi4yNDk1MTU4LDAgbCAwLC0yLjc5NDQyIHoiCiAgIGlkPSJyZWN0Mzg1OSIKICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz48cGF0aAogICBzdHlsZT0iZmlsbDojMDAwMDAwIgogICBkPSIiCiAgIGlkPSJwYXRoMjE5NyIgLz48ZwogICBzdHlsZT0iZGlzcGxheTpub25lIgogICBpZD0iRnJhbWVfY29weSIKICAgZGlzcGxheT0ibm9uZSIKICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzY1LjQ1NzI2LC0zMTQuMTE2NCkiPjxnCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGRpc3BsYXk9ImlubGluZSIKICAgICBpZD0iZzM5NzgiPjxpbWFnZQogICAgICAgc3R5bGU9Im9wYWNpdHk6MC43NSIKICAgICAgIHdpZHRoPSI1NzEiCiAgICAgICBoZWlnaHQ9IjU3MSIKICAgICAgIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBanNBQUFJN0NBWUFBQUFLMWxwYkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBIEJHZEJUVUVBQU5iWTFFOVlNZ0FBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUZTNFNVUkIgVkhqYTdKMEpkeHJia21hREZCcHNYOWZyLy84cnE5Njl0cXdKdWwydGZBNkNpRGh4a2dRUzJIc3RsZ2JiRXNJU3VmWEZjRllDQUpmSyA2b0Mvc3lxOHIvZnRVN0U5OE8zb2ZkbjdxMzhPQUJmNlpBa0F5LzQ1N1JXWDF1dlY5NTNqT1dUYmVMMzZ2dXoxWGtGQ2dnQ1FIUUNZIDRXZXlKVFM5MHFKZnJnNzRPNmQ4SHNsRVpodThyL2Z2VlArc0lqb0lFQUN5QThEUFgvSDlWV25KeEdRMTA5dXJRSGlPK1h3U3BTNWIgNXlZenZqMUZrQkFnQUdRSGdKKzNvdGhVWmFZbEpYUGZoa1Nxam8wbklKdEFlbzUxaStTb0lrRUlFQUN5QTNCemN0TXJOQlVScWJ3OSBUUGczM3ArdE9pVHUwRFFuUzNRMndldXR0emVOZjU5OTNEbEVxUFYxQWdDeUEzQVZjcE5KVFVVOHZKZlIrNksvMC9xNFF5SkwwZGM0IGQ1cmp5YzdHZWJscGlJejl1NjIzV3g5MzA1Q3ZRNUlnNUFjQTJRRzRLTG1wSkRVdGdmSGVudk8yYW53ZWU1OUVUbFBPeXNwWG5xeHMgR25LVDNUNktmNVo5emtyQ1ZPa0pxaVpCQUlEc0FCejFaMmFLM05na0paT1l1K1R0MXV1dDkwMFZJWnM0bmVLNXhFdEpOaE9GeGhNWSA3K1ZINGU5VVAwOHJEZHBLZndrTStRRkFkZ0NPbnQ1a1UwODlZaE5KeVYzeGJmdSs2TyszUktpYUhMVktXWWMrdjFUNmRhcUNzdzJTIG1VaHVQaHpScWR3aVFjcWt5S1pQMVg0Z1VoOEFaQWZncE9sTnF4eVZwVFdSdUt3NzMyN2RodVIxZlorcUpiTHFLUG94VTUxdFI1cXogZFlTaktqVHZoZGV6OTMwMFVxSldDcFQxQUdXcEQrSURnT3dBbEFXbmxkNTR2UzZ0cENhU203WHoranI1TzVINHJKUFBXUzFwcllxcCB6cm5MV050Q2FsSXBYVVhpVW5sWmVWOVZocW9DVkNsN0lUNEF5QTVBU1hDeTlDWktiVnBDWTJVbXU5MEhFdVI5ekVxNkU4bE9aV3FyIGQvejhGT2xPYXlJcksyZjFKRHZ2amRkN2Jwa1FlZkx6SVgzOVA0Z1BBTElEZk05M0MwNmxnZmpPU1Z5cUVuUGZlT25kZWlVbmFuUnUgU1UwbU9lY2VQVzlKVHlaQlVmOU9yL0JrdHpmbjliZmd6eXZ5azVYQUVCOEFaQWVndE84bUd3Ry9TOUliTFNDUnhGUmZ6NFNuVmNZYSBnaVRISzFsRmtyTnF5STBuTzZkTWRpTFp5WGJkdEpLZmx2aThTMTdlaWlUSGUvbm12QjNKVUZRaWE4a1A0Z09BN0FBcFRsZDZZeVVpIEswUGROMjRQaWVCNEFsUk5kSHBIeXl1YmthTUVaNmxuWTFVa2FDUDFhYTZldE9lamtPcjAzbG9DOUM3dDhoZmlBNERzQUlKVGtodXYgVCthK0lUY1BTbXdlQXRtcEpEbHJKOG5KZW5HbTl0eGtZaU55bWFlZTl3cFFKRDgyOWJHSmlrMTlvcVRIUzNkZUcyOTc3N01mYjN3NyBLbjhkSWo1SUR5QTdBQXYrWG83S1ZQYUM3NVdtb3VRbUVwd0hJemdQenZ1cW90TktjVm9KVHZYOHEwcGEweU0zNTVDZGl2ejBwa0F0IDhha2tQOVh5bGljMHI4bjdYcE8vK3laeCthdFhmRWg3QU5rQnVPQVVwelUxVlJHYiswQm1vcHY5KzFYQjBaS1RDVTZXMkF6SjR6RkYgYWxZTGUrNm9pRSt2QkUwVm9Pb0lleVk4bWVSa3R6ZnoraFR4cVk2MEl6MkE3QUFzSU1WcFNVNDBDbTdsNXFHUjJsUnU5dDk3cFNwdiBmRHhyTXU0dFIvV0lUWS9RTE9WNVl6dEJoQ3JpSTFKcmVQWUV5QnRyajBwZEZmSFJRdk9pM3ZmaXZPKzFRM3plbmZzWmJYUzJqdzNpIEE4Z093SmxUSEcrQ3lrdHd0SGhrVXZQWWVEdVRISnZtVkp1TWV4cUtSZHI5TmEyVXB2VmNjQ25QRTl2T1A2c21RSkVFVlJxZXMzSlggcGN5VnljNUw4SHBMZk40T1RIeElld0RaQVRoVGltUDdjTElTMWIwak40L095OGZnejNvRTUxN2EvVGZlY1EydDlPYVF4T2FRbi8rbCBQV2RzWi93M1dTbXNwL3pWVS9KcVRYTkZKUzFQZGw2SzR2TTZrL2hVVWpRQVpBZmdRTW1KVXB4V2llckJDRTEyNjVHY2RTUEZhYVUzIDFlVjkxWW1vRmM4RGt5N0VVeHVoZStVbjIrblRrcDRYNStWTFFYeGVBdkhKK254SWV3RFpBVGl4NU5peGFxL1J1RmR3bm9MWE04bUogU2xSVEJHZjhlcVJUY0tvL3cveWN6eU5EVlFtcVRueGw4dU1sUGw0L3oydUg5RlNUbjBoODlIMnNqTEVqUFlEc0FEUWtSMS9jdllWLyBVUitPSnpnUGdkdzhtZGVqVk1jclUxWDI0RlFPMGF6dXNtbjl2UEt6ZkI0SmFnbFFLL21wcEQ1ZTJ1T0pUNWIyL0hLRTUxY2lQOTVZIGUxVG04c1FINlFGa0I2QWdPYmEwVStuRDhYcHdiR3JUSXpwWmloTTFHVThWSEpIYW9qNStacGN2UVpYcHI2cjhaRDArV1Y5UGx2VDggQ2w1NjZVODAyVlhaMzJPRkQra0JaQWVRSENNNVUxS2NMTDNKM281S1Z0RWtWVVZ3S2xOVEpEYTNLVUJWK2NuRXA5cmI0NG1QbGh4OSBlekd2VyttSnlseFIyalBlZDZRSGtCMUFjZ3FTazZVNFh2OU42NVpKanQ2TEUwbE9OYjJwSkRqOFBDSS9MZm5KU2wyWitHUlRYQytCIDhQd0tKR2lPdEFmcEFXUUhrQndqT2ZZVThhalJXTXZMRnlVMFh3TEo4Y3BWM3VLL1ZvclRrOTRnTjlBU29LeloyWk9mU0h5cVRjMWUgV2V2WlNNNnprL3BrNHRPYTVFSjZBTmtCSktjenhYbHl4T1pMUVhRZWpPUzBTbFhaQkZWMkN2aUtuemVZUVg2ODNwZE5VWHk4L2g2diB4R1ZMVzgrQjhEd0g0bVBMWE43aHBFZ1BJRHVBNURpU0U2VTRudUI4Q1VSSEp6OWVQNDVYcWhxU0ZLZXkrNGFmTDVoYmZsb1RYcTF4IDlrcmFrNVcxbm9PWGxUS1hONzZPOUFDeUEwaE9JamhXYnF6d1JDVXJ1d0RRUzNHOGM2aThBelVSSExoRThmSEtYSm4wdkNUQzgxd1EgSHkvdFFYb0EyUUVrSjVDY0w0VmJTM0x1RzVKVFRYRzhueGwraG1DSjRoT1Z1a2JSc0NXdUh1bnh4T2RaNHNabXBBZVFIVUJ5bE9SayBDYzdYSk5XSnlsVzZ1VG5hYXR6YWc0UGd3TFdJajM3NTBVaDdxdEtUM2FaS3owWllUZ2pJRGl4VWNyVHNERE5KemxjbE9WK0ROT2V4IElEbGV3N0VuT1FnT1hLdjRaQk5kRmVsNUZYOXl5d3JPejBCODlML05wQ2M2amtJa1Bud1VBTm1CbzM3ZmVKS2pEK2FjSWpsZmplaDQgaVU0cnlja2FqcU96cUJBY3VHYng4Y2JadmFXRlZueXlzWFV2NWZtcFh2NlV1TXdWTlRObkN3b3BiUUd5QTJkSmMxYlNQdExodmtOeSBXcUtUOWVSay9UaVZVaFUvRTNCTDRoT1Z1VnBUWEZuU1k2WG5wNUVmS3o1MmlxdlMwNFAwQUxJRFo1V2NyRnhsOStOOEtVak9WL0g3IGNuU1NvNWNBZWxOVnBEZ0FOZkZwbGJpODBYV3ZweWNTbmt4NnRQaU1IemVTSHUvc0xZUUhrQjJZN1hza080WGNTczZZdUdTVFZaSGcgZkpXOEwwZFBWOW1tNDJ5cUNzRUIyQmVEcU14bG01bXQrT2dsaGVQTjYrZjVtZHhhemN6UlVSVFJLZXRJRHlBN01GdWFNNHBFZERobiBhM3o4YTNMelJzbXpucHlvSDZkM3N6RUFhVTkrTnBkTmUwWUJlUXVTSHR2UDQ4bk9ENVA0MkMzTnI0bjBVTm9DWkFlT0lqbGVYMDdXIGVEeEtpMDV3dm5WS3pxUHM3OG1KenFteXkvOUljUUFPVDNzaThkSDdlcUtlSGp1cXJzWG1oM25wcFQyNlJQYVdTQStsTFVCMllOTDMgUTFTeThpUkhsNnNla3hUbm0zbXBTMWs5a3BQdHh5SEZBWmcvN2VscFp0Wkp6NHVSSHR2UDh5TVJINis4TlVxVVBuc3JhMkltNVFFdSBCbEJLY3dZbnpSbmx3NXV1c3BMekxSRWRtK1pVSmFmU2o4UDNOY0R4MDU1b1NhRW5QYmFKZVJRYUxUcFIydlBMSkQzUnVIcFcya0o0IGJwdzFEd0dpNDBoT1ZMTFNZK1E2eVhsS1Voejl1azF6ZENLRTVBQXM4N2xoNi95Y2JkVkwvVnp4WVo0djNpU2V5bnlXL1VOOWY4aisgWU1MUHozLy8vUG14UnVtNWs3eWZSNXo3ai9RZ08wQ2FVK3JMOFViSXZ4cTUrZWFrT2Jaa3BSY0NJamtBbHlzOVcrZTU0MFBpWFZ1ZSArRHpKZmtsYjMzNG84Zm4xK2ZGK3laL1MxdkFwUEN2WjdTbXlLYzhLNFVGMmdEUkhUemQ1emNmNnlXZVVsMitCNkZqSnNXbk9GTW1oIDZSamc4cVhudmlFOW52am9oT2VuK2ppL1BqKzJKejJrUElEc2tPYVVTbFpSWDg3WFFITCtrcmczNTlGSmM2WklEb0lEc0R6cFdUa0ogaWljOXJjM3FGZW5SNVMyOWptTDgrR00venlEN1UxdWtQTWdPM0hpYW94dVF2YjZjckZ6MWwvaTlPVkhKS2p2V0Fja0J1THhmbnJicSBaemFUbm1paTAwdDducHpVNXpINHhlbFpmVXpiejBQS0E4Z09hVTQ2U3Y2VVNNNWY0cGV0V2lVcmIrc3hrZ053WFdtUEp6MzZ1ZWREIDRsMWRXWG5yMFhsdThYNlIraVg3ZTdoSWVaQWRJTTNaU1hPczVIeFZjdk9YSXp0WkEzSmxJU0NTQTNEOTBqTSs5MnlTcEtjbFBwN3MgMk9lYVp5VThwRHlBN055ZzZHUTdjN3lTbFUxeS9uSVNIUy9OaVVwV1NBN0FiVXFQeU83SWVyVEhLeXB0ZWRMem1DUTgrcm5uaFpRSCBrSjNybGh5UitHUnltK2JvZlRtUjVGalJpUnFRbzc0Y3UvWFl1NzhBY0YzUFI5NzBWaVErZDVJM01sZWtaL3o3YS9NOFJNcUQ3TUFOIHBUbmV6aHliNXZ3VjNGcHBUclZrSmFRNUFEZWQ4b3dNemk5a3RwY3drcDdXN1o2VUI1Q2Q2M3d5RVlsUEo5ZFBHbDREOHJkTzBiR24ga21kbldGR3lBb0JxRTdQZTkxV1ozbm9RdjV5bGIxN0tNKzdrZVN1a1BBZ1BzZ01MVEhOV0hXbE9KRG5mSlM1YmVXbk8rSG5veXdHQSAzcVRISzJ1dEpralBnOFE5UERibCtmM3h4a1dFV25oV1Jub29heUU3c0VEUmlVYktLMm5POTBCMGRObktubVcxVnBKekovVGxBRUQ5ICtTdnE1OW1ZbHoxN2VsclNvMlhIbHJiR2M3YTAzRkRXUW5iZ3pKSWpFazgyZUVjOTZONmNVV2ErTzZLanR5Ri9iYVE1VVFPeWtPWUEgd0lTVVJ6NmZSMXFUVzVIMFZIcDdXc3ROM3ovdkIyVXRaQWNXbE9ib3VOYzd1Tk5MYzdUY2ZKZjkvcHhSZEZxOU9aU3NBR0J1NmJINyBlWHFscDlxOGJGZGozQVVwajFmV1FuaVFIVGloNkVRajVWRnZqaWM2VWRuSzdzMnA3TXhCY2dCZ3pxVEhQdDlGU2JiOVJTOFNuM3Z4ICszaWlYK0RlVGJLek1mY1o2VUYyNElpaW8zL1l2VFRuVWZ6ZW5PK081R2pSMFUzSVh1VHI5ZWFJMEpjREFQTSszMldsclkyMHo5MWEgTjFLZXFJY24yZ3YyWWRJZFVoNWtCNDRrT1dKK0NQVVB0bTdLaS9ibVpLSmptNUM5TkNjYUp5Zk5BWUJUcFR4YjlmcmczTHo5UExhZiA1NzRoUFZHSi9zTkplQkFlWkFkbVRuTmFaU3ZkaEd6SHlTUFJ5WnFRMThsdk9xUTVBTENFbEtlMWhYbWR5TTU5UTNac3lmN05TQS9DIGcrekFrVVFuMnAxVFRYTnNmMDQyVWs2YUF3Q1huUEpFbTVpajNUdnJKT0VabndmZmtwUkgxUHNBMllGTzBmRU84QnhGWjV5VzBxZVQgUjVMelhmYVhCRVpOeVBUbUFNQVNueHNQVFhuV1NuRHV6ZXRXZEtLUzFwdjYvUFR4SUR0d2dPU0k3RzhSamNwV1VacnpYMUl2VzQwZiBtMGtyQUxpRTU4bWVsQ2VUSGs5MktpVXQyOGZEUGg1a0J5YWtPVkYvanQyZDQwMWEvWmQ2cVJjRlJydHpzcEZ5MGh3QVdPcHpaay9LIFk2WEhreDlQZHJLbVpkdkh3ejRlWkFjbWlJN1huNlBMVm5wdmpoWWRtK2kwZHVkazB3ZWtPUUN3OU9mT0xPWEpraDZiNEZSbEp5dHIgQ2NLRDdFQmJkS0w5T2Q3dW5MOGN5ZkZFeHp2QU14b3BIMGh6QU9BQ24wZWpsTWY3UlZKTGo1V2Z1MFNHaG9iMDBMaU03RUNINk9oRyBaSHUybFMxYldja1pTMWM2MGRGbEsxMmpIc1NmdGhKRUJ3QXU5UGswMnI0Y3BUeGVlY3ZyMjdrTHBNZjdIQ0kwTGlNNzBCU2RWbitPIGwrYm9STWNiSzg4Mklkc2ZVaVFIQUM3NXVkVkxlYWFLajVVZ2IwckwrNFdSeG1Wa2h4OUc5VkpQWEdYN2M3S3lWU1E2M3BKQW1wQUIgNEZhZVkzdWxKNU9jZFVOMnN1ZFVHcGVSblpzWEhmMURGdTNQaWNwVy81TDlIVHJSV0xrVkhkSWNBTGlGNTF2dkpIWDk1ejJUVzczbCBMSHVRS01LRDdOek1ENTdlb1dNYmtXMS96aWc2M3p0RlIyOUQ5bzU4UUhRQTROWit3ZHpLL2c2emJPVkhyL1MwOXBNaFBNak96Znl3IFJhUGwzcUpBcnovblg3SmZ1c29ha1hWL3p1RDhnQ002QUhCTHo4TmVXY3Q3Ymg1ZnYydEl6eUJ4S2N1NzJVa3RoQWZadVNuUjhScVIgbzdMVitMbzNjZVgxNTBUVFZrZ09BTnk2OEZTbXRqTHBHU1FmU1k5U25vMTZpZkFnTzFjdE9ycDBGZTNQc1pLalMxZjY2QWY2Y3dBQSBwZ25QSUgxOVBJUEV1M3BhNmM3NDhXMGZEOEtEN0Z5TjZFUTdkUFRFbFQ3YlNndk8rTG9WblZZak1rc0NBUURpNStkcUg4L0tQS2ZlIEZXU24xYitEOENBN1Z5MDYzZzRkZlZyNWZ4bko4VXBYV25TODA4cnB6d0VBcUQxWFYvcDRyT3pZZG9US1ptWHZ1ZmdENFVGMnJsMTAgbmdMUitaY2pPOTRPbmV4OEs4cFdBQURUaENmcjQxazVNak1VYmw1aTVJSHdJRHNYSnpyWnNzQm90UHhmNGljNjNtaTVGUjM2Y3dBQSA1aEdld1pHTjZnYm15bFJXQnNLRDdGeVU2R1RMQWtmUnlVcFhOdEd4b21NbnJ1alBBUUE0L0RrODZ1TnBUVzZ0R3RMVDg1eU04Q0E3IEZ5VTY5dFJ5S3pyZkplN1JxWW9PL1RrQUFQTStuMGQ5UENMdGRHY2wwMU1kaEFmWnVWalJ5WGJvZkRlQ1k1dVJJOUc1UTNRQUFNNGkgUEt2Q3JiVkZHZUZCZHE1R2RQUldaTzh3VDY4Wk9kdUtQSDY4Nk1SeUpBY0E0SGpDRXozUFZtUW5lcDZ1UEdjalBNak9va1hIanBhUCBvdk5mZ2VoOEQwUW4yNkdENkFBQW5FNTRkT055cTVlbmRlM29BZUZCZGhZdk90OEMwZkVtcnJ5dHlHT2l3Mmc1QU1ENWhFZU05TmkvIDAycGlQdlI1R3VGQmRzNG1PanF5OUpxUjlXR2UzclNWSFMwZmQrallaWUdJRGdEQStaLzN2VWt0NzNuNFdNL0xDQSt5Y3hiUjBSczAgYlRPeUp6ci9SL3pSY204cnNuZHFPYUlEQUhEZWE0QnRYTDZUL1Q2Y1ZmRmpJVHpJemtXSWp0MmpZdy8wdEtLalpTYzcvaUViTFVkMCBBQUNXSlR6REVhUUc0VUYyenZwTkhoMEI0WTJYVzlINVArcDlWblFlUDIrNkVabGxnUUFBbHljOHAzaU9SbmlRbmFOSmppMWZlVWRBIFpLSmp4OHRaRmdnQWNKM0Njd29RSG1UbjdLTFRtcnI2Sm45MjZMQXNFQUFBNGJGc0MrOUhlSkNkV2I2UjlldTZJVGs2NnlxYXZQcVggRVIwdjBXRlpJQURBN1FwUGo2eThJenpJenB5aUUvWG85SWlPYmthT1JJZlJjZ0FBaEtjaVJGc2xQUHJ6SWp6SXppeWk0NDJZYTlINSBMdnZuWEgyWDNXYmtKMFFIQUFEaDZaQ2E2SDIybklYd0lEc0hpWTRlTWMrT2dmQU85R3p0MFVGMEFBQVFub3I0dEhwNEVCNWtwMXQwIDdIWmtMVHBlNmNwclNLNU9YU0U2QUFBSWo1VVg3MlYwRTBkNEFObHBpbzR0WGRrVHpQK1MrQVR6c2FUMURkRUJBRUI0T29XblIzS3kgMGhiU2crdzBSU2NyWFkyaUV6VWoyNmtyZmFnblc1RUJBQkFlU2FURWs1eU5lZW5KanYyNytuNGdPeENLVG1WcFlLdDBOZmJvZUp1UiBFUjBBQUlRbkVwOU1kaUw1MFRDU2p1enNTVTdQMGtDdlQyZDhlMHgwdmdyTnlBQUFYR1A2aFNlU0hYdkxraDVHMHBHZG5XOUMvYnBYIHZ2SkVwN1V3TUJPZEFkRUJBRUI0R25JVENVNGtQZEcwRmhOYU55NDdsYVdCZHNROFNuUnNRN0xlcGFOTFY0Z09BQURDNHdtUHlIN2YgVHEvNFJMMDhOeitodGI3aGJ6cVJ1SHhsUjh3ajBkR3lZMFZuVEhUV1F1a0tBQURxSmExREVoNHY2Ym41Q2ExYlQzYWlFWE5idnZvdSArMGRCZUltT1hScW9TMWNEb2dNQWdQQklMZUdKbXBOLzN6N01yU0k3TnoyaHRiN1JielNiNk9qRmdZK1NOeVRybTdkTFIvZm8zQm5KIEFRQUFpSVJuSzM5NlJrWDZrNTJzcERWeWt4TmE2eHY4QnRPdlIzMDZudWhremNnc0RRUUFnRU9GNTA2OXZ2MjhybFNUblVyS2M3TVQgV3VzYis4YlNrcVBMVjE3cHl2YnA2RFRITGcxRWRBQUFZQTdoR1pTTWlQamxMQzAxV29CYWZUd2pOOWV3dkw2aGJ5Z1J2eUg1WG5iTCBWN29oT1pLZDZMd3J0aU1EQU1BaHdqUEt6cDBqTzl0QWNxS2JMV2xwd2RtbyszRDEwbk5yeVU1MjVwVTl4ZHhPWDQwTEExc0hlN0lkIEdRQUE1aENlU0haMHV0TVNuYWlrcFV0WVYxL09XdC9JTjVHVkhYdVNlV3REc2k1ZDJha3J2VXVIUkFjQUFPWVFIdjNMK2RSa3g1T2UgbTJ4WVh0L0FOMCtQNkhoOU9yWkg1MnNpT2l3TkJBQ0FPWVNuc24vSFMzZmVQMjllRDgvTkhpbXh2dkp2R2lzNlkrbHFyVVNuMWFmRCBkbVFBQURqWGRVdzNMTjlMTzkxNWw3NlVSK1FHR3Badklkbnhqb040VUxJVDllbFVSWWZTRlFBQXpIbmQ4aWEwdklabFBZWFZrcDFOIElqdjY1VldtTytzci9tYXhzdE56a25sRmRMenlGYUlEQUFESEVoNVBkcllTOSs2OHkyNVp5NXZRMGg5cmRhM0NzNzdTYnhKUGRIU3EgTTRxT1BmZnF1N1NQZ2REblhiRWRHUUFBVGlFOGVpUzlsZTU4T0pMVEdrdS82djZkOVJWK2MyalJXY24rNGtBOVp2NlhFaHN0T21NeiBNa3NEQVFCZ0tjTGpUV2hGNmM2NzFOTWR2WFBuS3Z0M3JqWFo2ZDJuWXhNZHZSM1pubUxPNUJVQUFKeERlTElEUTIyemNpUTdudlJFIGg0ZGVUYnF6dnJKdkNDczdla3V5UHZkcVRIWCtTa1RuYXlJNkpEb0FBSEJxNFJGMWZkdCtYcGZzZEZiV3QrT1Z0anpadWJyK25mVVYgZlNONG9yTXVpTTczaHVqUWtBd0FBRXU2MW9uRURjdTZmK2U5Y0l1a1IvZnZYRHpYbHV4azAxZTZJZGxPWDMyWCtDaUlyQ0VaMFFFQSBnRk5kNDZvTnkxNy96dHZuTFJPZHF5MW5yYS9rRzBBUzBSbjdkTEpVcDNMbWxWZStBZ0FBT0pmd1JBM0wwV1RXZXlBK1dlUHlWWlN6IDFsZndIKytKVHRTbjg2MGdPalFrQXdEQUpRaFAxTENza3hvck9HOUdkdDRjNGRGVFhsZFJ6cnFXWk1mS3pyM3NwenFlNkVSblhvMy8gbm9aa0FBQllxdkNJK0EzTEQ3TGJ0L1BoaU02cnRFdGJWMVBPV2wvNGY3Wkl2anp3VVhZUCtiU3k4MDNhUjBIUWtBd0FBRXUrRG9ycyBOeXg3bytqdlNuUmVaVC9sOFVUbktzcFo2d3YvRDY0Y0IySExWL3JsWDBwMGRLcGorM1FFMFFFQWdJVmRCN09HWlU5MnNuVEg5dkRZIHB1V0xMbWRkZXJKVGFVcitKdnROeWJwMDlTVVJIZHVuQXdBQXNGVGhzZGRETFR4ZXN2TnEzcmF5Y3pYbHJQV0YvdWVLeEUzSmR2cksgcGpyMktBZ1dCd0lBd0RVSVQ3Unc4Rkg4ZE9mVkVSK2I4RnhGT1d0OWdmK3BudWlNaVU2VzZtamhHVVhuaXhLZFVYYVl2QUlBZ0VzViBIakhDRTZVN1ZkbTVpbkxXcFNZN3ZlVXJLenJSUGgxRUJ3QUFMbGw2dE94bzRmRjZkMTRENGJtNmN0YjZBdjhUSytXcmI3TGZxOVBxIDB4bUVQaDBBQUxoYzBmRWFsa2ZoZWZpVWxpZnhlM2RzRDg5VmxiUFdGL1NmNklsT3BYeGxSVWZ2MDlGajVuZENxZ01BQUpjdlBQcDYgcWFlelJ1RnA5ZTVFQ2MvRmxyTXVMZG1wbHEraXB1VHNnRStiNWlBNkFBQndxZElqc2p1T1hwbk9lZ2xrNTEwdXZKeTF2cUQvdE94SSBpS2g4MVROOVJma0tBQUN1UVhSYTQraVBTbUplRzdkczRlREZsTFBXRi9DZmxvbk92ZnhaQ09nZDlPbjE2VEJtRGdBQXR5QTgrdnFwIHkxbjNTbmhzT2N1bU85R0c1VUV1cUp4MUtjbU9scDFCZHN0WCtraUl2OFJQZGI0Nm9rUDVDZ0FBcmwxNlJOcmxyS3gzSityZjJacWIgbFN4a3AvTS9TU1ErRXNJNzBidzMxYUY4QlFBQTF5ZzZQZVVzcjNmblJmYjM3K2gweCt2ZldTU1hVTWJTaVk0OTVQTkppWTVOZHV6MCBGZVVyQUFDNFJlSFIxOU5XT2N1VEhTL2hzYktqcDdRV0p6M3JCZjhIU1NBNnJWUkhOeVJUdmdJQUFLVG4vK09Wcyt5eVFTMDNMK3JtIGxiTjB3ck9TQlRjcnJ4ZjhueEtObWx2UmlXU0hRejRCQUFEUnljdFpldG1nN2QzUm91TWRLV0hMV1l0dFZsNXlzaFB0MU5HajVsK2wgUFdadWx3ZFN2Z0lBZ0ZzVUhuMTl6WllOZXNtT3Q0UEhHMGRmWkxQeWVvSC9JZUxZcDkycEUvWHFhTkhSWjE5UnZnSUFBS1RuL3pPbyBsN3FjOWY1NTdYd0xaR2U4WmVuT0lwdVZsMXJHc3IwNjNwRVFYd1BSYVIzeVNma0tBQUJ1VVhSc09XdE1kL1E2bDNkSGRuNTkzcktFIFp4U2VRUmJZckx4ZTJIK0VscDN4UDZJMWdmWE5FUjF2K3VwT0tGOEJBQURDWTRPRk1WVDQrTHgyWnFXc1NqbHJjYzNLU3l4alJlV3IgU3FwalJlZGUvQU0rRVIwQUFMaGw2Ukg1c3dYNVR2Nk1vdXRtNWRmUGE2dE9kM1RLRTZVN2kydFdYaS9zZ2UvZHEvTk40ajZkZTlrOSB6Wnp5RlFBQUlEcTdNcUtGeHc0QzZYVEhpazYyY0hCeHpjcnJoVHp3V25Sc3JQYWdIdml2Z2V6MGJrbEdlQUFBNE5hRlI4dzFkNXpPIDBzM0tXblk4NlhrTlpHY2pDMHAzbHBUc2VLUG1hOW1kd1ByaXlJNFZIVytuRHVVckFBQ0FPR3dZbktEaDBRalA3OXV6SXp0ZU9XdE0gakJhUjdxd1g4a0JidTR6S1YxK1Y0R2pSMFR0MW9rUUh5UUVBQU5pVkR6c1VaSStTMEpOWnZ3WG5MOWt2WittRXg5dTlJMElaS3ozViAzRFltMjBUSEd6UFh2VHBNWHdFQUFMU0ZaMHhpdk9rc2ZRMytwVjVXbXBWMUtldHM2Yzc2ekEreWZsMkx6bHI4Q2F5djBpNWZhZEVaIEVCMEFBSURTOWJqVnJQemlpSTVPZUd6dnp0aS84eUdVc1pyVFYxOGN5ZmtxL1UzSkFBQUFzSDhkOXBxVk4rcDYvQzUvMmtsMGsvS3ogL09uaDhmcDN4ckxZMlU5Rlg1L3h3ZFd5czVMZHBtUnZXM0tXNnRqeUZVM0pBQUFBMDY3TDNwbVU5cHI4TEgzbExKRWJMMk5GcVk0KyAyYnpTcStQMTZTQTVBQUFBN2V0eHRGbFpCeEJ2bjlmZUxOMFpoVWVYczhieTJOblNuZldaSGxSdGozWUM2MTZKVGxUQzhzcFgrdndyIFVoMEFBSUREcnM5ZXVqUEtqazUzdkhMV21PNjh5d0xTbmZVQ0gxQ3ZWK2Vya1IxdnB3Nmo1Z0FBQU5Pdnkzb1VQV3BXMXNMenl3aVAgVjg3Ni9XL1BudTRNWjVhYzFxajVWMGQwOUU0ZGIza2dvK1lBQUFDSFhhT2pFdzMwTmZxTENTUzhZNXU4QmI4bnZ6WXZvWXpWU25XaSA4cFgzUURKcURnQUFNTTkxV3FjN252RDh2aTZQZTNlZTFkdS9YMTlVdWpPYzRjSHpVcDExWUl6ZUJGWW1Pa2dPQUFEQTRkZHFlNzF1IFhhdDFLTkdxd0p6OFduM3VNbFpydE0xNzhPd0VGdVVyQUFDQSthL1hxK0wxMnJ0bTYrdTFIU0k2dWZRTUozelFyQ1cydGlYYkJZTFIgcG1RV0NBSUFBTXgvemJiWDdhaFpPUW9uRnBQdW5MT01GZFVBSTBQTUxKRlJjd0FBZ1BtdjI2c0oxMjNkZHJLSWRHYzQwWU5sSHpqZCAzYTNQM3ZoaXpGQy96cWc1QUFEQTZRT0tiTkhna3lNOFgyUmhrMW1uTEdONVVWaXIyU2w3c0RnV0FnQUE0SFRDWTlNZEw2ekllbTNQIGx1NE1KM3FnUlBKR3A4d01IeVh1MVNIVkFRQUFPRTFnMFpQdVJPdGl2TERpYXNwWW5oWGFjN0Iwc2xOdGNHSUNDd0FBNFBpaFJTWGQgaVVJTGZSMzNKcW5sMk5meFU1YXhzbTV1VDNTaU9mM29RUUlBQUlEVEJSZmVaRlowTGJlbHJKTk9VdzlIZm1DeUIraEJkbXQ5MllNVCBwVHBIdDBFQUFBQkVaK2Q2SGsxbTJVTzhLeWNmbk9SNmZvcWVuY2dFN3lVdVlla0h4azVncllSZUhRQUFnSE5JVDdYLzFtdEowZW5PIFNmdHZoeU0rSUpFRmV1ZGdWVklkcjN0YkJPRUJBQUE0aGVpMHJ1dFpPYXQ2cnVWRnlZNTlZS0xUemFOVTU2d0dDQUFBQU9uMVBldmQgZVpScHJTbEhHemdhanZRZ2lDTTZVK3h2M2JBL2hBY0FBT0Qwb3FPRnh4czZlanBRZUJZdk85YjZWcks3UkxEVnF4T05xSkhxQUFBQSBuRmQwdkRERERoOTV3dk1rZmFXc1dhL3p4eTVqWlNXc0h1dTdFeWF3QUFBQWxpSTkyZkNScmQ0OE9jSVRYZU9QRW1nTVIzZ0FKSGdRIDdCTEJMd1hyMHcvQ2dPUUFBQUNjWFhRa3VkYTMrbklmcFQ2R3Zsalo4WXpQSHZwcDQ2MG5xY1ZiVnFZQUFBRGdmTktUbGJLOFVmVHMgV3U4SnoyelgrbUhtTDF3a1B2UXo2OVhSSlN6ZHE4TUVGZ0FBd1BKRXg1T2U2SVFFVDNwc0ZlZW92Ym5ITEdQWlhwMnNVOXN1RWRRbiBvM0lHRmdBQXdIS2x4MTd6ZGJxakF3NmQ3TFFhbFdlOTVoK3pqTld5dk9nTHQxLzAwWmNOQVFBQXdHVFJhUzBaaks3N2V2SjY3Vnp6IEYxZkdxcFN3SXNQejZuY25tNzBIQUFDQWc2Ny8xVWJsVEhpTzJxZzhuT0FMOXZwMXJPaEVSME13Ymc0QUFMQmMwYWtLejVNalBDY3IgWlEwemZyRWl0VlNuOHNYcWNYTlNIUUFBZ09XTGo3NytleWVpUjJISDBhczZjNWF4cWlVczc0czkrVFpGQUFBQU9Ma0Q5S3ljbWMwQiBqbFhHMGsxS1VjMHU2c2Era3lNMUtBRUFBTURzb21NOVlNN0FZNVowWjVqcGk0eEV4MFpZaitxTE8rc0pxQUFBQURDNzlMUW1zL1FKIEN0b045RFQyblN5d2pPWE4yZXVOeVpIUjZiMDZkb2tnNCtZQUFBQ1hKenFWZE9jeGNZRk1lQ1o3d2R3OU85NVpXQzNaT1dwMEJRQUEgQUNjVkg2OVJ1UkorWkgwN1ordlo2ZG10OHloeHFwT2RpM0h3RndnQUFBQW5FNTNldlR1UGtsZDZGdE96NDFsY0ZsdDVqY20yWHdmSiBBUUFBdUN6UnNYNlJwVHRlQ0tLZHdKNmljSkFiREROOFVUMEdsOVhuYUV3R0FBQzRmT25KRmd6Ym9hWEh3QXZXTXVOeXdXSEdMNmpTIGpPUjFYbWNia3dFQUFPQnlSQ2Z5Zyt4UThLT1hzdVlxWSttUjgwcFV4Y1prQUFDQTZ4YWZhUGRlbE81RTI1UVBUbmlHaVYrQVoyNTIgQ2l0clFvcStHTy96QUFBQXdHV0pqb2hmK2NtRXA5WGlNdGtOaHBtK2tHeDVrRmZHeW5wMWtCd0FBSURMRjUyb3AvZGU5bGZUVkU1ViBPR3ZQVHJSSTBCT2VCL1Yzc29nS0FBQUFMbDk4Qm1tdnBzbWFsR2NwWlEwVDduaG1iT3VHclhtZDF1eldBUUFBdUQ3UjhWd2g2dTA5IGFpbnIwSjRkejlhaU1oYUhmZ0lBQU55RzZOaTM5VlNXRGtZaTRabTFsSFZJejA2MEVqcWJvZGNsck9ob0NJUUhBQURnZXNUSEsyV04gQWNtajhZYWpsTEtHempzc3NoOU5lYkdVZDhjcmgzd0JBQURBOVloTzYvaUlrNVN5RHVuWjBhYm1iVWQ4TUs5bmpjbmRkeHdBQUFBVyBMVHJXTjRaTzRabXRsRFcxWjhkYkZCVGQ4Y2pRS0dFQkFBRGNodmhFTzNkT1VzbzZwR2NuTytUTDN1NkZFaFlBQU1DdGlrNDBsVlVwIFpVWEp6dXc5TzYzekxucFNIVXBZQUFBQXR5RTYxamt5ZDRqODRlQ3pzZzVwVVBaU0hTL1o4WHAxdkkzSkNBOEFBTUQxaWs5V3l2TDYgZmFOZTMrNkVaempDbmZWa0owcDFFQndBQUlEYkVKM1dnc0ZxMzg1UmVuYXlFbFowMW9XWDZzeDZxQmNBQUFCY2hPall0N05KN3NvSSBlbmRnTXFWbnh6WW1aNmxPZENjUkhnQUFnTnNUbjBIT01PRFUyN09UTlNmZlMxK3FnK0FBQUFEY2p1aDR3VW5tRWVOdExmNlptaUxGIDBHUkt6ODVjL1RyTk93Y0FBQUJYSVRwV2VySUtVWFRNVk5UN2UzQ0RjbXZrUEl1ZnNtVkFpQTRBQU1CdGlrOG1QRldmbUwyTTVRbFAgYStUOFh2TGpJVmFCOFFFQUFNRDFpbzVJZk9UVTJqaUU5WWs3eVNlN1Y0ZklqZ1FXMW1wT3pzNjBRSEFBQUFCdVUzU2lZNmNxZlR1VCBqbzNvbFIxN2F1bmEyQmNqNXdBQUFGQnhDdTl3VU9zVmxVclJRVDA3WHFkenRGK25JanFNbkFNQUFDQTZWbmlzNkhoZW9aM0M2d09lIExEc2k4U0xCcUlSbGJZd1NGZ0FBQUhpaTAycFU5cEtkU1VkUFRlM1o2ZG12TXdpVFdBQUFBTER2RmxHamNsVEtPa3FEc3Bmc2pNSnogN3dpUE53OS9oK2dBQUFCQTRoZFJzbE5aWjlPc0dnM0puZkRNUzkrWnRYTkhLcWVjQzlJREFBQncwNklqMGo1Y1BDcGxlUzB5TWtWMiBSUGFqb1ZYeHpsUWFrd0VBQUFEUnFTd1l0SDdSU25kV1BiSWpnWG5aemNuZUhkSWxyRkx6RUFBQUFOeWsvR1I5TzYxa3A5UzNVKzNaIHljcFlXblNxMWdVQUFBQ0lUclZ2SjlxM003bEIyZHV2VXhrTlcwdTlub2IwQUFBQTNMYm9XTWRvdGNyWVFLWGN0ek4wM29ub2prU2kgUTc4T0FBQUFaSTdSS3p6ZG5sRnBVQjdFYjA3MmhLZDFGaGJDQXdBQUFOWTNvc1hGRmVIeFBHTlZsUjByUE40Qm9GNnF3eUpCQUFBQSBxSXBPNjZRR0wxanhYS043R3N2K0l5OWFpajU1NjRnSXBBY0FBQUJXZ2ZCRXcxQlpiM0JheWhxQ1QyeWxKL3JrYTRrbnNKakNBZ0FBIGdLcncyQkYwYnlES0JpdWxKdVhXTkpiWG5PeWxPNU82b3dFQUFPQ21KVWY3eGlweERTOWs4VTQvZDkyalZjYXFOQ2RIeDY2WDU5OEIgQUFEZ3BzV25OZjA5SldCWnRXUkhwRFoyN3BXeHVvOWVCd0FBQUtSSDZxMHpYUUhMMERBc3J6djZybE4wQUFBQUFDTEJFYW0xem1TOSB3bW1UOHVCOFFuc25Ldld6TzRuUHFrQjRBQUFBb0NVNnZYMDc1Y1dDd3dHR2xVMWlNVzRPQUFBQXZmSlRGWjRvWkJGUGVySXkxdEQ0IGhOa0lHTk5ZQUFBQU1GVjBvbVhHV2Q5TzJLUmNtY1k2Sk5taE9Sa0FBQUJhb2hQNVIrWWRXbmk4bnAxMEdpczY3YnoxaVdoT0JnQUEgZ0VPa3B5ZG95WHFGM1RMV0toR2Q2aWRrY3pJQUFBRDBDbzVJdlVtNVVzcmFvelY2M2hLZE8rbGMyUXdBQUFDUXlFOTJDSGxMZEZ3UCBpVWJQbzFUSCs0VDA2Z0FBQU1EY29tUDdkdTdNNjYwbTVmKzhISkpQTk40eXlibXJmaUwrRHdFQUFHQ2k5TndaLy9BOHBObXpVeldyIGlsRlJ5Z0lBQUlCZXdjbEU1ODRSbnRhUkVmLzV1TmxTd1lyb2xKdURBQUFBQUJxaUkrSUhMaTNwU1JjTERoT3NxbUpUSkRzQUFBQncgaVBoazZVN1hNVlUyaWZGNmRxSjBwN0kxR2VFQkFBQ0FYdUdKSnJKYXdVczZqZVd0Vng0NlA4bEsySzhEQUFBQTg0aE9SWG9HOFpjYSBoMldzeUtpR3hpZUpHcE9aeEFJQUFJQkRwR2ZvY0pGU2czS2xoRldOalJBY0FBQUE2QlVjNlhTUlRIaEt5YzdRWVZTVXNBQUFBR0J1ICthbWtPNjBHNWRWUXNLcEI4a1FuTzFvZEFBQUFvQ0kybm9jTUVxYzdtWXMwajR2SVRHb29tQlRTQXdBQUFIT0lqeWM2MVhUblB6NHkgQkIrNEZSME4wbzZPRUI0QUFBQ1lLanlWZ2FsU3BTazdHeXY3b05tWUY1SURBQUFBY3duUGtOeWkvbUVSMDZBYzFja3ltL0lzQ2dBQSBBR0F1eVJHcGh6RHBkUGpRWVZHVlppQjI3QUFBQU1DYzBxTWJsZThrRDJCY0p4bWNEeWlCUlhrdjA5Z0lBQUFBb0ZOd3JFdGtqY290IDBmbGZldmZzZUtLVEhyNEZBQUFBTUZGOHZIUm5hTnoycHNPckc1UXJKZ1VBQUFCd2lOeEV3aE9KVHFXTUZZNmVWL3AxbU1RQ0FBQ0EgWTBsUEZNQ3Nla1JIcEQyTkZTMFZiQjY2QlFBQUFIQ2c4RlNrSnd0Zy92Zlcyck1UQ1UvTG9oQWVBQUFBT0ZSNFdzdU9vL2Z0TURRKyBjS3NCaURJV0FBQUFuRko4dXIzRWpwNUx4d2VqT1JrQUFBQk9MVG1lcDZUVDRhMWtwOGVndkRzSUFBQUFNRlZ5NUFBdjJWc3FLQkkzIEtLOGtUblRZbWd3QUFBREhsQjZSV251TjE3TVRIaGRSRVI1RUJ3QUFBSTRwT09JNHlhU3FVelE2dmtvK09FM0pBQUFBY0FycHNjRksgSkRpbEJtV1JmSHc4cXAxbEpnWUFBQUF3dC9pMFJ0RDNmQ1k3RzB1a1hyWkNkQUFBQUdBT3FhbUlUaVE4N3JUNFVMU29TSVFRSFFBQSBBRGlXOUt3YXd1UDFGdS85KzZGZ1Zpd1BCQUFBZ0tVSlR6WkV0ZU15MGFubmtyd2VTUkVBQUFEQXNjUW51NGtrUjFnTmdiU3NpamVFIEJ3QUFBSllnUHRIZkxXMVFSbmdBQUFEZ25HSWpqbTlrTFRjN2Y5N2FvTnl6VzRkZUhnQUFBRGltK0lqVTJteDJHQUpMeXNhN2FGWUcgQUFDQWM0aE85TDUwOTU4OTlUeGJ5YndxQ2cveUF3QUFBS2VTbnVhZlpVc0ZxNnVZQVFBQUFCWkxsT3hFMndtOVUwVVJId0FBQUZnQyBxMGgyYkFuS1MzS2FKNG9DQUFBQUxFRnVQTm5SLzhCclVLNlVzeVo5Y2dBQUFJQmpZNWNLdGtiT0k5RmgzdzRBQUFBc1duWWk0YWxNIFlDRTZBQUFBc0dqWmlUWVFpdFEzS0FNQUFBQXNWblpFYWh1UlNYQUFBQURnWW1Vbms1aktHVmdJRUFBQUFDeGVkZ0FBQUFDdVduYTIgd2QvWnFqL0wvZzRBQUFEQVltVm4yNUFjS1FnUEFBQUF3Q0psWitzSXp0WjVPN29CQUFBQUxGcDJ0T2g0Z3JQNXZFV2lRK0lEQUFBQSBpNWNkVDNRMmdmZ2dQQUFBQUhCeHNpUGlsNjgyNXBZSmo1aVBCUUFBQUxBSTJiRTlPNTdVV09HaFp3Y0FBQUF1Um5aRTRuTFZKcmw1IHBTOEFBQUNBVTFGeWp5SDRoMTZha3pVcEF3QUFBQ3hTZnFKa0o1ckdhazFtbFMwTEFBQUE0QlFNRWk4TzNCWWxCN2tCQUFDQVU3Q2QgOG1mVlBUdmU2OTRuUVh3QUFBRGdGSktUVlpXMmtleDRvbFBkb0l6a0FBQUF3Q21FWnh1OEhqSWtSbFE5SmdMUkFRQUFnR01KVHVRYyAyOFJiZHY1OENQNWk5RUdrOFQ0QUFBQ0FVd2hRcFg5NGEyVkhIRnZhU241UUtBQUFBTUM1QkNjN3ZQdy8vM1lvZkdDUk9Oa0JBQUFBIE9KYmdTQ0l6MGFrUGFSa3JraGg2ZGdBQUFHQkpvck5KaEdmdjMyZGxySmJZZEhkREF3QUFBQlFrSjNPUzZFaXJjRTFPZE9wNTlra1EgR3dBQUFEaTFCSG1uTzJTblBQem4zdzZTTnlGdkc4S0QrQUFBQU1DeEJVY2tQcUE4TzcvVExXTjVjdU5GUkZFVEVPSURBQUFBaDBwTyBKRDNiUkhvMmdhTTBqNHZZU0h3b0tNSURBQUFBcHhDZmx1Ulk0ZG41OTVYaklsbzFzYXpYQndBQUFHQ0s1R1NUV0pWVTV6Ly9ma2crIGFPdURaWWVDQWdBQUFNd2xQZHZBUTdLK25mL1FTblphTVJITnlnQUFBSEFPNlNsN3lkRDRZUGFEZmtpaEVRanBBUUFBZ0JrRnB6SnkgN3ZYc3lDZzcyWlpDVDNRaTRVRjBBQUFBWUM3UmlhU24wa2U4Y3hzQzBkbEludWhReGdJQUFJQmppazVMY3FyVkpuZURjcGJzWk5JRCBBQUFBY0tqa2lPTW1VY21xSkR4RDR3TnZwRC9sQVFBQUFKaERmaXBuWWtVOU8zc055dEh4RURiVnNYMDcyWEpCQUFBQWdGN0JzUzRSIE9VbHBlN0tXbmVnRGVrbE9KZGxCZkFBQUFPQlE4YkdwemtkRGVzS2xndEUwbHRldjgrRjhBaHFVQVFBQVlHN0o4WVRIYzVLc2w3ajcgdUlqc2c1UHFBQUFBd0RHa0ordlBzVjdpdHRWRW8rZlpqaDN2QXpPVkJRQUFBSE9Mam5hU0QrZTJxZmhJNWRUemo4SW5ZZDhPQUFBQSB6Q1U2SXZudXZ5NGZhUjBYa1gzZzdCTUFBQUFBVEJFY0t6cmJvdWlVRHdLVm1UNDR3Z01BQUFCVHhhZlZPOXdLWDNZK25yZEJXWndQIHZwSCtaQWZ4QVFBQWdCN0pzVzhmWE1MNnplQjhncFpOdll1L1lKQlNGZ0FBQUJ3cVBKWG01SGZwQ0Y1NmUzYmVDMGFWV1JvQUFBQkEgVlhvcXFZN1hXclBqSU5sU3dXelU2MTMyRXg0V0RBSUFBTURjb2hNNXlIdlZRYnhrUnlTdmswWFJFYnQyQUFBQVlJcmNpTFFYRzcrTCBYMkZxQ2s5MjZybVg3cnpMdEhJV0FBQUFRRVY4V28zSlVYVXBtc1pxSGhlUk5TaFh5bGhNWkFFQUFFQkZjaUxwaVVUSEJpK2hmd3dkIFpwVjlvdXlzTEFBQUFJQ0s4R1NCU3lRNlVhcXpjK3I1M2p0bC96aDFMOVh4ZW5lWXlBSUFBSUE1cENkclVQNUlIQ1JzVVBiS1RhM3ggY3lheUFBQUFZRzdKOFJZYnZ3YzNMVHBoWmFtM1FibXliMmVENUFBQUFFQlJjT3pMVm5OeU5JMVZIajIzd3JNeHdwT1pWY211QUFBQSBBQUxoOGNLV2ludWtZY3ZVWktkbi9KeUpMQUFBQUtpS1QxWlZ5bVFubkFRZkdwOHdtOGJ5YW1icDZCY0FBQUJBSWpsVjkyZ3RObTZlIGpSVjkwcGJzUko4VTBRRUFBSUJlNGNtOHcydFFEZ09XYVBSY0FzT3luK1F0a0I0a0J3QUFBRnB5WXlXbktqcGRKemkwR3BUSG02MmIgdlNXaWt5VTdDQkFBQUFCRXdwT1ZzRHp2ME03Uk5YcXVxZmJzZUovWVBXWWRBQUFBSUJDZmJWRjBzcEJsenp1cXlZNDMvdlVtdXdsUCBOdStPOEFBQUFFRExPV3pJNG5sSFMzVEVla2MwZWk0ZG4vaTk4TWtSSFFBQUFOZ1RFWm5XbU95VnNVU0taYXlzU1ZsLzhqZlpUM1l5IDRRRUFBQUNReER2c1FKVG5IRDFuYzRheUk0NXBSWDA3YjhrZHlNN0pRbjRBQUFBZ1duZmo5ZXRrd1VyejVJYWhjRWV5V0tsSGVCQWQgQUFBQThEd2oydXYzNWdqUGVHc3RGQ3pKVGxUS3NwTHpLbkd6TW4wN0FBQUEwQktlaXVpMFBFTmt3alNXRkd3clNuWTg0d0lBQUFESSBsZ25hWWFpVzZEUVhDa2F5MHpveXdpdGp2VW90MmFHY0JRQUFBRm1vMG1xVnlaS2RzdXg0ZDZneWtVWGZEZ0FBQVBRSVQ4VXhvbmFaIHNsOE1uWGZFczY1WHFkZlRFQjBBQUFEUW5wRlZqMXA5d1NYaDZXMVExdVlWV1JkOU93QUFBRkJ4aXloUW1WSTk2cDdHYXAxRTZ0WFQgNk5zQkFBQ0FYdUZwOVFTL2lyOVFzTlN2azhtT2Q4ZXlVMGhmSlc4aW9tOEhBQUFBeEJHZEtOWEoybVM2anFYcWFWQnV4VXl2NHFjNyA1ZEV3QUFBQXVHckJpZHpDTmllL1NwN3NkQTFBRGNVN1ZtbFNmalYzc05La2pQZ0FBQURjcHZUMFRtRzl5ZjZaV0VkdlVQNXc3a1JsIG16S1NBd0FBZ09qWWd6KzlYaDF2QUtxclg2Y2xPOTRkekpxVXN6dm1UV1VoUEFBQUFMY3BQRjRKeXdZbjFpdXlzZk9qOWV6WTJwcFggeW5vVDl1MEFBQUFnT0x0TzRUVW1SMU5ZV1hPeXlNdzlPeUxUbXBSYmpjcUlEd0FBd0cwS1QwdDBvdWJrcnZCa1Noa3J1b092UmVGQiBkQUFBQUc1WGVGcFRXUFptUzFnbjdkbVpjZ2NwWlFFQUFOeWU0SGlpRSszVzhYcUF0VTkwTHlrZURyaWpXUm1ydFhPSGJjb0FBQUMzIEt6eXRWT2RGL09Ca2trY01FKzVnWkdUZUhXeWxPNGdPQUFEQTdRaFBKZFY1a2RvVVZwbGg0cDF0VFdYWk81cFpHUUFBQUZ5djRIZ08gWVkrZWVwVzRIY1lLVDNjN3pERGhUdXN5VnF2V050Nml3N3V5QndRQUFBQ3VRM2k4NnBBV25kRWhYcVJkd3VyZTJkZmJvQ3lTSDl6MSA2dHpaTnlNOFhyME4wUUVBQUxodTRiSHVZQmNKWnFtTzE1eDhrZ1psM2FUOFhyekRING1kQVFBQXdIVUpUaVE4M3ZtYUwrYldhazR1IE03Vm5KMnRTOXU2c1hRb1VpUTdpQXdBQWNGM0Mwem9lNGszNVF1UU5CdzA0VGVuWkVXa3ZGM3cxZDl3N3NaUlNGZ0FBd0cwSVQ5VCsgTW9yT1MrQU5zNXpDTUxWbnAzTEhiY3JUdXVNQUFBQndQWUlUQ1k4WGtFVE55VkZJMHNWd3dCZVJuVmJxM1dsS1dRQUFBTGNsUEpVVCB6clAybDFsMjlFM3QyY21FcDlWb1JDa0xBQURnZG9Rbm0rQ3U5UGxHemNrbjdkbHA5ZTFVT3FzcFpRRUFBRnlQNEdoWDJFcDdZL0t2IHhCVU9LbUZOa1IzN3hXVG5XN3lZTHlEYnFNeFpXUUFBQU5jcFBGNHdrb1VpcjRrblRIS0VZWVl2d2pPMjFoY1JSVk9JRGdBQXdQVUkgajNmcVF1UUllcUJwdGhMV1ZObXBscktpTDBJTHorUnpMZ0FBQUdDUmdtTkZSMDloMmNia1g3SmZ3bW8xSjNjenpQQkZWWnFVOVJkaiBTMW1Uam1zSEFBQ0F4UXBQYXg5ZkZvYll5ZTJEM2VEUW5oMHJQSlVtNVJkcGIwWkVkQUFBQUM1UGNqVFpPVmcyREJrREVXOUZ6YUo2IGRyeGxRZDRYa28yaGJ4b1BIQUFBQUN4YmVMSXByS2pxYzdRUzFpR3k0MzFoUGFXc2FBeWRuVHNBQUFDWEx6eXRWT2VYN0ljaDJjR2YgSW1mdTJmRytzUGVPTDhwTGR4QWRBQUNBeXhLYzhXVXIxZmtsZmordnQxOW5sbjdlWWVZdnpOdTM0M1ZjWnhaSG96SUFBTUJsQzA5ciBCOSt6N0ZaN1JpYzR5cVQyTU9NWEdNM1M2eS9rMStjWFdObVNpT2dBQUFCY2p1Um9IN0RqNWxHbHAxTENXbFRQVG04cHE1THVDTklEIEFBQndFY0pUY1lHcC9Ub0h1Y0JjUFR2U0tUdlBwN0k1QUFBQU9KbndSQjZROWZCR1c1TVhYY2JLdGlsSFg2UTNha2FqTWdBQXdQSUYgSi9NQUw5VjVscjRTbHNoQ3lsZ2k5VkxXcy9TVnN1amZBUUFBdUF6aHlScVRXNVBaV1R2TFFReEgrSUpiNDJhZTFWV0ZCd0FBQUpZbCBPVnAwcGw3L2ozbzQrSENFTDdwNjZGY3J4cHJsV0hjQUFBQTRxdkJzMWZXNm11cWNySVExcCt6MGxMSTg0Ykdub2I4ZnkrNEFBQUJnIHR1dStkKzJ2OXVvY3ZURjVidG14WDdBVkhxOXZwN2QzUjVBZUFBQ0FSUWxQNzNCU3p6VDJiTmY4WTVXeHFrMUtWbnAwdXFPLzhObWIgbFFBQUFPQ2c2NzFJZkE3V2VEM1gxL3JLRk5aUnJ2WERFUitJMXZpWi9lSmZoSFFIQUFEZ1VvVEhTM2JHUGwydlQ4ZExkY2JyL1ZGYiBWNFlUUEFBMjNmRjZka2JwcVl5aElUb0FBQURMRVo3S0JGYldyM1BVRXRZeFpHZnFHSm9YYlVXbExEbUc5UUVBQUVENU9sOXRXWGtXIHY1SXpoaG9uT1RuaDJHV3NsdkY1RDRKWHk3TVBBcUlEQUFCd1B1SEpydkcvaXRmNGFBcHI5a0RqV0dXc1E0U25wM2NIQUFBQVRpYzUgSW42cUUvWGwvdnk4dGFhd2pucDlIMDd3d0ZTT2ovQ0VoeVdEQUFBQXl4T2VWcER4SE55OFZPY2tVOWZEaVIrUThVR0orbmE4VVhRYSBsUUVBQU00dk9TSnhxdU9Wc0hTcTgyeXU2Mjl5d29ucjRjZ1Bpa2k5bEdVZmxPeEVkTklkQUFDQTB3dFBkRTEvQ1VRbkttSFphL3BSIHIrZkRpUjRZVzhwNmwzWXBLeXBua2U0QUFBQ2NWbks4OE1KTGRUelJxWmF3amlZOHd3a2VITzhCOGg0Y3I1SEppN3hJZHdBQUFFNHYgUEwycGppYzZYbmh4OU92NGNLSUhTQ1R2M001aUx6MlRUN29EQUFCd1dzbnhRb3RXcXZNc2ZnbnI1S25PS1dUSGlvNCtFVFVxWlhuQyBRN29EQUFCd1B1RTVwRmNuR3pnNnlmVjdPT0VESlZMZnVVTzZBd0FBY0g3SkVibndWT2RVc3RPYjd2d1UwaDBBQUlDbENNOUZwenFuIGtwMUllbHJycGFlbU93Z1BBQURBZk5mc2kwNTFUaWs3YzZVN3JiMDdpQTRBQU1CODErNkxUM1ZPS1R1UjlGVFRuZkhCaTBiWE9CRWQgQUFCZy9tdjF4YWM2cDVhZFE5S2Q2cXcrNlE0QUFNQjhvblB4cWM1djFtZDZJRmVTcHp0ZXN2UGw4MzJQLysvMjhQOXU5NS8zLys1VCAyamFmSDNkbFBnOEFBQUQwWGFkYko1dFgyMDdPbnVxY1EzYXM2S3lrbHU3OCtKU2RwOCtiRlo2UFQrSFJzb1BvQUFBQTlGMmo5ZXNiIHlVODJqeW93aTBwMXppRTdrZlJFRCtTVEVwM3haWlR1akFuUFZza082UTRBQUVEZjlibDZnSGZyd005RnBEcm5rcDBwNlk0V25qSFogaWNwWkt5VTlDQThBQUVEdDJxeGZuM0xpZ2QyTHQ0aFU1MXl5RTBtUDEvdzBwanRhZUw2SVg4clNzck9TM1lRSEFBQUEydGRsVzc3eSBlblYwaThuaVU1MXp5azZXN25nUDZwUHNKanM2M2JsM2hFY25PeUtrT3dBQUFOazFXZFExZVN0NVUvS3pFcDBmNm4xblBkbDhpYklUIFNZK1g3andxNFJtbFJ6Y3JQM3plck95UTdnQUFBTlJGWjJ0RXg1dVUvbWxFWi9HcHpybGx4MHQzUGh6aGVWYkM0NlU3V25hOGNoYnAgRGdBQVFINDk5a3BZM3NMZm40N29hTmxaWEtwemJ0bXgwcU9GWjJ5RytuMy83cFh3UERrMzNidHpML3ZwRHFQb0FBQUEvdlZYdjY2YiBrcU9kT2ovVWJSUWZiK0h2WWxLZEpjaU9UbmZHdDBmWnVaUGRNWFN2bk9WTlp0M0o3aWo2Um5iTFdrZ1BBQURBbit0dU5tbytwanFSIDZDdysxVm1DN0ZpN3RPbk9teU04WHNKako3UFdzaitaeFNnNkFBREE3blczY29UVFQwZDJSdUhKRHVtbWpHVWU4Slh6b050MFozekEgdGV4OGtkMWt4MXMwdUJHYWxRRUFBRHpSMFUzSlduUzhwbVFyT2xtcXMxbUM1Q3hKZGlMTHRJM0s5NTh5bzB0WlQwcCtXbnQzYUZZRyBBQURZRjUyb0tUa1NuUi9pVDJDTnFZNDltSnN5bGlNZmRqckxUbVk5ZkQ3UWorS1hzanpoOFpxVkVSNEFBTGhGeVJGenZjMzIzSTF5IDg4L25MVXAxeGhLV0xsOXRsL0pGcnhmNm45QTZNOHMySzJkSFNOaUVaMURDQXdBQWNHdWlzeFgvU0FndjFmR1NIVytKb083VjJRWnkgaGV6SWJnT3hyaUVPc2orSy92TlRhaDZkVzVidXNGa1pBQUJ1WFhpeUl5SDA5Tlh2MnovaXB6b3ZFazlnTFNyVldacnNXT0d4cGF5byBXVm1YczZycERpZWpBd0RBclVtT0p6eWo2THpKZnZscUZKeHFVL0xpZW5XV0tqdjJQMFVMejl1bnRJek55dmZpSnp0MnlhQk5kOFlPIGNjcFpBQUJ3UzZLVEhRa1JMUTlzOWVyWUNhekZpYzVTWmNkclZoN0xXYVB3L0pLOG5CV05vZHQwaDNJV0FBRGNpdkI0TzNWc1Qyd20gT2o4TG9yTmQ0aGUvWHZoL2pCVWUyMEIxcjhUbUlaQ2RxSGVIY2hZQUFOeUM1Rmpoc1R0MVJ0RjVEa1FuV2lENEx2dUpqaXhSZUpaYyB4ckxOeWxwNHhtYmx0UkllTDltSjBwMUJpUTNsTEFBQXVHYlJ5YTZsZXZyS2lzNTR5OHBYM2w2ZHhiSDBaQ2RxVmg2VThEekxmcnFqIFgrcDB4MXMyU0RrTEFBQ3VXWGpzOUZVMFptNUZ4NTZCWlJjSWVxVXJ5bGdIbXFsM0t2cWQvRWwzN2dQWmVRaGtoM0lXQUFCY3MrUlkgNGRIbEsyLzZLcElkdTFNbjZ0VWgyVG5nUDh0clZoNlhBOTdKZmpuTHU3VjZkMFFvWndFQXdIV0pUbmFpdVhmSXB4VWRyMWZuWXBxUyBMMGwydlA4NDIwWCtJbi9LV2ZkR2Vtd3BpK2tzQUFDNEZlR0p5bGZlbVBsdndmbGIrbEtkeFpldkxrbDJiTE95VG5mMEtIb3IzY25LIFdmck1MQkhLV1FBQWNMbVNZNFhIbTc2eXl3UHQ3WWY0bTVJdnBuUjFhYkpqaFVka2YvZk9vSVFuazU0bzNlSHNMQUFBdUJiUnNlR0EgTjMxbHkxYzYxZEhUVjc5azk2QlByekdaTXRZUi95TjFMRGZJbjNLV2JWaU9aQ2M2RlYyZmprNjZBd0FBbDNhZHpKWUhWc3BYUDVUcyB2RjY2NkZ5YTdHVGxySlg4T1VxaUlqczIzYkg5T3lLN2sxb0lEd0FBWEVvWXNKWGFsbVFyT3Y4WTBibVlnejZ2U1hhczhJajQ1U3c5IG9hVWxwOVc3WTVNZHh0RUJBT0FhUk9kTjlyY2tWMFVua2gyNUpPRlpYOEYvYktXYzVjbU9GUjVQZWtRSkR3QUF3TkpGSnhzejk3WWsgL3kzNVFaOFhYYjY2Wk5scGxiTUdKUzllU2V1K0lUdTJXWm4rSFFBQVdQcDFzWGRMOHQreTM2dHpkZVdyUzVZZEt6d2l1K1VzZTNhVyBUWGp1cFhhTUJPUG9BQUN3OUd1aGZqMFNuWEg2eXFZNVVhcnpLbGRTdnJwMDJiSC8wZm8vZWV6ZGVSRS8zY2xrSjVyT0doQWVBQUJZIDhQWFBwanJlUHAwZjhpZlIwYUtqZCtyb0xjbFhJVHFYTGp1dFpZTzJuR1YzOEVUbHJFSDJqNU9nZndjQUFKWW9PbHZuRjM2ZDZuaWwgS3lzN1hsUHlWWlN2cmtGMnJQQ0k3SitkNVoyZmRSK0lUaVhkb1g4SEFBQ1dKRHFWNHlEK2NXUW5PeExpcWxLZGE1QWQ3ei9mbTg3eSAwcDJxOUZpcFlmOE9BQUNjKzVvWFRWN1pmVHFSNk5oTnlWbFQ4a1dMenJYSWpsZk9Xc2x1M1ZJdkQxd1hSQ2ZhcXN6K0hRQUFPUGN2IDl2cVgrM0dmem50RGRQNzllZk5TbmF3aGVYc05EOXcxSlR0Uk9jc3JhWG1pVTIxV0ZxRmhHUUFBemlNNlh1a3FPK0RUNjlQUnFZNDkgMGR3ZTlDblhJRHpySy8xbTBPbU8zYjFqUzFwcjZadk1FcUZoR1FBQXppTTZyY1dCbnVqOHV5QTZIOWNxT3RjbU8xNjZNOHJJYUwwNiAzYkdOeTFhQTdvU0daUUFBV0pib3RCcVNJOUd4NVN1dlQ4ZnIxYmtLcmpIWldabHZqR2k3c3Bmd1ZFVkhROE15QUFDY1FuUmFEY2svIGpPeG8wUmxsUjR1T25iNnlmVHBYSXp6cksvN21FUG1UN3RoeGRMdUQ1ODZSSFc4cWl3TkRBUURnWE5jMnJ5SFpIZ1ZoRTUzeHBiY2wgK2VxV0I5NlM3SGhHYk1mUmJjUHluU002Vm5haTA5RkZhRmdHQUlEalhzTXFEY2xhZEx6cHE2czlEdUpXWlNjYVIzK1gvWkpXdEduNSBUdmJMV1Y2Nkk3TGZzSXp3QUFEQUhLTGpsYSttaU01UEpUcXZSblN1c2svbkZtVEhDby9JYnNOeXE2VGx2UjJsT3lLNzUyY2hQQUFBIE1KZm9qSkl6UlhUK05xS2p5MWMzaytwY3UrelliNXlzZjhjMkxrZnlrL1h1Q01JREFBQXppNDVOZExJenI2enM2RU0rYmZucWFzZk0gYjFGMmJMcGpEMHZ6U2xyMlBDMXZNcXN5blFVQUFEQlZkTGFKNk9nTnlhUG8vSS9VKzNSdVNuUnVRWGFzOEd6VSsxZEtlRm9KVDBWNCByUGd3a2c0QUFGTkZSNWV1c2pPdi9wMkl6czN0MDdsbDJSSEo5Kys4eVc1NUtwT2VRZHJwemxvWVNRY0FnT21pbzh0WGtlallzbFhVIHB6T0t6cHZFNTE1ZHZmQ3NiL0FiU21TM2YwZkVQME1ya3h3ck81SDRNSklPQUFDOW9wTXREWXg2ZEZwOU9qclIyZHlTNk55YTdOaHYgTGx2Uzh0SWRMK214c3RNNlB3dmhBUUNBeXJWSlQxNTVpWTZXbmY5Uk42OVB4eDd3K1dFazUyWkU1eFpscDlLdzNKSWVUM1pXaWV5dyBnd2NBQUtKZnZIWFpTbCtQb3NNOS95MStvbU1ia25XZmptMUl2cGxlblZ1VkhTczhVY055ci9RTWlmVDg1ZzdoQVFBQVIzUjArYXExIEhYbVVHNXZvL0MzNWh1U2JhMGhHZG5hRlIxdTE3ZC9wbFI1UGN1ekhRWGdBQUJBZGtYeHBZTFJMeDRxT2QrN1ZXTDd5bGdiZVZKOE8gc3VQL1oyOE9sSjFXdWlNSUR3QUFvaVB4MHNBM1IzU3M1RVNpWTA4eTk0NkR1RW5SdVhYWnNkOThka0pMSE9ucEZSMVBaQkFlQUFCRSBaMXNRSFR0aVhsMGM2RW5PellvT3NoT2ZueVd5MzJ6c2lVOXJ5YUQrV0FnUEFBQ2k0eTBOZkpkNE83THQwL2tmSlRvL3BYYVMrYzMyIDZpQTdzZkJvMjE0bG90TXFjV1VUV2dnUEFNRHRpbzZkdkhwUm9oUDE2SGdOeVQ4VDBibnBobVJrcHkwOG0rRHZlS0xUYWxKdXlRdkMgQXdCd2U2S1RIUU9oVHpIUGR1bDRmVHFSNk55ODhDQTd2dkI0WStsWjQvSnFvdXdnUEFBQWlJNVh1ckxOeUZwMmVzNjhJdGxCZGxMaCBrYzl2bXRYbk4xSlZlaUxaV1NFOEFBQ0lqdFI3ZFBUTFNxSno4eVBteUU3L042a280WkZFZHFyYmsxc2dQQUFBMXkwNmVwZU90eDM1IGIwZDB4cEtXVG5UR1BoMmI2Tno4aURteU0vMGJ0aW83Y3FEc0lEd0FBTmNyT2w2aWt6VWoyejRkUFhrMUhpZkJMaDFrNStCdldHOGsgL1NQNCs5bGVuVjRRSGdDQTZ4ZWRiR2xnSmpyZUtlYnMwa0YyWmhjZUVmOUlDR204RCtFQkFMZ2QwUmxGcEtjWk9UdkZuRjA2eU03SiBoRWNmMWphSDFDQThBQUNYTHpsYWRQUU9uUS9aM1l6ODYxTmV4a1JubEp2Ly9yenBwWUd0d3owUkhXVG5hTUtqMDUzM2pvK3htdmpEIGcvQUFBRnltNkV4SmRIU3EweElkbGdZaU95Y1RubzhaNUVZYTM2d0lEd0RBTWtWSHR6bDRSMEM4aUw4d2NCU2Qvell2N1lpNVBzV2MgcFlISXpsbUZaeTZwc2I4aDZMZnZFQjRBZ01XSlR1WDBjcDNvL0NPN2lZNHVYVVZMQTcwUmMwUUgyVm04OFBRSzBTZzY0NUVVV25nRSA2UUVBV0lUb3ZEZEV4enNDSXB1ODB0dVIzNFdsZ2NqT0JRdlBOcmpwUDdzMy8yWXdra1BLQXdCd1B0R3h5d0x0SGgxZHVvb21yLzV4IFJFZjM2V3lFWFRySXpnVUt6N1pEZ1BUNzdwVG8ySlFINFFFQU9JL29qRXYrOUZiazZBaUk3QVR6ckVjSDBVRjJMa0o0dG8wZkhQMEQgMUlvcWJicUQ4QUFBbkY1MDlMTEE2UGlIdjQzZ1JLTGpuWGZGZG1SazV5S0ZKL3M0a2V4NHQ3V1JIb1FIQU9BMG9tT1hCYjdKbngwNiAwVGxYbnVqb2hZRzZSd2ZSUVhhdVNuZ2lrZGtVeE9jM2R3Z1BBTUJSSlVla3ZTelFqcGFQRTFmMlFFOTdxS2ZlbzZPbnJ1alJRWGF1IFNuanNWdWJvVmlsdElUd0FBS2NSbmZkRWRFYVo4ZnB6c3JPdUVCMWs1eXFGSjB0MVd0TGo3Vmk0RTBiVEFRRG1FcDFzV1dCTGRQNG4gRUoxL0pEN1VrMlprWk9mcWhNZWJzb3FrSnBJZWZiT2o2VXhxQVFBY0pqcFJvdk9haUU0MFd1NU5YSGxIUUh6SWJwS1A2Q0E3RnlrOCAzamZ2TnZuQmFrbU9kN3NUSnJVQUFPWVNuWTlFZFBRT0hadm82SDRkbmVqOGt2cFpWNGdPc25PeHd2UHUvRDByT3Exa3B5VkFOQzREIEFQUkpqa2pjaU93dEM3VEhQMFE5T2xaMFhoQWRaT2VXaEtlMVo2ZjNGaTBpcEk4SEFDQVhIZHVmayszUThZNS84TWJMLzFhaW8wZkwgc3gwNmlBNnljMVhDVXlsajlhWTdudlRvLzF2NmVBQUFmTkhKSnE3R3JjaWpzSGpIUCtpU2xkMmhZN2NpandMMUlaeDFoZXhjdWZDcyBBdEh4ZHV6WTIwZnllaVE5OVBFQUFNUy9iRlltcmtiUjhSS2Rmd2VpWTNmbzJFUUgwVUYycmxwNFJQeEpyVW81NjBOMmE4a2ZnZlJZIGNhS1BCd0I0SHQ1OWFjdFdyWW1yTE5IUkUxZFdkTjRRSFdRSDRka1ZIVTk2dG9IMGZDVFNzMGwrb09qakFZQmJGcDJvYkRVbU9tTi8gVG5UOGc3MWxvK1hSc2tEN3ZBL0l6dFVMai8yR2IyMVcvaWpjSXVHeGZUejZSc29EQU5jcU9TTHRzcFVXSFc5WjROK0I2T2orSER0YSB6ckpBWkFmaFVlL3pVcDVzQjgrSCtXM2t2U0ErWGgrUFY5WVNwQWNBcmtoMFdtV3JVWEs4aVNzdjBSbmYva2Y4d3p4WkZvanNRRUY0IFdodVdyZXhVRTU3ZnR3Y2pQTnRFZWhBZUFMZ0cwYW1VcmFLSnE3OEQyZmxIL1A0Y2R1Z2dPeEQ4TUlxUmk5Wm9ldFNrM0VwNnJQaXMgUDI5YkpUMTJXa3VRSGdDNDRPZFY3NWZGckd6bDdkRFJMNzJ4Y3QyZnd3NGRaQWVTSDg3S2FIcHJNc3VUbkhmemcrZlZqdGRHYkVoNSBBT0NTUlNmNkpiRlZ0dnJSRUoyb2JEVk9YRVdubGlNNnlBNDR3aU95UDVwZW1jeDZsLzEwNXoyUkladnk2QkgxbFpEeUFNQmxTVTcwIFhGa3RXMFdpODQvc0h2dVFIZjNBYURteUF4T0VwN0owc0NVN1dXbnJNUkNlc2FSRnlnTUFsNUxtaU9SbEsrOThLMXUyK2p0SmMzVFogU3UvUGlmcHpFQjFrQjRyQ00wcFA5QnRMVnM3U3Y4bThteDlNVDM0ZWxQVGNDU2tQQUZ4dW1yTXh6NEhlK1ZZL0hOR3h2VGsyemZIMiA1K2cwWnhOSUdDQTcwQkNlYmZHSE8ycFc5bVFua2g0dFBLUThBSEJKYWM3V1BBZStLZEg1cFVRbksxdDVUY2hSMllyK0hHUUhadnl0IFJhVGV1QnlsTzFwMjdHMzg4eWZ4ZTNsSWVRQmd5V2xPMUlTY2JVT09FaDJ2Q1ZtTGp0ZjdTTmtLMllFWmZyaTl4dVhla3RhYitTMUggdjdUU00vYnkzQXNwRHdCY1JwclRVN2I2cDVIbS9EQnBUblMrRmFLRDdNQ1JoYWVWOGtTeTg1cklqcFdlUjFJZUFGaG9tdU0xSVh1SCBlT3B0eUhaUllGUzJhbTFEOXNwV2lBNnlBMGNRbm15ZnhOWThBV1RTWTI5ZUw0K1g4Z3lmMGtQS0F3Q25sSnpvbHpxZDVyVEd5cTNrIFVMWkNkbUNoUC93MjRaSGlrNEc5ZWJMejVvalBvL2dOeklPd2ZSa0Fqdk5jNTVXczlLU1ZiVUwyeWxZL2xOUjRrdVB0enFGc2hlekEgQWxPZWpkUjZlS3JwamhXZmJHSnJMR3RwNGJFbnFTTTlBREJIbXVQMTVuaExBcjMrbkgrQ05PZW41R2RiV2RFUlJBZlpnZk1KanpnLyBqSzBlbnFyc2FPbDVVaC9yWHZ6eUZxVXRBSmhUY3FwcGppMWIvZE9RbkZGMFhvU3lGYklERnlFOFc5bHRHTTZhK0ZvcHowdERmR3hwIFN3dlAyTXNqUWdNekFQUkpqb2hmc29wK1VkTzdjMzRtb3FNbEoydENwbXlGN01EQ255d3F4MHkwUnRKN3BPZExJRHk2cERVSXBTMEEgeUorN3ZEVGFHeWUzazFaNmQ0NG5PcDdrMkNaa081aEIyUXJaZ1F0S2VTU1JudXhvaWFpYzllS0lqeGFrMzZXdEJ5ZmxzYjA4WG1rTCA2UUc0N1RTbnAyU1ZwVGsyMFlsS1Zsa1RNbVVyWkFjdVRIaTJKa25abXQ5V05zNXZUZG1VVnF1djUrbnpZendvOFZuTGJtbkxUbTFwIDZVRjRBRzVYY3V3R1pPL3dUcTgzUisvUCtTZEljbXpKS2pyeTRjTzVUNGdPc2dNTGYwSnBwVHpaV1ZydnNydDQ4Q1c1L2Y3enI0SDAgNk5MV1J2eXBMVkllZ051U0hKSDJVVGRlQTdKTmN6elJHVi8vR2FRNWRzclVIby9Ea2tCa0IyNDA1ZkhLV1ZaMnh0ZS9Pc0l6bHJiVyBTbmpvNXdHNExkR0orbkt5U2RFWDJkK2I0NVd0ZnNoKzg3RlhzcXBzUWliTlFYYmdobEtlcUt6MTBraDZ0Qmc5T1NuUC9hZnNyQ1hmIHpZUDBBRnhYbWxNNTVpRXJXWGxOeUpua2VDV3JWbThPb29Qc3dBMm1QTmxPbmhmelc5ZUwrUTFxVEhtMDlEd282Zm1RM1lXRUE5SUQgY0hPU1V5MVoyVFFua3B5ZjZ0L3FYNzZxYVE2aWcrd0FLYzllV2FzbE8xcDRSdWw1Tk5LamhRZnBBYmg4d2ZFa3gvc2x5bHNNNktVNSB0amZIM25TU0U1V3NkQU15YVE2eUE2UTg0VzlmbFpUbmwvbXRURC94ZkRIQzh5aTdwYTBwMG9QNEFDd3J4UkhwMis4VjdjelJrMVkvIHhKK3VzdnR5ZmdXU1E1b0R5QTVQVXFXVXg1YTAzb1BmeUY0YzJSbHZYNVgwUEFVcFQ0LzBDR2tQd0VWSlRqUktycyt6YXFVNVZuS2UgelhPUG5iS0tKSWMwQjlrQlVwNmR0NGRBZXJ4OVBKSG8vRksvZlgzNUZKOHZKdVY1Vk1KVGxSNUJlZ0F1U25KYUpTdXZOOGRLanUzTCBzWktUalpPVDVpQTd3Qk5ZbXZMMGxyVittU2V5YitybEtEMWZUTkx6Z1BRQVhLVGtlR1BrbnVTMEdwQi9CcUpUN2N2UjIrSDEvUkxTIEhFQjJvSnJ5UlAwOGJ4S1h0ZlNUbWhhZXIwN0sweXM5SzlsZlRvajBBTXd2T0NMNzVaK04xQ2FzM3B6bmhHZnhlM04rR1BIUkUxYlIgS0htMVpJWG9BQmNFQ0w4bjlNdFJMRWJaR1BmbHJEK0ZaSlNVUnlVdVg0ellqS0pqYjE4bVNJOWRURGlZKzd2aSt4eGc5aFRIUzN1OSBoYVRlQUVQVW0rTkpUdFI4L0tvK2g1V2NqZmc5T1VnT2NCR0EwdmVGYlJBZWxQRGNLZUhKcE9lTGtwNnZuZEpqeDlYdG1Wdlo5SmIzIHRRQkFudUtJNUh0eW9qRnlyeS9IcGprL2t4U24wbnhzMHh4S1ZvRHN3RkZTbnBWSlZrYnB1UzhrUFYrY3hLY2xQZDY0dXQzR1BFaCsgRElXUTlnQ1VVaHlSdUIvSEsxZTl5MjdmM3BqRWpNbU1saHg5KzJIK1RBOHplRXNCS1ZrQnNnTm5rUjVkUXJvckpEMlBTZEx6SlpDZSA4ZTgvT2tuUFd2enlWdGJYUTlvRENFNDd4Y242Y1ZvcktMeVNsWGZUZjhkT1dFV1NZNXVQa1J4QWR1Q28zeXV0MHBZblBROG02WGtxIFNJK2QzSHFVZURIaFd2SytIdEllUUhKcUtVNUxjcndKVExzejU5bVJtNWJrakIvN1hmeFJja3BXZ096QTJhWEhTM3EwaEZTbEp4TWUgbmZJOFN0N1QwOXZNalBnQUtjNXVpaEtOa0VkOU9jK3kzNS96MDVFZ2U3eU1UWEphKzNKSWN3RFpnWk4vNzJUOVBNTkU2ZkhTSG04LyB6Mk1nUGQ3SStsMGdQYTB5Rno4bmNDMkNJNFVVSnpzVHowdHlmZ1dKem5ORGNuUlBqaDBqcHk4SGtCMVlmTW9qUmlnT2xaNHZRY0x6IFZFaDY3cDJrcDFMaXlucDYrSm1CU3hFY2tYZ0JvRzA2ZnBmMndiOTJVL3B6NGZZcmtSeWI1SGdUVnBTc0FObUJxNVNleDBSNnZnVFMgWTVPZXg2TDBlTTNNMmM0ZXhBZVdMRGdpZnBtcUo4WHBrWnhmaWR6MFNJNGRhNC9Pc0VKMEFObUJxNWFlU0g2ZUpraVBMbkY1KzNwMCAyb1A0d0NVSmpqZ0pqbmVVUTZWVUZVbk9MMGR1bmh1Q1UrM0oyVGhmRDVJRHlBNWN2ZlJFNHZQRmtaK25pZEtUbGJpeUVYYkVCMDRwIE55SnhTY2VXZld5S3MxR0NFYVU0dHVuNHhVak1jL0RTQ2s3VWo0UGtBTElEU0U4Z1BWN2FrNG1QSnp4Uk03TW5QZXRFZW16aUkxSnIgYnVibkRPWVduRmFaYW1xcEtrdHk3UHRlQ2luT20reHVXa1p5QU5rQnBNZElqN2VWMlV0N0hoM0o4VjUvVEtUSFcxSllGWjhwUjFUdyBjd2N0dVpraU9LMEZnRzlKaXVOSmpuMzlaVUtLZytRQXNnTklUME42ZXRPZXgwQjR2TW10Ykd6ZGxyZ3k4VmxKKzRnSzVBZW15STNJIC9pUlZWS2JTQ1lvOXltR0s1RVNOeHA3Z1JOdU9rUnhBZG9EdnUwN3B1WE9rcDFMbWltNlBEZW14YVk4VkgrOGcwbXJpVXptdWdwL04gNnhPYlRHNGtTVzhxWmFwcVAwN1VrMU1WbkZhSzQrM0lRWElBMlFHKy94THBXVFdreDB0N0l2RjVESVRIbHJhOEV0ZTl0TXRjUGVLRCAvTnlHMkV5Um02cmdWRXBWclo2Y2x1QWNtdUpza1J4QWRnRGEwck9hTWUzeHlsMlBRY29UaVUrcnpPV05zUjhxUHdqUVpZdU52ZGozIENJNTMwcmh0T1BaS1ZhOUtWS0tTbFgzZmkvazNWbkM4TGNmUnVWWHN5UUZrQjZCRGVrVGk4N2VzOU53NTBtUEZ4MnR1Zmt6ZVo0V24gTXNuVkVwK2VrdGNoNCszOGJCOVBhbHBpVXhHY0xMM0pCTWRMY2Q0Y3dmSEtWbEdUc1Qyanl0dUw4Mjd1V3lRNFNBNGdPd0F6U1k5MyA4S2czdmg2VnVUejV5VzRQenN1b3hPV1Z1UTZSSDVINUo3MzR1YTlmaEZ2TC9DU1FHbkZFb0ZXZTJwajB4Q1k0VWFrcUtsbEYwbU1UIG5LaE1GVTFVYlFLQlEzSUEyUUU0a3ZSRWg0KzJ4Q2RLZlI0YXdoTTFNM3ZTTTBWK3BwYThLc25QNm9hZUc3WUgvdDJla3BRRVVoT04gaDA5SmNGcVM4K3FrTkZIL3paUm00MDB4eFVGeUFOa0JtT243TkV0N290NGUyOSt6RHNRblNuNDgyZkZTbm50SGZPN041MjgxT0I5UyA4b29Fc2ZKenYxckljOHZjRjh0dDhmM2J3c3ZvYUlhVzNIZ054bFp1SXNsNURVVG5wZmp5VmZaTFZGR1ppaFFIa0IyQUswaDdNdkdKIFNsNWUrdVBKanRmSUhQWDNlRnViNTBoOU1nSHE3UUZhU2hLMG5lSHZWOHRSbFo2YmpmVDMzclFTbkt3WEp4T2Q2SDNleDNpWGVKcXEgSlRuMk1VRnlBTmtCT0ZQYUV6VTFqNEpnUldJdGVibkxTc3hENHhaSno0TWpWVjdKNjA3aUptZHZ0SDBRdjQ4cGVpem1rcURxbjA5NSBmdGxPL0xOZXFXa0pUYVdwZUZ1UW14N0JhU1U1VVJuTFMyMWFQVGlrT0lEc0FGeHAydE9UK0hqaVk4dGVsWmYzeGNTbjFlQ2NIVjFoIFU1OUsraE5KejZyeHVGYWtjK3B6ekxiejdaYlVTSERCM3NvMHVhbjAza1J5MDVLYzEwYWk4OVloTmphOThTYXBQaHh4SThVQlpBZmcgUXRNZVNhUm5WUkNmT3lNaTl4S1h2dTZUOTdYa0oycHVidlg0M0FYU002Y0FWVVJtYWtyVWs4UkVGOXdwaS9zeXNka1d4Q1piOHZmaCBTTWRiUVhUZUFwbXBpazJVM2xRVEhGSWNRSFlBcmlUdGtZbmljeWR4ejQzWGtIemZrSitzcWJsWGV1N00vYTRtUHozOVA5SklmYVpNIGlmVTBDTGYyMnZRSXpxWW9PQzI1cWFRNFdibXE5MmJUb1EvbnBiM1AyZEkvSnFvQTJRRzRnYlNuUjN5R0lQWEorbjRxQXRScVpyNlggOWhqN0lmSXp4N2g3cFUrb1JUYnh0RTFFcUNvNVdiOU5iM29USlRudlR1TFNFcDczSksySlVodHZQRHhLYjFyajRxUTRnT3dBSUQ1aCBuMCtVL2tRQ0ZNblBXdktSZGZ2djdRaDdkcXZLVDFWOHZNZEtwRjRheTVLZFNxa3BTM21tQ3M2SCtNdjlNc0dKa3B5cThMd0hTVTFGIGJENmMreHdsVlJYQlFYSUEyUUZBZkZ6eGlaS2ZvVU4rSXBtNVQvN091aUE4VVptcjFlc3paYU56MWd1MUtpWThGVmxwbFY2bU5CZFggU2xTZTRId0VRaEtKUy9iMlIxRnNyTnhzcGI4OGhlQUFUL2dBL0J4MGlVOHIrV2tsUUo2d3JJczNyNFIyVjB4Nk11R3BqTFpYRzc1WCB5YitWUUhncVBUVlp5dU10OXRzbUNVNUZkTEpFNXlNUm52ZEVpRnBTOHhIYzU1YllJRGdBeUE3QTdPSWpRWnBSRWFCVytlc3VFWnNwIGdqTkZlTHl2S1JPZFZqbXNtdXhrcGFkV1AwOTBUTU1VMGNtRUoyb016cHFHSTZuNWtIeTB2VGU1UVhBQWtCMkFXY1JIcEwrc1UwbC8gV2pMVUl6S3QvcDFLV2FzNnNSVjlqYXRDdWhPVm9Ib3YrRDBialQzWnFZalBoN1Q3YUZwU2t6VVNSd2VIUmttV0lEZ0F5QTdBc1g5VyBLdE5KMVNRazZ3RWFPb1dsVjI1YS9UdFR2NTVXdXROS2RUSVJhQjNua1BYcFRKR2ZUZVAxVGVOMVQ5eGFKYW5LNkQyQ0E0RHNBSnd0IDllbVZuMVZER0lhaW5IaC9mdGY1NzF1eTBrcDFvcDZmbHV4a2sxTlowdUVkekxrcDNENEtNaFJKUzFSK2F0M3ZhditSU0Z5YVFtNEEga0IyQVJhVSttZnhrOHRCcS9CMGFyN2QyNjB6WnZTTlNLMlBaOTltdjJWNjBiYzlOMUxkVGJWS3U3dFNwL25sRlpGcEMwOXR2UTJrSyBBTmtCdURyNWtZSllEQWZLVWVzb2libkd6dWRxVUo1ei9IeGJsS2xONFg1VVpLYWEyZ2pwRFFDeUEzQUw4bE1SSUpINWR0NE14YjlYIFdTcTRsRDA3SXZWaklsb2ZmMDZaNmRsVWpOd0FJRHNBVi85ejF6cHh2RmVJcENBdVU4N0dhbjNlSWZrN0xkbVJRRGdpcVpnaVBaVy8gSnpLOXI0YlVCZ0RaQVlDSkFqUzNFTFZlRjhrUEFlMUpuMXBFQXRLU0RDa2tLcjJ2VjE1V3BRYTVBVUIyQUdEaXorZnFTRkxVZWwrUCBYTFUrUmlRUGg0ckdkc0xIcnI2TzJBQWdPd0N3Z0ovWm5oNmhYbkdxeWs5RmRLcVNVVTFRdGgxdnoxRnFRbW9Ba0IwQXVCQVJhdjNiIFZlZkhYRTI0WDl2T3Qzdmw0NUNtWUtRRzRNTDV2d0lNQURhOWUyNnFaLzIwQUFBQUFFbEZUa1N1UW1DQyIKICAgICAgIGlkPSJpbWFnZTM5ODAiIC8+PGcKICAgICAgIGlkPSJnMzk4MiI+PGNpcmNsZQogICAgICAgICBzb2RpcG9kaTpyeT0iMjc1LjkwOSIKICAgICAgICAgc29kaXBvZGk6cng9IjI3NS45MDkiCiAgICAgICAgIHNvZGlwb2RpOmN5PSIyNzguOTMzOTkiCiAgICAgICAgIHNvZGlwb2RpOmN4PSIyNzkuNTE1MDEiCiAgICAgICAgIGN4PSIyNzkuNTE1MDEiCiAgICAgICAgIGN5PSIyNzguOTMzOTkiCiAgICAgICAgIHI9IjI3NS45MDkiCiAgICAgICAgIGlkPSJjaXJjbGUzOTg0IgogICAgICAgICBkPSJtIDU1NS40MjQwMSwyNzguOTMzOTkgYyAwLDE1Mi4zODAzMyAtMTIzLjUyODY2LDI3NS45MDkgLTI3NS45MDksMjc1LjkwOSAtMTUyLjM4MDMzLDAgLTI3NS45MDg5OTE5LC0xMjMuNTI4NjcgLTI3NS45MDg5OTE5LC0yNzUuOTA5IDAsLTE1Mi4zODAzMyAxMjMuNTI4NjYxOSwtMjc1LjkwODk5NjEgMjc1LjkwODk5MTksLTI3NS45MDg5OTYxIDE1Mi4zODAzNCwwIDI3NS45MDksMTIzLjUyODY2NjEgMjc1LjkwOSwyNzUuOTA4OTk2MSB6IiAvPjwvZz48L2c+PGcKICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgICAgaWQ9IkZyYW1lX2NvcHlfMV8iCiAgICAgZGlzcGxheT0iaW5saW5lIiAvPjwvZz48ZwogICBzdHlsZT0iZGlzcGxheTpub25lIgogICBpZD0iRnJhbWVfY29weV8yIgogICBkaXNwbGF5PSJub25lIgogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NjUuNDU3MjYsLTMxNC4xMTY0KSI+PGNpcmNsZQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZGlzcGxheTppbmxpbmUiCiAgICAgc29kaXBvZGk6cnk9IjI3NS45MDkiCiAgICAgc29kaXBvZGk6cng9IjI3NS45MDkiCiAgICAgc29kaXBvZGk6Y3k9IjI3OC45MzM5OSIKICAgICBzb2RpcG9kaTpjeD0iMjc5LjUxNTAxIgogICAgIGRpc3BsYXk9ImlubGluZSIKICAgICBjeD0iMjc5LjUxNTAxIgogICAgIGN5PSIyNzguOTMzOTkiCiAgICAgcj0iMjc1LjkwOSIKICAgICBpZD0iY2lyY2xlMzk4OCIKICAgICBkPSJtIDU1NS40MjQwMSwyNzguOTMzOTkgYyAwLDE1Mi4zODAzMyAtMTIzLjUyODY2LDI3NS45MDkgLTI3NS45MDksMjc1LjkwOSAtMTUyLjM4MDMzLDAgLTI3NS45MDg5OTE5LC0xMjMuNTI4NjcgLTI3NS45MDg5OTE5LC0yNzUuOTA5IDAsLTE1Mi4zODAzMyAxMjMuNTI4NjYxOSwtMjc1LjkwODk5NjEgMjc1LjkwODk5MTksLTI3NS45MDg5OTYxIDE1Mi4zODAzNCwwIDI3NS45MDksMTIzLjUyODY2NjEgMjc1LjkwOSwyNzUuOTA4OTk2MSB6IiAvPjxnCiAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgogICAgIGlkPSJGcmFtZV9jb3B5XzJfMV8iCiAgICAgZGlzcGxheT0iaW5saW5lIiAvPjwvZz48ZwogICBpZD0iRm9yZWdyb3VuZF9HcmlkXzFfIgogICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMzMzY5MiwwLDAsMC4zMzM2OTIsLTg4Ny4zOTg1NywtMTg1LjUxODg5KSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MzgxOSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gNy4yNSwyNS4zNzUgNzkuNjYwNjA2LDAgQyA5MC42MjUsMjUuMzc1IDEwOC43NSw0MS44NjYwNzggMTA4Ljc1LDQ3LjA5MTkxOCBsIDAsNTAuNzgzMDgyIC0xMDEuNSwwIDAsLTcyLjUgeiIKICAgaWQ9InJlY3QyOTY2IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIgLz48cGF0aAogICBkPSJtIDguMTU2MjUsMjkuOTA2MjUgMCw3MC42ODc1IDk5LjY4NzUsMCAwLC00OS44NzUgYyAwLC0wLjc4MDcgLTEuMDAzNDQsLTIuODA1MTI5IC0yLjcxODc1LC01LjAzMTI1IC0xLjcxNTMxLC0yLjIyNjEyMSAtNC4wNTgwNywtNC43NjA4IC02LjUzMTI1LC03LjEyNSAtMi40NzMxODMsLTIuMzY0MiAtNS4wNzIzNjgsLTQuNTYwODY1IC03LjI1LC02LjE1NjI1IC0xLjA4ODgxNiwtMC43OTc2OTMgLTIuMDc5ODk1LC0xLjQ0NDIxIC0yLjg3NSwtMS44NzUgLTAuNzk1MTA1LC0wLjQzMDc5IC0xLjQzNDY2NiwtMC42MjUgLTEuNTYyNSwtMC42MjUgbCAtNzguNzUsMCB6IgogICBpZD0icGF0aDM4NDkiCiAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MTg5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gNy4yNSAyOSBMIDcuMjUgMTAxLjUgTCAxMDguNzUgMTAxLjUgTCAxMDguNzUgNTAuNzE4NzUgQyAxMDguNzUgNDUuNDkyOTEgOTAuNjIwNjQ0IDI5IDg2LjkwNjI1IDI5IEwgNy4yNSAyOSB6ICIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC45MDkzMTA3IgogICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpvZmZzZXQiCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMuNjI1KSIgLz48cGF0aAogICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpvZmZzZXQiCiAgIGlua3NjYXBlOnJhZGl1cz0iLTEuODAyMzkwNSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gNy4yNSAyOSBMIDcuMjUgMTAxLjUgTCAxMDguNzUgMTAxLjUgTCAxMDguNzUgNTAuNzE4NzUgQyAxMDguNzUgNDUuNDkyOTEgOTAuNjIwNjQ0IDI5IDg2LjkwNjI1IDI5IEwgNy4yNSAyOSB6ICIKICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDM4NDcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICBpZD0icGF0aDM4NDUiCiAgIGQ9Im0gOS4wNjI1LDMwLjgxMjUgMCw2OC44NzUgOTcuODc1LDAgMCwtNDguOTY4NzUgYyAwLC0wLjI2NDMyNSAtMC44MjYzLC0yLjMyNzg3MiAtMi41LC00LjUgLTEuNjczNywtMi4xNzIxMjggLTQuMDIwMjUsLTQuNjkwNjQ5IC02LjQ2ODc1LC03LjAzMTI1IC0yLjQ0ODQ5NSwtMi4zNDA2MDEgLTUuMDIyMTU5LC00LjQ5OTAxNCAtNy4xNTYyNSwtNi4wNjI1IC0xLjA2NzA0NSwtMC43ODE3NDMgLTIuMDA5OTkzLC0xLjQxMTU2MiAtMi43NSwtMS44MTI1IC0wLjc0MDAwNywtMC40MDA5MzggLTEuMzU4ODc2LC0wLjUgLTEuMTU2MjUsLTAuNSBsIC03Ny44NDM3NSwwIHoiCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMuNjI1KSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjQwMjExNjM2O3N0cm9rZTpub25lIgogICBkPSJtIDEyLjY4NzUsMjkuOTA2MjUgMCwwLjQ1MzEyNSAwLDYyLjk4NDM3NSAwLjQ1MzEyNSwwIDkwLjYyNTAwNSwwIDAuNDUzMTIsMCAwLC0wLjQ1MzEyNSAwLC01MC4yOTY4NzUgLTAuNDUzMTIsMCAwLDUwLjI5Njg3NSAtOTAuNjI1MDA1LDAgMCwtNjIuNTMxMjUgNzkuMjk2ODc1LDAgMCwtMC40NTMxMjUgLTc5Ljc1LDAgeiIKICAgaWQ9InJlY3Q0MDMyIgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjYyIgLz48cGF0aAogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICBpZD0icGF0aDM3OTciCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTA2MjUsMCwwLDAuOTA2MjUsMCwtMy42MjUpIgogICBkPSJNIDk3LjQxNDIxNCwzMiBDIDEwMS40MTQyMSwzMiAxMDMuMzE0OTksNDguMDM5MjUgMTA0LDUzLjYzNTE4NCAxMDcuODYwMDcsNTEuMTcxNDE1IDEyMCw1MiAxMjAsNTYgbCAwLDAgQyAxMjAsNTAuMjQwOTU5IDEwMy4xMDM1MSwzMiA5Ny40MTQyMTQsMzIgeiIKICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM4MDUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjM4MDcpIgogICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzODEzKSIgLz48cGF0aAogICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM0Nik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gODcsMjUuMzc1IGMgMy42MjUsMCA0LjU4NjIyMywxMy43MzQ1NTEgNS4yMDcwMTMsMTguODA1ODY3IEMgOTUuNzA1MjAyLDQxLjk0ODA3NiAxMDguNzUsNDMuNSAxMDguNzUsNDcuMTI1IGwgMCwtMC4wMjgzMiBDIDEwOC43NSw0MS44Nzc1NDkgOTIuMTU1OTI4LDI1LjM3NSA4NywyNS4zNzUgeiIKICAgaWQ9InJlY3QzNzY4IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOm9mZnNldCIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC44NDIwMDc4MiIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gOTYgMzIgQyAxMDAgMzIgMTAxLjA2NDk5IDQ3LjE1NDA2NiAxMDEuNzUgNTIuNzUgQyAxMDUuNjAwOTggNTAuMjkyMDMyIDExOS45MzI1MiA1MS45ODg5MjUgMTIwIDU1Ljk2ODc1IEMgMTIwIDUwLjIwOTcwOSAxMDEuNjg5MyAzMiA5NiAzMiB6ICIKICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM4NTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICBpZD0icGF0aDM4NTUiCiAgIGQ9Im0gOTkuMjUsMzQuMTU2MjUgYyAwLjcxNzU0OCwxLjYxNjY2OCAxLjI1NzQ5LDMuNzAzMjg1IDEuNjg3NSw1Ljk2ODc1IDAuNzkwNzgsNC4xNjYxMjYgMS4xNzMxMyw4LjU4MjU3MiAxLjUsMTEuNDY4NzUgMS4wNjY1LC0wLjQwNjA4MyAyLjI3NjQ1LC0wLjY4NjEzOCAzLjcxODc1LC0wLjc4MTI1IDEuOTU5NTUsLTAuMTI5MjIxIDQuMTU1MjgsLTAuMDAzNSA2LjI1LDAuMzEyNSAxLjk5MzMzLDAuMzAwNzM4IDMuODc1MTcsMC43ODY1ODYgNS4zNzUsMS40Njg3NSAtMC40MTgwMiwtMC43NDM0MjEgLTAuODA1NjgsLTEuNDc1MjY5IC0xLjQwNjI1LC0yLjMxMjUgLTEuNzY3MiwtMi40NjM1OTUgLTQuMjI2MjcsLTUuMjY1Njk2IC02Ljg0Mzc1LC03Ljg3NSAtMi42MTc0OCwtMi42MDkzMDQgLTUuNDExMzEsLTUuMDIxOTUxIC03Ljg3NSwtNi43ODEyNSAtMC44Nzc5OCwtMC42MjY5NTYgLTEuNjM0OTEsLTEuMDQyNDEgLTIuNDA2MjUsLTEuNDY4NzUgeiIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLjE4MTI1LC0zLjg5Njg3NSkiIC8+PHBhdGgKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLjE4MTI1LC0zLjg5Njg3NSkiCiAgIGQ9Im0gOTkuMjUsMzQuMTU2MjUgYyAwLjcxNzc3NCwxLjYxNzE3NSAxLjI1NzQ2LDMuNzAzMTM3IDEuNjg3NSw1Ljk2ODc1IDAuNzg4NzEsNC4xNTUyMzggMS4xNzM0NSw4LjU0OTM3OSAxLjUsMTEuNDM3NSAxLjA2MjY3LC0wLjQwMDM1OCAyLjI4Njg2LC0wLjY1NTU3NSAzLjcxODc1LC0wLjc1IDEuOTU5ODgsLTAuMTI5MjQ0IDQuMTU1MDIsLTAuMDM0ODIgNi4yNSwwLjI4MTI1IDEuOTgyNDIsMC4yOTkwOTIgMy44NDc1LDAuODIzNjYyIDUuMzQzNzUsMS41IC0wLjQxNzQ4LC0wLjc0MjE0MSAtMC43NzU2NCwtMS40NzY5NTUgLTEuMzc1LC0yLjMxMjUgLTEuNzY3MDIsLTIuNDYzMzUgLTQuMjI2MzksLTUuMjM0NTY5IC02Ljg0Mzc1LC03Ljg0Mzc1IC0yLjYxNzM2LC0yLjYwOTE4MSAtNS40MTE1NiwtNS4wNTMzNzUgLTcuODc1LC02LjgxMjUgLTAuODc3ODksLTAuNjI2ODk0IC0xLjYzNTAzLC0xLjA0MjUyNSAtMi40MDYyNSwtMS40Njg3NSB6IgogICBpZD0icGF0aDUxNTEiCiAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MTU5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgaW5rc2NhcGU6b3JpZ2luYWw9Ik0gOTYgMzIgQyAxMDAgMzIgMTAxLjA2NDk5IDQ3LjE1NDA2NiAxMDEuNzUgNTIuNzUgQyAxMDUuNjAwOTggNTAuMjkyMDMyIDExOS45MzI1MiA1MS45ODg5MjUgMTIwIDU1Ljk2ODc1IEMgMTIwIDUwLjIwOTcwOSAxMDEuNjg5MyAzMiA5NiAzMiB6ICIKICAgaW5rc2NhcGU6cmFkaXVzPSItMC44NDU4NzEzMyIKICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6b2Zmc2V0IiAvPjxwYXRoCiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIGQ9Im0gNjkuNzgxMjUsODQuMjgxMjUgMCwwLjQ1MzEyNSAwLDguMTU2MjUgMC40NTMxMjUsMCAwLC04LjE1NjI1IDMzLjUzMTI1NSwwIDAsLTAuNDUzMTI1IC0zMy41MzEyNTUsMCAtMC40NTMxMjUsMCB6IgogICBpZD0icmVjdDQwNDEiCiAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPjxyZWN0CiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIGlkPSJyZWN0NDA0NiIKICAgd2lkdGg9IjAuNDUzMTI1IgogICBoZWlnaHQ9IjguMTU2MjUiCiAgIHg9Ijg0LjI4MTI1IgogICB5PSI4NC43MzQzNzUiIC8+PHJlY3QKICAgeT0iODguODEyNSIKICAgeD0iLTg0LjI4MTI1IgogICBoZWlnaHQ9IjAuNDUzMTI1IgogICB3aWR0aD0iMTQuMDQ2ODc1IgogICBpZD0icmVjdDQwNDgiCiAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjAuNDAyMTE2MzY7c3Ryb2tlOm5vbmUiCiAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8+PHJlY3QKICAgeT0iODQuNzM0Mzc1IgogICB4PSI5NC4yNSIKICAgaGVpZ2h0PSI4LjE1NjI1IgogICB3aWR0aD0iMC40NTMxMjUiCiAgIGlkPSJyZWN0NDA1MCIKICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MC40MDIxMTYzNjtzdHJva2U6bm9uZSIgLz48cGF0aAogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC4wOTA2MjUsMC4wOTA2MjUpIgogICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjQwMjExNjM2O3N0cm9rZTpub25lIgogICBkPSJtIDUyLjc4MTI1LDMzLjI4MTI1IC02LDMuNDY4NzUgYyAtMC4xMTUzNDgsLTAuMDgzNDkgLTAuMjQ1NjY0LC0wLjEyNSAtMC40MDYyNSwtMC4xMjUgLTAuMzEyNDQ2LDAgLTAuNTc2NDE0LDAuMjAzNTE5IC0wLjY4NzUsMC40Njg3NSBsIC03LjE4NzUsMCBDIDM4LjM4NjA5OSwzNi44MzQ3MzkgMzguMTUwODA5LDM2LjYyNSAzNy44NDM3NSwzNi42MjUgYyAtMC4zMDcwNTgsMCAtMC41NDIzNDYsMC4yMDk3NCAtMC42NTYyNSwwLjQ2ODc1IGwgLTcuMTI1LDAgLTAuMDMxMjUsMCAtMi44MTI1LC0xLjY1NjI1IGMgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjUzMTI1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IGwgMS43NSwxIC0xMi41OTM3NSwwIGMgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjQ2ODc1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCBsIDEyLjc4MTI1LDAgLTEuOTM3NSwxLjA5Mzc1IGMgLTAuMDEzNiwwLjAwNjQgLTAuMDI0ODUsMC4wMTc2NSAtMC4wMzEyNSwwLjAzMTI1IC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IGwgMCwwLjUzMTI1IGMgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgMC4wMDY0LDAuMDEzNiAwLjAxNzY1LDAuMDI0ODYgMC4wMzEyNSwwLjAzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgbCAyLjkzNzUsLTEuNzUgMC4wMzEyNSwwIDcsMCBjIDAuMDc3MDYsMC4xNjQ1MTkgMC4yMTA5MjEsMC4yNzM0OTUgMC4zNzUsMC4zNDM3NSBsIDAsMy41OTM3NSBjIC0yLjc3OTA2MiwwLjE1MDY1OCAtNSwyLjQ2NTEyMiAtNSw1LjI4MTI1IDAsMi44MTYxMyAyLjIyMDkzOCw1LjEzMDU5MiA1LDUuMjgxMjUgbCAwLDQuMzc1IGMgLTIuNzg3MzMsMC4xNDIwNCAtNS4wMzEyNSwyLjQ1OTA4NyAtNS4wMzEyNSw1LjI4MTI1IDAsMi44MjIxNjUgMi4yNDM5Miw1LjEzOTIxIDUuMDMxMjUsNS4yODEyNSBsIDAsNC40MDYyNSBjIC0yLjc4NzMzLDAuMTQyMDQgLTUuMDMxMjUsMi40NTkwODcgLTUuMDMxMjUsNS4yODEyNSAwLDIuODIyMTY1IDIuMjQ0MzksNS4xMDg0MyA1LjAzMTI1LDUuMjUgbCAwLDMuNjUzMTI1IGMgLTAuMTc0MDg4LDAuMDczOTYgLTAuMjk3MTE0LDAuMjM1MTk3IC0wLjM3NSwwLjQwNjI1IGwgLTguODc1LDAgMS45Mzc1LC0xLjEyNSBjIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODUsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjUgYyAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgLTAuMDA2NCwtMC4wMTM2IC0wLjAxNzY1LC0wLjAyNDg2IC0wLjAzMTI1LC0wLjAzMTI1IC0wLjAxMDIxLC0wLjAwMjUgLTAuMDIxMDQsLTAuMDAyNSAtMC4wMzEyNSwwIC0wLjAxMDIxLC0wLjAwMjUgLTAuMDIxMDQsLTAuMDAyNSAtMC4wMzEyNSwwIGwgLTIuODc1LDEuNjU2MjUgYyAtMC4wMTM2LDAuMDA2NCAtMC4wMjQ4NSwwLjAxNzY1IC0wLjAzMTI1LDAuMDMxMjUgbCAtMC4wMzEyNSwwLjA2MjUgLTEwLjAzMTI1LDAgYyAtMC4wMTAyMSwtMC4wMDI1IC0wLjAyMTA0LC0wLjAwMjUgLTAuMDMxMjUsMCAtMC4wMTM2LDAuMDA2NCAtMC4wMjQ4NSwwLjAxNzY1IC0wLjAzMTI1LDAuMDMxMjUgLTAuMDAyNSwwLjAxMDIxIC0wLjAwMjUsMC4wMjEwNCAwLDAuMDMxMjUgbCAwLDAuNDM3NSBjIC0wLjAwMjUsMC4wMTAyMSAtMC4wMDI1LDAuMDIxMDQgMCwwLjAzMTI1IDAuMDA2NCwwLjAxMzYgMC4wMTc2NSwwLjAyNDg2IDAuMDMxMjUsMC4wMzEyNSAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgbCAxMC4xMjUsMCAwLjAzMTI1LDAgMi44MTI1LDEuNjU2MjUgYyAwLjAxMDIxLDAuMDAyNSAwLjAyMTA0LDAuMDAyNSAwLjAzMTI1LDAgMC4wMTAyMSwwLjAwMjUgMC4wMjEwNCwwLjAwMjUgMC4wMzEyNSwwIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODUsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjUgYyAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgLTAuMDA2NCwtMC4wMTM2IC0wLjAxNzY1LC0wLjAyNDg2IC0wLjAzMTI1LC0wLjAzMTI1IGwgLTEuNzUsLTEuMDMxMjUgOC42ODc1LDAgYyAwLjExMzkwMSwwLjI1OTAxMSAwLjM0OTE5MiwwLjQ2ODc1IDAuNjU2MjUsMC40Njg3NSAwLjMwNzA1OSwwIDAuNTQyMzQ2LC0wLjIwOTc0IDAuNjU2MjUsLTAuNDY4NzUgbCAyNC4wMzEyNSwwIGMgMC4wMTAyMSwwLjAwMjUgMC4wMjEwNCwwLjAwMjUgMC4wMzEyNSwwIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODYsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAwLC0wLjQzNzUgMCwtOC44NjU2MjUgQyA2Mi43NzI4MTIsNzcuMjQyNjc0IDYyLjkyMzc5NSw3Ny4wOTAwNzIgNjMsNzYuOTEyNSBsIDMuOTY4NzUsMCBjIDAuMTUwNjY2LDIuNzc4NjMyIDIuNDY1NjAyLDQuOTY4NzUgNS4yODEyNSw0Ljk2ODc1IDIuODE2MTE0LDAgNS4wOTk3NzgsLTIuMTkwODg3IDUuMjUsLTQuOTY4NzUgbCA0LjA2MjUsMCBjIDAuMTA1MzEyLDAuMjc1ODc2IDAuMzY5NjIyLDAuNDY4NzUgMC42ODc1LDAuNDY4NzUgMC40MTE4NDEsMCAwLjc1LC0wLjM0MTEwOSAwLjc1LC0wLjc1IDAsLTAuMzEwNDU5IC0wLjIwMDgwNCwtMC41NzcwNDEgLTAuNDY4NzUsLTAuNjg3NSBsIDAsLTEzLjIxNTYyNSBDIDgyLjc5ODcxNiw2Mi42MTc0MjEgODMsNjIuMzUwODQ4IDgzLDYyLjA0MDYyNSBjIDAsLTAuMzEwMjIyIC0wLjIwMTI4NCwtMC41NzY3OTcgLTAuNDY4NzUsLTAuNjg3NSBsIDAsLTE0LjA2MjUgQyA4Mi43OTIzMDksNDcuMTc2OTkyIDgzLDQ2LjkzOTI0OSA4Myw0Ni42MzQzNzUgYyAwLC0wLjMwNDg3MyAtMC4yMDc2OTEsLTAuNTQyNjE4IC0wLjQ2ODc1LC0wLjY1NjI1IGwgMCwtOC4zNTMxMjUgMCwtMC40Njg3NSBjIDAuMDAyNSwtMC4wMTAyMSAwLjAwMjUsLTAuMDIxMDQgMCwtMC4wMzEyNSAtMC4wMDY0LC0wLjAxMzYgLTAuMDE3NjUsLTAuMDI0ODYgLTAuMDMxMjUsLTAuMDMxMjUgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgbCAtMjcuNjU2MjUsMCBDIDU0LjY5ODU5OSwzNi44MzQ3MzkgNTQuNDYzMzA5LDM2LjYyNSA1NC4xNTYyNSwzNi42MjUgYyAtMC40MTE4NDEsMCAtMC43NSwwLjM0MTExIC0wLjc1LDAuNzUgMCwwLjQwODg5MSAwLjMzODE1OSwwLjc1IDAuNzUsMC43NSAwLjMwMjYzNCwwIDAuNTQxNDYxLC0wLjE4MDA1MSAwLjY1NjI1LC0wLjQzNzUgbCAyNy4xMjUsMCAwLDguMjkwNjI1IGMgLTAuMTY1NzQ1LDAuMDc3MDIgLTAuMjczNDgsMC4yMTIxODQgLTAuMzQzNzUsMC4zNzUgbCAtNC4wMzEyNSwwIGMgLTAuMTUwNjU4LC0yLjc3OTA2MiAtMi40NjUxMiwtNSAtNS4yODEyNSwtNSAtMi44MTYxMjgsMCAtNS4xMzA1OTIsMi4yMjA5MzggLTUuMjgxMjUsNSBsIC00LDAgYyAtMC4xMDUzMTIsLTAuMjc1ODc2IC0wLjM2OTYyMSwtMC40Njg3NSAtMC42ODc1LC0wLjQ2ODc1IC0wLjQxMTg0MSwwIC0wLjc1LDAuMzQxMTEgLTAuNzUsMC43NSAwLDAuMzAwNjUzIDAuMTc3NTksMC41NDE5OCAwLjQzNzUsMC42NTYyNSBsIDAsMTQuMDYyNSBjIC0wLjI2Njg3NiwwLjExMTQ5NSAtMC40Mzc1LDAuMzgxODE2IC0wLjQzNzUsMC42ODc1IDAsMC4zMDU2ODUgMC4xNzA2MjQsMC41NzYwMDUgMC40Mzc1LDAuNjg3NSBsIDAsMTMuMjE1NjI1IGMgLTAuMjY2ODc2LDAuMTExNDk1IC0wLjQzNzUsMC4zODE4MTYgLTAuNDM3NSwwLjY4NzUgMCwwLjMwNTY4NSAwLjE3MDYyNCwwLjU3NjAwNSAwLjQzNzUsMC42ODc1IGwgMCw4LjgwMzEyNSAtMjMuNSwwIGMgLTAuMDc3ODksLTAuMTcxMDUzIC0wLjIwMDkxMSwtMC4zMzIyODggLTAuMzc1LC0wLjQwNjI1IGwgMCwtMy42NTMxMjUgYyAyLjc2NTY3LC0wLjE2MzgxMiA0Ljk2ODc1LC0yLjQ0MzE5MyA0Ljk2ODc1LC01LjI1IDAsLTIuODA2ODA1IC0yLjIwMjYwNywtNS4xMTY5NjggLTQuOTY4NzUsLTUuMjgxMjUgbCAwLC00LjQwNjI1IGMgMi43NjYxNDMsLTAuMTY0MjgyIDQuOTY4NzUsLTIuNDc0NDQzIDQuOTY4NzUsLTUuMjgxMjUgMCwtMi44MDY4MDUgLTIuMjAyNjA3LC01LjExNjk2OCAtNC45Njg3NSwtNS4yODEyNSBsIDAsLTQuMzc1IGMgMi43NzkwNjMsLTAuMTUwNjU4IDUsLTIuNDY1MTIgNSwtNS4yODEyNSAwLC0yLjgxNjEyOCAtMi4yMjA5MzcsLTUuMTMwNTkyIC01LC01LjI4MTI1IGwgMCwtMy41OTM3NSBjIDAuMTY0MDc4LC0wLjA3MDI2IDAuMjk3OTQyLC0wLjE3OTIzIDAuMzc1LC0wLjM0Mzc1IGwgNy4xODc1LDAgYyAwLjExMTg4OSwwLjI2NDY2NiAwLjM3OTU1NywwLjQzNzUgMC42ODc1LDAuNDM3NSAwLjQxMTg0MSwwIDAuNzE4NzUsLTAuMzQ0NzU0IDAuNzE4NzUsLTAuNzUgMCwtMC4wMzQyOCAwLjAwNzUsLTAuMDcxOTkgMCwtMC4wOTM3NSBsIDUuOTY4NzUsLTMuNSBjIDAuMDEzNiwtMC4wMDY0IDAuMDI0ODYsLTAuMDE3NjUgMC4wMzEyNSwtMC4wMzEyNSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgMC4wMDI1LC0wLjAxMDIxIDAuMDAyNSwtMC4wMjEwNCAwLC0wLjAzMTI1IEwgNTIuODc1LDMzLjMxMjUgYyAtMC4wMDY0LC0wLjAxMzYgLTAuMDE3NjUsLTAuMDI0ODYgLTAuMDMxMjUsLTAuMDMxMjUgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgLTAuMDEwMjEsLTAuMDAyNSAtMC4wMjEwNCwtMC4wMDI1IC0wLjAzMTI1LDAgeiBtIC0xNC45Mzc1LDguOTA2MjUgYyAxLjE5MzQ4MywwIDIuMjY1NzAyLDAuNDg0MDYyIDMuMDkzNzUsMS4yMTg3NSBsIC0zLjA5Mzc1LDMuMTI1IC0zLjEyNSwtMy4xMjUgYyAwLjgyODY2NiwtMC43MzQxOTkgMS45MzE1MTksLTEuMjE4NzUgMy4xMjUsLTEuMjE4NzUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IGMgMS4xOTM0ODMsMCAyLjI2NTcwMiwwLjQ4NDA2MiAzLjA5Mzc1LDEuMjE4NzUgbCAtMy4wOTM3NSwzLjEyNSAtMy4xMjUsLTMuMTI1IGMgMC44Mjg2NjYsLTAuNzM0MTk5IDEuOTMxNTE5LC0xLjIxODc1IDMuMTI1LC0xLjIxODc1IHogbSAtMzcuOTM3NSwxLjg2NTYyNSAzLjEyNSwzLjEyNSBMIDM0LjM0Mzc1LDUwIEMgMzMuNjA5MDYyLDQ5LjE3MTk1MiAzMy4xMjUsNDguMDk5NzMzIDMzLjEyNSw0Ni45MDYyNSBjIDAsLTEuMTkzNDgxIDAuNDg0NTUxLC0yLjI5NjMzNCAxLjIxODc1LC0zLjEyNSB6IG0gNi45Njg3NSwwIGMgMC43MzQxOTksMC44Mjg2NjYgMS4yMTg3NSwxLjkzMTUxOSAxLjIxODc1LDMuMTI1IDAsMS4xOTM0ODMgLTAuNDg0MDYyLDIuMjY1NzAyIC0xLjIxODc1LDMuMDkzNzUgbCAtMy4wOTM3NSwtMy4wOTM3NSAzLjA5Mzc1LC0zLjEyNSB6IG0gMjcuNDY4NzUsLTAuMjcxODc1IDMuMTI1LDMuMTI1IC0zLjEyNSwzLjA5Mzc1IGMgLTAuNzM0Njg4LC0wLjgyODA0OCAtMS4yMTg3NSwtMS45MDAyNjcgLTEuMjE4NzUsLTMuMDkzNzUgMCwtMS4xOTM0ODEgMC40ODQ1NTEsLTIuMjk2MzM0IDEuMjE4NzUsLTMuMTI1IHogbSA2Ljk2ODc1LDAgYyAwLjczNDE5OSwwLjgyODY2NiAxLjIxODc1LDEuOTMxNTE5IDEuMjE4NzUsMy4xMjUgMCwxLjE5MzQ4MyAtMC40ODQwNjIsMi4yNjU3MDIgLTEuMjE4NzUsMy4wOTM3NSBsIC0zLjA5Mzc1LC0zLjA5Mzc1IDMuMDkzNzUsLTMuMTI1IHogbSAtMTIuNzUsMy40MDYyNSA0LDAgYyAwLjE1MDY1OCwyLjc3OTA2MyAyLjQ2NTEyMiw1IDUuMjgxMjUsNSAyLjgxNjEzLDAgNS4xMzA1OTIsLTIuMjIwOTM3IDUuMjgxMjUsLTUgbCA0LjAzMTI1LDAgYyAwLjA3MDI3LDAuMTYyODE1IDAuMTc4MDA0LDAuMjk3OTg1IDAuMzQzNzUsMC4zNzUgbCAwLDE0LjA2MjUgYyAtMC4xNjkyODMsMC4wNzA4MyAtMC4yNzAxNzEsMC4yMDkzOTUgLTAuMzQzNzUsMC4zNzUgbCAtNC4wNjI1LDAgYyAwLjAwMTYsLTAuMDUyOTkgMCwtMC4xMDI4ODIgMCwtMC4xNTYyNSAwLC0yLjkxMzI2IC0yLjM2Nzk5LC01LjI4MTI1IC01LjI4MTI1LC01LjI4MTI1IC0yLjkxMzI2LDAgLTUuMjgxMjUsMi4zNjc5OSAtNS4yODEyNSw1LjI4MTI1IDAsMC4wNTI2NCAtMi42MmUtNCwwLjEwMzE0MiAwLDAuMTU2MjUgbCAtMy45Njg3NSwwIGMgLTAuMDc1MzYsLTAuMTcyMjQgLTAuMjM3MzU3LC0wLjI3MTQzMyAtMC40MDYyNSwtMC4zNDM3NSBsIDAsLTE0LjA5Mzc1IGMgMC4xNzI2NDgsLTAuMDc3NzQgMC4zMzIxNDQsLTAuMjAyMjEzIDAuNDA2MjUsLTAuMzc1IHogTSAzNy44NDM3NSw0Ny4yODEyNSA0MC45Mzc1LDUwLjM3NSBjIC0wLjgyODA0OCwwLjczNDY4OCAtMS45MDAyNjcsMS4yMTg3NSAtMy4wOTM3NSwxLjIxODc1IC0xLjE5MzQ4MSwwIC0yLjI5NjMzNCwtMC40ODQ1NTEgLTMuMTI1LC0xLjIxODc1IGwgMy4xMjUsLTMuMDkzNzUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IDMuMDkzNzUsMy4wOTM3NSBjIC0wLjgyODA0OCwwLjczNDY4OCAtMS45MDAyNjcsMS4yMTg3NSAtMy4wOTM3NSwxLjIxODc1IC0xLjE5MzQ4MSwwIC0yLjI5NjMzNCwtMC40ODQ1NTEgLTMuMTI1LC0xLjIxODc1IGwgMy4xMjUsLTMuMDkzNzUgeiBNIDM3LjgxMjUsNTcuMTU2MjUgYyAxLjE3OTY3NiwwIDIuMjM4MjI3LDAuNDY4Mjg5IDMuMDYyNSwxLjE4NzUgbCAtMy4wMzEyNSwzLjA2MjUgLTMuMDYyNSwtMy4wNjI1IGMgMC44MjIxODYsLTAuNzExODEzIDEuODU5ODUsLTEuMTg3NSAzLjAzMTI1LC0xLjE4NzUgeiBNIDcyLjI1LDU2Ljg4NDM3NSBjIDEuMTc5Njc2LDAgMi4yMzgyMjcsMC40NjgyODkgMy4wNjI1LDEuMTg3NSBsIC0zLjAzMTI1LDMuMDYyNSAtMy4wNjI1LC0zLjA2MjUgYyAwLjgyMjE4NiwtMC43MTE4MTMgMS44NTk4NSwtMS4xODc1IDMuMDMxMjUsLTEuMTg3NSB6IG0gLTM3Ljg3NSwxLjgwMzEyNSAzLjA5Mzc1LDMuMDkzNzUgLTMuMTg3NSwzLjE1NjI1IGMgLTAuMDA0NSwtMC4wMDUyIC0wLjAyNjgyLDAuMDA1MiAtMC4wMzEyNSwwIC0wLjcwOTM0NCwtMC44Mjc3NTQgLTEuMTI1LC0xLjkyMDYzOCAtMS4xMjUsLTMuMDkzNzUgMCwtMS4yMTY1ODYgMC40OTEyMTQsLTIuMzIyNjE3IDEuMjUsLTMuMTU2MjUgeiBtIDM0LjQzNzUsLTAuMjcxODc1IDMuMDkzNzUsMy4wOTM3NSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTIgLTAuMDI2ODIsMC4wMDUyIC0wLjAzMTI1LDAgLTAuNzA5MzQ0LC0wLjgyNzc1NCAtMS4xMjUsLTEuOTIwNjM4IC0xLjEyNSwtMy4wOTM3NSAwLC0xLjIxNjU4NiAwLjQ5MTIxNCwtMi4zMjI2MTcgMS4yNSwtMy4xNTYyNSB6IE0gNDEuMjUsNTguNzE4NzUgYyAwLjc1MTU1MiwwLjgzMTgzNSAxLjI1LDEuOTE2MzY2IDEuMjUsMy4xMjUgMCwxLjE2NjQwMyAtMC40ODA0MjgsMi4yMDk5OCAtMS4xODc1LDMuMDMxMjUgTCAzOC4yMTg3NSw2MS43ODEyNSA0MS4yNSw1OC43MTg3NSB6IG0gMzQuNDM3NSwtMC4yNzE4NzUgYyAwLjc1MTU1MiwwLjgzMTgzNSAxLjI1LDEuOTE2MzY2IDEuMjUsMy4xMjUgMCwxLjE2NjQwMyAtMC40ODA0MjgsMi4yMDk5OCAtMS4xODc1LDMuMDMxMjUgbCAtMy4wOTM3NSwtMy4wOTM3NSAzLjAzMTI1LC0zLjA2MjUgeiBNIDM3Ljg0Mzc1LDYyLjEyNSBsIDMuMTI1LDMuMTU2MjUgYyAtMC44Mjk2ODEsMC43Nzk4MDEgLTEuOTMwNTYzLDEuMjgxMjUgLTMuMTU2MjUsMS4yODEyNSAtMS4yMTU4MjksMCAtMi4zMjQ1NzMsLTAuNDU1MDc2IC0zLjE1NjI1LC0xLjIxODc1IDAuMDAyNSwtMC4wMTAyMSAwLjAwMjUsLTAuMDIxMDQgMCwtMC4wMzEyNSBsIDMuMTg3NSwtMy4xODc1IHogbSAzNC40Mzc1LC0wLjI3MTg3NSAzLjEyNSwzLjE1NjI1IGMgLTAuODI5NjgxLDAuNzc5ODAxIC0xLjkzMDU2MywxLjI4MTI1IC0zLjE1NjI1LDEuMjgxMjUgLTEuMjE1ODI5LDAgLTIuMzI0NTczLC0wLjQ1NTA3NiAtMy4xNTYyNSwtMS4yMTg3NSAwLjAwMjUsLTAuMDEwMjEgMC4wMDI1LC0wLjAyMTA0IDAsLTAuMDMxMjUgbCAzLjE4NzUsLTMuMTg3NSB6IE0gNjMsNjIuMzIxODc1IGwgNC4wMzEyNSwwIGMgMC4zNjcyNjgsMi41NTU3ODIgMi41NjIzNzUsNC41MzEyNSA1LjIxODc1LDQuNTMxMjUgMi42NTU5ODgsMCA0Ljg1MDAxNSwtMS45NzU2MyA1LjIxODc1LC00LjUzMTI1IDAuMDEwMjEsMC4wMDI1IDAuMDIxMDQsMC4wMDI1IDAuMDMxMjUsMCBsIDQuMDkzNzUsMCBjIDAuMDcyMzMsMC4xNjc1OTQgMC4xNzAwODMsMC4zMzEwMyAwLjM0Mzc1LDAuNDA2MjUgbCAwLDEzLjIxNTYyNSBjIC0wLjE2OTYzMywwLjA3MDcgLTAuMjcwMTY5LDAuMjA5MjUgLTAuMzQzNzUsMC4zNzUgbCAtNC4wOTM3NSwwIEMgNzcuMzM0MDk3LDczLjU1Mzc2NCA3NS4wNTU4OTYsNzEuMzUgNzIuMjUsNzEuMzUgYyAtMi44MTU2NDgsMCAtNS4xMzA1ODQsMi4xOTAxMTkgLTUuMjgxMjUsNC45Njg3NSBsIC0zLjk2ODc1LDAgQyA2Mi45MjQ2NCw3Ni4xNDY1MSA2Mi43NjI2NDMsNzYuMDQ3MzE3IDYyLjU5Mzc1LDc1Ljk3NSBsIDAsLTEzLjI0Njg3NSBDIDYyLjc3MjgxMiw2Mi42NTIwNDkgNjIuOTIzNzk1LDYyLjQ5OTQ0NyA2Myw2Mi4zMjE4NzUgeiBNIDM3LjgxMjUsNzIuMTI1IGMgMS4xODA3NjgsMCAyLjIzODg3MiwwLjQzODczMyAzLjA2MjUsMS4xNTYyNSBsIC0zLjAzMTI1LDMuMDYyNSAtMy4wNjI1LC0zLjA2MjUgQyAzNS42MDI3ODIsNzIuNTcxMTM0IDM2LjY0LDcyLjEyNSAzNy44MTI1LDcyLjEyNSB6IE0gNzIuMjUsNzEuOTQzNzUgYyAxLjE4MDc2OCwwIDIuMjM4ODcyLDAuNDM4NzMzIDMuMDYyNSwxLjE1NjI1IEwgNzIuMjgxMjUsNzYuMTYyNSA2OS4yMTg3NSw3My4xIEMgNzAuMDQwMjgyLDcyLjM4OTg4NCA3MS4wNzc1LDcxLjk0Mzc1IDcyLjI1LDcxLjk0Mzc1IHogbSAtMzcuODc1LDEuNzEyNSAzLjA5Mzc1LDMuMDYyNSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTEgLTAuMDI2ODIsMC4wMDUxIC0wLjAzMTI1LDAgLTAuNzA5Mjc2LC0wLjgyMDc0OCAtMS4xMjUsLTEuODg5Mzg4IC0xLjEyNSwtMy4wNjI1IDAsLTEuMjE2NTg2IDAuNDkxMjE0LC0yLjMyMjYxNyAxLjI1LC0zLjE1NjI1IHogbSA2Ljg3NSwwIGMgMC43NTEwNiwwLjgzMjQ1OSAxLjI1LDEuOTQ3NjE1IDEuMjUsMy4xNTYyNSAwLDEuMTY2NDAzIC0wLjQ3OTk0NiwyLjE3OTMzNyAtMS4xODc1LDMgTCAzOC4yMTg3NSw3Ni43MTg3NSA0MS4yNSw3My42NTYyNSB6IG0gMjcuNTYyNSwtMC4xODEyNSAzLjA5Mzc1LDMuMDYyNSAtMy4xODc1LDMuMTU2MjUgYyAtMC4wMDQ1LC0wLjAwNTEgLTAuMDI2ODIsMC4wMDUxIC0wLjAzMTI1LDAgLTAuNzA5Mjc2LC0wLjgyMDc0OCAtMS4xMjUsLTEuODg5Mzg4IC0xLjEyNSwtMy4wNjI1IDAsLTEuMjE2NTg2IDAuNDkxMjE0LC0yLjMyMjYxNyAxLjI1LC0zLjE1NjI1IHogbSA2Ljg3NSwwIGMgMC43NTEwNiwwLjgzMjQ1OSAxLjI1LDEuOTQ3NjE1IDEuMjUsMy4xNTYyNSAwLDEuMTY2NDAzIC0wLjQ3OTk0NiwyLjE3OTMzNyAtMS4xODc1LDMgTCA3Mi42NTYyNSw3Ni41Mzc1IDc1LjY4NzUsNzMuNDc1IHogbSAtMzcuODQzNzUsMy42MTg3NSAzLjEyNSwzLjEyNSBDIDQwLjEzOTA2OSw4MC45OTg1NTEgMzkuMDM4MTg3LDgxLjUgMzcuODEyNSw4MS41IGMgLTEuMjE5MzAyLDAgLTIuMzIzODc5LC0wLjQ1ODc5MiAtMy4xNTYyNSwtMS4yMTg3NSAtMC4wMDUsLTAuMDA0NiAwLjAwNSwtMC4wMjY2NiAwLC0wLjAzMTI1IGwgMy4xODc1LC0zLjE1NjI1IHogbSAzNC40Mzc1LC0wLjE4MTI1IDMuMTI1LDMuMTI1IGMgLTAuODI5NjgxLDAuNzc5ODAxIC0xLjkzMDU2MywxLjI4MTI1IC0zLjE1NjI1LDEuMjgxMjUgLTEuMjE5MzAyLDAgLTIuMzIzODc5LC0wLjQ1ODc5MiAtMy4xNTYyNSwtMS4yMTg3NSAtMC4wMDUsLTAuMDA0NiAwLjAwNSwtMC4wMjY2NiAwLC0wLjAzMTI1IGwgMy4xODc1LC0zLjE1NjI1IHoiCiAgIGlkPSJwYXRoNTM5NiIKICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3NjY3NjY2Njc3NzY2NzY2Njc3NjY3NzY2Njc2Njc3NzY2NjY2Njc2Njc2Njc2NjY2Njc2Njc3NzY2NjY2Nzc2Njc3NjY2Njc3NzY2NzY2Njc2Njc3NjY2NjY3NjY3NzY2NzY2NzY2Njc3NjY3Nzc2NjY2Njc2Njc3NjY3NjY3NjY2NjY3NjY3NjY3NjY2Njc3NjY3NzY2Nzc2NjY2NjY2NjY2NjY2Njc2Njc2NjY2NjY3NjY3NjY2NjY3NjY2NjY2Nzc3NjY2NjY2Njc2NjY2NzY2NjY2NjY2NjY2NjY2Njc3NjY2Njc3NjY3NjY2Njc2NjY2Njc2NjY2Njc2NjY2Njc2NjY2NjY2NzY2NjY2NjY2NjY2NjY2NjY2Njc3NjY3NjY2NjY2Nzc2Njc2NjY2Njc3NjY2Njc3NjYyIgLz48cmVjdAogICBzdHlsZT0ib3BhY2l0eTowLjg3MTI4NzA5O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1MzExKSIKICAgaWQ9InJlY3Q1Mjg3IgogICB3aWR0aD0iMTAiCiAgIGhlaWdodD0iMSIKICAgeD0iMTciCiAgIHk9IjExOCIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NTE1NjI1LDAsMCwwLjkwNjI1LC0xLjA0MjE4NzUsLTMuNjI1KSIKICAgcnk9IjAuNSIgLz48cGF0aAogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjYyIKICAgaWQ9InBhdGg0MTk3IgogICBkPSJtIDcuMjUsMjUuMzc1IDc5LjY2MDYwNiwwIEMgOTAuNjI1LDI1LjM3NSAxMDguNzUsNDEuODY2MDc4IDEwOC43NSw0Ny4wOTE5MTggbCAwLDUwLjc4MzA4MiAtMTAxLjUsMCAwLC03Mi41IHoiCiAgIHN0eWxlPSJvcGFjaXR5OjAuMDM0NjUzNDk7ZmlsbDp1cmwoI3BhdHRlcm41MTQ5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz48cGF0aAogICBzdHlsZT0ib3BhY2l0eTowLjg3MTI4NzA5O2ZpbGw6IzAwNjE5YTtmaWxsLW9wYWNpdHk6MC44NDY1NjA4NTtzdHJva2U6bm9uZSIKICAgZD0ibSAxMDIuNjYxMTMsODUuODM4ODY3IGMgLTAuMDk3MSwwLjA0NTMgLTAuMTg2LDAuMDk2MzEgLTAuMjgzMiwwLjE0MTYwMiAtMC43MTY2MywwLjMzOSAtMS40MzU4OCwwLjY4MTc0OSAtMi4xMjQwMiwxLjA3NjE3MiAtMC4yNTU2NTcsMC4xNTcwOCAtMC40MjkwMzIsMC4yNTk4MDMgLTAuNjc5NjkxLDAuNDI0ODA0IC0wLjQyNjA5MiwwLjI4MDQ5NCAtMC44MzMzNDIsMC41OTg4NDEgLTEuMjE3Nzc0LDAuOTM0NTcxIC0wLjIzMzM2OCwwLjIxMzM4NSAtMC4yODk1MzgsMC4yNTg5ODggLTAuNTA5NzY1LDAuNDgxNDQ1IC0wLjI2NjAzOSwwLjI2ODczIC0wLjUxMjQ4NSwwLjUzOTc2MiAtMC43NjQ2NDksMC44MjEyODkgLTAuMDY0MzQsMC4wNzc3NiAtMC4xMzQwOTgsMC4xNDg2NTIgLTAuMTk4MjQyLDAuMjI2NTYyIDAuMDA3MywtMC4xMTI1MDEgMC4wMjA3NSwtMC4yMjc0NDEgMC4wMjgzNywtMC4zMzk4NDMgMC4wNDU4NiwtMC42MDMwMSAwLjA5NDI2LC0xLjE4NzkwNCAwLjE5ODI0MiwtMS43ODQxOCAwLjAxNjc2LC0wLjA4NTE5IDAuMDM4NDIsLTAuMTcwMDAzIDAuMDU2NjQsLTAuMjU0ODgzIDAuMDM2ODgsLTAuMTcxNzcgMC4wODk3MiwtMC4zNDE4MjggMC4xNDE2MDEsLTAuNTA5NzY1IC0wLjExODE4NCwtMC4xMDM2NDMgLTAuMjUyODI2LC0wLjE5Nzk1MyAtMC41MDk3NjYsLTAuNDgxNDQ2IC0wLjAyMTc1LDAuMDkzMjIgLTAuMDM5NDIsMC4xODkwMTcgLTAuMDU2NjQsMC4yODMyMDMgLTAuMDE3MzEsMC4wOTQyMSAtMC4wNDE0MiwwLjE4ODY0NSAtMC4wNTY2NCwwLjI4MzIwNCAtMC4wOTQwNSwwLjYwNTYxIC0wLjEzOTcxNiwxLjIwMjY0OCAtMC4xOTgyNDIsMS44MTI1IC0wLjAzNjcsMC40MDQ4NzYgLTAuMDgxNDcsMC44MTI0NzEgLTAuMTEzMjgxLDEuMjE3NzczIC0wLjAzMzA4LDAuNDAyNzI4IC0wLjAyNjkyLDAuNDA2NTggMC4xNjk5MjIsMS4wNDc4NTIgMC4wMTAzMywwLjAzMzUzIDAuMDQ5OTMsMC4wMjUxOSAwLjA4NDkxLDAuMDI4MzYgMC4xMjk4NTcsMC4wMTM2OCAwLjE1MDksLTAuMDA2MyAwLjI1NDg4MywtMC4wNTY2NCAwLjAyMzkzLC0wLjAyMjExIDAuMDYyNzEsLTAuMDMyODEgMC4wODQ5MiwtMC4wNTY2NCAwLjA4OTA4LC0wLjA5NTE0IDAuMTUyMzIyLC0wLjIwNTE2NiAwLjIyNjU2MiwtMC4zMTE1MjMgMC4xNjg5OTgsLTAuMjQyMTQxIDAuMDQxMjQsLTAuMDQ0MjMgMC4yMjY1NjMsLTAuMzExNTI0IDAuMjgxMSwtMC40MDY5OTcgMC41ODcwMzIsLTAuODA5MDE4IDAuOTM0NTcsLTEuMTYxMTMzIDAuMDgxMDIsLTAuMDgyMTEgMC4xNzIyMDYsLTAuMTQ2MDk2IDAuMjU0ODgzLC0wLjIyNjU2MiAwLjQ2NzMxNywtMC40MzQ3MSAwLjk2NDA1OSwtMC44MTY5NzYgMS41MDA5NzQsLTEuMTYxMTMzIDAuMTEzMzEsLTAuMDcyNTkgMC4yMjU0NiwtMC4xNTU2OTQgMC4zMzk4NCwtMC4yMjY1NjMgMC41Njg3MiwtMC4zNDg4NzkgMS4xNzE3NiwtMC42NDI4ODQgMS43ODQxOCwtMC45MDYyNSAwLjEwNTI3LC0wLjA0NTI3IDAuMjM0MTksLTAuMDY5MDUgMC4zMzk4NSwtMC4xMTMyODEgMC4wOTc5LC0wLjAzOTI5IDAuMTg1MywtMC4xMDIzMDEgMC4yODMyLC0wLjE0MTYwMSAwLDAgLTAuMTk4MjQsLTAuNzM2MzI4IC0wLjE5ODI0LC0wLjczNjMyOCB6IgogICBpZD0icGF0aDU2ODgiCiAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3Nzc3Nzc3Nzc3NjY3Nzc3Nzc3Nzc3Nzc3Nzc3NjYyIgLz48ZwogICBpZD0ibGF5ZXI0IgogICBpbmtzY2FwZTpsYWJlbD0iYm94IgogICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjQzMzkyMywwLDAsMC42NDMzOTIzLDI4Ni42MDcwMSw4Ni4xMDEyMjUpIiAvPjxnCiAgIGlkPSJsYXllcjUiCiAgIGlua3NjYXBlOmxhYmVsPSJ6aXBfYXBwIgogICBzdHlsZT0iZGlzcGxheTppbmxpbmUiCiAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjQzMzkyMywwLDAsMC42NDMzOTIzLDI4Ni42MDcwMSw4Ni4xMDEyMjUpIiAvPjxyZWN0CiAgIHN0eWxlPSJvcGFjaXR5OjAuNTc3ODY4ODk7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICBpZD0icmVjdDEzMjciCiAgIHdpZHRoPSIwLjY0MzM5MjMyIgogICBoZWlnaHQ9IjAiCiAgIHg9IjI4Ny4xOTkwNyIKICAgeT0iOTYuNDc3Njc2IiAvPjxwYXRoCiAgIHN0eWxlPSJvcGFjaXR5OjAuODcxMjg3MDk7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTI3Myk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNTI4MykiCiAgIGQ9Im0gMzAsNDUgMCw2MyAtMTQsMTEgMTEsMCAxNCwtMTEgMCwtNjMgLTExLDAgeiIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLC00LjUzMTI1KSIKICAgaWQ9InJlY3Q1MjQ2IgogICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8+PGcKICAgaWQ9Imc1MTI5IgogICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjE4MTI1LC0zLjYyNSkiPjxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtNS40Mzc1KSIKICAgICBpZD0iZzUwODAiPjxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50NTM2Nik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDUwNDkiCiAgICAgICBzb2RpcG9kaTpjeD0iMTE1LjUiCiAgICAgICBzb2RpcG9kaTpjeT0iMTAuMDU5NjE0IgogICAgICAgc29kaXBvZGk6cng9IjAuNSIKICAgICAgIHNvZGlwb2RpOnJ5PSIwLjUiCiAgICAgICBkPSJtIDExNiwxMC4wNTk2MTQgYyAwLDAuMjc2MTQzIC0wLjIyMzg2LDAuNSAtMC41LDAuNSAtMC4yNzYxNCwwIC0wLjUsLTAuMjIzODU3IC0wLjUsLTAuNSAwLC0wLjI3NjE0MjIgMC4yMjM4NiwtMC40OTk5OTk4IDAuNSwtMC40OTk5OTk4IDAuMjc2MTQsMCAwLjUsMC4yMjM4NTc2IDAuNSwwLjQ5OTk5OTggeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzU5Mzc2MywwLDAsMS4zNTkzNzUsLTEzNy4yOTcwMywxLjA1MTc3NDQpIiAvPjxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHJ4PSIwIgogICAgICAgeT0iMTkuOTQwMzg2IgogICAgICAgeD0iMTcuMjI4MTMiCiAgICAgICBoZWlnaHQ9IjQuMDc5Njg5IgogICAgICAgd2lkdGg9IjUiCiAgICAgICBpZD0icmVjdDQ5MjIiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM2OCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MzcwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDk1MCIKICAgICAgIHdpZHRoPSI1IgogICAgICAgaGVpZ2h0PSI0LjA3OTY4OSIKICAgICAgIHg9IjE3LjIyODEzIgogICAgICAgeT0iMTkuOTQwMzg2IgogICAgICAgcng9IjAiCiAgICAgICByeT0iMCIgLz48cmVjdAogICAgICAgcnk9IjAuMTU3MDU2NiIKICAgICAgIHJ4PSIxLjA2MTkxNDYiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45OTk5OTk5NCwzLjU1Mzc2MDhlLTQsMC4wMDY2MDYzOSwwLjk5OTk3ODE4LDAsMCkiCiAgICAgICB5PSIyMy41NDU2OTYiCiAgICAgICB4PSItMjMuNTk4Mjg4IgogICAgICAgaGVpZ2h0PSIwLjQ0MjY3MSIKICAgICAgIHdpZHRoPSI4LjA1NzA5NjUiCiAgICAgICBpZD0icmVjdDQ5MDgiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM3Mik7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzc0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDkyNiIKICAgICAgIHdpZHRoPSIxLjM1OTM4IgogICAgICAgaGVpZ2h0PSI1LjI1NDg4MjgiCiAgICAgICB4PSIxOS4wMzEyNSIKICAgICAgIHk9IjE0LjY4NTUwMiIKICAgICAgIHJ4PSIwIgogICAgICAgcnk9IjAiIC8+PHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBkPSJtIDI0LjcyNjM2NSwxMTEuOTI2OTEgMC42MDE3NiwtNjQuOTg2NTI0IC0xMS4xLDAgMC40OTk5OSw2NC45NDg1NjQgOS45OTgyNSwwLjAzOCB6IgogICAgICAgaWQ9InBhdGgzNzgzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlkPSJwYXRoMzc5NSIKICAgICAgIGQ9Im0gMjQuNDU3ODU1LDExMS45MjU5MSAwLjU0MjAzLC02NC45NTE0NDUgLTIuOTgzOTYsLTAuMDI3NTggLTAuMTkyMjMsNjQuOTY5MDE1IDIuNjM0MTYsMC4wMSB6IgogICAgICAgc3R5bGU9Im9wYWNpdHk6MC40MjU3NDI1OTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzc2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIgLz48cGF0aAogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2MiCiAgICAgICBpZD0icGF0aDM3ODUiCiAgICAgICBkPSJtIDE0Mi41Mjc5NywxMjkuNjM1NjIgMC4wMzg5LC05NC41MjI2OTEgLTIuNzgzODEsLTAuMDM5MDMgMC4yODc0Nyw5NC41NDgxOTEgMi40NTczOSwwLjAxMzUgNWUtNSwzZS01IHoiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM3OCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDgzOCkiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwwLDAuODI0Mzg1MiwtMTIzLjQyMzQ4LDUuOTg4MTAxOCkiIC8+PHBhdGgKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNDI1NzQyNTk7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM4MCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDg2MikiCiAgICAgICBkPSJtIDE0Ni42MDQzMywxMjkuNzcxNzggMC4zMTI2MywtOTQuNzM0Njc1IC0xLjE0MDIyLC0wLjAyOTk4IDAuMDM5Myw5NC43NjAzMjUgMC43ODgyNywwLjAwNCB6IgogICAgICAgaWQ9InBhdGgzODA1IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk0MDM2MiwwLDAsMC42ODU2MjMzLC0xMjMuNDIzNDgsMjIuOTQzMTU1KSIgLz48cmVjdAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzODIpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIgogICAgICAgaWQ9InJlY3QzNzczIgogICAgICAgd2lkdGg9IjEwLjAwMTQ0OSIKICAgICAgIGhlaWdodD0iMi41NjI2MTE2IgogICAgICAgeD0iLTI0Ljg4NTkyOSIKICAgICAgIHk9Ii0xMTIuOTE1ODIiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgtMC45OTk5OTg2MywtMC4wMDE2NTczNSwwLjAwMTQxNjYsLTAuOTk5OTk5LDAsMCkiCiAgICAgICByeD0iMS4zMTgxNzc2IgogICAgICAgcnk9IjAuOTA5MTk3NTEiIC8+PHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1Mzg0KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJyZWN0NDg2NiIKICAgICAgIHdpZHRoPSIxMS4wOTQwMTkiCiAgICAgICBoZWlnaHQ9IjExLjk5OTk5OCIKICAgICAgIHg9IjE0LjIzNjM3NSIKICAgICAgIHk9IjM0Ljk0MDM4NCIKICAgICAgIHJ4PSIwIgogICAgICAgcnk9IjAiIC8+PHBhdGgKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICBpZD0icGF0aDQ5MDQiCiAgICAgICBkPSJtIDIzLjcyNjM2NSwyMy43MTQ3MTcgMS42MDE3NiwxMS4yMjU2NjkgLTExLjEsMCAxLjQ5OTk5LC0xMS4yMTkxMTEgNy45OTgyNSwtMC4wMDY2IHoiCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiAvPjxwYXRoCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjQyNTc0MjU5O2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzODYpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgZD0ibSAyMy4zMDg4MDUsMjMuNzE0ODkyIDEuNjkwNTksMTEuMjE5NjA3IC0yLjk4MzQ3LDAuMDA0OCAtMC44NDExLC0xMS4yMjI2NDMgMi4xMzM5OCwtMC4wMDE3IHoiCiAgICAgICBpZD0icGF0aDQ5MDYiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwwLjAwNzQ2ODc1LC0wLjExODQzMzUsLTEyNC4wMzg5OSwzOS4wODU2MykiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM4OCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7ZmlsdGVyOnVybCgjZmlsdGVyNDgzOCkiCiAgICAgICBkPSJtIDE0Mi4xMjU1NywxMjkuNzQ5MzUgMC40NDEzNSwtOTQuNjM2NDIxIC0yLjc4MzgxLC0wLjAzOTAzIDAuMjg3NDcsOTQuNjYxOTIxIDIuMDU0OTksMC4wMTM1IHoiCiAgICAgICBpZD0icGF0aDQ5MTAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPjxwYXRoCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5NDAzNjIsMCwtMC4wMDc0NjE3MSwtMC4xMTg0MzM1LC0xMjMuMTYyMjQsMzkuMDg1NjMpIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlkPSJwYXRoNDkxMiIKICAgICAgIGQ9Im0gMTQ2LjYwNDMzLDEyOS43NzE3OCAwLjMxMjYzLC05NC43MzQ2NzUgLTEuMTQwMjIsLTAuMDI5OTggMC4wMzkzLDk0Ljc2MDMyNSAwLjc4ODI3LDAuMDA0IHoiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjQyNTc0MjU5O2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDUzOTApO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO2ZpbHRlcjp1cmwoI2ZpbHRlcjQ4NjIpIiAvPjxyZWN0CiAgICAgICByeT0iMCIKICAgICAgIHJ4PSIwIgogICAgICAgeT0iLTIxLjU0NjY1OSIKICAgICAgIHg9IjE3LjIyODEzIgogICAgICAgaGVpZ2h0PSIxLjYwNjI3NDYiCiAgICAgICB3aWR0aD0iNSIKICAgICAgIGlkPSJyZWN0NDk2MCIKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ1MzkyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIKICAgICAgIHRyYW5zZm9ybT0ic2NhbGUoMSwtMSkiIC8+PHJlY3QKICAgICAgIHJ5PSIwIgogICAgICAgcng9IjAiCiAgICAgICB5PSItMTA5LjY1NjI1IgogICAgICAgeD0iMTQuNjk4MjQyIgogICAgICAgaGVpZ2h0PSIzLjYyNSIKICAgICAgIHdpZHRoPSIxMC4wNjc4NzEiCiAgICAgICBpZD0icmVjdDQzNTgiCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NTM5NCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiCiAgICAgICB0cmFuc2Zvcm09InNjYWxlKDEsLTEpIiAvPjwvZz48L2c+PHJlY3QKICAgc3R5bGU9Im9wYWNpdHk6MC41MDk5MDA5ODtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ1MzA5KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmaWx0ZXI6dXJsKCNmaWx0ZXI1Mjk5KSIKICAgaWQ9InJlY3Q1MjkzIgogICB3aWR0aD0iOS40OTk5OTYyIgogICBoZWlnaHQ9IjEuMDAwMDA0OCIKICAgeD0iMTciCiAgIHk9IjExNyIKICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45MDYyNSwwLDAsMC45MDYyNSwwLC0zLjYyNSkiCiAgIHJ5PSIwLjI1IiAvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"qelectrotech,qelectrotech\"\nLABEL oc.cat=\"education\"\nLABEL oc.launch=\"qelectrotech.Qelectrotech\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"qElectrotech\"\nLABEL oc.displayname=\"qElectrotech\"\nLABEL oc.path=\"/usr/bin/qelectrotech\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"qElectrotech\"\nENV APPBIN \"/usr/bin/qelectrotech\"\nENV APP \"/usr/bin/qelectrotech\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/qelectrotech/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/qelectrotech/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/qelectrotech/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/qelectrotech/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes python3-gtkspellcheck wkhtmltopdf python3-markdown yelp && apt-get clean\nRUN curl -Ls -o /tmp/remarkable_1.87_all.deb https://remarkableapp.github.io/files/remarkable_1.87_all.deb && apt-get install --no-install-recommends --yes /tmp/remarkable_1.87_all.deb && apt-get clean && rm -rf /tmp/remarkable_1.87_all.deb && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"remarkable.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMjgiCiAgIHZpZXdCb3g9IjAgMCAzNi4xMjQ0NDUgMzYuMTI0NDQ1IgogICBoZWlnaHQ9IjEyOCIKICAgaWQ9InN2ZzIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC40IHI5OTM5IgogICBzb2RpcG9kaTpkb2NuYW1lPSJyZW1hcmthYmxlLnN2ZyI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMjgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTMwMSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3NDQiCiAgICAgaWQ9Im5hbWVkdmlldzI2IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpzbmFwLWdsb2JhbD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iNjkuMzA2MTI3IgogICAgIGlua3NjYXBlOmN5PSI1OS4wMjI0MTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjY1IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzIiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMzc3NyIKICAgICAgIGVtcHNwYWNpbmc9IjUiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQ0NjAiPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MzUwNGQiCiAgICAgICAgIGlkPSJzdG9wNyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzI2ZTZhIgogICAgICAgICBpZD0ic3RvcDkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDM4Ij4KICAgICAgPHN0b3AKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmY4OTAwIgogICAgICAgICBpZD0ic3RvcDEyIiAvPgogICAgICA8c3RvcAogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmE1M2QiCiAgICAgICAgIGlkPSJzdG9wMTQiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuMDU4LDAsMCwwLjA1MjU3LC0xLjU3NDkyLC0xLjQxNzQyKSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQwMzgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0OTUwIgogICAgICAgeTE9IjIxMiIKICAgICAgIHkyPSIxMDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgyPSIwIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMTA1MjUsMCwwLDEuMTA1MjUsLTEzNC4yNzg3NCwtMjk1Ljc2MTgzKSIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDQ0NjAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0NDMxIgogICAgICAgeTE9IjI3OS4wOTYwMSIKICAgICAgIHkyPSIyNjguMzI5OTkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgyPSIwIiAvPgogIDwvZGVmcz4KICA8ZwogICAgIHN0eWxlPSJmaWxsOiM0Y2MxZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQiCiAgICAgaWQ9ImcxOCIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjc4MjY1NjMsMCwwLDIuNzgyNjU2MywtMC43ODQ3MDkwOSwtMC43ODQ3MDkxNSkiPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMi45ODIiCiAgICAgICB4PSIwLjI4MjAwMDAxIgogICAgICAgeT0iMC4yODIwMDAwMSIKICAgICAgIHJ4PSI2LjQ5MTAwMDIiCiAgICAgICBoZWlnaHQ9IjEyLjk4MiIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuNTtmaWxsOiM0Y2MxZmY7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDIwIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMS44NTMiCiAgICAgICB4PSIwLjg0NyIKICAgICAgIHk9IjAuODQ3IgogICAgICAgcng9IjUuOTI2MDAwMSIKICAgICAgIGhlaWdodD0iMTEuODUzIgogICAgICAgc3R5bGU9ImZpbGw6IzRjYzFmZjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0MjIiIC8+CiAgPC9nPgogIDxnCiAgICAgc3R5bGU9ImZvbnQtc2l6ZTozMS40MTMwOTkyOXB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtmb250LWZhbWlseTpTYW5zIgogICAgIGlkPSJ0ZXh0Mzc3MyI+CiAgICA8cGF0aAogICAgICAgZD0ibSAyOS42ODM1NDIsMTIuMDEyMTQxIGMgLTIuNGUtNSwwLjc4MjI3NSAtMC41NTIyMDcsMS45NDY0NiAtMS42NTY1NSwzLjQ5MjU2IC0wLjIyMDg5NiwwLjMxMjkxNSAtMC45NTI1MzgsMC43Njg0NjYgLTIuMTk0OTI5LDEuMzY2NjU0IC0wLjI5NDUxOCwwLjM1ODkyOSAtMC44Njk3MDgsMC44MDA2NzUgLTEuNzI1NTczLDEuMzI1MjQgLTAuNjM1MDI5LDAuMTkzMjczIC0xLjU0MTUyOSwwLjUwMTU3NSAtMi43MTk1MDMsMC45MjQ5MDcgLTAuMzk1NzQ3LDAuMjMwMDg0IC0wLjk3NTUzOSwwLjUyOTE4MyAtMS43MzkzNzgsMC44OTcyOTggLTAuMTE5NjUzLDAuMDI3NjIgLTEuMDUzNzYzLDAuMTc5NDY3IC0yLjgwMjMzLDAuNDU1NTUxIC0xLjM5ODg3NSwwLjIyMDg4IC0yLjA5ODMwNiwwLjUwNjE3NSAtMi4wOTgyOTcsMC44NTU4ODQgLTllLTYsMC4zMjIxMTMgMC42MDI3OSwwLjkxMTEwOCAxLjgwODQwMSwxLjc2Njk4NyAwLjk4NDcxNSwwLjY5OTQzNiAxLjY1NjUzNywxLjEyNzM3OCAyLjAxNTQ2OSwxLjI4MzgyNiAwLjk4NDcxMywwLjQzMjU0NyAyLjYyMjg1NSwxLjE3MzM5MiA0LjkxNDQzMiwyLjIyMjUzOCBsIDIuMzc0Mzg4LDAuNzg2ODYyIGMgMS4wNTgzMywwLjQ3ODU1OCAxLjYwMTMxLDEuMDQ5MTQ3IDEuNjI4OTQxLDEuNzExNzY4IC0wLjE2NTY3NywwLjMwMzY5OSAtMC40MTQxNTksMC40NTU1NDkgLTAuNzQ1NDQ4LDAuNDU1NTUxIC0wLjAwOTIsLTJlLTYgLTAuMTkzMjg1LC0wLjAzNjgxIC0wLjU1MjE4MywtMC4xMTA0MzYgLTAuMzU4OTM5LC0wLjA2NDQyIC0wLjU3NTIxMSwtMC4wOTY2MyAtMC42NDg4MTUsLTAuMDk2NjMgLTEuMjcwMDQxLC0xZS02IC0yLjQzODgyOCwtMC4yNDM4ODIgLTMuNTA2MzY1LC0wLjczMTY0MyAtMC4wNjQ0NCwtMC4wMDkyIC0xLjEwODk4MywtMC40ODc3NjIgLTMuMTMzNjQsLTEuNDM1Njc2IC0wLjQxNDE1MSwtMC4yNTc2ODUgLTEuMDM1MzU2LC0wLjY1ODAxOCAtMS44NjM2MTksLTEuMjAwOTk5IC0wLjY4MTAzNywtMC40NDE3NDUgLTEuMTczNCwtMC44NjA0ODMgLTEuNDc3MDksLTEuMjU2MjE3IC0wLjExOTY1LC0wLjAwOTIgLTAuMjg1MzA1LC0wLjA0MTQxIC0wLjQ5Njk2NSwtMC4wOTY2MyAtMC4zMDM3MTEsLTAuNDY5MzUzIC0xLjE1MDM5MSwtMS4xMjczNzEgLTIuNTQwMDQ0LC0xLjk3NDA1NiAtMS4xNjg3OTQsLTAuNzI3MDM2IC0xLjc1MzE4NywtMS4zMDIyMjYgLTEuNzUzMTgyLC0xLjcyNTU3MyAwLjA1NTIxLC0wLjEzODAzOSAwLjIzMDA3MSwtMC41NzUxODQgMC41MjQ1NzQsLTEuMzExNDM1IDEuODMxNDAxLC0wLjM5NTcyMyA0LjE1OTc3MSwtMC45Mzg3MDMgNi45ODUxMiwtMS42Mjg5NDEgMC4yODUyODEsLTAuMDU1MjEgMC45ODQ3MTMsLTAuMjE2MjYyIDIuMDk4Mjk2LC0wLjQ4MzE2IDAuNzE3ODIzLC0wLjE3NDg0OCAxLjk2OTQzNywtMC44NjUwNzcgMy43NTQ4NDcsLTIuMDcwNjg4IDIuMjM2MzIyLC0xLjUxODQ5MSAzLjM1NDQ5MiwtMi43NzkzMDggMy4zNTQ1MTQsLTMuNzgyNDU2IC0yLjJlLTUsLTAuODkyNjggLTAuMzkxMTUxLC0xLjcwNzE0OTMgLTEuMTczMzksLTIuNDQzNDExMyBDIDI1LjUzMjk0NCw4LjQ2NDM4MjIgMjQuNTc1ODI3LDguMDA0MjI5OCAyMy40NDM4Nyw3LjgyOTM1MjMgMjIuOTE5Mjc4LDcuNjE3NzAxOSAyMi42MDE3NzMsNy41MTE4NjY4IDIyLjQ5MTM1NCw3LjUxMTg0NjggYyAtMC4xODQwNzgsMmUtNSAtMC41MjQ1OTEsLTAuMDA0NTggLTEuMDIxNTQsLTAuMDEzODA0IC0wLjYwNzQxNywtMC4wMDkxOCAtMS4wOTk3OCwtMC4wMTM3ODUgLTEuNDc3MDksLTAuMDEzODA1IGwgLTEuNjg0MTU5LC0wLjAxMzgwNSBjIC0wLjEyODg1NiwyZS01IC0wLjE5MzI3NywwLjAxMzgyNSAtMC4xOTMyNjQsMC4wNDE0MTQgLTEuM2UtNSwwLjA5MjA1MSAtMC4wMTM4MiwwLjE1MTg3MDMgLTAuMDQxNDEsMC4xNzk0NTk2IC0wLjI1NzY5OCwtMC4wMDkxOCAtMC40OTIzNzYsLTAuMDEzNzg1IC0wLjcwNDAzNCwtMC4wMTM4MDQgLTAuNjM1MDIyLDEuOThlLTUgLTEuMDUzNzYxLDAuMDI3NjI5IC0xLjI1NjIxNywwLjA4MjgyNyAtMC40NTA5NiwwLjEzODA2NTQgLTEuMTk2NDA3LDAuNDIzMzU5OCAtMi4yMzYzNDMsMC44NTU4ODQyIC0wLjUyNDU4MiwwLjEzODA2NDUgLTEuMTc3OTk4LDAuMzIyMTI1NSAtMS45NjAyNTEsMC41NTIxODMzIC0wLjY4MTAzMSwwLjMwMzcxODkgLTEuMDY3NTU5LDAuNjAyODE3OSAtMS4xNTk1ODUsMC44OTcyOTgxIC0wLjU0Mjk4NSwxLjc2NzAwMiAtMC45MTExMDY1LDMuODYwNjk1IC0xLjEwNDM2NjMsNi4yODEwODUgMC4wMzY4MDgsMC40OTY5NzYgMC4wNTUyMTQsMS4yNTYyMjcgMC4wNTUyMTgsMi4yNzc3NTcgLTQuMmUtNiwwLjE2NTY2NCAtNC4yZS02LDAuMzQwNTIxIDAsMC41MjQ1NzQgLTAuMDY0NDI2LDAuMTQ3MjU3IC0wLjE2MTA1NzUsMC4zODE5MzUgLTAuMjg5ODk2MiwwLjcwNDAzNCAtMC4xOTMyNjc5LDAuODc0Mjk3IC0wLjI4OTg5OTksMS42NDI3NTEgLTAuMjg5ODk2MywyLjMwNTM2NSAtMy42ZS02LDAuMTc0ODYzIDAuMDA0NiwwLjM0MDUxOCAwLjAxMzgwNSwwLjQ5Njk2NSBsIDAuMDgyODI4LDAuODY5Njg5IGMgMC4wMjc2MDUsMC4zNDk3MiAwLjA0MTQxLDAuODU1ODg3IDAuMDQxNDE0LDEuNTE4NTA0IC0zLjhlLTYsMS40MzU2NzggLTAuMjcxNDkzNywyLjE1MzUxNiAtMC44MTQ0NzA1LDIuMTUzNTE1IC0yLjllLTYsMWUtNiAtMC4xOTc4Njg0LC0wLjA2OTAyIC0wLjU5MzU5NzEsLTAuMjA3MDY4IEMgNy40NzE5NjQ1LDI2Ljg0Mjg2NiA3LjI0NjQ4OTgsMjYuNzY5MjQyIDcuMTgyMDcwMiwyNi43NjkyNDEgNi45ODg4MDQ1LDI1Ljc0NzcwNCA2Ljg5MjE3MjUsMjQuMDQ1MTQgNi44OTIxNzM5LDIxLjY2MTU0NSBjIC0xLjRlLTYsLTAuMDkyMDIgMC4wNzgyMjQsLTAuODQ2Njc0IDAuMjM0Njc4LC0yLjI2Mzk1MSAwLjIwMjQ2NTQsLTEuOTMyNjMyIDAuMzkxMTI3OCwtMy40NzQxNDMgMC41NjU5ODc5LC00LjYyNDUzNiAwLjE5MzI2MTgsLTAuNjI1Nzk1IDAuMzkxMTI3MywtMS4zNzEyNDEgMC41OTM1OTcxLC0yLjIzNjM0MyBsIDAsLTAuNjYyNjIgYyAtMC4xMzgwNDg1LC0wLjEzODAzIC0wLjIyNTQ3NzQsLTAuMjExNjU0IC0wLjI2MjI4NzEsLTAuMjIwODczIC0yLjVlLTYsMS42ZS01IC0wLjE0MjY0OTcsMC4wNjkwNCAtMC40Mjc5NDIxLDAuMjA3MDY5IEMgNy4zMjAxMTQyLDExLjk4OTE0OSA3LjE0OTg1NzksMTIuMDUzNTcgNy4wODU0MzgxLDEyLjA1MzU1NSA2LjkxMDU3ODYsMTIuMDUzNTcgNi43NDk1MjUzLDExLjg4NzkxNiA2LjYwMjI3NzcsMTEuNTU2NTkgNi41MDEwNDMxLDExLjM0NDkzNiA2LjQ1MDQyNjMsMTEuMTY1NDc2IDYuNDUwNDI3MywxMS4wMTgyMTEgNi40NTA0MjYzLDEwLjAzMzUwMiA2LjcyMTkxNjIsOS4yMzI4MzY1IDcuMjY0ODk3Nyw4LjYxNjIxMzYgNy42NDIyMjA5LDguMTkyODkyMyA4LjQ3NTA5NjYsNy41Mzk0NzYgOS43NjM1Mjc0LDYuNjU1OTYyNyA5LjkwMTU2ODgsNi41NjM5NTMgMTEuMDk3OTY1LDYuMjk3MDY0NyAxMy4zNTI3MTksNS44NTUyOTY4IGMgMi4zMDk5NTcsLTAuNDMyNTIxNiAzLjg4MzY3OCwtMC42NDg3OTMyIDQuNzIxMTY4LC0wLjY0ODgxNTQgMS44NDA1OTcsMi4yMmUtNSAzLjU5ODM3OCwwLjA4Mjg1IDUuMjczMzUxLDAuMjQ4NDgyNSAwLjExOTYyMiwwLjEwMTI1NTUgMC4zMjIwODksMC4xOTMyODYgMC42MDc0MDIsMC4yNzYwOTE2IDAuODc0MjcxLDAuMDA5MjIgMS45MDUwMTIsMC40OTIzODQ4IDMuMDkyMjI2LDEuNDQ5NDgxMyAxLjE4NzE3MiwwLjk1NzEzNzIgMS44Nzc0LDEuODU0NDM0MiAyLjA3MDY4OCwyLjY5MTg5MzkgLTIuNGUtNSwwLjAxODQyNCAwLjA2NDQsMC4xNjEwNzEzIDAuMTkzMjY0LDAuNDI3OTQyMyAwLjEyODgxOSwwLjI2NjkwNSAwLjE5MzI0LDAuNDE0MTU0IDAuMTkzMjY0LDAuNDQxNzQ2IC0yLjRlLTUsMC4wMzY4MyAwLjAzMjE5LDAuMjQzODk4IDAuMDk2NjMsMC42MjEyMDcgMC4wNTUxOSwwLjM5NTc0NyAwLjA4MjgsMC42MTIwMTggMC4wODI4MywwLjY0ODgxNSIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MjguMjcxNzg3NjRweDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiNmZmZmZmY7Zm9udC1mYW1pbHk6RGFuaWVsOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246RGFuaWVsIEJvbGQiCiAgICAgICBpZD0icGF0aDI5OTYiIC8+CiAgPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"remarkable,markdown,editor\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"remarkable.desktop\"\nLABEL oc.launch=\"remarkable.Remarkable\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"remarkable\"\nLABEL oc.displayname=\"Remarkable\"\nLABEL oc.path=\"/usr/bin/remarkable\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/x-markdown;text/markdown;\"\nLABEL oc.fileextensions=\"md;markdown\"\nLABEL oc.legacyfileextensions=\"md;markdown\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remarkable\"\nENV APPBIN \"/usr/bin/remarkable\"\nENV APP \"/usr/bin/remarkable\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remarkable/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remarkable/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remarkable/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remarkable/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends remmina libsecret-1-0 remmina-plugin-rdp remmina-plugin-secret remmina-plugin-vnc remmina-plugin-exec remmina-plugin-nx remmina-plugin-spice && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"remmina.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmVyc2lvbj0iMS4xIj4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTMwOC4zKSI+CiAgPGNpcmNsZSBzdHlsZT0iZmlsbDojZmZmZmZmIiBjeD0iMTIiIGN5PSIzMjAuMyIgcj0iOSIvPgogIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMSIgZD0ibSA4LDMxNS4xMzM5NyB2IDIuNDI1NzggTCA5Ljg2MTMyODEsMzE4Ljc5OTk4IDgsMzIwLjA0MDIyIHYgMi40MjU3OCBsIDUuNSwtMy42NjYwMiB6Ii8+CiAgPHBhdGggc3R5bGU9ImZpbGw6IzIwYWE3MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwzMDguMykiIGQ9Ik0gOCA2LjMzMzk4NDQgTCA4IDguNzU5NzY1NiBMIDkuODYxMzI4MSAxMCBMIDggMTEuMjQwMjM0IEwgOCAxMy42NjYwMTYgTCAxMy41IDEwIEwgOCA2LjMzMzk4NDQgeiIvPgogIDxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuMSIgZD0ibSAxNiwzMTkuMTMzOTcgLTUuNSwzLjY2NjAxIDUuNSwzLjY2NjAyIHYgLTIuNDI1NzggTCAxNC4xNDA2MjUsMzIyLjc5OTk4IDE2LDMyMS41NTk3NSBaIi8+CiAgPHBhdGggc3R5bGU9ImZpbGw6IzM5ODlkYSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwzMDguMykiIGQ9Ik0gMTYgMTAuMzMzOTg0IEwgMTAuNSAxNCBMIDE2IDE3LjY2NjAxNiBMIDE2IDE1LjI0MDIzNCBMIDE0LjE0MDYyNSAxNCBMIDE2IDEyLjc1OTc2NiBMIDE2IDEwLjMzMzk4NCB6Ii8+CiAgPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4yIiBkPSJtIDIwLjc0OTAyNCwzMTUuOTcyODUgLTEuNjgxNjQxLDEuMTE5MTQgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDIwLDMyMC43OTk5OSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDEyLDMyOC44IDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS44NDQ3MjY1LDMyNS44ODg4NiBMIDQuMTY4OTQ1MiwzMjcuMDA0MSBDIDYuMDAyMTQ2NSwzMjkuMzEzNjMgOC44MjkxMTc0LDMzMC44IDEyLDMzMC44IGMgNS41MTM5NTYsMCAxMCwtNC40ODU3OCAxMCwtMTAuMDAwMDEgMCwtMS43NTA3MSAtMC40NTcwMDEsLTMuMzk0NDUgLTEuMjUwOTc2LC00LjgyNzE0IHoiLz4KICA8cGF0aCBzdHlsZT0iZmlsbDojMjBhYTczIiBkPSJtIDIwLjc0OTAyNCwzMTUuNDcyODUgLTEuNjgxNjQxLDEuMTE5MTQgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDIwLDMyMC4yOTk5OSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDEyLDMyOC4zIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS44NDQ3MjY1LDMyNS4zODg4NiBMIDQuMTY4OTQ1MiwzMjYuNTA0MSBDIDYuMDAyMTQ2NSwzMjguODEzNjMgOC44MjkxMTc0LDMzMC4zIDEyLDMzMC4zIGMgNS41MTM5NTYsMCAxMCwtNC40ODU3OCAxMCwtMTAuMDAwMDEgMCwtMS43NTA3MSAtMC40NTcwMDEsLTMuMzk0NDUgLTEuMjUwOTc2LC00LjgyNzE0IHoiLz4KICA8cGF0aCBzdHlsZT0ib3BhY2l0eTowLjIiIGQ9Im0gMTIsMzEwLjc5OTk5IGMgLTUuNTE0MjE2OSwwIC0xMCw0LjQ4NTc5IC0xMCwxMCAwLDEuNjI3MzYgMC4zOTIwMjYzLDMuMTY0MTEgMS4wODQ5NjA5LDQuNTIzNDUgTCA0Ljc3NDQxNCwzMjQuMTk5NDEgQSA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDQsMzIwLjc5OTk5IGEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMSA4LC04IDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgNS45Mjc3MzQsMi42NDc0NyBsIDEuNjg1NTQ3LC0xLjEyMTEgQyAxNy43Nzc4MiwzMTIuMTcwNzIgMTUuMDQ2MDQ5LDMxMC43OTk5OSAxMiwzMTAuNzk5OTkgWiIvPgogIDxwYXRoIHN0eWxlPSJmaWxsOiMzOTg5ZGEiIGQ9Im0gMTIsMzEwLjMgYyAtNS41MTQyMTY5LDAgLTEwLDQuNDg1NzggLTEwLDkuOTk5OTkgMCwxLjYyNzM2IDAuMzkyMDI2MywzLjE2NDExIDEuMDg0OTYwOSw0LjUyMzQ1IEwgNC43NzQ0MTQsMzIzLjY5OTQxIEEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMSA0LDMyMC4yOTk5OSBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgOCwtOCA3Ljk5OTk5OTgsNy45OTk5OTk4IDAgMCAxIDUuOTI3NzM0LDIuNjQ3NDcgbCAxLjY4NTU0NywtMS4xMjExIEMgMTcuNzc3ODIsMzExLjY3MDcyIDE1LjA0NjA0OSwzMTAuMyAxMiwzMTAuMyBaIi8+CiAgPHBhdGggc3R5bGU9Im9wYWNpdHk6MC4yO2ZpbGw6I2ZmZmZmZiIgZD0ibSAxMiwzMTAuMyBjIC01LjUxNDIxNjksMCAtMTAsNC40ODU3OCAtMTAsOS45OTk5OSAwLDAuMDc1MSAwLjAwNTE3LDAuMTQ4OSAwLjAwNjg0LDAuMjIzNjQgMC4xNDczNDM4LC01LjM4NjU1IDQuNTcxNjU5MSwtOS43MjM2NCA5Ljk5MzE2NCwtOS43MjM2NCAyLjg5NTE0MiwwIDUuNTA0NDUsMS4yNDAzMSA3LjMzMjAzMSwzLjIxMzg3IGwgMC4yODEyNSwtMC4xODc1IEMgMTcuNzc3ODIsMzExLjY3MDcyIDE1LjA0NjA0OSwzMTAuMyAxMiwzMTAuMyBaIE0gNC4wMDg3ODksMzIwLjYyNTE5IEEgNy45OTk5OTk4LDcuOTk5OTk5OCAwIDAgMCA0LDMyMC43OTk5OSBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDAgMC42MTEzMjgxLDMuMDA3ODIgbCAwLjE2MzA4NTksLTAuMTA4NCBhIDcuOTk5OTk5OCw3Ljk5OTk5OTggMCAwIDEgLTAuNzY1NjI1LC0zLjA3NDIyIHoiLz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"remmina,rdp,tsclient\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"remmina-file.desktop\"\nLABEL oc.launch=\"remmina.Remmina\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"remmina\"\nLABEL oc.displayname=\"Remmina\"\nLABEL oc.path=\"/usr/bin/remmina\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-remmina;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remmina\"\nENV APPBIN \"/usr/bin/remmina\"\nENV APP \"/usr/bin/remmina\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remmina/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remmina/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remmina/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remmina/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl -Ls -o /tmp/RemoteDesktopManager.Free_amd64.deb https://cdn.devolutions.net/download/Linux/RDM/2022.1.2.5/RemoteDesktopManager.Free_2022.1.2.5_amd64.deb\nRUN apt-get update && apt-get install --yes /tmp/RemoteDesktopManager.Free_amd64.deb && apt-get clean\nCOPY composer/init.d/init.RemoteDesktopManager.Free /composer/init.d/init.RemoteDesktopManager.Free\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gir1.2-gdkpixbuf-2.0 gtk2-engines-pixbuf libgdk-pixbuf2.0-0 adwaita-icon-theme libgdk-pixbuf2.0-bin librsvg2-2 librsvg2-common && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle-remotedesktopmanager.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJjLTMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjQxOTk5ODc0Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiLTYiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlLTMiIHgxPSI1MTkuMiIgeDI9IjUxOS4yIiB5MT0iMTAyNC44IiB5Mj0iNC44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wNjM1ODYgMCAwIC4wNjM1ODMgLS41NTYxNyAtLjU1MjcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2MDYwNjAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDE0MTQxIiBvZmZzZXQ9Ii4wMTk1NTEiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzFlMWUxZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnLTUiIHg9Ii0uMDMxNjUyIiB5PSItLjA0MTk0NyIgd2lkdGg9IjEuMDYzMyIgaGVpZ2h0PSIxLjA4MzkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNjEwNjU4NDIiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYtNiIgeDE9IjQwOS41NyIgeDI9IjQwOS45NCIgeTE9IjU0Mi44IiB5Mj0iNTA0LjE5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDUyMywwLDAsMS4wMjc2LC03Mi41NjgsLTguNjkzMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzg2ZDBmYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNzk0ZjUiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjLTMpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iLjczMzMzIi8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMzAuMDAxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+CiA8Y2lyY2xlIGN4PSIzMi4wMiIgY3k9IjMyLjA0NCIgcj0iMCIgZmlsbD0idXJsKCNiLTYpIiBzdHJva2Utd2lkdGg9IjEuNTcxNSIvPgogPHBhdGggZD0ibTUwLjI0OSA4LjE5MzJxLTMuODU5Ny0yLjk3MjUtOC40NDQtNC41NTU3LTQuNzM3Mi0xLjYzNzMtOS44MDIxLTEuNjM3M2MtMTYuNTcgMC0zMC4wMDMgMTMuNDMyLTMwLjAwMyAzMC4wMDEgMCAxNS4xNTggMTEuMjQ1IDI3LjY4NCAyNS44NDUgMjkuNzA5IDAuNzEyMTYgMC4wOTg1NSAxLjQzMzkgMC4xNzQ4NSAyLjE1ODcgMC4yMTkzNiAwLjY2MTI4IDAuMDQxMzMgMS4zMjU4IDAuMDY5OTQgMS45OTk4IDAuMDY5OTQgMTYuNTY3IDAgMjkuOTk3LTEzLjQzMiAyOS45OTctMjkuOTk5IDAtMS4zMDk4LTAuMDgyNjYtMi42MDM3LTAuMjQ0ODEtMy44NjU4LTAuMTg3NTgtMS40NzUxLTAuNDkyNzktMi45MDktMC44ODM4Ny00LjMwNDZxLTEuMzI4OS00LjY4OTItNC4wODIyLTguNzI2NS0yLjcyMTUtMy45NzcxLTYuNTQwMS02LjkxMTJ6IiBmaWxsPSJ1cmwoI2UtMykiIHN0cm9rZS13aWR0aD0iLjk5NzI0Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguNDY1ODYgLS4wNTU1NjYgLjA1NzI1OCAuNDUyMDkgLTIwOS40MSAtMTUzLjYzKSI+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWx0ZXI9InVybCgjZy01KSIgb3BhY2l0eT0iLjc1Ii8+CiAgPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS43MzUgLjIxMzI1IC0uMjEzMjUgMS43MzUgLTQ2LjExNyAtNTI5Ljc2KSIgeD0iMzM0LjIzIiB5PSI1MTMuMTMiIHdpZHRoPSI0Ni4zMDMiIGhlaWdodD0iMzQuOTM5IiByeT0iMS42NDQyIiBmaWxsPSJ1cmwoI2YtNikiLz4KICA8ZyBmaWxsPSIjZDVmZmZmIj4KICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJyb3RhdGUoNy4wMDcpIiBjeD0iNDk4LjM1IiBjeT0iMzg0LjQ5IiByeD0iMy4xOTU4IiByeT0iMy4yOTMyIi8+CiAgIDxlbGxpcHNlIHRyYW5zZm9ybT0icm90YXRlKDcuMDA3KSIgY3g9IjQ4OS44MyIgY3k9IjM4NC40OSIgcng9IjMuMTk1OCIgcnk9IjMuMjkzMiIvPgogICA8ZWxsaXBzZSB0cmFuc2Zvcm09InJvdGF0ZSg3LjAwNykiIGN4PSI0ODEuMzEiIGN5PSIzODQuNDkiIHJ4PSIzLjE5NTgiIHJ5PSIzLjI5MzIiLz4KICA8L2c+CiA8L2c+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNiwxNikiIGZpbGw9IiNmZmYiPgogIDxwYXRoIGQ9Im0xNiAxMmE5IDkgMCAwIDAtNy44NzcgNC42NjhjMC4xMjkgMC4zNjQgMC4zNTcgMC42NzcgMC42NTYgMC45MDhhOCA4IDAgMCAxIDcuMjIxLTQuNTc2IDQgNCAwIDAgMC00IDQgNCA0IDAgMCAwIDQgNCA0IDQgMCAwIDAgNC00IDQgNCAwIDAgMC0zLjY1LTMuOTgyIDggOCAwIDAgMSA2Ljg3IDQuNTU4YzAuMzAyLTAuMjM0IDAuNTMzLTAuNTUgMC42Ni0wLjkxOGE5IDkgMCAwIDAtNy44OC00LjY1OHptMCAyYTMgMyAwIDAgMSAzIDMgMyAzIDAgMCAxLTMgMyAzIDMgMCAwIDEtMy0zIDMgMyAwIDAgMSAzLTN6bTAgMWEyIDIgMCAwIDAtMiAyIDIgMiAwIDAgMCAyIDIgMiAyIDAgMCAwIDItMiAyIDIgMCAwIDAtMC4wOS0wLjU4OCAxIDEgMCAwIDEtMC45MSAwLjU4OCAxIDEgMCAwIDEtMS0xIDEgMSAwIDAgMSAwLjU5LTAuOTEgMiAyIDAgMCAwLTAuNTktMC4wOXoiLz4KICA8cGF0aCBkPSJtOCAxMXYxMWg3djJoLTN2MWg4di0xaC0zdi0yaDd2LTExaC0xNXptMSAxaDE0djloLTE0eiIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"remotedesktopmanager,remote,desktop,ssh\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"remotedesktopmanager.free.desktop\"\nLABEL oc.launch=\"RemoteDesktopManager.Free.RemoteDesktopManager.Free\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"remotedesktopmanager\"\nLABEL oc.displayname=\"RemoteDesktop\"\nLABEL oc.path=\"/bin/remotedesktopmanager.free\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"remotedesktopmanager\"\nENV APPBIN \"/bin/remotedesktopmanager.free\"\nENV APP \"/bin/remotedesktopmanager.free\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/remotedesktopmanager/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/remotedesktopmanager/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/remotedesktopmanager/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/remotedesktopmanager/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update rhythmbox\nLABEL oc.icon=\"circle_rhythmbox.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iIzRjNGM0YyIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzJhMmEyYSIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSI1MjAiIHgyPSI1MjAiIHkxPSIyNCIgeTI9IjEwMDQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM3OS42NSAtNDg1LjkzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMzk4Ljk1IiB4Mj0iMzk4Ljk1IiB5MT0iMTEzLjQxIiB5Mj0iOTEzLjQxIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00MzAuMjIgLTUwNi4zMykgc2NhbGUoMS4wMjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZWRmMmQiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNDhkMDEiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iNTU4Ljk1IiB4Mj0iNTU4Ljk1IiB5MT0iMjEzLjQxIiB5Mj0iODEzLjQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC45OCAwIDAgLjk4IC00MDcuNTkgLTQ4NC45MSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYiI+PHN0b3Agb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjUyOC45NSIgeDI9IjUyOC45NSIgeTE9IjM2MS4wNiIgeTI9IjY4OC41MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNDY3LjU4IC01NDEuNjgpIHNjYWxlKDEuMDg4OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgeDE9IjU1OC45NSIgeDI9IjU1OC45NSIgeTE9IjIxMy40MSIgeTI9IjgxMy40MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYgMCAwIC4wNiAtMS4wNTcgLjcxNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYiIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjQwOC4yNSIgeDI9IjQwNy45NCIgeTE9IjU0Ny42IiB5Mj0iNDk4Ljg5IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC01MTAuNjQgLTY2My41Mikgc2NhbGUoMS4zMjc2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNlNmU2ZTYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGZpbHRlciBpZD0iaiIgeD0iLS4zNiIgeT0iLS4zNiIgd2lkdGg9IjEuNzIiIGhlaWdodD0iMS43MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzMCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDgxIiB5PSItLjA4MSIgd2lkdGg9IjEuMTYyIiBoZWlnaHQ9IjEuMTYyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMzLjEyNCIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii44OSIvPjwvZmlsdGVyPjxyYWRpYWxHcmFkaWVudCBpZD0iaCIgY3g9IjU1MC45NSIgY3k9IjUyMS40MSIgcj0iNDI1IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC00MzAuMjIgLTUwNi4zMykgc2NhbGUoMS4wMjExKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNmZThjMDYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmZWE5MzMiIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODkuMzIgLTQ4OS45Mikgc2NhbGUoMS4wMTE1KSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjYykiIG9wYWNpdHk9Ii4yNSIvPjxyZWN0IHg9IjEuOTgzIiB5PSIxLjk3OCIgd2lkdGg9IjU5Ljk5NyIgaGVpZ2h0PSI1OS45OTciIHJ5PSIyOS45OTgiIGZpbGw9InVybCgjZCkiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDM2NzMgMCAwIC4wMzY3MyAyNy4xMzggMzguMDQyKSI+PGNpcmNsZSBjeD0iMTMyLjM1IiBjeT0iMjYuMDc0IiByPSI0OTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+PGNpcmNsZSBjeD0iMTMyLjM1IiBjeT0iMjYuMDc0IiByPSI0OTAiIGZpbGw9InVybCgjZikiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjQwOC40MyIgZmlsbD0idXJsKCNnKSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9InVybCgjaCkiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iNTQuMjQ1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yNjEuNjcgLTYzMS45MSkiIGZpbGw9Im5vbmUiPjxjaXJjbGUgY3g9IjUxMiIgY3k9IjU0MC4zNiIgcj0iMTc1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPjxjaXJjbGUgY3g9IjIyNi4wMyIgY3k9IjgyNS42MSIgcj0iMTI1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPjxwYXRoIGQ9Im0zNjAgNDUyLjM2LTIzNSAzMDAgMTgwIDE3MCAzMTUtMjQ1eiIvPjwvZz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjI0NSIgZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuMiIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48Y2lyY2xlIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01MDguMyAtNjQyLjg3KSBzY2FsZSgxLjE2MjgpIiBjeD0iNTUwLjk1IiBjeT0iNjExLjQxIiByPSIxMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2opIiBvcGFjaXR5PSIuNCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48Y2lyY2xlIGN4PSIxMzIuMzUiIGN5PSIyNi4wNzQiIHI9IjE2My4zMyIgZmlsbD0idXJsKCNrKSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuOSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzkwLjMyIC00OTYuNTkpIHNjYWxlKDE2LjMzMykiIGQ9Ik0zMS44ODcgMTdBMTUgMTUgMCAwIDAgMTcgMzJhMTUgMTUgMCAwIDAgMTQuMzUgMTQuOTg2QTE0LjM1OSAxNC41IDAgMCAxIDE3LjY0MSAzMi41IDE0LjM1OSAxNC41IDAgMCAxIDMyIDE4YTE0LjM1OSAxNC41IDAgMCAxIDE0LjM1OSAxNC41IDE0LjM1OSAxNC41IDAgMCAxLTEzLjczNiAxNC40ODZBMTUgMTUgMCAwIDAgNDcgMzJhMTUgMTUgMCAwIDAtMTUtMTUgMTUgMTUgMCAwIDAtLjExMyAwem0uNzM2IDI5Ljk4NmExNC4zNTkgMTQuNSAwIDAgMS0uMzE4LjAxIDE1IDE1IDAgMCAwIC4zMTgtLjAxem0tLjMxOC4wMUExNC4zNTkgMTQuNSAwIDAgMSAzMiA0N2ExNSAxNSAwIDAgMCAuMzA1LS4wMDR6IiBmaWxsPSJ1cmwoI2wpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIG9wYWNpdHk9Ii4wNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48L2c+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii0yMCIgcj0iMyIgb3BhY2l0eT0iLjc1Ii8+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii00NCIgcj0iMyIgb3BhY2l0eT0iLjc1Ii8+PGNpcmNsZSB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIGN4PSIxNyIgY3k9Ii0yMCIgcj0iMiIgZmlsbD0iIzRkNGQ0ZCIvPjxjaXJjbGUgdHJhbnNmb3JtPSJyb3RhdGUoOTApIiBjeD0iMTciIGN5PSItNDQiIHI9IjIiIGZpbGw9IiM0ZDRkNGQiLz48L3N2Zz4=\"\nLABEL oc.keyword=\"rhythmbox,rhythmbox,audio;song;mp3;cd;podcast;MTP;playlist;last.fm;dlna;radio;\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.gnome.Rhythmbox3.desktop\"\nLABEL oc.launch=\"rhythmbox.Rhythmbox\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"rhythmbox\"\nLABEL oc.displayname=\"rhythmbox\"\nLABEL oc.path=\"/usr/bin/rhythmbox\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-ogg;application/ogg;audio/x-vorbis+ogg;audio/vorbis;audio/x-vorbis;audio/x-scpls;audio/x-mp3;audio/x-mpeg;audio/mpeg;audio/x-mpegurl;audio/x-flac;audio/mp4;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-stm;audio/x-xm;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"rhythmbox\"\nENV APPBIN \"/usr/bin/rhythmbox\"\nENV APP \"/usr/bin/rhythmbox\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/rhythmbox/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/rhythmbox/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/rhythmbox/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/rhythmbox/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-robots && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_gnome-robots.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iSXRlcm0iIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9Ii01MDYuNDUiIHgyPSItNTA2LjQ1IiB5MT0iLTE5LjEwMSIgeTI9IjEwMTMuNiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDU4ODI0IDAgMCAuMDU4ODI0IDYxLjc5MSAzLjEyMzYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyNjI2MjYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzMzIiBvZmZzZXQ9Ii41MDc2OSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNGE0YTRhIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjkwMDAwMDA2Ii8+CiAgPC9maWx0ZXI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iMTguNjg1IiBjeT0iMjUuNjY4IiByPSI1LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2siLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImsiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTQwMDAwIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2E0MDAwMCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjE4LjY4NSIgY3k9IjI1LjY2OCIgcj0iNS4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNqIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJqIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2MwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjMDAiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSIxOC42ODUiIGN5PSIyNS42NjgiIHI9IjUuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjaSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlZjI5MjkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWYyOTI5IiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJoIiBjeD0iMTMuMTk5IiBjeT0iMTIuNDY0IiByPSIyMS4wMDkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNjQ5IC42MTQ4MiAtLjYyMzAxIDEuMDc5MSAxNC40MDMgLTEuNTU0NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2QzZDdjZiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM4ODhhODUiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iNS42OTM0IiB4Mj0iNDAuNTAzIiB5MT0iNS40NTgzIiB5Mj0iNDAuMDgxIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNDk0OCA3LjU0NjIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNlZWVlZWMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWVlZWVjIiBzdG9wLW9wYWNpdHk9IjAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0ibCIgeD0iLS4xMjA5MyIgeT0iLS4xMTkwOSIgd2lkdGg9IjEuMjQxOSIgaGVpZ2h0PSIxLjIzODIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIuMDM1OTI1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8bWFzaz4KICA8ZyBpZD0iZyI+CiAgIDxwYXRoIGQ9Im05NjkuNzUgMzkyLjA1Yy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNC0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1LTcyLjYtNzIuNi0xNTcuMTUtMTE2LjY1LTI1My42NS0xMzIuMDUtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LTAuNTUtMTkuODUtMC44NS0zMC4xLTAuODUtOS4zNSAwLTE4LjYgMC4yNS0yNy45IDAuNzUtMTE4LjM1IDYuMS0yMjAuMyA1MS45NS0zMDUuODUgMTM3LjVxLTEzOC4yNSAxMzguMjUtMTM4LjI1IDMzMy43NWMwIDEzMC4zNSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjggNTYuNyA1Ni42NSAxMjAuNTUgOTUuOSAxOTEuMSAxMTcuNTUgMzYuNzUgMTEuMjUgNzQuOCAxNy44NSAxMTQuNzUgMTkuOTVoMC40YzguNSAwLjQ1IDE2LjYgMC43IDI0LjUgMC43aDNjMTAuMyAwIDIwLjUtMC4zIDMwLjEtMC44IDIuNS0wLjE1IDQuNzUtMC4zIDYuOTUtMC40NSAyMC4yLTEuNDUgMzkuOS00LjA1IDU4LjctNy43IDcuOTUtMS41NSAxNS44LTMuMyAyMy40LTUuMTUgODAuOC0yMC4zIDE1Mi4xNS02MS42IDIxNC42NS0xMjQuMSA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTguNDUtNDcuNjUgMjguNjUtOTguOCAzMC41NS0xNTMuNSAwLjItNi4wNSAwLjMtMTIuMjUgMC4zLTE4LjV2LTNjLTAuMi00MC42NS00Ljk1LTc5LjUtMTQuMy0xMTd6IiBmaWxsPSIjZmZmIi8+CiAgPC9nPgogPC9tYXNrPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsdGVyPSJ1cmwoI2QpIiBvcGFjaXR5PSIuMjUiIHN0eWxlPSJwYWludC1vcmRlcjpmaWxsIG1hcmtlcnMgc3Ryb2tlIi8+CiA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0idXJsKCNiKSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjU1MTczIC40MDcwNikiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjUiPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuNDk0OCA3LjU0NjIpIj4KICAgPHBhdGggZD0ibTcuNTEzMyAxOC40NTRoMzIuOTk4djExLjc3OGgtMzIuOTk4YzNlLTQgLTMuOTI2IDNlLTQgLTcuODUyIDNlLTQgLTExLjc3OHoiIHN0cm9rZT0iIzJlMzQzNiIvPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE0MjksMCwwLDEuMTQyOSwtNDYuMjAyLC0xMi4xNzUpIiBvcGFjaXR5PSIuNzUiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6Ii8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6Ii8+CiAgIDwvZz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTU2LjIwMiwtMTIuMTc1KSI+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjM4NjEsMCwwLDEuMzg2MSwzNS41MjcsLTMuOTI1NykiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5MDEgMCAwIC45OTAxIDQyLjkyNyA2LjI5ODEpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC41OTQwNiAwIDAgLjU5NDA2IDUwLjMyNyAxNi40NjQpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgPC9nPgogICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjE0MjksMCwwLDEuMTQyOSwtMzYuMjAyLC0xMi4xNzUpIiBvcGFjaXR5PSIuNSI+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjM4NjEsMCwwLDEuMzg2MSwzNS41MjcsLTMuOTI1NykiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjk5MDEgMCAwIC45OTAxIDQyLjkyNyA2LjI5ODEpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC41OTQwNiAwIDAgLjU5NDA2IDUwLjMyNyAxNi40NjQpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiLz4KICAgPC9nPgogIDwvZz4KICA8cGF0aCBkPSJtMzEuNDY0IDExLjA3N2MtMTAuMTE3IDAtMTguNTQ0IDcuMzI4OC0yMC4yMTkgMTYuOTY5aDQwLjQwNmMtMS42NzYtOS42MzktMTAuMDcxLTE2Ljk2OS0yMC4xODctMTYuOTY5em0tMjAuMTg4IDI0LjA2M2MxLjY5MDIgOS42MjIgMTAuMDgzIDE2Ljk2OCAyMC4xODggMTYuOTY4IDEwLjEwNSAwIDE4LjQ5OC03LjM0NCAyMC4xODctMTYuOTY4eiIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2U9IiMyZTM0MzYiIHN0cm9rZS13aWR0aD0iMXB4Ii8+CiAgPHBhdGggZD0ibTMxLjQ2NCAxMi4wNzdjLTkuMjI2IDAtMTYuOTUgNi40NDk4LTE4Ljk2OSAxNS4wNjNoMzcuOTM4Yy0yLjAyLTguNjEzLTkuNzQ0LTE1LjA2My0xOC45NjktMTUuMDYzem0tMTguOTY5IDIzLjk2OWMyLjAxOTIgOC42MTMgOS43NDMgMTUuMDMxIDE4Ljk2OSAxNS4wMzEgOS4yMjUgMCAxNi45NDktNi40MTggMTguOTY5LTE1LjAzMXoiIHN0cm9rZT0idXJsKCNmKSIgc3Ryb2tlLXdpZHRoPSIxcHgiLz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC41NTE3MyAuNDA3MDYpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3LjQ5NDggNy41NDYyKSI+CiAgIDxwYXRoIGQ9Im03LjUxMzMgMTguNDU0aDMyLjk5OHYxMS43NzhoLTMyLjk5OGMzZS00IC0zLjkyNiAzZS00IC03Ljg1MiAzZS00IC0xMS43Nzh6IiBmaWxsPSIjMmUzNDM2IiBzdHJva2U9IiMyZTM0MzYiLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTQ2LjIwMiwtMTIuMTc1KSIgb3BhY2l0eT0iLjc1Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuMzg2MSwwLDAsMS4zODYxLDM1LjUyNywtMy45MjU3KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2UpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguOTkwMSAwIDAgLjk5MDEgNDIuOTI3IDYuMjk4MSkiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIgZmlsbD0idXJsKCNjKSIvPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjU5NDA2IDAgMCAuNTk0MDYgNTAuMzI3IDE2LjQ2NCkiIGQ9Im0yMy43MzUgMjUuNjY4YzAgMi43ODktMi4yNjEgNS4wNS01LjA1IDUuMDVzLTUuMDUtMi4yNjEtNS4wNS01LjA1IDIuMjYxLTUuMDUgNS4wNS01LjA1IDUuMDUgMi4yNjEgNS4wNSA1LjA1eiIgZmlsbD0idXJsKCNhKSIvPgogICA8L2c+CiAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDEuMTQyOSwwLDAsMS4xNDI5LC01Ni4yMDIsLTEyLjE3NSkiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiIGZpbGw9InVybCgjZSkiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDwvZz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4xNDI5LDAsMCwxLjE0MjksLTM2LjIwMiwtMTIuMTc1KSIgb3BhY2l0eT0iLjUiPgogICAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYxLDAsMCwxLjM4NjEsMzUuNTI3LC0zLjkyNTcpIiBkPSJtMjMuNzM1IDI1LjY2OGMwIDIuNzg5LTIuMjYxIDUuMDUtNS4wNSA1LjA1cy01LjA1LTIuMjYxLTUuMDUtNS4wNSAyLjI2MS01LjA1IDUuMDUtNS4wNSA1LjA1IDIuMjYxIDUuMDUgNS4wNXoiIGZpbGw9InVybCgjZSkiLz4KICAgIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC45OTAxIDAgMCAuOTkwMSA0Mi45MjcgNi4yOTgxKSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguNTk0MDYgMCAwIC41OTQwNiA1MC4zMjcgMTYuNDY0KSIgZD0ibTIzLjczNSAyNS42NjhjMCAyLjc4OS0yLjI2MSA1LjA1LTUuMDUgNS4wNXMtNS4wNS0yLjI2MS01LjA1LTUuMDUgMi4yNjEtNS4wNSA1LjA1LTUuMDUgNS4wNSAyLjI2MSA1LjA1IDUuMDV6IiBmaWxsPSJ1cmwoI2EpIi8+CiAgIDwvZz4KICA8L2c+CiAgPHBhdGggZD0ibTMxLjQ2NCAxMS4wNzdjLTEwLjExNyAwLTE4LjU0NCA3LjMyODgtMjAuMjE5IDE2Ljk2OWg0MC40MDZjLTEuNjc2LTkuNjM5LTEwLjA3MS0xNi45NjktMjAuMTg3LTE2Ljk2OXptLTIwLjE4OCAyNC4wNjNjMS42OTAyIDkuNjIyIDEwLjA4MyAxNi45NjggMjAuMTg4IDE2Ljk2OCAxMC4xMDUgMCAxOC40OTgtNy4zNDQgMjAuMTg3LTE2Ljk2OHoiIGZpbGw9InVybCgjaCkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMmUzNDM2IiBzdHJva2Utd2lkdGg9IjFweCIvPgogIDxwYXRoIGQ9Im0zMS40NjQgMTIuMDc3Yy05LjIyNiAwLTE2Ljk1IDYuNDQ5OC0xOC45NjkgMTUuMDYzaDM3LjkzOGMtMi4wMi04LjYxMy05Ljc0NC0xNS4wNjMtMTguOTY5LTE1LjA2M3ptLTE4Ljk2OSAyMy45NjljMi4wMTkyIDguNjEzIDkuNzQzIDE1LjAzMSAxOC45NjkgMTUuMDMxIDkuMjI1IDAgMTYuOTQ5LTYuNDE4IDE4Ljk2OS0xNS4wMzF6IiBmaWxsPSJub25lIiBzdHJva2U9InVybCgjZikiIHN0cm9rZS13aWR0aD0iMXB4Ii8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"robots,gnome robots,game robots,robots\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"gnome-robots.desktop\"\nLABEL oc.launch=\"gnome-robots.Gnome-robots\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"Robots\"\nLABEL oc.displayname=\"Robots\"\nLABEL oc.path=\"/usr/games/gnome-robots\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Robots\"\nENV APPBIN \"/usr/games/gnome-robots\"\nENV APP \"/usr/games/gnome-robots\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/robots/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/robots/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/robots/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/robots/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nRUN apk add --no-cache --update shotcut mesa-dri-gallium\nLABEL oc.icon=\"circle_shotcut.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2LjkzMyAxNi45MzMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZGVmcz4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImIiIGN4PSItMTM2Ljk5IiBjeT0iMTk4LjY1IiByPSIzOC41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wOTgxOTYgMCAwIC4wODI0NzEgMjEuOTE4IC03LjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMjU2MWRiIiBzdG9wLW9wYWNpdHk9Ii45NDExOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwZDBkMGQiIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iayIgeD0iLS4yMzI1OCIgeT0iLS4yNDc5MSIgd2lkdGg9IjEuNDY1MiIgaGVpZ2h0PSIxLjQ5NTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMDYwNzE4NiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImoiIHg9Ii0uMDExNjI5IiB5PSItLjAxMjM5NiIgd2lkdGg9IjEuMDIzMyIgaGVpZ2h0PSIxLjAyNDgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMDMwNDU1NDkxIi8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iYSIgeD0iLS4wNjI0NDQiIHk9Ii0uMDY2NTYiIHdpZHRoPSIxLjEyNDkiIGhlaWdodD0iMS4xMzMxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjA4NTUyNzgzNiIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImkiIHg9Ii0uMDU1MjM5IiB5PSItLjA2NTY2IiB3aWR0aD0iMS4xMTA1IiBoZWlnaHQ9IjEuMTMxMyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NjI0MjQ3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4yMzI1OCIgeT0iLS4yNDc5MSIgd2lkdGg9IjEuNDY1MiIgaGVpZ2h0PSIxLjQ5NTgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNTEyMDkyMzUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjA1ODE0NSIgeT0iLS4wNjE5NzgiIHdpZHRoPSIxLjExNjMiIGhlaWdodD0iMS4xMjQiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMTI4MDIzMDkiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmIiB4PSItLjE5NjI4IiB5PSItLjMwODc3IiB3aWR0aD0iMS4zOTI2IiBoZWlnaHQ9IjEuNjE3NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMi45ODc4MDM3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibiIgeD0iLS4xMDk3OCIgeT0iLS4xMjk5OSIgd2lkdGg9IjEuMjE5NiIgaGVpZ2h0PSIxLjI2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjE1MjI3ODI5Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0ibSIgeD0iLS4xODk4NyIgeT0iLS4yNDMyMyIgd2lkdGg9IjEuMzc5NyIgaGVpZ2h0PSIxLjQ4NjUiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMTUyMjc4MjkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI4LjQ2NjciIHgyPSI4LjQ2NjciIHkxPSIyODAuNiIgeTI9IjI5Ni40NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAxMiAwIDAgMS4wMTIgLS4xMDIgLTI4My41NSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM5ZjlmOWYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iMjgyLjE4IiB5Mj0iMjk0Ljg4IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2NjYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iMjgzLjI0IiB5Mj0iMjkzLjgyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxMjEyMTIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iOC40NjY3IiB4Mj0iOC40NjY3IiB5MT0iLTIuOTIwMyIgeTI9IjE5Ljg0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjY2MiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJlYmViIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9Im8iIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjM0MTQxMDE2Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguNjk3NDYgMCAwIC42OTc0NiAyLjU2MTMgMi41NjYpIiBzdHJva2Utd2lkdGg9IjEuNDMzOCI+CiAgPGNpcmNsZSBjeD0iOC40NjY3IiBjeT0iOC40NiIgcj0iMTEuMzgiIGZpbHRlcj0idXJsKCNvKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iOC40NjY3IiBjeT0iOC40NiIgcj0iMTEuMzgiIGZpbGw9InVybCgjbCkiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI3Ljk2NjMiIGZpbGw9InVybCgjZSkiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI2LjM1IiBmaWxsPSJ1cmwoI2QpIiBzdHJva2Utd2lkdGg9IjEuNDMzOCIvPgogIDxjaXJjbGUgY3g9IjguNDY2NyIgY3k9IjguNDYiIHI9IjUuMjkxNyIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIxLjQzMzgiLz4KICA8Y2lyY2xlIGN4PSI4LjQ2NjciIGN5PSI4LjQ2IiByPSI0LjExNiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlPSIjMGQyMjRkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iLjMzNjMzIi8+CiAgPGcgc3Ryb2tlLXdpZHRoPSIxLjQzMzgiPgogICA8cGF0aCBkPSJtNC45NDQ4IDYuNDcgMS40NjQ2IDAuODEwNDNzMC40NTc3MS0wLjQ3NzQ3IDAuNzcxOTItMC42ODYxNGMwLjM0ODE2LTAuMjMxMiAxLjEwNDctMC40MTU4NyAxLjA5MjUtMC4zNjA0N2wtMC4yNDA4Mi0xLjc2MjFzLTEuNjIxMy0wLjE2MDctMy4wODgyIDEuOTk4M3oiIGZpbGw9IiM0Njc4Y2MiIGZpbHRlcj0idXJsKCNuKSIgb3BhY2l0eT0iLjgiLz4KICAgPHBhdGggZD0ibTQuNzg3NyA2LjczIDEuNTY1IDAuNjk1MzlzLTAuMDg4MjkyIDAuMjAxNjItMC4xMjMwNyAwLjQyMDkzYy0wLjAzMTc5MSAwLjIwMDUyIDAuMDA0NDQgMC4zODYyMyAwLjAwNDQ0IDAuMzg2MjNsLTEuODA2Mi0wLjAxODNzMC4wNzIxOTMtMS4wMzU5IDAuMzU5OTEtMS40ODQyeiIgZmlsbD0iIzQ2NzhjYyIgZmlsdGVyPSJ1cmwoI20pIiBvcGFjaXR5PSIuOCIvPgogICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLC0yODAuMDcpIiBmaWxsPSIjZmZmIj4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4xNTY4MyAtLjEzNTkxIC4xMzU5MSAuMTU2ODMgMzYuMjc4IDI0OC42OCkiIGN4PSItMjI4LjMzIiBjeT0iNDQuOTQ0IiByeD0iMy4wODMiIHJ5PSIxLjkwMjgiIGZpbGwtb3BhY2l0eT0iLjMiIGZpbHRlcj0idXJsKCNnKSIvPgogICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoLjEwMjkxIC0uMDg5MTggLjA4OTE4IC4xMDI5MSAyNi4xMTIgMjYyLjAzKSIgY3g9Ii0yMjguMSIgY3k9IjUxLjE2NiIgcng9IjEuOTE3OCIgcnk9IjEuMTgzNyIgZmlsbC1vcGFjaXR5PSIuMyIgZmlsdGVyPSJ1cmwoI2EpIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMTE4NzMgLS4wNzk0MjUgLjA3OTQyNSAuMTE4NzMgMjcuNDA2IDI1OS43NSkiIGN4PSItMjIyLjAzIiBjeT0iMTExLjcyIiByeD0iMTguNDE5IiByeT0iMTEuMzY4IiBmaWx0ZXI9InVybCgjaSkiIG9wYWNpdHk9Ii4yIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMTAyOTEgLS4wODkxOCAuMDg5MTggLjEwMjkxIDI2Ljc2NCAyNjEuNDYpIiBjeD0iLTIzNS4yOSIgY3k9Ijc1LjA0NiIgcng9IjMuNjY3IiByeT0iMi4yNjMzIiBmaWxsLW9wYWNpdHk9Ii4zIiBmaWx0ZXI9InVybCgjaikiLz4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4xMjUyMyAtLjEwODUzIC4xMDg1MyAuMTI1MjMgMjkuOTE4IDI1NC43KSIgY3g9Ii0yMzQuMjEiIGN5PSI4OC43NTkiIHJ4PSI2LjM4NTkiIHJ5PSIzLjk0MTMiIGZpbHRlcj0idXJsKCNrKSIvPgogICA8L2c+CiAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4MC4wNykiPgogICAgPGVsbGlwc2UgdHJhbnNmb3JtPSJtYXRyaXgoLjE0MDQ2IC0uMDgyODE0IC4wODI4MTQgLjE0MDQ2IDMxLjY1MSAyNTYuMDIpIiBjeD0iLTIyMi4wMyIgY3k9IjExMS43MiIgcng9IjE4LjQxOSIgcnk9IjExLjM2OCIgZmlsbD0iIzQzOTdlZSIgZmlsdGVyPSJ1cmwoI2YpIiBvcGFjaXR5PSIuNDUiLz4KICAgIDxlbGxpcHNlIHRyYW5zZm9ybT0ibWF0cml4KC4wODEzMjUgLS4wNzA0NzYgLjA3MDQ3NiAuMDgxMzI1IDIyLjA1OSAyNjcuMTMpIiBjeD0iLTIyOC4zMyIgY3k9IjQ0Ljk0NCIgcng9IjMuMDgzIiByeT0iMS45MDI4IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii44NTQxNyIgZmlsdGVyPSJ1cmwoI2gpIi8+CiAgICA8ZWxsaXBzZSB0cmFuc2Zvcm09Im1hdHJpeCguMDY5MTU2IC0uMDU5OTMgLjA1OTkzIC4wNjkxNTYgMjAuOCAyNzEuNDkpIiBjeD0iLTIyOC4xIiBjeT0iNTEuMTY2IiByeD0iMS45MTc4IiByeT0iMS4xODM3IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zIiBmaWx0ZXI9InVybCgjYSkiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"shotcut,video,audio,editing,suite,mlt,4k,video4linux,blackmagic,decklink\"\nLABEL oc.cat=\"graphics\"\nLABEL oc.desktopfile=\"org.shotcut.Shotcut.desktop\"\nLABEL oc.launch=\"shotcut.Shotcut\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"Shotcut\"\nLABEL oc.displayname=\"Shotcut\"\nLABEL oc.path=\"/usr/bin/shotcut\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"image/bmp;image/g3fax;image/gif;image/x-fits;image/x-pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/x-gimp-gbr;image/x-gimp-pat;image/x-gimp-gih;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;application/vnd.mlt+xml;application/ogg;application/x-ogg;audio/ogg;audio/x-vorbis;audio/x-vorbis+ogg;video/ogg;video/x-ogm+ogg;video/x-theora+ogg;video/x-theora;audio/x-speex;audio/opus;application/x-flac;audio/flac;audio/x-flac;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;video/x-ms-asf;video/x-ms-asf-plugin;video/x-ms-asx;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;audio/x-pn-windows-acm;video/divx;video/msvideo;video/vnd.divx;video/x-avi;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/vnd.rn-realaudio;audio/x-pn-realaudio;audio/x-pn-realaudio-plugin;audio/x-real-audio;audio/x-realaudio;video/vnd.rn-realvideo;audio/mpeg;audio/mpg;audio/mp1;audio/mp2;audio/mp3;audio/x-mp1;audio/x-mp2;audio/x-mp3;audio/x-mpeg;audio/x-mpg;video/mp2t;video/mpeg;video/mpeg-system;video/x-mpeg;video/x-mpeg2;video/x-mpeg-system;application/mpeg4-iod;application/mpeg4-muxcodetable;application/x-extension-m4a;application/x-extension-mp4;audio/aac;audio/m4a;audio/mp4;audio/x-m4a;audio/x-aac;video/mp4;video/mp4v-es;video/x-m4v;application/x-quicktime-media-link;application/x-quicktimeplayer;video/quicktime;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/3gpp;audio/3gpp2;audio/AMR;audio/AMR-WB;audio/amr;audio/amr-wb;video/3gp;video/3gpp;video/3gpp2;x-scheme-handler/mms;x-scheme-handler/mmsh;x-scheme-handler/rtsp;x-scheme-handler/rtp;x-scheme-handler/rtmp;x-scheme-handler/icy;x-scheme-handler/icyx;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-player;application/x-cd-image;application/ram;application/xspf+xml;audio/mpegurl;audio/x-mpegurl;audio/scpls;audio/x-scpls;text/google-video-pointer;text/x-google-video-pointer;video/vnd.mpegurl;application/vnd.apple.mpegurl;application/vnd.ms-asf;application/vnd.ms-wpl;application/sdp;audio/dv;video/dv;audio/x-aiff;audio/x-pn-aiff;video/x-anim;video/x-nsv;video/fli;video/flv;video/x-flc;video/x-fli;video/x-flv;audio/wav;audio/x-pn-au;audio/x-pn-wav;audio/x-wav;audio/ac3;audio/eac3;audio/vnd.dts;audio/vnd.dts.hd;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/vnd.dolby.mlp;audio/basic;audio/midi;audio/x-ape;audio/x-gsm;audio/x-musepack;audio/x-tta;audio/x-wavpack;audio/x-shorten;application/x-shockwave-flash;application/x-flash-video;misc/ultravox;image/vnd.rn-realpix;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-xm;application/mxf;\"\nLABEL oc.fileextensions=\"mlt\"\nLABEL oc.legacyfileextensions=\"mlt\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Shotcut\"\nENV APPBIN \"/usr/bin/shotcut\"\nENV APP \"/usr/bin/shotcut\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/shotcut/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/shotcut/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/shotcut/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/shotcut/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update stellarium\nLABEL oc.icon=\"stellarium.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgaWQ9InN2ZzgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDEyLjcgMTIuNyIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcyBpZD0iZGVmczIiPjxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImNsaXBQYXRoNTM0MyI+PHBhdGggZD0ibSAzLjA2ODgzNTEsMjg1LjU1Njc3IGMgLTEuNjEzNTY4LDEuMTk1OTYgLTIuNTY2MjE4MSwzLjA4NDc4IC0yLjU2ODgzNTA5LDUuMDkzMjMgMCwzLjUwNzAxIDIuODQyOTkyMTksNi4zNSA2LjM1MDAwMDA5LDYuMzUgQyAxMC4zNTcwMDgsMjk3IDEzLjIsMjk0LjE1NzAxIDEzLjIsMjkwLjY1IGMgLTAuMDAyMiwtMC44NDI5NiAtMC40NTIwNzgsLTIuNzEyNzEgLTAuNTAwMjI4LC0yLjQ1MzU5IC0wLjAyNDI0LDAuODQxMjEgLTAuNTcxODA5LDIuMzUzMjIgLTAuNjAyMDMxLDIuMjMxMzggLTAuMDAyNiwtMC41MDYyMSAtMC4yODc2LC0xLjQyNjI2IC0wLjMwNTA5OCwtMS4xOTUwOSAwLjAyODA0LDEuNDA2OTUgLTEuNDgzNzQsMy4xNzY3NyAtMi4zMDc2NjIzLDMuNTAwMzggLTAuODMxMDQ1NywwLjM2OTQyIC0xLjczNzE2MzcsMC41NjQxMiAtMi42MTE3MjY3LDAuNTY1MzQgLTAuMTczNjkxOCwyZS01IC0xLjE2ODY1MTksLTAuMTM4MDcgLTEuNjQ0MzQzOSwtMC43MDQzNSAtMC44MjYzNzYsLTAuODkyNTMgLTAuMDAyMDEsLTEuMDk5OTQgMC40NjI1MDM5LC0xLjI3MzMxIDAuNTA1NTg2MiwtMC4xODg3MSAxLjAzMDg4NywtMC4zMDk2OSAxLjUyMDMyMTIsLTAuNDIwMTMgMC43NDU2OTg4LC0wLjE2ODI2IDAuNDcxMDYxOCwtMC41MjYyNiAwLjEwNDkwMjgsLTAuNjI4OSAtMC45MjY2OTM5LC0wLjI1OTc2IC0yLjA0NDg4NiwwLjMzNTQzIC0yLjg2NTQ1NzksMC4zMDU5MyAtMC44NDg0MDYsLTAuMDI5MSAtMC44MDQ2MTgsLTEuNjk2MjEgLTAuMTQwNTYwMSwtMS43NjIxNyAwLjczOTQyMTIsLTAuMDczNCAxLjY2NjUxNTEsLTAuNTEwNzkgMS40NjE3NzksLTAuNjU2NzMgLTAuODMwMzU0OSwtMC42MTY3MiAtMC45NjE3MzY5LC0wLjc5MDgxIC0xLjA1OTU1NDksLTEuMTY0MTggLTAuMTQ4MDIwMSwtMC41NjUgMC4zNDEyODIsLTEuMDM1NTcgMC4wNTc3NywtMC45NjM1NiAtMC4yNTk2MTY5LDAuMDggLTAuNDExMDY3OCwwLjE1NjQxIC0wLjU5ODg2MTksMC4yNTcxNSAtMC4xNjcyOTI5LDAuMDg5NyAtMC4yOTM4MTQsMC4wNTQ2IC0wLjY3NTE4NDEsMC4wMDIgLTAuMzI0OTQ0OSwtMC4wNDUgLTAuMzg3MDA1OCwtMC4wNTU3IC0wLjM3NTUwMDksLTAuMjU2NzMgMC4wMTE1LC0wLjIwMDk3IDAuMDcyOTUsLTAuNTIxMjUgLTAuMDUyMjMsLTAuNDc2NDggeiIgaWQ9InBhdGg1MzQ1IiBzdHlsZT0iZmlsbDojN2FhZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjAxMDQ1OTQyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIi8+PC9jbGlwUGF0aD48Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDQ1NDMiPjxwYXRoIGQ9Im0gMS43NzYwMDg4LDI5MS41Njk2IGMgLTEuODI2MTMzMzksMC4xNzQzNCAtMy4yOTQwMzE1LDAuOTE5MzQgLTMuNDkwMzk5NiwyLjE2NDUxIC0wLjI2MjkwNTQsMS42NjcyOSAxLjU2Nzg1OTEsMy4zNDEyNyA0LjA4OTEyMTMsMy43Mzg5MyAxLjIxNzIwODQsMC4xOTExOSAyLjQzNDIzNCwwLjA1MyAzLjM4MDc0MjMsLTAuMzgzODcgMC43MzEwMTk0LDAuNTI4MyAxLjY2OTM1NywwLjkwMDc4IDIuNjcwNDcyMSwxLjA2MDA4IDIuNTIxMjY5MSwwLjM5NzcxIDQuNzc4MzM4MSwtMC42MzE1IDUuMDQxMjgwMSwtMi4yOTg4IDAuMjYyOTA1LC0xLjY2NzMgLTEuNDkwNjY3LC0xLjk0MzI5IC00LjI1NzE2MywtMi4xNzkzOCAtMi43NjY0OTU4LC0wLjIzNjA5IC0zLjYxNjM4OTYsLTEuNjg4MzkgLTUuNzQ3MDQ0OCwtMi4wNDU3NSAtMC41NjYwMTkxLC0wLjA4OTMgLTEuMTM4MDgwOCwtMC4xMDgxNyAtMS42ODcwMDg0LC0wLjA1NTcgeiIgaWQ9InBhdGg0NTQ1IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM2NjY2NjY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMTE2NjY2NTY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGlkPSJsYXllcjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI4NC4zKSI+PGNpcmNsZSBjeD0iNi4zNDk5OTk5IiBjeT0iMjkwLjY0OTk5IiBpZD0icGF0aDQ1MTQiIHI9IjYuMzQ5OTk5OSIgc3R5bGU9ImZpbGw6I2FhY2NmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS43NDY1ODgxMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDQ1NDMpIiBkPSJtIDEyLjcsMjkwLjY0OTk5IGEgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSAtNi4zNTAwMDAxLDYuMzUgQSA2LjM0OTk5OTksNi4zNDk5OTk5IDAgMCAxIDAsMjkwLjY0OTk5IGEgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSA2LjM0OTk5OTksLTYuMzUgNi4zNDk5OTk5LDYuMzQ5OTk5OSAwIDAgMSA2LjM1MDAwMDEsNi4zNSB6IiBpZD0icGF0aDQ1MTQtMyIgc3R5bGU9ImZpbGw6IzY2NjY2NjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS43NDY1ODgxMTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIvPjxnIGlkPSJnNDY3Ny05IiBzdHlsZT0iZmlsbDojNWI5OWY4O2ZpbGwtb3BhY2l0eToxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOS4xNTI0OTU4LC0zLjUyNDkyMzIpIj48cGF0aCBkPSJtIDE5LjU2NzQ1OCwyOTEuNzc1NjEgYSAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAwIC0wLjQ2ODk5MiwtMC4zNjQ2NyAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAxIC0wLjM2NTExNiwzLjA0NzM0IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDEgLTMuMDQ2NDYsMC4zNjYgMi40ODY2ODExLDIuNDg2NjgxMSAwIDAgMCAwLjM2NDIzMSwwLjQ2NzY2IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMy41MTYzMzcsNC41ZS00IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMCwtMy41MTY3OCB6IiBpZD0icGF0aDQ1MjYtNjkiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41NjA1MDIyOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PHBhdGggZD0ibSA2LjQxODUxNDUsMjk0LjIzMjk5IC0wLjM1NjYyNDksLTAuMjUzOTQgLTAuMzU2NjI0OSwwLjI1Mzk0IDAuMDQxNjAyLC0wLjQzNTgyIC0wLjM5ODIyNjcsLTAuMTgxODcgMC4zOTgyMjY3LC0wLjE4MTg4IC0wLjA0MTYwMiwtMC40MzU4MiAwLjM1NjYyNSwwLjI1Mzk0IDAuMzU2NjI0OSwtMC4yNTM5NCAtMC4wNDE2MDIsMC40MzU4MiAwLjM5ODIyNjcsMC4xODE4OCAtMC4zOTgyMjY3LDAuMTgxODcgeiIgaWQ9InBhdGg0NTYxLTMzIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMTY4ODgxLC0wLjY0NDgzNTY1LDAuNjQ0ODM1NjUsMS4xMTY4ODgxLC0xODMuMzc4MjEsLTMyLjQ5MTY2NikiLz48Y2lyY2xlIGN4PSIxMS4zMTU4NTUiIGN5PSIyOTMuNzIzOTQiIGlkPSJwYXRoNDYyMS04IiByPSIwLjMwMjY3ODI2IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuOTg5NDk2MjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxjaXJjbGUgY3g9IjE1LjU3NTQyMSIgY3k9IjI5MC4yMjA3OSIgaWQ9InBhdGg0NjI1LTAiIHI9IjAuMzU4MjY4ODkiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6My42OTkzOTgwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PGNpcmNsZSBjeD0iMTcuMTY4NjIzIiBjeT0iMjkyLjAxNDg5IiBpZD0icGF0aDQ2MjUtNS01IiByPSIwLjIyNjQ5Njk5IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiM1Yjk5Zjg7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMzM4NzUyOTk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGQ9Im0gNi40MTg1MTQ1LDI5NC4yMzI5OSAtMC4zNTY2MjQ5LC0wLjI1Mzk0IC0wLjM1NjYyNDksMC4yNTM5NCAwLjA0MTYwMiwtMC40MzU4MiAtMC4zOTgyMjY3LC0wLjE4MTg3IDAuMzk4MjI2NywtMC4xODE4OCAtMC4wNDE2MDIsLTAuNDM1ODIgMC4zNTY2MjUsMC4yNTM5NCAwLjM1NjYyNDksLTAuMjUzOTQgLTAuMDQxNjAyLDAuNDM1ODIgMC4zOTgyMjY3LDAuMTgxODggLTAuMzk4MjI2NywwLjE4MTg3IHoiIGlkPSJwYXRoNDU2MS0xLTYiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzViOTlmODtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS41OTk5MTY0NjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjY4NzMwMTcyLC0wLjM5NjgxMzg1LDAuMzk2ODEzODUsMC42ODczMDE3MiwtMTA2LjEzNzk2LDk0LjI3OTU3NikiLz48L2c+PGcgaWQ9Imc0Njc3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOS4zMjk0NTE3LC0zLjc0MjMyMjQpIj48cGF0aCBkPSJtIDE5LjU2NzQ1OCwyOTEuNzc1NjEgYSAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAwIC0wLjQ2ODk5MiwtMC4zNjQ2NyAyLjQ4NjY4MTEsMi40ODY2ODExIDAgMCAxIC0wLjM2NTExNiwzLjA0NzM0IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDEgLTMuMDQ2NDYsMC4zNjYgMi40ODY2ODExLDIuNDg2NjgxMSAwIDAgMCAwLjM2NDIzMSwwLjQ2NzY2IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMy41MTYzMzcsNC41ZS00IDIuNDg2NjgxMSwyLjQ4NjY4MTEgMCAwIDAgMCwtMy41MTY3OCB6IiBpZD0icGF0aDQ1MjYiIHN0eWxlPSJvcGFjaXR5OjE7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi41NjA1MDIyOTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIi8+PHBhdGggZD0ibSA2LjQxODUxNDUsMjk0LjIzMjk5IC0wLjM1NjYyNDksLTAuMjUzOTQgLTAuMzU2NjI0OSwwLjI1Mzk0IDAuMDQxNjAyLC0wLjQzNTgyIC0wLjM5ODIyNjcsLTAuMTgxODcgMC4zOTgyMjY3LC0wLjE4MTg4IC0wLjA0MTYwMiwtMC40MzU4MiAwLjM1NjYyNSwwLjI1Mzk0IDAuMzU2NjI0OSwtMC4yNTM5NCAtMC4wNDE2MDIsMC40MzU4MiAwLjM5ODIyNjcsMC4xODE4OCAtMC4zOTgyMjY3LDAuMTgxODcgeiIgaWQ9InBhdGg0NTYxIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMS4xMTY4ODgxLC0wLjY0NDgzNTY1LDAuNjQ0ODM1NjUsMS4xMTY4ODgxLC0xODMuMzc4MjEsLTMyLjQ5MTY2NikiLz48Y2lyY2xlIGN4PSIxMS4zMTU4NTUiIGN5PSIyOTMuNzIzOTQiIGlkPSJwYXRoNDYyMSIgcj0iMC4zMDI2NzgyNiIgc3R5bGU9Im9wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjk4OTQ5NjIzO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiLz48Y2lyY2xlIGN4PSIxNS41NzU0MjEiIGN5PSIyOTAuMjIwNzkiIGlkPSJwYXRoNDYyNSIgcj0iMC4zNTgyNjg4OSIgc3R5bGU9Im9wYWNpdHk6MTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjY5OTM5ODA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiLz48Y2lyY2xlIGN4PSIxNy4xNjg2MjMiIGN5PSIyOTIuMDE0ODkiIGlkPSJwYXRoNDYyNS01IiByPSIwLjIyNjQ5Njk5IiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuMzM4NzUyOTk7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIvPjxwYXRoIGQ9Im0gNi40MTg1MTQ1LDI5NC4yMzI5OSAtMC4zNTY2MjQ5LC0wLjI1Mzk0IC0wLjM1NjYyNDksMC4yNTM5NCAwLjA0MTYwMiwtMC40MzU4MiAtMC4zOTgyMjY3LC0wLjE4MTg3IDAuMzk4MjI2NywtMC4xODE4OCAtMC4wNDE2MDIsLTAuNDM1ODIgMC4zNTY2MjUsMC4yNTM5NCAwLjM1NjYyNDksLTAuMjUzOTQgLTAuMDQxNjAyLDAuNDM1ODIgMC4zOTgyMjY3LDAuMTgxODggLTAuMzk4MjI2NywwLjE4MTg3IHoiIGlkPSJwYXRoNDU2MS0xIiBzdHlsZT0ib3BhY2l0eToxO3ZlY3Rvci1lZmZlY3Q6bm9uZTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTk5OTE2NDY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIgdHJhbnNmb3JtPSJtYXRyaXgoMC42ODczMDE3MiwtMC4zOTY4MTM4NSwwLjM5NjgxMzg1LDAuNjg3MzAxNzIsLTEwNi4xMzc5Niw5NC4yNzk1NzYpIi8+PC9nPjwvZz48L3N2Zz4=\"\nLABEL oc.keyword=\"stellarium,stellarium,astronomy\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.stellarium.Stellarium.desktop\"\nLABEL oc.launch=\"stellarium.stellarium\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Stellarium\"\nLABEL oc.displayname=\"Stellarium\"\nLABEL oc.path=\"/usr/bin/stellarium\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-stellarium-script;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Stellarium\"\nENV APPBIN \"/usr/bin/stellarium\"\nENV APP \"/usr/bin/stellarium\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/stellarium/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/stellarium/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/stellarium/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/stellarium/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update step\nLABEL oc.icon=\"step.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ExQTdBRjsiIGQ9Ik00MjAsNDZIOTJjLTI0LjI2MiwwLTQ0LDE5LjczOC00NCw0NHYzMTJjMCw2LjYyNyw1LjM3MywxMiwxMiwxMnMxMi01LjM3MywxMi0xMlY5MA0KCWMwLTExLjAyOCw4Ljk3Mi0yMCwyMC0yMGgzMjhjMTEuMDI4LDAsMjAsOC45NzIsMjAsMjB2MzEyYzAsNi42MjcsNS4zNzMsMTIsMTIsMTJzMTItNS4zNzMsMTItMTJWOTBDNDY0LDY1LjczOCw0NDQuMjYyLDQ2LDQyMCw0NnoNCgkiLz4NCjxnPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiM1NTYwNkU7IiBkPSJNMjQ4LDI1OGMwLDQuNDE4LDMuNTgyLDgsOCw4czgtMy41ODIsOC04VjcwaC0xNlYyNTh6Ii8+DQoJPHBhdGggc3R5bGU9ImZpbGw6IzU1NjA2RTsiIGQ9Ik0zNzAuNjkyLDcwaC0xNy42NTNsODAuODU0LDE3My4zOTJjMS4xODMsMi41MzksMy41MjksNC4xNjIsNi4xMDcsNC41MzZ2LTI5LjI5NkwzNzAuNjkyLDcweiIvPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiM1NTYwNkU7IiBkPSJNNDQ0LjUyMywyNDcuMjYyYzQuMDA0LTEuODY3LDUuNzM3LTYuNjI3LDMuODY5LTEwLjYzMUw0NDAsMjE4LjYzMnYyOS4yOTYNCgkJYzAuMzc5LDAuMDU1LDAuNzYyLDAuMDg1LDEuMTQ3LDAuMDg1QzQ0Mi4yNzksMjQ4LjAxMyw0NDMuNDMsMjQ3Ljc3MSw0NDQuNTIzLDI0Ny4yNjJ6Ii8+DQo8L2c+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkY4Qzc4OyIgZD0iTTI1NiwyNThjLTI2LjQ2OCwwLTQ4LDIxLjUzMy00OCw0OHMyMS41MzIsNDgsNDgsNDhzNDgtMjEuNTMzLDQ4LTQ4UzI4Mi40NjgsMjU4LDI1NiwyNTh6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojREI2QjVFOyIgZD0iTTI3MiwzNDZjLTI2LjQ2OCwwLTQ4LTIxLjUzMy00OC00OGMwLTE1LjU2LDcuNDQ4LTI5LjQwOSwxOC45Ni0zOC4xODUNCglDMjIyLjgxMSwyNjUuNTEyLDIwOCwyODQuMDUzLDIwOCwzMDZjMCwyNi40NjcsMjEuNTMyLDQ4LDQ4LDQ4YzEwLjkwNywwLDIwLjk3MS0zLjY2MywyOS4wNC05LjgxNQ0KCUMyODAuODkxLDM0NS4zNTgsMjc2LjUyLDM0NiwyNzIsMzQ2eiIvPg0KPHBhdGggc3R5bGU9ImZpbGw6IzU1NjA2RTsiIGQ9Ik0xNDQsMjU4YzAsNC40MTgsMy41ODIsOCw4LDhzOC0zLjU4Miw4LThWNzBoLTE2VjI1OHoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNGRjhDNzg7IiBkPSJNMTUyLDI1OGMtMjYuNDY4LDAtNDgsMjEuNTMzLTQ4LDQ4czIxLjUzMiw0OCw0OCw0OHM0OC0yMS41MzMsNDgtNDhTMTc4LjQ2OCwyNTgsMTUyLDI1OHoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNEQjZCNUU7IiBkPSJNMTY4LDM0NmMtMjYuNDY4LDAtNDgtMjEuNTMzLTQ4LTQ4YzAtMTUuNTYsNy40NDgtMjkuNDA5LDE4Ljk2LTM4LjE4NQ0KCUMxMTguODExLDI2NS41MTIsMTA0LDI4NC4wNTMsMTA0LDMwNmMwLDI2LjQ2NywyMS41MzIsNDgsNDgsNDhjMTAuOTA3LDAsMjAuOTcxLTMuNjYzLDI5LjA0LTkuODE1DQoJQzE3Ni44OTEsMzQ1LjM1OCwxNzIuNTIsMzQ2LDE2OCwzNDZ6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojRkY4Qzc4OyIgZD0iTTUwNC45MzIsMjYzLjIyOWMtNS40MTktMTEuNjItMTUuMDM4LTIwLjQzNS0yNy4wODYtMjQuODJjLTEyLjA1LTQuMzg2LTI1LjA4NC0zLjgxNi0zNi43MDMsMS42MDMNCgljLTIzLjk4NywxMS4xODUtMzQuNDAyLDM5LjgtMjMuMjE3LDYzLjc4OGM4LjEzNiwxNy40NDYsMjUuNDg3LDI3LjcxMyw0My41NzYsMjcuNzEyYzYuNzgyLDAsMTMuNjcxLTEuNDQ0LDIwLjIxMi00LjQ5NQ0KCUM1MDUuNzAxLDMxNS44MzIsNTE2LjExNiwyODcuMjE2LDUwNC45MzIsMjYzLjIyOXoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiNEQjZCNUU7IiBkPSJNNDgwLjA3MSwzMjJjLTE4LjA4OSwwLjAwMS0zNS40NC0xMC4yNjYtNDMuNTc2LTI3LjcxMmMtOS40MS0yMC4xODEtMy41MjktNDMuNjM0LDEyLjg1Ny01Ny4yMzENCgljLTIuNzkxLDAuNzMyLTUuNTM5LDEuNzA5LTguMjA5LDIuOTU0Yy0yMy45ODcsMTEuMTg1LTM0LjQwMiwzOS44LTIzLjIxNyw2My43ODhjOC4xMzYsMTcuNDQ2LDI1LjQ4NywyNy43MTMsNDMuNTc2LDI3LjcxMg0KCWM2Ljc4MiwwLDEzLjY3MS0xLjQ0NCwyMC4yMTItNC40OTVjMy44MTQtMS43NzksNy4yODItNC4wMDEsMTAuMzc4LTYuNTczQzQ4OC4xMDksMzIxLjQ4Miw0ODQuMDcyLDMyMiw0ODAuMDcxLDMyMnoiLz4NCjxwYXRoIHN0eWxlPSJmaWxsOiMzQzlGRTg7IiBkPSJNNDcyLDM5NEg0MGMtMjIuMDU2LDAtNDAsMTcuOTQ0LTQwLDQwdjI0YzAsNC40MTgsMy41ODIsOCw4LDhoNDk2YzQuNDE4LDAsOC0zLjU4Miw4LTh2LTI0DQoJQzUxMiw0MTEuOTQ0LDQ5NC4wNTYsMzk0LDQ3MiwzOTR6Ii8+DQo8cGF0aCBzdHlsZT0iZmlsbDojNDI3RkM5OyIgZD0iTTAsNDQyLjMzM1Y0NThjMCw0LjQxOCwzLjU4Miw4LDgsOGg0OTZjNC40MTgsMCw4LTMuNTgyLDgtOHYtMTUuNjY3SDB6Ii8+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"step,step\"\nLABEL oc.cat=\"education\"\nLABEL oc.desktopfile=\"org.kde.step.desktop\"\nLABEL oc.launch=\"step.step\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"Step\"\nLABEL oc.displayname=\"Step\"\nLABEL oc.path=\"/usr/bin/step\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-step;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Step\"\nENV APPBIN \"/usr/bin/step\"\nENV APP \"/usr/bin/step\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/step/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/step/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/step/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/step/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends at-spi2-core gnome-terminal dbus-x11 stress && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"stress.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNDk2LjgiIGhlaWdodD0iNDk2LjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbD0iIzZlYzZmMCIgZD0ibTE1Miw0ODRjMCw2LjQgLTUuNiwxMiAtMTIsMTJsMCwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsLTQ3MmMwLC02LjQgNS42LC0xMiAxMiwtMTJsMCwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDQ3MnoiLz4KICA8cGF0aCBpZD0ic3ZnXzMiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0yMDgsNDg0YzAsNi40IC01LjYsMTIgLTEyLDEybDAsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLC00NzJjMCwtNi40IDUuNiwtMTIgMTIsLTEybDAsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCw0NzJ6Ii8+CiAgPHBhdGggaWQ9InN2Z181IiBmaWxsPSIjNmVjNmYwIiBkPSJtMzEyLDQ4NGMwLDYuNCAtNS42LDEyIC0xMiwxMmwwLDBjLTYuNCwwIC0xMiwtNS42IC0xMiwtMTJsMCwtNDcyYzAsLTYuNCA1LjYsLTEyIDEyLC0xMmwwLDBjNi40LDAgMTIsNS42IDEyLDEybDAsNDcyeiIvPgogIDxwYXRoIGlkPSJzdmdfNyIgZmlsbD0iIzZlYzZmMCIgZD0ibTM2OCw0ODRjMCw2LjQgLTUuNiwxMiAtMTIsMTJsMCwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsLTQ3MmMwLC02LjQgNS42LC0xMiAxMiwtMTJsMCwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDQ3MnoiLz4KICA8cGF0aCBpZD0ic3ZnXzkiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0yNjAsNDg0YzAsNi40IC01LjYsMTIgLTEyLDEybDAsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLC00NzJjMCwtNi40IDUuNiwtMTIgMTIsLTEybDAsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCw0NzJ6Ii8+CiAgPHBhdGggaWQ9InN2Z18xMSIgZmlsbD0iIzZlYzZmMCIgZD0ibTEyLjgsMTUyYy03LjIsMCAtMTIuOCwtNC44IC0xMi44LC0xMmwwLDBjMCwtNy4yIDUuNiwtMTIgMTIuOCwtMTJsNDcxLjIsMGM3LjIsMCAxMi44LDQuOCAxMi44LDEybDAsMGMwLDcuMiAtNS42LDEyIC0xMi44LDEybC00NzEuMiwweiIvPgogIDxwYXRoIGlkPSJzdmdfMTMiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im00OTYsMTk2YzAsNi40IC01LjYsMTIgLTEyLDEybC00NzIsMGMtNi40LDAgLTEyLC01LjYgLTEyLC0xMmwwLDBjMCwtNi40IDUuNiwtMTIgMTIsLTEybDQ3MiwwYzYuNCwwIDEyLDUuNiAxMiwxMmwwLDB6Ii8+CiAgPHBhdGggaWQ9InN2Z18xNSIgZmlsbD0iIzZlYzZmMCIgZD0ibTQ5NiwzMDBjMCw2LjQgLTUuNiwxMiAtMTIsMTJsLTQ3MiwwYy02LjQsMCAtMTIsLTUuNiAtMTIsLTEybDAsMGMwLC02LjQgNS42LC0xMiAxMiwtMTJsNDcyLDBjNi40LDAgMTIsNS42IDEyLDEybDAsMHoiLz4KICA8cGF0aCBpZD0ic3ZnXzE3IiBmaWxsPSIjNmVjNmYwIiBkPSJtNDk2LDI1MWMwLDYuNCAtNS42LDEyIC0xMiwxMmwtNDcyLDBjLTYuNCwwIC0xMiwtNS42IC0xMiwtMTJsMCwwYzAsLTYuNCA1LjYsLTEyIDEyLC0xMmw0NzIsMGM2LjQsMCAxMiw1LjYgMTIsMTJsMCwweiIvPgogIDxwYXRoIGlkPSJzdmdfMTkiIGZpbGw9IiM2ZWM2ZjAiIGQ9Im0xMi44LDM2OGMtNy4yLDAgLTEyLjgsLTQuOCAtMTIuOCwtMTJsMCwwYzAsLTcuMiA1LjYsLTEyIDEyLjgsLTEybDQ3MS4yLDBjNy4yLDAgMTIuOCw0LjggMTIuOCwxMmwwLDBjMCw3LjIgLTUuNiwxMiAtMTIuOCwxMmwtNDcxLjIsMHoiLz4KICA8cGF0aCBpZD0ic3ZnXzIxIiBmaWxsPSIjMzYzRjNFIiBkPSJtNDA4LDM4MS42YzAsMTQuNCAtMTIsMjYuNCAtMjYuNCwyNi40bC0yNTkuMiwwYy0xNC40LDAgLTI2LjQsLTEyIC0yNi40LC0yNi40bDAsLTI1OS4yYzAsLTE0LjQgMTIsLTI2LjQgMjYuNCwtMjYuNGwyNTkuMiwwYzE0LjQsMCAyNi40LDEyIDI2LjQsMjYuNGwwLDI1OS4yeiIvPgogIDxwYXRoIGlkPSJzdmdfMjIiIGQ9Im05NiwxMjIuNGMwLC0xNC40IDEyLC0yNi40IDI2LjQsLTI2LjRsMjU5LjIsMGMxNC40LDAgMjYuNCwxMiAyNi40LDI2LjRsMCwyNTkuMmMwLDE0LjQgLTEyLDI2LjQgLTI2LjQsMjYuNCIvPgogIDxwYXRoIGlkPSJzdmdfMjMiIGZpbGw9IiM0OTUxNTAiIGQ9Im0zNTIsMzM1LjJjMCw5LjYgLTcuMiwxNi44IC0xNi44LDE2LjhsLTE2Ni40LDBjLTkuNiwwIC0xNi44LC03LjIgLTE2LjgsLTE2LjhsMCwtMTY2LjRjMCwtOS42IDcuMiwtMTYuOCAxNi44LC0xNi44bDE2Ni40LDBjOS42LDAgMTYuOCw3LjIgMTYuOCwxNi44bDAsMTY2LjR6Ii8+CiAgPGcgaWQ9InN2Z18yOSIvPgogIDxnIGlkPSJzdmdfMzAiLz4KICA8ZyBpZD0ic3ZnXzMxIi8+CiAgPGcgaWQ9InN2Z18zMiIvPgogIDxnIGlkPSJzdmdfMzMiLz4KICA8ZyBpZD0ic3ZnXzM0Ii8+CiAgPGcgaWQ9InN2Z18zNSIvPgogIDxnIGlkPSJzdmdfMzYiLz4KICA8ZyBpZD0ic3ZnXzM3Ii8+CiAgPGcgaWQ9InN2Z18zOCIvPgogIDxnIGlkPSJzdmdfMzkiLz4KICA8ZyBpZD0ic3ZnXzQwIi8+CiAgPGcgaWQ9InN2Z180MSIvPgogIDxnIGlkPSJzdmdfNDIiLz4KICA8ZyBpZD0ic3ZnXzQzIi8+CiA8L2c+Cjwvc3ZnPg==\"\nLABEL oc.keyword=\"stress,stress,cpu,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"gnome-terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.stress\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=stress\"\nLABEL oc.name=\"stress\"\nLABEL oc.displayname=\"stress\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"stress\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=stress\"\nENV APP \"/usr/bin/gnome-terminal\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/stress/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/stress/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/stress/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/stress/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN curl -Ls https://download.sublimetext.com/sublimehq-pub.gpg | apt-key add -a\nRUN echo \"deb https://download.sublimetext.com/ apt/stable/\" | tee /etc/apt/sources.list.d/sublime-text.list\nRUN apt-get update && apt-get install --yes libgl1 && apt-get clean\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y sublime-text && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_sublime-text.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iU3VibGltZS1UZXh0IiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InN1YmxpbWUtaWNvbi1iIiB4MT0iMTkzLjU5IiB4Mj0iMjExLjQ5IiB5MT0iNDE0LjU2IiB5Mj0iMzI0Ljc1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuODcxNyAwIDAgMS4yNDc4IDE4Mi4wNSAxNTkuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNGRjk3MDAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjRjQ4RTAwIiBvZmZzZXQ9Ii41MyIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjQ0U2RTAwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjUyMC40NCIgeDI9IjUyMCIgeTE9IjM2LjgyMiIgeTI9Ijk4NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0ZDRkNGQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzIzMjMyIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjUyMCIgeDI9IjUyMCIgeTE9IjQiIHkyPSIxMDI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmOWY5ZjkiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDQxMzc3IiB5PSItLjAzMTg2IiB3aWR0aD0iMS4wODI4IiBoZWlnaHQ9IjEuMDYzNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNi43NzE0MDczIi8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IHgxPSI1MjAiIHgyPSI1MjAiIHkxPSI0IiB5Mj0iMTAyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2Q3ZDdkNyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTA0Njg4Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMDYzODA5IDAgMCAuMDYzODA5IC0uNjY5OTkgLS42Njk5OSkiIHN0cm9rZS13aWR0aD0iMTUuNjcyIj4KICA8Zz4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzAuMTYiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHJva2UtbWl0ZXJsaW1pdD0iMCIgc3Ryb2tlLXdpZHRoPSIwIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogICA8ZyBpZD0ic2hhZG93IiB0cmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIiBmaWxsPSJ1cmwoI2EpIiBzdHJva2Utd2lkdGg9IjE1LjY3MiI+PC9nPgogICA8Y2lyY2xlIGN4PSI1MTIiIGN5PSI1MTIiIHI9IjQ3MC4xNiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLW1pdGVybGltaXQ9IjAiIHN0cm9rZS13aWR0aD0iMCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjk5NjA5IDAgMCAuOTk2MDkgMTQuNDgzIDMuODgwNykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iMjQuMDQ1Ij4KICAgIDxwYXRoIGQ9Im03MDguMjggNTEyLjA4YzAtNS45ODE2LTQuNDE5Mi05LjQzMDgtOS44NDI0LTcuNzE3MWwtMzczLjA4IDExOC4zNGMtNS40MzQgMS43MjQ2LTkuODQyNCA3Ljk3OS05Ljg0MjQgMTMuOTV2MTIwLjk1YzAgNS45ODE2IDQuNDA4MyA5LjQ0MTcgOS44NDI0IDcuNzE3MWwzNzMuMDgtMTE4LjMzYzUuNDIzMS0xLjcyNDYgOS44NDI0LTcuOTc5IDkuODQyNC0xMy45NjF6Ii8+CiAgICA8cGF0aCBkPSJtMzE1LjUyIDUwOC45YzAgNS45ODEyIDQuNDA3NyAxMi4yMzUgOS44NDEgMTMuOTZsMzczLjA5IDExOC4zNWM1LjQzMzMgMS43MjQ1IDkuODQxLTEuNzM1NCA5Ljg0MS03LjcwNTd2LTEyMC45NmMwLTUuOTcwMy00LjQwNzctMTIuMjI0LTkuODQxLTEzLjk0OWwtMzczLjA5LTExOC4zNWMtNS40MzMzLTEuNzI0NS05Ljg0MSAxLjcyNDUtOS44NDEgNy43MDU3eiIvPgogICAgPHBhdGggZD0ibTcwOC4yOCAyNjMuODRjMC01Ljk4MTYtNC40MTkyLTkuNDQxNy05Ljg0MjQtNy43MTcxbC0zNzMuMDggMTE4LjMzYy01LjQzNCAxLjcyNDYtOS44NDI0IDcuOTc5MS05Ljg0MjQgMTMuOTYxdjEyMC45NWMwIDUuOTgxNiA0LjQwODMgOS40MzA4IDkuODQyNCA3LjcxNzFsMzczLjA4LTExOC4zNGM1LjQyMzEtMS43MjQ2IDkuODQyNC03Ljk3OSA5Ljg0MjQtMTMuOTV6Ii8+CiAgIDwvZz4KICA8L2c+CiAgPGcgc3Ryb2tlLXdpZHRoPSIyMy45NTEiPgogICA8cGF0aCBkPSJtNzIwIDUwNGMwLTUuOTU4Mi00LjQwMi05LjM5NC05LjgwMzktNy42ODY5bC0zNzEuNjMgMTE3Ljg4Yy01LjQxMjggMS43MTc5LTkuODAzOSA3Ljk0NzktOS44MDM5IDEzLjg5NXYxMjAuNDhjMCA1Ljk1ODIgNC4zOTExIDkuNDA0OCA5LjgwMzkgNy42ODdsMzcxLjYzLTExNy44N2M1LjQwMTktMS43MTc5IDkuODAzOS03Ljk0NzkgOS44MDM5LTEzLjkwNnoiIGZpbGw9InVybCgjc3VibGltZS1pY29uLWIpIi8+CiAgIDxwYXRoIGQ9Im0zMjguNzcgNTAwLjgzYzAgNS45NTc4IDQuMzkwNSAxMi4xODcgOS44MDI2IDEzLjkwNWwzNzEuNjMgMTE3Ljg4YzUuNDEyIDEuNzE3OCA5LjgwMjYtMS43Mjg2IDkuODAyNi03LjY3NTZ2LTEyMC40OGMwLTUuOTQ3LTQuMzkwNS0xMi4xNzctOS44MDI2LTEzLjg5NGwtMzcxLjYzLTExNy44OGMtNS40MTItMS43MTc4LTkuODAyNiAxLjcxNzgtOS44MDI2IDcuNjc1NnoiIGZpbGw9IiNmZjk4MDAiLz4KICAgPHBhdGggZD0ibTcyMCAyNTYuNzNjMC01Ljk1ODItNC40MDItOS40MDQ4LTkuODAzOS03LjY4N2wtMzcxLjYzIDExNy44N2MtNS40MTI4IDEuNzE3OS05LjgwMzkgNy45NDc5LTkuODAzOSAxMy45MDZ2MTIwLjQ4YzAgNS45NTgyIDQuMzkxMSA5LjM5NCA5LjgwMzkgNy42ODdsMzcxLjYzLTExNy44OGM1LjQwMTktMS43MTc5IDkuODAzOS03Ljk0NzkgOS44MDM5LTEzLjg5NXoiIGZpbGw9IiNmZjk4MDAiLz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"sublime-text,ide,code,sublime-text\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"sublime_text.desktop\"\nLABEL oc.launch=\"sublime_text.Sublime_text\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"sublime-Text\"\nLABEL oc.displayname=\"sublime-Text\"\nLABEL oc.path=\"/opt/sublime_text/sublime_text\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"sublime-Text\"\nENV APPBIN \"/opt/sublime_text/sublime_text\"\nENV APP \"/opt/sublime_text/sublime_text\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/sublime-text/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/sublime-text/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/sublime-text/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/sublime-text/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-sudoku\nLABEL oc.icon=\"org.gnome.Sudoku.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjMxLjIyMiIgeDI9IjMxLjYyOCIgeTE9IjYxLjE0NyIgeTI9IjIuODUzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlhOWE5YSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0ic2lsdmVyIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjMxLjY0MSIgeDI9IjMyLjE2OCIgeTE9IjYxLjMzOSIgeTI9IjMuODEyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2VmYjUyOCIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2U2OWM3NiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzMS43MjIiIHgyPSIzMi4yNzgiIHkxPSI2Mi44NzMiIHkyPSIuNzQzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2ZmZiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48ZmlsdGVyIGlkPSJhIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxNC4xNiIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImQiIHg9Ii0uMTUzIiB5PSItLjA5OCIgd2lkdGg9IjEuMzA2IiBoZWlnaHQ9IjEuMTk2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii4zNiIvPjwvZmlsdGVyPjwvZGVmcz48cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0NiAtLjU0NikiIGQ9Ik05MjkuODUgMjg5LjY1Yy0yLjM1LTQuMzUtNC45NS05LTcuNjUtMTMuNi0yMC4zLTM0LjUtNDUuOC02Ny4yLTc2LjM1LTk3Ljc1Qzc3My4yNSAxMDUuNyA2ODguNyA2MS42NSA1OTIuMiA0Ni4yNWMtMTYuMjUtMi42LTMyLjgtNC40LTUwLjA1LTUuMzUtOS43LS41NS0xOS44NS0uODUtMzAuMS0uODUtOS4zNSAwLTE4LjYuMjUtMjcuOS43NS0xMTguMzUgNi4xLTIyMC4zIDUxLjk1LTMwNS44NSAxMzcuNS0yMC41IDIwLjUtMzguNzUgNDEuOTUtNTQuNyA2NC40LTE1LjM1IDIxLjU1LTI4LjU1IDQ0LTM5LjYgNjcuMmwtLjAyNS0uMDI1UTQwLjA1IDQwMS44NzMgNDAuMDUgNTEyLjA1NWMwIDEzMC4zNSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjggNTYuNyA1Ni42NSAxMjAuNTUgOTUuOSAxOTEuMSAxMTcuNTUgMzYuNzUgMTEuMjUgNzQuOCAxNy44NSAxMTQuNzUgMTkuOTVoLjRjOC41LjQ1IDE2LjYuNyAyNC41LjdoM2MxMC4zIDAgMjAuNS0uMyAzMC4xLS44IDIuNS0uMTUgNC43NS0uMyA2Ljk1LS40NSAyMC4yLTEuNDUgMzkuOS00LjA1IDU4LjctNy43IDcuOTUtMS41NSAxNS44LTMuMyAyMy40LTUuMTUgODAuOC0yMC4zIDE1Mi4xNS02MS42IDIxNC42NS0xMjQuMSA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTguNDUtNDcuNjUgMjguNjUtOTguOCAzMC41NS0xNTMuNS4yLTYuMDUuMy0xMi4yNS4zLTE4LjV2LTNjLS4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTUuMDUtMTQuMjUtMTAuODUtMjguMjUtMTcuNDUtNDIuMTUtMS44NS0zLjgtMy43NS03LjY1LTUuNy0xMS41LTEuNDUtMi44NS0yLjk1LTUuNy00LjY1LTguOHoiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjYwIiByeD0iMzAiIHJ5PSIzMCIgZmlsbD0idXJsKCNiKSIvPjxyZWN0IHg9IjIxLjI4NiIgeT0iMjEuMjg2IiB3aWR0aD0iMjEuNDI5IiBoZWlnaHQ9IjIxLjQyOSIgcnk9IjAiIGZpbGw9InVybCgjYykiLz48ZyBmaWxsPSIjZmZmIj48cGF0aCBkPSJNMjYuNjE2IDIxLjI2NnEwIC44NjQtLjQ5MiAxLjM4LS40OC41MDQtMS4yODQuNjcydi4wNDhxMS4wMi4xMiAxLjUyNC42NDguNTE2LjUyOC41MTYgMS4zOCAwIC43NTYtLjM0OCAxLjMzMnQtMS4wOC45cS0uNzIuMzI0LTEuODYuMzI0LS42NzIgMC0xLjI0OC0uMTA4LS41NzYtLjA5Ni0xLjEwNC0uMzZ2LS45ODRxLjU0LjI3NiAxLjE2NC40MnQxLjIuMTQ0cTEuMTUyIDAgMS42NTYtLjQ0NC41MTYtLjQ1Ni41MTYtMS4yNDggMC0uODA0LS42MzYtMS4xNTItLjYyNC0uMzYtMS43NjQtLjM2aC0uODI4di0uOWguODRxMS4wNTYgMCAxLjU5Ni0uNDQ0LjU1Mi0uNDQ0LjU1Mi0xLjE3NiAwLS42MjQtLjQyLS45Ni0uNDItLjM0OC0xLjE0LS4zNDgtLjY5NiAwLTEuMTg4LjIwNHQtLjk3Mi41MTZsLS41MjgtLjcycS40NTYtLjM2IDEuMTI4LS42MjQuNjg0LS4yNjQgMS41NDgtLjI2NCAxLjM0NCAwIDEuOTkyLjYuNjYuNi42NiAxLjUyNHoiIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjUxOTggMCAwIDEuNDU5NyAtNC41NjUgLTIuMzcpIi8+PHBhdGggZD0iTTM1Ljg4NiAyOC42NzJxMCAxLjI2LS43NDggMi4wMTQtLjczLjczNi0xLjk1Mi45OHYuMDcxcTEuNTUuMTc1IDIuMzE3Ljk0Ni43ODQuNzcuNzg0IDIuMDE0IDAgMS4xMDQtLjUzIDEuOTQ1dC0xLjY0IDEuMzEzcS0xLjA5NS40NzMtMi44MjcuNDczLTEuMDIyIDAtMS44OTctLjE1Ny0uODc1LS4xNC0xLjY3OC0uNTI2VjM2LjMxcS44Mi40MDMgMS43Ny42MTN0MS44MjMuMjFxMS43NSAwIDIuNTE3LS42NDguNzg0LS42NjYuNzg0LTEuODIyIDAtMS4xNzMtLjk2Ny0xLjY4MS0uOTQ4LS41MjYtMi42OC0uNTI2aC0xLjI1OXYtMS4zMTRoMS4yNzdxMS42MDUgMCAyLjQyNS0uNjQ4Ljg0LS42NDguODQtMS43MTYgMC0uOTExLS42NC0xLjQwMi0uNjM3LS41MDgtMS43MzItLjUwOC0xLjA1NyAwLTEuODA1LjI5OHQtMS40NzcuNzUzbC0uODAzLTEuMDVxLjY5My0uNTI2IDEuNzE0LS45MTEgMS4wNC0uMzg2IDIuMzUzLS4zODYgMi4wNDMgMCAzLjAyOC44NzYgMS4wMDMuODc2IDEuMDAzIDIuMjI1eiIvPjwvZz48cGF0aCBkPSJNMjEuMjg2IDMuOTkyQTI5LjkxMyAyOS45MTMgMCAwIDAgMy45OTIgMjEuMjg2aDE3LjI5NHptMjEuNDI5IDB2MTcuMjk0aDE3LjI5NEEyOS45MTMgMjkuOTEzIDAgMCAwIDQyLjcxNSAzLjk5MnpNMy45OTMgNDIuNzE0YTI5LjkxMyAyOS45MTMgMCAwIDAgMTcuMjk0IDE3LjI5NFY0Mi43MTR6bTM4LjcyMiAwdjE3LjI5NGEyOS45MTMgMjkuOTEzIDAgMCAwIDE3LjI5NC0xNy4yOTR6IiBmaWxsPSJ1cmwoI2UpIi8+PC9zdmc+\"\nLABEL oc.keyword=\"sudoku,sudoku\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Sudoku.desktop\"\nLABEL oc.launch=\"org.gnome.Sudoku.org.gnome.Sudoku\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"sudoku\"\nLABEL oc.displayname=\"sudoku\"\nLABEL oc.path=\"/usr/bin/gnome-sudoku\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"sudoku\"\nENV APPBIN \"/usr/bin/gnome-sudoku\"\nENV APP \"/usr/bin/gnome-sudoku\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/sudoku/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/sudoku/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/sudoku/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/sudoku/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpinei.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update supertux mesa-gl mesa-egl mesa-dri-gallium\nLABEL oc.icon=\"circle_supertux.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iTXBsYXllciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjE2Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iLTIwLjU0MiIgeDI9Ii0yMy4wODUiIHkxPSI0MC44NTYiIHkyPSI0My4yOTciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTM2IDAgMCAxLjkxMzYgMTMwLjY3IDEyLjYwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2E5YTlhOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNhOWE5YTkiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSItNTkuNjEyIiB4Mj0iLTQzLjc5MiIgeTE9IjUxLjE4NiIgeTI9IjUxLjE4NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjkxMzYgMCAwIDEuOTEzNiAxMzAuNjcgMTIuNjA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZDcwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM5OTgxMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMjI4LjgxIiB4Mj0iMjI4LjgxIiB5MT0iNjExLjE4IiB5Mj0iNjE0LjQxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDMyNCAwIDAgMi4wMzI0IC0zODMuNzMgLTEyMTUuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9Ii00Ni4xMzUiIHgyPSItNDMuMjM0IiB5MT0iMjMuMTkiIHkyPSIyMi42NDUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS45MTM2IDAgMCAxLjkxMzYgMTMwLjY3IDEyLjYwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIzMjMyMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMzIzMjMiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImkiIHgxPSItMjMuNDY1IiB4Mj0iLTEyLjA3IiB5MT0iNDQuNTc4IiB5Mj0iNDQuNTc4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuOTEzNiAwIDAgMS45MTM2IDEzMC42NyAxMi42MDcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSItMjcuNjY1IiB4Mj0iLTI2LjE4NiIgeTE9IjI2LjY3IiB5Mj0iMzYuNjM2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuOTEzNiAwIDAgMS45MTM2IDEzMC41OSAxMy4zMjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZGZkZmQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYTZhNmE2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjMyIiB4Mj0iMzIiIHkxPSIyIiB5Mj0iNjIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZkZmRmZCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkY2RjZGMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjIiIHkyPSI2MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguODMzMzMgMCAwIC44MzMzMyA1LjMzMzMgNS4zMzMyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYmJkZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzQ3YTZmZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjA3MDE2NCIgeT0iLS4wNTI0MDgiIHdpZHRoPSIxLjE0MDMiIGhlaWdodD0iMS4xMDQ4IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjY5MzA1MSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA2MzU1OSAwIDAgLjA2MzU1OSAtLjU0NTU1IC0uNTQ1NTUpIiBkPSJtOTI5Ljg1IDI4OS42NWMtMi4zNS00LjM1LTQuOTUtOS03LjY1LTEzLjYtMjAuMy0zNC41LTQ1LjgtNjcuMi03Ni4zNS05Ny43NS03Mi42LTcyLjYtMTU3LjE1LTExNi42NS0yNTMuNjUtMTMyLjA1LTE2LjI1LTIuNi0zMi44LTQuNC01MC4wNS01LjM1LTkuNy0wLjU1LTE5Ljg1LTAuODUtMzAuMS0wLjg1LTkuMzUgMC0xOC42IDAuMjUtMjcuOSAwLjc1LTExOC4zNSA2LjEtMjIwLjMgNTEuOTUtMzA1Ljg1IDEzNy41LTIwLjUgMjAuNS0zOC43NSA0MS45NS01NC43IDY0LjQtMTUuMzUgMjEuNTUtMjguNTUgNDQtMzkuNiA2Ny4ybC0wLjAyNS0wLjAyNXEtNDMuOTI1IDkxLjk5OC00My45MjUgMjAyLjE4YzAgMTMwLjM1IDQ2LjEgMjQxLjY1IDEzOC4yNSAzMzMuOCA1Ni43IDU2LjY1IDEyMC41NSA5NS45IDE5MS4xIDExNy41NSAzNi43NSAxMS4yNSA3NC44IDE3Ljg1IDExNC43NSAxOS45NWgwLjRjOC41IDAuNDUgMTYuNiAwLjcgMjQuNSAwLjdoM2MxMC4zIDAgMjAuNS0wLjMgMzAuMS0wLjggMi41LTAuMTUgNC43NS0wLjMgNi45NS0wLjQ1IDIwLjItMS40NSAzOS45LTQuMDUgNTguNy03LjcgNy45NS0xLjU1IDE1LjgtMy4zIDIzLjQtNS4xNSA4MC44LTIwLjMgMTUyLjE1LTYxLjYgMjE0LjY1LTEyNC4xIDQ4LjYtNDguNiA4NC40LTEwMi41IDEwNy4zNS0xNjEuOCAxOC40NS00Ny42NSAyOC42NS05OC44IDMwLjU1LTE1My41IDAuMi02LjA1IDAuMy0xMi4yNSAwLjMtMTguNXYtM2MtMC4yLTQwLjY1LTQuOTUtNzkuNS0xNC4zLTExNy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTEtMy40LTItNi44NS0zLjE1LTEwLjUtMS42LTUuMTUtMy40LTEwLjUtNS4zLTE1Ljg1LTUuMDUtMTQuMjUtMTAuODUtMjguMjUtMTcuNDUtNDIuMTUtMS44NS0zLjgtMy43NS03LjY1LTUuNy0xMS41LTEuNDUtMi44NS0yLjk1LTUuNy00LjY1LTguOHoiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY4MyIvPgogPHBhdGggZD0ibTU4LjU1NSAxNy44NjRjLTAuMTQ5MzYtMC4yNzY0OC0wLjMxNDYyLTAuNTcyMDMtMC40ODYyMy0wLjg2NDQxLTEuMjkwMy0yLjE5MjgtMi45MTEtNC4yNzEyLTQuODUyNy02LjIxMjktNC42MTQ0LTQuNjE0NC05Ljk4ODMtNy40MTQyLTE2LjEyMi04LjM5My0xLjAzMjgtMC4xNjUyNS0yLjA4NDctMC4yNzk2Ni0zLjE4MTEtMC4zNDAwNC0wLjYxNjUyLTAuMDM0OTU4LTEuMjYxNy0wLjA1NDAyNS0xLjkxMzEtMC4wNTQwMjUtMC41OTQyOCAwLTEuMTgyMiAwLjAxNTg5LTEuNzczMyAwLjA0NzY2OS03LjUyMjIgMC4zODc3MS0xNC4wMDIgMy4zMDE5LTE5LjQ0IDguNzM5NC0xLjMwMyAxLjMwMy0yLjQ2MjkgMi42NjYzLTMuNDc2NyA0LjA5MzItMC45NzU2MyAxLjM2OTctMS44MTQ2IDIuNzk2Ni0yLjUxNjkgNC4yNzEybC0wLjAwMTU5LTAuMDAxNnEtMi43OTE4IDUuODQ3My0yLjc5MTggMTIuODVjMCA4LjI4NDkgMi45MzAxIDE1LjM1OSA4Ljc4NzEgMjEuMjE2IDMuNjAzOCAzLjYwMDYgNy42NjIxIDYuMDk1MyAxMi4xNDYgNy40NzE0IDIuMzM1OCAwLjcxNTA0IDQuNzU0MiAxLjEzNDUgNy4yOTM0IDEuMjY4aDAuMDI1NDJjMC41NDAyNSAwLjAyODYgMS4wNTUxIDAuMDQ0NDkgMS41NTcyIDAuMDQ0NDloMC4xOTA2OGMwLjY1NDY2IDAgMS4zMDMtMC4wMTkwNyAxLjkxMzEtMC4wNTA4NSAwLjE1ODktMC4wMDk1IDAuMzAxOTEtMC4wMTkwNyAwLjQ0MTc0LTAuMDI4NiAxLjI4MzktMC4wOTIxNiAyLjUzNi0wLjI1NzQyIDMuNzMwOS0wLjQ4OTQxIDAuNTA1My0wLjA5ODUyIDEuMDA0Mi0wLjIwOTc1IDEuNDg3My0wLjMyNzMzIDUuMTM1Ni0xLjI5MDMgOS42NzA1LTMuOTE1MiAxMy42NDMtNy44ODc3IDMuMDg5LTMuMDg5IDUuMzY0NC02LjUxNDggNi44MjMxLTEwLjI4NCAxLjE3MjctMy4wMjg2IDEuODIxLTYuMjc5NyAxLjk0MTctOS43NTYzIDAuMDEyNzEtMC4zODQ1MyAwLjAxOTA3LTAuNzc4NiAwLjAxOTA3LTEuMTc1OHYtMC4xOTA2OGMtMC4wMTI3MS0yLjU4MzctMC4zMTQ2Mi01LjA1My0wLjkwODktNy40MzY0LTAuMDY5OTEtMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDMtMC4yMzE5OS0wLjg2NDQxLTAuMDYzNTYtMC4yMTYxLTAuMTI3MTItMC40MzUzOC0wLjIwMDIxLTAuNjY3MzctMC4xMDE3LTAuMzI3MzMtMC4yMTYxLTAuNjY3MzctMC4zMzY4Ni0xLjAwNzQtMC4zMjA5Ny0wLjkwNTcyLTAuNjg5NjItMS43OTU1LTEuMTA5MS0yLjY3OS0wLjExNzU4LTAuMjQxNTItMC4yMzgzNS0wLjQ4NjIzLTAuMzYyMjktMC43MzA5My0wLjA5MjE2LTAuMTgxMTQtMC4xODc1LTAuMzYyMjktMC4yOTU1NS0wLjU1OTMyeiIgZmlsbD0idXJsKCNjKSIgc3Ryb2tlLXdpZHRoPSIuOTk2OCIvPgogPHBhdGggZD0ibTU0LjEyOSAyMC4yMmMtMC4xMjQ0Ny0wLjIzMDQtMC4yNjIxOC0wLjQ3NjctMC40MDUxOS0wLjcyMDM0LTEuMDc1Mi0xLjgyNzMtMi40MjU4LTMuNTU5My00LjA0NC01LjE3NzQtMy44NDUzLTMuODQ1My04LjMyMzYtNi4xNzg1LTEzLjQzNS02Ljk5NDItMC44NjA3LTAuMTM3NzEtMS43MzczLTAuMjMzMDUtMi42NTEtMC4yODMzNy0wLjUxMzc3LTAuMDI5MTMxLTEuMDUxNC0wLjA0NTAyMS0xLjU5NDMtMC4wNDUwMjEtMC40OTUyMyAwLTAuOTg1MTcgMC4wMTMyNDEtMS40Nzc4IDAuMDM5NzI0LTYuMjY4NSAwLjMyMzA5LTExLjY2OCAyLjc1MTYtMTYuMiA3LjI4MjgtMS4wODU4IDEuMDg1OC0yLjA1MjQgMi4yMjE5LTIuODk3MiAzLjQxMS0wLjgxMzAzIDEuMTQxNC0xLjUxMjIgMi4zMzA1LTIuMDk3NSAzLjU1OTNsLTAuMDAxMzMtMC4wMDEzcS0yLjMyNjUgNC44NzI4LTIuMzI2NSAxMC43MDljMCA2LjkwNDEgMi40NDE3IDEyLjc5OSA3LjMyMjYgMTcuNjggMy4wMDMyIDMuMDAwNSA2LjM4NTEgNS4wNzk0IDEwLjEyMiA2LjIyNjIgMS45NDY1IDAuNTk1ODcgMy45NjE5IDAuOTQ1NDUgNi4wNzc5IDEuMDU2N2gwLjAyMTE4YzAuNDUwMjEgMC4wMjM4MyAwLjg3OTI0IDAuMDM3MDggMS4yOTc3IDAuMDM3MDhoMC4xNTg5YzAuNTQ1NTUgMCAxLjA4NTgtMC4wMTU4OSAxLjU5NDMtMC4wNDIzOCAwLjEzMjQyLTAuMDA3OSAwLjI1MTU5LTAuMDE1ODkgMC4zNjgxMS0wLjAyMzgzIDEuMDY5OS0wLjA3NjggMi4xMTMzLTAuMjE0NTEgMy4xMDkxLTAuNDA3ODQgMC40MjEwOC0wLjA4MjEgMC44MzY4Ni0wLjE3NDc5IDEuMjM5NC0wLjI3Mjc4IDQuMjc5Ny0xLjA3NTIgOC4wNTg4LTMuMjYyNyAxMS4zNjktNi41NzMxIDIuNTc0Mi0yLjU3NDIgNC40NzAzLTUuNDI5IDUuNjg1OS04LjU2OTkgMC45NzcyMi0yLjUyMzggMS41MTc1LTUuMjMzMSAxLjYxODEtOC4xMzAzIDAuMDEwNTktMC4zMjA0NCAwLjAxNTg5LTAuNjQ4ODMgMC4wMTU4OS0wLjk3OTg3di0wLjE1ODljLTAuMDEwNTktMi4xNTMxLTAuMjYyMTgtNC4yMTA4LTAuNzU3NDItNi4xOTctMC4wNTgyNi0wLjIzMDQtMC4xMjQ0Ny0wLjQ3NjctMC4xOTMzMy0wLjcyMDM0LTAuMDUyOTctMC4xODAwOC0wLjEwNTkzLTAuMzYyODItMC4xNjY4NC0wLjU1NjE0LTAuMDg0NzUtMC4yNzI3OC0wLjE4MDA4LTAuNTU2MTQtMC4yODA3Mi0wLjgzOTUxLTAuMjY3NDgtMC43NTQ3Ny0wLjU3NDY4LTEuNDk2My0wLjkyNDI2LTIuMjMyNS0wLjA5Nzk5LTAuMjAxMjctMC4xOTg2Mi0wLjQwNTE5LTAuMzAxOTEtMC42MDkxMS0wLjA3NjgtMC4xNTA5NS0wLjE1NjI1LTAuMzAxOTEtMC4yNDYyOS0wLjQ2NjF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTY4Ii8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMzE4OTEgMCAwIC4zMTg5MSAxMS4zNjEgMTEuODMpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjMuMTM1NiI+CiAgPHBhdGggZD0ibTY3LjcxMSA3NS41NjIgMjcuMTA1IDE3Ljg4OS0zLjk0NzIgOS40NTI2cy0yMi40NTctMTguMDEtMjMuMTU4LTI3LjM0MnoiLz4KICA8cGF0aCBkPSJtNzAuOTIyIDQ0LjUyMmMxMC4xMTktNi45MDg1IDI1LjAzOC0xOC43NTYgMjYuNjYxLTI0LjEzMSAxLjU1NjgtNS4xNTcgNy45Nzg4LTQuMTg0IDYuNTE5MiAxLjY1NDEtMS40NTk1IDUuODM4MS05LjQzODMgMjguODk5LTIxLjk5IDQ0LjI3MiIvPgogIDxwYXRoIGQ9Im0xOS43NDEgOTYuNzc0YzUuNzI3Ni0xLjY4MjcgOC45MzEyLTguMjg3IDEzLjEyMy0xMi40MjIgNy41OTcyIDYuOTczOSA0Ny4xNTIgMjAuMzgyIDI2LjU5MiAyMC43MjQtMTAuNTY1LTAuNjA4MzctMTYuNzEyIDUuMTI4OS0yMi40NjggOS44MDg5eiIvPgogIDxwYXRoIGQ9Im02My45MjYgMS4zOTM2Yy0xNC45OTkgMC4yNzUyMS0xOS45NTMgMTEuNjk3LTE5Ljk1MyAxNy4zMzggMCA1LjY0MTggMS44NTI4IDE3LjM2OS0yLjY4ODIgMjUuMDc1LTMgNS4wOTA5LTEyLjUwNiAxNy4xNTYtMTUuMjAxIDI4LjQ1NC0yLjY5MTggMTEuMjg0LTAuNTg5OCAzNS4wOSAzMC42ODYgMzUuNjQgMzIuMiAwLjU2NjcgMjkuOTg3IDcuNDQ2MiAyOS45ODcgNy40NDYybDExLjQyNi0yMS44MjdjLTIuOTg3NC0xLjQyNzYtNy41NTktMy41OTI4LTcuMzY5My0zLjk5NDkgNS43NDIzLTEyLjE3My05LjYzMDUtMzQuODA0LTEyLjUyLTQzLjYxMS0yLjg4OTctOC44MDY4IDAuNTA3MjYtMTAuOTg1IDIuODQ2Ni0xNi4zNTIgMi4zMzkzLTUuMzY2NiAzLjI4ODctMjguMTY5LTE3LjIxNS0yOC4xNjl6Ii8+CiAgPHBhdGggZD0ibTIxLjY4MSA5Ny4xNjdjLTIuODMzOC0yLjI2NjMtNS4yNjY4IDAuODcyMTItMy41NzA4IDMuODkwNCAxLjY5NTkgMy4wMTgzIDE2LjE2MyAxNy41NCAyMC4zMTggMjIuMTE3IDQuMTU1NCA0LjU3NyAxMS4zODktMi4xMDU2IDQuODU5NC01Ljg3MjctNi41My0zLjc2NzItMTguNzczLTE3Ljg2OS0yMS42MDctMjAuMTM1eiIvPgogIDxwYXRoIGQ9Im0yNS41NTkgODQuNDg2YzEuMTc3OCA0LjUxNDctNC4zNjI0IDkuOTI3NS03LjMyMDggMTIuNzEzLTMuODQ4IDMuNjIzIDAuMDk4MTQgNS41OTQzIDEuMzc0IDUuNDk2MiAxLjI3NTktMC4wOTggMTAuNzYyLTMuNTI4MyAxOC4xMjMgMC41OTM4MiIvPgogIDxwYXRoIGQ9Im03My4xMzEgMTEuMzM5Yy00LjMwNDctMC4wNDkwOC03LjMwNzQgNC44NDI5LTUuMDU4MyAxMC42IDEuMjg5MSAzLjI5OTkgOS43NjU4IDMuMTE4NyAxMC4zMDQtMC4zMTk4NSAwLjkxNzgyLTUuODY0My0wLjk4NzM3LTEwLjIzMi01LjI0NTYtMTAuMjh6Ii8+CiAgPHBhdGggZD0ibTcyLjc2MSAxNy4yOTFhMy4wMzgzIDMuNjg1OCAwIDAgMSA0LjI5MTEtMC4wMDc5IDMuMDM4MyAzLjY4NTggMCAwIDEgMC4wMTcyIDUuMjA1NSAzLjAzODMgMy42ODU4IDAgMCAxLTQuMjkxIDAuMDM0NjEgMy4wMzgzIDMuNjg1OCAwIDAgMS0wLjAzOTk2LTUuMjA1MyIvPgogIDxwYXRoIGQ9Im04MS40NjMgMzMuMDM2YzIuNzIyIDAuMDkwNjYgMTguODczLTMuMDg0OSAxOS4wNTQtNS4zNTMzIDAuMTgxNS0yLjI2ODMtMTEuMzQyLTMuMzU3MS0xMy42MS00LjM1NTItMi4yNjgzLTAuOTk4MDgtMTMuMjkzLTMuOTQxOS0xMy4xNTYgMy40NDc5IDAuMTM2NzkgNy4zODk3IDQuOTkwMyA2LjE2OTkgNy43MTIzIDYuMjYwNnoiLz4KICA8cGF0aCBkPSJtNzcuMzI0IDI4LjgwMmM1Ljc0MTMgMS4yNDY4IDEyLjcwMyAxLjY2ODQgMTYuNTUzIDEuMDI2NSIgc3Ryb2tlPSIjYWU5MzAwIiBzdHJva2Utd2lkdGg9IjMuMTg2NSIvPgogIDxwYXRoIGQ9Im04MS40NjMgMzMuMDM2YzIuNzIyIDAuMDkwNjYgMTguODczLTMuMDg0OSAxOS4wNTQtNS4zNTMzIDAuMTgxNS0yLjI2ODMtMTEuMzQyLTMuMzU3MS0xMy42MS00LjM1NTItMi4yNjgzLTAuOTk4MDgtMTMuMjkzLTMuOTQxOS0xMy4xNTYgMy40NDc5IDAuMTM2NzkgNy4zODk3IDQuOTkwMyA2LjE2OTkgNy43MTIzIDYuMjYwNnoiLz4KICA8cGF0aCBkPSJtNDUuODM2IDQwLjE2OGMtMTMuNTEyIDExLjQ0Mi0zNC43MjkgMzguNzktMzAuNDg1IDQxLjQ1IDMuNjYwMyAyLjI5MzQgMjUuNDc1LTE2LjYyMSAzNC43LTE4LjU1Ii8+CiAgPHBhdGggZD0ibTQwLjU1MyA0NS4xNjJjLTguNTU2NyA5LjA2NjctMjAuNzczIDIzLjQ2MS0yNC42MjUgMzEuMjY0LTMuODAyNCA2LjAxNzkgMC41OTYzMiA4LjI2MzQgNS43NTI1IDMuMzI2MiA3LjAwMzEtMy44NjY5IDE3LjUtMTMuMDQ0IDI0LjM4MS0xNC40ODMiLz4KICA8cGF0aCBkPSJtOTguNjQgODMuNjYxYzAuMzgxOTctNS40NTI2IDguMDE4Ni02LjM1ODYgNy45NzAyIDAuMzEyNjYtMC4wNTUxIDcuNTg3OS0xMC4zMzEgMjUuOTQ3LTE0LjIgMzAuNTMyLTMuNzI4NCA0LjQxODEtNy40MzE1IDAuOTYyNzQtNC44MTYyLTMuMzAyNiAyLjYxNDEtNC4yNjM0IDEwLjUzMS0yMC4xOSAxMS4wNDYtMjcuNTQyeiIvPgogIDxwYXRoIGQ9Im03OS42MDMgNTMuMTE3Yy0yLjU5MjctMS4xNDk4LTMuNTA4IDUuNTYzOS01LjY2MzQgOC43MDA2LTIuNTk2NyAzLjc3ODktNS4wOTg1IDcuNDE2NS0zLjE4NyAxMy4zOTJsMTkuNzU1IDEzLjcxMmMyLjU0NzYtMTAuMDI3LTQuMjgzOC0yNC42MjctMTAuOTA1LTM1LjgwNXoiLz4KICA8cGF0aCBkPSJtNzQuMTMzIDE2Ljk3YTEuMDM1NSAwLjY1OTExIDAgMCAxIDEuNDYyNC0wLjAwMTIgMS4wMzU1IDAuNjU5MTEgMCAwIDEgMC4wMDU4IDAuOTMwODggMS4wMzU1IDAuNjU5MTEgMCAwIDEtMS40NjI0IDAuMDA2MiAxLjAzNTUgMC42NTkxMSAwIDAgMS0wLjAxMzYtMC45MzA4NSIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjMxODkxIDAgMCAuMzE4OTEgMTEuMzYxIDExLjgzKSIgc3Ryb2tlLXdpZHRoPSIzLjEzNTYiPgogIDxwYXRoIGQ9Im02Ny43MTEgNzUuNTYyIDI3LjEwNSAxNy44ODktMy45NDcyIDkuNDUyNnMtMjIuNDU3LTE4LjAxLTIzLjE1OC0yNy4zNDJ6IiBmaWxsPSJ1cmwoI2YpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNzAuOTIyIDQ0LjUyMmMxMC4xMTktNi45MDg1IDI1LjAzOC0xOC43NTYgMjYuNjYxLTI0LjEzMSAxLjU1NjgtNS4xNTcgNy45Nzg4LTQuMTg0IDYuNTE5MiAxLjY1NDEtMS40NTk1IDUuODM4MS05LjQzODMgMjguODk5LTIxLjk5IDQ0LjI3MiIgZmlsbD0iIzE4MTgxOCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTE5Ljc0MSA5Ni43NzRjNS43Mjc2LTEuNjgyNyA4LjkzMTItOC4yODcgMTMuMTIzLTEyLjQyMiA3LjU5NzIgNi45NzM5IDQ3LjE1MiAyMC4zODIgMjYuNTkyIDIwLjcyNC0xMC41NjUtMC42MDgzNy0xNi43MTIgNS4xMjg5LTIyLjQ2OCA5LjgwODl6IiBmaWxsPSIjMTgxODE4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNjMuOTI2IDEuMzkzNmMtMTQuOTk5IDAuMjc1MjEtMTkuOTUzIDExLjY5Ny0xOS45NTMgMTcuMzM4IDAgNS42NDE4IDEuODUyOCAxNy4zNjktMi42ODgyIDI1LjA3NS0zIDUuMDkwOS0xMi41MDYgMTcuMTU2LTE1LjIwMSAyOC40NTQtMi42OTE4IDExLjI4NC0wLjU4OTggMzUuMDkgMzAuNjg2IDM1LjY0IDMyLjIgMC41NjY3IDI5Ljk4NyA3LjQ0NjIgMjkuOTg3IDcuNDQ2MmwxMS40MjYtMjEuODI3Yy0yLjk4NzQtMS40Mjc2LTcuNTU5LTMuNTkyOC03LjM2OTMtMy45OTQ5IDUuNzQyMy0xMi4xNzMtOS42MzA1LTM0LjgwNC0xMi41Mi00My42MTEtMi44ODk3LTguODA2OCAwLjUwNzI2LTEwLjk4NSAyLjg0NjYtMTYuMzUyIDIuMzM5My01LjM2NjYgMy4yODg3LTI4LjE2OS0xNy4yMTUtMjguMTY5eiIgZmlsbD0iIzIzMjMyMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTIxLjY4MSA5Ny4xNjdjLTIuODMzOC0yLjI2NjMtNS4yNjY4IDAuODcyMTItMy41NzA4IDMuODkwNCAxLjY5NTkgMy4wMTgzIDE2LjE2MyAxNy41NCAyMC4zMTggMjIuMTE3IDQuMTU1NCA0LjU3NyAxMS4zODktMi4xMDU2IDQuODU5NC01Ljg3MjctNi41My0zLjc2NzItMTguNzczLTE3Ljg2OS0yMS42MDctMjAuMTM1eiIgZmlsbD0idXJsKCNoKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTI1LjU1OSA4NC40ODZjMS4xNzc4IDQuNTE0Ny00LjM2MjQgOS45Mjc1LTcuMzIwOCAxMi43MTMtMy44NDggMy42MjMgMC4wOTgxNCA1LjU5NDMgMS4zNzQgNS40OTYyIDEuMjc1OS0wLjA5OCAxMC43NjItMy41MjgzIDE4LjEyMyAwLjU5MzgyIiBmaWxsPSIjMjMyMzIzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KICA8cGF0aCBkPSJtNzMuMTMxIDExLjMzOWMtNC4zMDQ3LTAuMDQ5MDgtNy4zMDc0IDQuODQyOS01LjA1ODMgMTAuNiAxLjI4OTEgMy4yOTk5IDkuNzY1OCAzLjExODcgMTAuMzA0LTAuMzE5ODUgMC45MTc4Mi01Ljg2NDMtMC45ODczNy0xMC4yMzItNS4yNDU2LTEwLjI4eiIgZmlsbD0iI2ZkZmRmZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTcyLjc2MSAxNy4yOTFhMy4wMzgzIDMuNjg1OCAwIDAgMSA0LjI5MTEtMC4wMDc5IDMuMDM4MyAzLjY4NTggMCAwIDEgMC4wMTcyIDUuMjA1NSAzLjAzODMgMy42ODU4IDAgMCAxLTQuMjkxIDAuMDM0NjEgMy4wMzgzIDMuNjg1OCAwIDAgMS0wLjAzOTk2LTUuMjA1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTgxLjQ2MyAzMy4wMzZjMi43MjIgMC4wOTA2NiAxOC44NzMtMy4wODQ5IDE5LjA1NC01LjM1MzMgMC4xODE1LTIuMjY4My0xMS4zNDItMy4zNTcxLTEzLjYxLTQuMzU1Mi0yLjI2ODMtMC45OTgwOC0xMy4yOTMtMy45NDE5LTEzLjE1NiAzLjQ0NzkgMC4xMzY3OSA3LjM4OTcgNC45OTAzIDYuMTY5OSA3LjcxMjMgNi4yNjA2eiIgZmlsbD0idXJsKCNlKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc3LjMyNCAyOC44MDJjNS43NDEzIDEuMjQ2OCAxMi43MDMgMS42Njg0IDE2LjU1MyAxLjAyNjUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2FlOTMwMCIgc3Ryb2tlLXdpZHRoPSIuNjI3MTMiLz4KICA8cGF0aCBkPSJtODEuNDYzIDMzLjAzNmMyLjcyMiAwLjA5MDY2IDE4Ljg3My0zLjA4NDkgMTkuMDU0LTUuMzUzMyAwLjE4MTUtMi4yNjgzLTExLjM0Mi0zLjM1NzEtMTMuNjEtNC4zNTUyLTIuMjY4My0wLjk5ODA4LTEzLjI5My0zLjk0MTktMTMuMTU2IDMuNDQ3OSAwLjEzNjc5IDcuMzg5NyA0Ljk5MDMgNi4xNjk5IDcuNzEyMyA2LjI2MDZ6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0ibTQ1LjgzNiA0MC4xNjhjLTEzLjUxMiAxMS40NDItMzQuNzI5IDM4Ljc5LTMwLjQ4NSA0MS40NSAzLjY2MDMgMi4yOTM0IDI1LjQ3NS0xNi42MjEgMzQuNy0xOC41NSIgZmlsbD0idXJsKCNqKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTQwLjU1MyA0NS4xNjJjLTguNTU2NyA5LjA2NjctMjAuNzczIDIzLjQ2MS0yNC42MjUgMzEuMjY0LTMuODAyNCA2LjAxNzkgMC41OTYzMiA4LjI2MzQgNS43NTI1IDMuMzI2MiA3LjAwMzEtMy44NjY5IDE3LjUtMTMuMDQ0IDI0LjM4MS0xNC40ODMiIGZpbGw9Im5vbmUiLz4KICA8cGF0aCBkPSJtOTguNjQgODMuNjYxYzAuMzgxOTctNS40NTI2IDguMDE4Ni02LjM1ODYgNy45NzAyIDAuMzEyNjYtMC4wNTUxIDcuNTg3OS0xMC4zMzEgMjUuOTQ3LTE0LjIgMzAuNTMyLTMuNzI4NCA0LjQxODEtNy40MzE1IDAuOTYyNzQtNC44MTYyLTMuMzAyNiAyLjYxNDEtNC4yNjM0IDEwLjUzMS0yMC4xOSAxMS4wNDYtMjcuNTQyeiIgZmlsbD0idXJsKCNpKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc5LjYwMyA1My4xMTdjLTIuNTkyNy0xLjE0OTgtMy41MDggNS41NjM5LTUuNjYzNCA4LjcwMDYtMi41OTY3IDMuNzc4OS01LjA5ODUgNy40MTY1LTMuMTg3IDEzLjM5MmwxOS43NTUgMTMuNzEyYzIuNTQ3Ni0xMC4wMjctNC4yODM4LTI0LjYyNy0xMC45MDUtMzUuODA1eiIgZmlsbD0idXJsKCNnKSIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZD0ibTc0LjEzMyAxNi45N2ExLjAzNTUgMC42NTkxMSAwIDAgMSAxLjQ2MjQtMC4wMDEyIDEuMDM1NSAwLjY1OTExIDAgMCAxIDAuMDA1OCAwLjkzMDg4IDEuMDM1NSAwLjY1OTExIDAgMCAxLTEuNDYyNCAwLjAwNjIgMS4wMzU1IDAuNjU5MTEgMCAwIDEtMC4wMTM2LTAuOTMwODUiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"supertux2,supertux\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"supertux2.desktop\"\nLABEL oc.launch=\"supertux2.supertux2\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpinei.minimal\"\nLABEL oc.name=\"supertux2\"\nLABEL oc.displayname=\"supertux2\"\nLABEL oc.path=\"/usr/games/supertux2\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"supertux2\"\nENV APPBIN \"/usr/games/supertux2\"\nENV APP \"/usr/games/supertux2\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/supertux2/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/supertux2/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/supertux2/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/supertux2/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends swell-foop && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_swell-foop.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNjhiMGUzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY4ODRlMyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMzQzNzQ5Ii8+CiAgPC9maWx0ZXI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjIiIHkyPSI2MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMWQyMTIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMzkzZSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIxOC4wMDIiIHgyPSIxOC4wMDIiIHkxPSIxMiIgeTI9IjI0LjAwMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzAuMDA0IiB4Mj0iMzAuMDA0IiB5MT0iMTIiIHkyPSIyNC4wMDMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9IjMwLjAwNCIgeDI9IjMwLjAwNCIgeTE9IjI0IiB5Mj0iMzUuOTk5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIxOC4wMDIiIHgyPSIxOC4wMDIiIHkxPSIyNCIgeTI9IjM1Ljk5OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWVlZTRjIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZjA2ZiIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJoIiB4PSItLjA1OTk5NSIgeT0iLS4wNjAwMDUiIHdpZHRoPSIxLjEyIiBoZWlnaHQ9IjEuMTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzgyNjQxMjkiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxjaXJjbGUgdHJhbnNmb3JtPSJtYXRyaXgoLjA2Mjc0NSAwIDAgLjA2Mjc0NSAtLjEyNTQ5IC0uMTI1NDkpIiBjeD0iNTEyIiBjeT0iNTEyIiByPSI0NzguMTIiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjkzOCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsPSJ1cmwoI2IpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIG1hcmtlcnMgZmlsbCIvPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcuODEzNiAxMS4wNjgpIiBmaWx0ZXI9InVybCgjaCkiIG9wYWNpdHk9Ii41Ij4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyA4LjUwOTIgLTEwLjM3MikiPgogICA8Zz4KICAgIDxnPgogICAgIDxwYXRoIGQ9Im0yNi40MDIgMTJoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0xNC4zOTggMTJoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0yNi40MDIgMjRoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgIDxwYXRoIGQ9Im0xNC4zOTggMjRoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIvPgogICAgPC9nPgogICA8L2c+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcuODEzNiAxMS4wNjgpIj4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjMwNDMgMCAwIDEuMzA0MyA4LjUwOTIgLTEwLjM3MikiPgogICA8Zz4KICAgIDxwYXRoIGQ9Im0yNi40MDIgMTJoNy4yMDNjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwN2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwM2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDdjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIgZmlsbD0idXJsKCNlKSIvPgogICAgPHBhdGggZD0ibTE0LjM5OCAxMmg3LjIwN2MxLjMyNCAwIDIuMzk4IDEuMDc0IDIuMzk4IDIuMzk4djcuMjA3YzAgMS4zMjQtMS4wNzQgMi4zOTgtMi4zOTggMi4zOThoLTcuMjA3Yy0xLjMyNCAwLTIuMzk4LTEuMDc0LTIuMzk4LTIuMzk4di03LjIwN2MwLTEuMzI0IDEuMDc0LTIuMzk4IDIuMzk4LTIuMzk4IiBmaWxsPSJ1cmwoI2YpIi8+CiAgICA8cGF0aCBkPSJtMjYuNDAyIDI0aDcuMjAzYzEuMzI0IDAgMi4zOTggMS4wNzQgMi4zOTggMi4zOTh2Ny4yMDNjMCAxLjMyNC0xLjA3NCAyLjM5OC0yLjM5OCAyLjM5OGgtNy4yMDNjLTEuMzI0IDAtMi4zOTgtMS4wNzQtMi4zOTgtMi4zOTh2LTcuMjAzYzAtMS4zMjQgMS4wNzQtMi4zOTggMi4zOTgtMi4zOTgiIGZpbGw9InVybCgjZCkiLz4KICAgIDxwYXRoIGQ9Im0xNC4zOTggMjRoNy4yMDdjMS4zMjQgMCAyLjM5OCAxLjA3NCAyLjM5OCAyLjM5OHY3LjIwM2MwIDEuMzI0LTEuMDc0IDIuMzk4LTIuMzk4IDIuMzk4aC03LjIwN2MtMS4zMjQgMC0yLjM5OC0xLjA3NC0yLjM5OC0yLjM5OHYtNy4yMDNjMC0xLjMyNCAxLjA3NC0yLjM5OCAyLjM5OC0yLjM5OCIgZmlsbD0idXJsKCNjKSIvPgogICA8L2c+CiAgPC9nPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"swell-foop,swell,foop\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.SwellFoop.desktop\"\nLABEL oc.launch=\"swell-foop.Swell-foop\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"swell-foop\"\nLABEL oc.displayname=\"swell-foop\"\nLABEL oc.path=\"/usr/games/swell-foop\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"swell-foop\"\nENV APPBIN \"/usr/games/swell-foop\"\nENV APP \"/usr/games/swell-foop\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/swell-foop/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/swell-foop/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/swell-foop/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/swell-foop/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-taquin\nLABEL oc.icon=\"org.gnome.Taquin.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ZkZmNmYiIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iI2YxZjBlZiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI0OCIgeDI9IjQ2NCIgeTE9IjQ0IiB5Mj0iNDQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTQuOTIzIDI1LjY1NSkgc2NhbGUoLjE0NDIzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNiYWJkYjYiIG9mZnNldD0iMCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNmY1ZjQiIG9mZnNldD0iLjA0MiIvPjxzdG9wIHN0b3AtY29sb3I9IiNkNWQzY2YiIG9mZnNldD0iLjA4MyIvPjxzdG9wIHN0b3AtY29sb3I9IiNkZWRkZGEiIG9mZnNldD0iLjkxNSIvPjxzdG9wIHN0b3AtY29sb3I9IiNlYmVhZTgiIG9mZnNldD0iLjk0NCIvPjxzdG9wIHN0b3AtY29sb3I9IiNmNmY1ZjQiIG9mZnNldD0iLjk4NSIvPjxzdG9wIHN0b3AtY29sb3I9IiNiYWJkYjYiIG9mZnNldD0iMSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMzIuNTc3IiB4Mj0iMzIuNTc3IiB5MT0iMiIgeTI9IjU3Ljk2MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIC4wMDEpIHNjYWxlKC45OTk5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjUyLjE4MyIgeDI9IjUyLjE4MyIgeTE9IjMuODIiIHkyPSI1Ny45NjEiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAuMDAxKSBzY2FsZSguOTk5OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz48bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIxMi4zODUiIHgyPSIxMi4zODUiIHkxPSIzLjQxNCIgeTI9IjU3LjE0MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIC4wMDEpIHNjYWxlKC45OTk5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPjxmaWx0ZXIgaWQ9ImIiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Ii44OSIvPjwvZmlsdGVyPjwvZGVmcz48cmVjdCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzg5LjMyIC00ODkuOTIpIHNjYWxlKDEuMDExNSkiIHg9IjM4Ni44NSIgeT0iNDg2LjMxIiB3aWR0aD0iNTkuMzE1IiBoZWlnaHQ9IjU5LjMxNSIgcnk9IjI5LjY1NyIgZmlsdGVyPSJ1cmwoI2IpIiBvcGFjaXR5PSIuMjUiLz48cGF0aCBkPSJNMjIuNzY5IDQxLjIzNGgxOS42MTV2MTguNDYxSDIyLjc2OXoiIGZpbGw9IiNkZWRkZGEiLz48Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iI2M1YzRjMSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz48cGF0aCBkPSJNMzEuODU1IDJhMzAgMzAgMCAwIDAtOS4wODYgMS40NTV2NTcuMDgyYzIuOS45MyA1Ljk5MiAxLjQzOCA5LjIxIDEuNDM4aC4wMDFjMy42NiAwIDcuMTY1LS42NSAxMC40MDItMS44NFYzLjg1NUEzMCAzMCAwIDAgMCAzMiAyYTMwIDMwIDAgMCAwLS4xNDQgMHoiIGZpbGw9InVybCgjYykiLz48cGF0aCBkPSJNNDIuMzg0IDQxLjIzdjE4LjQ2MWgxLjEyNWEyOS45NDQgMjkuOTQ0IDAgMCAwIDE3LjAyLTE4LjQ2MXoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNNDIuMzg1IDMuODU2djU2LjI3NmEzMi4wMDIgMzIuMDAyIDAgMCAwIDMuODk3LTEuNzUgMzAgMzAgMCAwIDAgLjAwNy0uMDAzIDMwIDMwIDAgMCAwIC4yMTMtLjExOGMuMjUtLjEzNC40OTctLjI4Ni43NDYtLjQyN0EzMCAzMCAwIDAgMCA2MiAzMiAzMCAzMCAwIDAgMCA0Mi4zODUgMy44NTV6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTU1Ljc2NSAxMy42NjNhMjIuMDQ4IDIyLjA0OCAwIDAgMC00LjMzMiA2Ljc5OWgzLjc2NGExOC40NzkgMTguNDc5IDAgMCAxIDIuNTU4LTMuODczIDI5LjkwOSAyOS45MDkgMCAwIDAtMS45OS0yLjkyNnoiIGZpbGw9IiMxYTVmYjQiLz48cGF0aCBkPSJNMy40MTYgMjIuNzcxQTMwLjEwNCAzMC4xMDQgMCAwIDAgMiAzMS4yODF2MS4zOTRBMzAuMTYgMzAuMTYgMCAwIDAgMy4wODQgNDBIMjIuNzdWMjIuNzdIMy40MTZ6IiBvcGFjaXR5PSIuMTUiLz48cGF0aCBkPSJNMjIuNzY5IDMuNDE1QTI5LjkyIDI5LjkyIDAgMCAwIDIgMzEuMjh2MS4zOTVjLjA0OSAyLjE0OC4zMiA0LjIzOC43OTMgNi4yNUgyMi43N1YzLjQxNHoiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJNMjIuNzY5IDEwLjcyOHYzLjk0N2EyNC4zMjIgMjQuMzIyIDAgMCAwIDEwLjQyIDIuMzI2IDI0LjM5OCAyNC4zOTggMCAwIDAgOS4xOTUtMS43ODV2LTMuODIyYTIwLjU1OCAyMC41NTggMCAwIDEtOS4xOTUgMi4xNDZjLTMuODMzIDAtNy40MDItMS4wMzItMTAuNDItMi44MTJ6bTAgMTYuMTUydjMuODIyYTE4LjQ3NiAxOC40NzYgMCAwIDEgNy45NTcgOC4yNGgzLjc2MUEyMi4wNDUgMjIuMDQ1IDAgMCAwIDIyLjc2OCAyNi44OHptMzAuMDM0LjUwNmMtMy43NDUgMC03LjI4Mi44NDItMTAuNDIgMi4zMjZ2My45NDdjMy4wMTctMS43OCA2LjU4Ni0yLjgxMiAxMC40Mi0yLjgxMiAzLjMwOCAwIDYuNDIuNzcgOS4xNSAyLjEyNS4wMS0uMzMxLjAyNi0uNjYxLjAyNi0uOTk0IDAtLjk2Ni0uMDUtMS45Mi0uMTQtMi44NjJhMjQuMzk4IDI0LjM5OCAwIDAgMC05LjAzNi0xLjczem0tLjg3MyAxMS41NDdhMjIuMDYgMjIuMDYgMCAwIDAgNi4xNzQgNy44MjggMjkuODA4IDI5LjgwOCAwIDAgMCAxLjU1OC0zLjE3NCAxOC40ODMgMTguNDgzIDAgMCAxLTMuODUxLTQuNjU0SDUxLjkzeiIgZmlsbD0iIzFhNWZiNCIvPjxwYXRoIGQ9Ik00LjUxIDE5Ljg4NmMtLjA4NS4xOTItLjE3LjM4Mi0uMjUuNTc2SDU5LjdjLS4wOC0uMTk0LS4xNjYtLjM4NC0uMjUtLjU3NnoiIGZpbGwtb3BhY2l0eT0iLjA4MSIvPjxwYXRoIGQ9Ik0xMC4zNDggMjAuNDY1YTE5LjY2IDE5LjY2IDAgMCAxIDEuOTczIDguNjE1IDE5LjYzIDE5LjYzIDAgMCAxLTIuNjMxIDkuODQ2aDQuMTRhMjMuMjMzIDIzLjIzMyAwIDAgMCAyLjE4NC05Ljg0NmMwLTIuOTUtLjU2MS01Ljg3NC0xLjY1NC04LjYxNWgtNC4wMTJ6bTI2LjMwNSAxOC40NjFDMzUuNTYgNDEuNjY2IDM0LjMwOCA0NSAzNC4zMDkgNTBjMCA1LjU5IDEuNDc4IDguNTczIDMuNzUyIDExLjM4MWEzMCAzMCAwIDAgMCAzLjM2NS0uOUMzOS4zOTggNTcuOTEgMzguMDAxIDU1IDM4LjAwMSA1MGMwLTUgMS40MDItOC40NzQgMi42NjYtMTEuMDc0aC00LjAxNHoiIGZpbGw9IiMxYTVmYjQiLz48cGF0aCBkPSJNMjMuMzQ2IDMuMjc1YTMwIDMwIDAgMCAwLS41NzYuMTh2NTcuMDgyYy4xOTIuMDYyLjM4My4xMjQuNTc2LjE4MlYzLjI3NnoiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjk1MyIgb3BhY2l0eT0iLjUiLz48cGF0aCBkPSJNMjIuNzY5IDMuNDE1Yy0uMTk0LjA2My0uMzg2LjEzLS41NzguMTk2djM1LjMxM2guNTc4VjMuNDE0eiIgZmlsbC1vcGFjaXR5PSIuMDgxIi8+PHBhdGggZD0iTTQyLjM4NSAzLjg1NnY1Ni4yODZhMzAgMzAgMCAwIDAgLjU3Ni0uMjE2VjQuMDc2YTMwIDMwIDAgMCAwLS41NzYtLjIyMXoiIGZpbGw9IiNmZmYiIG9wYWNpdHk9Ii41Ii8+PHBhdGggZD0iTTQxLjgwOSAzLjY1djU2LjY4MmMuMTkyLS4wNjYuMzg2LS4xMjkuNTc2LS4xOTlWMy44NTZhMzAgMzAgMCAwIDAtLjU3Ni0uMjA1eiIgb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNNC4yNiAyMC40NjJjLS4wOC4xOTEtLjE1Mi4zODUtLjIyNy41NzhoNTUuODk1Yy0uMDc1LS4xOTMtLjE1LS4zODctLjIyOC0uNTc4SDQuMjZ6bTE4LjUxIDE4LjQ2M3YuNTc2aDM4LjI2N2MuMDQ4LS4xOS4wODctLjM4NC4xMzItLjU3NkgyMi43N3oiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjU1NSIvPjxwYXRoIGQ9Ik0yLjY2IDM4LjM0NmMuMDQyLjE5NC4wODguMzg2LjEzMy41NzhoNTguMzc2Yy4wNDUtLjE5Mi4wOTEtLjM4NC4xMzMtLjU3OEgyLjY2eiIgZmlsbC1vcGFjaXR5PSIuMDgxIi8+PC9zdmc+\"\nLABEL oc.keyword=\"taquin,taquin\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"org.gnome.Taquin.desktop\"\nLABEL oc.launch=\"org.gnome.Taquin.org.gnome.Weather\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"taquin\"\nLABEL oc.displayname=\"taquin\"\nLABEL oc.path=\"/usr/bin/gnome-taquin\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"taquin\"\nENV APPBIN \"/usr/bin/gnome-taquin\"\nENV APP \"/usr/bin/gnome-taquin\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/taquin/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/taquin/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/taquin/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/taquin/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
microsoft teams - preview.Microsoft Teams - Preview\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/ms-teams stable main\" > /etc/apt/sources.list.d/teams.list\nRUN apt update && apt install -y teams && apt-get clean && rm -rf /var/lib/apt/lists/*\nLABEL oc.icon=\"teams.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjEyOCAxNjAgNzY4IDcwNCI+Cgk8ZGVmcz4KCQk8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSItLjIiIHkxPSItLjIiIHgyPSIuOCIgeTI9Ii44Ij4KCQkJPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNWE2MmM0Ii8+CgkJCTxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzM5NDBhYiIvPgoJCTwvbGluZWFyR3JhZGllbnQ+CgkJPGNsaXBQYXRoIGlkPSJjIj4KCQkJPHBhdGggZmlsbD0iI2ZmZiIgZD0iTTY4NCA0MzJINTEydi00OS4xNDNBMTEyIDExMiAwIDEgMCA0MTYgMjcyYTExMS41NTYgMTExLjU1NiAwIDAgMCAxMC43ODUgNDhIMTYwYTMyLjA5NCAzMi4wOTQgMCAwIDAtMzIgMzJ2MzIwYTMyLjA5NCAzMi4wOTQgMCAwIDAgMzIgMzJoMTc4LjY3YzE1LjIzNiA5MC44IDk0LjIgMTYwIDE4OS4zMyAxNjAgMTA2LjAzOSAwIDE5Mi04NS45NjEgMTkyLTE5MlY0NjhhMzYgMzYgMCAwIDAtMzYtMzZ6Ii8+CgkJPC9jbGlwUGF0aD4KCTwvZGVmcz4KCTxwYXRoIGZpbGw9IiM1MDU5YzkiIGQ9Ik02OTIgNDMyaDE2OGEzNiAzNiAwIDAgMSAzNiAzNnYxNjRhMTIwIDEyMCAwIDAgMS0xMjAgMTIwIDEyMCAxMjAgMCAwIDEtMTIwLTEyMFY0NjhhMzYgMzYgMCAwIDEgMzYtMzZ6Ii8+Cgk8Y2lyY2xlIGZpbGw9IiM1MDU5YzkiIGN4PSI3NzYiIGN5PSIzMDQiIHI9IjgwIi8+Cgk8cGF0aCBmaWxsPSIjN2I4M2ViIiBkPSJNMzcyIDQzMmgzMTJhMzYgMzYgMCAwIDEgMzYgMzZ2MjA0YTE5MiAxOTIgMCAwIDEtMTkyIDE5MiAxOTIgMTkyIDAgMCAxLTE5Mi0xOTJWNDY4YTM2IDM2IDAgMCAxIDM2LTM2eiIvPgoJPGNpcmNsZSBmaWxsPSIjN2I4M2ViIiBjeD0iNTI4IiBjeT0iMjcyIiByPSIxMTIiLz4KCTxnIGNsaXAtcGF0aD0idXJsKCNjKSI+CgkJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIgLTI0KSBzY2FsZSAoNS45MDc3KSI+CgkJCTxwYXRoIG9wYWNpdHk9Ii4wNSIgZD0iTTg1IDYzdjU5LjYyYTUuMzgyIDUuMzgyIDAgMCAxLTUuMzggNS4zOEg0NS4yNWMtLjMtLjMzLS41OS0uNjYtLjg3LTFzLS41Ni0uNjYtLjgzLTEtLjUzLS42Ni0uNzktMS0uNTEtLjY2LS43Ni0xYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyYy4wNi0uMDguMTItLjE3LjE3LS4yNXMuMTItLjE3LjE5LS4yNS4xMi0uMTcuMTgtLjI1YTIuMzQ4IDIuMzQ4IDAgMCAxIC4xOS0uMjVoMzcuNjFjMi45NyAwIDUuMzggMy4wMyA1LjM4IDZ6IiBzdHlsZT0iJiMxMDsiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjA3NSIgZD0iTTg0LjI1IDYzLjF2NTguNTJhNS4zIDUuMyAwIDAgMS01LjI5IDUuMzhINDQuMzhjLS4yOS0uMzMtLjU2LS42Ni0uODMtMXMtLjUzLS42Ni0uNzktMS0uNTEtLjY2LS43Ni0xYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyYy4wNi0uMDguMTItLjE3LjE3LS4yNXMuMTItLjE3LjE5LS4yNS4xMi0uMTcuMTgtLjI1aDM3LjA1YzIuOTcgMCA1LjM4IDIuODcgNS4zOCA1Ljg1eiIvPgoJCQk8cGF0aCBvcGFjaXR5PSIuMSIgZD0iTTgzLjUgNjMuMTl2NTcuNDNhNS4yMjMgNS4yMjMgMCAwIDEtNS4xOSA1LjM4SDQzLjU1Yy0uMjctLjMzLS41My0uNjYtLjc5LTFzLS41MS0uNjYtLjc2LTFhNTYuMjU5IDU2LjI1OSAwIDAgMS0xMS0zMy41VjkwYTU2LjI1OSA1Ni4yNTkgMCAwIDEgMTAuMjgtMzJjLjA2LS4wOC4xMi0uMTcuMTctLjI1cy4xMi0uMTcuMTktLjI1aDM2LjQ4YTUuNjU1IDUuNjU1IDAgMCAxIDUuMzggNS42OXoiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjEyNSIgZD0iTTgyLjc1IDYzLjI4djU2LjM0YTUuMTQ0IDUuMTQ0IDAgMCAxLTUuMSA1LjM4SDQyLjc2Yy0uMjYtLjMzLS41MS0uNjYtLjc2LTFhNTYuMjU5IDU2LjI1OSAwIDAgMS0xMS0zMy41VjkwYTU2LjI1OSA1Ni4yNTkgMCAwIDEgMTAuMjgtMzJjLjA2LS4wOC4xMi0uMTcuMTctLjI1aDM1LjkyYTUuNTEyIDUuNTEyIDAgMCAxIDUuMzggNS41M3oiLz4KCQkJPHBhdGggb3BhY2l0eT0iLjIiIGQ9Ik04MiA2My4zOHY1NS4yNGE1LjA3IDUuMDcgMCAwIDEtNSA1LjM4SDQyYTU2LjI1OSA1Ni4yNTkgMCAwIDEtMTEtMzMuNVY5MGE1Ni4yNTkgNTYuMjU5IDAgMCAxIDEwLjI4LTMyaDM1LjM0QTUuMzgyIDUuMzgyIDAgMCAxIDgyIDYzLjM4eiIvPgoJCTwvZz4KCTwvZz4KCTxyZWN0IGZpbGw9InVybCgjZykiIHg9IjEyOCIgeT0iMzIwIiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjM4NCIgcng9IjMyIiByeT0iMzIiLz4KCTxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zOTkuMzY1IDQ0NS44NTVoLTYwLjI5M3YxNjQuMmgtMzguNDE4di0xNjQuMmgtNjAuMDJWNDE0aDE1OC43M3oiLz4KPC9zdmc+\"\nLABEL oc.keyword=\"teams,teams\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"teams.desktop\"\nLABEL oc.launch=\"microsoft teams - preview.Microsoft Teams - Preview\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--disable-namespace-sandbox --disable-setuid-sandbox\"\nLABEL oc.name=\"teams\"\nLABEL oc.displayname=\"Microsoft Teams\"\nLABEL oc.path=\"/usr/bin/teams\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/msteams;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"teams\"\nENV APPBIN \"/usr/bin/teams\"\nLABEL oc.args=\"--disable-namespace-sandbox --disable-setuid-sandbox\"\nENV APP \"/usr/bin/teams\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/teams/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/teams/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/teams/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
docker build --build-arg TAG=3.0 -f teams.d -t teams .\n
"},{"location":"applications/teams/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
ABCHOST=localhost\ndocker inspect teams > teams.json\ndocker image save teams -o teams.tar\nctr -n k8s.io images import teams.tar\ncurl -X PUT -H 'Content-Type: text/javascript' http://$ABCHOST:30443/API/manager/image -d @teams.json\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.20.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-terminal sudo openssh-client telnet netcat sshcommand sshfs ftp-ssl wput curl wget tftp ncftp git git-ftp ftp dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminal,terminal,bash,shell,cmd,admin,ftp,telnet,netcat,sshfs,curl,wget,git,ssh\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.Gnome-terminal\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.20.04\"\nENV ARGS=\"--disable-factory\"\nLABEL oc.name=\"Terminal\"\nLABEL oc.displayname=\"Terminal sudo\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.showinview=\"dock\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Terminal\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory\"\nENV APP \"/usr/bin/gnome-terminal\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nRUN mkdir -p /run/user\nRUN chmod 777 /run/user\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminal/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminal/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminal/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminal/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends at-spi2-core gnome-terminal dbus-x11 pulseaudio-utils && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminalephemeral,ephemeral,terminal,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.ephemeral\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=ephemeral\"\nLABEL oc.name=\"terminalephemeral\"\nLABEL oc.displayname=\"Terminal [ephemeral container]\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"terminalephemeral\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=ephemeral\"\nENV APP \"/usr/bin/gnome-terminal\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminalephemeral/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminalephemeral/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminalephemeral/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminalephemeral/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends pulseaudio-utils at-spi2-core gnome-terminal dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"pantheon-terminal-icons.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSIKICAgd2lkdGg9IjEyOCIKICAgaGVpZ2h0PSIxMjgiCiAgIGlkPSJzdmc0MTEzIgogICB2aWV3Qm94PSIwIDAgMTMyLjcyIDEyNy4yMTkiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MTE1Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjIwIgogICAgICAgeTE9IjI2LjAwMDAwOCIKICAgICAgIHgyPSIyMCIKICAgICAgIHkyPSIxMy4wMDAwMDgiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDE1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNjM3NTQzMSwwLDAsMi42Mzc1NDMxLDEuMzc4MDE4NCwtNjEuMjAyMTU4KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4MC02LTYtNi0zLTctMS05Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjgyLTQtNi0xLTMtNy03LTEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkY2RjZGM7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNjg0LTgtNS04LTAtMi02LTciCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHgxPSIyMy45OTk5OSIKICAgICAgIHkxPSI0Ljk5OTk4OSIKICAgICAgIHgyPSIyMy45OTk5OSIKICAgICAgIHkyPSI0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQxMzYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTI0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuNzI5NzI5OCwwLDAsMi43Mjk3Mjk4LC0xLjUxMzUxODQsLTYyLjUxMTY3OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjQiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MjYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTI4IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowLjIzNTI5NDEyIgogICAgICAgICBvZmZzZXQ9IjAuMDYzMTY0NTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC4xNTY4NjI3NSIKICAgICAgICAgb2Zmc2V0PSIwLjk1MDU2MzMxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM5MzIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMzkyMTU2ODciCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGN4PSI3LjExODM1MzQiCiAgICAgICBjeT0iOS45NTcxMDc1IgogICAgICAgcj0iMTIuNjcxODc1IgogICAgICAgZng9IjcuMTE4MzUzNCIKICAgICAgIGZ5PSI5Ljk1NzEwNzUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQzOTM2LTMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDI0LjEzOTYyMiwtMjkuNjM1NzQ1LDAsMzYxLjI4MTE2LC0yNjguNzI2ODEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyODY3LTQ0OS04OC04NzEtMzkwLTU5OC00NzYtNTkxLTQzNC0xNDgtNTctMTc3LTgtMy0zLTYtNC04LTgtOC01LTctOCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc1MC0xLTAtNy02LTYtMS0zLTktMy05LTIiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1MDUwNTA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzUyLTMtNy00LTAtMzItOC05MjMtMC03LTAtMyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzJiMmIyYjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwLjI2MjM4IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTQtMS04LTUtMi03LTYtNy0xLTktMS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMGEwYTBhO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNzA0OTUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM3NTYtMS02LTItNi02LTEtOTYtNi0wLTEtNyIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgY3g9IjQuOTkyOTc4NiIKICAgICAgIGN5PSI0My41IgogICAgICAgcj0iMi41IgogICAgICAgZng9IjQuOTkyOTc4NiIKICAgICAgIGZ5PSI0My41IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDA5MyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM2ODgtMTY2LTc0OS01IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDAzNzg0LDAsMCwxLjQsMjcuOTg4MTMsLTE3LjQpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNjg4LTE2Ni03NDktNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4My0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg4NS01IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iNC45OTI5Nzg2IgogICAgICAgY3k9IjQzLjUiCiAgICAgICByPSIyLjUiCiAgICAgICBmeD0iNC45OTI5Nzg2IgogICAgICAgZnk9IjQzLjUiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MDk1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMDM3ODQsMCwwLDEuNCwtMjAuMDExODcsLTEwNC40KSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzY4OC00NjQtMzA5LTgiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4ODktOSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDI4OTEtNCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzE4MTgxODtzdG9wLW9wYWNpdHk6MCIKICAgICAgICAgb2Zmc2V0PSIxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeDE9IjI1LjA1ODA5NiIKICAgICAgIHkxPSI0Ny4wMjc3MjkiCiAgICAgICB4Mj0iMjUuMDU4MDk2IgogICAgICAgeTI9IjM5Ljk5OTQ0MyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwOTciCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzAyLTUwMS03NTctMCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5NS0wIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjAiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjg5Ny0yIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTgxODE4O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAuNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AyODk5LTYiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMxODE4MTg7c3RvcC1vcGFjaXR5OjAiCiAgICAgICAgIG9mZnNldD0iMSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTEiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDM4MTMiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODE1IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowIgogICAgICAgICBvZmZzZXQ9IjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBjeD0iLTQuMDI4Nzc3MSIKICAgICAgIGN5PSI5My40Njc2MjgiCiAgICAgICByPSIzNS4zMzgxMzEiCiAgICAgICBmeD0iLTQuMDI4Nzc3MSIKICAgICAgIGZ5PSI5My40Njc2MjgiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0MTExIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjU1NjM5MjQsMCwwLDAuMTY5Nzg4MjcsNzAuMjcwMzU1LDM4LjEzMjEwMSkiIC8+CiAgPC9kZWZzPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTQxMTgiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCw2NCkiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cGF0aAogICAgICAgZD0ibSAxMTksNTQuMDAxODEgYSA1NSw2IDAgMCAxIC0xMDkuOTk5OTk4MiwwIDU1LDYgMCAxIDEgMTA5Ljk5OTk5ODIsMCB6IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIGlkPSJwYXRoMzA0MSIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMjtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQxMTEpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMi42OTk5OTg5LDAsMCwwLjU1NTU1NjA3LC0wLjgwMDAwODEyLDMwLjg5MDY5MSkiCiAgICAgICBpZD0iZzIwMzYiCiAgICAgICBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICA8ZwogICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA1MjYzMiwwLDAsMS4yODU3MTMsLTEuMjYzMTU4LC0xMy40Mjg1NCkiCiAgICAgICAgIGlkPSJnMzcxMiIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MC40Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI1IgogICAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgICB4PSIzOCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDI4MDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDQwOTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICAgaGVpZ2h0PSI3IgogICAgICAgICAgIHg9Ii0xMCIKICAgICAgICAgICB5PSItNDciCiAgICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgICAgaWQ9InJlY3QzNjk2IgogICAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQ0MDk1KTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSIyOCIKICAgICAgICAgICBoZWlnaHQ9IjcuMDAwMDAwNSIKICAgICAgICAgICB4PSIxMCIKICAgICAgICAgICB5PSI0MCIKICAgICAgICAgICBpZD0icmVjdDM3MDAiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwOTcpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMyIKICAgICAgIGhlaWdodD0iMTAzIgogICAgICAgcng9IjYuMDU0NTQwNiIKICAgICAgIHJ5PSI2LjA1NDU0MDYiCiAgICAgICB4PSIxMi40OTk5ODgiCiAgICAgICB5PSItNDguNDk4MTkyIgogICAgICAgaWQ9InJlY3Q1NTA1LTIxLTMiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjk7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjcmFkaWFsR3JhZGllbnQzOTM2LTMpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowLjk5OTk5OTk0O21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjEwMSIKICAgICAgIGhlaWdodD0iMTAxIgogICAgICAgcng9IjUiCiAgICAgICByeT0iNSIKICAgICAgIHg9IjEzLjQ5OTk4OCIKICAgICAgIHk9Ii00Ny40OTgxOTIiCiAgICAgICBpZD0icmVjdDY3NDEtNyIKICAgICAgIHN0eWxlPSJvcGFjaXR5OjAuMztmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQ0MTM2KTtzdHJva2Utd2lkdGg6MC45OTk5OTk5NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIiAvPgogICAgPHJlY3QKICAgICAgIHdpZHRoPSIxMDMiCiAgICAgICBoZWlnaHQ9IjEwMyIKICAgICAgIHJ4PSI2LjA1NDU0MDYiCiAgICAgICByeT0iNi4wNTQ1NDA2IgogICAgICAgeD0iMTIuNDk5OTg4IgogICAgICAgeT0iLTQ4LjQ5ODE5MiIKICAgICAgIGlkPSJyZWN0NTUwNS0yMS0zLTEiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjc7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Ik0gMzUuODEyNSwtMjkgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAzNSwtMjggbCAwLDEuMzc1IGMgLTEuOTY5Nzg4LDAuMjgwOTExIC0zLjk3ODQyNywwLjgwMzE0IC01LjYyNSwyLjE1NjI1IC0wLjAxMjExLDAuMDA5NCAtMC4wMTkyMywwLjAyMTgyIC0wLjAzMTI1LDAuMDMxMjUgLTIuODcyMTIsMi4yNTQwMjEgLTMuMDY2ODQ0LDYuNTM0MTQyIC0wLjk2ODc1LDkuMjgxMjUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjAzMTI1LDAuMDMxMjUgYyAxLjc3MDYxNCwyLjE0ODMyOCA0LjI3NjU1MywzLjEyMDc5OCA2LjU5Mzc1LDQgbCAwLDMuNzUgQyAzMi43MzY5ODQsLTcuNjgwODc2NSAzMC40OTY3MzcsLTguMzA2NzY1MSAyOC40MDYyNSwtOS4yNSBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDI3LC04LjMxMjUgbCAwLDQuNzE4NzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAwLjU5Mzc1LDAuOTM3NSBDIDI5Ljk1MTY4NywtMS42NTU3MDM2IDMyLjQ3MjQ0NiwtMS4yMDczOTEyIDM1LC0xLjA2MjUgTCAzNSwyIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwxIGwgMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMSwtMSBsIDAsLTMuMjE4NzUgYyAxLjUzNDUyNSwtMC4xNzU1MzIgMy4yMDc4LC0wLjQ1MzQzMzEgNC42NTYyNSwtMS4yMTg3NSAwLjAwNzksLTAuMDAzODggMC4wMjMzNywwLjAwMzkgMC4wMzEyNSwwIDIuMzgxODY0LC0xLjE3OTk4OTQgNC4wNjQ3MTQsLTMuNjIzMDIzNyAzLjk2ODc1LC02LjMxMjUgOC4yZS01LC0wLjAxMDU2NSAtMi4zZS01LC0wLjAyMDY5MyAwLC0wLjAzMTI1IDAuMDAyOSwtMS4zMDU0MzUgLTAuNDM3MDQ0LC0yLjU0Njk2NiAtMS4xODc1LC0zLjU5Mzc1IEMgNDQuNjAwNzA5LC0xNC44Njc3MjggNDEuNDY4Njc4LC0xNS44NjYxMTEgMzksLTE2LjgxMjUgbCAwLC0zLjQwNjI1IGMgMS43MDg4NCwwLjIyMTUwOSAzLjU3MjkxMywwLjUxNTUzMSA1LjAzMTI1LDEuMDkzNzUgYSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCAxLjMxMjUsLTAuNTMxMjUgbCAxLjc1LC00LjE4NzUgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA0Ni41NjI1LC0yNS4xODc1IEMgNDQuMjMzMzgxLC0yNi4xODUzMDMgNDEuNTA5NjI1LC0yNi42MDY2MTkgMzksLTI2Ljc4MTI1IEwgMzksLTI4IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTEsLTEgbCAtMiwwIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHogTSAzNSwtMjAuMDYyNSAzNSwtMTguNzUgYyAtMC4wMjYsLTAuMDE3NTQgLTAuMDY5NjEsLTAuMDQ0ODUgLTAuMDkzNzUsLTAuMDYyNSAtMC4zNjIwNzMsLTAuMjY0NzY4IC0wLjQ0NzAyLC0wLjM5MzMzMiAtMC40Mzc1LC0wLjY1NjI1IGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgMCwtMC4wNjI1IGMgLTAuMDA4MSwtMC4yMDU3MjkgMC4wNTcxNSwtMC4yNzY1OTYgMC4zNzUsLTAuNDY4NzUgMC4wMzk2OSwtMC4wMjM5OSAwLjExMDM3MywtMC4wMzk4OCAwLjE1NjI1LC0wLjA2MjUgeiBtIDQsMTAuODQzNzUgYyAwLjEwNTQ5NSwwLjA0ODM5MyAwLjI1MjgzMiwwLjEwNTgzNDQgMC4zNDM3NSwwLjE1NjI1IDAuMjM1NzAyLDAuMTMwNzAxIDAuNDIzMTI3LDAuMjUxODMxIDAuNSwwLjM0Mzc1IDAuMDc2ODcsMC4wOTE5MTkgMC4wOTIxLDAuMTI1NjEyIDAuMDkzNzUsMC4yMTg3NSAwLjAwOTUsMC4yMTUwMDcyIC0wLjExMTc0NywwLjM3NzY3ODQgLTAuNTMxMjUsMC42MjUgLTAuMTEwNjc4LDAuMDY1MjUxIC0wLjI3MDI2LDAuMDY5MjMxIC0wLjQwNjI1LDAuMTI1IGwgMCwtMS40Njg3NSB6IE0gNTIuODEyNSwzIEEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgNTIsNCBsIDAsNSBhIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDEsMSBsIDIxLDAgQSAxLjAxNDU2OCwxLjAxNDU2OCAwIDAgMCA3NSw5IEwgNzUsNCBBIDEuMDE0NTY4LDEuMDE0NTY4IDAgMCAwIDc0LDMgTCA1MywzIGEgMS4wMTQ1NjgsMS4wMTQ1NjggMCAwIDAgLTAuMTg3NSwwIHoiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNi4yNWUtNywyZS02KSIKICAgICAgIGlkPSJwYXRoNDA1NCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O29wYWNpdHk6MC4xNTtjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI3Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE0LjA4MTk4NyA0MC42MDEzMDEsLTE1LjA3NjI0IDM4LC0xNi4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUiCiAgICAgICBzdHlsZT0iZm9udC1zaXplOjE0LjMxMTY5ODkxcHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc3RyZXRjaDpub3JtYWw7bGluZS1oZWlnaHQ6MTI1JTtsZXR0ZXItc3BhY2luZzowcHg7d29yZC1zcGFjaW5nOjBweDtvcGFjaXR5OjAuMztjb2xvcjojMDAwMDAwO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5Ok9wZW4gU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOk9wZW4gU2FucyBCb2xkIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzYsLTI4Ljk5OTk5OCAwLDIuMTg3NSBjIC0yLjE2NDYzNSwwLjIwNjgxIC00LjMxODcsMC43NjAyNzkgLTYsMi4xNTYyNSAtMi40MTMxMiwxLjg2NTAzMSAtMi41ODU0OTcsNS41NTM1NTMgLTAuODEyNSw3Ljg3NSAxLjcxNDMxNiwyLjA4MDAyIDQuMzI0NDQ2LDMuMDYwMzExIDYuODEyNSw0IGwgMCw1LjU5Mzc1IGMgLTIuNzc0MjE5LC0wLjIyNjYxOCAtNS40NzkxODMsLTAuOTg3NTk5IC04LC0yLjEyNSBsIDAsNC43MTg3NSBjIDIuNTIzMTQyLDEuMDcwNjQ4IDUuMjU3MTQ5LDEuNTcxMzU0IDgsMS42MjUgbCAwLDMuOTY4NzUgMiwwIDAsLTQuMDkzNzUgYyAxLjY3ODk1MSwtMC4xNTA4OTIgMy43MzIxMzYsLTAuNDU3MTgxIDUuMjE4NzUsLTEuMjUgMi4wNjUyMDEsLTEuMDEzOTE2IDMuNTI5MzQsLTMuMTYxODMzIDMuNDM3NSwtNS40MDYyNSAwLjAwODQsLTEuMDg1MTQ5IC0wLjM1NTQ1MiwtMi4xMzIxOTQgLTEsLTMuMDMxMjUgQyA0My45MzIwODUsLTE1LjA4MTk4NyA0MC42MDEzMDEsLTE2LjA3NjI0IDM4LC0xNy4xMjQ5OTggbCAwLC01LjM0Mzc1IGMgMi4wNjI0OCwwLjE2Nzc0OSA0LjQ5Mjc4NSwwLjY0NzU3NyA2LjQwNjI1LDEuNDA2MjUgbCAxLjc1LC00LjE4NzUgYyAtMi40NDMzNzIsLTEuMDQ2NzUgLTUuNDkyNDE3LC0xLjUxNTU0MyAtOC4xNTYyNSwtMS42MjUgbCAwLC0yLjEyNSAtMiwwIHogbSAwLDYuNTkzNzUgMCw0LjI4MTI1IGMgLTEuMDUwMTIsLTAuNDYxODUgLTIuNTc5MDE0LC0xLjA1NTg1MiAtMi41MzEyNSwtMi4zNzUgLTAuMDQ5MTMsLTEuMjQ1MjA3IDEuNDY4MTc1LC0xLjc4NjUwNyAyLjUzMTI1LC0xLjkwNjI1IHogbSAyLDEwLjYyNSBjIDEuMDQxNDc3LDAuNTA4MjQ5IDIuOTE0MDI2LDAuOTI1NTExIDIuOTM3NSwyLjI1IDAuMDU5ODUsMS4zNTE1NDIgLTEuNzU4NDc2LDEuOTk5MTMyIC0yLjkzNzUsMi4xNTYyNSBsIDAsLTQuNDA2MjUgeiBtIDE1LDE0Ljc4MTI1IDAsNSAyMSwwIDAsLTUgLTIxLDAgeiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBpZD0icGF0aDM5ODUtMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6MTQuMzExNjk4OTFweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtsaW5lLWhlaWdodDoxMjUlO2xldHRlci1zcGFjaW5nOjBweDt3b3JkLXNwYWNpbmc6MHB4O2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDAxNSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpPcGVuIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpPcGVuIFNhbnMgQm9sZCIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"terminalpod,pod,terminal,shell\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"org.gnome.Terminal.desktop\"\nLABEL oc.launch=\"gnome-terminal-server.pod\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nENV ARGS=\"--disable-factory --class=pod\"\nLABEL oc.name=\"terminalpod\"\nLABEL oc.displayname=\"Terminal [Pod]\"\nLABEL oc.path=\"/usr/bin/gnome-terminal\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"256M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false,\\\"ipc_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"terminalpod\"\nENV APPBIN \"/usr/bin/gnome-terminal\"\nLABEL oc.args=\"--disable-factory --class=pod\"\nENV APP \"/usr/bin/gnome-terminal\"\nLABEL oc.containerengine=\"pod_application\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/terminalpod/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/terminalpod/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/terminalpod/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/terminalpod/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.language-pack-all:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends gnome-tetravex && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"gnome-tetravex.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJz8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZyB4bWxuczpjYz0naHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjJyB4bWxuczpkYz0naHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8nIHNvZGlwb2RpOmRvY25hbWU9J2dub21lLXRldHJhdmV4LXN5bWJvbGljLnN2ZycgaGVpZ2h0PScxNicgaWQ9J3N2ZzczODQnIHhtbG5zOmlua3NjYXBlPSdodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlJyB4bWxuczpvc2I9J2h0dHA6Ly93d3cub3BlbnN3YXRjaGJvb2sub3JnL3VyaS8yMDA5L29zYicgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczpzb2RpcG9kaT0naHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQnIHhtbG5zOnN2Zz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZlcnNpb249JzEuMScgaW5rc2NhcGU6dmVyc2lvbj0nMC45MSByMTM3MjUnIHdpZHRoPScxNicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxtZXRhZGF0YSBpZD0nbWV0YWRhdGE5MCc+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PScnPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0naHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UnLz4KICAgICAgICA8ZGM6dGl0bGU+R25vbWUgU3ltYm9saWMgSWNvbiBUaGVtZTwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcgaW5rc2NhcGU6YmJveC1wYXRocz0ndHJ1ZScgYm9yZGVyY29sb3I9JyM2NjY2NjYnIGJvcmRlcm9wYWNpdHk9JzEnIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9J2xheWVyOScgaW5rc2NhcGU6Y3g9JzIwOS42ODE0OScgaW5rc2NhcGU6Y3k9JzguOTU0NDEnIGdyaWR0b2xlcmFuY2U9JzEwJyBpbmtzY2FwZTpndWlkZS1iYm94PSd0cnVlJyBndWlkZXRvbGVyYW5jZT0nMTAnIGlkPSduYW1lZHZpZXc4OCcgaW5rc2NhcGU6b2JqZWN0LW5vZGVzPSdmYWxzZScgaW5rc2NhcGU6b2JqZWN0LXBhdGhzPSdmYWxzZScgb2JqZWN0dG9sZXJhbmNlPScxMCcgcGFnZWNvbG9yPScjNTU1NzUzJyBpbmtzY2FwZTpwYWdlb3BhY2l0eT0nMScgaW5rc2NhcGU6cGFnZXNoYWRvdz0nMicgc2hvd2JvcmRlcj0nZmFsc2UnIHNob3dncmlkPSdmYWxzZScgc2hvd2d1aWRlcz0ndHJ1ZScgaW5rc2NhcGU6c25hcC1iYm94PSd0cnVlJyBpbmtzY2FwZTpzbmFwLWJib3gtbWlkcG9pbnRzPSdmYWxzZScgaW5rc2NhcGU6c25hcC1nbG9iYWw9J3RydWUnIGlua3NjYXBlOnNuYXAtZ3JpZHM9J3RydWUnIGlua3NjYXBlOnNuYXAtbm9kZXM9J3RydWUnIGlua3NjYXBlOnNuYXAtb3RoZXJzPSdmYWxzZScgaW5rc2NhcGU6c25hcC10by1ndWlkZXM9J3RydWUnIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9JzEzNzYnIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9JzEnIGlua3NjYXBlOndpbmRvdy13aWR0aD0nMjU2MCcgaW5rc2NhcGU6d2luZG93LXg9JzAnIGlua3NjYXBlOndpbmRvdy15PScyNycgaW5rc2NhcGU6em9vbT0nMzInPgogICAgPGlua3NjYXBlOmdyaWQgZW1wc3BhY2luZz0nMicgZW5hYmxlZD0ndHJ1ZScgaWQ9J2dyaWQ0ODY2JyBvcmlnaW54PSctODAuOTk5OTk4JyBvcmlnaW55PSctMzYyJyBzbmFwdmlzaWJsZWdyaWRsaW5lc29ubHk9J3RydWUnIHNwYWNpbmd4PScxcHgnIHNwYWNpbmd5PScxcHgnIHR5cGU9J3h5Z3JpZCcgdmlzaWJsZT0ndHJ1ZScvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDx0aXRsZSBpZD0ndGl0bGU5MTY3Jz5Hbm9tZSBTeW1ib2xpYyBJY29uIFRoZW1lPC90aXRsZT4KICA8ZGVmcyBpZD0nZGVmczczODYnPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSdsaW5lYXJHcmFkaWVudDcyMTInIG9zYjpwYWludD0nc29saWQnPgogICAgICA8c3RvcCBpZD0nc3RvcDcyMTQnIG9mZnNldD0nMCcgc3R5bGU9J3N0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsnLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnIGlua3NjYXBlOmdyb3VwbW9kZT0nbGF5ZXInIGlkPSdsYXllcjknIGlua3NjYXBlOmxhYmVsPSdhcHBzJyBzdHlsZT0nZGlzcGxheTppbmxpbmUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0zMjIuMDAwMiwxNDUpJz4KCiAgICA8cGF0aCBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPScwJyBkPSdtIDMyNC4zNDM5NSwtMTQ0IDUuNjI1LDUuNjI1IDUuNjI1LC01LjYyNSAtMTEuMjUsMCB6IG0gNS42NTYyNSwxIGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSA3LDAuNDA2MjUgLTUuNjI1LDUuNjI1IDUuNjI1LDUuNjI1IDAsLTExLjI1IHogbSAtMTQsMC4wNjI1IDAsMTEuMTI1IDUuNTYyNSwtNS41NjI1IC01LjU2MjUsLTUuNTYyNSB6IG0gMiw0LjUzMTI1IGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSAxMCwwIGMgMC41NTIyOSwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcxLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHogbSAtNS4wMzEyNSwyLjQzNzUgLTUuNTYyNSw1LjU2MjUgMTEuMTI1LDAgLTUuNTYyNSwtNS41NjI1IHogbSAwLjAzMTIsMi41NjI1IGMgMC41NTIyOCwwIDEsMC40NDc3MiAxLDEgMCwwLjU1MjI4IC0wLjQ0NzcyLDEgLTEsMSAtMC41NTIyOCwwIC0xLC0wLjQ0NzcyIC0xLC0xIDAsLTAuNTUyMjggMC40NDc3MiwtMSAxLC0xIHonIGlkPSdyZWN0NzAyNicgc3R5bGU9J2ZpbGw6I2JlYmViZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZScvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"tetravex,game\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"gnome-tetravex.Gnome-tetravex\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.language-pack-all\"\nLABEL oc.name=\"Tetravex\"\nLABEL oc.displayname=\"Tetravex\"\nLABEL oc.path=\"/usr/games/gnome-tetravex\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"384M\\\",\\\"shm_size\\\":\\\"128M\\\",\\\"pid_mode\\\":false}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"Tetravex\"\nENV APPBIN \"/usr/games/gnome-tetravex\"\nENV APP \"/usr/games/gnome-tetravex\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/tetravex/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/tetravex/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/tetravex/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/tetravex/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends tk thunderbird gnome-keyring && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"thunderbird.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAyNDYuOTYgMjQyLjgwOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQ2Ljk2IDI0Mi44MDg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiMzNjM5NTk7fQ0KCS5zdDF7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9DQoJLnN0MntmaWxsOiNGQkZCRkI7fQ0KCS5zdDN7ZmlsbDojOTk5OTk5O30NCgkuc3Q0e2ZpbGw6I0Y4RjhGODt9DQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMl8pO30NCgkuc3Q2e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQ0KCS5zdDd7ZmlsbDp1cmwoI1NWR0lEXzRfKTt9DQoJLnN0OHtmaWxsOiMzRjY0OTk7fQ0KCS5zdDl7ZmlsbDp1cmwoI1NWR0lEXzVfKTt9DQoJLnN0MTB7ZmlsbDp1cmwoI1NWR0lEXzZfKTt9DQoJLnN0MTF7ZmlsbDp1cmwoI1NWR0lEXzdfKTt9DQoJLnN0MTJ7ZmlsbDp1cmwoI1NWR0lEXzhfKTt9DQoJLnN0MTN7ZmlsdGVyOnVybCgjQWRvYmVfT3BhY2l0eU1hc2tGaWx0ZXIpO30NCgkuc3QxNHtmaWxsOnVybCgjU1ZHSURfMTBfKTt9DQoJLnN0MTV7bWFzazp1cmwoI1NWR0lEXzlfKTt9DQoJLnN0MTZ7b3BhY2l0eTowLjY7fQ0KCS5zdDE3e29wYWNpdHk6MC4yO30NCgkuc3QxOHtmaWxsOnVybCgjU1ZHSURfMTFfKTt9DQoJLnN0MTl7ZmlsbDp1cmwoI1NWR0lEXzEyXyk7fQ0KCS5zdDIwe29wYWNpdHk6MC4xO2ZpbGw6I0YyRjJGMjt9DQoJLnN0MjF7ZmlsbDojMkY0MjgyO30NCgkuc3QyMntmaWxsOnVybCgjU1ZHSURfMTNfKTt9DQoJLnN0MjN7ZmlsbDp1cmwoI1NWR0lEXzE0Xyk7fQ0KCS5zdDI0e2ZpbGw6I0ZGRkZGRjt9DQoJLnN0MjV7ZmlsbDp1cmwoI1NWR0lEXzE1Xyk7fQ0KCS5zdDI2e2ZpbGw6dXJsKCNTVkdJRF8xNl8pO30NCgkuc3QyN3tmaWxsOnVybCgjU1ZHSURfMTdfKTt9DQoJLnN0Mjh7ZmlsbDp1cmwoI1NWR0lEXzE4Xyk7fQ0KCS5zdDI5e2ZpbGw6dXJsKCNTVkdJRF8xOV8pO30NCgkuc3QzMHtmaWxsOnVybCgjU1ZHSURfMjBfKTt9DQoJLnN0MzF7ZmlsbDp1cmwoI1NWR0lEXzIxXyk7fQ0KCS5zdDMye2ZpbGw6dXJsKCNTVkdJRF8yMl8pO30NCgkuc3QzM3tmaWxsOnVybCgjU1ZHSURfMjNfKTt9DQoJLnN0MzR7ZmlsbDp1cmwoI1NWR0lEXzI0Xyk7fQ0KCS5zdDM1e2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyXzFfKTt9DQoJLnN0MzZ7ZmlsbDp1cmwoI1NWR0lEXzI2Xyk7fQ0KCS5zdDM3e21hc2s6dXJsKCNTVkdJRF8yNV8pO30NCgkuc3QzOHtmaWxsOnVybCgjU1ZHSURfMjdfKTt9DQoJLnN0Mzl7ZmlsbDp1cmwoI1NWR0lEXzI4Xyk7fQ0KCS5zdDQwe2ZpbGw6dXJsKCNTVkdJRF8yOV8pO30NCgkuc3Q0MXtmaWxsOnVybCgjU1ZHSURfMzBfKTt9DQoJLnN0NDJ7ZmlsbDp1cmwoI1NWR0lEXzMxXyk7fQ0KCS5zdDQze2ZpbGw6dXJsKCNTVkdJRF8zMl8pO30NCgkuc3Q0NHtmaWxsOnVybCgjU1ZHSURfMzNfKTt9DQoJLnN0NDV7ZmlsbDp1cmwoI1NWR0lEXzM0Xyk7fQ0KCS5zdDQ2e2ZpbGw6dXJsKCNTVkdJRF8zNV8pO30NCgkuc3Q0N3tmaWxsOnVybCgjU1ZHSURfMzZfKTt9DQoJLnN0NDh7ZmlsbDp1cmwoI1NWR0lEXzM3Xyk7fQ0KCS5zdDQ5e2ZpbGw6dXJsKCNTVkdJRF8zOF8pO30NCgkuc3Q1MHtmaWxsOnVybCgjU1ZHSURfMzlfKTt9DQoJLnN0NTF7ZmlsbDp1cmwoI1NWR0lEXzQwXyk7fQ0KCS5zdDUye2ZpbHRlcjp1cmwoI0Fkb2JlX09wYWNpdHlNYXNrRmlsdGVyXzJfKTt9DQoJLnN0NTN7ZmlsbDp1cmwoI1NWR0lEXzQyXyk7fQ0KCS5zdDU0e21hc2s6dXJsKCNTVkdJRF80MV8pO30NCgkuc3Q1NXtmaWxsOnVybCgjU1ZHSURfNDNfKTt9DQoJLnN0NTZ7ZmlsbDp1cmwoI1NWR0lEXzQ0Xyk7fQ0KCS5zdDU3e2ZpbGw6dXJsKCNTVkdJRF80NV8pO30NCgkuc3Q1OHtmaWxsOnVybCgjU1ZHSURfNDZfKTt9DQoJLnN0NTl7ZmlsbDp1cmwoI1NWR0lEXzQ3Xyk7fQ0KCS5zdDYwe2ZpbGw6dXJsKCNTVkdJRF80OF8pO30NCjwvc3R5bGU+DQo8Zz4NCgk8Zz4NCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxOTkuNTMzIiB5MT0iMjAxLjkwNyIgeDI9IjM5LjY3ODciIHkyPSI0Mi4wNTI3Ij4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzAwMzYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMjI5NyIgc3R5bGU9InN0b3AtY29sb3I6IzE4MDIzQiIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC41MTIyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjYwOTRBIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjgyMTEiIHN0eWxlPSJzdG9wLWNvbG9yOiMzRDE1NjMiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM0RTFENzUiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MSIgZD0iTTE4OC44ODcsMzUuNDkyYy0xNC41MDEtOS40NzItMzMuMDQ2LTEyLjUzOC00My4yODEtMTMuNjA5Yy0xMC45NTQtMS4xNDUtMjAuNDY4LTAuOTQzLTI4LjgzNiwwLjI4NQ0KCQkJYy0wLjcwOS0wLjAwOS0xLjQxNC0wLjAzNy0yLjEyNy0wLjAzN2MtMC41NDQsMC0xLjA4LDAuMDIzLTEuNjI3LDAuMDI5YzAuMjI1LTAuMjc1LDAuMzgxLTAuNDQ1LDAuMzgxLTAuNDQ1DQoJCQlzLTAuNDQsMC4wNjktMS4zMDQsMC40NmMtMi43MTcsMC4wNDQtNS40MjEsMC4xMzgtOC4wODUsMC4zMmMzLjcxMS00LjA2OCw2Ljc1MS02LjIsNi43NTEtNi4ycy0zLjYwOCwwLjUyOC0xMC4xOTIsNi40OTYNCgkJCWMtMy4xMzIsMC4yODgtNi4yMjEsMC42Ny05LjI1OCwxLjE0NWM2LjkxOC05LjM2MiwxNC4xNTUtMTMuMzA0LDE0LjE1NS0xMy4zMDRzLTguNzcyLTEuNzg2LTIyLjUwNywxMi4wMTYNCgkJCWMtMS4xNDksMS4xNTUtMi4yMTUsMi4zNTYtMy4yNDYsMy41NzJDMzkuNjgsMzUuOTA3LDExLjAzLDYxLjc1OCwxMS4wMyw5Mi4xMzljMCw1Ljk1OC0xLjgyOSwxMi41MTEsMC4xNDMsMTkuMDU0DQoJCQljLTAuNzg4LDEwLjQ1MywwLjg5LDM4Ljk3NSwwLjg5LDM4Ljk3NXMxMC44MzcsNTguNjQ5LDUyLjUxLDY4Ljg0NmMwLjY2MiwwLjE1OC04LjcwNy0xNC42Mi0xMi44NTEtMzIuNDQyDQoJCQljOC4wNjksOC4yMDgsMTcuNjg1LDE0LjY5OSwyOC40NzgsMTUuODI0YzEuMzI1LDAuMTM3LTYuMTY1LTguNjQtMTIuNzI1LTE5LjIzNGw5NC42OTgsMzEuOTA2DQoJCQljNDkuNTI5LTIxLjI3NCw0My43NjMtMTkuMzU3LDU0LjM5Ny0zMC44NzVjMjMuNDI4LTI1LjM2LDI2LjcwOC0zOS43NSwyMC44MDYtODIuMjM1DQoJCQlDMjMzLjM4Myw3My4yNzksMjEyLjIxNiw0NC44NzUsMTg4Ljg4NywzNS40OTJ6Ii8+DQoJCTxwb2x5Z29uIGNsYXNzPSJzdDIiIHBvaW50cz0iMjIuNjg3LDYyLjI3NiA4LjU0NiwxNDIuNjggMTYuMzg3LDE2Ni45NzQgMTcyLjkxMSwyMTkuMDE1IDIwMS45MzksOTUuNTkxIAkJIi8+DQoJCTxnPg0KCQkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTIzLjEyOCw2NS4wMWMwLjc4NSwxLjY4OSwwLjU1NCwyLjA4OSwwLjA2NSwyLjA4OWMtMC4yMiwwLTAuNDkyLTAuMDgxLTAuNzQ3LTAuMTYxDQoJCQkJYy0wLjI1NS0wLjA4MS0wLjQ5NC0wLjE2MS0wLjY0OC0wLjE2MWMtMC40MzMsMC0wLjE4OSwwLjYzOSwyLjI2MywzLjcyYzMuNDY4LDQuNDA2LDU0LjM5OSw4MS4yOTMsNTcuMTgyLDgxLjI5Mw0KCQkJCWMwLjAxNSwwLDAuMDI4LTAuMDAyLDAuMDQtMC4wMDZjMjMuNzEtOC40NDgsMTI0LjU0My00My4wNTgsMTI0LjU0My00My4wNThMMTk1LjUxLDkzLjY5N0wyMy4xMjgsNjUuMDEiLz4NCgkJPC9nPg0KCQk8cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMjQuNjA3LDYzLjEyMWMwLDAsMC43NiwzLjkzMiw0LjI4MSw4LjI4NGMzLjUsNC4zOTIsNTAuNTEsNzUuNTcxLDUyLjg2OSw3NC45NDQNCgkJCWMzMC43OTUtOC4xNzYsMTQyLjUyNS01MS42NzQsMTQyLjUyNS01MS42NzRMMjQuNjA3LDYzLjEyMXoiLz4NCgkJPHBvbHlnb24gY2xhc3M9InN0MyIgcG9pbnRzPSIxNjcuMzIxLDIxNy4xNjEgMTguNTY4LDE2Ny43MDMgMTkuMDk0LDE3MS4xNzggMTY4Ljk3NiwyMjEuMDEyIAkJIi8+DQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTAuMjQyOCIgeTE9Ijk1LjMxMTMiIHgyPSI1Ny43MDM5IiB5Mj0iOTUuMzExMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMzE1NkE4Ii8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjI0NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiMzMzUxQTQiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuNTM2NSIgc3R5bGU9InN0b3AtY29sb3I6IzNCNDM5NyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC44NDUzIiBzdHlsZT0ic3RvcC1jb2xvcjojNDcyQzgyIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojNEUxRDc1Ii8+DQoJCTwvbGluZWFyR3JhZGllbnQ+DQoJCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik01Ny43MDQsNTkuNzk1YzAsMC01NC4xMjIsMTUuODUtMjkuMjg4LDcxLjAzM2MwLDAtMTEuMzg3LTEwLjQyNi0xOC4xNjctMjMuNzU3DQoJCQlDOS45NDQsMTA2LjQ3NCwyMS41NSw2NS4yNDIsMjEuNTUsNjUuMjQyTDU3LjcwNCw1OS43OTV6Ii8+DQoJCQ0KCQkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9IjU5LjA3MzIiIGN5PSIxMTMuOTIzMiIgcj0iODUuMjQ2NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxLjQ1IDAgLTUxLjI2NTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjE2NTQiIHN0eWxlPSJzdG9wLWNvbG9yOiMxNENEREEiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuNTQ3OCIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC42NTQ2IiBzdHlsZT0ic3RvcC1jb2xvcjojMjY1OEFDIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjg2NCIgc3R5bGU9InN0b3AtY29sb3I6IzM3M0Y4MSIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzQzMkQ2MiIvPg0KCQk8L3JhZGlhbEdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3Q2IiBkPSJNMjguNDE2LDEzMC44MjhjLTQuNzA3LTAuMDgxLTEyLjI2OS0zLjk2NC0xNC43MjItOC42NjVjLTMuMDY2LDUxLjA5OCwxNy43ODIsODAuOTM5LDUwLjg4LDk2Ljg1Mw0KCQkJQzUzLjc1OSwyMTcuNzc2LDAsMTg5LjQwNywwLDEyMS4xNEMwLDYzLjA5Myw0Ni4wNiwxMS4yMDgsMTE4LjE0Miw4LjgzMWMwLjQ0MiwzLjI1NC0zNS43MzYsMTEuNDE0LTM2Ljg5MywxNS4yNTENCgkJCWMtMS43OTYsNS45NzItNS45MjQsMTIuNDczLTkuNDA2LDE3LjY4NGMtNC43MTgsNy4wNjEsNi41NTcsMTMuMDk5LTEuNzI5LDE1LjAwMWMtMTIuNDY4LDIuODYxLTI5LjA5OCwxLjI3Ny00MS4zNjEsMTcuMjE5DQoJCQlDMTAuMzE5LDk3Ljk1MSwyMi42MiwxMjUuMzY1LDI4LjQxNiwxMzAuODI4eiIvPg0KCQk8Zz4NCgkJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iNDQuNTM4NyIgeTE9IjU3Ljg5NzUiIHgyPSIxOTEuNTE1IiB5Mj0iNTcuODk3NSI+DQoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuMTg0NiIgc3R5bGU9InN0b3AtY29sb3I6IzJCNTFBQyIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuNjgyNiIgc3R5bGU9InN0b3AtY29sb3I6IzQ0MkM4NCIvPg0KCQkJCTxzdG9wICBvZmZzZXQ9IjAuOTQwOSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQkJPC9saW5lYXJHcmFkaWVudD4NCgkJCTxwYXRoIGNsYXNzPSJzdDciIGQ9Ik0xMzcuMDQ4LDEwLjY5OWMtNDYuNjgyLTMuNTgyLTcwLjcwNywxNS4wOTctODYuMTMsMzYuODE3Yy01LjYxNyw3LjkwNi01LjAwMiwxNS4xNjYtMy4wNjgsMjMuOTM3DQoJCQkJYzAuODMxLDMuNzQ0LDEuNjcxLDUuNTM4LDAuNjU5LDkuMzU1Yy0wLjU1OCwyLjEwNi0wLjQ2NSw0LjA3Mi0xLjE1OCw1LjMxNGMtMC45NTksMS43MTctMi4xOCwzLjU5NC0yLjU4OSw2LjY3Nw0KCQkJCWMtMS4wMjIsNy42OTksMS43MDMsMTAuMTUxLDMuNDA2LDEyLjc0MWMyLjQyNi0yLjQwOSw3LjE2NS04LjA3OSwxNS43MS0xMS40NjZjOC41NDUtMy4zODcsMTQuMTY3LTguNDc3LDI0Ljg3Ni0xMy45NDENCgkJCQljMTQuNjMyLTcuNDYzLDMxLjc4MiwzLjg1OSw2NC4zLTYuNzk2YzEwLjAwNi0zLjI3OSwzMy4wMDItMzcuMzQ0LDM4LjQ2MS0zOC42NTJDMTc2LjMxMiwxNy44NzMsMTUwLjQ0OCwxMS43MjYsMTM3LjA0OCwxMC42OTl6DQoJCQkJIi8+DQoJCTwvZz4NCgkJPHBhdGggY2xhc3M9InN0OCIgZD0iTTEwNi4yMDcsMC4wMzJjMCwwLTguMzM1LDQuMDI2LTExLjk2NSwxMS4zMDFjOC4zODEtNC4yMjUsMTMuMjQ2LTYuNTMzLDE1LjU0Ni02LjgwOA0KCQkJYzAsMC0yLjIwMywxLjA2Ny00LjkzNSw2Ljg3YzQuODMtMS41NDcsNi40OTMtMi41MjIsNy44MTktMi41MzdjMCwwLTAuMzg1LDAuNjEtMC43MzcsNi40MDINCgkJCWMtNy40MTctMi40MDQtMjEuNjkzLDAuMzk3LTI5LjI4Nyw1LjE1M0M4MC4wNzIsNi42NzgsMTA2LjIwNywwLjAzMiwxMDYuMjA3LDAuMDMyeiIvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzVfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjY2LjE3MzYiIHkxPSIyMy4yMDU2IiB4Mj0iMTY3LjI2NDIiIHkyPSIxMTEuMDgyMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjAyMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiM0OEE4RTAiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMzg4MyIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC40OTY4IiBzdHlsZT0ic3RvcC1jb2xvcjojMkI1MUFDIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjc4OTIiIHN0eWxlPSJzdG9wLWNvbG9yOiM0NDJDODQiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuOTQwOSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3Q5IiBkPSJNMTM5LjM3OSw4LjYzQzEyNS4wNyw2Ljc3NiwxMTMuMTA5LDcuMTQxLDEwMi45NCw5LjFjMy4xOTgtMy4wNjUsNi44OTgtNC41NzUsNi44OTgtNC41NzUNCgkJCWMtNC43OTUsMC40MjQtMTAuNzgxLDMuNTU0LTE1LjkxNyw2Ljg2OGMtMi41ODgsMC44MjYtNS4wNTQsMS43NTgtNy4zOSwyLjc5OWMxLjQzLTEuODg1LDMuMDk0LTMuODk5LDQuNzItNS40NDUNCgkJCWM2LjAzOS01Ljc0MywxNS4wMDYtOC43MTUsMTUuMDA2LTguNzE1Qzk4LjYwMy0wLjUzLDcyLjk4OSw2LjAyNyw1Ny41NzYsMzcuMjQ1Yy0yLjUyNiwzLjA3Ny00Ljg4Myw2LjIzNS03LjEyOSw5LjM5OA0KCQkJYy01Ljc5OCw4LjE2NC01LjE2MiwxNS42NTgtMy4xNjIsMjQuNzE1YzAuODUyLDMuODY3LDEuMDA5LDEwLjA0LDAuMTY4LDE0LjAyOWMtMC4xNjgsMC43OTktMi4zNjMsMi44NjMtMi45MjYsOC40MjgNCgkJCWMtMC42MDIsNS45MDUsMS41MDUsOC44MDQsMy41ODIsMTEuMjAzYzcuMzgtMTAuNzkyLDE0LjY2MS0xMi45MzEsMTQuNjYxLTEyLjkzMUM3My4xLDg3Ljg1NSw3Ny40LDgzLjMzNSw4OC40NTgsNzcuNjk0DQoJCQljMTUuMTA4LTcuNzA5LDY3LjkzOSwxNy40NSwxMDEuNTEyLDYuNDQ4YzEwLjMzMi0zLjM4NC0zLjk3Ny00Ny4zNTksMS42NjMtNDguNzA5QzE3NS45MzQsMTguMDczLDE1My4xMzksMTAuNDEzLDEzOS4zNzksOC42M3oiDQoJCQkvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE5LjY3NjIiIHkxPSIzMzcuNDEzOSIgeDI9IjIxNy44MzUzIiB5Mj0iNDMuNjMwOSI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjM3ODciIHN0eWxlPSJzdG9wLWNvbG9yOiMzMTU2QTgiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM0RTFENzUiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MTAiIGQ9Ik0yNDQuMTc2LDEwMy4yODhjLTguMjc2LTQzLjIzNy00OC4wOTYtODIuNTcyLTgwLjExNy04NC43NTJjLTE0LjIxMS0wLjk2OC05Ljg0Nyw2LjMxOS0xOC43MzksOS4wOTQNCgkJCWMtMzguMzIsMTEuOTU5LTM4LjkwNiwxOC45NDEtMzguOTA2LDE4Ljk0MWM4MS4yNTIsMy44MTksODIuNDg0LDg0LjA2NCw2MC43MjQsMTA0LjM2NmM2LjEyMy0xLjQyOCwxMi43NjItOC45MTQsMTguODU5LTIwLjY2Ng0KCQkJYy0wLjczMiw0LjkzMS0xLjM2LDEwLjk4LTIuMjc0LDE3LjcyOWMtMi43ODgsMjAuNTk1LDAuODIzLDYzLjYxNC01OC4zNTYsOTIuNDA1YzAsMCwzMi4zNzItMi42NDYsNDguNDI1LTIwLjcxNw0KCQkJYy02LjUyOCwxNS4wMTItMjQuNDQxLDIzLjEyMS0yNC40NDEsMjMuMTIxYzEzLjE4Mi0xLjkyOCw0Ny44MS0xMi4xNDYsNjkuODY4LTM5LjczMg0KCQkJQzI0NC4xODUsMTcxLjg1MiwyNTEuNjkzLDE0Mi41NTgsMjQ0LjE3NiwxMDMuMjg4eiIvPg0KCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzdfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijk2Ljc0NTIiIHkxPSIyNzguNjQ1OCIgeDI9IjIwNi4zMTc1IiB5Mj0iMzIuNTQyMyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMjlBQkUyIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjc3MzMiIHN0eWxlPSJzdG9wLWNvbG9yOiMzODVBQTYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuODU3NSIgc3R5bGU9InN0b3AtY29sb3I6IzQxNDI5MyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6IzRFMUQ3NSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTE2NC45OTMsMTgyLjIyMWMwLDAsMjYuMzk2LTcuMzgsMzQuOTAzLTIxLjYzM2MtMS4wMzIsMTYuNjE5LTE2LjEwNywzMy42NjItMTYuMTA3LDMzLjY2Mg0KCQkJczIyLjAzOC00LjQ2LDMxLjQzNi0xOS45NjhjLTEuMjI0LDEzLjk5NC0xOC4xOTEsMzIuOTA3LTE4LjE5MSwzMi45MDdjMTcuMzQ2LTMuMTEzLDYwLjkzLTMwLjY0NSw0Ny4xNDMtMTAzLjkwMQ0KCQkJYy04LjE0Mi00My4yNjItNDguMDk2LTgyLjU3Mi04MC4xMTctODQuNzUyYy0xNC4yMTEtMC45NjgtOS44NDcsNi4zMTktMTguNzM5LDkuMDk0Yy0zOC4zMiwxMS45NTktMzguOTA2LDE4Ljk0MS0zOC45MDYsMTguOTQxDQoJCQljODEuMjUyLDMuODE5LDEwMi44NDQsNDYuMzQ0LDYwLjcyNCwxMDMuMjMxYzYuMTIzLTEuNDI5LDguNTc4LTQuNzk0LDEzLjE3OC0xMC4zMDENCgkJCUMxODAuMzE1LDEzOS41MDEsMTgyLjQwMSwxNjEuMjgxLDE2NC45OTMsMTgyLjIyMXoiLz4NCgkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF84XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI0OC4yNjg2IiB5MT0iOTIuMDMzNyIgeDI9IjU0LjI0MTQiIHkyPSI5NS40NjgzIj4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNCMERDRDYiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM1M0FDRTAiLz4NCgkJPC9saW5lYXJHcmFkaWVudD4NCgkJPHBhdGggY2xhc3M9InN0MTIiIGQ9Ik02MC42MDksODUuNTY3YzAsMC00LjcxOSwzLjMwMS04LjEzNiwyLjQ2Yy00LjA0NS0wLjk5My00LjczLTQuOTEzLTQuNzMtNC45MTMNCgkJCWMtMC4wODksMC44MDMtMC4xOTIsMS41NzgtMC4zNDEsMi4yNzNjLTAuMTY4LDAuNzk5LTIuMzYzLDIuODYzLTIuOTI2LDguNDI4Yy0wLjYwMiw1LjkwNSwxLjYxNSw5LjMyNSwzLjY5MiwxMS43MjQNCgkJCUM1NS41NDksOTQuNzQ3LDYyLjcyLDkyLjA4Nyw2Mi43Miw5Mi4wODdDNTkuOTExLDkxLjEwNSw2MC42MDksODUuNTY3LDYwLjYwOSw4NS41Njd6Ii8+DQoJCTxkZWZzPg0KCQkJPGZpbHRlciBpZD0iQWRvYmVfT3BhY2l0eU1hc2tGaWx0ZXIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMTYyLjY4IiB5PSIxOC4zNTUiIHdpZHRoPSIxNC45MjciIGhlaWdodD0iNi42MjkiPg0KCQkJCTxmZUNvbG9yTWF0cml4ICB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMSAwIDAgMCAwICAwIDEgMCAwIDAgIDAgMCAxIDAgMCAgMCAwIDAgMSAwIi8+DQoJCQk8L2ZpbHRlcj4NCgkJPC9kZWZzPg0KCQk8bWFzayBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIxNjIuNjgiIHk9IjE4LjM1NSIgd2lkdGg9IjE0LjkyNyIgaGVpZ2h0PSI2LjYyOSIgaWQ9IlNWR0lEXzlfIj4NCgkJCTxnIGNsYXNzPSJzdDEzIj4NCgkJCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzEwXyIgY3g9IjE1NC4zODQiIGN5PSI2Ny45OTg1IiByPSI1MS45Njc1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQoJCQkJCTxzdG9wICBvZmZzZXQ9IjAuODY4IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGIi8+DQoJCQkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDAiLz4NCgkJCQk8L3JhZGlhbEdyYWRpZW50Pg0KCQkJCTxyZWN0IHg9IjkxLjI5NSIgeT0iLTcuMjE4IiBjbGFzcz0ic3QxNCIgd2lkdGg9IjEwMC4wMTUiIGhlaWdodD0iOTMuMzM5Ii8+DQoJCQk8L2c+DQoJCTwvbWFzaz4NCgkJPGcgY2xhc3M9InN0MTUiPg0KCQkJPGcgY2xhc3M9InN0MTYiPg0KCQkJCTxnIGNsYXNzPSJzdDE3Ij4NCgkJCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8xMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTc2LjIxMzkiIHkxPSIyMy4wODUxIiB4Mj0iMTY0LjI0MDMiIHkyPSIyMC41NTU0Ij4NCgkJCQkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiMzMDkyQjkiLz4NCgkJCQkJCTxzdG9wICBvZmZzZXQ9IjAuMjE5OSIgc3R5bGU9InN0b3AtY29sb3I6IzI1OERCNiIvPg0KCQkJCQkJPHN0b3AgIG9mZnNldD0iMC42NTY0IiBzdHlsZT0ic3RvcC1jb2xvcjojMTY4NUIxIi8+DQoJCQkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMTA4MkFGIi8+DQoJCQkJCTwvbGluZWFyR3JhZGllbnQ+DQoJCQkJCTxwYXRoIGNsYXNzPSJzdDE4IiBkPSJNMTYzLjUxMywxOC40MzRjMS4xMDYtMC4yODcsNS42MjEsMC4yMDQsOC41ODQsMS41MzNjMi45NjQsMS4zMjksOC4wNzMsMy42NzksMy45ODYsNC43MDENCgkJCQkJCWMtNC4wODgsMS4wMjItNi40MzgtMC42MTMtOC40ODItMi4zNTFTMTYwLjc1NCwxOS4xNDksMTYzLjUxMywxOC40MzR6Ii8+DQoJCQkJPC9nPg0KCQkJPC9nPg0KCQk8L2c+DQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMTJfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjgwLjc4MzgiIHkxPSIzOC4wMjUyIiB4Mj0iOTAuNjM3IiB5Mj0iNzcuNTQ0MyI+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjAwNzQiIHN0eWxlPSJzdG9wLWNvbG9yOiMxMzk4RDE7c3RvcC1vcGFjaXR5OjAiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMjQ4MiIgc3R5bGU9InN0b3AtY29sb3I6IzExODdDMjtzdG9wLW9wYWNpdHk6MC42MTk3Ii8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjY0MjIiIHN0eWxlPSJzdG9wLWNvbG9yOiMzRjY0OTk7c3RvcC1vcGFjaXR5OjAuNzEiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiMyRjQyODI7c3RvcC1vcGFjaXR5OjAuNSIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTYxLjA1MSw4NC45MjFjMCwwLDI1Ljg4OC00Mi42NjIsNDkuMjkyLTU0LjE3NWMyLjE3My0xLjA5My0zMi40MDUsOS4xOTEtNDYuMzIsMjQuNTUNCgkJCUM1NS43NTIsNjQuNDI1LDYwLjEzMiw4Mi4yOTgsNjEuMDUxLDg0LjkyMXoiLz4NCgkJPHBhdGggY2xhc3M9InN0MjAiIGQ9Ik02MS4wNTEsODQuOTIxYzAuMDI0LTAuMDE1LDAuMDUtMC4wMywwLjA3NS0wLjA0NWM2LjY5NC00LjEzNiwxOC4xNjYtNi41MTgsMjEuODY0LTE0LjAxNQ0KCQkJYzE0LjIzNy0yOC44NjksMjcuMzU0LTQwLjExNSwyNy4zNTQtNDAuMTE1Qzg2LjkzOSw0Mi4yNTksNjEuMDUxLDg0LjkyMSw2MS4wNTEsODQuOTIxeiIvPg0KCQk8cGF0aCBjbGFzcz0ic3QyMSIgZD0iTTYzLjUxMiw3Ny4xMThjMCwwLTQuNjY2LTcuMTU5LDIuMDUzLTEzLjY4N2MzLjU0Ni0zLjQ0LDguOTE5LTEuNTI5LDkuNTQtMC45MQ0KCQkJYzIuNjQ0LDIuNjIyLDAuOTgyLDguMTU2LTEuMzk4LDExLjI4OEM3Mi4zNjIsNzUuNTczLDY4LjQ0OCw3OC4zMTksNjMuNTEyLDc3LjExOHoiLz4NCgkJDQoJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzEzXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI0OC43MzgzIiB5MT0iMTQuMzczIiB4Mj0iNDMuMTk5MyIgeTI9IjExLjMwMjciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC45OTk0IDAuMDM0OSAtMC4wMzQ5IDAuOTk5NCAyNC41OTA2IDU3LjEyMDIpIj4NCgkJCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGOUMyMUIiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuMTQ3OSIgc3R5bGU9InN0b3AtY29sb3I6I0YzQkExQiIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMC4zNzg3IiBzdHlsZT0ic3RvcC1jb2xvcjojRTNBNDFCIi8+DQoJCQk8c3RvcCAgb2Zmc2V0PSIwLjY2MzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOTgwMUMiLz4NCgkJCTxzdG9wICBvZmZzZXQ9IjAuOTg4NCIgc3R5bGU9InN0b3AtY29sb3I6I0E0NEUxQyIvPg0KCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNEMxQyIvPg0KCQk8L2xpbmVhckdyYWRpZW50Pg0KCQk8cGF0aCBjbGFzcz0ic3QyMiIgZD0iTTY2LjE4Nyw3Ni42NzRjMCwwLTMuMjI0LTQuOTQ5LDEuNDIyLTkuNDU5YzIuNDQ2LTIuMzc2LDYuMTYxLTEuMDU2LDYuNTkyLTAuNjMNCgkJCWMxLjgyNiwxLjgxMiwwLjY3Niw1LjYzNy0wLjk2OCw3LjhDNzIuMzA0LDc1LjYwOCw2OS41OTgsNzcuNTA0LDY2LjE4Nyw3Ni42NzR6Ii8+DQoJCTxwYXRoIGQ9Ik03Mi42MjMsNzEuMzkzYy0wLjA3MiwxLjk3OC0xLjc0NiwzLjUyMi0zLjczOCwzLjQ1NGMtMS45OTYtMC4wNjktMy41NTgtMS43MjYtMy40ODctMy43MDQNCgkJCWMwLjA3MS0xLjk3NywxLjc0NC0zLjUyMSwzLjc0MS0zLjQ1M0M3MS4xMzEsNjcuNzU5LDcyLjY5Miw2OS40MTcsNzIuNjIzLDcxLjM5M3oiLz4NCgk8L2c+DQoJPGNpcmNsZSBjbGFzcz0ic3QyNCIgY3g9IjY2LjcyNSIgY3k9IjcwLjI4NyIgcj0iMS4xMzYiLz4NCgk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzE0XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyMDYuMjExMyIgeTE9IjEzMC4xMzkxIiB4Mj0iMTY5LjQyOTgiIHkyPSI0Ny41MjY0Ij4NCgkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzQwOUVDMyIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjYyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjA2MUJEIi8+DQoJPC9saW5lYXJHcmFkaWVudD4NCgk8cGF0aCBjbGFzcz0ic3QyMyIgZD0iTTIyOC41MDUsNjUuMDFjLTE3LjcyMS0yNi45NzYtMzEuNzYxLTMzLjgzMS0zMS43NjEtMzMuODMxczAuNjQ1LDE5LjY1LDEwLjQ4NCwyOS4xMjgNCgkJYzEuMTI0LDEuMDgzLTExLjc3NC04LjQzMi0xMS43NzQtOC40MzJzLTIuNzU4LDkuMDc2LDMuNTYyLDE5LjUxYy0xLjgzNi0yLjQzOS0zLjA1MS0zLjM2My0zLjA1MS0zLjM2Mw0KCQlzLTExLjkwOCw1LjQ5MS0xNS40MjMsMTMuMTA5Yy0xLjgxNS0zLjQyNi0zLjE3Ni01LjQ0NC0zLjE3Ni01LjQ0NHMtOC4yMzYsMTYuNDM3LTcuMjAxLDM1LjQ5NQ0KCQljMS42ODQsMzAuOTg4LTUuODAzLDQyLjQwNC01LjgwMyw0Mi40MDRzMjAuMDU3LTcuNjk1LDI5LjY3Ni0zMi40NjhjMy45NzQsMTAuNTMzLTAuMTIxLDIxLjYxOS0wLjEyMSwyMS42MTkNCgkJczE2LjIwNi0xMi4xMDksMTkuNjkxLTM0LjE4YzMuODYzLDYuMjMsMi43MjcsMTguNjY0LDIuNzI3LDE4LjY2NHMxMC4zNDQtMTQuNDAyLDEwLjU5Ni0zMC4wODYNCgkJYzQuNzk0LDMuMzQzLDUuMjM1LDE2LjM5OSw1LjIzNSwxNi4zOTlTMjQ3LjUwMiw5My45MjgsMjI4LjUwNSw2NS4wMXoiLz4NCgk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzE1XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxNzYuNzYwMyIgeTE9IjEwMy4wNjEiIHgyPSIxNTAuNDA2OSIgeTI9IjIxLjk1MzYiPg0KCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMTRCMkRBIi8+DQoJCTxzdG9wICBvZmZzZXQ9IjAuNDAyOCIgc3R5bGU9InN0b3AtY29sb3I6IzI5N0NDQyIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjUwNzciIHN0eWxlPSJzdG9wLWNvbG9yOiMyNTZGQzUiLz4NCgkJPHN0b3AgIG9mZnNldD0iMC42NDkyIiBzdHlsZT0ic3RvcC1jb2xvcjojMjE2NEJGIi8+DQoJCTxzdG9wICBvZmZzZXQ9IjAuODE2MiIgc3R5bGU9InN0b3AtY29sb3I6IzIwNjFCRCIvPg0KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiMyMDYxQkQiLz4NCgk8L2xpbmVhckdyYWRpZW50Pg0KCTxwYXRoIGNsYXNzPSJzdDI1IiBkPSJNMjExLjI4Miw0Ni4xNThjLTQuNjMxLTguNjMtMTIuODAzLTE0LjEzLTE5Ljk4Ni0xOC41ODJjLTE3LjkwOS0xMS4xMDUtMjkuNDI3LTEyLjY2NS0yOS40MjctMTIuNjY1DQoJCXMtMTYuNTI4LDMuMDc0LTEzLjY4OSw3LjY3MmMwLjE0NiwwLjIzNiwwLjQ4NywwLjUzNSwwLjk2OCwwLjg3N2MtMTQuNDk4LTYuNjc4LTIyLjcyMiw4LjY3Ny0yMi43MjIsOC42NzcNCgkJYy04LjI4NC0wLjUwMy0xOC4zNzEsMy41NzUtMjEuMzEyLDE0LjQ5OWMtMC4zMDUsMS4xMzQsMy43MTEsMC40OTYsNS43NzcsMC45NDVjMTIuMDc5LDIuNjI2LDIzLjQ1LDguMzIsMjguNjc1LDExLjEzNA0KCQljMTIuMTU0LDYuNTQ4LDE5LjM2NSwxNy40NTEsMjMuNTI4LDI1LjYyOWM1LjAzNyw5Ljg5NCw3LjA5NCwyNy4zMDQsNy4wOTQsMjcuMzA0czEzLjI1My0xOC4yMDUsMTAuMDg2LTI3LjU1Mg0KCQljNS4yNDksMy4yNiw2LjI4NSwxNC44OTEsNi4yODUsMTQuODkxczguODM1LTEzLjgzOCw2LjIyMy0yNS44OTFjNi44MTUsNC4xNTMsNy4wNDIsMTIuNjAxLDcuMDQyLDEyLjYwMXM2LjkzOS05LjYzMSwzLjgwMy0yNS40MjcNCgkJYzYuODU4LDUuNDUzLDguMjkzLDEyLjUxNyw4LjI5MywxMi41MTdTMjE3LjUyNiw1Ny43OTQsMjExLjI4Miw0Ni4xNTh6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\"\nLABEL oc.keyword=\"thunderbird,mail\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"thunderbird.desktop\"\nLABEL oc.launch=\"Mail.Thunderbird\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nLABEL oc.name=\"thunderbird\"\nLABEL oc.displayname=\"Thunderbird\"\nLABEL oc.path=\"/usr/bin/thunderbird\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/mailto\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"thunderbird\"\nENV APPBIN \"/usr/bin/thunderbird\"\nENV APP \"/usr/bin/thunderbird\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/thunderbird/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/thunderbird/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/thunderbird/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/thunderbird/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.18.04:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes vice libmp3lame0 git wget && apt-get clean\nRUN git clone https://github.com/stuartcarnie/vice-emu/ && mv vice-emu/vice/data/DRIVES/* /usr/lib/vice/C64 && cd /vice-emu/vice/data/C64 && mv chargen kernal basic /usr/lib/vice/C64\nRUN mkdir /usr/lib/vice/C64/cartridge\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_1-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_1-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_2-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_2-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_3-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_3-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/Super_Games_4-8000.bin -O /usr/lib/vice/C64/cartridge/Super_Games_4-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/C64638_Jack_Attack-8000.bin -O /usr/lib/vice/C64/cartridge/C64638_Jack_Attack-8000.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/315102-01.bin -O /usr/lib/vice/C64/cartridge/315102-01.bin\nRUN wget http://www.zimmers.net/anonftp/pub/cbm/firmware/misc/c64carts/315103-01.bin -O /usr/lib/vice/C64/cartridge/315103-01.bin\nLABEL oc.icon=\"c64.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNDAiPg0KICA8cGF0aCBkPSJNODMsOTcuMTEwOSBMODMsMTI4LjU4MzMgQTYxLDYxIDAgMSwxIDgzLDExLjQxNjcgTDgzLDQyLjg4OTEgQTMyLDMyIDAgMSwwIDgzLDk3LjExMDkiIHN0cm9rZT0ibm9uZSIgZmlsbD0iIzAwMjI1NSIgLz4NCiAgPHBvbHlnb24gcG9pbnRzPSI4Myw0MyA4Myw2NyAxMTEsNjcgMTM1LDQzIiBzdHJva2U9Im5vbmUiIGZpbGw9IiMwMDIyNTUiIC8+DQogIDxwb2x5Z29uIHBvaW50cz0iODMsOTcgODMsNzMgMTExLDczIDEzNSw5NyIgc3Ryb2tlPSJub25lIiBmaWxsPSIjZmYwMDAwIiAvPg0KPC9zdmc+\"\nLABEL oc.keyword=\"vice,x64,vice,commodore,c64\"\nLABEL oc.cat=\"games\"\nLABEL oc.desktopfile=\"x64.desktop\"\nLABEL oc.launch=\"x64.X64\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.18.04\"\nLABEL oc.name=\"vice\"\nLABEL oc.displayname=\"Commodore64\"\nLABEL oc.path=\"/usr/bin/x64\"\nLABEL oc.type=app\nLABEL oc.fileextensions=\"crt;bin\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vice\"\nENV APPBIN \"/usr/bin/x64\"\nENV APP \"/usr/bin/x64\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vice/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vice/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vice/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vice/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update ffmpeg vlc-qt dbus dbus-x11 mesa-dri-gallium\nLABEL oc.icon=\"circle_vlc.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQ2FsY3VsYXRvciIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDI0IDEwMjQiIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVTcGVlZCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZlYzU4OSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iNTIwIiB4Mj0iNTIwIiB5MT0iNCIgeTI9IjEwMjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjZSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjUyMC4zMiIgeDI9IjUyMC4zMiIgeTE9Ii0xMzguNDYiIHkyPSIxNDg0LjgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmZGE2NCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjM1MTUyIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjQ0OTc2Ii8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNDkuNTgyIiB4Mj0iNDkuNTgyIiB5MT0iLTQwLjc2NCIgeTI9IjEyMC45MiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDMuMjQ1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIuNiIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDdkN2Q3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImYiIHg9Ii0uMDM0ODc1IiB5PSItLjAzNzIiIHdpZHRoPSIxLjA2OTgiIGhlaWdodD0iMS4wNzQ0IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjM5NDk5ODkiLz4KICA8L2ZpbHRlcj4KICA8cmFkaWFsR3JhZGllbnQgaWQ9ImEiIGN4PSI1MTEuOCIgY3k9IjUxMS4zNSIgcj0iNDcxLjQ1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDgwOCAuMDI0NDQyIC0uMDI0NDM5IDEuMDgwNiAtMjguODM5IC01My43NDUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmRhNjQiIHN0b3Atb3BhY2l0eT0iLjA4NTU2MiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmYjdjMzgiIG9mZnNldD0iLjkxMDczIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmMzRmMTciIG9mZnNldD0iMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjE0LjE0MzUiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxnIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM3NjIgMCAwIC4wNjM3NjIgLS42MTQyNCAtLjY3OCkiIHN0cm9rZS13aWR0aD0iMTUuNjgzIj4KICA8ZyBpZD0ic2hhZG93IiB0cmFuc2Zvcm09Im1hdHJpeCguOTk2MDkgMCAwIC45OTYwOSAyIDIpIj48L2c+CiAgPGcgaWQ9ImNpcmNsZSIgdHJhbnNmb3JtPSJtYXRyaXgoLjk5Nzk4IDAgMCAuOTk3OTggLjczMTMxIDIuMTgwNCkiIGZpbGw9InVybCgjZCkiPgogICA8ZyBzdHJva2Utd2lkdGg9IjE1LjY4MyI+CiAgICA8cGF0aCBkPSJtOTgzLjI1IDUxMS4zNWMwLTcuOTUtMC4yLTE1Ljg1LTAuNS0yMy41NXEtOC0xODAuMTUtMTM3LjU1LTMwOS44NWMtOTIuMDUtOTItMjAzLjItMTM4LjA1LTMzMy40LTEzOC4wNS0xMzAuMTUgMC0yNDEuMzUgNDYuMDUtMzMzLjM1IDEzOC4wNS05Mi4wNSA5Mi0xMzguMSAyMDMuMi0xMzguMSAzMzMuNCAwIDEzMC4xNSA0Ni4wNSAyNDEuMzUgMTM4LjEgMzMzLjM1IDg2LjE1IDg2LjMgMTg5LjM1IDEzMi4xNSAzMDkuMTUgMTM3LjYgOCAwLjMgMTYgMC41IDI0LjIgMC41IDEzMC4yIDAgMjQxLjM1LTQ2LjEgMzMzLjQtMTM4LjEgOTItOTIgMTM4LjA1LTIwMy4yIDEzOC4wNS0zMzMuMzV6IiBmaWxsPSIjMDAwIiBmaWx0ZXI9InVybCgjZykiIG9wYWNpdHk9Ii4yNSIvPgogICAgPHBhdGggZD0ibTk4My4yNSA1MTEuMzVjMC03Ljk1LTAuMi0xNS44NS0wLjUtMjMuNTVxLTgtMTgwLjE1LTEzNy41NS0zMDkuODVjLTkyLjA1LTkyLTIwMy4yLTEzOC4wNS0zMzMuNC0xMzguMDUtMTMwLjE1IDAtMjQxLjM1IDQ2LjA1LTMzMy4zNSAxMzguMDUtOTIuMDUgOTItMTM4LjEgMjAzLjItMTM4LjEgMzMzLjQgMCAxMzAuMTUgNDYuMDUgMjQxLjM1IDEzOC4xIDMzMy4zNSA4Ni4xNSA4Ni4zIDE4OS4zNSAxMzIuMTUgMzA5LjE1IDEzNy42IDggMC4zIDE2IDAuNSAyNC4yIDAuNSAxMzAuMiAwIDI0MS4zNS00Ni4xIDMzMy40LTEzOC4xIDkyLTkyIDEzOC4wNS0yMDMuMiAxMzguMDUtMzMzLjM1eiIgZmlsbD0idXJsKCNjKSIvPgogICAgPHBhdGggZD0ibTk4My4yNSA1MTEuMzVjMC03Ljk1LTAuMi0xNS44NS0wLjUtMjMuNTVxLTgtMTgwLjE1LTEzNy41NS0zMDkuODVjLTkyLjA1LTkyLTIwMy4yLTEzOC4wNS0zMzMuNC0xMzguMDUtMTMwLjE1IDAtMjQxLjM1IDQ2LjA1LTMzMy4zNSAxMzguMDUtOTIuMDUgOTItMTM4LjEgMjAzLjItMTM4LjEgMzMzLjQgMCAxMzAuMTUgNDYuMDUgMjQxLjM1IDEzOC4xIDMzMy4zNSA4Ni4xNSA4Ni4zIDE4OS4zNSAxMzIuMTUgMzA5LjE1IDEzNy42IDggMC4zIDE2IDAuNSAyNC4yIDAuNSAxMzAuMiAwIDI0MS4zNS00Ni4xIDMzMy40LTEzOC4xIDkyLTkyIDEzOC4wNS0yMDMuMiAxMzguMDUtMzMzLjM1eiIgZmlsbD0idXJsKCNhKSIgb3BhY2l0eT0iLjIiLz4KICAgPC9nPgogIDwvZz4KICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCg2LjA1NjIgMCAwIDYuMDU2MiAyMTkuOSAxOTkuODMpIj4KICAgPGcgc3Ryb2tlLXdpZHRoPSIxNS42ODMiPgogICAgPHBhdGggZD0ibTQ3Ljk5OCA2My40MzRjMTEuOTUxIDAgMjEuOTU1LTQuMDYxIDIyLjU2MS05LjM2Mi0xLjc3Ny00Ljk4NS0zLjcxNS0xMC40MjEtNS42MTktMTUuNzY0LTEuMzIyIDMuODExLTguNjIzIDYuNDk4LTE2Ljk0MSA2LjQ5OC04LjMxNiAwLTE1LjYxNy0yLjY4OC0xNi45NDEtNi40OTctMS45MDQgNS4zNDItMy44NCAxMC43NzctNS42MTcgMTUuNzYzIDAuNjA0IDUuMzAxIDEwLjYwNiA5LjM2MiAyMi41NTcgOS4zNjJ6bTAtMzMuNTI2YzUuNjE3IDAgMTAuODM2LTEuNzM5IDEyLjM2My00LjQzOS0yLjEwNS01LjkxMy0zLjkxNC0xMC45ODYtNS4wNTctMTQuMTg3LTAuNzU5LTIuMTMzLTQuMjAxLTMuMjQxLTcuMzA2LTMuMjQxcy02LjU0NyAxLjEwOC03LjMwNyAzLjI0MWMtMS4xNDEgMy4yMDEtMi45NDkgOC4yNzQtNS4wNTcgMTQuMTg3IDEuNTI4IDIuNyA2Ljc0OSA0LjQzOSAxMi4zNjQgNC40Mzl6bTQzLjkwNCAzOC40NjUtMTguNzc3LTcuNTYzIDIuMTYyIDYuMDMzYy0wLjEwOSA2LjM5NC0xMi41MjEgMTEuNDg5LTI3LjI4OSAxMS40ODktMTQuNzY2IDAtMjcuMTgtNS4wOTUtMjcuMjg3LTExLjQ4OWwyLjE2LTYuMDMzLTE4Ljc3NSA3LjU2M2MtNS4yNjQgMi4xMjEtNS40ODQgNi4wNDktMC40OSA4LjcyNmwzNS4zMTIgMTguOTM1YzQuOTk0IDIuNjc3IDEzLjE2OCAyLjY3NyAxOC4xNjIgMGwzNS4zMTItMTguOTM1YzQuOTk1LTIuNjc3IDQuNzc0LTYuNjA1LTAuNDktOC43MjZ6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4yIi8+CiAgICA8cGF0aCBkPSJtNDcuOTk4IDYxLjYzN2MxMS45NTEgMCAyMS45NTUtNC4wNjEgMjIuNTYxLTkuMzYyLTEuNzc3LTQuOTg1LTMuNzE1LTEwLjQyMS01LjYxOS0xNS43NjQtMS4zMjIgMy44MTEtOC42MjMgNi40OTgtMTYuOTQxIDYuNDk4LTguMzE2IDAtMTUuNjE3LTIuNjg4LTE2Ljk0MS02LjQ5Ny0xLjkwNCA1LjM0Mi0zLjg0IDEwLjc3Ny01LjYxNyAxNS43NjMgMC42MDQgNS4zMDEgMTAuNjA2IDkuMzYyIDIyLjU1NyA5LjM2MnptMC0zMy41MjZjNS42MTcgMCAxMC44MzYtMS43MzkgMTIuMzYzLTQuNDM5LTIuMTA1LTUuOTEzLTMuOTE0LTEwLjk4Ni01LjA1Ny0xNC4xODctMC43NTktMi4xMzMtNC4yMDEtMy4yNDEtNy4zMDYtMy4yNDFzLTYuNTQ3IDEuMTA4LTcuMzA3IDMuMjQxYy0xLjE0MSAzLjIwMS0yLjk0OSA4LjI3NC01LjA1NyAxNC4xODcgMS41MjggMi43IDYuNzQ5IDQuNDM5IDEyLjM2NCA0LjQzOXptNDMuOTA0IDM4LjQ2NS0xOC43NzctNy41NjMgMi4xNjIgNi4wMzNjLTAuMTA5IDYuMzk0LTEyLjUyMSAxMS40ODktMjcuMjg5IDExLjQ4OS0xNC43NjYgMC0yNy4xOC01LjA5NS0yNy4yODctMTEuNDg5bDIuMTYtNi4wMzMtMTguNzc1IDcuNTYzYy01LjI2NCAyLjEyMS01LjQ4NCA2LjA0OS0wLjQ5IDguNzI2bDM1LjMxMiAxOC45MzVjNC45OTQgMi42NzcgMTMuMTY4IDIuNjc3IDE4LjE2MiAwbDM1LjMxMi0xOC45MzVjNC45OTUtMi42NzcgNC43NzQtNi42MDUtMC40OS04LjcyNnoiIGZpbGw9InVybCgjYikiLz4KICAgPC9nPgogIDwvZz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"vlc,vlc, videolan, video, lan, dvd\"\nLABEL oc.cat=\"utilities,office,graphics\"\nLABEL oc.desktopfile=\"vlc.desktop\"\nLABEL oc.launch=\"vlc.vlc\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"vlc\"\nLABEL oc.displayname=\"videolan\"\nLABEL oc.path=\"/usr/bin/vlc\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"video/3gpp;video/dv;video/fli;video/flv;video/mp2t;video/mp4;video/mp4v-es;video/mpeg;video/msvideo;video/ogg;video/quicktime;video/vivo;video/vnd.divx;video/vnd.rn-realvideo;video/vnd.vivo;video/webm;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flic;video/x-flv;video/x-m4v;video/x-matroska;video/x-mpeg;video/x-ms-asf;video/x-ms-asx;video/x-msvideo;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-nsv;video/x-ogm+ogg;video/x-theora+ogg;\"\nLABEL oc.fileextensions=\"asx;dts;gxf;m2v;m3u;m4v;mpeg1;mpeg2;mts;mxf;ogm;pls;bup;a52;aac;b4s;cue;divx;dv;flv;m1v;m2ts;mkv;mov;mpeg4;oma;spx;ts,vlc,vob,xspf;dat;bin;ifo;part;3g2;avi;mpeg;mpg;flac;m4a;mp1;ogg;wav;xm;3gp;srt;wmv;ac3;asf;mod;mp2;mp3;mp4;wma;mka;m4p\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vlc\"\nENV APPBIN \"/usr/bin/vlc\"\nENV APP \"/usr/bin/vlc\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vlc/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vlc/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vlc/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vlc/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/vmmacos/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktop/docker-osx:$TAG\nUSER root\nRUN yes | sudo pacman -S xorg-xauth\nLABEL oc.icon=\"MacOS_logo.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQyIDQyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0yMy4wOTEgMTQuMDE4di0wLjM0MmwtMS4wNjMgMC4wNzNjLTAuMzAxIDAuMDE5LTAuNTI3IDAuMDgzLTAuNjc5IDAuMTkxLTAuMTUyIDAuMTA5LTAuMjI4IDAuMjYtMC4yMjggMC40NTMgMCAwLjE4OCAwLjA3NSAwLjMzOCAwLjIyNiAwLjQ0OSAwLjE1IDAuMTEyIDAuMzUyIDAuMTY3IDAuNjA0IDAuMTY3IDAuMTYxIDAgMC4zMTItMC4wMjUgMC40NTEtMC4wNzRzMC4yNjEtMC4xMTggMC4zNjMtMC4yMDZjMC4xMDItMC4wODcgMC4xODItMC4xOTEgMC4yMzktMC4zMTIgMC4wNTgtMC4xMjEgMC4wODctMC4yNTQgMC4wODctMC4zOTl6bS0yLjA5MS0xMy43NjhjLTExLjU3OSAwLTIwLjc1IDkuMTcxLTIwLjc1IDIwLjc1IDAgMTEuNTggOS4xNzEgMjAuNzUgMjAuNzUgMjAuNzVzMjAuNzUtOS4xNyAyMC43NS0yMC43NWMwLTExLjU3OS05LjE3LTIwLjc1LTIwLjc1LTIwLjc1em00LjAyOCAxMi4yOTljMC4wOTgtMC4yNzUgMC4yMzYtMC41MTEgMC40MTUtMC43MDdzMC4zOTQtMC4zNDcgMC42NDYtMC40NTMgMC41MzMtMC4xNTkgMC44NDItMC4xNTljMC4yNzkgMCAwLjUzMSAwLjA0MiAwLjc1NSAwLjEyNSAwLjIyNSAwLjA4MyAwLjQxNyAwLjE5NSAwLjU3OCAwLjMzNnMwLjI4OSAwLjMwNSAwLjM4MyAwLjQ5MyAwLjE1IDAuMzg3IDAuMTY5IDAuNTk2aC0wLjgzM2MtMC4wMjEtMC4xMTUtMC4wNTktMC4yMjMtMC4xMTMtMC4zMjJzLTAuMTI1LTAuMTg1LTAuMjEzLTAuMjU4Yy0wLjA4OS0wLjA3My0wLjE5My0wLjEzLTAuMzEyLTAuMTcxLTAuMTItMC4wNDItMC4yNTQtMC4wNjItMC40MDUtMC4wNjItMC4xNzcgMC0wLjMzOCAwLjAzNi0wLjQ4MSAwLjEwNy0wLjE0NCAwLjA3MS0wLjI2NyAwLjE3Mi0wLjM2OSAwLjMwMnMtMC4xODEgMC4yODktMC4yMzcgMC40NzVjLTAuMDU3IDAuMTg3LTAuMDg1IDAuMzk0LTAuMDg1IDAuNjIyIDAgMC4yMzYgMC4wMjggMC40NDggMC4wODUgMC42MzQgMC4wNTYgMC4xODcgMC4xMzYgMC4zNDQgMC4yNCAwLjQ3MyAwLjEwMyAwLjEyOSAwLjIyOCAwLjIyOCAwLjM3MyAwLjI5NnMwLjMwNSAwLjEwMyAwLjQ3OSAwLjEwM2MwLjI4NSAwIDAuNTE3LTAuMDY3IDAuNjk3LTAuMjAxczAuMjk2LTAuMzMgMC4zNS0wLjU4OGgwLjgzNGMtMC4wMjQgMC4yMjgtMC4wODcgMC40MzYtMC4xODkgMC42MjRzLTAuMjM0IDAuMzQ4LTAuMzk2IDAuNDgxYy0wLjE2MyAwLjEzMy0wLjM1NCAwLjIzNi0wLjU3NCAwLjMwOHMtMC40NjIgMC4xMDktMC43MjUgMC4xMDljLTAuMzEyIDAtMC41OTMtMC4wNTItMC44NDYtMC4xNTUtMC4yNTItMC4xMDMtMC40NjktMC4yNTItMC42NDktMC40NDVzLTAuMzE5LTAuNDI4LTAuNDE3LTAuNzA1LTAuMTQ3LTAuNTg4LTAuMTQ3LTAuOTM1Yy0yZS0zIC0wLjMzOSAwLjA0Ny0wLjY0NyAwLjE0NS0wLjkyM3ptLTExLjg1My0xLjI2MmgwLjgzNHYwLjc0MWgwLjAxNmMwLjA1MS0wLjEyMyAwLjExOC0wLjIzNCAwLjItMC4zMyAwLjA4Mi0wLjA5NyAwLjE3Ni0wLjE3OSAwLjI4NC0wLjI0OCAwLjEwNy0wLjA2OSAwLjIyNi0wLjEyMSAwLjM1NC0wLjE1NyAwLjEyOS0wLjAzNiAwLjI2NS0wLjA1NCAwLjQwNy0wLjA1NCAwLjMwNiAwIDAuNTY1IDAuMDczIDAuNzc1IDAuMjE5IDAuMjExIDAuMTQ2IDAuMzYxIDAuMzU2IDAuNDQ5IDAuNjNoMC4wMjFjMC4wNTYtMC4xMzIgMC4xMy0wLjI1IDAuMjIxLTAuMzU0czAuMTk2LTAuMTk0IDAuMzE0LTAuMjY4IDAuMjQ4LTAuMTMgMC4zODktMC4xNjkgMC4yODktMC4wNTggMC40NDUtMC4wNThjMC4yMTUgMCAwLjQxIDAuMDM0IDAuNTg2IDAuMTAzczAuMzI2IDAuMTY1IDAuNDUxIDAuMjkgMC4yMjEgMC4yNzcgMC4yODggMC40NTUgMC4xMDEgMC4zNzYgMC4xMDEgMC41OTR2Mi45ODFoLTAuODd2LTIuNzcyYzAtMC4yODctMC4wNzQtMC41MS0wLjIyMi0wLjY2Ny0wLjE0Ny0wLjE1Ny0wLjM1OC0wLjIzNi0wLjYzMi0wLjIzNi0wLjEzNCAwLTAuMjU3IDAuMDI0LTAuMzY5IDAuMDcxLTAuMTExIDAuMDQ3LTAuMjA4IDAuMTEzLTAuMjg4IDAuMTk4LTAuMDgxIDAuMDg0LTAuMTQ0IDAuMTg2LTAuMTg5IDAuMzA0LTAuMDQ2IDAuMTE4LTAuMDY5IDAuMjQ3LTAuMDY5IDAuMzg3djIuNzE1aC0wLjg1OHYtMi44NDRjMC0wLjEyNi0wLjAyLTAuMjQtMC4wNTktMC4zNDJzLTAuMDk0LTAuMTg5LTAuMTY3LTAuMjYyYy0wLjA3Mi0wLjA3My0wLjE2MS0wLjEyOC0wLjI2NC0wLjE2Ny0wLjEwNC0wLjAzOS0wLjIyLTAuMDU5LTAuMzQ5LTAuMDU5LTAuMTM0IDAtMC4yNTggMC4wMjUtMC4zNzMgMC4wNzUtMC4xMTQgMC4wNS0wLjIxMiAwLjExOS0wLjI5NCAwLjIwNy0wLjA4MiAwLjA4OS0wLjE0NiAwLjE5My0wLjE5MSAwLjMxNC0wLjA0NCAwLjEyLTAuMTE2IDAuMjUyLTAuMTE2IDAuMzk0djIuNjgzaC0wLjgyNXYtNC4zNzR6bTEuODkzIDIwLjkzOWMtMy44MjUgMC02LjIyNC0yLjY1OC02LjIyNC02LjlzMi4zOTktNi45MDkgNi4yMjQtNi45MDkgNi4yMTUgMi42NjcgNi4yMTUgNi45MDljMCA0LjI0MS0yLjM5IDYuOS02LjIxNSA2Ljl6bTcuMDgyLTE2LjU3NWMtMC4xNDEgMC4wMzYtMC4yODUgMC4wNTQtMC40MzMgMC4wNTQtMC4yMTggMC0wLjQxNy0wLjAzMS0wLjU5OC0wLjA5My0wLjE4Mi0wLjA2Mi0wLjMzNy0wLjE0OS0wLjQ2Ny0wLjI2MnMtMC4yMzItMC4yNDktMC4zMDQtMC40MDljLTAuMDczLTAuMTYtMC4xMDktMC4zMzgtMC4xMDktMC41MzQgMC0wLjM4NCAwLjE0My0wLjY4NCAwLjQyOS0wLjlzMC43LTAuMzQyIDEuMjQzLTAuMzc3bDEuMTgtMC4wNjh2LTAuMzM4YzAtMC4yNTItMC4wOC0wLjQ0NS0wLjI0LTAuNTc2cy0wLjM4Ni0wLjE5Ny0wLjY3OS0wLjE5N2MtMC4xMTggMC0wLjIyOSAwLjAxNS0wLjMzMSAwLjA0NC0wLjEwMiAwLjAzLTAuMTkyIDAuMDcyLTAuMjcgMC4xMjdzLTAuMTQzIDAuMTIxLTAuMTkzIDAuMTk4Yy0wLjA1MSAwLjA3Ni0wLjA4NiAwLjE2Mi0wLjEwNSAwLjI1NmgtMC44MThjNWUtMyAtMC4xOTMgMC4wNTMtMC4zNzIgMC4xNDMtMC41MzZzMC4yMTItMC4zMDYgMC4zNjctMC40MjcgMC4zMzYtMC4yMTUgMC41NDYtMC4yODIgMC40MzgtMC4xMDEgMC42ODUtMC4xMDFjMC4yNjYgMCAwLjUwNyAwLjAzMyAwLjcyMyAwLjEwMXMwLjQwMSAwLjE2MyAwLjU1NCAwLjI4OCAwLjI3MSAwLjI3NSAwLjM1NCAwLjQ1MSAwLjEyNSAwLjM3MyAwLjEyNSAwLjU5djMuMDAxaC0wLjgzM3YtMC43MjloLTAuMDIxYy0wLjA2MiAwLjExOC0wLjE0IDAuMjI1LTAuMjM1IDAuMzItMC4wOTYgMC4wOTUtMC4yMDMgMC4xNzctMC4zMjIgMC4yNDQtMC4xMiAwLjA2Ny0wLjI1IDAuMTE5LTAuMzkxIDAuMTU1em01LjUwMyAxNi41NzVjLTIuOTE3IDAtNC45LTEuNTI4LTUuMDM4LTMuOTI3aDEuODk5YzAuMTQ4IDEuMzcxIDEuNDczIDIuMjc5IDMuMjg4IDIuMjc5IDEuNzQxIDAgMi45OTItMC45MDggMi45OTItMi4xNDkgMC0xLjA3NC0wLjc2LTEuNzIzLTIuNTE5LTIuMTY3bC0xLjcxNC0wLjQyNmMtMi40NjQtMC42MTEtMy41ODQtMS43MzItMy41ODQtMy41NzUgMC0yLjI2OSAxLjk4Mi0zLjg0NCA0LjgwNy0zLjg0NCAyLjc2IDAgNC42ODYgMS41ODQgNC43NiAzLjg2MmgtMS44OGMtMC4xMy0xLjM3MS0xLjI1LTIuMjE0LTIuOTE4LTIuMjE0LTEuNjU4IDAtMi44MDYgMC44NTItMi44MDYgMi4wODQgMCAwLjk3MiAwLjcyMiAxLjU0NyAyLjQ4MiAxLjk5MWwxLjQ0NSAwLjM2MWMyLjc1MSAwLjY2NyAzLjg4MSAxLjc1MSAzLjg4MSAzLjY5Ni0xZS0zIDIuNDgyLTEuOTY0IDQuMDI5LTUuMDk1IDQuMDI5em0tMTIuNTg1LTEyLjEwNmMtMi42MjEgMC00LjI2IDIuMDEtNC4yNiA1LjIwNSAwIDMuMTg2IDEuNjM5IDUuMTk2IDQuMjYgNS4xOTYgMi42MTIgMCA0LjI2LTIuMDEgNC4yNi01LjE5NiAxZS0zIC0zLjE5NS0xLjY0OC01LjIwNS00LjI2LTUuMjA1eiIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"vmmacos,macos,apple\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"qemu.Qemu-system-x86_64\"\nLABEL oc.template=\"abcdesktop/docker-osx\"\nLABEL oc.name=\"vmmacos\"\nLABEL oc.displayname=\"vmmacos\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"devices\\\":[\\\"/dev/kvm\\\"],\\\"mem_limit\\\":\\\"16G\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmmacos\"\nLABEL oc.home=\"/home/arch\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER arch\nCMD [ \"/bin/bash,-c,sudo touch /dev/kvm /dev/snd \"${IMAGE_PATH}\" \"${BOOTDISK}\" \"${ENV}\" 2>/dev/null || true; sudo chown -R $(id -u):$(id -g) /dev/kvm /dev/snd \"${IMAGE_PATH}\" \"${BOOTDISK}\" \"${ENV}\" 2>/dev/null || true ; [[ \"${NOPICKER}\" == true ]] && { sed -i '/^.*InstallMedia.*/d' Launch.sh && export BOOTDISK=\"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore-nopicker.qcow2}\" ; } || export BOOTDISK=\"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" ; [[ \"${GENERATE_UNIQUE}\" == true ]] && { ./Docker-OSX/osx-serial-generator/generate-unique-machine-values.sh --master-plist-url=\"${MASTER_PLIST_URL}\" --count 1 --tsv ./serial.tsv --bootdisks --width \"${WIDTH:-1920}\" -height \"${HEIGHT:-1080}\" --output-bootdisk \"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" --output-env \"${ENV:=/env}\" || exit 1 ; } ; [[ \"${GENERATE_SPECIFIC}\" == true ]] && { source \"${ENV:=/env}\" 2>/dev/null ; ./Docker-OSX/osx-serial-generator/generate-specific-bootdisk.sh --master-plist-url=\"${MASTER_PLIST_URL}\" --model \"${DEVICE_MODEL}\" --serial \"${SERIAL}\" --board-serial \"${BOARD_SERIAL}\" --uuid \"${UUID}\" --mac-address \"${MAC_ADDRESS}\" --width \"${WIDTH:-1920}\" --height \"${HEIGHT:-1080}\" --output-bootdisk \"${BOOTDISK:=/home/arch/OSX-KVM/OpenCore/OpenCore.qcow2}\" || exit 1 ; } ; ./abcdesktop_config.sh ; ./Launch.sh\" ]\n\n
"},{"location":"applications/vmmacos/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmmacos/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmmacos/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmmacos/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nRUN apt-get update && apt-get install --no-install-recommends --yes libaio1 && apt-get clean\nCOPY VMware-Remote-Console-12.0.1-18113358.x86_64.bundle /tmp\nRUN chmod o+x /tmp/VMware-Remote-Console-12.0.1-18113358.x86_64.bundle\nRUN /tmp/VMware-Remote-Console-12.0.1-18113358.x86_64.bundle --eulas-agreed --console --required --ignore-errors\nLABEL oc.icon=\"circle_vmware.svg\"\nLABEL oc.icondata=\"PHN2ZyBpZD0iQXBwLVN0b3JlIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMjQgMTAyNCIgaW1hZ2UtcmVuZGVyaW5nPSJvcHRpbWl6ZVNwZWVkIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSI1MjAiIHgyPSI1MjAuMDMiIHkxPSI0NCIgeTI9Ijk4NS44NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0MjM3IC0uNTQyMzcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxNWUxZmMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMTg2M2VlIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9Ii0xLjM1NTkiIHgyPSItMS4zNTU5IiB5MT0iLTU5LjExOSIgeTI9IjE5Ni44OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZlYjQyIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmOTMxMSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI2Mi42NDQiIHgyPSI2Mi42NDQiIHkxPSItMTIzLjEyIiB5Mj0iMTMyLjg4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZThlOGU4IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImUiIHg9Ii0uMDc1IiB5PSItLjA3NSIgd2lkdGg9IjEuMTUiIGhlaWdodD0iMS4xNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNy45OTk5OTk4Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wNzUiIHk9Ii0uMDc1IiB3aWR0aD0iMS4xNSIgaGVpZ2h0PSIxLjE1IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3Ljk5OTk5OTgiLz4KICA8L2ZpbHRlcj4KIDwvZGVmcz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM1NiAwIDAgLjA2MzU2IC0uNTQyMzcgLS41NDIzNykiIGQ9Im05NjkuNyAzOTJjLTEuMS00LjM1LTIuMzUtOS0zLjY1LTEzLjYtMi41LTguNzUtNS4zNS0xNy42LTguNDUtMjYuMzUtNi40NS0xOC4yNS0xNC4xNS0zNi4wNS0yMy4xNS01My42NS0zLjgtNy40LTcuOTUtMTQuOTUtMTIuMy0yMi40aC0wLjAyNXEtMzAuNjAxLTUyLjAxLTc2LjMyNS05Ny43NWMtOTIuMTUtOTIuMTUtMjAzLjQ1LTEzOC4yNS0zMzMuOC0xMzguMjVzLTI0MS42IDQ2LjEtMzMzLjc1IDEzOC4yNS0xMzguMjUgMjAzLjQtMTM4LjI1IDMzMy43NSA0Ni4xIDI0MS42NSAxMzguMjUgMzMzLjhjNjguMDUgNjguMDUgMTQ2LjUgMTEwLjk1IDIzNC45IDEyOC42NSAzMS45NSA2LjQgNjQuNzUgOS41NSA5OC44NSA5LjU1IDEzMC4zNSAwIDI0MS42NS00Ni4wNSAzMzMuOC0xMzguMiA0OC42LTQ4LjYgODQuNC0xMDIuNSAxMDcuMzUtMTYxLjggMTctNDMuOTUgMjctOTAuOCAyOS45NS0xNDAuNzUgMC42LTEwLjIgMC45LTIwLjY1IDAuOS0zMS4yNSAwLTQxLjc1LTQuNy04MS42LTE0LjMtMTIweiIgZmlsdGVyPSJ1cmwoI2cpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMTUuNjcyIi8+CiA8cGF0aCBkPSJtNjEuMDkxIDI0LjM3M2MtMC4wNjk5MTYtMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDQtMC4yMzE5OS0wLjg2NDQxLTAuMTU4OS0wLjU1NjE1LTAuMzQwMDQtMS4xMTg2LTAuNTM3MDgtMS42NzQ4LTAuNDA5OTYtMS4xNi0wLjg5OTM3LTIuMjkxMy0xLjQ3MTQtMy40MS0wLjI0MTUzLTAuNDcwMzQtMC41MDUzLTAuOTUwMjItMC43ODE3OC0xLjQyMzdoLTAuMDAxNnEtMS45NDUtMy4zMDU3LTQuODUxMi02LjIxMjljLTUuODU3LTUuODU3LTEyLjkzMS04Ljc4NzEtMjEuMjE2LTguNzg3MXMtMTUuMzU2IDIuOTMwMS0yMS4yMTMgOC43ODcxLTguNzg3MSAxMi45MjgtOC43ODcxIDIxLjIxMyAyLjkzMDEgMTUuMzU5IDguNzg3MSAyMS4yMTZjNC4zMjUyIDQuMzI1MiA5LjMxMTUgNy4wNTE5IDE0LjkzIDguMTc2OSAyLjAzMDcgMC40MDY3OCA0LjExNTUgMC42MDY5OSA2LjI4MjkgMC42MDY5OSA4LjI4NSAwIDE1LjM1OS0yLjkyNjkgMjEuMjE2LTguNzgzOSAzLjA4OS0zLjA4OSA1LjM2NDQtNi41MTQ4IDYuODIzMS0xMC4yODQgMS4wODA1LTIuNzkzNCAxLjcxNjEtNS43NzEyIDEuOTAzNi04Ljk0NiAwLjAzODE0LTAuNjQ4MzEgMC4wNTcyLTEuMzEyNSAwLjA1NzItMS45ODYyIDAtMi42NTM2LTAuMjk4NzMtNS4xODY1LTAuOTA4OS03LjYyNzF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTYxIi8+CiA8ZyB0cmFuc2Zvcm09Im1hdHJpeCguMSAwIDAgLjEgMjguOTM2IDI4LjMxMikiIHN0cm9rZS13aWR0aD0iMTMuMzMzIj4KICA8cGF0aCBkPSJtMTAyLjY0IDE5Ni44OGMxMy4yOTcgMCAyNC0xMC43MDMgMjQtMjR2LTIwOGMwLTEzLjI5Ny0xMC43MDMtMjQtMjQtMjRoLTIwOGMtMTMuMjk3IDAtMjQgMTAuNzAzLTI0IDI0djIwOGMwIDEzLjI5NyAxMC43MDMgMjQgMjQgMjR6bS00MC02NGgtMTI4di0xMjhoMTI4eiIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiLz4KICA8cGF0aCBkPSJtMTY2LjY0IDEzMi44OGMxMy4yOTcgMCAyNC0xMC43MDMgMjQtMjR2LTIwOGMwLTEzLjI5Ny0xMC43MDMtMjQtMjQtMjRoLTIwOGMtMTMuMjk3IDAtMjQgMTAuNzAzLTI0IDI0djQwaDE5MnYxMjhoLTEyOHYtNjRoLTY0djEwNGMwIDEzLjI5NyAxMC43MDMgMjQgMjQgMjR6IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4xNSIvPgogIDxwYXRoIGQ9Im0xMDIuNjQgMTk2Ljg4YzEzLjI5NyAwIDI0LTEwLjcwMyAyNC0yNHYtMjA4YzAtMTMuMjk3LTEwLjcwMy0yNC0yNC0yNGgtMjA4Yy0xMy4yOTcgMC0yNCAxMC43MDMtMjQgMjR2MjA4YzAgMTMuMjk3IDEwLjcwMyAyNCAyNCAyNHptLTQwLTY0aC0xMjh2LTEyOGgxMjh6IiBmaWxsPSJ1cmwoI2MpIi8+CiAgPHBhdGggZD0ibTE2Ni42NCAxMzIuODhjMTMuMjk3IDAgMjQtMTAuNzAzIDI0LTI0di0yMDhjMC0xMy4yOTctMTAuNzAzLTI0LTI0LTI0aC0yMDhjLTEzLjI5NyAwLTI0IDEwLjcwMy0yNCAyNHY0MGgxOTJ2MTI4aC0xMjh2LTY0aC02NHYxMDRjMCAxMy4yOTcgMTAuNzAzIDI0IDI0IDI0eiIgZmlsbD0idXJsKCNhKSIvPgogPC9nPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"vmrc,vmrc,vmware,remote,console\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"vmware-vmrc.desktop\"\nLABEL oc.launch=\"vmrc.Vmrc\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"vmrc\"\nLABEL oc.displayname=\"VMRC\"\nLABEL oc.path=\"/usr/bin/vmrc\"\nLABEL oc.type=app\nLABEL oc.licence=\"non-free\"\nLABEL oc.mimetype=\"x-scheme-handler/vmrc;\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmrc\"\nENV APPBIN \"/usr/bin/vmrc\"\nENV APP \"/usr/bin/vmrc\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vmrc/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmrc/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmrc/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmrc/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.vm.ubuntu:22.04\nUSER root\nLABEL oc.icon=\"vm-linux-ubuntu.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+CjxjaXJjbGUgZmlsbD0iI2Y0NzQyMSIgY3k9IjUwIiBjeD0iNTAiIHI9IjQ1Ii8+CjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjguNTUiIGN4PSI1MCIgY3k9IjUwIiByPSIyMS44MjUiLz4KPGcgaWQ9ImZyaWVuZCI+PGNpcmNsZSBmaWxsPSIjZjQ3NDIxIiBjeD0iMTkuNCIgY3k9IjUwIiByPSI4LjQzNzYiLz4KPHBhdGggc3Ryb2tlPSIjZjQ3NDIxIiBzdHJva2Utd2lkdGg9IjMuMjM3OCIgZD0iTTY3LDUwSDc3Ii8+CjxjaXJjbGUgZmlsbD0iI2ZmZmZmZiIgY3g9IjE5LjQiIGN5PSI1MCIgcj0iNi4wMDc0NSIvPjwvZz4KPHVzZSB4bGluazpocmVmPSIjZnJpZW5kIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjAsNTAsNTApIi8+Cjx1c2UgeGxpbms6aHJlZj0iI2ZyaWVuZCIgdHJhbnNmb3JtPSJyb3RhdGUoMjQwLDUwLDUwKSIvPjwvc3ZnPg==\"\nLABEL oc.keyword=\"vmubuntu,vm,ubuntu,jammy\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"qemu.Qemu-system-x86_64\"\nLABEL oc.template=\"abcdesktopio/oc.vm.ubuntu:22.04\"\nLABEL oc.name=\"vmubuntu\"\nLABEL oc.displayname=\"vmubuntu\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"devices\\\":[\\\"/dev/kvm\\\"],\\\"mem_limit\\\":\\\"16G\\\"}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"vmubuntu\"\nLABEL oc.home=\"/home/balloon\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vmubuntu/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vmubuntu/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vmubuntu/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vmubuntu/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg\nRUN echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/vscode stable main\" > /etc/apt/sources.list.d/teams.list\nRUN apt update && apt install -y --no-install-recommends code && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN mkdir -p /usr/share/code/extensions && chmod 777 /usr/share/code /usr/share/code/extensions\nLABEL oc.icon=\"circle_visual-studio-code.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImEiPgogICA8c3RvcCBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZyIgeDE9IjQwMi43MSIgeDI9IjQwMi43MSIgeTE9IjEzNy44OSIgeTI9IjQ2My4wNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTkxODkgMCAwIC4xOTE4OSAtNDQuNjY0IC0yNS41OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyMzIzMjMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNWM1YzVjIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjM4My41OCIgeDI9IjM4My41OCIgeTE9IjEzNy44OSIgeTI9IjQ2My4wNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMiAwIDAgLjIgLTQ4IC0yNy45OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDg5ZDIiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMjZiMWYzIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImkiIHg9Ii0uMDM2IiB5PSItLjAzNiIgd2lkdGg9IjEuMDcyIiBoZWlnaHQ9IjEuMDcyIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0LjUiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSI4NiIgeDI9IjYzIiB5MT0iMTkuNDU4IiB5Mj0iMzkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAwN2FiYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDZjYWYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iODYiIHgyPSI4MyIgeTE9IjIwIiB5Mj0iMjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjYSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZCIgeDE9Ijg3IiB4Mj0iNjMiIHkxPSI0NiIgeTI9IjI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMDgwY2UiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMDA4ZmQ1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9Ijg2IiB4Mj0iODMiIHkxPSI0NCIgeTI9IjQ0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjA5NTkzNyIgeT0iLS4wOTYwNjMiIHdpZHRoPSIxLjE5MTkiIGhlaWdodD0iMS4xOTIxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjk2MTUxODg1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaiIgeD0iLS4wOTU3OTYiIHk9Ii0uMDk2MjA1IiB3aWR0aD0iMS4xOTE2IiBoZWlnaHQ9IjEuMTkyNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS4yNzk0MTc3Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iaCIgeD0iLS4wNiIgeT0iLS4wNiIgd2lkdGg9IjEuMTIiIGhlaWdodD0iMS4xMiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS4zNSIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHBhdGggY2xhc3M9InNocDEiIHRyYW5zZm9ybT0ibWF0cml4KC4yIDAgMCAuMiAtNDggLTI3Ljk5NCkiIGQ9Im00MDAgNDUwYzgyLjg0IDAgMTUwLTY3LjE2IDE1MC0xNTBzLTY3LjE2LTE1MC0xNTAtMTUwLTE1MCA2Ny4xNi0xNTAgMTUwIDY3LjE2IDE1MCAxNTAgMTUweiIgZmlsdGVyPSJ1cmwoI2kpIiBvcGFjaXR5PSIuMjUiIHN0cm9rZS13aWR0aD0iMTUuNjgzIi8+CiA8cGF0aCBjbGFzcz0ic2hwMSIgZD0ibTMyIDU4YzE0LjM1OSAwIDI2LTExLjY0MSAyNi0yNnMtMTEuNjQxLTI2LTI2LTI2Yy0xNC4zNTkgMC0yNiAxMS42NDEtMjYgMjZzMTEuNjQxIDI2IDI2IDI2eiIgZmlsbD0idXJsKCNnKSIvPgogPHBhdGggZD0ibTMyIDVjLTE0LjkxMSAwLTI3IDEyLjA4OS0yNyAyN3MxMi4wODkgMjcgMjcgMjdjMTQuOTExIDAgMjctMTIuMDg5IDI3LTI3cy0xMi4wODktMjctMjctMjd6bTAgMmMxMy44MDcgMCAyNSAxMS4xOTMgMjUgMjVzLTExLjE5MyAyNS0yNSAyNWMtMTMuODA3IDAtMjUtMTEuMTkzLTI1LTI1czExLjE5My0yNSAyNS0yNXoiIGZpbHRlcj0idXJsKCNoKSIgb3BhY2l0eT0iLjE1Ii8+CiA8cGF0aCBkPSJtMzIgMi4wMDU5Yy0xNi41NjggMC0zMCAxMy40MzQtMzAgMzAuMDAyIDAgMTYuNTY4IDEzLjQzMiAzMCAzMCAzMHMzMC4wMDItMTMuNDMyIDMwLjAwMi0zMGMwLTE2LjU2OC0xMy40MzQtMzAuMDAyLTMwLjAwMi0zMC4wMDJ6bTAgMy45OTQxYzE0LjM1OSAwIDI2IDExLjY0MSAyNiAyNnMtMTEuNjQxIDI2LTI2IDI2Yy0xNC4zNTkgMC0yNi0xMS42NDEtMjYtMjZzMTEuNjQxLTI2IDI2LTI2eiIgZmlsbD0idXJsKCNiKSIgc3Ryb2tlLXdpZHRoPSIzLjEzNjYiLz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00Ni4wMDEgLjAwMDY4OTcpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogIDxwYXRoIGQ9Im04NS4yMjMgMTYuMDUxYy0wLjM0MjE0IDAuMDM4MTgtMC42NzUwNyAwLjE1NTM4LTEuMDA3OCAwLjM3NSA0LjE3ZS00IDUuMmUtNCAwLjAwMTUgMC4wMDE0IDJlLTMgMmUtMyAtMC4xNDExMyAwLjA3NjY4LTAuMjgxNzcgMC4xNzI4LTAuNDE2MDIgMC4yOTY4OGwtMjEuMzU3IDE5Ljc0Yy0wLjQxNTY4IDAuMzg0MTctMC43MTM2NyAxLjA1NjMtMC4xODk0NSAxLjU1NDdsMS45OTYxIDEuODk4NGMwLjc4NTE1IDAuNzQ2NDcgMS42ODYgMC4wOTkzMSAyLjAzMTItMC4xNzE4OGwxOS43NDYtMTUuMTAydjE0LjcxMWwtMS42MTMzIDEuMjA5Yy0xLjI0MzMgMC45MzE1NyAwLjExMzI2IDYuMjk3OS0wLjIxMjg5IDYuOTg4MyAwLjM2MDMyIDAuMjE5OTEgMC44OTgxIDAuNDUzNzggMS4zNjkxIDAuMzk2NDggMC4xNTA4OS0wLjAxODM1IDAuMzAzNjItMC4wNjA1NCAwLjQ1NTA4LTAuMTM0NzdsNi41NjQ1LTMuMjE4OGMwLjcxNTQ0LTAuMzUwNjUgMS40Mzc1LTAuNjQwNzUgMS40Mzc1LTEuNDM3NXYtMjIuMzE2YzAtMC43OTY3NS0wLjcyMjA2LTEuMDg2OS0xLjQzNzUtMS40Mzc1bC02LjU2NDUtMy4yMTg4Yy0wLjE1MTQ2LTAuMDc0MjMtMC4zMDQxOS0wLjExNjQyLTAuNDU1MDgtMC4xMzQ3Ny0wLjExNzc2LTAuMDE0MzItMC4yMzM2MS0wLjAxMjczLTAuMzQ3NjYgMHoiIGZpbHRlcj0idXJsKCNqKSIgb3BhY2l0eT0iLjE1IiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogIDxwYXRoIGQ9Im04NS4yMjIgMTYuMDUxYy0wLjM0MjE0IDAuMDM4MTgtMC42NzUwNyAwLjE1NTM4LTEuMDA3OCAwLjM3NSAwLjUyMDU0IDAuNjQ3OTktMC41MzAyNiA2Ljc0ODMgMC43ODU2IDcuNTc0MmwxLjAyNjkgMC42NDQ1M3YxNC43MTFsLTEuNjEzMSAxLjIwODZjLTEuMjQzMyAwLjkzMTU3IDAuMTEyNTcgNi4yOTc0LTAuMjEzNTggNi45ODc3IDAuMzYwMzIgMC4yMTk5MSAwLjg5ODYgMC40NTQ2NiAxLjM2OTYgMC4zOTczOCAwLjE1MDg5LTAuMDE4MzUgMC4zMDM2Mi0wLjA2MDU0IDAuNDU1MDgtMC4xMzQ3N2w2LjU2NDUtMy4yMTg4YzAuNzE1NDQtMC4zNTA2NSAxLjQzNzUtMC42NDA3NSAxLjQzNzUtMS40Mzc1di0yMi4zMTZjMC0wLjc5Njc1LTAuNzIyMDYtMS4wODY5LTEuNDM3NS0xLjQzNzVsLTYuNTY0NS0zLjIxODhjLTAuMTUxNDYtMC4wNzQyMy0wLjMwNDE5LTAuMTE2NDItMC40NTUwOC0wLjEzNDc3LTAuMTE3NzYtMC4wMTQzMi0wLjIzMzYxLTAuMDEyNzMtMC4zNDc2NiAweiIgZmlsbD0iIzBkOTZkZCIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDM2LjQ2NSAyMS4zNTktMTkuNzRjMC45Njk3LTAuODk2MjEgMi4yMjU3LTAuNTc4NDIgMi4yMjU3IDEuMjc1M3Y2LjY0NDFsLTE5Ljc0NiAxNS4xMDJjLTAuMzQ1MjkgMC4yNzExOS0xLjI0NTEgMC45MTg5Mi0yLjAzMDIgMC4xNzI0NWwtMS45OTc3LTEuODk5M2MtMC41MjQyMi0wLjQ5ODQtMC4yMjYzMy0xLjE3MDIgMC4xODkzNS0xLjU1NDR6IiBmaWxsPSJ1cmwoI2YpIiBzdHlsZT0icGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogIDxwYXRoIGQ9Im02Mi40NDMgMjcuNTI1IDIxLjM1OSAxOS43NGMwLjk2OTcgMC44OTYyMSAyLjIyNTcgMC41Nzg0MiAyLjIyNTctMS4yNzUzdi02LjY0NDFsLTE5Ljc0Ni0xNS4xMDJjLTAuMzQ1MjktMC4yNzExOS0xLjI0NTEtMC45MTg5Mi0yLjAzMDItMC4xNzI0NWwtMS45OTc3IDEuODk5M2MtMC41MjQyMiAwLjQ5ODQtMC4yMjYzMyAxLjE3MDIgMC4xODkzNSAxLjU1NDR6IiBmaWx0ZXI9InVybCgjaykiIG9wYWNpdHk9Ii4yNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDI3LjUyNSAyMS4zNTkgMTkuNzRjMC45Njk3IDAuODk2MjEgMi4yMjU3IDAuNTc4NDIgMi4yMjU3LTEuMjc1M3YtNi42NDQxbC0xOS43NDYtMTUuMTAyYy0wLjM0NTI5LTAuMjcxMTktMS4yNDUxLTAuOTE4OTItMi4wMzAyLTAuMTcyNDVsLTEuOTk3NyAxLjg5OTNjLTAuNTI0MjIgMC40OTg0LTAuMjI2MzMgMS4xNzAyIDAuMTg5MzUgMS41NTQ0eiIgZmlsbD0idXJsKCNkKSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KICA8cGF0aCBkPSJtNjIuNDQzIDM2LjQ2NSAyMS4zNTktMTkuNzRjMC45Njk3LTAuODk2MjEgMi4yMjU3LTAuNTc4NDIgMi4yMjU3IDEuMjc1M3Y2LjY0NDFsLTE5Ljc0NiAxNS4xMDJjLTAuMzQ1MjkgMC4yNzExOS0xLjI0NTEgMC45MTg5Mi0yLjAzMDIgMC4xNzI0NWwtMS45OTc3LTEuODk5M2MtMC41MjQyMi0wLjQ5ODQtMC4yMjYzMy0xLjE3MDIgMC4xODkzNS0xLjU1NDR6IiBmaWxsPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMTUiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgZmlsbCBtYXJrZXJzIi8+CiAgPHBhdGggZD0ibTYyLjQ0MyAyNy41MjUgMjEuMzU5IDE5Ljc0YzAuOTY5NyAwLjg5NjIxIDIuMjI1NyAwLjU3ODQyIDIuMjI1Ny0xLjI3NTN2LTYuNjQ0MWwtMTkuNzQ2LTE1LjEwMmMtMC4zNDUyOS0wLjI3MTE5LTEuMjQ1MS0wLjkxODkyLTIuMDMwMi0wLjE3MjQ1bC0xLjk5NzcgMS44OTkzYy0wLjUyNDIyIDAuNDk4NC0wLjIyNjMzIDEuMTcwMiAwLjE4OTM1IDEuNTU0NHoiIGZpbGw9InVybCgjYykiIG9wYWNpdHk9Ii4xNSIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"vscode,ide,vscode,visual studio code,code\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"code.desktop\"\nLABEL oc.launch=\"code.Code\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"--extensions-dir /usr/share/code/extensions --verbose\"\nLABEL oc.name=\"VSCode\"\nLABEL oc.displayname=\"VSCode\"\nLABEL oc.path=\"/usr/bin/code\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/x-c;application/json;application/javascript;application/xml;text/xml;application/java-archive;text/x-java-source;text/plain;image/svg+xml;application/x-csh;text/x-yaml;application/x-yaml;application/x-python;\"\nLABEL oc.fileextensions=\"c;cpp;py;json;js;java;jav;md;xml;txt;svg;html;htm;sh;csh;css;jsx;tsx;vue;yml;yaml;\"\nLABEL oc.legacyfileextensions=\"c;cpp;py;json;java;md;yml;yaml;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"2G\\\",\\\"shm_size\\\":\\\"2G\\\",\\\"cpu_period\\\":200000,\\\"cpu_quota\\\":200000,\\\"cap_add\\\":[\\\"SYS_ADMIN\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"VSCode\"\nENV APPBIN \"/usr/bin/code\"\nLABEL oc.args=\"--extensions-dir /usr/share/code/extensions --verbose\"\nENV APP \"/usr/bin/code\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/vscode/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/vscode/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/vscode/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/vscode/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update gnome-weather\nLABEL oc.icon=\"org.gnome.Weather.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjQyIi8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZiIgeD0iLS4wNSIgeT0iLS4wNzUiIHdpZHRoPSIxLjEiIGhlaWdodD0iMS4xNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuNzc3Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZSIgeD0iLS4wOTYiIHk9Ii0uMDk2IiB3aWR0aD0iMS4xOTIiIGhlaWdodD0iMS4xOTIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iLjg4Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0iZCIgeD0iLS4wOCIgeT0iLS4xMiIgd2lkdGg9IjEuMTYiIGhlaWdodD0iMS4yNCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjI0NCIvPjwvZmlsdGVyPjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjM5OS41NyIgeDI9IjM5OS41NyIgeTE9IjU0NS44IiB5Mj0iNTE3LjgiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgyNi4zNiAtMTEwNy41KSBzY2FsZSgyLjE0MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzVlYTVmYiIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuOTkiIHgyPSIzOTkuOTkiIHkxPSI1NDUuMTQiIHkyPSI1MTguMTQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgyNi4zNiAtMTEwNy41KSBzY2FsZSgyLjE0MjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzdhZGNmYyIgb2Zmc2V0PSIwIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzBhNzllZCIgb2Zmc2V0PSIxIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODI2LjM2IC0xMTA3LjUpIHNjYWxlKDIuMTQyOSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNhKSIgb3BhY2l0eT0iLjI1Ii8+PGcgc3Ryb2tlLXdpZHRoPSIxLjU3MSI+PGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbD0idXJsKCNiKSIvPjxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9Im5vbmUiLz48L2c+PHBhdGggZD0iTTMyLjQ3OCAyMi4xMTZhMTEuMTQ1IDExLjE0NSAwIDAgMC0xMS4xNDUgMTEuMTQ1IDExLjE0NSAxMS4xNDUgMCAwIDAgLjAxOC41MTIgNi42MzIgNi42MzIgMCAwIDAtNS45OTcgNi41OTVBNi42MzIgNi42MzIgMCAwIDAgMjEuOTg2IDQ3aDIxLjY0MmE5LjAxOCA5LjAxOCAwIDAgMCA5LjAxOC05LjAxOCA5LjAxOCA5LjAxOCAwIDAgMC05LjAxOC05LjAxOCA5LjAxOCA5LjAxOCAwIDAgMC0uODU3LjA0OSAxMS4xNDUgMTEuMTQ1IDAgMCAwLTEwLjI5NC02Ljg5N3oiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjEiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48Y2lyY2xlIGN4PSIyMiIgY3k9IjI4IiByPSIxMSIgZmlsdGVyPSJ1cmwoI2UpIiBvcGFjaXR5PSIuMjUiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48Y2lyY2xlIGN4PSIyMiIgY3k9IjI4IiByPSIxMSIgZmlsbD0iI2ZmZDIwZiIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPjxwYXRoIGQ9Ik0zMi40NzggMjIuMTE2YTExLjE0NSAxMS4xNDUgMCAwIDAtMTEuMTQ1IDExLjE0NSAxMS4xNDUgMTEuMTQ1IDAgMCAwIC4wMTguNTEyIDYuNjMyIDYuNjMyIDAgMCAwLTUuOTk3IDYuNTk1QTYuNjMyIDYuNjMyIDAgMCAwIDIxLjk4NiA0N2gyMS42NDJhOS4wMTggOS4wMTggMCAwIDAgOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtLjg1Ny4wNDkgMTEuMTQ1IDExLjE0NSAwIDAgMC0xMC4yOTQtNi44OTd6IiBmaWx0ZXI9InVybCgjZikiIG9wYWNpdHk9Ii4xNSIgc3R5bGU9InBhaW50LW9yZGVyOm5vcm1hbCIvPjxwYXRoIGQ9Ik0zMi40NzggMjIuMTE2YTExLjE0NSAxMS4xNDUgMCAwIDAtMTEuMTQ1IDExLjE0NSAxMS4xNDUgMTEuMTQ1IDAgMCAwIC4wMTguNTEyIDYuNjMyIDYuNjMyIDAgMCAwLTUuOTk3IDYuNTk1QTYuNjMyIDYuNjMyIDAgMCAwIDIxLjk4NiA0N2gyMS42NDJhOS4wMTggOS4wMTggMCAwIDAgOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtOS4wMTgtOS4wMTggOS4wMTggOS4wMTggMCAwIDAtLjg1Ny4wNDkgMTEuMTQ1IDExLjE0NSAwIDAgMC0xMC4yOTQtNi44OTd6IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIuODUiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz48L3N2Zz4=\"\nLABEL oc.keyword=\"weather,weather\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"org.gnome.Weather.desktop\"\nLABEL oc.launch=\"org.gnome.Weather.org.gnome.Weather\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"weather\"\nLABEL oc.displayname=\"weather\"\nLABEL oc.path=\"/usr/bin/gnome-weather\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"weather\"\nENV APPBIN \"/usr/bin/gnome-weather\"\nENV APP \"/usr/bin/gnome-weather\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/weather/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/weather/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/weather/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/weather/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk.20.04:$TAG\nUSER root\nRUN curl -Ls -o /tmp/whatsdesk.deb https://zerkc.gitlab.io/whatsdesk/whatsdesk_0.3.9_amd64.deb\nRUN apt-get update && apt-get install --no-install-recommends --yes desktop-file-utils libasound2 && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN apt-get update && apt-get install --no-install-recommends --yes /tmp/whatsdesk.deb && apt-get clean && rm -rf /var/lib/apt/lists/*\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends dbus-x11 && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"whatsapp.svg\"\nLABEL oc.icondata=\"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzUuMjE2IDE3NS41NTIiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9Ijg1LjkxNSIgeDI9Ijg2LjUzNSIgeTE9IjMyLjU2NyIgeTI9IjEzNy4wOTIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1N2QxNjMiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyM2IzM2EiLz48L2xpbmVhckdyYWRpZW50PjxmaWx0ZXIgaWQ9ImEiIHdpZHRoPSIxLjExNSIgaGVpZ2h0PSIxLjExNCIgeD0iLS4wNTciIHk9Ii0uMDU3IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjMuNTMxIi8+PC9maWx0ZXI+PC9kZWZzPjxwYXRoIGZpbGw9IiNiM2IzYjMiIGQ9Im01NC41MzIgMTM4LjQ1IDIuMjM1IDEuMzI0YzkuMzg3IDUuNTcxIDIwLjE1IDguNTE4IDMxLjEyNiA4LjUyM2guMDIzYzMzLjcwNyAwIDYxLjEzOS0yNy40MjYgNjEuMTUzLTYxLjEzNS4wMDYtMTYuMzM1LTYuMzQ5LTMxLjY5Ni0xNy44OTUtNDMuMjUxQTYwLjc1IDYwLjc1IDAgMCAwIDg3Ljk0IDI1Ljk4M2MtMzMuNzMzIDAtNjEuMTY2IDI3LjQyMy02MS4xNzggNjEuMTNhNjAuOTggNjAuOTggMCAwIDAgOS4zNDkgMzIuNTM1bDEuNDU1IDIuMzEyLTYuMTc5IDIyLjU1OHptLTQwLjgxMSAyMy41NDRMMjQuMTYgMTIzLjg4Yy02LjQzOC0xMS4xNTQtOS44MjUtMjMuODA4LTkuODIxLTM2Ljc3Mi4wMTctNDAuNTU2IDMzLjAyMS03My41NSA3My41NzgtNzMuNTUgMTkuNjgxLjAxIDM4LjE1NCA3LjY2OSA1Mi4wNDcgMjEuNTcyczIxLjUzNyAzMi4zODMgMjEuNTMgNTIuMDM3Yy0uMDE4IDQwLjU1My0zMy4wMjcgNzMuNTUzLTczLjU3OCA3My41NTNoLS4wMzJjLTEyLjMxMy0uMDA1LTI0LjQxMi0zLjA5NC0zNS4xNTktOC45NTR6bTAgMCIgZmlsdGVyPSJ1cmwoI2EpIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTEyLjk2NiAxNjEuMjM4IDEwLjQzOS0zOC4xMTRhNzMuNDIgNzMuNDIgMCAwIDEtOS44MjEtMzYuNzcyYy4wMTctNDAuNTU2IDMzLjAyMS03My41NSA3My41NzgtNzMuNTUgMTkuNjgxLjAxIDM4LjE1NCA3LjY2OSA1Mi4wNDcgMjEuNTcyczIxLjUzNyAzMi4zODMgMjEuNTMgNTIuMDM3Yy0uMDE4IDQwLjU1My0zMy4wMjcgNzMuNTUzLTczLjU3OCA3My41NTNoLS4wMzJjLTEyLjMxMy0uMDA1LTI0LjQxMi0zLjA5NC0zNS4xNTktOC45NTR6Ii8+PHBhdGggZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDE3ODApIiBkPSJNODcuMTg0IDI1LjIyN2MtMzMuNzMzIDAtNjEuMTY2IDI3LjQyMy02MS4xNzggNjEuMTNhNjAuOTggNjAuOTggMCAwIDAgOS4zNDkgMzIuNTM1bDEuNDU1IDIuMzEyLTYuMTc5IDIyLjU1OSAyMy4xNDYtNi4wNjkgMi4yMzUgMS4zMjRjOS4zODcgNS41NzEgMjAuMTUgOC41MTggMzEuMTI2IDguNTI0aC4wMjNjMzMuNzA3IDAgNjEuMTQtMjcuNDI2IDYxLjE1My02MS4xMzVhNjAuNzUgNjAuNzUgMCAwIDAtMTcuODk1LTQzLjI1MSA2MC43NSA2MC43NSAwIDAgMC00My4yMzUtMTcuOTI5eiIvPjxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik04Ny4xODQgMjUuMjI3Yy0zMy43MzMgMC02MS4xNjYgMjcuNDIzLTYxLjE3OCA2MS4xM2E2MC45OCA2MC45OCAwIDAgMCA5LjM0OSAzMi41MzVsMS40NTUgMi4zMTMtNi4xNzkgMjIuNTU4IDIzLjE0Ni02LjA2OSAyLjIzNSAxLjMyNGM5LjM4NyA1LjU3MSAyMC4xNSA4LjUxNyAzMS4xMjYgOC41MjNoLjAyM2MzMy43MDcgMCA2MS4xNC0yNy40MjYgNjEuMTUzLTYxLjEzNWE2MC43NSA2MC43NSAwIDAgMC0xNy44OTUtNDMuMjUxIDYwLjc1IDYwLjc1IDAgMCAwLTQzLjIzNS0xNy45Mjh6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNjguNzcyIDU1LjYwM2MtMS4zNzgtMy4wNjEtMi44MjgtMy4xMjMtNC4xMzctMy4xNzZsLTMuNTI0LS4wNDNjLTEuMjI2IDAtMy4yMTguNDYtNC45MDIgMi4zcy02LjQzNSA2LjI4Ny02LjQzNSAxNS4zMzIgNi41ODggMTcuNzg1IDcuNTA2IDE5LjAxMyAxMi43MTggMjAuMzgxIDMxLjQwNSAyNy43NWMxNS41MjkgNi4xMjQgMTguNjg5IDQuOTA2IDIyLjA2MSA0LjZzMTAuODc3LTQuNDQ3IDEyLjQwOC04Ljc0IDEuNTMyLTcuOTcxIDEuMDczLTguNzQtMS42ODUtMS4yMjYtMy41MjUtMi4xNDYtMTAuODc3LTUuMzY3LTEyLjU2Mi01Ljk4MS0yLjkxLS45MTktNC4xMzcuOTIxLTQuNzQ2IDUuOTc5LTUuODE5IDcuMjA2LTIuMTQ0IDEuMzgxLTMuOTg0LjQ2Mi03Ljc2LTIuODYxLTE0Ljc4NC05LjEyNGMtNS40NjUtNC44NzMtOS4xNTQtMTAuODkxLTEwLjIyOC0xMi43M3MtLjExNC0yLjgzNS44MDgtMy43NTFjLjgyNS0uODI0IDEuODM4LTIuMTQ3IDIuNzU5LTMuMjJzMS4yMjQtMS44NCAxLjgzNi0zLjA2NS4zMDctMi4zMDEtLjE1My0zLjIyLTQuMDMyLTEwLjAxMS01LjY2Ni0xMy42NDciLz48L3N2Zz4=\"\nLABEL oc.keyword=\"whatsdesk,whatsapp,whatsdesk\"\nLABEL oc.cat=\"utilities,office\"\nLABEL oc.desktopfile=\"whatsdesk.desktop\"\nLABEL oc.launch=\"whatsdesk.whatsdesk\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk.20.04\"\nLABEL oc.name=\"whatsdesk\"\nLABEL oc.displayname=\"whatsdesk\"\nLABEL oc.path=\"/opt/whatsdesk/whatsdesk\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"x-scheme-handler/whatsapp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"whatsdesk\"\nENV APPBIN \"/opt/whatsdesk/whatsdesk\"\nENV APP \"/opt/whatsdesk/whatsdesk\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/whatsdesk/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/whatsdesk/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/whatsdesk/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/whatsdesk/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winefile-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=mscoree,mshtml=\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"winefile.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iNDhweCIKICAgaGVpZ2h0PSI0OHB4IgogICBpZD0ic3ZnNDI4OSIKICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40NSIKICAgc29kaXBvZGk6ZG9jYmFzZT0iL2hvbWUvZG9iZXkvUHJvamVjdHMvZ25vbWUtaWNvbi10aGVtZS9zY2FsYWJsZS9hcHBzIgogICBzb2RpcG9kaTpkb2NuYW1lPSJzeXN0ZW0tZmlsZS1tYW5hZ2VyLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0MjkxIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MTE5NTUiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDExOTU3IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjYWNjYzY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMTE5NTkiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izg4OGE4NTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDIyMTQwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMjIxNDIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjIxNDgiCiAgICAgICAgIG9mZnNldD0iMC41IgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjpibGFjaztzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDIyMTQ0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjIxNDAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQyMzA0NCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjE4LjE0MjEzNiIKICAgICAgIHkxPSIzNSIKICAgICAgIHgyPSIxOC4xNDIxMzYiCiAgICAgICB5Mj0iNDIuMDQwNjYxIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQyMjEyMiIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDIzMDQyIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAsLTEuMDAwMDAxLDEuMTQyODU2LDAsLTg5LjEwMjU5LC0zMS40OTk5OSkiCiAgICAgICBjeD0iNyIKICAgICAgIGN5PSIzOS40NjQ4MDYiCiAgICAgICBmeD0iNyIKICAgICAgIGZ5PSIzOS40NjQ4MDYiCiAgICAgICByPSIzLjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDIyMTIyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6YmxhY2s7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMjIxMjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOmJsYWNrO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDIyMTI2IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MjIxMjIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyMzA0MCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLC0xLjAwMDAwMSwxLjE0Mjg1NiwwLC00MS4xMDI1OSw0NS41MDAwMSkiCiAgICAgICBjeD0iNyIKICAgICAgIGN5PSIzOS40NjQ4MDYiCiAgICAgICBmeD0iNyIKICAgICAgIGZ5PSIzOS40NjQ4MDYiCiAgICAgICByPSIzLjUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDc5NTciCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDc5NTkiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2RkZGRkOTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3OTYxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM1NTU3NTM7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3OTUxIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A3OTUzIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkNmQ2ZDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNzk1NSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNTU1NzUzO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk5NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOndoaXRlO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNjk5OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6d2hpdGU7c3RvcC1vcGFjaXR5OjAuNDY5OTQ1MzQiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A3MDAxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk4NSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGM2YzA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A2OTg3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojODg4YTg1O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjk4OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDExOTU1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Njk5MSIKICAgICAgIHgxPSIxOS41NzE0MjgiCiAgICAgICB5MT0iMTguMjg1NzE1IgogICAgICAgeDI9IjQwLjEwOTkzNiIKICAgICAgIHkyPSI0Mi43ODIzNzkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Njk5NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDcwMDMiCiAgICAgICB4MT0iMjMuNzE0Mjg5IgogICAgICAgeTE9IjE4LjYxODA0NCIKICAgICAgIHgyPSIyMy44NTY4ODQiCiAgICAgICB5Mj0iNi45OTk5OTgxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDc5NTciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ3MDI1IgogICAgICAgeDE9IjI1LjAwMDAwMiIKICAgICAgIHkxPSIzMy40NzkwNzMiCiAgICAgICB4Mj0iMjQuNTcyOTIyIgogICAgICAgeTI9IjMxLjM2MzcwMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNS45NjA0NjRlLTgsMS4wMDAwMDEpIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ3OTUxIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NzAzOSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgeDE9IjI2LjQ4OTg0NyIKICAgICAgIHkxPSIzMi40OTQ5MTkiCiAgICAgICB4Mj0iMjYuMjYyNjkxIgogICAgICAgeTI9IjMwLjk0NTg5NiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMTEyOTcyZS02LC0xMi45OTk5OSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDY5ODUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ5NzQ1IgogICAgICAgeDE9IjE5LjE1MTc3NSIKICAgICAgIHkxPSIxNS45Njk1NDMiCiAgICAgICB4Mj0iNDAuNDg4NjA5IgogICAgICAgeTI9IjMwLjA4ODM5OCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2OTg1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50OTc1MyIKICAgICAgIHgxPSIyNC4yMDI1NDEiCiAgICAgICB5MT0iMjkuOTc5Njk0IgogICAgICAgeDI9IjQwLjIyOTUxMSIKICAgICAgIHkyPSI0MS4wNzE0MyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTQiCiAgICAgaW5rc2NhcGU6Y3g9IjI4LjI1MDg4NiIKICAgICBpbmtzY2FwZTpjeT0iMTkuMTMxOTUzIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMjgwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijk0OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMjUiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDI5NCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvR1BMLzIuMC8iIC8+CiAgICAgICAgPGRjOnRpdGxlPlN5c3RlbSBGaWxlIE1hbmFnZXI8L2RjOnRpdGxlPgogICAgICAgIDxkYzpkYXRlPkp1bHkgMjAwNjwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkFuZHJlYXMgTmlsc3NvbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICA8ZGM6c291cmNlPmh0dHA6Ly93d3cuZ25vbWUub3JnPC9kYzpzb3VyY2U+CiAgICAgIDwvY2M6V29yaz4KICAgICAgPGNjOkxpY2Vuc2UKICAgICAgICAgcmRmOmFib3V0PSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9HUEwvMi4wLyI+CiAgICAgICAgPGNjOnBlcm1pdHMKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL1JlcHJvZHVjdGlvbiIgLz4KICAgICAgICA8Y2M6cGVybWl0cwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvRGlzdHJpYnV0aW9uIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvTm90aWNlIiAvPgogICAgICAgIDxjYzpwZXJtaXRzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9EZXJpdmF0aXZlV29ya3MiIC8+CiAgICAgICAgPGNjOnJlcXVpcmVzCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy9TaGFyZUFsaWtlIiAvPgogICAgICAgIDxjYzpyZXF1aXJlcwogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvU291cmNlQ29kZSIgLz4KICAgICAgPC9jYzpMaWNlbnNlPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPGcKICAgICAgIGlkPSJnMjIxNTAiCiAgICAgICBzdHlsZT0ib3BhY2l0eTowLjMiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjY4NzUsMCwwLDEuNDI4NTcsOCwtMTYuOTk5OTQpIj4KICAgICAgPHJlY3QKICAgICAgICAgeT0iMzUiCiAgICAgICAgIHg9IjAiCiAgICAgICAgIGhlaWdodD0iNyIKICAgICAgICAgd2lkdGg9IjQiCiAgICAgICAgIGlkPSJyZWN0MjIxMjAiCiAgICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50MjMwNDApO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjEuMjAwMDAwNTc7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPHJlY3QKICAgICAgICAgdHJhbnNmb3JtPSJzY2FsZSgtMSwtMSkiCiAgICAgICAgIHk9Ii00MiIKICAgICAgICAgeD0iLTQ4IgogICAgICAgICBoZWlnaHQ9IjciCiAgICAgICAgIHdpZHRoPSI0IgogICAgICAgICBpZD0icmVjdDIyMTM0IgogICAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDIzMDQyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDoxLjIwMDAwMDU3O3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxyZWN0CiAgICAgICAgIHk9IjM1IgogICAgICAgICB4PSI0IgogICAgICAgICBoZWlnaHQ9IjciCiAgICAgICAgIHdpZHRoPSI0MCIKICAgICAgICAgaWQ9InJlY3QyMjEzOCIKICAgICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyMzA0NCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MS4yMDAwMDA1NztzdHJva2Utb3BhY2l0eToxIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ2OTkxKTtmaWxsLW9wYWNpdHk6MS4wO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojNTU1NzUzO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMTQuNTcxNDI5LDYuNSBMIDM0LjU3MTQyOSw2LjUgTCAzOC41LDExIEwgMzguNSwzOS41NzE0MjkgQyAzOC41MTQ3ODIsMzkuOTM2NzQ1IDM3Ljk1ODEzNSw0MC41MTYzNDYgMzcuNDcyOTE3LDQwLjQ1MzA5IEwgMTEuNDI4NTcxLDQwLjQ1MzA5IEMgMTAuOTA0NzYyLDQwLjM5NzI5OCAxMC41MjM4MDksNDAuMDU1NzkyIDEwLjUsMzkuNDI4NTcxIEwgMTAuNSwxMSBMIDE0LjU3MTQyOSw2LjUgeiAiCiAgICAgICBpZD0icGF0aDQzMDciCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDk3NDUpO2ZpbGwtb3BhY2l0eToxLjA7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiM2YzZmNmE7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InJlY3Q1MTk3IgogICAgICAgd2lkdGg9IjIwLjk5OTk5NiIKICAgICAgIGhlaWdodD0iMTEuMDAwMDAzIgogICAgICAgeD0iMTQuNDk5OTk4IgogICAgICAgeT0iMTMuNDk5OTk4IgogICAgICAgcng9IjEuMDcxNDI4NSIKICAgICAgIHJ5PSIxLjA3MTQyODUiIC8+CiAgICA8cmVjdAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ5NzUzKTtmaWxsLW9wYWNpdHk6MS4wO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojNmM2ZjZhO3N0cm9rZS13aWR0aDowLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTE5OSIKICAgICAgIHdpZHRoPSIyMC45OTk5OTYiCiAgICAgICBoZWlnaHQ9IjExLjAwMDAwMyIKICAgICAgIHg9IjE0LjUiCiAgICAgICB5PSIyNi40OTk5OTgiCiAgICAgICByeD0iMS4wNzE0Mjg1IgogICAgICAgcnk9IjEuMDcxNDI4NSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp3aGl0ZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjE7b3BhY2l0eTowLjUiCiAgICAgICBkPSJNIDExLjE0Mjg1NywxMSBMIDM3Ljg1NzE0MywxMC45Mjg1NzEgTCAzNC41LDcgTCAxNSw3IEwgMTEuMTQyODU3LDExIHogIgogICAgICAgaWQ9InBhdGg1MjAzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzAwMyk7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO29wYWNpdHk6MC41IgogICAgICAgZD0iTSAxNC45MjM0MzUsNy40OTk5OTggTCAzNC4yODAzOTEsNy40OTk5OTggTCAzNy40OTk3NDIsMTEuMjQwNTQ2IEwgMzcuNDk5NzQyLDM5LjQ1MDM3NSBMIDExLjUwMDAwMywzOS40OTQzMjQgTCAxMS41MDAwMDMsMTEuMjQwNTQ2IEwgMTQuOTIzNDM1LDcuNDk5OTk4IHogIgogICAgICAgaWQ9InBhdGg2OTkzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTp1cmwoI2xpbmVhckdyYWRpZW50NzAyNSk7c3Ryb2tlLXdpZHRoOjAuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NzAxNyIKICAgICAgIHdpZHRoPSI3LjAwMDAwNTIiCiAgICAgICBoZWlnaHQ9IjMuMDAwMDA1MiIKICAgICAgIHg9IjIxLjUiCiAgICAgICB5PSIzMS40OTk5OTQiCiAgICAgICByeD0iMS4wNzE0MjgyIgogICAgICAgcnk9IjEuMDcxNDI4OCIgLz4KICAgIDxyZWN0CiAgICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDcwMzkpO3N0cm9rZS13aWR0aDowLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDcwMzciCiAgICAgICB3aWR0aD0iNy4wMDAwMDUyIgogICAgICAgaGVpZ2h0PSIzLjAwMDAwNTIiCiAgICAgICB4PSIyMS40OTk5OTQiCiAgICAgICB5PSIxNy41IgogICAgICAgcng9IjEuMDcxNDI4MiIKICAgICAgIHJ5PSIxLjA3MTQyODgiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MC43NTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6d2hpdGU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtvcGFjaXR5OjAuNiIKICAgICAgIGQ9Ik0gMTIuNSwxMC41NzE0MjkgTCAzNi41NzE0MjksMTAuNTcxNDI5IgogICAgICAgaWQ9InBhdGg2MDkzIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"winefile-wine,wine,winfile,winefile,file,manager\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winefile.exe.winefile.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"winefile-wine\"\nLABEL oc.displayname=\"Winefile Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/winefile\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winefile-wine\"\nENV APPBIN \"/usr/bin/winefile\"\nENV APP \"/usr/bin/winefile\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winefile-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winefile-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winefile-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winefile-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winemine-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.wine:$TAG\nUSER root\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nRUN apk add --no-cache --update wine\nLABEL oc.icon=\"winemine.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4wIgogICB3aWR0aD0iNzBwdCIKICAgaGVpZ2h0PSI3MHB0IgogICBpZD0ic3ZnMiI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiIC8+CiAgPGcKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxnCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTY2LjYxMywtOTAuNjM3NDkpIgogICAgICAgaWQ9ImcxMDc5NyI+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi43NTc4LDMzLjkwOTg4KSIKICAgICAgICAgaWQ9InVzZTQ0NzkiPgogICAgICAgIDxnCiAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjIuMzkxODQsNC4wNzUyNTEpIgogICAgICAgICAgIGlkPSJnMTA3ODkiPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMTguNTk3ODY5LDU4LjQwMDc1OCBMIDkzLjc1NjAxLDU4LjQwMDc1OCBDIDkzLjc2MTAxMSw1OC40MDA3NTggOTMuNzY1MDM4LDU4LjQwNDk4NiA5My43NjUwMzgsNTguNDEwMjQgTCA5My43NjUwMzgsMTMzLjM0NDcxIEMgOTMuNzY1MDM4LDEzMy4zNDk5NiA5My43NjEwMTEsMTMzLjM1NDE5IDkzLjc1NjAxLDEzMy4zNTQxOSBMIDE4LjU5Nzg2OSwxMzMuMzU0MTkgQyAxOC41OTI4NTksMTMzLjM1NDE5IDE4LjU4ODgzLDEzMy4zNDk5NiAxOC41ODg4MywxMzMuMzQ0NzEgTCAxOC41ODg4Myw1OC40MTAyNCBDIDE4LjU4ODgzLDU4LjQwNDk4NiAxOC41OTI4NTksNTguNDAwNzU4IDE4LjU5Nzg2OSw1OC40MDA3NTggeiAiCiAgICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNmZGZjZmQ7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNiZmE2Yjc7c3Ryb2tlLXdpZHRoOjAuNDc3ODQ1ODU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgICBpZD0icGF0aDEwNzkxIiAvPgogICAgICAgICAgPHBhdGgKICAgICAgICAgICAgIGQ9Ik0gOTMuNjM5MDI0LDU4LjQ4NDM0OSBDIDkzLjY0NDAzLDU4LjQ4NDM0OSA5My42NDgwNjEsNTguNDg4NTg0IDkzLjY0ODA2MSw1OC40OTM4NDQgTCA5My42NDgwNjEsMTMzLjU0NDI5IEMgOTMuNjQ4MDYxLDEzMy41NDk1NSA5My42NDQwMywxMzMuNTUzNzggOTMuNjM5MDI0LDEzMy41NTM3OCBMIDE4LjM5NTkxMiwxMzMuNTUzNzggQyAxOC4zOTA5MDYsMTMzLjU1Mzc4IDE4LjM4Njg3NiwxMzMuNTQ5NTUgMTguMzg2ODc2LDEzMy41NDQyOSBMIDkzLjYzOTAyNCw1OC40ODQzNDkgeiAiCiAgICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiMyNTI1MmE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNiZmE2Yjc7c3Ryb2tlLXdpZHRoOjAuNDc4NDg1NzM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO21hcmtlcjpub25lO21hcmtlci1zdGFydDpub25lO21hcmtlci1taWQ6bm9uZTttYXJrZXItZW5kOm5vbmU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgICBpZD0icGF0aDEwNzkzIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8cmVjdAogICAgICAgICAgIHdpZHRoPSI2NS43NjA5MDIiCiAgICAgICAgICAgaGVpZ2h0PSI2NS43NjA5MDIiCiAgICAgICAgICAgcnk9IjAuMDA4MTU0MDg0OSIKICAgICAgICAgICB4PSI0NS41ODcxODkiCiAgICAgICAgICAgeT0iNjcuMTcyMjI2IgogICAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2IzYjFiYztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2JmYTZiNztzdHJva2Utd2lkdGg6MC40MjEyMTM2O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgICBpZD0icmVjdDEwNzk1IiAvPgogICAgICA8L2c+CiAgICAgIDxnCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNjg2NCwwLDAsMC41MDg3MjIsNTI4LjY4ODcsLTEwOS4zNzgpIgogICAgICAgICBpZD0iZzgxMTEiPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgZD0iTSAtNDc5LjY5MjAxLDQyMS43ODc3NSBMIC00NzkuNjkyMDEsNDczLjc4Mzc1IEMgLTQ3Mi44NTAwNiw0NzAuODk2NjIgLTQ2Mi43Mzg3OSw0NjUuMTIzMTYgLTQ2MC45MjA1Nyw0NjQuMDg1MzQgQyAtNDU4LjMxMDIsNDYyLjU5NTM4IC00MzguNjAyMTQsNDUxLjM1MDU5IC00MzguNTcxODcsNDQ4LjMxNzYgQyAtNDM4LjU0MTYsNDQ1LjI4NDYxIC00NTguMDIwMTIsNDMzLjYzNzgzIC00NjAuNjAwMjIsNDMyLjA5NDggQyAtNDYyLjQ0MzUzLDQzMC45OTI0MSAtNDcyLjkxMTg0LDQyNC43MzA5OCAtNDc5LjY5MjAxLDQyMS43ODc3NSB6ICIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiMwMDhmMGY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMjUzMzAzODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7bWFya2VyOm5vbmU7bWFya2VyLXN0YXJ0Om5vbmU7bWFya2VyLW1pZDpub25lO21hcmtlci1lbmQ6bm9uZTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGUiCiAgICAgICAgICAgaWQ9InBhdGg4MTEzIiAvPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgd2lkdGg9IjYuODU1NjA4IgogICAgICAgICAgIGhlaWdodD0iMTEzLjIzNTc4IgogICAgICAgICAgIHJ5PSIwLjAwMTA0NDQzOTYiCiAgICAgICAgICAgeD0iLTQ4Ni41NDY4NCIKICAgICAgICAgICB5PSI0MjEuNzk3NjEiCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozLjAzODE4NDE3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDttYXJrZXI6bm9uZTttYXJrZXItc3RhcnQ6bm9uZTttYXJrZXItbWlkOm5vbmU7bWFya2VyLWVuZDpub25lO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZSIKICAgICAgICAgICBpZD0icmVjdDgxMTUiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"winemine-wine,wine,winemine,mine\"\nLABEL oc.cat=\"games\"\nLABEL oc.launch=\"winemine.exe.winemine.exe\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.wine\"\nLABEL oc.name=\"winemine-wine\"\nLABEL oc.displayname=\"WineMine Wine (alpine)\"\nLABEL oc.path=\"/usr/bin/winemine\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winemine-wine\"\nENV APPBIN \"/usr/bin/winemine\"\nENV APP \"/usr/bin/winemine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winemine-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winemine-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winemine-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winemine-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winhelp-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.wine:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nUSER $BUSER\nRUN wineboot --init\nRUN echo disable > $WINEPREFIX/.update-timestamp\nCOPY --chown=$BUSER:$BUSER user.reg system.reg /composer/.wine/\nLABEL oc.icon=\"winhelp.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cjxzdmcgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0OCA0OC4wMDAwMDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ0NTM3IiB4MT0iLTQ3IiB4Mj0iLTEiIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMGEwZDQiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDFhOGQ3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPG1ldGFkYXRhPgogIDxyZGY6UkRGPgogICA8Y2M6V29yayByZGY6YWJvdXQ9IiI+CiAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgIDxkYzp0aXRsZS8+CiAgIDwvY2M6V29yaz4KICA8L3JkZjpSREY+CiA8L21ldGFkYXRhPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzLjk0OWUtNSkiPgogIDxwYXRoIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00em0wIDAuNXYwLjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjVjMCAyLjIxNi0xLjc4NCA0LTQgNGgtMzhjLTIuMjE2IDAtNC0xLjc4NC00LTR6IiBvcGFjaXR5PSIuMDIiLz4KICA8cGF0aCBkPSJtMSA0My4yNXYwLjI1YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtMC4yNWMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIG9wYWNpdHk9Ii4wNSIvPgogIDxwYXRoIGQ9Im0xIDQzdjAuMjVjMCAyLjIxNiAxLjc4NCA0IDQgNGgzOGMyLjIxNiAwIDQtMS43ODQgNC00di0wLjI1YzAgMi4yMTYtMS43ODQgNC00IDRoLTM4Yy0yLjIxNiAwLTQtMS43ODQtNC00eiIgb3BhY2l0eT0iLjEiLz4KIDwvZz4KIDxyZWN0IHRyYW5zZm9ybT0icm90YXRlKC05MCkiIHg9Ii00NyIgeT0iMSIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjQ2IiByeD0iNCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDQ1MzcpIi8+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDMuOTQ5ZS01KSI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMTAwNC40KSI+CiAgIDxwYXRoIGQ9Im0xIDEwNDMuNHY0YzAgMi4yMTYgMS43ODQgNCA0IDRoMzhjMi4yMTYgMCA0LTEuNzg0IDQtNHYtNGMwIDIuMjE2LTEuNzg0IDQtNCA0aC0zOGMtMi4yMTYgMC00LTEuNzg0LTQtNHoiIG9wYWNpdHk9Ii4xIi8+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsLTEpIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLDEpIj4KICAgPGcgb3BhY2l0eT0iLjEiPjwhLS0gY29sb3I6ICM0MWE4ZDggLS0+CiAgICA8cGF0aCBkPSJtMjQgOWMtOC4yODUgMC0xNSA2LjcxNS0xNSAxNXM2LjcxNSAxNSAxNSAxNSAxNS02LjcxNSAxNS0xNS02LjcxNS0xNS0xNS0xNW0wIDZjNC45NjkgMCA5IDQuMDMgOSA5IDAgNC45NjktNC4wMyA5LTkgOS00Ljk2OSAwLTktNC4wMy05LTkgMC00Ljk2OSA0LjAzLTkgOS05Ii8+CiAgICA8cGF0aCBkPSJtMjQgOWMtOC4yODUgMC0xNSA2LjcxNS0xNSAxNSAwIDQuMzk4IDEuOTIyIDguMzIgNC45MzggMTEuMDYtMi40MjYtMi42NjQtMy45MzgtNi4xNzYtMy45MzgtMTAuMDYgMC04LjI4NSA2LjcxNS0xNSAxNS0xNSAzLjg4NyAwIDcuMzk4IDEuNTEyIDEwLjA2IDMuOTM4LTIuNzQyLTMuMDItNi42NjQtNC45MzgtMTEuMDYtNC45MzgiIGZpbGwtb3BhY2l0eT0iLjE0OSIvPgogICAgPHBhdGggZD0ibTM1LjA1IDIzLjg1Yy0wLjE2MjY0IDIuMDYzMy0xLjAzMDMgNC4wNzkzLTIuNjA3OCA1LjY1NjktMy41MTM2IDMuNTEzNi05LjIxMzYgMy41MTQzLTEyLjcyOCAwLTEuNTc2OC0xLjU3NjgtMi40NDQ1LTMuNTk0Mi0yLjYwNzgtNS42NTY5LTAuMTk2NTggMi41MzI5IDAuNjcxMDQgNS4xMzQzIDIuNjA3OCA3LjA3MTEgMy41MTM2IDMuNTEzNiA5LjIxMzYgMy41MTQzIDEyLjcyOCAwIDEuOTM2MS0xLjkzNjEgMi44MDMtNC41MzgyIDIuNjA3OC03LjA3MTEiIGZpbGwtb3BhY2l0eT0iLjE0OSIvPgogICA8L2c+CiAgPC9nPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMSkiPjwhLS0gY29sb3I6ICM0MWE4ZDggLS0+CiAgPHBhdGggZD0ibTI0IDljLTguMjg1IDAtMTUgNi43MTUtMTUgMTVzNi43MTUgMTUgMTUgMTUgMTUtNi43MTUgMTUtMTUtNi43MTUtMTUtMTUtMTVtMCA2YzQuOTY5IDAgOSA0LjAzIDkgOSAwIDQuOTY5LTQuMDMgOS05IDktNC45NjkgMC05LTQuMDMtOS05IDAtNC45NjkgNC4wMy05IDktOSIgZmlsbD0iI2VhNWM1MyIvPgogIDxnIGZpbGw9IiNlZWVjZTAiPgogICA8cGF0aCBkPSJtMTAuMzc1IDE3Ljc4MWMtMC44NjcgMS44OTUtMS4zNzUgNC0xLjM3NSA2LjIxOXMwLjUwOCA0LjMyNCAxLjM3NSA2LjIxOWw1LjI1LTNjLTAuMzgzLTEtMC42MjUtMi4wODItMC42MjUtMy4yMTlzMC4yNDItMi4yMTkgMC42MjUtMy4yMTltLTUuMjUtMyIvPgogICA8cGF0aCBkPSJtMzcuNjI1IDE3Ljc4MS01LjI1IDNjMC4zODMgMSAwLjYyNSAyLjA4MiAwLjYyNSAzLjIxOXMtMC4yNDIgMi4yMTktMC42MjUgMy4yMTlsNS4yNSAzYzAuODY3LTEuODk1IDEuMzc1LTQgMS4zNzUtNi4yMTlzLTAuNTA4LTQuMzI0LTEuMzc1LTYuMjE5Ii8+CiAgIDxwYXRoIGQ9Im0yMC43ODEgMzIuMzc1LTMgNS4yNWMxLjg5NSAwLjg2NyA0IDEuMzc1IDYuMjE5IDEuMzc1czQuMzI0LTAuNTA4IDYuMjE5LTEuMzc1bC0zLTUuMjVjLTEgMC4zODMtMi4wODIgMC42MjUtMy4yMTkgMC42MjVzLTIuMjE5LTAuMjQyLTMuMjE5LTAuNjI1Ii8+CiAgIDxwYXRoIGQ9Im0yNCA5Yy0yLjIxOSAwLTQuMzI0IDAuNTA4LTYuMjE5IDEuMzc1bDMgNS4yNWMxLTAuMzgzIDIuMDgyLTAuNjI1IDMuMjE5LTAuNjI1czIuMjE5IDAuMjQyIDMuMjE5IDAuNjI1bDMtNS4yNWMtMS44OTUtMC44NjctNC0xLjM3NS02LjIxOS0xLjM3NSIvPgogIDwvZz4KIDwvZz4KIDxwYXRoIGQ9Im0zMi45NzkgMjMuNDI0YTkgOSAwIDAgMSAtOC45Nzg1IDguNTc2MiA5IDkgMCAwIDEgLTguOTc4NSAtOC40MjM4IDkgOSAwIDAgMCAtMC4wMjE0ODQgMC40MjM4MyA5IDkgMCAwIDAgOSA5IDkgOSAwIDAgMCA5IC05IDkgOSAwIDAgMCAtMC4wMjE0ODQgLTAuNTc2MTd6IiBvcGFjaXR5PSIuMSIgc3Ryb2tlLXdpZHRoPSIuOTk4MjciLz4KIDxwYXRoIGQ9Ik0gMjQgOCBBIDE1IDE1IDAgMCAwIDkgMjMgQSAxNSAxNSAwIDAgMCA5LjAxOTUzMTIgMjMuNTg1OTM4IEEgMTUgMTUgMCAwIDEgMjQgOSBBIDE1IDE1IDAgMCAxIDM4Ljk4MDQ2OSAyMy40MTQwNjIgQSAxNSAxNSAwIDAgMCAzOSAyMyBBIDE1IDE1IDAgMCAwIDI0IDggeiAiIG9wYWNpdHk9Ii4xIiBzdHJva2Utd2lkdGg9IjQuMjYyMyIvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"winhelp-wine,wine,winhelp,text,hlp,help,wine\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winhlp32.exe.Wine\"\nLABEL oc.template=\"abcdesktopio/oc.template.wine\"\nENV ARGS=\"winhelp\"\nLABEL oc.name=\"winhelp-wine\"\nLABEL oc.displayname=\"Winhelp Wine\"\nLABEL oc.path=\"/usr/bin/wine\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/hlp;\"\nLABEL oc.fileextensions=\"hlp;\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winhelp-wine\"\nENV APPBIN \"/usr/bin/wine\"\nLABEL oc.args=\"winhelp\"\nENV APP \"/usr/bin/wine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winhelp-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winhelp-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winhelp-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winhelp-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
"},{"location":"applications/winscp-wine/#pre-run-command","title":"PRE run command","text":"
PRE run command are run before the package install command
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.wine:$TAG\nUSER root\nENV WINEARCH=win64\nENV WINEDLLOVERRIDES=\"mscoree,mshtml=\"\nUSER $BUSER\nRUN wineboot --init\nRUN curl -Ls -o /tmp/winscp553.zip http://winscp.net/download/winscp553.zip && unzip /tmp/winscp553.zip -d /composer/bin/ && rm /tmp/winscp553.zip\nRUN echo disable > $WINEPREFIX/.update-timestamp\nCOPY --chown=$BUSER:$BUSER user.reg system.reg /composer/.wine/\nLABEL oc.icon=\"winscp.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMjAgMjAiCiAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiCiAgIHN0cm9rZS1saW5lam9pbj0icm91bmQiCiAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgaWQ9InN2ZzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1IgogICBzb2RpcG9kaTpkb2NuYW1lPSJJRE8yLUtBS1VDSE8uc3ZnIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExMiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczEwIiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDAxIgogICAgIGlkPSJuYW1lZHZpZXc4IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSIyMy42IgogICAgIGlua3NjYXBlOmN4PSI4LjkyMzgyNjMiCiAgICAgaW5rc2NhcGU6Y3k9IjguOTk0NTA1NyIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMiIgLz4KICA8IS0tU2hhY2tsZS0tPgogIDwhLS1Cb2R5LS0+CiAgPHJlY3QKICAgICB4PSI1IgogICAgIHk9IjEuMjUwMDAwMSIKICAgICB3aWR0aD0iMTAiCiAgICAgaGVpZ2h0PSIxNSIKICAgICByeD0iNSIKICAgICByeT0iNSIKICAgICBpZD0icmVjdDQiCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzgwODA4MDtzdHJva2Utd2lkdGg6Mi41IiAvPgogIDxyZWN0CiAgICAgeD0iMi41IgogICAgIHk9IjcuNSIKICAgICB3aWR0aD0iMTUiCiAgICAgaGVpZ2h0PSIxMi41IgogICAgIHJ4PSIxLjI1IgogICAgIHJ5PSIxLjI1IgogICAgIHN0eWxlPSJmaWxsOiM5NmM0ODk7ZmlsbC1vcGFjaXR5OjEiCiAgICAgaWQ9InJlY3Q2LTgtOCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiMxMDg4MTA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgZD0ibSAzLjc1LDcuNTAwMDAwMiAxMi41LDAgYyAwLjM0NjI1LDAgMC42NTg3NSwwLjEzOTM3NSAwLjg4NDY4NywwLjM2NTMxMjUgTCAyLjg2NTMxMjUsMTkuNjM0Njg3IEMgMi42MzkzNzUsMTkuNDA4NzUgMi41LDE5LjA5NjI1IDIuNSwxOC43NSBsIDAsLTkuOTk5OTk5OCBjIDAsLTAuNjkyNSAwLjU1NzUsLTEuMjUgMS4yNSwtMS4yNSB6IgogICAgIGlkPSJyZWN0Ni0wIgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc2Njc3NzIiAvPgogIDxwYXRoCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmIgogICAgIGQ9Im0gNi41LDEyLjc1IDMuNSwwIEwgOC41LDExLjI1IDEwLDkuNzQ5OTk5NyAxNC4yNSwxNCAxMCwxOC4yNSBsIC0xLjUsLTEuNSAxLjUsLTEuNSAtMy41LDAgbSAwLC0yLjUiCiAgICAgaWQ9InBhdGg4IiAvPgo8L3N2Zz4K\"\nLABEL oc.keyword=\"winscp-wine,wine,scp,sftp\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"winscp.exe.Wine\"\nLABEL oc.template=\"abcdesktopio/oc.template.wine\"\nENV ARGS=\"/composer/bin/winscp.exe\"\nLABEL oc.name=\"winscp-wine\"\nLABEL oc.displayname=\"WinSCP\"\nLABEL oc.path=\"/usr/bin/wine\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"winscp-wine\"\nENV APPBIN \"/usr/bin/wine\"\nLABEL oc.args=\"/composer/bin/winscp.exe\"\nENV APP \"/usr/bin/wine\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/winscp-wine/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/winscp-wine/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/winscp-wine/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/winscp-wine/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.gtk:$TAG\nUSER root\nENV QT_XCB_NO_MITSHM=1\nRUN apk add --no-cache --update wireshark\nLABEL oc.icon=\"wireshark.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iOTkuOTk2MzYxIgogICBoZWlnaHQ9Ijk5Ljg0MTkyNyIKICAgaWQ9InN2ZzEzMTUiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDQiCiAgIHNvZGlwb2RpOmRvY25hbWU9IndzaWNvbi5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIyMzAuNDEiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIyMzAuNDEiCiAgIHZlcnNpb249IjEuMCI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEzMTciPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTUzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTU1IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkOGQ4ZDg7c3RvcC1vcGFjaXR5OjAuODE5NjcyMTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzk1NyIKICAgICAgICAgb2Zmc2V0PSIxLjAwMDAwMDAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMDEwOTI4OTYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNTAwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MC43NDIyNjgwMzsiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDM1MDIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuMjc4MzUwNTA7IgogICAgICAgICBvZmZzZXQ9IjEuMDAwMDAwMCIKICAgICAgICAgaWQ9InN0b3AzNTA0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MjAzMiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0MGIyZTc7c3RvcC1vcGFjaXR5OjEuMDAwMDAwMDsiCiAgICAgICAgIG9mZnNldD0iMC4wMDAwMDAwIgogICAgICAgICBpZD0ic3RvcDIwMzQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMjA0MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMTY3OWE3O3N0b3Atb3BhY2l0eTowLjkzODE0NDMzOyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDIwMzIiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQyNzcwIgogICAgICAgY3g9IjE4Ni44Njg1IgogICAgICAgY3k9IjMxOS42MjQ2OSIKICAgICAgIGZ4PSIxODYuODY4NSIKICAgICAgIGZ5PSIzMTkuNjI0NjkiCiAgICAgICByPSI0OS45OTgxOCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMC45OTg0NTYsMCwwLjUwMTI1NCkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzUwMCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM1MDYiCiAgICAgICB4MT0iMTY4Ljg4NDkzIgogICAgICAgeTE9IjI4My4zNjIxOCIKICAgICAgIHgyPSIxNzMuNjM4ODQiCiAgICAgICB5Mj0iMzE3LjQzODIzIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDIzNjg0LDAsMCwxLC00LjM4Njg5MiwtMSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTUxIgogICAgICAgeDE9IjE3MS40ODYzNiIKICAgICAgIHkxPSIyNzguNzUxMTMiCiAgICAgICB4Mj0iMTcxLjY5NjgyIgogICAgICAgeTI9IjI4Ni41Mzc3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjAwNDcwNSwwLDAsMS4zMDc3MDksLTAuNjc4MDc5LC04NS43MzMxNSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5NTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMzMwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDA0NzA1LDAsMCwxLjMwNzcwOSwtMC42NzgwNzksLTg1LjczMzE1KSIKICAgICAgIHgxPSIxNzEuNDg2MzYiCiAgICAgICB5MT0iMjc4Ljc1MTEzIgogICAgICAgeDI9IjE3Mi4wNjg2MiIKICAgICAgIHkyPSIyODkuODcwMjQiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSIyLjAwNzgyMjUiCiAgICAgaW5rc2NhcGU6Y3g9IjE2OS4yNzkzNCIKICAgICBpbmtzY2FwZTpjeT0iMzUuNDY0NTg0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgc2hvd2d1aWRlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9Ijg5MyIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3MzMiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjgzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSItMTMiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMTMyMCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzMy44NzY4LC0yNzQuNjQxOCkiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp1cmwoI3JhZGlhbEdyYWRpZW50Mjc3MCk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOmJsYWNrO3N0cm9rZS13aWR0aDo0LjU1Mzk5OTk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icmVjdDU4MTEiCiAgICAgICB3aWR0aD0iOTUuNDQyMzYiCiAgICAgICBoZWlnaHQ9Ijk1LjI4NzkyNiIKICAgICAgIHg9IjEzNi4xNTM4MiIKICAgICAgIHk9IjI3Ni45MTg3OSIKICAgICAgIHJ4PSIxMCIKICAgICAgIHJ5PSIxMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvZ2VyYWxkL2RldmVsL3dzd2ViL2ltYWdlL3dzaWNvbjI1Ni5wbmciCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMjMwLjQxIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjIzMC40MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjc1O2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpibGFjaztzdHJva2Utd2lkdGg6NC4yOTcyMzY5MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxMzYuODgwNDUsMzQ3LjM2MjE4IEwgMTYwLjg4MDQ1LDM0Ny4zNjIxOCBDIDE2MC44ODA0NSwzNDcuMzYyMTggMTY0LjY2MzY1LDI5OS4xNzQ0OSAyMDYuNzMxODMsMjk4LjUxMDggQyAxOTMuMTYxNDYsMzE5Ljc0ODY4IDIwNS44ODA0NSwzNDcuMzYyMTggMjA1Ljg4MDQ1LDM0Ny4zNjIxOCBMIDIzMC44ODA0NSwzNDcuMzYyMTgiCiAgICAgICBpZD0icGF0aDEzMjgiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9nZXJhbGQvZGV2ZWwvd3N3ZWIvaW1hZ2Uvd3NpY29uMjAwLnBuZyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxODAuMDA5OTkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTgwLjAwOTk5IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQxMzMwKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxNDEsMjc3LjM2MjE4IEMgMTQ4LjQzMzU4LDI3NS44NDQ2NSAyMTcuNDEwMjEsMjc1LjM2MjE4IDIyNiwyNzcuMzYyMTggQyAyMzQuMDMxMzksMjc5LjIzMjE2IDIwNCwzMDUuMzYyMTggMTg0LDMwNS4zNjIxOCBDIDE2NCwzMDUuMzYyMTggMTMzLjQ1NzYzLDI3OC45MDE5MiAxNDEsMjc3LjM2MjE4IHogIgogICAgICAgaWQ9InJlY3QzMDcwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjenp6IiAvPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDp3aGl0ZTtmaWxsLW9wYWNpdHk6MC4wMTA5Mjg5NDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJyZWN0NTcwNSIKICAgICAgIHdpZHRoPSIxIgogICAgICAgaGVpZ2h0PSIwIgogICAgICAgeD0iMTU3IgogICAgICAgeT0iMjg1LjM2MjE4IgogICAgICAgcng9IjguOTQ5NjkzNyIKICAgICAgIHJ5PSIwIiAvPgogIDwvZz4KPC9zdmc+Cg==\"\nLABEL oc.keyword=\"wireshark,capture,network,analyzer\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"org.wireshark.Wireshark.desktop\"\nLABEL oc.launch=\"wireshark.Wireshark\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.gtk\"\nLABEL oc.name=\"wireshark\"\nLABEL oc.displayname=\"wireshark (alpine)\"\nLABEL oc.path=\"/usr/bin/wireshark\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/vnd.tcpdump.pcap;application/x-pcapng;application/x-snoop;application/x-iptrace;application/x-lanalyzer;application/x-nettl;application/x-radcom;application/x-etherpeek;application/x-visualnetworks;application/x-netinstobserver;application/x-5view;application/x-tektronix-rf5;\"\nLABEL oc.fileextensions=\"cap,pcap\"\nLABEL oc.legacyfileextensions=\"cap\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"wireshark\"\nENV APPBIN \"/usr/bin/wireshark\"\nENV APP \"/usr/bin/wireshark\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/wireshark/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/wireshark/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/wireshark/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/wireshark/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.libreoffice:$TAG\nUSER root\nRUN apk add --no-cache --update libreoffice-gnome\nLABEL oc.icon=\"circle_libreoffice_writer.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIzOTkuNTciIHgyPSIzOTkuNTciIHkxPSI1NDUuOCIgeTI9IjUxNy44IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSwwLDAsMi4xNDI5LC04MjYuMzYsLTExMDcuNSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzM4ODllOSIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1ZWE1ZmIiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iYyIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNDE5OTk4NzQiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImgiIHgxPSIzNDUiIHgyPSIzNDUiIHkxPSIxMTczIiB5Mj0iMTE3OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjEyNSAwIDAgMi4xMzc0IC03MDIuMTIgLTI0ODcuOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzY2NiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMzMzMiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iMjI5LjUzIiB4Mj0iMjI5LjUzIiB5MT0iLTU4MS42NCIgeTI9Ii01NzguNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4xMjUgMCAwIDIgLTQ0MC43NSAxMTgxLjMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM2M2JiZWUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjYWFkY2Y3IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjIxNy4yOSIgeDI9IjIxNy4yOSIgeTE9Ii03ODcuODQiIHkyPSItNzYzLjg0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMTY4MyAwIDAgMi4zMjMzIC00MzguODcgMTgzMC42KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHhsaW5rOmhyZWY9IiNhIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAzNjlhMyIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMwNDdmYzYiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iMzIuMDIiIHgyPSIzMi4wMiIgeTE9IjIuMDQzIiB5Mj0iNjIuMDQ1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2EiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImYiIHgxPSIzMiIgeDI9IjMyIiB5MT0iNyIgeTI9IjU3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNkMmYzZmMiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZmZmIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iZSIgeDE9IjQ1LjUwMSIgeDI9IjQ1LjUwMSIgeTE9IjcuMTA1NSIgeTI9IjI5Ljg5NiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZWJmYWZlIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U3ZjhmYyIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJrIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC43NSIvPgogIDwvZmlsdGVyPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjM4LjA2NiIgY3k9IjI2LjE5MiIgcj0iMjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLS44IDIuOTg4NmUtOCAtMS45MjY1ZS04IC0xIDgwLjQ1MyA0MC4xOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMxZTM1M2MiIHN0b3Atb3BhY2l0eT0iLjQ4NTM4IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE5MTkxOSIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEiLz4KICA8L3JhZGlhbEdyYWRpZW50PgogIDxmaWx0ZXIgaWQ9ImwiIHg9Ii0uMDU2MzY0IiB5PSItLjA2NDEzOCIgd2lkdGg9IjEuMTEyNyIgaGVpZ2h0PSIxLjEyODMiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuNzc1Ii8+CiAgPC9maWx0ZXI+CiA8L2RlZnM+CiA8Y2lyY2xlIHRyYW5zZm9ybT0ibWF0cml4KDIuMTQyOSAwIDAgMi4xNDI5IC04MjYuMzYgLTExMDcuNSkiIGN4PSI0MDAuNTciIGN5PSI1MzEuOCIgcj0iMTQiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9Ii43MzMzMyIvPgogPGcgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiPgogIDxjaXJjbGUgY3g9IjMyLjAyIiBjeT0iMzIuMDQ0IiByPSIzMC4wMDEiIGZpbGw9InVybCgjZykiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbHRlcj0idXJsKCNrKSIgb3BhY2l0eT0iLjI1Ii8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjMwLjAwMSIgZmlsbC1vcGFjaXR5PSIwIi8+CiAgPGNpcmNsZSBjeD0iMzIuMDIiIGN5PSIzMi4wNDQiIHI9IjAiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzIgN2EyNSAyNSAwIDAgMC0yNSAyNSAyNSAyNSAwIDAgMCAyNSAyNSAyNSAyNSAwIDAgMCAyNS0yNSAyNSAyNSAwIDAgMC0wLjEwMzUyLTIuMTAzNWwtMjIuNzkxLTIyLjc5MWEyNSAyNSAwIDAgMC0yLjEwNTUtMC4xMDU0N3oiIGZpbGw9InVybCgjZikiLz4KIDwvZz4KIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMSkiIGZpbHRlcj0idXJsKCNsKSIgb3BhY2l0eT0iLjI1Ij4KICA8cGF0aCBkPSJtMTYgMTd2M2gxMXYtM3ptMTQgMHYxNGgxOXYtN2MtMy0zLTUtNC05LjUtN3ptLTE0IDV2My4wNDc5bDExLTAuMDQ3OTR2LTMuMDQ3OXptMCA1djMuMDQ3OWwxMS0wLjA0Nzk0di0zLjA0Nzl6bTAgNnYzbDMzLTAuMDQ3OTR2LTN6bTAgNXYzbDMzLTAuMDQ3OTR2LTN6bTAgNXYzaDI0di0zeiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz4KICA8cGF0aCBkPSJtMzEgMThoOC41YzMuNSAwIDguNSA0IDguNSA2djZoLTE3eiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciLz4KICA8cGF0aCBkPSJtNDAuOTE3IDI3LjIxMi00LjkxNy02LjIxMjEtNSA3LjYwNjF2MS4zOTM5aDE3di0xLjM5MzlsLTMuNTQxMy00LjE4MTh6IiBjb2xvcj0iIzAwMDAwMCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxKSI+CiAgPHBhdGggZD0ibTE2IDE3djNoMTF2LTN6bTE0IDB2MTRoMTl2LTdjLTMtMy01LTQtOS41LTd6bS0xNCA1djMuMDQ3OWwxMS0wLjA0Nzk0di0zLjA0Nzl6bTAgNXYzLjA0NzlsMTEtMC4wNDc5NHYtMy4wNDc5em0wIDZ2M2wzMy0wLjA0Nzk0di0zem0wIDV2M2wzMy0wLjA0Nzk0di0zem0wIDV2M2gyNHYtM3oiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2opIi8+CiAgPHBhdGggZD0ibTMxIDE4aDguNWMzLjUgMCA4LjUgNCA4LjUgNnY2aC0xN3oiIGNvbG9yPSIjMDAwMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IiBmaWxsPSJ1cmwoI2kpIi8+CiAgPHBhdGggZD0ibTQwLjkxNyAyNy4yMTItNC45MTctNi4yMTIxLTUgNy42MDYxdjEuMzkzOWgxN3YtMS4zOTM5bC0zLjU0MTMtNC4xODE4eiIgY29sb3I9IiMwMDAwMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXciIGZpbGw9InVybCgjaCkiLz4KIDwvZz4KIDxwYXRoIGQ9Im0zMiA3YTI1IDI1IDAgMCAwLTI1IDI1IDI1IDI1IDAgMCAwIDI1IDI1IDI1IDI1IDAgMCAwIDI1LTI1IDI1IDI1IDAgMCAwLTAuMTAzNTItMi4xMDM1bC0yMi43OTEtMjIuNzkxYTI1IDI1IDAgMCAwLTIuMTA1NS0wLjEwNTQ3eiIgZmlsbD0idXJsKCNkKSIgc3Ryb2tlLXdpZHRoPSIxLjU3MTUiLz4KIDxwYXRoIGQ9Im01Ni44OTYgMjkuODk2LTIyLjc5MS0yMi43OTFhMjUgMjUgMCAwIDAgMjIuNzkxIDIyLjc5MXoiIGZpbGw9InVybCgjZSkiIHN0cm9rZS13aWR0aD0iMS41NzE1Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"writer,libreoffice,office\"\nLABEL oc.cat=\"office\"\nLABEL oc.desktopfile=\"libreoffice-writer.desktop\"\nLABEL oc.launch=\"libreoffice.libreoffice-writer\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.libreoffice\"\nENV ARGS=\"--writer\"\nLABEL oc.name=\"writer\"\nLABEL oc.displayname=\"Writer alpine\"\nLABEL oc.path=\"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.type=app\nLABEL oc.uniquerunkey=\"libreoffice\"\nLABEL oc.showinview=\"dock\"\nLABEL oc.mimetype=\"application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/x-hwp;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.lotus-wordpro;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.stardivision.writer-global;application/x-extension-txt;application/x-t602;application/vnd.oasis.opendocument.text-flat-xml;application/x-fictionbook+xml;application/macwriteii;application/x-aportisdoc;application/prs.plucker;application/vnd.palm;application/clarisworks;application/x-sony-bbeb;application/x-abiword;application/x-iwork-pages-sffpages;application/x-mswrite;\"\nLABEL oc.fileextensions=\"sxw;stw;doc;dot;wps;rtf;602;wpd;docx;docm;dotx;dotm;abw;zabw;pages;dummy;lrf;cwk;hqx;fb2;mw;mcw;mwd;pdb;wn\"\nLABEL oc.legacyfileextensions=\"odf;ott;fodt;uot\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"writer\"\nENV APPBIN \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.args=\"--writer\"\nENV APP \"/usr/lib/libreoffice/program/soffice\"\nLABEL oc.usedefaultapplication=true\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/writer/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/writer/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/writer/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/writer/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine.minimal:$TAG\nUSER root\nRUN apk add --no-cache --update xclock\nLABEL oc.icon=\"xclock.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJhIiBjeD0iNjMuMTI1IiBjeT0iNjMuMjA4IiByPSI2My4yMDg1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9Ii45MjM4Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjMuMTI1IiBjeT0iNjMuMjA4IiByPSI2My4yMDgiIGZpbGw9InVybCgjYSkiIG9wYWNpdHk9Ii42MiIvPgogIDxjaXJjbGUgY3g9IjYyLjEyNSIgY3k9IjYxLjg3NSIgcj0iNjEuNjI1IiBmaWxsPSIjMEQzMTdEIi8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjA5LjA5OTYiIHgyPSIyMDkuMDk5NiIgeTE9Ii0xMDYuMjEiIHkyPSItMjIzLjQ2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWM3M2Q5Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlNWY4ZmYiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjaXJjbGUgY3g9IjYxLjUiIGN5PSI2MS43NSIgcj0iNTkuMjUiIGZpbGw9InVybCgjYikiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIyMDYuOTEwMiIgeDI9IjIwNi45MTAyIiB5MT0iLTEwNy40MjY4IiB5Mj0iLTIxOS40ODIyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii41MTEiIHN0b3AtY29sb3I9IiMxZjdhZDQiLz4KICAgIDxzdG9wIG9mZnNldD0iLjU2NjMiIHN0b3AtY29sb3I9IiMyNTdlZDUiLz4KICAgIDxzdG9wIG9mZnNldD0iLjYzNzEiIHN0b3AtY29sb3I9IiMzNDg4ZDkiLz4KICAgIDxzdG9wIG9mZnNldD0iLjcxNjMiIHN0b3AtY29sb3I9IiM0Zjk4ZGUiLz4KICAgIDxzdG9wIG9mZnNldD0iLjgwMTciIHN0b3AtY29sb3I9IiM3M2IwZTYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjg5MTkiIHN0b3AtY29sb3I9IiNhMmNlZjEiLz4KICAgIDxzdG9wIG9mZnNldD0iLjk4NDkiIHN0b3AtY29sb3I9IiNkYmYyZmQiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2U1ZjhmZiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTExMy44NyAzOS4xMDYgMTAzIDQwcy0zNi4yNTggNzctNDEuNjI1IDc3QzMwLjEwMiAxMTcgNC43NSA5MS42NDggNC43NSA2MC4zNzVTMzAuMTAyIDMuNzUgNjEuMzc1IDMuNzVjMjMuNzUxIDAgNDQuMDg3IDE0LjYyMyA1Mi40OTUgMzUuMzU2eiIvPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iZCIgY3g9IjIwOS40MzI2IiBjeT0iLTE2NS4xMjYiIHI9IjUzLjAwMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iLjk1MDUiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzI0NTBhMSIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjEuODMzIiBjeT0iNjIuMTY2IiByPSI1My4wMDEiIGZpbGw9InVybCgjZCkiLz4KICA8Y2lyY2xlIGN4PSI2MS42MjUiIGN5PSI2MS44NzUiIHI9IjUxLjM3NSIgZmlsbD0iI0EyRDJGRiIvPgogIDxkZWZzPgogICAgPGNpcmNsZSBpZD0iZSIgY3g9IjYxLjYyNSIgY3k9IjYxLjg3NSIgcj0iNTEuMzc1Ii8+CiAgPC9kZWZzPgogIDxjbGlwUGF0aCBpZD0iZyI+CiAgICA8dXNlIHhsaW5rOmhyZWY9IiNlIiBvdmVyZmxvdz0idmlzaWJsZSIvPgogIDwvY2xpcFBhdGg+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMjA5LjIyNDYiIHgyPSIyMDkuMjI0NiIgeTE9Ii0xMTYuMjEiIHkyPSItMjE3LjIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4xNDc4IiBzdG9wLWNvbG9yPSIjZTFmMWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4yMzYzIiBzdG9wLWNvbG9yPSIjZDRlYmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4zNTA1IiBzdG9wLWNvbG9yPSIjZTNmMmZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii41MjY0IiBzdG9wLWNvbG9yPSIjZjNmOWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii43MjYyIiBzdG9wLWNvbG9yPSIjZmNmZWZmIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmYiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxjaXJjbGUgY3g9IjYxLjYyNSIgY3k9IjYzLjg3NSIgcj0iNTEuMzc1IiBmaWxsPSJ1cmwoI2YpIiBjbGlwLXBhdGg9InVybCgjZykiLz4KICA8ZGVmcz4KICAgIDxjaXJjbGUgaWQ9ImgiIGN4PSI2MS42MjUiIGN5PSI2MS44NzUiIHI9IjUxLjM3NSIvPgogIDwvZGVmcz4KICA8Y2xpcFBhdGggaWQ9ImoiPgogICAgPHVzZSB4bGluazpocmVmPSIjaCIgb3ZlcmZsb3c9InZpc2libGUiLz4KICA8L2NsaXBQYXRoPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjIwNi42NDA2IiB4Mj0iMjA2LjY0MDYiIHkxPSItMTE2LjIxIiB5Mj0iLTIxNy4yMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMTQzNSIgc3RvcC1jb2xvcj0iI2VkZjdmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMjgwMiIgc3RvcC1jb2xvcj0iI2UwZjJmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMzA2MyIgc3RvcC1jb2xvcj0iI2UzZjNmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNDk0MiIgc3RvcC1jb2xvcj0iI2YzZmFmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNzA3NiIgc3RvcC1jb2xvcj0iI2ZjZmVmZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2kpIiBkPSJNMTA3LjgzMyA0MS45MTcgNjMuNSA2Mi41bC0xLjg3NSA1Mi43NWMtMjguMzczIDAtNTEuMzc1LTIzLjAwMS01MS4zNzUtNTEuMzc1UzMzLjI1MiAxMi41IDYxLjYyNSAxMi41YzIwLjkyOCAwIDM4LjE5NyAxMS40NjUgNDYuMjA4IDI5LjQxN3oiIGNsaXAtcGF0aD0idXJsKCNqKSIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjIxOC40NzY2IiB4Mj0iMjE4LjQ3NjYiIHkxPSItMTIwLjM1MzUiIHkyPSItMTk2LjcxNTIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNrKSIgZD0iTTcwLjg3NyAxOS4xNjhjLS42MiAwLTEuMTI2LS41MDYtMS4xMjYtMS4xMjZzLjUwNi0xLjEyNiAxLjEyNi0xLjEyNmMuNjE5IDAgMS4xMjYuNTA2IDEuMTI2IDEuMTI2cy0uNTA3IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibCIgeDE9IjIxMy42NDI2IiB4Mj0iMjEzLjY0MjYiIHkxPSItMTIwLjI0OCIgeTI9Ii0xOTYuNDc3MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2wpIiBkPSJNNjYuMDQ0IDE4LjU4MmMtLjYyMSAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjMgMC0uNjIxLjUwNC0xLjEyNSAxLjEyNS0xLjEyNS42MTkgMCAxLjEyMy41MDQgMS4xMjMgMS4xMjUgMCAuNjE5LS41MDQgMS4xMjMtMS4xMjMgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJtIiB4MT0iMjIzLjA1ODYiIHgyPSIyMjMuMDU4NiIgeTE9Ii0xMjAuNTg2OSIgeTI9Ii0xOTYuOTgxNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI20pIiBkPSJNNzUuNDYgMjAuNDZjLS42MiAwLTEuMTI3LS41MDYtMS4xMjctMS4xMjZzLjUwNy0xLjEyNiAxLjEyNy0xLjEyNmMuNjE5IDAgMS4xMjYuNTA3IDEuMTI2IDEuMTI2IDAgLjYyLS41MDcgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJuIiB4MT0iMjI3LjIyNjYiIHgyPSIyMjcuMjI2NiIgeTE9Ii0xMjAuODgxOCIgeTI9Ii0xOTcuMjQzNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI24pIiBkPSJNNzkuNjI4IDIyLjA4NGMtLjYyIDAtMS4xMjctLjUwNS0xLjEyNy0xLjEyNXMuNTA3LTEuMTI3IDEuMTI3LTEuMTI3IDEuMTI1LjUwNyAxLjEyNSAxLjEyNy0uNTA1IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjIzNS41MTg2IiB4Mj0iMjM1LjUxODYiIHkxPSItMTIxLjcxNzgiIHkyPSItMTk4LjAxMzMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNvKSIgZD0iTTg3LjkxOSAyNi42NjdjLS42MiAwLTEuMTI2LS41MDUtMS4xMjYtMS4xMjYgMC0uNjE5LjUwNi0xLjEyNCAxLjEyNi0xLjEyNC42MjEgMCAxLjEyNi41MDUgMS4xMjYgMS4xMjQgMCAuNjIxLS41MDUgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJwIiB4MT0iMjQyLjYwMTYiIHgyPSIyNDIuNjAxNiIgeTE9Ii0xMjIuODkyNiIgeTI9Ii0xOTkuMTg4MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNOTUuMDAyIDMzLjEyNmMtLjYxOSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjUgMC0uNjIuNTA2LTEuMTI1IDEuMTI1LTEuMTI1czEuMTI1LjUwNSAxLjEyNSAxLjEyNWMwIC42MTktLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InEiIHgxPSIyNDUuNTYwNSIgeDI9IjI0NS41NjA1IiB5MT0iLTEyMy41NTU3IiB5Mj0iLTE5OS44Njc3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjcSkiIGQ9Ik05Ny45NiAzNi43OTJjLS42MTkgMC0xLjEyNS0uNTA2LTEuMTI1LTEuMTI1IDAtLjYyLjUwNi0xLjEyNSAxLjEyNS0xLjEyNS42MiAwIDEuMTI2LjUwNiAxLjEyNiAxLjEyNSAwIC42Mi0uNTA2IDEuMTI1LTEuMTI2IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iciIgeDE9IjI1MC40MzY1IiB4Mj0iMjUwLjQzNjUiIHkxPSItMTI1LjA4MTEiIHkyPSItMjAxLjM3NjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNyKSIgZD0iTTEwMi44MzYgNDUuMTY3Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI0IDAtLjYyMi41MDQtMS4xMjYgMS4xMjQtMS4xMjYuNjIxIDAgMS4xMjYuNTA0IDEuMTI2IDEuMTI2IDAgLjYyLS41MDUgMS4xMjQtMS4xMjYgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJzIiB4MT0iMjUyLjE0MzYiIHgyPSIyNTIuMTQzNiIgeTE9Ii0xMjUuODcwMSIgeTI9Ii0yMDIuMTE1OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3MpIiBkPSJNMTA0LjU0NSA0OS40MTdjLS42MjIgMC0xLjEyNi0uNTA0LTEuMTI2LTEuMTI1IDAtLjYyLjUwNC0xLjEyNCAxLjEyNi0xLjEyNC42MiAwIDEuMTI0LjUwNCAxLjEyNCAxLjEyNHMtLjUwNCAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InQiIHgxPSIyNTMuMTQzNiIgeDI9IjI1My4xNDM2IiB5MT0iLTEyNi42MjExIiB5Mj0iLTIwMi45NDk3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjdCkiIGQ9Ik0xMDUuNTQ1IDUzLjcwOGMtLjYyMiAwLTEuMTI2LS41MDQtMS4xMjYtMS4xMjUgMC0uNjIyLjUwNC0xLjEyNiAxLjEyNi0xLjEyNi42MiAwIDEuMTI0LjUwNCAxLjEyNCAxLjEyNiAwIC42MjEtLjUwNCAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InUiIHgxPSIyNTQuMTAxNiIgeDI9IjI1NC4xMDE2IiB5MT0iLTEyNy41MzUyIiB5Mj0iLTIwMy43OTc1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjdSkiIGQ9Ik0xMDYuNTAzIDU4LjU4M2MtLjYyMiAwLTEuMTI3LS41MDQtMS4xMjctMS4xMjVzLjUwNS0xLjEyNSAxLjEyNy0xLjEyNWMuNjIgMCAxLjEyNC41MDQgMS4xMjQgMS4xMjVzLS41MDQgMS4xMjUtMS4xMjQgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJ2IiB4MT0iMjU0LjAxOTUiIHgyPSIyNTQuMDE5NSIgeTE9Ii0xMjkuMjY2NiIgeTI9Ii0yMDUuNTI4OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3YpIiBkPSJNMTA2LjQyIDY4LjA4NGMtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA1LTEuMTI0IDEuMTI1LTEuMTI0IDEuMTI0LjUwNCAxLjEyNCAxLjEyNC0uNTA0IDEuMTI1LTEuMTI0IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0idyIgeDE9IjI1My4xODU1IiB4Mj0iMjUzLjE4NTUiIHkxPSItMTMwLjA3MDMiIHkyPSItMjA2LjM5ODgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCN3KSIgZD0iTTEwNS41ODUgNzIuNzFjLS42MiAwLTEuMTI0LS41MDUtMS4xMjQtMS4xMjcgMC0uNjIuNTA0LTEuMTI0IDEuMTI0LTEuMTI0LjYyMiAwIDEuMTI2LjUwNCAxLjEyNiAxLjEyNCAwIC42MjItLjUwNCAxLjEyNy0xLjEyNiAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IngiIHgxPSIyNTIuMDE5NSIgeDI9IjI1Mi4wMTk1IiB5MT0iLTEzMC45MzI2IiB5Mj0iLTIwNy4yNjExIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjeCkiIGQ9Ik0xMDQuNDE4IDc3LjQ2Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI2IDAtLjYyLjUwNC0xLjEyNSAxLjEyNC0xLjEyNS42MjIgMCAxLjEyNy41MDUgMS4xMjcgMS4xMjUgMCAuNjIyLS41MDUgMS4xMjYtMS4xMjcgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJ5IiB4MT0iMjUwLjAxOTUiIHgyPSIyNTAuMDE5NSIgeTE9Ii0xMzEuNzI0NiIgeTI9Ii0yMDguMDIwMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI3kpIiBkPSJNMTAyLjQxOSA4MS43MDljLS42MiAwLTEuMTI0LS41MDQtMS4xMjQtMS4xMjQgMC0uNjIyLjUwNC0xLjEyNiAxLjEyNC0xLjEyNi42MjIgMCAxLjEyNi41MDQgMS4xMjYgMS4xMjYgMCAuNjItLjUwNCAxLjEyNC0xLjEyNiAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9InoiIHgxPSIyNDUuNTU4NiIgeDI9IjI0NS41NTg2IiB5MT0iLTEzMy4yMTQ4IiB5Mj0iLTIwOS41NDM0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjeikiIGQ9Ik05Ny45NTkgOTAuMDQyYy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNXMuNTA2LTEuMTI2IDEuMTI1LTEuMTI2Yy42MiAwIDEuMTI2LjUwNyAxLjEyNiAxLjEyNnMtLjUwNiAxLjEyNS0xLjEyNiAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkEiIHgxPSIyNDIuNTE4NiIgeDI9IjI0Mi41MTg2IiB5MT0iLTEzMy45MDcyIiB5Mj0iLTIxMC4yMDI2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjQSkiIGQ9Ik05NC45MTkgOTMuNzA4Yy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNSAwLS42Mi41MDYtMS4xMjUgMS4xMjUtMS4xMjVzMS4xMjUuNTA1IDEuMTI1IDEuMTI1YzAgLjYxOS0uNTA2IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iQiIgeDE9IjIzOS4yMjg1IiB4Mj0iMjM5LjIyODUiIHkxPSItMTM0LjUwNDkiIHkyPSItMjEwLjgwMDQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNCKSIgZD0iTTkxLjYyOSA5N2MtLjYyIDAtMS4xMjYtLjUwNi0xLjEyNi0xLjEyNXMuNTA2LTEuMTI1IDEuMTI2LTEuMTI1Yy42MTkgMCAxLjEyNS41MDYgMS4xMjUgMS4xMjVTOTIuMjQ4IDk3IDkxLjYyOSA5N3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkMiIHgxPSIyMzUuNjAzNSIgeDI9IjIzNS42MDM1IiB5MT0iLTEzNS4wODY5IiB5Mj0iLTIxMS4zNDkyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjQykiIGQ9Ik04OC4wMDIgMTAwLjA0Yy0uNjE5IDAtMS4xMjMtLjUwNC0xLjEyMy0xLjEyMyAwLS42Mi41MDQtMS4xMjYgMS4xMjMtMS4xMjYuNjIgMCAxLjEyNi41MDYgMS4xMjYgMS4xMjYgMCAuNjE5LS41MDYgMS4xMjMtMS4xMjYgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJEIiB4MT0iMjI3LjE0MjYiIHgyPSIyMjcuMTQyNiIgeTE9Ii0xMzUuODc3IiB5Mj0iLTIxMi4yMDU2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjRCkiIGQ9Ik03OS41NDUgMTA0LjcwOWMtLjYyMiAwLTEuMTI3LS41MDUtMS4xMjctMS4xMjcgMC0uNjE5LjUwNS0xLjEyNCAxLjEyNy0xLjEyNC42MTkgMCAxLjEyNC41MDUgMS4xMjQgMS4xMjQgMCAuNjIyLS41MDUgMS4xMjctMS4xMjQgMS4xMjd6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJFIiB4MT0iMjIyLjk3NjYiIHgyPSIyMjIuOTc2NiIgeTE9Ii0xMzYuMjE2OCIgeTI9Ii0yMTIuNTQ1NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI0UpIiBkPSJNNzUuMzc3IDEwNi41ODRjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjcgMC0uNjIuNTA1LTEuMTI0IDEuMTI1LTEuMTI0czEuMTI0LjUwNCAxLjEyNCAxLjEyNGMwIC42MjItLjUwNCAxLjEyNy0xLjEyNCAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkYiIHgxPSIyMTguMTg0NiIgeDI9IjIxOC4xODQ2IiB5MT0iLTEzNi40Njk3IiB5Mj0iLTIxMi43MzIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNGKSIgZD0iTTcwLjU4NSAxMDcuNjI1Yy0uNjIgMC0xLjEyNC0uNTA0LTEuMTI0LTEuMTI0cy41MDQtMS4xMjUgMS4xMjQtMS4xMjUgMS4xMjQuNTA1IDEuMTI0IDEuMTI1LS41MDQgMS4xMjQtMS4xMjQgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJHIiB4MT0iMjEzLjY4NTUiIHgyPSIyMTMuNjg1NSIgeTE9Ii0xMzYuNjM2NyIgeTI9Ii0yMTIuODk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjRykiIGQ9Ik02Ni4wODYgMTA4LjU0MmMtLjYyIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNSAwLS42Mi41MDUtMS4xMjQgMS4xMjUtMS4xMjRzMS4xMjQuNTA0IDEuMTI0IDEuMTI0YzAgLjYyMS0uNTA0IDEuMTI1LTEuMTI0IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iSCIgeDE9IjE5OS4xNDE2IiB4Mj0iMTk5LjE0MTYiIHkxPSItMTIwLjM1MzUiIHkyPSItMTk2LjY2NTUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNIKSIgZD0iTTUxLjU0MiAxOS4xNjdjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjVzLjUwNS0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNS41MDUgMS4xMjUgMS4xMjUtLjUwNCAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IkkiIHgxPSIyMDMuOTc0NiIgeDI9IjIwMy45NzQ2IiB5MT0iLTEyMC4yNDgiIHkyPSItMTk2LjQ3NzIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNJKSIgZD0iTTU2LjM3NiAxOC41ODJjLS42MjEgMC0xLjEyNi0uNTAzLTEuMTI2LTEuMTI0cy41MDUtMS4xMjQgMS4xMjYtMS4xMjQgMS4xMjQuNTAzIDEuMTI0IDEuMTI0LS41MDMgMS4xMjQtMS4xMjQgMS4xMjR6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJKIiB4MT0iMTk0LjU1ODYiIHgyPSIxOTQuNTU4NiIgeTE9Ii0xMjAuNTg5OCIgeTI9Ii0xOTYuODUyMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI0opIiBkPSJNNDYuOTU5IDIwLjQ1OGMtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA0LTEuMTI1IDEuMTI1LTEuMTI1Yy42MiAwIDEuMTI1LjUwNSAxLjEyNSAxLjEyNXMtLjUwNSAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IksiIHgxPSIxOTAuMzkyNiIgeDI9IjE5MC4zOTI2IiB5MT0iLTEyMC44ODQ4IiB5Mj0iLTE5Ny4xODAzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjSykiIGQ9Ik00Mi43OTIgMjIuMDg0Yy0uNjE5IDAtMS4xMjQtLjUwNS0xLjEyNC0xLjEyNiAwLS42Mi41MDQtMS4xMjQgMS4xMjQtMS4xMjQuNjIyIDAgMS4xMjYuNTA0IDEuMTI2IDEuMTI0IDAgLjYyMS0uNTA1IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iTCIgeDE9IjE4Mi4wOTk2IiB4Mj0iMTgyLjA5OTYiIHkxPSItMTIxLjcxNjgiIHkyPSItMTk4LjAxMjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNMKSIgZD0iTTM0LjUgMjYuNjY3Yy0uNjIxIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNXMuNTA0LTEuMTI1IDEuMTI1LTEuMTI1IDEuMTI1LjUwNCAxLjEyNSAxLjEyNS0uNTA0IDEuMTI1LTEuMTI1IDEuMTI1eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iTSIgeDE9IjE3NS4wMTU2IiB4Mj0iMTc1LjAxNTYiIHkxPSItMTIyLjg4MzgiIHkyPSItMTk5LjIyODkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNNKSIgZD0iTTI3LjQxNyAzMy4xMjZjLS42MjEgMC0xLjEyNi0uNTA2LTEuMTI2LTEuMTI2IDAtLjYyMS41MDYtMS4xMjUgMS4xMjYtMS4xMjVzMS4xMjUuNTA0IDEuMTI1IDEuMTI1LS41MDQgMS4xMjYtMS4xMjUgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJOIiB4MT0iMTc4LjU3ODEiIHgyPSIxNzguNTc4MSIgeTE9Ii0xMjIuMjYzMiIgeTI9Ii0xOTguNTkxOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI04pIiBkPSJNMzAuOTc5IDI5LjY4OWMtLjYyMSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjZzLjUwNC0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNC41MDQgMS4xMjQgMS4xMjUtLjUwMyAxLjEyNi0xLjEyNCAxLjEyNnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9Ik8iIHgxPSIxNzIuMDU3NiIgeDI9IjE3Mi4wNTc2IiB5MT0iLTEyMy41NTQ3IiB5Mj0iLTE5OS44NjY3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjTykiIGQ9Ik0yNC40NTcgMzYuNzkyYy0uNjE5IDAtMS4xMjMtLjUwNC0xLjEyMy0xLjEyNXMuNTA0LTEuMTI1IDEuMTIzLTEuMTI1Yy42MjEgMCAxLjEyNS41MDQgMS4xMjUgMS4xMjVzLS41MDQgMS4xMjUtMS4xMjUgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJQIiB4MT0iMTY3LjE4MzYiIHgyPSIxNjcuMTgzNiIgeTE9Ii0xMjUuMDc3MSIgeTI9Ii0yMDEuMzg5MiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1ApIiBkPSJNMTkuNTgzIDQ1LjE2N2MtLjYyIDAtMS4xMjUtLjUwNC0xLjEyNS0xLjEyNiAwLS42Mi41MDUtMS4xMjUgMS4xMjUtMS4xMjUuNjIyIDAgMS4xMjYuNTA1IDEuMTI2IDEuMTI1LS4wMDEuNjIyLS41MDUgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJRIiB4MT0iMTY1LjQ3NDYiIHgyPSIxNjUuNDc0NiIgeTE9Ii0xMjUuODU5NCIgeTI9Ii0yMDIuMTM4MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1EpIiBkPSJNMTcuODc1IDQ5LjQxN2MtLjYyIDAtMS4xMjUtLjUwNS0xLjEyNS0xLjEyNXMuNTA1LTEuMTI1IDEuMTI1LTEuMTI1UzE5IDQ3LjY3MiAxOSA0OC4yOTJjLS4wMDEuNjItLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlIiIHgxPSIxNjQuNDc0NiIgeDI9IjE2NC40NzQ2IiB5MT0iLTEyNi42NTMzIiB5Mj0iLTIwMi44OTkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNSKSIgZD0iTTE2Ljg3NSA1My43MDhjLS42MiAwLTEuMTI1LS41MDUtMS4xMjUtMS4xMjVzLjUwNS0xLjEyMyAxLjEyNS0xLjEyMyAxLjEyNC41MDMgMS4xMjQgMS4xMjMtLjUwMyAxLjEyNS0xLjEyNCAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlMiIHgxPSIxNjMuNTE2NiIgeDI9IjE2My41MTY2IiB5MT0iLTEyNy41MjA1IiB5Mj0iLTIwMy44MTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNTKSIgZD0iTTE1LjkxNyA1OC41ODRjLS42MjEgMC0xLjEyNC0uNTA2LTEuMTI0LTEuMTI2IDAtLjYyMS41MDMtMS4xMjQgMS4xMjQtMS4xMjRzMS4xMjQuNTAzIDEuMTI0IDEuMTI0YzAgLjYyLS41MDQgMS4xMjYtMS4xMjQgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJUIiB4MT0iMTYzLjU5OTYiIHgyPSIxNjMuNTk5NiIgeTE9Ii0xMjkuMjY1NiIgeTI9Ii0yMDUuNTI3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1QpIiBkPSJNMTYgNjguMDgzYy0uNjE5IDAtMS4xMjQtLjUwNS0xLjEyNC0xLjEyNCAwLS42MjEuNTA0LTEuMTI1IDEuMTI0LTEuMTI1LjYyMSAwIDEuMTI1LjUwNCAxLjEyNSAxLjEyNSAwIC42MTktLjUwNCAxLjEyNC0xLjEyNSAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlUiIHgxPSIxNjQuNDMyNiIgeDI9IjE2NC40MzI2IiB5MT0iLTEzMC4wNTA4IiB5Mj0iLTIwNi40MTI1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjVSkiIGQ9Ik0xNi44MzMgNzIuNzExYy0uNjIgMC0xLjEyNi0uNTA3LTEuMTI2LTEuMTI2IDAtLjYyLjUwNi0xLjEyNiAxLjEyNi0xLjEyNnMxLjEyNi41MDYgMS4xMjYgMS4xMjZjMCAuNjE5LS41MDYgMS4xMjYtMS4xMjYgMS4xMjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJWIiB4MT0iMTY1LjU5OTYiIHgyPSIxNjUuNTk5NiIgeTE9Ii0xMzAuOTMyNiIgeTI9Ii0yMDcuMjYxMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1YpIiBkPSJNMTggNzcuNDZjLS42MiAwLTEuMTI3LS41MDctMS4xMjctMS4xMjcgMC0uNjE5LjUwNy0xLjEyNCAxLjEyNy0xLjEyNHMxLjEyNi41MDUgMS4xMjYgMS4xMjRjMCAuNjItLjUwNiAxLjEyNy0xLjEyNiAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IlciIHgxPSIxNjcuNTk5NiIgeDI9IjE2Ny41OTk2IiB5MT0iLTEzMS43MjQ2IiB5Mj0iLTIwOC4wMjAxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjVykiIGQ9Ik0xOS45OTkgODEuNzA5Yy0uNjIgMC0xLjEyNS0uNTA0LTEuMTI1LTEuMTI1IDAtLjYyLjUwNS0xLjEyNSAxLjEyNS0xLjEyNS42MjEgMCAxLjEyNy41MDUgMS4xMjcgMS4xMjUgMCAuNjIxLS41MDYgMS4xMjUtMS4xMjcgMS4xMjV6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJYIiB4MT0iMTcyLjA1ODYiIHgyPSIxNzIuMDU4NiIgeTE9Ii0xMzMuMTg5NSIgeTI9Ii0yMDkuNTUxMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI1gpIiBkPSJNMjQuNDU4IDkwLjA0M2MtLjYxOSAwLTEuMTI0LS41MDUtMS4xMjQtMS4xMjZzLjUwNS0xLjEyNiAxLjEyNC0xLjEyNmMuNjIxIDAgMS4xMjYuNTA1IDEuMTI2IDEuMTI2cy0uNTA1IDEuMTI2LTEuMTI2IDEuMTI2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iWSIgeDE9IjE3NS4wOTk2IiB4Mj0iMTc1LjA5OTYiIHkxPSItMTMzLjg3OTkiIHkyPSItMjEwLjIwODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNZKSIgZD0iTTI3LjUgOTMuNzA4Yy0uNjE5IDAtMS4xMjUtLjUwNi0xLjEyNS0xLjEyNSAwLS42MjEuNTA2LTEuMTI2IDEuMTI1LTEuMTI2czEuMTI1LjUwNSAxLjEyNSAxLjEyNmMwIC42MTktLjUwNiAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9IloiIHgxPSIxNzguMzg5NiIgeDI9IjE3OC4zODk2IiB5MT0iLTEzNC41MDQ5IiB5Mj0iLTIxMC44MDA0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjWikiIGQ9Ik0zMC43OSA5N2MtLjYxOSAwLTEuMTI1LS41MDYtMS4xMjUtMS4xMjVzLjUwNi0xLjEyNSAxLjEyNS0xLjEyNWMuNjIgMCAxLjEyNS41MDYgMS4xMjUgMS4xMjVTMzEuNDEgOTcgMzAuNzkgOTd6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhYSIgeDE9IjE4Mi4wMTU2IiB4Mj0iMTgyLjAxNTYiIHkxPSItMTM1LjA4NjkiIHkyPSItMjExLjM0OTIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhYSkiIGQ9Ik0zNC40MTcgMTAwLjA0Yy0uNjIgMC0xLjEyNS0uNTA0LTEuMTI1LTEuMTIzIDAtLjYyLjUwNi0xLjEyNiAxLjEyNS0xLjEyNnMxLjEyNC41MDYgMS4xMjQgMS4xMjZjMCAuNjE5LS41MDQgMS4xMjMtMS4xMjQgMS4xMjN6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhYiIgeDE9IjE5MC40NzQ2IiB4Mj0iMTkwLjQ3NDYiIHkxPSItMTM1Ljg3NyIgeTI9Ii0yMTIuMjA1NiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FiKSIgZD0iTTQyLjg3NSAxMDQuNzA5Yy0uNjIgMC0xLjEyNC0uNTA1LTEuMTI0LTEuMTI3IDAtLjYxOS41MDQtMS4xMjQgMS4xMjQtMS4xMjRzMS4xMjQuNTA1IDEuMTI0IDEuMTI0YzAgLjYyMi0uNTA0IDEuMTI3LTEuMTI0IDEuMTI3eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYWMiIHgxPSIxOTQuNjQwNiIgeDI9IjE5NC42NDA2IiB5MT0iLTEzNi4yMTY4IiB5Mj0iLTIxMi41NDU0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWMpIiBkPSJNNDcuMDQyIDEwNi41ODRjLS42MjIgMC0xLjEyNi0uNTA1LTEuMTI2LTEuMTI3IDAtLjYyLjUwNC0xLjEyNCAxLjEyNi0xLjEyNC42MiAwIDEuMTI1LjUwNCAxLjEyNSAxLjEyNCAwIC42MjItLjUwNCAxLjEyNy0xLjEyNSAxLjEyN3oiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFkIiB4MT0iMTk5LjQzMzYiIHgyPSIxOTkuNDMzNiIgeTE9Ii0xMzYuNDY5NyIgeTI9Ii0yMTIuNzMyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWQpIiBkPSJNNTEuODM0IDEwNy42MjVjLS42MiAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjRzLjUwNC0xLjEyNSAxLjEyNS0xLjEyNSAxLjEyNS41MDUgMS4xMjUgMS4xMjUtLjUwNCAxLjEyNC0xLjEyNSAxLjEyNHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFlIiB4MT0iMjAzLjkzMzYiIHgyPSIyMDMuOTMzNiIgeTE9Ii0xMzYuNjM2NyIgeTI9Ii0yMTIuODk5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWUpIiBkPSJNNTYuMzM0IDEwOC41NDJjLS42MiAwLTEuMTI1LS41MDQtMS4xMjUtMS4xMjUgMC0uNjIuNTA0LTEuMTI0IDEuMTI1LTEuMTI0czEuMTI1LjUwNCAxLjEyNSAxLjEyNGMtLjAwMS42MjEtLjUwNSAxLjEyNS0xLjEyNSAxLjEyNXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFmIiB4MT0iMjA5LjQ3NDYiIHgyPSIyMDkuNDc0NiIgeTE9Ii0xMTYuMjEiIHkyPSItMjEzLjIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIC0xNDcuNjAwMSAtMTAyLjk2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjA5OGUzIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMWNlZjQiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxwYXRoIGZpbGw9InVybCgjYWYpIiBkPSJNNjAuODc0IDExMS4yNXYtOC42MjZoMi4wMDF2OC42MjZ6Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhZyIgeDE9IjIwOS40NzM2IiB4Mj0iMjA5LjQ3MzYiIHkxPSItMTE1Ljc2MzciIHkyPSItMjE2LjUwMzQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2MDk4ZTMiLz4KICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2IxY2VmNCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhZykiIGQ9Ik02MC44NzQgMjEuNDU4VjEyLjVoMnY4Ljk1OHoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFoIiB4MT0iMjU0LjMwNzYiIHgyPSIyNTQuMzA3NiIgeTE9Ii0xMTYuMjEwNCIgeTI9Ii0yMTMuMjEwNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FoKSIgZD0iTTEwMi4zOTUgNjMuMTA0di0yLjAwMWg4LjYyNnYyLjAwMXoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFpIiB4MT0iMTY0LjY0MDYiIHgyPSIxNjQuNjQwNiIgeTE9Ii0xMTYuMjEwNCIgeTI9Ii0yMTMuMjEwNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FpKSIgZD0iTTEyLjcyOCA2My4xMDR2LTJoOC42MjZ2MnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFqIiB4MT0iMjA5LjM4OTYiIHgyPSIyMDkuMzg5NSIgeTE9Ii0xMTUuNDYwNCIgeTI9Ii0yMTMuNzA5OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzYwOThlMyIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYjFjZWY0Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FqKSIgZD0ibTI2LjM1OSA0Mi4zOTMuODY3LTEuNTE5LTcuNzU0LTQuNDM1LS44NjggMS41MTcuMzI2LjE4OCA3LjQyOSA0LjI0OXpNMzYuNDIzIDE5LjUzbC4xODkuMzI0IDQuMjgxIDcuNDA4IDEuNTE2LS44NzUtNC40NzItNy43MzItMS41MTQuODc1em0wIDg0Ljg0Mi4zMjQuMTg3IDEuMTk0LjY4MyA0LjQzNC03Ljc1Ny0xLjUxOS0uODY4LTQuNDMzIDcuNzU1ek0xOC42MzYgODUuOTA2bC4xODguMzI2LjY4NyAxLjE5IDcuNzM1LTQuNDc0LS44NzgtMS41MTQtNy43MzIgNC40NzJ6bTc4LjU4MS00My41MTQgNy43NTgtNC40MzQtLjg3MS0xLjUxOS03Ljc1NCA0LjQzNi4xODcuMzI1LjY4IDEuMTkyek04Mi42ODYgMjcuMjY1bDQuNDY5LTcuNzM3LTEuNTE4LS44NzQtNC40NjggNy43MzMuMzI0LjE5IDEuMTkzLjY4OHptLTEuNDg0IDcwLjIxOS4xODcuMzI2IDQuMjQ1IDcuNDMgMS41MjEtLjg2OC00LjQzNC03Ljc1Ny0xLjUxOS44Njl6bTE1LjEzLTE0LjUzNC4zMjIuMTg4IDcuNDA4IDQuMjg0Ljg4MS0xLjUxNy03LjczNy00LjQ3MS0uODc0IDEuNTE2eiIvPgogIDxwYXRoIGQ9Ik02MC42MTMgMzAuODc2di04LjIyOGgtLjY0OGMtLjE3NS4zNTQtLjQ3My43MTktLjg5NCAxLjA5Ni0uNDIxLjM3Ni0uOTEzLjY5Ny0xLjQ3Ni45NjF2Ljk3M2MuMzEzLS4xMTYuNjY2LS4yODkgMS4wNTktLjUyLjM5My0uMjMxLjcxMS0uNDYyLjk1My0uNjkzdjYuNDExaDEuMDA2em00LjI3MS0xLjUxMmMuMTcyLS4xODEuNTYtLjUyNCAxLjE2My0xLjAzMS43MjMtLjYxMSAxLjI0LTEuMDkyIDEuNTUxLTEuNDQyLjMxMi0uMzUuNTM0LS42ODQuNjY4LTEgLjEzNS0uMzE3LjIwMS0uNjM5LjIwMS0uOTY3IDAtLjY0NS0uMjI5LTEuMTg1LS42ODgtMS42MjEtLjQ1OC0uNDM2LTEuMDgtLjY1NC0xLjg2Ny0uNjU0LS43NzggMC0xLjM5OC4yMDItMS44NjEuNjA2LS40NjIuNDA1LS43MjkuOTkyLS43OTkgMS43NjRsMS4wMzQuMTA2Yy4wMDMtLjUxNS4xNTEtLjkxNy40NDEtMS4yMDguMjkxLS4yOTEuNjc4LS40MzYgMS4xNjMtLjQzNi40NTggMCAuODMuMTM3IDEuMTE0LjQxMS4yODUuMjc0LjQyOC42MS40MjggMS4wMDkgMCAuMzgtLjE1Ni43ODMtLjQ2OSAxLjIxLS4zMTMuNDI3LS45MTUgMS4wMDUtMS44MDYgMS43MzUtLjU3NC40Ny0xLjAxMy44ODMtMS4zMTYgMS4yNDEtLjMwNC4zNTctLjUyNS43MjEtLjY2MyAxLjA5LS4wODYuMjI0LS4xMjUuNDU3LS4xMTcuNjk5aDUuNDE3di0uOTY3aC00LjAxOWMuMTEyLS4xODIuMjU0LS4zNjQuNDI1LS41NDV6bTE3LjE1My4zOTJ2Ni40MTFoMS4wMDZ2LTguMjI4aC0uNjQ4Yy0uMTc2LjM1NC0uNDc0LjcxOS0uODk1IDEuMDk2LS40MjIuMzc2LS45MTMuNjk3LTEuNDc2Ljk2MXYuOTczYy4zMTMtLjExNi42NjYtLjI4OSAxLjA2LS41Mi4zOTMtLjIzMS43MTEtLjQ2Mi45NTMtLjY5M3ptMTQuMjYyIDE4LjA5aC00LjAyYy4xMTItLjE4My4yNTQtLjM2NC40MjYtLjU0NS4xNzEtLjE4MS41NTktLjUyNCAxLjE2Mi0xLjAzMS43MjMtLjYxMSAxLjI0LTEuMDkyIDEuNTUxLTEuNDQycy41MzQtLjY4NC42NjgtMWMuMTM1LS4zMTcuMjAxLS42MzkuMjAxLS45NjcgMC0uNjQ1LS4yMjktMS4xODUtLjY4OC0xLjYyMS0uNDU4LS40MzYtMS4wOC0uNjU0LTEuODY3LS42NTQtLjc3OCAwLTEuMzk4LjIwMi0xLjg2MS42MDYtLjQ2MS40MDUtLjcyOS45OTItLjc5OSAxLjc2NGwxLjAzNC4xMDZjLjAwMy0uNTE1LjE1MS0uOTE3LjQ0MS0xLjIwOHMuNjc5LS40MzYgMS4xNjMtLjQzNmMuNDU4IDAgLjgzLjEzNyAxLjExNS40MTEuMjg1LjI3NC40MjguNjEuNDI4IDEuMDA5IDAgLjM4LS4xNTcuNzgzLS40NzEgMS4yMS0uMzEzLjQyNy0uOTE0IDEuMDA1LTEuODA1IDEuNzM1LS41NzQuNDctMS4wMTMuODgzLTEuMzE2IDEuMjQxLS4zMDQuMzU3LS41MjUuNzIxLS42NjIgMS4wOS0uMDg2LjIyNC0uMTI1LjQ1Ny0uMTE3LjY5OWg1LjQxNnYtLjk2N3ptMy45MjIgMTQuMjQ3Yy0uMjctLjM1Mi0uNjQ2LS41ODQtMS4xMy0uNjk2LjM3Mi0uMTcxLjY1NC0uNDAyLjg0NS0uNjkzLjE4OS0uMjkxLjI4NS0uNjEzLjI4NS0uOTY3IDAtLjM3My0uMS0uNzI1LS4zLTEuMDU3LS4xOTktLjMzMi0uNDg3LS41OTMtLjg2My0uNzg1cy0uNzg4LS4yODgtMS4yMzUtLjI4OGMtLjY0OCAwLTEuMTkuMTg2LTEuNjI3LjU1Ni0uNDM2LjM3MS0uNzE1Ljg5NC0uODM4IDEuNTY4bDEuMDA2LjE3OWMuMDc0LS40OTIuMjQyLS44NjEuNTAzLTEuMTA3cy41ODctLjM2OS45NzktLjM2OWMuMzk1IDAgLjcxOC4xMjEuOTY3LjM2M3MuMzc0LjU0OC4zNzQuOTE3YzAgLjQ2Ni0uMTcxLjgxMS0uNTE0IDEuMDM0cy0uNzI5LjMzNS0xLjE1Ny4zMzVjLS4wNDEgMC0uMDk1LS4wMDQtLjE2Mi0uMDExbC0uMTEyLjg4M2MuMjgzLS4wNzQuNTIxLS4xMTEuNzExLS4xMTEuNDY1IDAgLjg1LjE1IDEuMTUuNDUuMzAzLjMuNDUzLjY4MS40NTMgMS4xNDMgMCAuNDg0LS4xNjIuODkxLS40ODggMS4yMTlzLS43MjcuNDkyLTEuMTk5LjQ5MmMtLjM5OCAwLS43MzctLjEyNy0xLjAxNS0uMzc4LS4yNzgtLjI1MS0uNDc1LS42NjItLjU5LTEuMjMybC0xLjAwNy4xMzRjLjA2OC42ODIuMzM5IDEuMjM4LjgxNCAxLjY2Ni40NzUuNDI5IDEuMDcyLjY0MyAxLjc5MS42NDMuNzk3IDAgMS40NTctLjI0OCAxLjk3OS0uNzQ2LjUyMS0uNDk3Ljc4My0xLjEwNC43ODMtMS44MTktLjAwMS0uNTMtLjEzNi0uOTcxLS40MDMtMS4zMjN6bS00LjgyNSAxNC4wMDRoLS44MjJsLTMuNzM4IDUuMzExdi45MjJoMy41NTV2MS45NjJoMS4wMDZWODIuMzNoMS4xMDZ2LS45MjJoLTEuMTA2di01LjMxMXptLTEuMDA2IDUuMzFoLTIuNTY2bDIuNTY2LTMuNjk1djMuNjk1em0tMTIuNzg2IDkuMDM0Yy0uNTQgMC0xLjA1Ny4xNzItMS41NDguNTE1bC40NDEtMi4yMDJoMy4yNzF2LS45NjFoLTQuMDc1bC0uNzk0IDQuMjA5Ljk0NS4xMjNjLjE0OC0uMjM1LjM1NC0uNDI2LjYxNC0uNTc0LjI2MS0uMTQ2LjU1NC0uMjIxLjg3OC0uMjIxLjUyMSAwIC45NDMuMTY2IDEuMjY2LjQ5OHMuNDgzLjc4NS40ODMgMS4zNThjMCAuNjA0LS4xNjcgMS4wODgtLjUwMyAxLjQ1M3MtLjc0NS41NDgtMS4yMjkuNTQ4Yy0uNDAyIDAtLjc0Ni0uMTI5LTEuMDMxLS4zODktLjI4NS0uMjU5LS40NjctLjY0Ni0uNTQ1LTEuMTZsLTEuMDU3LjA5Yy4wNjcuNjg5LjMzNyAxLjI0Mi44MDggMS42Ni40NzIuNDE4IDEuMDguNjI2IDEuODI1LjYyNi45MDkgMCAxLjYyNi0uMzMxIDIuMTUxLS45OTUuNDMzLS41NC42NDgtMS4xODIuNjQ4LTEuOTIyIDAtLjc3OS0uMjQ2LTEuNDE2LS43MzctMS45MTItLjQ5Mi0uNDk2LTEuMDk2LS43NDQtMS44MTEtLjc0NHptLTE4Ljk1OSA0LjI4NGMtLjM4NCAwLS43NTEuMDktMS4xMDEuMjY4LS4zNTEuMTgtLjY0Ni40NTMtLjg4OS44MjIuMDA3LS44Mi4xMDItMS40NTEuMjg1LTEuODk1cy40MzMtLjc4MS43NDktMS4wMTJjLjI0Mi0uMTguNTIzLS4yNjkuODQ0LS4yNjkuMzk4IDAgLjczNC4xNDQgMS4wMDYuNDMxLjE2NC4xNzguMjkxLjQ2NS4zOC44NmwxLjAwMS0uMDc4Yy0uMDgyLS42MzgtLjMzLTEuMTM3LS43NDEtMS40OTgtLjQxMi0uMzYxLS45NC0uNTQyLTEuNTg0LS41NDItLjg2NSAwLTEuNTUyLjMxMy0yLjA2My45MzktLjU4NS43MTktLjg3OCAxLjg3LS44NzggMy40NTMgMCAxLjQxNi4yNjUgMi40MzQuNzk0IDMuMDVzMS4yMTMuOTI1IDIuMDUxLjkyNWMuNDkyIDAgLjkzMi0uMTE3IDEuMzE5LS4zNTIuMzg3LS4yMzUuNjkxLS41NzMuOTE0LTEuMDE2LjIyMS0uNDQxLjMzMi0uOTE5LjMzMi0xLjQzNCAwLS43ODItLjIzNS0xLjQyLS43MDctMS45MTQtLjQ3MS0uNDkyLTEuMDQyLS43MzgtMS43MTItLjczOHptLjkzMyA0LjExM2MtLjMwNi4zNDQtLjY3MS41MTUtMS4wOTYuNTE1LS4yOTEgMC0uNTY4LS4wODMtLjgzMy0uMjQ5cy0uNDctLjQwNi0uNjE4LS43MjRjLS4xNDctLjMxNi0uMjIxLS42NDgtLjIyMS0uOTk1IDAtLjUyOS4xNTgtLjk1Ny40NzUtMS4yODMuMzE3LS4zMjUuNzAzLS40ODggMS4xNTctLjQ4OC40NTggMCAuODM4LjE2MyAxLjE0LjQ4OC4zMDIuMzI2LjQ1My43NzMuNDUzIDEuMzQuMDAxLjU4Ny0uMTUyIDEuMDU0LS40NTcgMS4zOTZ6TTQyLjM0OSA4OC4wMDRoNC4wMTRjLS41MTEuNTgyLS45OTIgMS4yOTYtMS40NDUgMi4xNDQtLjQ1My44NDgtLjggMS43MjgtMS4wNDIgMi42NDItLjI0My45MTItLjM2OSAxLjY5MS0uMzggMi4zMzZoMS4wMzRjLjA1Ni0uODE2LjE4NS0xLjU2Ni4zODYtMi4yNTIuMjc5LS45NzMuNjc1LTEuOTIgMS4xODgtMi44NC41MTMtLjkyIDEuMDI5LTEuNjU4IDEuNTUxLTIuMjE0di0uNzgySDQyLjM1di45NjZ6bS04Ljk1MS0xMC4wNTNjLjQwNi0uMTUyLjcwOS0uMzY5LjkwOC0uNjVzLjI5OS0uNjEyLjI5OS0uOTkyYzAtLjU5Ni0uMjE4LTEuMTAyLS42NTQtMS41MThzLTEuMDEyLS42MjMtMS43MjctLjYyM2MtLjcxMiAwLTEuMjgyLjIwMy0xLjcxLjYwOXMtLjY0My45MDctLjY0MyAxLjUwNGMwIC4zOTUuMTAxLjczMy4zMDIgMS4wMTdzLjUxLjUwMS45MjguNjUzYy0uNS4xMzEtLjg4NC4zNzYtMS4xNTQuNzM2LS4yNy4zNTktLjQwNS44MDUtLjQwNSAxLjMzOCAwIC43MTYuMjQ4IDEuMzEzLjc0NCAxLjc5MS40OTYuNDc5IDEuMTQ3LjcxOSAxLjk1Ni43MTlzMS40NjEtLjIzOCAxLjk1Ny0uNzE1Yy40OTYtLjQ3OC43NDMtMS4wNjYuNzQzLTEuNzY3IDAtLjUwNy0uMTMxLS45NDItLjM5NC0xLjMwOHMtLjY0Ny0uNjMtMS4xNS0uNzk0ek0zMC45IDc2LjI0N2MwLS4zNDMuMTI2LS42MzguMzgtLjg4NHMuNTcyLS4zNjguOTU2LS4zNjhjLjM4IDAgLjY5OC4xMjYuOTUzLjM3N3MuMzgzLjU2Mi4zODMuOTMxYzAgLjM1NC0uMTI0LjY1My0uMzcyLjg5N3MtLjU2NS4zNjYtLjk1My4zNjZjLS4zOTkgMC0uNzIzLS4xMjMtLjk3My0uMzY5cy0uMzc0LS41NjItLjM3NC0uOTV6bTIuNTQzIDQuOTk3Yy0uMzEzLjMwOS0uNzA5LjQ2NC0xLjE5LjQ2NC0uMzA5IDAtLjU5OC0uMDczLS44NjYtLjIyMS0uMjY5LS4xNDctLjQ3MS0uMzU0LS42MDYtLjYyNC0uMTM2LS4yNjgtLjIwNC0uNTQ1LS4yMDQtLjgzMiAwLS40Ny4xNTUtLjg2MS40NjctMS4xNzQuMzExLS4zMTMuNzAzLS40NyAxLjE3Ni0uNDcuNDg0IDAgLjg4OC4xNTkgMS4yMS40NzZzLjQ4My43MTcuNDgzIDEuMjAxYzAgLjQ3Ny0uMTU3Ljg3MS0uNDcgMS4xOHpNMzAuNjcgNjEuNTY5YzAtMS4wMDYtLjExNC0xLjc3NS0uMzQ0LTIuMzA2LS4yMjktLjUzMS0uNTY0LS45NC0xLjAwNi0xLjIyNy0uNDQyLS4yODctLjkyOS0uNDMxLTEuNDYyLS40MzEtLjczOCAwLTEuMzUyLjI1My0xLjg0Mi43NnMtLjczNSAxLjE3Ni0uNzM1IDIuMDA3YzAgLjgwNS4yMzUgMS40NTMuNzA0IDEuOTQ1LjQ3LjQ5MiAxLjA0My43MzggMS43MjIuNzM4LjQwNiAwIC43ODQtLjEgMS4xMzItLjI5OS4zNDktLjE5OS42MjQtLjQ1OS44MjUtLjc4LjAwMy4wODkuMDA1LjE1Ny4wMDUuMjAxIDAgLjQxNy0uMDUuODI4LS4xNTEgMS4yM3MtLjIyNi43MjItLjM3NS45NThjLS4xNDkuMjM3LS4zNC40MjYtLjU3My41NjctLjIzMy4xNDMtLjUwNC4yMTMtLjgxMy4yMTMtLjM2MSAwLS42NTgtLjEwMy0uODg5LS4zMDgtLjIzMS0uMjA0LS4zODgtLjUzNS0uNDY5LS45ODlsLS45NjcuMDg5Yy4wODIuNjQ1LjMyNiAxLjE0NS43MzIgMS41LjQwNi4zNTYuOTMuNTM0IDEuNTcuNTM0LjYwNCAwIDEuMTMtLjE2MiAxLjU3OS0uNDg2LjQ0OS0uMzI0Ljc4Ny0uNzk2IDEuMDE1LTEuNDE3LjIyOC0uNjE4LjM0Mi0xLjQ1Mi4zNDItMi40OTl6bS0xLjU2OC4xMDljLS4zLjMyNi0uNjgzLjQ4OS0xLjE0OC40ODktLjQ2MiAwLS44NTEtLjE2My0xLjE2Ni0uNDg5cy0uNDcyLS43NS0uNDcyLTEuMjcxYzAtLjU4Mi4xNjYtMS4wNTUuNDk4LTEuNDIuMzMyLS4zNjUuNzIxLS41NDggMS4xNjgtLjU0OC40MzIgMCAuODAyLjE2OSAxLjEwOS41MDkuMzA4LjMzOS40NjEuNzk3LjQ2MSAxLjM3NXMtLjE1IDEuMDI5LS40NSAxLjM1NXpNMzkuMTE1IDM5LjcyYy0uMjE2LS4zMzMtLjQ5LS41ODgtLjgyMS0uNzY2LS4zMzItLjE3Ny0uNzE4LS4yNjYtMS4xNTctLjI2Ni0uNTk2IDAtMS4wOTEuMTYxLTEuNDg0LjQ4MS0uMzk0LjMyLS42ODkuNzc2LS44ODkgMS4zNjctLjE5OS41OS0uMjk5IDEuMzctLjI5OSAyLjMzOSAwIDEuNTM5LjI3IDIuNjQ5LjgxMSAzLjMzMS40NTEuNTY2IDEuMDcxLjg1IDEuODYxLjg1LjYgMCAxLjA5Ni0uMTYxIDEuNDktLjQ4My4zOTMtLjMyMi42ODgtLjc3OS44ODYtMS4zNy4xOTctLjU5LjI5Ni0xLjM2Ny4yOTYtMi4zMjggMC0uODEzLS4wNjItMS40NTgtLjE4NS0xLjkzN3MtLjI5Mi0uODg0LS41MDktMS4yMTh6bS0uODEzIDUuODM5Yy0uMzE1LjQ0Ny0uNzA0LjY3MS0xLjE2Ni42NzFzLS44NTEtLjIyMy0xLjE2Ni0uNjY4LS40NzItMS4zNC0uNDcyLTIuNjg2LjE3My0yLjI2OC41Mi0yLjc2N2MuMjc2LS4zOTEuNjQ1LS41ODcgMS4xMDctLjU4Ny40NyAwIC44NjIuMjIyIDEuMTc3LjY2NS4zMTQuNDQ0LjQ3MiAxLjM0LjQ3MiAyLjY4OSAwIDEuMzQxLS4xNTcgMi4yMzUtLjQ3MiAyLjY4M3ptLTcuNDItNS4wNTN2Ni40MTFoMS4wMDZ2LTguMjI4aC0uNjQ4Yy0uMTc1LjM1NC0uNDczLjcxOS0uODk0IDEuMDk2LS40MjEuMzc2LS45MTMuNjk3LTEuNDc2Ljk2MXYuOTczYy4zMTMtLjExNi42NjYtLjI4OSAxLjA1OS0uNTIuMzkzLS4yMzEuNzExLS40NjIuOTUzLS42OTN6bTEzLjM5NC0xMS4yNXY2LjQxMWgxLjAwNnYtOC4yMjhoLS42NDhjLS4xNzUuMzU0LS40NzMuNzE5LS44OTQgMS4wOTYtLjQyMS4zNzYtLjkxMy42OTctMS40NzYuOTYxdi45NzNjLjMxMy0uMTE2LjY2Ni0uMjg5IDEuMDU5LS41Mi4zOTMtLjIzMS43MTEtLjQ2Mi45NTMtLjY5M3ptNC45OC0uNzIxYy0uNDIxLjM3Ni0uOTEzLjY5Ny0xLjQ3Ni45NjF2Ljk3M2MuMzEzLS4xMTYuNjY2LS4yODkgMS4wNTktLjUyLjM5My0uMjMxLjcxMS0uNDYyLjk1My0uNjkzdjYuNDExaDEuMDA2di04LjIyOGgtLjY0OGMtLjE3NC4zNTQtLjQ3My43MTktLjg5NCAxLjA5NnoiLz4KICA8cGF0aCBmaWxsPSIjRkY4MDY1IiBkPSJNNjIuOTMgNTQuNjIyYy40OTMuOTg4LjA5MiAyLjE4OS0uODk2IDIuNjgzbC0yLjA4OCAxLjA0MmMtLjk4OC40OTMtMi4xODkuMDkyLTIuNjgzLS44OTZsLTUuMzU5LTEwLjczN2MtLjQ5My0uOTg4LS4wOTItMi4xODkuODk2LTIuNjgzbDIuMDg4LTEuMDQyYy45ODgtLjQ5MyAyLjE4OS0uMDkyIDIuNjgzLjg5Nmw1LjM1OSAxMC43Mzd6Ii8+CiAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjRkY4MDY1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYwLjM3NSA1Ni4zOTYgODQuMjUgMTA0Ljc1Ii8+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJhayIgeDE9IjEyNi4yMzgzIiB4Mj0iMTI2LjIzODMiIHkxPSItMjA1LjQyMTkiIHkyPSItMjA3Ljk0MTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjk3OTYgLS4yMDA4IC0uMjAwOCAtLjk3OTYgLTExMi4wMjkgLTExMy45ODA0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNTI0YWM5Ii8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4wOTU3IiBzdG9wLWNvbG9yPSIjNTg1NWJjIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4yMzUyIiBzdG9wLWNvbG9yPSIjNWQ2MGFmIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii4zNjgxIiBzdG9wLWNvbG9yPSIjNWY2NGFiIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ii43MjUzIiBzdG9wLWNvbG9yPSIjMTkwYzdmIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cGF0aCBmaWxsPSJ1cmwoI2FrKSIgZD0iTTY5LjAzMyA1OS45OTRjLjE4Ljg3OS0uMzg3IDEuNzM3LTEuMjY2IDEuOTE4bC0yOC41NiA1Ljg4Yy0uODc5LjE4MS0xLjczOC0uMzg3LTEuOTE4LTEuMjY3LS4xOC0uODc5LjM4Ni0xLjczOCAxLjI2NS0xLjkxOGwyOC41Ni01Ljg3OWMuODgtLjE4IDEuNzQuMzg2IDEuOTE5IDEuMjY2eiIvPgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYWwiIHgxPSItMTEzLjk1NzUiIHgyPSItMTEzLjk1NzUiIHkxPSItMTk4LjY2OTQiIHkyPSItMjAxLjg4NTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjY1NTIgLS43NTU1IC0uNzU1NSAtLjY1NTIgLS45Nzc0IC0xNzAuNjU5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzUyNGFjOSIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMDk1NyIgc3RvcC1jb2xvcj0iIzU4NTViYyIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMjM1MiIgc3RvcC1jb2xvcj0iIzVkNjBhZiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuMzY4MSIgc3RvcC1jb2xvcj0iIzVmNjRhYiIvPgogICAgPHN0b3Agb2Zmc2V0PSIuNzI1MyIgc3RvcC1jb2xvcj0iIzE5MGM3ZiIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHBhdGggZmlsbD0idXJsKCNhbCkiIGQ9Ik05My4zNzMgMjYuNjE5Yy40MTcuMzYyLjQ2My45OTMuMTAyIDEuNDFMNjAuMDE3IDY3LjE1MmMtLjM2Mi40MTgtLjk5NC40NjMtMS40MTEuMTAybC0uNzU1LS42NTZjLS40MTctLjM2MS0uNDYzLS45OTItLjEwMS0xLjQxbDMzLjQ1OC0zOS4xMjRjLjM2LS40MTguOTkzLS40NjIgMS40MDktLjEwMWwuNzU2LjY1NnoiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImFtIiB4MT0iMjEwLjAwNTkiIHgyPSIyMTAuMDA1OSIgeTE9Ii0xNTkuOTYwNCIgeTI9Ii0xNjguMTQ3NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAtMTQ3LjYwMDEgLTEwMi45NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzhiYTRkNiIvPgogICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMWIzZWE2Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8Y2lyY2xlIGN4PSI2Mi40MDYiIGN5PSI2MS4yODEiIHI9IjQuNDY5IiBmaWxsPSJ1cmwoI2FtKSIvPgogIDxyYWRpYWxHcmFkaWVudCBpZD0iYW4iIGN4PSIyMDguOTY0OCIgY3k9Ii0xNjAuMjUyIiByPSI3LjU2NTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgLTEgLTE0Ny42MDAxIC0xMDIuOTYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjA1MTUiIHN0b3AtY29sb3I9IiNmNmZhZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjEzNjEiIHN0b3AtY29sb3I9IiNkZWYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjI0MzIiIHN0b3AtY29sb3I9IiNiNWQ5ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjM2ODgiIHN0b3AtY29sb3I9IiM3ZGJkZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjUwODEiIHN0b3AtY29sb3I9IiMzNjk5ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjU3MTQiIHN0b3AtY29sb3I9IiMxNDg3ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjgxMzIiIHN0b3AtY29sb3I9IiMwZjg1ZmYiLz4KICAgIDxzdG9wIG9mZnNldD0iLjk2NyIgc3RvcC1jb2xvcj0iIzMzOTdmZiIvPgogIDwvcmFkaWFsR3JhZGllbnQ+CiAgPGNpcmNsZSBjeD0iNjIuMzY1IiBjeT0iNjEuMjkyIiByPSIzLjc1IiBmaWxsPSJ1cmwoI2FuKSIvPgo8L3N2Zz4=\"\nLABEL oc.keyword=\"xclock,clock,xclock,time\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xclock.XClock\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine.minimal\"\nLABEL oc.name=\"xclock\"\nLABEL oc.displayname=\"Xclock\"\nLABEL oc.path=\"/usr/bin/xclock\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xclock\"\nENV APPBIN \"/usr/bin/xclock\"\nENV APP \"/usr/bin/xclock\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xclock/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xclock/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xclock/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xclock/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps x11-utils xbitmaps && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_xedit.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMC45NzMiIHgyPSIzNi45MzciIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTAyIDAgMCAxLjUwMzcgLTMuOTgyNyAtMy4zNDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyYTJjMmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDI0NjQ5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjMxOS4yMSIgeDI9IjY1Ny42NSIgeTE9IjIzNS4xNSIgeTI9IjI2OS40OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTMyMzUgMCAwIC4xMzA3NSAtMzIuMzc5IDEuMDg3MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U1NGMxOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZWMzNTAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYsMCwwLDEuMzI3NiwtNTEwLjY0LC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgeD0iLS4wNDk4OTciIHk9Ii0uMDc1MjMyIiB3aWR0aD0iMS4wOTk4IiBoZWlnaHQ9IjEuMTUwNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MzU1MzYwOCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDU1MzE5IiB5PSItLjA2NTU2MyIgd2lkdGg9IjEuMTEwNiIgaGVpZ2h0PSIxLjEzMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTA2MjkxMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5LDAsMCwxLjQ5OTksLTU4MC44MSwtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5IDAgMCAxLjQ5OTkgLTU4MC44MSAtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPHJlY3QgeD0iNjQuOTY1IiB5PSIyOS43OTMiIHdpZHRoPSIuMDY3NDk1IiBoZWlnaHQ9IjAiIGZpbGw9IiMwMDBjZmYiIG9wYWNpdHk9Ii40MDc0MSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuMjU2MyI+CiAgPHBhdGggZD0ibTEyLjkzNCA1Mi45ODIgMTQuNzI0LTE5LjI3NC0xNS4xNTktMjEuMTkyIDkuNzQzMSAwLjAwODEgMTIuMDc5IDE2LjY2My0xOC4wNiAyMy43OTRoLTMuMzI3em0yOC44MTkgMC4wMTM2OC0xMS45OTUtMTYuNjkyIDE4LjIxMS0yMy44MDVoMy4yNDQ3bC0xNC43ODQgMTkuMzY0IDE1LjA2OCAyMS4xMzJ6Ii8+CiAgPHBhdGggZD0ibTMxLjk5NiAxOS44OTJjLTEuMTcxNCAwLTIuNDIyOSAwLjA4OTYtMy41NDk2IDAuMTk2NDYgMi4wMDcyIDIuNTg2MiAzLjY3MjYgNC43NzYyIDUuNTg5NCA3LjI2MzQtMS4wNzU4LTIuMjg3Mi0zLjI4NjktNC40ODA1LTIuNTIyNS01LjYwODQgMC43NTY2NS0xLjExNjYgMi4xNTA4LTAuOTI4NjIgMi4yNTctMC45Mjg2MiAyLjIzNTEgMCA0LjM4NjcgMC4yNDkzOSA2LjM5ODEgMC43MTA5NWwwLjQ3MTQ4LTAuNjQxNDljLTIuNjgyOC0wLjY4MjI4LTUuNTk2Ny0wLjk5MjIxLTguNjQzOS0wLjk5MjIxem0xMi4xMDYgMi4wODcyLTAuNDM0MjYgMC42MTI4OWM2LjE5NzIgMi4zOTc1IDEwLjM4OSA2Ljk3NjggMTAuMzg5IDEyLjIyNSAwIDcuNzI4MS05LjA4NzYgMTMuOTk4LTIwLjI4NiAxMy45OTgtMTEuMTk5IDAtMjAuMjktNi4yNzAzLTIwLjI5LTEzLjk5OCAxZS02IC00LjIwODUgMi42OTYxLTcuOTg2MiA2Ljk2MDYtMTAuNTU0bC0xLjMxMTEtMS45NzM1Yy02LjY4OTYgMi44MDIyLTExLjEzIDcuNzIwNy0xMS4xMyAxMy4zMiAwIDguNzEyMyAxMC43NSAxNS43OCAyMy45OTYgMTUuNzggMTMuMjQ3IDAgMjQtNy4wNjc1IDI0LTE1Ljc4IDAtNS44MDk2LTQuNzgwNy0xMC44OS0xMS44OTUtMTMuNjMxeiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIHN0cm9rZS13aWR0aD0iMS4yNTYzIj4KICA8cGF0aCBkPSJtMTIuOTM0IDUyLjk4MiAxNC43MjQtMTkuMjc0LTE1LjE1OS0yMS4xOTIgOS43NDMxIDAuMDA4MSAxMi4wNzkgMTYuNjYzLTE4LjA2IDIzLjc5NGgtMy4zMjd6bTI4LjgxOSAwLjAxMzY4LTExLjk5NS0xNi42OTIgMTguMjExLTIzLjgwNWgzLjI0NDdsLTE0Ljc4NCAxOS4zNjQgMTUuMDY4IDIxLjEzMnoiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzEuOTk2IDE5Ljg5MmMtMS4xNzE0IDAtMi40MjI5IDAuMDg5Ni0zLjU0OTYgMC4xOTY0NiAyLjAwNzIgMi41ODYyIDMuNjcyNiA0Ljc3NjIgNS41ODk0IDcuMjYzNC0xLjA3NTgtMi4yODcyLTMuMjg2OS00LjQ4MDUtMi41MjI1LTUuNjA4NCAwLjc1NjY1LTEuMTE2NiAyLjE1MDgtMC45Mjg2MiAyLjI1Ny0wLjkyODYyIDIuMjM1MSAwIDQuMzg2NyAwLjI0OTM5IDYuMzk4MSAwLjcxMDk1bDAuNDcxNDgtMC42NDE0OWMtMi42ODI4LTAuNjgyMjgtNS41OTY3LTAuOTkyMjEtOC42NDM5LTAuOTkyMjF6bTEyLjEwNiAyLjA4NzItMC40MzQyNiAwLjYxMjg5YzYuMTk3MiAyLjM5NzUgMTAuMzg5IDYuOTc2OCAxMC4zODkgMTIuMjI1IDAgNy43MjgxLTkuMDg3NiAxMy45OTgtMjAuMjg2IDEzLjk5OC0xMS4xOTkgMC0yMC4yOS02LjI3MDMtMjAuMjktMTMuOTk4IDFlLTYgLTQuMjA4NSAyLjY5NjEtNy45ODYyIDYuOTYwNi0xMC41NTRsLTEuMzExMS0xLjk3MzVjLTYuNjg5NiAyLjgwMjItMTEuMTMgNy43MjA3LTExLjEzIDEzLjMyIDAgOC43MTIzIDEwLjc1IDE1Ljc4IDIzLjk5NiAxNS43OCAxMy4yNDcgMCAyNC03LjA2NzUgMjQtMTUuNzggMC01LjgwOTYtNC43ODA3LTEwLjg5LTExLjg5NS0xMy42MzF6IiBmaWxsPSJ1cmwoI2EpIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xedit,text,notepad,edit,txt,editor,xedit\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xedit.Xedit\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.18.04\"\nLABEL oc.name=\"xedit\"\nLABEL oc.displayname=\"Xedit\"\nLABEL oc.path=\"/usr/bin/xedit\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/text;\"\nLABEL oc.fileextensions=\"txt;log;md\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xedit\"\nENV APPBIN \"/usr/bin/xedit\"\nENV APP \"/usr/bin/xedit\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xedit/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xedit/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xedit/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xedit/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update xeyes\nLABEL oc.icon=\"circle_xfce4-eyes.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogPGRlZnM+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDk0MSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM0N2M0ZTUiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDc4YmU1IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MzUiIHgxPSIyOS41NjUiIHgyPSIyOS43MjgiIHkxPSIxMS4wNDgiIHkyPSI1My41NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ViZWJlYiIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNjN2M3YzciIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTIwIiB4Mj0iNTIwLjAzIiB5MT0iNDQiIHkyPSI5ODUuODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA2MzU2IDAgMCAuMDYzNTYgLS41NDIzNyAtLjU0MjM3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzUzNTM1IiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzZkNmQ2ZCIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJnIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTQuMTYiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4OTEiIHg9Ii0uMTQwMzEiIHk9Ii0uMTQwMzEiIHdpZHRoPSIxLjI4MDYiIGhlaWdodD0iMS4yODA2IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjY2NDA5MjUiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI4OTUiIHg9Ii0uMTc2NTIiIHk9Ii0uMTc2NTIiIHdpZHRoPSIxLjM1MyIgaGVpZ2h0PSIxLjM1MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMS42NjQwOTI1Ii8+CiAgPC9maWx0ZXI+CiAgPGZpbHRlciBpZD0iZmlsdGVyOTA3IiB4PSItLjAyODUzIiB5PSItLjA1NTM5NSIgd2lkdGg9IjEuMDU3MSIgaGVpZ2h0PSIxLjExMDgiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuMzM4Mzc1MzgiLz4KICA8L2ZpbHRlcj4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MTEiIHg9Ii0uMDM1ODkzIiB5PSItLjA2OTE3IiB3aWR0aD0iMS4wNzE4IiBoZWlnaHQ9IjEuMTM4MyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC4zMzgzNzUzOCIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ5MjEiIHgxPSIxMC44NzkiIHgyPSIzMy41MDUiIHkxPSIyOC4yNTYiIHkyPSIyOC4yNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ5MzUiLz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50OTI5IiB4MT0iMjQuOTg5IiB4Mj0iNTMuNDU0IiB5MT0iMzQuMDk1IiB5Mj0iMzQuMDk1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTM1Ii8+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudDk0MyIgY3g9IjIyLjE5MiIgY3k9IjI2LjA2NiIgcj0iNC4wMTQzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTQxIi8+CiAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudDk1MSIgY3g9IjQxLjE2OCIgY3k9IjMxLjkwNSIgcj0iNi4yMDM5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50OTQxIi8+CiA8L2RlZnM+CiA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDYzNTYgMCAwIC4wNjM1NiAtLjU0MjM3IC0uNTQyMzcpIiBkPSJtOTY5LjcgMzkyYy0xLjEtNC4zNS0yLjM1LTktMy42NS0xMy42LTIuNS04Ljc1LTUuMzUtMTcuNi04LjQ1LTI2LjM1LTYuNDUtMTguMjUtMTQuMTUtMzYuMDUtMjMuMTUtNTMuNjUtMy44LTcuNC03Ljk1LTE0Ljk1LTEyLjMtMjIuNGgtMC4wMjVxLTMwLjYwMS01Mi4wMS03Ni4zMjUtOTcuNzVjLTkyLjE1LTkyLjE1LTIwMy40NS0xMzguMjUtMzMzLjgtMTM4LjI1cy0yNDEuNiA0Ni4xLTMzMy43NSAxMzguMjUtMTM4LjI1IDIwMy40LTEzOC4yNSAzMzMuNzUgNDYuMSAyNDEuNjUgMTM4LjI1IDMzMy44YzY4LjA1IDY4LjA1IDE0Ni41IDExMC45NSAyMzQuOSAxMjguNjUgMzEuOTUgNi40IDY0Ljc1IDkuNTUgOTguODUgOS41NSAxMzAuMzUgMCAyNDEuNjUtNDYuMDUgMzMzLjgtMTM4LjIgNDguNi00OC42IDg0LjQtMTAyLjUgMTA3LjM1LTE2MS44IDE3LTQzLjk1IDI3LTkwLjggMjkuOTUtMTQwLjc1IDAuNi0xMC4yIDAuOS0yMC42NSAwLjktMzEuMjUgMC00MS43NS00LjctODEuNi0xNC4zLTEyMHoiIGZpbHRlcj0idXJsKCNnKSIgb3BhY2l0eT0iLjI1IiBzdHJva2Utd2lkdGg9IjE1LjY3MiIvPgogPHBhdGggZD0ibTYxLjA5MSAyNC4zNzNjLTAuMDY5OTItMC4yNzY0OC0wLjE0OTM2LTAuNTcyMDQtMC4yMzE5OS0wLjg2NDQxLTAuMTU4OS0wLjU1NjE1LTAuMzQwMDQtMS4xMTg2LTAuNTM3MDgtMS42NzQ4LTAuNDA5OTYtMS4xNi0wLjg5OTM3LTIuMjkxMy0xLjQ3MTQtMy40MS0wLjI0MTUzLTAuNDcwMzQtMC41MDUzLTAuOTUwMjItMC43ODE3OC0xLjQyMzdoLTAuMDAxNnEtMS45NDUtMy4zMDU3LTQuODUxMi02LjIxMjljLTUuODU3LTUuODU3LTEyLjkzMS04Ljc4NzEtMjEuMjE2LTguNzg3MXMtMTUuMzU2IDIuOTMwMS0yMS4yMTMgOC43ODcxLTguNzg3MSAxMi45MjgtOC43ODcxIDIxLjIxMyAyLjkzMDEgMTUuMzU5IDguNzg3MSAyMS4yMTZjNC4zMjUyIDQuMzI1MiA5LjMxMTUgNy4wNTE5IDE0LjkzIDguMTc2OSAyLjAzMDcgMC40MDY3OCA0LjExNTUgMC42MDY5OSA2LjI4MjkgMC42MDY5OSA4LjI4NSAwIDE1LjM1OS0yLjkyNjkgMjEuMjE2LTguNzgzOSAzLjA4OS0zLjA4OSA1LjM2NDQtNi41MTQ4IDYuODIzMS0xMC4yODQgMS4wODA1LTIuNzkzNCAxLjcxNjEtNS43NzEyIDEuOTAzNi04Ljk0NiAwLjAzODE0LTAuNjQ4MzEgMC4wNTcyLTEuMzEyNSAwLjA1NzItMS45ODYyIDAtMi42NTM2LTAuMjk4NzMtNS4xODY1LTAuOTA4OS03LjYyNzF6IiBmaWxsPSJ1cmwoI2IpIiBzdHJva2Utd2lkdGg9Ii45OTYxIi8+CiA8Y2lyY2xlIGN4PSIyMi4xOTIiIGN5PSIyOC45ODYiIHI9IjExLjMxMyIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjg5NSkiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjguMjU2IiByPSIxMS4zMTMiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ5MjEpIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPHBhdGggZD0ibTIyLjE5MiAxNi45NDNhMTEuMzEzIDExLjMxMyAwIDAgMC0xMS4zMTMgMTEuMzEzIDExLjMxMyAxMS4zMTMgMCAwIDAgMC4wMTU2OCAwLjQyNzY2IDExLjMxMyAxMS4zMTMgMCAwIDEgMTEuMjk3LTExLjAxMSAxMS4zMTMgMTEuMzEzIDAgMCAxIDExLjI5NyAxMC44ODUgMTEuMzEzIDExLjMxMyAwIDAgMCAwLjAxNTY4LTAuMzAyMjEgMTEuMzEzIDExLjMxMyAwIDAgMC0xMS4zMTMtMTEuMzEzeiIgZmlsbD0iI2ZmZmZmZiIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjkxMSkiIG9wYWNpdHk9Ii4yIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjYuMDY2IiByPSI0LjAxNDMiIGZpbGw9InVybCgjcmFkaWFsR3JhZGllbnQ5NDMpIiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPGNpcmNsZSBjeD0iMjIuMTkyIiBjeT0iMjYuMDY2IiByPSIxLjA5NDgiIGZpbGw9IiMwMDAwMDAiIG9wYWNpdHk9Ii43NSIgc3Ryb2tlLXdpZHRoPSIuNzI5ODciLz4KIDxjaXJjbGUgY3g9IjM5LjIyMiIgY3k9IjM0LjgyNSIgcj0iMTQuMjMyIiBmaWx0ZXI9InVybCgjZmlsdGVyODkxKSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSIzOS4yMjIiIGN5PSIzNC4wOTUiIHI9IjE0LjIzMiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDkyOSkiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSI0MS4xNjgiIGN5PSIzMS45MDUiIHI9IjYuMjAzOSIgZmlsbD0idXJsKCNyYWRpYWxHcmFkaWVudDk1MSkiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+CiA8Y2lyY2xlIGN4PSI0MS4xNjgiIGN5PSIzMS45MDUiIHI9IjEuODI0NyIgZmlsbD0iIzAwMDAwMCIgb3BhY2l0eT0iLjc1IiBzdHJva2Utd2lkdGg9Ii43Mjk4NyIvPgogPHBhdGggZD0ibTM5LjIyMyAxOS44NjJhMTQuMjMyIDE0LjIzMiAwIDAgMC0xNC4yMzIgMTQuMjMyIDE0LjIzMiAxNC4yMzIgMCAwIDAgMC4wMTU2OCAwLjQyNzY2IDE0LjIzMiAxNC4yMzIgMCAwIDEgMTQuMjE3LTEzLjkzIDE0LjIzMiAxNC4yMzIgMCAwIDEgMTQuMjE3IDEzLjgwNSAxNC4yMzIgMTQuMjMyIDAgMCAwIDAuMDE1NjgtMC4zMDIyMSAxNC4yMzIgMTQuMjMyIDAgMCAwLTE0LjIzMi0xNC4yMzJ6IiBmaWxsPSIjZmZmZmZmIiBmaWx0ZXI9InVybCgjZmlsdGVyOTA3KSIgb3BhY2l0eT0iLjIiIHN0cm9rZS13aWR0aD0iLjcyOTg3Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xeyes,eyes\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"xeyes.XEyes\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nLABEL oc.name=\"xeyes\"\nLABEL oc.displayname=\"xeyes\"\nLABEL oc.path=\"/usr/bin/xeyes\"\nLABEL oc.type=app\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xeyes\"\nENV APPBIN \"/usr/bin/xeyes\"\nENV APP \"/usr/bin/xeyes\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xeyes/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xeyes/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xeyes/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xeyes/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.18.04:$TAG\nUSER root\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps man-db manpages manpages-posix manpages-dev manpages-posix-dev && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_xorg.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIxMC45NzMiIHgyPSIzNi45MzciIHkxPSIyNCIgeTI9IjI0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuNTAyIDAgMCAxLjUwMzcgLTMuOTgyNyAtMy4zNDIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiMyYTJjMmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjNDI0NjQ5IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjMxOS4yMSIgeDI9IjY1Ny42NSIgeTE9IjIzNS4xNSIgeTI9IjI2OS40OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMTMyMzUgMCAwIC4xMzA3NSAtMzIuMzc5IDEuMDg3MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2U1NGMxOCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZWMzNTAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGZpbHRlciBpZD0iZCIgeD0iLS4wMzYiIHk9Ii0uMDM2IiB3aWR0aD0iMS4wNzIiIGhlaWdodD0iMS4wNzIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjAuODg5NzI0NDkiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImUiIHgxPSI0MDguMjUiIHgyPSI0MDcuOTQiIHkxPSI1NDcuNiIgeTI9IjQ5OC44OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjMyNzYsMCwwLDEuMzI3NiwtNTEwLjY0LC02NjMuNTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZTZlNmU2IiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxmaWx0ZXIgeD0iLS4wNDk4OTciIHk9Ii0uMDc1MjMyIiB3aWR0aD0iMS4wOTk4IiBoZWlnaHQ9IjEuMTUwNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MzU1MzYwOCIvPgogIDwvZmlsdGVyPgogIDxmaWx0ZXIgaWQ9ImMiIHg9Ii0uMDU1MzE5IiB5PSItLjA2NTU2MyIgd2lkdGg9IjEuMTEwNiIgaGVpZ2h0PSIxLjEzMTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEuMTA2MjkxMiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMTE1LDAsMCwxLjAxMTUsLTM4OS4zMiwtNDg5LjkyKSIgeD0iMzg2Ljg1IiB5PSI0ODYuMzEiIHdpZHRoPSI1OS4zMTUiIGhlaWdodD0iNTkuMzE1IiByeT0iMjkuNjU3IiBmaWx0ZXI9InVybCgjZCkiIG9wYWNpdHk9Ii4yNSIvPgogPHJlY3QgeD0iMS45ODI2IiB5PSIxLjk3ODQiIHdpZHRoPSI1OS45OTciIGhlaWdodD0iNTkuOTk3IiByeT0iMjkuOTk4IiBmaWxsPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjEuMDExNSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5LDAsMCwxLjQ5OTksLTU4MC44MSwtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS40OTk5IDAgMCAxLjQ5OTkgLTU4MC44MSAtNzUzLjY0KSIgZm9udC1zaXplPSIxMi42NjZweCIgc3Ryb2tlLXdpZHRoPSIuNjY2NzIiPgogIDx0ZXh0IHg9IjczMC44OCIgeT0iMTMyLjE5IiBmb250LWZhbWlseT0iJ0Ryb2lkIFNhbnMnIiBzdHJva2Utd2lkdGg9Ii42NjY3MiIvPgogPC9nPgogPHJlY3QgeD0iNjQuOTY1IiB5PSIyOS43OTMiIHdpZHRoPSIuMDY3NDk1IiBoZWlnaHQ9IjAiIGZpbGw9IiMwMDBjZmYiIG9wYWNpdHk9Ii40MDc0MSIvPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIGZpbHRlcj0idXJsKCNjKSIgb3BhY2l0eT0iLjE1IiBzdHJva2Utd2lkdGg9IjEuMjU2MyI+CiAgPHBhdGggZD0ibTEyLjkzNCA1Mi45ODIgMTQuNzI0LTE5LjI3NC0xNS4xNTktMjEuMTkyIDkuNzQzMSAwLjAwODEgMTIuMDc5IDE2LjY2My0xOC4wNiAyMy43OTRoLTMuMzI3em0yOC44MTkgMC4wMTM2OC0xMS45OTUtMTYuNjkyIDE4LjIxMS0yMy44MDVoMy4yNDQ3bC0xNC43ODQgMTkuMzY0IDE1LjA2OCAyMS4xMzJ6Ii8+CiAgPHBhdGggZD0ibTMxLjk5NiAxOS44OTJjLTEuMTcxNCAwLTIuNDIyOSAwLjA4OTYtMy41NDk2IDAuMTk2NDYgMi4wMDcyIDIuNTg2MiAzLjY3MjYgNC43NzYyIDUuNTg5NCA3LjI2MzQtMS4wNzU4LTIuMjg3Mi0zLjI4NjktNC40ODA1LTIuNTIyNS01LjYwODQgMC43NTY2NS0xLjExNjYgMi4xNTA4LTAuOTI4NjIgMi4yNTctMC45Mjg2MiAyLjIzNTEgMCA0LjM4NjcgMC4yNDkzOSA2LjM5ODEgMC43MTA5NWwwLjQ3MTQ4LTAuNjQxNDljLTIuNjgyOC0wLjY4MjI4LTUuNTk2Ny0wLjk5MjIxLTguNjQzOS0wLjk5MjIxem0xMi4xMDYgMi4wODcyLTAuNDM0MjYgMC42MTI4OWM2LjE5NzIgMi4zOTc1IDEwLjM4OSA2Ljk3NjggMTAuMzg5IDEyLjIyNSAwIDcuNzI4MS05LjA4NzYgMTMuOTk4LTIwLjI4NiAxMy45OTgtMTEuMTk5IDAtMjAuMjktNi4yNzAzLTIwLjI5LTEzLjk5OCAxZS02IC00LjIwODUgMi42OTYxLTcuOTg2MiA2Ljk2MDYtMTAuNTU0bC0xLjMxMTEtMS45NzM1Yy02LjY4OTYgMi44MDIyLTExLjEzIDcuNzIwNy0xMS4xMyAxMy4zMiAwIDguNzEyMyAxMC43NSAxNS43OCAyMy45OTYgMTUuNzggMTMuMjQ3IDAgMjQtNy4wNjc1IDI0LTE1Ljc4IDAtNS44MDk2LTQuNzgwNy0xMC44OS0xMS44OTUtMTMuNjMxeiIvPgogPC9nPgogPGcgdHJhbnNmb3JtPSJtYXRyaXgoLjc5NzAyIDAgMCAuNzk0OTIgNS44OTk3IDUuNjYwMykiIHN0cm9rZS13aWR0aD0iMS4yNTYzIj4KICA8cGF0aCBkPSJtMTIuOTM0IDUyLjk4MiAxNC43MjQtMTkuMjc0LTE1LjE1OS0yMS4xOTIgOS43NDMxIDAuMDA4MSAxMi4wNzkgMTYuNjYzLTE4LjA2IDIzLjc5NGgtMy4zMjd6bTI4LjgxOSAwLjAxMzY4LTExLjk5NS0xNi42OTIgMTguMjExLTIzLjgwNWgzLjI0NDdsLTE0Ljc4NCAxOS4zNjQgMTUuMDY4IDIxLjEzMnoiIGZpbGw9InVybCgjYikiLz4KICA8cGF0aCBkPSJtMzEuOTk2IDE5Ljg5MmMtMS4xNzE0IDAtMi40MjI5IDAuMDg5Ni0zLjU0OTYgMC4xOTY0NiAyLjAwNzIgMi41ODYyIDMuNjcyNiA0Ljc3NjIgNS41ODk0IDcuMjYzNC0xLjA3NTgtMi4yODcyLTMuMjg2OS00LjQ4MDUtMi41MjI1LTUuNjA4NCAwLjc1NjY1LTEuMTE2NiAyLjE1MDgtMC45Mjg2MiAyLjI1Ny0wLjkyODYyIDIuMjM1MSAwIDQuMzg2NyAwLjI0OTM5IDYuMzk4MSAwLjcxMDk1bDAuNDcxNDgtMC42NDE0OWMtMi42ODI4LTAuNjgyMjgtNS41OTY3LTAuOTkyMjEtOC42NDM5LTAuOTkyMjF6bTEyLjEwNiAyLjA4NzItMC40MzQyNiAwLjYxMjg5YzYuMTk3MiAyLjM5NzUgMTAuMzg5IDYuOTc2OCAxMC4zODkgMTIuMjI1IDAgNy43MjgxLTkuMDg3NiAxMy45OTgtMjAuMjg2IDEzLjk5OC0xMS4xOTkgMC0yMC4yOS02LjI3MDMtMjAuMjktMTMuOTk4IDFlLTYgLTQuMjA4NSAyLjY5NjEtNy45ODYyIDYuOTYwNi0xMC41NTRsLTEuMzExMS0xLjk3MzVjLTYuNjg5NiAyLjgwMjItMTEuMTMgNy43MjA3LTExLjEzIDEzLjMyIDAgOC43MTIzIDEwLjc1IDE1Ljc4IDIzLjk5NiAxNS43OCAxMy4yNDcgMCAyNC03LjA2NzUgMjQtMTUuNzggMC01LjgwOTYtNC43ODA3LTEwLjg5LTExLjg5NS0xMy42MzF6IiBmaWxsPSJ1cmwoI2EpIi8+CiA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xman,man,xman,help\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.launch=\"topBox.Xman\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.18.04\"\nLABEL oc.name=\"xman\"\nLABEL oc.displayname=\"Xman\"\nLABEL oc.path=\"/usr/bin/xman\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"application/x-troff;application/x-troff-man;\"\nLABEL oc.fileextensions=\"man;roff\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xman\"\nENV APPBIN \"/usr/bin/xman\"\nENV APP \"/usr/bin/xman\"\nLABEL oc.containerengine=\"ephemeral_container\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xman/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xman/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xman/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xman/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.gtk:$TAG\nUSER root\nCOPY composer/init.d/init.xpad /composer/init.d/init.xpad\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends xpad && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"xpad.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIFNvZGlwb2RpICgiaHR0cDovL3d3dy5zb2RpcG9kaS5jb20vIikgLS0+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIGlkPSJzdmcxMTQiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIHdpZHRoPSI3NTAiCiAgIGhlaWdodD0iNzUwIgogICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9taWtlL0NvZGUveHBhZC9pbWFnZXMvaGljb2xvci9zY2FsYWJsZS9hcHBzLyIKICAgc29kaXBvZGk6ZG9jbmFtZT0ieHBhZC5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuNDYiCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIgogICB2ZXJzaW9uPSIxLjAiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIzIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTE2Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA0NjguNzUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iOTM3LjUgOiA0NjguNzUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjQ2OC43NSA6IDMxMi41IDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MjAiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZWVkZDg4O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDYyMSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY2NTUwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MjIiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MTciPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZlZTk5O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDYxOCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VlZGQ4ODtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MTkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjciPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojY2NjZDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEyOCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzY1NjcwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMjkiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMTkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZjMyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDEyMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Q3ZDUwYTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AxMjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQxMjIiCiAgICAgICB4MT0iNi44NjM1ODg4ZS0wOSIKICAgICAgIHkxPSI4LjAwNzgzNzllLTA5IgogICAgICAgeDI9IjEiCiAgICAgICB5Mj0iOC4wMDc4Mzc5ZS0wOSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjE3IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MTI0IgogICAgICAgY3g9IjAuMTEyMTg4MDkiCiAgICAgICBjeT0iLTAuMjA4MTMwOTMiCiAgICAgICBmeD0iMC4xMTIxODgwOSIKICAgICAgIGZ5PSItMC4yMDgxMzA5MyIKICAgICAgIHI9IjEuNTc0MDgiCiAgICAgICBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2MjAiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQxMjYiCiAgICAgICBjeD0iMS4yMjQ0OCIKICAgICAgIGN5PSIwLjExNjk3NjU5IgogICAgICAgZng9IjEuMjI0NDgiCiAgICAgICBmeT0iMC4xMTY5NzY1OSIKICAgICAgIHI9IjEuNDk2ODciCiAgICAgICBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQxMjciCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ2MTYiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDYyMCIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI0MDIiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIgogICAgICAgY3g9IjU4Mi44MDUyNCIKICAgICAgIGN5PSIxOTMuMDU0NCIKICAgICAgIGZ4PSI1ODIuODA1MjQiCiAgICAgICBmeT0iMTkzLjA1NDQiCiAgICAgICByPSI1ODcuNjQwMzgiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ic2NhbGUoMC45MzcwMTk4LDEuMDY3MjEzMykiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDYxNyIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDI0MDQiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHNwcmVhZE1ldGhvZD0icGFkIgogICAgICAgY3g9IjE5Ni40Njk1NiIKICAgICAgIGN5PSItMzYuODYzNTg2IgogICAgICAgZng9IjE5Ni40Njk1NiIKICAgICAgIGZ5PSItMzYuODYzNTg2IgogICAgICAgcj0iMTEzMi45ODA1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InNjYWxlKDEuMDAyMjkzNiwwLjk5NzcxMTYpIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuNDkyOCIKICAgICBpbmtzY2FwZTpjeD0iNDY4Ljc1IgogICAgIGlua3NjYXBlOmN5PSI0MTkuODYyODEiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI2NDAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjgwIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNiIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxMTQiIC8+CiAgPGcKICAgICBpZD0iZzIzOTgiCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjU0MTY2LDAuMjYwNzExNywtMC4yNjA3MTE3LDAuOTY1NDE2Niw1NS41NzEwNywtMjUxLjkyMDE1KSI+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC42NjMwMDIsLTAuMjE2MzUzLDAuMTg3NTksMC41NzQ4NTQsODEuNTUyNiw2MTkuMjY3KSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyIKICAgICAgIGlkPSJwYXRoMTI1IgogICAgICAgZD0iTSA5NS42NjkzLDE1Ny4wMjEgTCA0NjMuNTI0LDU3NS45ODcgTCA0NjEuODUyLDE1OC45NSBMIDk1LjY2OTMsMTU3LjAyMSB6IgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0MDIpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZS13aWR0aDoxcHQiIC8+CiAgICA8cGF0aAogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC45NTgzNjIsLTAuMjg1NTU2LDAuMjg1NTU2LDAuOTU4MzYyLC0xMjAuNDkyLDIwNi4xNzQpIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIgogICAgICAgaWQ9InBhdGgxMTgiCiAgICAgICBkPSJNIDEyNS4zNiwxMjIuMDYgTCAxMjUuMzYsNDcxLjc0OCBDIDEyNS4zNiw1ODguMzExIDI0OC44OTQsNjEwLjE3NSAzNzcuNTUyLDU2OC4zODkgQyAzMjEuNDE1LDY1MS4yNjYgMzU5LjU4NSw4MjEuNDM2IDQ3Ni42OTcsODIxLjQzNiBMIDgyOC4wMzQsODIxLjQzNiBMIDgyOC4wMzQsMTIyLjA2IEwgMTI1LjM2LDEyMi4wNiB6IgogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDI0MDQpO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxOC43NTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICA8L2c+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xpad,xpad, note, sticky, postit\"\nLABEL oc.cat=\"utilities\"\nLABEL oc.desktopfile=\"xpad.desktop\"\nLABEL oc.launch=\"xpad.xpad\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.gtk\"\nLABEL oc.name=\"xpad\"\nLABEL oc.displayname=\"Xpad\"\nLABEL oc.path=\"/usr/bin/xpad\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xpad\"\nENV APPBIN \"/usr/bin/xpad\"\nENV APP \"/usr/bin/xpad\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xpad/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xpad/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xpad/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xpad/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.1\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.alpine:$TAG\nUSER root\nRUN apk add --no-cache --update xterm sudo\nLABEL oc.icon=\"circle_xterm.svg\"\nLABEL oc.icondata=\"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iSXRlcm0iIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTAyNCAxMDI0IiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplU3BlZWQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiA8bWV0YWRhdGE+CiAgPHJkZjpSREY+CiAgIDxjYzpXb3JrIHJkZjphYm91dD0iIj4KICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgPGRjOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIvPgogICAgPGRjOnRpdGxlLz4KICAgPC9jYzpXb3JrPgogIDwvcmRmOlJERj4KIDwvbWV0YWRhdGE+CiA8ZGVmcz4KICA8ZmlsdGVyIGlkPSJlIiB4PSItLjA0MjY1MSIgeT0iLS4wMzExNDQiIHdpZHRoPSIxLjA4NTMiIGhlaWdodD0iMS4wNjIzIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0LjkzMTA4OTEiLz4KICA8L2ZpbHRlcj4KICA8bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSItNTA2LjQ1IiB4Mj0iLTUwNi40NSIgeTE9Ii0xOS4xMDEiIHkyPSIxMDEzLjYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjA1ODgyNCAwIDAgLjA1ODgyNCA2MS43OTEgMy4xMjM2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjMzMzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzMzMyIgb2Zmc2V0PSIuNTA3NjkiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzRhNGE0YSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJkIiB4PSItLjAzNiIgeT0iLS4wMzYiIHdpZHRoPSIxLjA3MiIgaGVpZ2h0PSIxLjA3MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC45MDAwMDAwNiIvPgogIDwvZmlsdGVyPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4NjYiIHgxPSIyNC4zOTYiIHgyPSIyNC4zOTYiIHkxPSIzMy43NzUiIHkyPSIyMi45NDkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzU4ZmYwMCIgb2Zmc2V0PSIwIi8+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiNhMGZmMDAiIG9mZnNldD0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXJHcmFkaWVudDg2OCIgeDE9IjQyLjQzNCIgeDI9IjM4LjU5OSIgeTE9Ii0zMy4wMzMiIHkyPSItMzMuMDMzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgIDxzdG9wIHN0b3AtY29sb3I9IiM1OGZmMDAiIG9mZnNldD0iMCIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjY2YwIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPG1hc2s+CiAgPGcgaWQ9ImciPgogICA8cGF0aCBkPSJtOTY5Ljc1IDM5Mi4wNWMtMS4xLTQuMzUtMi4zNS05LTMuNjUtMTMuNi0xLTMuNC0yLTYuODUtMy4xNS0xMC41LTEuNi01LjE1LTMuNC0xMC41LTUuMy0xNS44NS02LjQ1LTE4LjI1LTE0LjE1LTM2LjA1LTIzLjE1LTUzLjY1LTMuOC03LjQtNy45NS0xNC45NS0xMi4zLTIyLjQtMjAuMy0zNC41LTQ1LjgtNjcuMi03Ni4zNS05Ny43NS03Mi42LTcyLjYtMTU3LjE1LTExNi42NS0yNTMuNjUtMTMyLjA1LTE2LjI1LTIuNi0zMi44LTQuNC01MC4wNS01LjM1LTkuNy0wLjU1LTE5Ljg1LTAuODUtMzAuMS0wLjg1LTkuMzUgMC0xOC42IDAuMjUtMjcuOSAwLjc1LTExOC4zNSA2LjEtMjIwLjMgNTEuOTUtMzA1Ljg1IDEzNy41cS0xMzguMjUgMTM4LjI1LTEzOC4yNSAzMzMuNzVjMCAxMzAuMzUgNDYuMSAyNDEuNjUgMTM4LjI1IDMzMy44IDU2LjcgNTYuNjUgMTIwLjU1IDk1LjkgMTkxLjEgMTE3LjU1IDM2Ljc1IDExLjI1IDc0LjggMTcuODUgMTE0Ljc1IDE5Ljk1aDAuNGM4LjUgMC40NSAxNi42IDAuNyAyNC41IDAuN2gzYzEwLjMgMCAyMC41LTAuMyAzMC4xLTAuOCAyLjUtMC4xNSA0Ljc1LTAuMyA2Ljk1LTAuNDUgMjAuMi0xLjQ1IDM5LjktNC4wNSA1OC43LTcuNyA3Ljk1LTEuNTUgMTUuOC0zLjMgMjMuNC01LjE1IDgwLjgtMjAuMyAxNTIuMTUtNjEuNiAyMTQuNjUtMTI0LjEgNDguNi00OC42IDg0LjQtMTAyLjUgMTA3LjM1LTE2MS44IDE4LjQ1LTQ3LjY1IDI4LjY1LTk4LjggMzAuNTUtMTUzLjUgMC4yLTYuMDUgMC4zLTEyLjI1IDAuMy0xOC41di0zYy0wLjItNDAuNjUtNC45NS03OS41LTE0LjMtMTE3eiIgZmlsbD0iI2ZmZiIvPgogIDwvZz4KIDwvbWFzaz4KIDxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjMwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbHRlcj0idXJsKCNkKSIgb3BhY2l0eT0iLjI1IiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZSIvPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9InVybCgjYikiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3R5bGU9InBhaW50LW9yZGVyOmZpbGwgbWFya2VycyBzdHJva2UiLz4KIDxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNjM4MyAwIDAgLjA2MzgzIC0uMDY2NDkyIC0xLjIyNjEpIiBkPSJtMzUwLjg2IDM4OC43NGMtNC45IDAtOS4wOTk2IDEuNzUtMTIuNiA1LjI1LTMuNDUgMy40NS01LjIwMTIgNy42NTA4LTUuMjAxMiAxMi41NTFzMS43NTEyIDkuMTAwOCA1LjIwMTIgMTIuNTUxbDU0LjQ0OSA1NC40NDktNTQuNCA1NC40Yy0zLjUgMy41LTUuMjQ4OCA3LjY5OTYtNS4yOTg4IDEyLjYgMC4wNSA0LjkgMS44IDkuMTAwOCA1LjI1IDEyLjU1MSAzLjUgMy40NSA3LjY5ODggNS4yIDEyLjU0OSA1LjI1IDQuOTUgMCA5LjE1MDQtMS43NSAxMi42NS01LjI1bDYwLjUtNjAuNTUxYzEyLjctMTIuNjUgMTIuNy0yNS4zNTEgMC0zOC4wNTFsLTYwLjU1MS02MC41NDljLTMuNDY2Ny0zLjQ2NjctNy42NDg4LTUuMjAxMi0xMi41NDktNS4yMDEyeiIgZmlsdGVyPSJ1cmwoI2UpIiBzdHJva2Utd2lkdGg9IjE1LjY2NyIvPgogPHJlY3QgdHJhbnNmb3JtPSJtYXRyaXgoMCAuMDYzODMgLS4wNjM4MyAwIDY1LjM0NyAtMS4wNzEpIiB4PSI2MzcuNzgiIHk9IjMxNC43OCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjM4MCIgcng9IjIwIiBmaWx0ZXI9InVybCgjZSkiIG9wYWNpdHk9Ii41IiBzdHJva2Utd2lkdGg9IjE1LjY2NyIgc3R5bGU9InBhaW50LW9yZGVyOnN0cm9rZSBtYXJrZXJzIGZpbGwiLz4KIDxwYXRoIGQ9Im0yMi4zMjkgMjIuOTQ5Yy0wLjMxMjc3IDAtMC41ODA4MiAwLjExMTctMC44MDQyNiAwLjMzNTEtMC4yMjAyMSAwLjIyMDIxLTAuMzMxOTkgMC40ODgzNS0wLjMzMTk5IDAuODAxMTNzMC4xMTE3OCAwLjU4MDkgMC4zMzE5OSAwLjgwMTEzbDMuNDc1NSAzLjQ3NTUtMy40NzIzIDMuNDcyM2MtMC4yMjM0IDAuMjIzNC0wLjMzNTAzIDAuNDkxNDYtMC4zMzgyMiAwLjgwNDI1IDAuMDAzMiAwLjMxMjc3IDAuMTE0ODkgMC41ODA5IDAuMzM1MTEgMC44MDExMyAwLjIyMzQgMC4yMjAyMSAwLjQ5MTQxIDAuMzMxOTEgMC44MDEgMC4zMzUxMSAwLjMxNTk2IDAgMC41ODQwNy0wLjExMTcxIDAuODA3NDUtMC4zMzUxMWwzLjg2MTctMy44NjVjMC44MTA2NC0wLjgwNzQ1IDAuODEwNjQtMS42MTgyIDAtMi40Mjg4bC0zLjg2NS0zLjg2NDhjLTAuMjIxMjgtMC4yMjEyNy0wLjQ4ODIyLTAuMzMxOTktMC44MDEtMC4zMzE5OXoiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4NjYpIi8+CiA8cmVjdCB0cmFuc2Zvcm09InJvdGF0ZSg5MCkiIHg9IjM5IiB5PSItNDUuMjU1IiB3aWR0aD0iMi41NTMyIiBoZWlnaHQ9IjI0LjI1NSIgcng9IjEuMjc2NiIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudDg2OCkiIHN0eWxlPSJwYWludC1vcmRlcjpzdHJva2UgbWFya2VycyBmaWxsIi8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"xterm,xterm,shell,cmd\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"xterm.desktop\"\nLABEL oc.launch=\"xterm.XTerm\"\nLABEL oc.template=\"abcdesktopio/oc.template.alpine\"\nENV ARGS=\"-xrm 'XTerm*selectToClipboard:true'\"\nLABEL oc.name=\"xterm\"\nLABEL oc.displayname=\"Xterm (sudo)\"\nLABEL oc.path=\"/usr/bin/xterm\"\nLABEL oc.type=app\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":true}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nRUN for d in /usr/share/icons /usr/share/pixmaps ; do echo \"testing link in $d\"; if [ -d $d ] && [ -x /composer/safelinks.sh ] ; then echo \"fixing link in $d\"; cd $d ; /composer/safelinks.sh ; fi; done\nENV APPNAME \"xterm\"\nENV APPBIN \"/usr/bin/xterm\"\nLABEL oc.args=\"-xrm 'XTerm*selectToClipboard:true'\"\nENV APP \"/usr/bin/xterm\"\nRUN echo \"ALL ALL=(ALL:ALL) ALL\">/etc/sudoers.d/all\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount\nRUN for f in passwd shadow group gshadow ; do if [ -f /etc/$f ] ; then cp /etc/$f /var/secrets/abcdesktop/localaccount; rm -f /etc/$f; ln -s /var/secrets/abcdesktop/localaccount/$f /etc/$f; fi; done\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/xterm/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/xterm/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/xterm/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/xterm/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
The WM_CLASS property (of type STRING without control characters) contains two consecutive null-terminated strings. These specify the Instance and Class names to be used by both the client and the window manager for looking up resources for the application or as identifying information. to get the WM_CLASS property of an application, use the command line wmctrl -lx
# Dynamic DockerFile application file for abcdesktopio generated by abcdesktopio/oc.apps/make.js\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\nARG TAG=dev\nFROM abcdesktopio/oc.template.ubuntu.minimal.22.04:$TAG\nUSER root\nCOPY composer/init.d/init.firefox.youtube /composer/init.d/init.firefox\nRUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y firefox && apt-get clean\nRUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections\nLABEL oc.icon=\"circle_youtube.svg\"\nLABEL oc.icondata=\"PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KIDxkZWZzPgogIDxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyR3JhZGllbnQ4OTkiIHgxPSItMzkuNjA1IiB4Mj0iLTM5LjYwNSIgeTE9IjU4LjI0NyIgeTI9IjYuOTg3NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MC41NDMgLjQxOTc1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjZDAwYzIzIiBvZmZzZXQ9IjAiLz4KICAgPHN0b3Agc3RvcC1jb2xvcj0iI2ZmNTE1MSIgb2Zmc2V0PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8ZmlsdGVyIGlkPSJmaWx0ZXI5MzAiIHg9Ii0uMDM4ODgiIHk9Ii0uMDM4ODgiIHdpZHRoPSIxLjA3NzgiIGhlaWdodD0iMS4wNzc4IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgogICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIwLjk3MiIvPgogIDwvZmlsdGVyPgogPC9kZWZzPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9IiMwMDAwMDAiIGZpbHRlcj0idXJsKCNmaWx0ZXI5MzApIiBvcGFjaXR5PSIuMTUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS13aWR0aD0iMi4yODgxIiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGU7cGFpbnQtb3JkZXI6c3Ryb2tlIGZpbGwgbWFya2VycyIvPgogPGNpcmNsZSBjeD0iMzIiIGN5PSIzMiIgcj0iMzAiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQ4OTkpIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2Utd2lkdGg9IjIuMjg4MSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlO3BhaW50LW9yZGVyOnN0cm9rZSBmaWxsIG1hcmtlcnMiLz4KIDxpbWFnZSB4PSIxMC41IiB5PSIxOSIgd2lkdGg9IjQzIiBoZWlnaHQ9IjMyIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDc0FBQUFnQ0FZQUFBQ0xtb0VEQUFBQUNYQklXWE1BQUE3REFBQU93d0hIYjZoa0FBQUEgR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQWg5SlJFRlVXSVcxbU8yV2hDQUlodCttWnZmKyBiM2VhY24va1c0UllnaTNuY1ByUTdJa1FrUUh0TWpqNmVpWDFBQXpHdWRVMzhnRVdXRExhaW41VEJXQUE4TXJLYTZoejZ6a1BJTzhuIGRiNW1MWjdUTHlEa0JHQVVPcUNFYmdXdEFXdklCR0FSK3MzUSszUFNzZ1I5QS9qSnh6ZHM2N1lDM29GcllFTE9lZnhaQW12WU1RUCsgWnAxUVd2VktyRDR0azBlNndJTE5RTHplWFlXdzh2Zi80TEFzWGFCRklqNXI5Wk9naXdTMkxEdmg4TmxXaTk2Slp3eUxBY0QyRlJ6cyBwZlFwVUkvb1NDUlpDcDg4TlRwRWhxQW5KcUFWT2dmdEJoRnJ5dGlZeEl1aTQxVjU5S0xnZllFT09Tc08zeDl4V0lkamgwRTFiTlFLIGhKMnpjbHlwRVdESnRROGFIWVJDNjM0QmZMQlpsek9hQzR1RTlscDRQOVp5Z3dndzQrSlg2WUl0YmllY1YwUzNXTEE5UW1qZ25KQncgMG5YRjd0ZDlsNURVa3BZdXNTemJNN0FNVzB5S21CaDFyNGlFN2YxeS9ac2xLQ2NZUTFrM0xDVUNUV3VOMkN3SUhObWJoSXl1alB0eCBxalU0WVFsS3NONUZRWXFaZk11R1ZtQUM4UGN6MStoZGJ1WHVZUmR0MmFKRGcwZzRHTWVvRkR5VHVpa1RFbzg4blU1cWxnUWd2WXpHIEZYSG9KeUVMRHUwR1RFZ2k2emd1K251Mk5TdU9UZU1DWTRMcFRxTm90L3pSQTNzSEtpYzE4NHRQNWpodHh5M0xmdkwxQ25zdlpsVnIgUEdKVlhlU2NtWVdlTEZzcmNqREYwd0g5cVNKSHJXN0F2MnNXT1dyMUs3M0d0NFNsTytCYUhhdFdQaXJDNk5VTFd1T214eFd1YWw3NiB2T2dieWRyL1E1cWl4Ujhhbk1NQzBGUlNNZ0FBQUFCSlJVNUVya0pnZ2c9PSAiLz4KIDxwYXRoIGQ9Im0zMi4wMDMgMTkuMTQyYy02LjQ0OTQgMC0xMi40NDUgMC4yMjU1MS0xMy43NzEgMC41MTczMS0wLjg4ODY5IDAuMTk1NDktMS41OTI3IDAuNTY2MDctMi4yMzM3IDEuMTc1Mi0wLjUxMDAxIDAuNDg0Ny0wLjc5MDIzIDAuOTI0NDYtMS4wOTc0IDEuNzIxNC0wLjMzNzI4IDAuODc1MTMtMC41MTU5NCAxLjcwMDEtMC42MzkxIDIuOTQxOS0wLjIzNDg2IDIuMzY4Ny0wLjI3NzExIDMuNTM4MS0wLjI1NjE0IDcuMTA2NyAwLjAxNzggMy4wMzQ1IDAuMDMwNzEgMy4zODc0IDAuMjAyMTUgNS4zMzUxIDAuMTUxOTIgMS43MjU4IDAuMzE3OTMgMi41NDA5IDAuNzI0NDggMy41Njg0IDAuNDQ0NjcgMS4xMjM5IDEuMDYwOSAxLjgyMTggMi4wNTE3IDIuMzIxNiAwLjU5OTg3IDAuMzAyNjQgMS4xMzE4IDAuNDQzNyAyLjIxNDkgMC41ODg4OCAxLjQ3NjkgMC4xOTc5NiAzLjg5MTEgMC4zMDAyIDkuODQxNCAwLjQxNTYgNC43ODg0IDAuMDkyODggMTMuMS0wLjEwNjI2IDE1LjgyMi0wLjM3OTE5IDAuODc4MzctMC4wODgwOCAxLjQyMzMtMC4yMjU0NSAxLjk5NTItMC41MDA5OCAwLjU2NDc3LTAuMjcyMTEgMS4yMzk5LTAuODEyMDggMS41ODIxLTEuMjY1NiAwLjQ5ODY3LTAuNjYxMSAwLjk0MTI1LTEuODI0MyAxLjE2NjUtMy4wNjYyIDAuMDg3Ni0wLjQ4MzA0IDAuMjE5MjUtMS44MzI4IDAuMzI2NDYtMy4zNDg3IDAuMDkxNjEtMS4yOTU4IDAuMDkxNjItNy4yNjQyIDAtOC41NjA3LTAuMTkyOTQtMi43MzAxLTAuMzIzNC0zLjY1MjItMC42NjI5Ni00LjY5NDctMC4zMjk1NC0xLjAxMTctMC42MDYyLTEuNTA5OC0xLjE0MzktMi4wNTc5LTAuNjg2OTQtMC43MDAzNi0xLjM5MTItMS4wODk4LTIuMzUwNS0xLjMwMDgtMS4zMjY1LTAuMjkxNzktNy4zMjItMC41MTczMS0xMy43NzEtMC41MTczMXptLTMuMTkxNyA3LjcxNDRjMC4wNDM1NS0wLjAyOTU0IDguOTc1IDUuMTAzNSA4Ljk3NSA1LjE1OCAwIDAuMDU4MjkgMC4xMDkwNi0wLjAwNTItNC45OTM1IDIuODk3OS0yLjEyODUgMS4yMTEtMy44OTE5IDIuMjExLTMuOTE4NyAyLjIyMjQtMC4wMjY4OCAwLjAxMTM3LTAuMDU4MTMgMC4wMTA1Ny0wLjA2OTA1LTAuMDAxMi0wLjAyODk3LTAuMDMyMjctMC4wMjMxNC0xMC4yNTcgMC4wMDYzLTEwLjI3N3oiIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iLjY0Mjg3Ii8+Cjwvc3ZnPgo=\"\nLABEL oc.keyword=\"youtube,youtube,tube\"\nLABEL oc.cat=\"development\"\nLABEL oc.desktopfile=\"firefox.desktop\"\nLABEL oc.launch=\"Navigator.youtube\"\nLABEL oc.template=\"abcdesktopio/oc.template.ubuntu.minimal.22.04\"\nENV ARGS=\"-P youtube --class=youtube https://www.youtube.com/\"\nLABEL oc.name=\"youtube\"\nLABEL oc.displayname=\"Youtube\"\nLABEL oc.path=\"/usr/bin/firefox\"\nLABEL oc.type=app\nLABEL oc.mimetype=\"text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;video/webm;application/x-xpinstall;\"\nLABEL oc.fileextensions=\"html;xml;gif\"\nLABEL oc.legacyfileextensions=\"html;xml\"\nLABEL oc.rules=\"{\\\"homedir\\\":{\\\"default\\\":false}}\"\nLABEL oc.acl=\"{\\\"permit\\\":[\\\"all\\\"]}\"\nLABEL oc.host_config=\"{\\\"mem_limit\\\":\\\"2G\\\",\\\"shm_size\\\":\\\"2G\\\"}\"\nRUN if [ -d /usr/share/icons ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi \nRUN if [ -d /usr/share/pixmaps ] && [ -x /composer/safelinks.sh ] && [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi \nENV APPNAME \"youtube\"\nENV APPBIN \"/usr/bin/firefox\"\nLABEL oc.args=\"-P youtube --class=youtube https://www.youtube.com/\"\nENV APP \"/usr/bin/firefox\"\nUSER root\nRUN mkdir -p /var/secrets/abcdesktop/localaccount && cp /etc/passwd /etc/group /etc/shadow /var/secrets/abcdesktop/localaccount\nRUN rm -f /etc/passwd && ln -s /var/secrets/abcdesktop/localaccount/passwd /etc/passwd\nRUN rm -f /etc/group && ln -s /var/secrets/abcdesktop/localaccount/group /etc/group\nRUN rm -f /etc/shadow && ln -s /var/secrets/abcdesktop/localaccount/shadow /etc/shadow\nRUN rm -f /etc/gshadow && ln -s /var/secrets/abcdesktop/localaccount/gshadow /etc/gshadow\nUSER balloon\nCMD [ \"/composer/appli-docker-entrypoint.sh\" ]\n\n
"},{"location":"applications/youtube/#rebuild-the-image-manually","title":"Rebuild the image manually","text":""},{"location":"applications/youtube/#download-the-dockerfile-manually","title":"Download the Dockerfile manually","text":"
"},{"location":"applications/youtube/#build-the-dockerfile-to-create-a-container-image","title":"build the Dockerfile to create a container image","text":"
"},{"location":"applications/youtube/#install-the-new-image","title":"Install the new image","text":"
If you are using containerd as container runtime, use the ctr command line
If you are not running this bash command on your abcdesktop node Replace the ABCHOST variable set to localhost by default to your own server ip address
"},{"location":"applications/abcdesktopio/oc.template.alpine.3.18/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.9\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.edge.gtk.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.edge.gtk/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.gtk/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.2\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.17/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.17.10\nPRETTY_NAME=\"Alpine Linux v3.17\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.18/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.18.9\nPRETTY_NAME=\"Alpine Linux v3.18\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.19/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.19.4\nPRETTY_NAME=\"Alpine Linux v3.19\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.3.20/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal.edge/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.21.0_alpha20240807\nPRETTY_NAME=\"Alpine Linux edge\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.minimal/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.alpine.wine/#container-distribution-release","title":"Container distribution release","text":"
NAME=\"Alpine Linux\"\nID=alpine\nVERSION_ID=3.20.3\nPRETTY_NAME=\"Alpine Linux v3.20\"\nHOME_URL=\"https://alpinelinux.org/\"\nBUG_REPORT_URL=\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\"\n\n
"},{"location":"applications/abcdesktopio/oc.template.debian.minimal/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.gtk.libreoffice.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.minimal.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.minimal.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.nvidia.8/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.rockylinux.nvidia.9/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.18.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.22.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.24.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.java/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.language-pack-all/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.gtk.libreoffice/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.18.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.22.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.minimal.24.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.nvidia.20.04/#container-distribution-release","title":"Container distribution release","text":"
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.nvidia.22.04/#container-distribution-release","title":"Container distribution release","text":"
ARG TAG=dev\nARG BASE_IMAGE\nFROM ${BASE_IMAGE}:$TAG\nMAINTAINER Alexandre DEVELY \n\n# install wget\nRUN apt-get update && apt-get install --no-install-recommends --yes \\\n wget \\\n && apt-get clean\n\n\n# set arch to i386\nRUN if [ $(dpkg --print-architecture) == 'amd64' ]; then dpkg --add-architecture i386; fi\n\n# only to use wine repo\n# RUN wget -qO - https://dl.winehq.org/wine-builds/winehq.key | apt-key add -\n# RUN apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'\n\n\n# tools for winetricks\n# Uses the following non-POSIX system tools:\n# - wine is used to execute Win32 apps except on Cygwin.\n# - ar, cabextract, unrar, unzip, and 7z are needed by some verbs.\n# - aria2c, wget, curl, or fetch is needed for downloading.\n# - fuseiso, archivemount (Linux), or hdiutil (macOS) is used to mount .iso images.\n# - perl is used to munge steam config files.\n# - pkexec, sudo, or kdesu (gksu/gksudo/kdesudo are deprecated upstream but also still supported)\n# are used to mount .iso images if the user cached them with -k option.\n# - sha256sum, sha256, or shasum (OSX 10.5 does not support these, 10.6+ is required)\n# - torify is used with option \"--torify\" if sites are blocked in single countries.\n# - xdg-open (if present) or open (for OS X) is used to open download pages\n# for the user when downloads cannot be fully automated.\n# - xz is used by some verbs to decompress tar archives.\n# - zenity is needed by the GUI, though it can limp along somewhat with kdialog/xmessage.\n\n\n#RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes aria2 \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes binutils \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes cabextract fuseiso p7zip-full policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes fuseiso && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes p7zip-full policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes policykit-1 && \\\n# apt-get clean \n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes tor unrar unzip xdg-utils xz-utils zenity && \\\n# apt-get clean \n\n# gir1.2-gtk-3.0:i386 gir1.2-pango-1.0:i386 used by crossover\n\n# add for 20.04\n# apt-get install --no-install-recommends --yes libgcc-s1:i386 && \\\n\n# RUN apt-get update && \\\n# apt-get install --no-install-recommends --yes aptitude libnss-mdns:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 gir1.2-gtk-3.0:i386 gir1.2-pango-1.0:i386 && \\\n# apt-get clean \n\n# add dns support for 32 apps running on 64 bits\n#RUN apt-get update && apt-get install -y \\\n# libnss-mdns-i386 \\\n# libnss-mdns \\ \n# wine-stable && \\\n# apt-get clean \n\n# RUN wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/amd64/libfaudio0_19.07-0~bionic_amd64.deb && \\\n# dpkg -i libfaudio0_19.07-0~bionic_amd64.deb && \\\n# rm libfaudio0_19.07-0~bionic_amd64.deb\n\n#RUN wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/i386/libfaudio0_19.07-0~bionic_i386.deb && \\\n# dpkg -i libfaudio0_19.07-0~bionic_i386.deb && \\\n# rm libfaudio0_19.07-0~bionic_i386.deb\n\n\n###\n#RUN mkdir -p /composer/.cache\n#RUN mkdir -p /composer/.cache/wine && \\\n# wget -O /composer/.cache/wine/wine-gecko-2.47.1-x86.msi http://dl.winehq.org/wine/wine-gecko/2.47.1/wine-gecko-2.47.1-x86.msi && \\\n# wget -O /composer/.cache/wine/wine-gecko-2.47.1-x86_64.msi http://dl.winehq.org/wine/wine-gecko/2.47.1/wine-gecko-2.47.1-x86_64.msi && \\\n# wget -O /composer/.cache/wine/wine-mono-4.9.4.msi https://dl.winehq.org/wine/wine-mono/4.9.4/wine-mono-4.9.4.msi \n##\n\nRUN mkdir -p /composer/.cache/fontconfig\n# COPY composer/.cache/fontconfig /composer/.cache/fontconfig\n\nRUN apt-get update && \\\n apt-get install --yes wine && \\\n apt-get clean\n\n# add xrdb for playonlinux\n# xrdb is in x11-xserver-utils\nRUN apt-get update && \\\n apt-get install --no-install-recommends --yes libpython3.6 playonlinux x11-xserver-utils && \\\n apt-get clean\n\n\nRUN apt-get update && \\\n apt-get install --no-install-recommends --yes mono-runtime winetricks && \\\n apt-get clean\n\nCOPY composer/updatereg.py /composer\nCOPY composer/init.d/init.wine /composer/init.d/init.wine\nCOPY composer/init.d/_init.wine /composer/init.d/_init.wine\nRUN mkdir /composer/.wine /composer/bin && chmod 777 /composer/.wine /composer/bin\n\n# Set for each app \nENV WINEPREFIX=/composer/.wine\n#ENV WINEARCH win32\n\n
file oc.template.ubuntu.wine.md is created at Sun Dec 01 2024 12:09:16 GMT+0000 (Coordinated Universal Time) by make-docs.js
"},{"location":"applications/abcdesktopio/oc.template.ubuntu.wine.mswindow/#container-distribution-release","title":"Container distribution release","text":"
| ${FOO:-val} | $FOO, or val if not set | | ${FOO:=val} | Set $FOO to val if not set | | ${FOO:+val} | val if $FOO is set | | ${FOO:?message} | Show error message and exit if $FOO is not set |
if myfunc; then\n echo \"success\"\nelse\n echo \"failure\"\nfi\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#arguments","title":"Arguments","text":"Expression Description $# Number of arguments $* All arguments $@ All arguments, starting from first $1 First argument $_ Last argument of the previous command
Note that [[ is actually a command/program that returns either 0 (true) or 1 (false). Any program that obeys the same logic (like all base utils, such as grep(1) or ping(1)) can be used as condition, see examples.
Condition Description [[ -z STRING ]] Empty string [[ -n STRING ]] Not empty string [[ STRING == STRING ]] Equal [[ STRING != STRING ]] Not Equal --- --- [[ NUM -eq NUM ]] Equal [[ NUM -ne NUM ]] Not equal [[ NUM -lt NUM ]] Less than [[ NUM -le NUM ]] Less than or equal [[ NUM -gt NUM ]] Greater than [[ NUM -ge NUM ]] Greater than or equal --- --- [[ STRING =~ STRING ]] Regexp --- --- (( NUM < NUM )) Numeric conditions Condition Description [[ -o noclobber ]] If OPTIONNAME is enabled --- --- [[ ! EXPR ]] Not [[ X ]] && [[ Y ]] And [[ X ]] || [[ Y ]] Or","tags":["Featured"]},{"location":"cheatsheets/bash/#file-conditions","title":"File conditions","text":"Condition Description [[ -e FILE ]] Exists [[ -r FILE ]] Readable [[ -h FILE ]] Symlink [[ -d FILE ]] Directory [[ -w FILE ]] Writable [[ -s FILE ]] Size is > 0 bytes [[ -f FILE ]] File [[ -x FILE ]] Executable --- --- [[ FILE1 -nt FILE2 ]] 1 is more recent than 2 [[ FILE1 -ot FILE2 ]] 2 is more recent than 1 [[ FILE1 -ef FILE2 ]] Same files","tags":["Featured"]},{"location":"cheatsheets/bash/#example_1","title":"Example","text":"
# String\nif [[ -z \"$string\" ]]; then\n echo \"String is empty\"\nelif [[ -n \"$string\" ]]; then\n echo \"String is not empty\"\nfi\n
# Combinations\nif [[ X ]] && [[ Y ]]; then\n ...\nfi\n
# Equal\nif [[ \"$A\" == \"$B\" ]]\n
# Regex\nif [[ \"A\" =~ . ]]\n
if (( $a < $b )); then\n echo \"$a is smaller than $b\"\nfi\n
if [[ -e \"file.txt\" ]]; then\n echo \"file exists\"\nfi\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#working-with-arrays","title":"Working with arrays","text":"
echo ${Fruits[0]} # Element #0\necho ${Fruits[@]} # All elements, space-separated\necho ${#Fruits[@]} # Number of elements\necho ${#Fruits} # String length of the 1st element\necho ${#Fruits[3]} # String length of the Nth element\necho ${Fruits[@]:3:2} # Range (from position 3, length 2)\n
Declares sound as a Dictionary object (aka associative array).
","tags":["Featured"]},{"location":"cheatsheets/bash/#working-with-dictionaries","title":"Working with dictionaries","text":"
echo ${sounds[dog]} # Dog's sound\necho ${sounds[@]} # All values\necho ${!sounds[@]} # All keys\necho ${#sounds[@]} # Number of elements\nunset sounds[dog] # Delete dog\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#iteration_1","title":"Iteration","text":"","tags":["Featured"]},{"location":"cheatsheets/bash/#iterate-over-values","title":"Iterate over values","text":"
for val in \"${sounds[@]}\"; do\n echo $val\ndone\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#iterate-over-keys","title":"Iterate over keys","text":"
for key in \"${!sounds[@]}\"; do\n echo $key\ndone\n
| !$ | Expand last parameter of most recent command | | !* | Expand all parameters of most recent command | | !-n | Expand nth most recent command | | !n | Expand nth command in history | | !<command> | Expand most recent invocation of command <command> |
| !! | Execute last command again | | !!:s/<FROM>/<TO>/ | Replace first occurrence of <FROM> to <TO> in most recent command | | !!:gs/<FROM>/<TO>/ | Replace all occurrences of <FROM> to <TO> in most recent command | | !$:t | Expand only basename from last parameter of most recent command | | !$:h | Expand only directory from last parameter of most recent command |
!! and !$ can be replaced with any valid expansion.
| !!:n | Expand only nth token from most recent command (command is 0; first argument is 1) | | !^ | Expand first argument from most recent command | | !$ | Expand last token from most recent command | | !!:n-m | Expand range of tokens from most recent command | | !!:n-$ | Expand nth token to last from most recent command |
!! can be replaced with any valid expansion i.e. !cat, !-2, !42, etc.
printf \"Hello %s, I'm %s\" Sven Olga\n#=> \"Hello Sven, I'm Olga\n\nprintf \"1 + 1 = %d\" 2\n#=> \"1 + 1 = 2\"\n\nprintf \"This is how you print a float: %f\" 2\n#=> \"This is how you print a float: 2.000000\"\n
","tags":["Featured"]},{"location":"cheatsheets/bash/#directory-of-script","title":"Directory of script","text":"
Docker For Mac embeds a hypervisor (based on xhyve), a Linux distribution which runs on LinuxKit and filesystem & network sharing that is much more Mac native. Docker For Mac is a Mac native application in /Applications.
At installation time, it creates symlinks in /usr/local/bin for docker and docker-compose, to the commands in the application bundle, in /Applications/Docker.app/Contents/Resources/bin.
To install dockerd on MacOS/X, use Docker for Desktop. Get Docker for MacOS on the docker website docker-for-mac
To get a shell to the LinuxKit docker-desktop, run the docker command
docker run -it --rm --privileged --pid=host justincormack/nsenter1\n
more info: https://github.com/justincormack/nsenter1
"},{"location":"common/acl/","title":"Define access control list for application","text":""},{"location":"common/acl/#goals","title":"Goals","text":"
restrict access to applications using authentication label
To restrict access to applications using authentication label, you have to define label using rules during authentification step, and define label to the application.
"},{"location":"common/acl/#define-authenticated-label-using-rules","title":"Define authenticated label using rules","text":"
You can read the chapter authentification-rules to define some autenticated labels.
Update the od.config file, to add a label mylocal if the source ip address is in local network 192.168.0.0/16
To build your new image, download the make.js script file. make.js is located in the oc.apps repository. Look at https://github.com/abcdesktopio/oc.apps if you can't download this file.
"},{"location":"common/acl/#run-the-xedit-application-from-your-local-network","title":"Run the xedit application from your local network","text":"
The xedit application is listed only if your are connected from a local network matching the previous rules.
Look for the application xedit, using the quick launch search text area on the bottom right corner. Insert the first character of xedit :
Launch the xedit application
"},{"location":"common/acl/#run-the-application-from-another-source-ip-address-or-update-the-acl-application","title":"Run the application from another source IP address or update the acl application","text":""},{"location":"common/acl/#update-acl-of-xedit-application","title":"Update acl of xedit application","text":"
To update the acl of xedit application, edit the edit.json file with the content, and set nowhere tag in acl array :
% node make.js -f xedit.json Dockerfile\nmyArgs: [ '-f', 'xedit.json', 'Dockerfile' ]\nopening file xedit.json\napplist.json entries: 1\nmyArgs: [ '-f', 'xedit.json', 'Dockerfile' ]\nBuilding file Dockerfile as output\n{\n acl: { permit: [ 'nowhere' ] },\n cat: 'utilities',\n debpackage: 'x11-apps',\n icon: 'xedit.svg',\n keyword: 'text,notepad,edit,txt,editor,xedit',\n launch: 'xedit.Xedit',\n name: 'xedit',\n displayname: 'Xedit',\n path: '/usr/bin/xedit',\n template: 'abcdesktopio/oc.template.gtk',\n mimetype: 'application/text;',\n fileextensions: 'txt;log;md'\n}\nBuilding xedit.Xedit\n\n% docker build -t xedit.d .\n[+] Building 1.5s (11/11) FINISHED \n => [internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 4.19kB 0.0s\n => [internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [internal] load metadata for docker.io/abcdesktopio/oc.template.gtk:dev 1.4s\n => [auth] abcdesktopio/oc.template.gtk:pull token for registry-1.docker.io 0.0s\n => [1/6] FROM docker.io/abcdesktopio/oc.template.gtk:dev@sha256:4aac32209c27a3e88906f39aecdfee6833bed022871366356bfd5518e2248b79 0.0s\n => CACHED [2/6] RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends x11-apps && apt-get clean 0.0s\n => CACHED [3/6] RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 0.0s\n => CACHED [4/6] RUN if [ -d /usr/share/icons ]; then cd /usr/share/icons; /composer/safelinks.sh; fi 0.0s\n => CACHED [5/6] RUN if [ -d /usr/share/pixmaps ]; then cd /usr/share/pixmaps; /composer/safelinks.sh; fi 0.0s\n => CACHED [6/6] WORKDIR /home/balloon 0.0s\n => exporting to image 0.0s\n => => exporting layers 0.0s\n => => writing image sha256:640a4dd66b03420c4128e2fcd920dc5749cc5b687abc62b68e52f3c562943903 0.0s\n => => naming to docker.io/library/xedit.d \n
Launch your web browser, and log in to your abcdesktop service
Check that xedit is not found and not listed.
The new acl does not allow the xedit application to be run and show. You can now define your own rules, add set the access control list to your applications.
To update the default wallpaper file, add a ENV variable in the desktop.envlocal dictionary.
Add the new entry SET_DEFAULT_WALLPAPER to the value like welcometoabcdesktop.png. The file welcometoabcdesktop.png already exists in the /composer/wallpapers directory of your abcdesktopio/oc.user.XX.YY container image.
Restart your pyos daemon, to make sure that the ENV dictionary will be use to start a new user container.
Login on your abcdesktop service, your should see the wallpaper file:
"},{"location":"common/custom-wallpaper/#update-ocuser-image-to-add-your-own-wallpaper","title":"Update oc.user image to add your own wallpaper","text":""},{"location":"common/custom-wallpaper/#find-a-new-wallpaper-image","title":"Find a new wallpaper image","text":"
Download a new wallpaper image, for example I choose the file on unsplash.com web site wallpaper unsplash from Silas Baisch
Rename the downloaded file as silas-baisch-unsplash.jpg
"},{"location":"common/custom-wallpaper/#create-a-new-ocuser-image","title":"Create a new oc.user image","text":"
Create a Dockerfile to copy the new wallpaper file in /composer/wallpapers directory
Not For a development environment, add the TAG dev
FROM abcdesktopio/oc.user.18.04:dev \nUSER root\nCOPY silas-baisch-unsplash.jpg /composer/wallpapers\nUSER balloon\n
Build the new docker image
To build the new docker image, run the command line
docker build -t abcdesktopio/oc.user.18.04 .\n
You should read on the standard output :
Sending build context to Docker daemon 3.184MB\nStep 1/4 : FROM abcdesktopio/oc.user.18.04:dev\n ---> 61bfdb4e71d4\nStep 2/4 : USER root\n ---> Using cache\n ---> c1aa17b9999c\nStep 3/4 : COPY silas-baisch-unsplash.jpg /composer/wallpapers\n ---> 73c786ecca04\nStep 4/4 : USER balloon\n ---> Running in 1e0ad794c0cb\nRemoving intermediate container 1e0ad794c0cb\n ---> a0b12a183b47\nSuccessfully built a0b12a183b47\nSuccessfully tagged abcdesktopio/oc.user.18.04:dev\n
To update the default wallpaper file, add a ENV variable in the desktop.envlocal dictionary.
Add the new entry SET_DEFAULT_WALLPAPER to the value like silas-baisch-unsplash.jpg. The file silas-baisch-unsplash.jpg exists in the /composer/wallpapers directory of your new abcdesktopio/oc.user.18.04 container image.
Restart your pyos daemon, to make sure that the ENV dictionary will be use to start a new user container.
Login on your abcdesktop service, your should see the wallpaper :
"},{"location":"common/debug_application/","title":"How to debug containerised application","text":""},{"location":"common/debug_application/#requirements","title":"Requirements","text":"
abcdesktop ready to run
docker or ctr package should be install on your Linux (optional)
Read stdout and stderr, dump all environment variables, and entrypoint log, to troubleshoot application error and get quick informations
"},{"location":"common/debug_application/#read-log-from-web-interface","title":"Read log from web interface","text":"
Start an containerised application, I choose 2048 application, for example.
Using the web browser, choose Settings in the menu.
Choose Tasks to list all running containers
Choose Logs to read the stdout log file of an application
This application write on stdout
Error setting cipher RC4\n40F7D1D5D07F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC4 : 37), Properties ()\nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
"},{"location":"common/debug_application/#read-log-from-daemon-interface-optionnal","title":"Read log from daemon interface (optionnal)","text":"
You will read the sample stdout line, using a docker logs command, open a shell on you host.
In a shell on your host, look for the container id of the 2048 containerised application
$ docker ps -a|grep 2048\n01579054a1f6 abcdesktopio/ubuntu-2048.d:3.0 \"/composer/appli-doc\u2026\" 21 minutes ago Up 21 minutes anonymous-ubuntu-2048-37830ad00d9f473aa4d0c7872089c6b8\n
Read the log file form the docker logs command
$ docker logs 01579054a1f6\n
You should read on output the same lines written on the web interface
Error setting cipher RC4\n40F7D1D5D07F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:349:Global default library context, Algorithm (RC4 : 37), Properties ()\nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
"},{"location":"common/debug_application/#read-log-files-from-an-application-using-the-redirected-stderr-and-stdout","title":"Read log files from an application using the redirected stderr and stdout","text":"
The main log files are lastcmd.loglastcmdenv.log and $APPBIN.log:
/tmp/lastcmd.log : contains the stdout file of the init script command /composer/appli-docker-entrypoint.sh for latest running application
/tmp/lastcmdenv.log: contains the dump of all environment variables for latest running application
/tmp/$APPBIN.log: contains stderr and stdout of the application $APPBIN. $APPBIN should be replace by the name of your binary application filename.
By default, with all abcdesktop templates, applications redirect stderr to stdout and pipe to a tee.
${APP} ${ARGS} \"${APPARGS}\" 2>&1 | tee /tmp/$BASENAME_APP.log\n
By default, the /tmp volume is shared with all containers. So to debug and read log applications, you can run a webshell to have an access to stdout and stderr content.
The var $BASENAME_APP is the name of your application
BASENAME_APP=$(basename \"$APPBIN\")\n
and APPBIN is path to the binary
Example with the 2048-qt application
APPBIN=/usr/games/2048-qt\n
The /tmp directory, you can read the log file '/tmp/2048-qt.log'. Look at the /tmp directory
balloon:~$ ls -la /tmp/\ntotal 20\ndrwxrwxrwt 5 root root 260 Dec 1 09:58 .\ndrwxr-xr-x 1 root root 4096 Dec 1 09:55 ..\n-rw-r--r-- 1 balloon balloon 102 Dec 1 09:58 2048-qt.log\nsrwxrwxrwx 1 root root 0 Dec 1 09:55 .cups.sock\n-rw-r--r-- 1 balloon balloon 0 Dec 1 09:57 gnome-2048.log\n-rw-r--r-- 1 balloon balloon 1175 Dec 1 09:58 lastcmdenv.log\n-rw-r--r-- 1 balloon balloon 437 Dec 1 09:58 lastcmd.log\ndrwx------ 2 balloon balloon 60 Dec 1 09:55 pulse-jkzlygT9Y7lT\nsrwxrwxrwx 1 balloon balloon 0 Dec 1 09:55 .pulse.sock\ndrwx------ 2 balloon balloon 40 Dec 1 09:58 runtime-balloon\n-r--r--r-- 1 balloon balloon 11 Dec 1 09:55 .X0-lock\ndrwxrwxrwt 2 root root 60 Dec 1 09:55 .X11-unix\nsrw------- 1 balloon balloon 0 Dec 1 09:55 .x11vnc\nballoon:~$\n
The files are /tmp/lastcmd.log, /tmp/lastcmdenv.log and /tmp/2048-qt.log.
/tmp/lastcmd.log the init command log file created by /composer/appli-docker-entrypoint.sh
/tmp/lastcmdenv.log the last environment variables file
/tmp/2048-qt.log the command log file for the application
Dump the /tmp/2048-qt.log, with a cat command cat /tmp/2048-qt.log. Replace /tmp/2048-qt.log by your own application (binary) if you choose another application.
You can run all bash commands inside the webshell.
balloon:~$ cat /tmp/2048-qt.log \nQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-balloon'\nqml: Started a new game\n
Dump the /composer/appli-docker-entrypoint.sh result in /tmp/lastcmd.log, with a cat command cat /tmp/lastcmd.log.
We describe how to read the environment variables, the stdout file and the stderr file, to get some information and error for a containerised application.
In next chapter we will start an application from a fresh ubuntu image, to get more details.
"},{"location":"common/disable-firefox-connections/","title":"How to disable Mozilla Firefox automatic connections at startup","text":""},{"location":"common/disable-firefox-connections/#usage-of-policiesjson","title":"Usage of policies.json","text":"
You can specifiy firefox policies in a file called policies.json, you may have to create it as it is noy present by default.
Path to policies.json depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\distribution\\policies.json Linux : /usr/lib/firefox/distribution/policies.json MacOS : /Applications/Firefox.app/Contents/Resources/distribution/policies.json
You can find all the policies templates, according to your firefox version, on the mozilla github page : https://github.com/mozilla/policy-templates/releases
"},{"location":"common/disable-firefox-connections/#usage-of-autoconfigjs-and-firefoxcfg","title":"Usage of autoconfig.js and firefox.cfg","text":"
Some preferences cannot be set through the policies.json file, such as disable normandy, because of firefox restrictions. But we can bypass it by creating a JS file called autoconfig.js and a config file called firefox.cfg.
autoconfig.js is used to load and execute firefox.cfg.
Path to autoconfig.js depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\defaults\\pref\\autoconfig.js Linux : /usr/lib/firefox/defaults/pref/autoconfig.js MacOS : /Applications/Firefox.app/Contents/Resources/defaults/pref/autoconfig.js
The locked preferences are specified in the firefox.cfg file. Path to firefox.cfg depending on your OS (you may have to create directories of the paths):
Windows : C:\\Program Files\\Mozilla Firefox\\firefox.cfg Linux : /usr/lib/firefox/firefox.cfg MacOS : /Applications/Firefox.app/Contents/Resources/firefox.cfg
"},{"location":"common/disable-firefox-connections/#usage-of-proxypac-file","title":"Usage of proxy.pac file","text":"
Despite all the efforts to disable automatic connections via policies.json and firefox.cfg files, there where still a few connections that seems to be not possible to disable. To bypass this phenomena, we will create a file named proxy.pac that will block access to the remaining URLs by redirecting them to an unreachable proxy.
Save proxy.pac on your machine and keep in mind the path to your file.
Once done, you should add the following line to the Proxy policy inside your policies.json file : \"AutoConfigURL\": \"file:///path/to/your/proxy.pac\"
"},{"location":"common/disable-firefox-connections/#disable-startup-connections","title":"Disable startup connections","text":""},{"location":"common/disable-firefox-connections/#policiesjson","title":"policies.json","text":"URL Parameter(s) to set https://location.services.mozilla.com\"browser.region.network.url\": \"\"https://contile.services.mozilla.comhttps://tiles-cdn.prod.ads.prod.webservices.mozgcp.net\"browser.topsites.contile.enabled\": false\"browser.topsites.contile.endpoint\": \"\"https://spocs.getpocket.com\"browser.newtabpage.activity-stream.discoverystream.enabled\": falsehttps://push.services.mozilla.com\"dom.push.connection.enabled\": falsehttps://accounts.firefox.com\"browser.startup.homepage_override.mstone\": \"ignore\"(also disable news page) https://shavar.services.mozilla.com\"browser.safebrowsing.provider.mozilla.gethashURL\": \"\"\"browser.safebrowsing.provider.mozilla.updateURL\": \"\"https://tracking-protection.cdn.mozilla.net\"browser.safebrowsing.downloads.remote.enabled\": falsehttp://detectportal.firefox.com\"network.captive-portal-service.enabled\": false\"network.connectivity-service.enabled\": falsehttps://incoming.telemetry.mozilla.orghttps://www.mozilla.org Set \"DisableTelemetry\" policy to true"},{"location":"common/disable-firefox-connections/#firefoxcfg","title":"firefox.cfg","text":"URL Parameter(s) to set https://normandy.cdn.mozilla.nethttps://classify-client.services.mozilla.comlockPref(\"app.normandy.enabled\", false)lockPref(\"app.normandy.api_url\", \"\")"},{"location":"common/disable-firefox-connections/#example-of-policiesjson-file","title":"Example of policies.json file","text":"
How to stop Firefox from making automatic connections
nikitastupin/stop-firefox-automatic-connections
Silencing Firefox's Chattiness for Web App Testing
Customizing Firefox Using AutoConfig
Firefox Reddit
Mozilla support forums
"},{"location":"common/firefox-extension/","title":"Mozilla Firefox clipboard extension","text":""},{"location":"common/firefox-extension/#install-firefox-extension-file","title":"Install Firefox Extension file","text":""},{"location":"common/firefox-extension/#download-the-mozilla-firefox-clipboard-extension-for-abcdesktop","title":"Download the Mozilla Firefox clipboard extension for abcdesktop","text":"
Download the firefox clipboard extension abcdesktop_clipboard_helper.xpi and press Continue to Installation button.
Choose Add as a response to the question Add abcdesktop Clipboad Helper ?
Press OKay, Got it to confirm the abcdesktop Clipboad helper insallation
"},{"location":"common/firefox-extension/#use-fully-qualified-domain-name-filter","title":"Use fully qualified domain name filter","text":"
Firefox clipboard extension runs ONLY if the hostname contains desktop string.
The URL must matches *://*desktop*/*\" to run the clipboard extension.
https://demo.abcdesktop.io matches, the firefox clipboard extension is running.
https://desktop.domain.io matches, the firefox clipboard extension is running.
https://abcdesktop.mydomain.local matches, the firefox clipboard extension is running.
https://demo.domain.com does not match, the firefox clipboard extension is not running.
"},{"location":"common/firefox-extension/#run-firefox-clipboard-extension-for-abcdesktop","title":"Run firefox clipboard extension for abcdesktop","text":"
Firefox clipboard extension syncs only text data, binary data like images are not yet supported.
Firefox clipboard extension syncs your clipboard data selected from your abcdesktop desktop to your local desktop environment.
Firefox clipboard extension syncs your local desktop environment clipboard to your abcdesktop desktop clipboard.
"},{"location":"common/flash-firefox-esr/","title":"How to build and run abcdesktop firefox-esr image to run flash application","text":"
Adobe no longer supports Flash Player after December 31, 2020 and blocked Flash content from running in Flash Player beginning January 12, 2021.
Lot of applications need to be rewrite, this can take time to rewrite application using HTML5.
Abcdesktop can be use to run Abode Flash application, using Firefox ESR web browser.
Firefox Extended Support Release (ESR) is an official version of Firefox developed for large organizations like universities and businesses that need to set up and maintain Firefox on a large scale. Firefox ESR does not come with the latest features but it has the latest security and stability fixes.
"},{"location":"common/flash-firefox-esr/#run-the-firefox-esr-application","title":"Run the firefox-esr application","text":""},{"location":"common/flash-firefox-esr/#login-to-your-abcdesktop-service","title":"Login to your abcdesktop service","text":"
Using you web browser, log in to your abcdesktop service
Look at the twice firefox icon for Firefox and Firefox-esr application.
Start the application Firefox-esr
Open you own flash website, or go to https://www.abcdesktop.io/flash sample web site
Click to the Run Adobe Flash plugins
And Allow the Adobe Flash to run
Great, you can run the Adobe Flash plugins.
"},{"location":"common/non-free-applications/","title":"Install non-free applications","text":""},{"location":"common/non-free-applications/#install-and-build-citrix-receiver-for-abcdesktop","title":"Install and build Citrix Receiver for abcdesktop","text":"
Citrix Workspace App or Citrix Receiver does not exist in official debian repository. You need to download the deb package from the www.citrix.com website manually.
"},{"location":"common/shm/#shared-memory","title":"Shared memory","text":""},{"location":"common/shm/#system-v-shared-memory","title":"System V shared memory","text":"
Goal: Test System V shared memory between two containers inside the same pod
This test creates two containers a sender and a receiver. The sender writes a string in a share memory and the receiver read the string.
The test is successful if there is no system error and the strings are equals.
The string MemContents stored in the shared memory is : This is the way the world ends...
The sender container writes a string from stdin into shared memory. The source code is here
int exit_code = -1;\n // ftok to generate unique key \n key_t key = ftok(\"/shared/shmfile\",65);\n // shmget returns an identifier in shmid \n int shmid = shmget(key,1024,0666|IPC_CREAT);\n // shmat to attach to shared memory \n char *str = (char*) shmat(shmid,(void*)0,0);\n strcpy( str, MemContents );\n //detach from shared memory \n exit_code = shmdt(str);\n
The receiver container print the sender's shared memory string to stdout. The source code is here
// ftok to generate unique key \n key_t key = ftok(\"/shared/shmfile\",65);\n // shmget returns an identifier in shmid \n int shmid = shmget(key,1024,0666|IPC_CREAT);\n // shmat to attach to shared memory \n char *str = (char*) shmat(shmid,(void*)0,0);\n printf(\"%s\\n\",str);\n cmp_code = strcmp( str, MemContents );\n //detach from shared memory \n exit_code = shmdt(str);\n
To run the System V tests
"},{"location":"common/shm/#run-a-shared-memory-test-access-using-a-shared-path","title":"Run a shared memory test access using a shared path","text":"
In this yaml file, sender and receiver containers share a file. This file is /shared/me and it is the first parameter to ftok system V call.
The env var FTOK_PATH set the first parameter to ftok system V call.
Run the test
# this test result is success\n./runtest.sh podsendershared_success.yaml\n
You can read the same string from sender to receive container.
This test is OK.
pod/podsysvsendershmtest created\npod/podsysvsendershmtest condition met\n**** Start sender ****\nsender starts\nidentity of the file named FTOK_PATH=/shared/me\nsending success This is the way the world ends...\n**** Read on receiver **** \nreceive starts\nidentity of the file named FTOK_PATH=/shared/me\nread This is the way the world ends...\n
"},{"location":"common/shm/#run-a-shared-memory-test-access-without-shared-path","title":"Run a shared memory test access without shared path","text":"
In this yaml file, sender and receiver do not share file. /dummy filename is the first parameter to ftok system V call.
The env var FTOK_PATH set the first parameter to ftok system V call.
Run the test
# this test result is failed\n./runtest.sh podsendershared_failed.yaml\n
You can read that the sender write a string. The receiver does not read this string.
This test is KO.
pod \"podsysvsendershmtest\" deleted\npod/podsysvsendershmtest created\npod/podsysvsendershmtest condition met\n**** Start sender ****\nsender starts\nidentity of the file named FTOK_PATH=/dummy\nsending success This is the way the world ends...\n**** Read on receiver **** \nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\nreceive starts\nidentity of the file named FTOK_PATH=/dummy\nmain: ftok() for shm failed\nthis is an unlimited loop, waiting 5s\n...\n^C\ncommand terminated with exit code 130\n
The ftok() function uses the identity of the file named by the given pathname (which must refer to an existing, accessible file) The file named by the given pathname must be shared by using a volume between containers
Goal: Test Posix shared memory between two containers inside the same pod
The source code is from inter-process communication in Linux: Shared storage Learn how processes synchronize with each other in Linux . The author is Marty Kalin
This test creates two containers a sender and a receiver to read a shared memory in /dev/shm, it uses a semaphore as a mutex (lock) by waiting for writer to increment it.
The string MemContents stored in the shared memory is : This is the way the world ends...
The sender container writes a string into shared memory map file /shMemEx
int fd = shm_open(BackingFile, /* name from smem.h */\n O_RDWR | O_CREAT, /* read/write, create if needed */\n AccessPerms); /* access permissions (0644) */\n if (fd < 0) report_and_exit(\"Can't open shared mem segment...\");\n\n ftruncate(fd, ByteSize); /* get the bytes */\n\n caddr_t memptr = mmap(NULL, /* let system pick where to put segment */\n ByteSize, /* how many bytes */\n PROT_READ | PROT_WRITE, /* access protections */\n MAP_SHARED, /* mapping visible to other processes */\n fd, /* file descriptor */\n 0); /* offset: start at 1st byte */\n if ((caddr_t) -1 == memptr) report_and_exit(\"Can't get segment...\");\n\n fprintf(stderr, \"shared mem address: %p [0..%d]\\n\", memptr, ByteSize - 1);\n fprintf(stderr, \"backing file: /dev/shm%s\\n\", BackingFile );\n\n /* semahore code to lock the shared mem */\n sem_t* semptr = sem_open(SemaphoreName, /* name */\n O_CREAT, /* create the semaphore */\n AccessPerms, /* protection perms */\n 0); /* initial value */\n if (semptr == (void*) -1) report_and_exit(\"sem_open\");\n\n strcpy(memptr, MemContents); /* copy some ASCII bytes to the segment */\n\n /* increment the semaphore so that memreader can read */\n if (sem_post(semptr) < 0) report_and_exit(\"sem_post\");\n\n sleep(12); /* give reader a chance */\n\n /* clean up */\n munmap(memptr, ByteSize); /* unmap the storage */\n close(fd);\n sem_close(semptr);\n shm_unlink(BackingFile); /* unlink from the backing file */\n\n
The receiver container print the sender's shared memory string to stdout
int fd = shm_open(BackingFile, O_RDWR, AccessPerms); /* empty to begin */\n if (fd < 0) report_and_exit(\"Can't get file descriptor...\");\n\n /* get a pointer to memory */\n caddr_t memptr = mmap(NULL, /* let system pick where to put segment */\n ByteSize, /* how many bytes */\n PROT_READ | PROT_WRITE, /* access protections */\n MAP_SHARED, /* mapping visible to other processes */\n fd, /* file descriptor */\n 0); /* offset: start at 1st byte */\n if ((caddr_t) -1 == memptr) report_and_exit(\"Can't access segment...\");\n\n /* create a semaphore for mutual exclusion */\n sem_t* semptr = sem_open(SemaphoreName, /* name */\n O_CREAT, /* create the semaphore */\n AccessPerms, /* protection perms */\n 0); /* initial value */\n if (semptr == (void*) -1) report_and_exit(\"sem_open\");\n\n /* use semaphore as a mutex (lock) by waiting for writer to increment it */\n if (!sem_wait(semptr)) { /* wait until semaphore != 0 */\n int i;\n for (i = 0; i < strlen(MemContents); i++)\n write(STDOUT_FILENO, memptr + i, 1); /* one byte at a time */\n sem_post(semptr);\n }\n\n /* cleanup */\n munmap(memptr, ByteSize);\n close(fd);\n sem_close(semptr);\n unlink(BackingFile);\n
"},{"location":"common/upload_and_download_files/","title":"Upload and Download files in your desktop","text":""},{"location":"common/upload_and_download_files/#goals","title":"Goals","text":"
Upload file from your local storage to your abcdesktop
Download file from your abcdesktop to your local storage
"},{"location":"common/upload_and_download_files/#upload-file-in-your-desktop","title":"Upload file in your desktop","text":"
To upload file into your local storage, just use a drag & drop, from your device to you adcdesktop
Then, start the filemanager, your new file is located in your home directory
"},{"location":"common/upload_and_download_files/#download-file-from-your-desktop","title":"Download file from your desktop","text":"
To download file from your abcdesktop to you local storage, just start the file manager.
Choose your file and using the right mouse button, choose the menu option Download for Desktop as describe :
The file is downloaded by your web browser
The file is located in your Downloads directory
Great, you have uploaded and downloaded files with your abcdesktop, you can now use abcdesktop.io applications to edit all your files.
"},{"location":"common/1.0/abcdesktop.bastion/","title":"Setup guide to use abcdesktop.io as bastion service","text":""},{"location":"common/1.0/abcdesktop.bastion/#design","title":"Design","text":"
The goal of this setup guide is to install abcdesktio.io as a bastion service, with only one virtual machine
"},{"location":"common/1.0/abcdesktop.bastion/#script-and-vagrant-file","title":"script and vagrant file","text":""},{"location":"common/1.0/abcdesktop.bastion/#get-script-and-vagrant-file","title":"get script and vagrant file","text":"
To get the installation script and the vagrant file, run the command
"},{"location":"common/1.0/abcdesktop.bastion/#login-as-a-user","title":"Login as a user","text":""},{"location":"common/1.0/abcdesktop.bastion/#connect-your-local-abcdesktop","title":"Connect your local abcdesktop","text":"
Open your web browser to
http://[your-ip-hostname]:30443/\n
Replace [your-ip-hostname] by the host node IP address
You should get the web page
"},{"location":"common/1.0/abcdesktop.bastion/#log-in-as","title":"Log in as","text":"
abcdesktop adds an OpenLDAP server for testing LDAP applications, i.e. unit tests. The ldap server is used to authenticate user. To get more informations about the OpenLDAP server and the account detail, read ldap server
Login Accounts Login Password Hubert J. Farnsworth professor Philip J. Fry fry Hermes Conrad hermes Turanga Leela leela Bender Bending Rodr\u00edguez bende
Use the credentials, to login
Login Account: Philip J. Fry
Login Password: fry
"},{"location":"common/1.0/abcdesktop.bastion/#get-the-default-desktop","title":"Get the default desktop","text":"
After the login, you should get the default desktop.
"},{"location":"common/1.0/abcdesktop.bastion/#run-a-web-shell-process","title":"Run a web shell process","text":"
To start a shell, insert webshell as keywords in the search text area :
"},{"location":"common/1.0/abcdesktop.bastion/#run-ifconfig-command-to-list-network-interfaces","title":"Run ifconfig command to list network interfaces","text":"
In the web shell, run the command
$ ifconfig -a\n
This command shows the network interfaces net1 and net2 with the associated ip address
"},{"location":"common/1.0/abcdesktop.bastion/#tag-and-rules","title":"Tag and rules","text":"
'rule-ship': { 'conditions' : [ { 'memberOf': 'cn=ship_crew,ou=people,dc=planetexpress,dc=com', 'expected' : True } ], 'expected' : True, 'label': 'shipcrew' } If a user is member of 'cn=ship_crew,ou=people,dc=planetexpress,dc=com' then the label tag shipcrew is set to the user's pod
'rule-admin': { 'conditions' : [ { 'memberOf': 'cn=admin_staff,ou=people,dc=planetexpress,dc=com', 'expected' : True } ], 'expected' : True, 'label': 'adminstaff' } If a user is member of 'cn=admin_staff,ou=people,dc=planetexpress,dc=com' then the label tag adminstaff is set to the user's pod
In the abcdesktop.yaml configuration file, and look at the desktop.policies and the network option
"},{"location":"common/1.0/abcdesktop.bastion/#list-pods-and-labels-in-abcdesktop-namespace","title":"List pods and labels in abcdesktop namespace","text":"
To list pod in the abcdesktop namespace, run the command
export KUBECONFIG=/etc/kubernetes/admin.conf \nkubectl get pods -n abcdesktop \n
If a pod in the abcdesktop namespace, contains a label shipcrew: 'true' set the iptables to permit egress to host 192.168.55.21/32 and 192.168.55.22/32 using protocol TCP destination port 22.
"},{"location":"common/1.0/abcdesktop.bastion/#dump-the-generated-by-iptables-in-varlibmulti-networkpolicyiptables","title":"dump the generated by iptables in /var/lib/multi-networkpolicy/iptables/","text":"
root@kmaster:~# docker images\nREPOSITORY TAG IMAGE ID CREATED SIZE\nabcdesktopio/oc.pyos dev 6bd8b8d33b73 19 hours ago 1.17GB\nrancher/mirrored-flannelcni-flannel v0.16.3 8cb5de74f107 3 days ago 59.7MB\nmemcached latest fa6cf68061c2 5 days ago 89.1MB\nk8s.gcr.io/kube-apiserver v1.23.3 f40be0088a83 6 days ago 135MB\nk8s.gcr.io/kube-controller-manager v1.23.3 b07520cd7ab7 6 days ago 125MB\nk8s.gcr.io/kube-scheduler v1.23.3 99a3486be4f2 6 days ago 53.5MB\nk8s.gcr.io/kube-proxy v1.23.3 9b7cc9982109 6 days ago 112MB\nabcdesktopio/oc.user.18.04 latest 52176672cf2e 7 days ago 1.79GB\nabcdesktopio/oc.user.ssh.18.04 dev 52176672cf2e 7 days ago 1.79GB\nghcr.io/k8snetworkplumbingwg/multi-networkpolicy-iptables latest 54838d8bbd14 10 days ago 408MB\nrancher/mirrored-flannelcni-flannel-cni-plugin v1.0.1 ac40ce625740 12 days ago 8.1MB\nabcdesktopio/oc.nginx dev fe71c8621ef2 12 days ago 506MB\nabcdesktopio/oc.pulseaudio.18.04 dev d44997a46969 2 months ago 170MB\nabcdesktopio/oc.pulseaudio.18.04 latest d44997a46969 2 months ago 170MB\nk8s.gcr.io/etcd 3.5.1-0 25f8c7f3da61 3 months ago 293MB\nghcr.io/k8snetworkplumbingwg/multus-cni stable e6cafb5d5aa1 3 months ago 290MB\nk8s.gcr.io/coredns/coredns v1.8.6 a4ca41631cc7 3 months ago 46.8MB\nabcdesktopio/oc.cupsd.18.04 dev 095105a59722 4 months ago 745MB\nabcdesktopio/oc.cupsd.18.04 latest 095105a59722 4 months ago 745MB\nk8s.gcr.io/pause 3.6 6270bb605e12 5 months ago 683kB\nrroemhild/test-openldap latest c6b1bec361ca 10 months ago 144MB\nabcdesktopio/oc.mongo latest 802219537d3b 12 months ago 493MB\nabcdesktopio/oc.speedtest dev 298a391cfb5b 3 years ago 355MB\n
Add new application images
To add an application like Firefox, run the docker pull command :
"},{"location":"common/1.0/abcdesktop.bastion/#reload-the-web-browser-page","title":"Reload the web browser page","text":""},{"location":"common/1.0/abcdesktop.bastion/#connect-your-local-abcdesktop_1","title":"Connect your local abcdesktop","text":"
Reload or open your web browser
http://[your-ip-hostname]:30443/\n
Firefox is added to your desktop dock. Start Firefox application
No rule has be defined to allow http request from your pod to a web site
All http requests are denied
The firefox application inherits from the pod's the network rules.
If you choose to use VMware instead of VirtualBox hypervisor
"},{"location":"common/1.0/abcdesktop.bastion/#notes-about-the-macvlan-driver","title":"Notes about the macvlan driver :","text":"
Macvlan allows you to configure sub-interfaces of a parent, physical Ethernet interface, each with its own unique MAC address, and consequently its own IP address. Applications, VMs and containers can then bind to a specific sub-interface to connect directly to the physical network, using their own MAC and IP address.
"},{"location":"common/1.0/abcdesktop.bastion/#macvlan-driver-on-vswitch-vmware","title":"macvlan driver on vSwitch VMware","text":"
The security policy of a virtual switch includes a MAC address changes option. This option allows virtual machines to receive frames with a Mac Address that is different from the one configured in the VMX.
When the Mac address changes option is set to Accept, ESXi accepts requests to change the effective MAC address of a virtual machine to a different address than the initial MAC address.
Set the Mac address changes option is set to Accept
"},{"location":"common/1.0/docker_macvlan/","title":"Using docker network for an application","text":""},{"location":"common/1.0/docker_macvlan/#requirements","title":"Requirements","text":""},{"location":"common/1.0/docker_macvlan/#goals","title":"Goals","text":"
Use a dedicated network for an application. For example bind the application Firefox to a dedicated docker network. This dedicated network can use macvlan, ipvlan or an SRIOV network driver.
When abcdesktop create a docker container, abcdesktop can set a dedicated network for this container.
"},{"location":"common/1.0/docker_macvlan/#create-a-dedicated-network-for-your-application","title":"Create a dedicated network for your application","text":"
On your worker nodes :
create a dedicated network interface to bridge the new network interface
add the label abcdesktop=true to the network object
You have to choose a nework driver for example
network driver macvlan ipvlan docker-sriov-plugin
Only the name of the network is used by abcdesktop.
Create a network with macvlan or ipvlan driver
In these two examples :
Subnet is 192.168.8.0/24
Gateway is 192.168.8.254
Ip Range is 192.168.8.0/27
"},{"location":"common/1.0/docker_macvlan/#example-with-macvlan","title":"Example with macvlan :","text":"
Create a network abcnetfirefox with the driver macvlan and bridge the network interface eno1 with the vlan 123
"},{"location":"common/1.0/docker_macvlan/#test-your-new-network-macvlan-or-ipvlan","title":"Test your new network (macvlan or ipvlan):","text":"
Make sure that's you can reach the default gateway and the dns server for container. In this example, just start a busybox to :
ping the default gateway
nslookup to query www.google.com ip address
export GATEWAY=192.168.8.254\ndocker run --rm --network abcnetfirefox busybox ping $GATEWAY\n# Google\u2019s public DNS server 8.8.8.8 is added\ndocker run --rm --network abcnetfirefox --dns 8.8.8.8 busybox ping www.google.com\n
The new firefox container doesn't use the docker network abcnetfirefox, because the Hubert J. Farnsworth user account is NOT member of cn=ship_crew,ou=people,dc=planetexpress,dc=com
The network is disabled by default.
Inspect the Hubert J. Farnsworth firefox container
You do not need to logoff the Hubert J. Farnsworth, just close Firefox application and start it again. The new firefox container use the default network.
Now default user has a network access, and member of cn=ship_crew,ou=people,dc=planetexpress,dc=com use the abcnetfirefox network.
"},{"location":"common/1.0/docker_macvlan/#webhook-events-create-and-destroy-application","title":"Webhook events create and destroy application","text":"
A rule support a specific bash command to notify external security equipment like firewalls, by sending create and destroy events.
When a new docker container is created, the control plane pyos execute the command
/usr/bin/curl 'http://firewall.domain.local/update?action=create&key={{ key }}&name={{ name }}&ip={{ container_ip }}\n
When a new docker container is destoyed, the control plane pyos call the url
/usr/bin/curl 'http://firewall.domain.local/update?action=destroy&key={{ key }}&name={{ name }}&ip={{ container_ip }}'\n
Each {{ $label }} is a mustached value.
Label name description example container_ip container ip addr 192.168.8.130 provider authentification provider name planet providertype authentification provider type ldap userid authentification provider user id fry name username Philip J. Fry sha_id sha of the container image sha256%3A5c754563b357bfde4a3762728c686fe0001d10e43835b9468d5218e663b844e8 id name of the application image abcdesktopio/firefox-esr.d:dev launch WM_CLASS of the X11 application Navigator.Firefox icon icon file name firefox.svg keyword docker image label keywords firefox mozilla web internet cat docker image label category office displayname docker image label displayname Firefox-esr path binary path of the application /usr/bin/firefox-esr desktopfile desktop filename of the application firefox.desktop executablefilename binary file name of the application \u00a0firefox-esr locale user current locale settings en_US"},{"location":"common/1.0/docker_macvlan/#events","title":"Events :","text":""},{"location":"common/1.0/docker_macvlan/#create-event","title":"create event:","text":"
The control plane pyos replace the mustached url string /usr/bin/curl 'http://firewall.domain.local/update?action=create&name={{ name }}&ip={{ container_ip }}' as /usr/bin/curl 'http://firewall.domain.local/update?action=create&name=Philip%20J.%20Fry&ip=192.168.8.130'
The control plane pyos replace the mustached url string /usr/bin/curl 'http://firewall.domain.local/update?action=destroy&name={{ name }}&ip={{ container_ip }}' as /usr/bin/curl 'http://firewall.domain.local/update?action=destroy&name=Philip%20J.%20Fry&ip=192.168.8.130'
"},{"location":"common/1.0/docker_macvlan/#desktopwebhook-options-in-odconfig-file","title":"desktop.webhook options in od.config file","text":""},{"location":"common/1.0/docker_macvlan/#url-encoding-parameters","title":"url encoding parameters","text":"
To encode url parameters use the option desktop.webhookencodeparams. Set desktop.webhookencodeparams to True to encode label name. The default value is False
/usr/bin/curl 'http://{{ firewall_manage_ip }}/update?action=destroy&key={{ api_key }}&name={{ name }}&ip={{ container_ip }}'\n
becomes
/usr/bin/curl 'http://161.105.208.129/update?action=destroy&key=supersecret&name={{ name }}&ip={{ container_ip }}'\n
"},{"location":"common/1.0/update_frontend_image/","title":"Update and custom front end image","text":""},{"location":"common/1.0/update_frontend_image/#requirements","title":"Requirements","text":""},{"location":"common/1.0/update_frontend_image/#goals","title":"Goals","text":"
"},{"location":"common/1.0/update_frontend_image/#colors-dictionary-entries","title":"Colors dictionary entries","text":"entry default value example @primary #474B55 #474B55 @secondatry #2D2D2D #2D2D2D @tertiary #6EC6F0 #6EC6F0"},{"location":"common/1.0/update_frontend_image/#create-a-new-dockerfile-to-build-changes","title":"Create a new Dockerfile to build changes","text":""},{"location":"common/1.0/update_frontend_image/#update-the-uijson-with-your-own-values","title":"Update the ui.json with your own values","text":"
"},{"location":"common/1.0/update_frontend_image/#write-your-dockerfile","title":"Write your Dockerfile","text":"
FROM abcdesktopio/oc.nginx:builder as builder\n\n# copy data files\nCOPY --from=abcdesktopio/oc.nginx:dev var/webModules /var/webModules\n# copy updated file ui.json \nCOPY ui.json /var/webModules/transpile/config/ui.json\n# run makefile \nRUN cd /var/webModules && make css\n\n\n# --- START Build image ---\nFROM abcdesktopio/oc.nginx\n\n# COPY generated web site from builder container\nCOPY --from=builder var/webModules /var/webModules\n
Run the docker build command to build the new oc.nginx:acme image
docker build -t oc.nginx:acme .\n
Sending build context to Docker daemon 258.3MB\nStep 1/6 : FROM abcdesktopio/oc.nginx:builder as builder\n ---> b04ba79c6b97\nStep 2/6 : COPY --from=abcdesktopio/oc.nginx var/webModules /var/webModules\n ---> Using cache\n ---> 3c16ce97b6b5\nStep 3/6 : COPY ui.json /var/webModules/transpile/config/ui.json\n ---> Using cache\n ---> 3c8e48730bb0\nStep 4/6 : RUN cd /var/webModules && make css\n ---> Running in b9660fb676b2\nBuild css: 1.005s\nTotal duration: 1.007s\nRemoving intermediate container b9660fb676b2\n ---> febdb98ad1aa\nStep 5/6 : FROM abcdesktopio/oc.nginx\n ---> 2b311b600a4e\nStep 6/6 : COPY --from=builder var/webModules /var/webModules\n ---> Using cache\n ---> c9545d07f825\nSuccessfully built c9545d07f825\nSuccessfully tagged oc.nginx:acme\n
Run the docker images command to read the new oc.nginx image
docker images \n\nREPOSITORY TAG IMAGE ID CREATED SIZE\noc.nginx acme 4de1755b60d7 About an hour ago 746MB\n
"},{"location":"common/1.0/update_frontend_image/#update-the-dockercompose-or-the-abcdesktopyaml-file","title":"Update the dockercompose or the abcdesktop.yaml file","text":"
Update the dockercompose or the abcdesktop.yaml file to replace the default abcdesktopio/oc.nginx by the new image oc.nginx:acme name.
The run the docker-compose up, and start you web browser. You can read the new project name at the home page.
We define the new tertiary color as #00FCD4 in dict { \"name\": \"@tertiary\", \"value\": \"#00FCD4\" }
Old tertiary color has been replace by #00FCD4.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/","title":"How to create containerised application from scratch for troubleshooting","text":""},{"location":"common/3.0/createcontainerisedapplicationdebug/#requirements","title":"Requirements","text":"
envsubst command preinstalled. Common Linux systems have envsubst preinstalled
Create a new containerised application from scratch using pod volume mapping
Start a pod and get a shell inside container as user root. Run xedit application as root
Start a pod and get a shell inside container as user hermes. Run xedit application as hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#create-an-application-using-a-new-container","title":"Create an application using a new container","text":"
We are starting a new containerised application from a fresh ubuntu:20.04 image and bind the X11 socket to use the pod DISPLAY.
We start a new container one as root, and another one as current user hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-abcdesktop-session","title":"Start a new abcdesktop session","text":"
Open a web browser and go to abcdesktop service url
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#login-in-as-hermes","title":"Login in as hermes","text":"
In the example we use LDAP authentification.
The login is Hermes Conrad, the password is hermes
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-hermess-pod-variables-name-uid-xauth_key","title":"Get hermes's pod variables: name, uid, XAUTH_KEY","text":"
Get a shell to your host. All next command use a host shell.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-pod-name","title":"Get the hermes's pod name","text":"
To read the hermes pod name, MIT-MAGIC-COOKIE-1, and uid
kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].metadata.name}' -n abcdesktop\n
We save this value in the pod variable, for next usage
POD=$(kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].metadata.name}' -n abcdesktop)\necho $POD\n
You should read on stdout
hermes-da0ca3c8-48ba-4736-85a9-d3fd2c85f009\n
We save this value in the $POD for a next usage.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-xauth_key","title":"Get the hermes's XAUTH_KEY","text":"
The release 3.0 need the MIT-MAGIC-COOKIE-1 to reach the x11 DISPLAY.
Run the command echo $XAUTH_KEY to read the $XAUTH_KEY value inside the hermes's pod
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#inspect-the-hermess-pod-to-look-for-binding-volume-mapping","title":"Inspect the Hermes's pod to look for Binding volume mapping","text":""},{"location":"common/3.0/createcontainerisedapplicationdebug/#list-files-in-varlibkubeletpodspoduid","title":"List files in /var/lib/kubelet/pods/$PODUID","text":"
The default kubelet's pod directory is /var/lib/kubelet/pods/. If you change it during the installation process replace /var/lib/kubelet/pods/ by your own directory.
ls -la /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket\n
ls -la /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket\ntotal 4\ndrwxrwxrwt 2 root root 60 Dec 8 19:43 .\ndrwxr-xr-x 9 root root 4096 Dec 8 19:43 ..\nsrwxrwxrwx 1 1051 2051 0 Dec 8 19:43 X0\n
X0 is a file unix socket, we will bind the X0 socket in the next podapp.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-the-hermess-pod-home-hermes-volume-location","title":"Get the hermes's pod home-hermes volume location","text":"
kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].spec.volumes[?(@.name==\"home-hermes\")].hostPath.path}' -n abcdesktop\n
Description of this query
items[0] is the first entry of the pod list.
spec.volumes is an array
read all entries in spec.volumes where the @.name==\"home-hermes\" and return .hostPath.path
We save this value in the PODHOME exported variable, for next usage
export PODHOME=$(kubectl get pod -l=access_userid=hermes -o jsonpath='{.items[0].spec.volumes[?(@.name==\"home-hermes\")].hostPath.path}' -n abcdesktop)\n
Check the value with a echo
echo $PODHOME\n/tmp/hermes-conrad\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-container-from-ubuntu2004","title":"Start a new container from ubuntu:20.04","text":"
Now we've got the all volumes path and XAUTH_KEY, let's start a new container with mounted volume
to the X11 socket /var/lib/kubelet/pods/$PODUID/volumes/kubernetes.io~empty-dir/x11socket:/tmp/.X11-unix
to the user homedir$PODHOME:/home/balloon
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#create-container-in-the-pod-sandbox-with-config-file","title":"Create container in the pod sandbox with config file","text":"
We use envsubst to replace variable content in a template yaml file.
Some systems have gettext with envsubst preinstalled. However, if it is missing, you can install it using a package manager. For macOS you can use homebrew:
brew install gettext
The variables ${PODUID}, ${PODHOME} and ${XAUTH_KEY} are exported.
Make sure to use export, otherwise your variables are considered shell variables and might not be accessible to envsubst
Create a file podapp.template.yaml
apiVersion: v1\nkind: Pod\nmetadata:\n name: podapp\n namespace: abcdesktop\nspec:\n volumes:\n - name: x11socket\n hostPath:\n # x11 directory location on host ${PODUID}\n path: /var/lib/kubelet/pods/${PODUID}/volumes/kubernetes.io~empty-dir/x11socket\n # this field is optional\n type: Directory\n - name: home\n hostPath:\n # home directory location on host\n path: ${PODHOME}\n # this field is optional\n type: Directory\n containers:\n - name: abccontainer\n image: ubuntu:20.04\n command: [\"/bin/sleep\"]\n args: [\"1d\"]\n volumeMounts:\n - mountPath: /tmp/.X11-unix\n name: x11socket\n - mountPath: /home/hermes\n name: home\n env:\n - name: XAUTH_KEY\n value: ${XAUTH_KEY}\n
Run the envsubst command to replace ${PODUID}, ${PODHOME} and ${XAUTH_KEY}
envsubst < podapp.template.yaml > podapp.yaml \n
Dump the podapp.yaml file content, and check that the volumes are set with the new values.
# cat podapp.yaml \n
apiVersion: v1\nkind: Pod\nmetadata:\n name: podapp\n namespace: abcdesktop\nspec:\n volumes:\n - name: x11socket\n hostPath:\n # directory location on host\n path: /var/lib/kubelet/pods/c6d2f8a7-eb7d-4a25-9a9c-9778ca9e35cf/volumes/kubernetes.io~empty-dir/x11socket\n # this field is optional\n type: Directory\n - name: home\n hostPath:\n # directory location on host\n path: /tmp/hermes-conrad\n # this field is optional\n type: Directory\n containers:\n - name: abccontainer\n image: ubuntu:20.04\n command: /bin/sleep 1d\n volumeMounts:\n - mountPath: /tmp/.X11-unix\n name: x11socket\n - mountPath: /home/hermes\n name: home\n
kubectl get pods podapp -n abcdesktop\nNAME READY STATUS RESTARTS AGE\npodapp 1/1 Running 0 32s\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#get-a-shell-in-podapp","title":"Get a shell in podapp","text":"
You get a shell command inside the container.
kubectl exec -it podapp -n abcdesktop -- bash \n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#for-release-30-set-the-mit-magic-cookie-1","title":"for release 3.0 set the MIT-MAGIC-COOKIE-1","text":"
root@podapp:/# export DISPLAY=:0.0\nroot@podapp:/# echo $XAUTH_KEY\n306908f8e4d4768c7595ce5ad53479\nroot@podapp:/# xauth add $DISPLAY MIT-MAGIC-COOKIE-1 $XAUTH_KEY\nxauth: file /root/.Xauthority does not exist\nroot@podapp:/#\n
The file /root/.Xauthority does not exist, it has been created.
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#install-your-x11-applications","title":"Install your X11 applications","text":"
For example, I choose to install the x11-apps package
Replace x11-apps by your own application
apt-get install -y x11-apps\n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-your-x11-application","title":"Start your X11 application","text":"
To start the X11 application, just run it. Your DISPLAY is set to :0.0, (for release 3.0, you've already added the MIT-MAGIC-COOKIE-1).
But remember you a running a container as root, and all commands are running as root inside the container.
Start xedit
xedit\n
Go back to your web browser.
A new x11 window xedit should be present on your display
xedit doesn't write any error message in the bash container.
You've get a shell inside a container to run and start any application. You can also install and start any others applications.
To clean the running pod podapp
kubectl delete pods podapp -n abcdesktop \n
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-a-new-container-from-ubuntu2004-as-hermes","title":"Start a new container from ubuntu:20.04 as hermes","text":"
To start a new container from ubuntu:20.04 as hermes, we have to add the localaccount secret volume to the previous container
"},{"location":"common/3.0/createcontainerisedapplicationdebug/#start-your-x11-application-as-hermes","title":"Start your X11 application as hermes","text":"
A new x11 window xedit should be present on your display
The name of the edit window is the name of your pod (hermespodapp).
To clean the running pod hermespodapp
kubectl delete -f hermespodapp.yaml \n
You have created a pod to run an X11 application as a user in LDAP Directory. You get a root shell inside the pod, to patch, update or install other applications.
"},{"location":"common/3.0/mount_nfs_tag/","title":"Define rules to mount a nfs volume inside user pod","text":"
Only supported in abcdesktop release 3.0
An nfs volume allows an existing NFS (Network File System) share to be mounted into a Pod. NFS volume can be pre-populated with data, and can be shared between pods. NFS can be mounted by multiple writers simultaneously.
You must have your own NFS server running with the share exported before you can use it.
"},{"location":"common/3.0/mount_nfs_tag/#update-the-odconfig-file","title":"Update the od.config file","text":"
Update the od.config to add
a label to user
add a desktop rules to match the label
"},{"location":"common/3.0/mount_nfs_tag/#add-a-label-in-the-auth-provider","title":"Add a label in the auth provider","text":"
In this example, we add a label nfsuser as a condition to mount nfs resource
In the auth provider add a dummy condition or a memberOf condition. All types of conditions are supported, the goal is only to get a label.
Update the od.config file and look for the default ldapconfig dictionnary
"},{"location":"common/3.0/mount_nfs_tag/#add-a-dummy-condition","title":"Add a dummy condition","text":"
"},{"location":"common/3.0/mount_nfs_tag/#create-a-new-desktop-for-hermes-conrad-and-list-nfs-files","title":"Create a new desktop for Hermes Conrad and list nfs files","text":"
Open the url http://localhost:30443, in your web browser, to start a simple user's pod.
http://localhost:30443\n
Login with a user Hermes Conrad for example. Hermes Conrad is member of admin_staff.
Check that the label nfsuser is listed
Run a web shell to list the /mnt/iso directory content
You can define many rules from LDAP groups. To get more informations about rules, read the authentification rules section
"},{"location":"common/3.0/multiplegroupsfeature/","title":"The multiple groups features for RFC 2307 support","text":"
Let talk about a common features with multiple groups and user securityContext on pods
Define accounts in ldap directory service to get supplementalGroups support
"},{"location":"common/3.0/multiplegroupsfeature/#check-the-kubernetes-supplementalgroups-support","title":"Check the kubernetessupplementalGroups support","text":"
Let's create a yaml file to define pod with securityContext and supplementalGroups
The result exit with code 1. The groups do not exist in /etc/group
3000groups: unknown ID 3000\n 2000groups: unknown ID 2000\n 4000groups: unknown ID 4000\n 5000groups: unknown ID 5000\n 6000groups: unknown ID 6000\n command terminated with exit code 1\n
This is what you want to do with abcdesktop, the id numbers are replaced by strings. The uid, gid and supplementalgroups are read from posixAccount and posixGroup in the directory service.
"},{"location":"common/3.0/multiplegroupsfeature/#read-specsecuritycontext-from-a-pod","title":"Read .spec.securityContext from a pod","text":"
kubectl command to read .spec.securityContext
kubectl get pod/security-context-supplementalgroups-demo -o json | jq '.spec.securityContext' \n
Check inside the user pod check that hermes account can to write data in file humansfile, because hermes is member of humans group.
hermes:~$ ls -la humansfile \n>>>>>>> 612b52bcffb502a9d934c0cbba40a43d553fc731\n----rwx--- 1 root humans 6 Nov 23 16:16 humansfile\nhermes:~$ echo 'hello from hermes' >> humansfile \nhermes:~$ more humansfile \nhello\nhello from hermes\n<<<<<<< HEAD\nhermes:~$ \n
This is correct.
We describe a common features with multiple groups and user securityContext on pods and abcdesktop support multiple groups with posixGroup define in RFC2307.
To get more details about the ldif and ldap datas, you can download the ldif file planetexpress.
version: 1\n=======\nhermes:~$ \n
This is correct.
We describe a common features with multiple groups and user securityContext on pods and abcdesktop support multiple groups with posixGroup define in RFC2307.
"},{"location":"common/3.0/update_frontend_image/","title":"Update and custom frontend web page","text":"
abcdesktop uses a front HTML web site and X11 Linux application. So, to get a new graphic design, you have to define it twice in HTML (CSS) files and in X11 config.
"},{"location":"common/3.0/update_frontend_image/#create-new-image-for-abcdesktop-ocnginx","title":"Create new image for abcdesktop oc.nginx","text":""},{"location":"common/3.0/update_frontend_image/#download-uijson-file","title":"Download ui.json file","text":"
Download the ui.json file. ui.json is located in webModules/transpile/config directory of webModules abcdesktop's repository.
"},{"location":"common/3.0/update_frontend_image/#create-a-new-dockerfile-to-build-changes","title":"Create a new Dockerfile to build changes","text":""},{"location":"common/3.0/update_frontend_image/#write-your-dockerfile-to-build-the-new-image","title":"Write your Dockerfile to build the new image","text":"
Dockerfile
#\n# --- update oc.nginx:builder image start here ---\n# use the abcdesktopio/oc.nginx:builder\n# oc.nginx:builder contains Makefile and tools like nodejs, lessc need to update the ui.json file\n# oc.nginx:builder source https://raw.githubusercontent.com/abcdesktopio/oc.nginx/main/Dockerfile.builder \n\n#######\nFROM abcdesktopio/oc.nginx:builder as builder\n# copy data files /var/webModules\nCOPY --from=abcdesktopio/oc.nginx:3.2 var/webModules /var/webModules\n# copy updated file ui.json with your own custom values\nCOPY ui.json /var/webModules/transpile/config/\n\n# run makefile\n# make dev (for dev)\n# make prod (for prod)\nRUN cd /var/webModules && make dev\n# make version to update the version number from .git commit\nRUN cd /var/webModules && ./mkversion.sh\n\n#######\n#\n# --- oc.nginx image start here ---\n#\nFROM abcdesktopio/oc.nginx:3.2\n# COPY updated files from builder container to oc.nginx\nCOPY --from=builder var/webModules /var/webModules\nRUN cat /var/webModules/index.html\n
Run the docker build command to build the new oc.nginx:acme image
docker build -t oc.nginx:acme .\n
# docker build -t oc.nginx:acme .\nSending build context to Docker daemon 21.88MB\nStep 1/8 : FROM abcdesktopio/oc.nginx:builder as builder\nbuilder: Pulling from abcdesktopio/oc.nginx\neaead16dc43b: Pull complete \n2b469c68b643: Pull complete \n5cee1fa1576f: Pull complete \n359c5b0dcf0a: Pull complete \nDigest: sha256:b9b2c232a885405df39e146d7ac02f3da034a5addc78c00faca59e2d8934ec5b\nStatus: Downloaded newer image for abcdesktopio/oc.nginx:builder\n ---> ef7e71c277b9\nStep 2/8 : COPY --from=abcdesktopio/oc.nginx:3.2 var/webModules /var/webModules\n3.0: Pulling from abcdesktopio/oc.nginx\neaead16dc43b: Already exists \nd78e49ae48aa: Pull complete \n5a1b3cde12da: Pull complete \nd46852e47788: Pull complete \n301ba448a167: Pull complete \ne352a410ea9e: Pull complete \n6478c15f8c14: Pull complete \n52697000c467: Pull complete \n4f346a00bc16: Pull complete \n9d4bc434c5bb: Pull complete \nDigest: sha256:d8692b633b221654899d8dbe7987330f878364d7288ec5628f7aa47152ce4ea6\nStatus: Downloaded newer image for abcdesktopio/oc.nginx:3.2\n\n ---> c5a084901830\nStep 3/8 : COPY ui.json /var/webModules/transpile/config/\n ---> cbb23fb8634e\nStep 4/8 : RUN cd /var/webModules && make prod\n ---> Running in 976ee31ac5db\ncreate html page /var/webModules/demo.html\ncreate html page /var/webModules/index.session.mustache.html\ncreate html page /var/webModules/app.html\ncreate html page /var/webModules/app.session.mustache.html\ncreate html page /var/webModules/index.html\ncreate html page /var/webModules/description.html\nApply userInterface conf: 1.355s\nTransform and copy js files:\nBuild svg: 2.034s\nBuild css: 2.041s\n[...]\nTotal duration copy and transform: 10.430s\nWriting /var/webModules/app.js\nWriting /var/webModules/index.html: 0.975ms\nWriting /var/webModules/app.html: 0.855ms\nWriting /var/webModules/index.session.mustache.html: 0.781ms\nBuild app.js file: 11.362s\nremove out dir base /var/webModules/build: 9.129ms\nTotal duration: 12.752s\nRemoving intermediate container 976ee31ac5db\n ---> 784902ce50c1\nStep 5/8 : FROM abcdesktopio/oc.nginx:3.2\n ---> c77f6c5ca8a1\nStep 6/8 : COPY --from=builder var/webModules /var/webModules\n ---> 68474a5ee2d5\nStep 7/8 : RUN cat /var/webModules/index.html\n ---> Running in ddb958078b50\n [...]\nRemoving intermediate container ddb958078b50\n ---> f02e3c57ec7e\nStep 8/8 : LABEL name=\"frontend acmedesktop base image\" maintainer=\"acmedesktop\" version=\"3.0\"\n ---> Running in da5363dcf434\nRemoving intermediate container da5363dcf434\n ---> b5449d85393f\nSuccessfully built b5449d85393f\nSuccessfully tagged oc.nginx:acme\n
Run the docker images command to read the new oc.nginx image
docker images \n\nREPOSITORY TAG IMAGE ID CREATED SIZE\noc.nginx acme b5449d85393f 2 minutes ago 685MB\n
"},{"location":"common/3.0/update_frontend_image/#save-the-container-image-to-a-file","title":"Save the container image to a file","text":"
docker image save oc.nginx:acme -o oc.nginx.acme\n
"},{"location":"common/3.0/update_frontend_image/#import-the-file-ocnginxacme-in-k8sio-namespace-for-containerd","title":"Import the file oc.nginx.acme in k8s.io namespace for containerd","text":"
The oc.nginx.acme not is listed in the k8s.io namespace.
Start you web browser. You can read the new project name at the home page. After login you get the new color.
You have updated the html web page for abcdesktop release 3.X
"},{"location":"common/3.3/update_frontend_image/","title":"Update and custom frontend web page","text":"
abcdesktop uses a front HTML web site and X11 Linux application. So, to get a new graphic design, you have to define it twice in HTML (CSS) files and in X11 config.
The new desktop is defined with the default background color
We need to change the top color with the same new default value #18974c
Update the oc.nginx container image to add #18974c inside the new graphic chart.
"},{"location":"common/3.3/update_frontend_image/#create-new-image-for-abcdesktop-ocnginx","title":"Create new image for abcdesktop oc.nginx","text":""},{"location":"common/3.3/update_frontend_image/#clone-default-webmodules","title":"Clone default webmodules","text":"
Login progress is embedded in span HTML tags. Each projectNameSplitedStage describes a step during the user's authentification then pod's creation process.
"},{"location":"common/3.3/update_frontend_image/#colors-dictionary-entries","title":"Colors dictionary entries","text":"entry default value example @primary #474B55 #474B55 @secondatry #2D2D2D #2D2D2D @tertiary #6EC6F0 #6EC6F0"},{"location":"common/3.3/update_frontend_image/#update-the-uijson-with-your-own-values","title":"Update the ui.json with your own values","text":"
Change for example the name abcdesktop to acmedesktop
\"name\": \"acmedesktop.io\"\n
Update the projectNameSplitedHTML values, the @tertiary and @x11bgcolor colors
status user message OK 'Looking for your desktop' OK 'Looking for your desktop done' OK 'Building desktop' OK 'Starting network services, it will take a while...' OK 'Network services started.' OK 'Starting desktop graphical service %ds / %d' % (nCount,nCountMax) OK 'Starting desktop spawner service %ds / %d' % (nCount,nCountMax) OK 'Desktop services are ready after %d s' Error 'createDesktop error - myOrchestrator.createDesktop %s'"},{"location":"core/mongodb/","title":"Mongodb","text":"
Mongodb is an open-source document database that provides high performance, high availability, and automatic scaling.
The mongodb container comes from the public docker registry. This service is attend to the netback network.
The /etc/nginx/get.targetmap.lua read the jwt_token and return the ip address or the pod's fqdn, using the jwt_desktop_signing_public_key and the jwt_desktop_payload_private_key
It uses a targetmap (dict) as first cache level.
lua_shared_dict targetmap 1m;\n
Read the lua script get.targetmap.lua to get details jwt token data and payload encryption.
"},{"location":"core/ocuser/","title":"The POD User","text":"
After the login process, if no associated pod is all ready running, a new user pod is started. This pod starts at least a container with the graphical image.
"},{"location":"core/ocuser/#inside-the-pod-user","title":"Inside the POD User","text":"
The pod user runs by default a container with the graphical image : the oc.user.18.04.
A pod can also runs sound container image, and a printer container. These options are defined in the od.config configuration file [ section desktop.soundimage and desktop.printerimage].
"},{"location":"core/ocuser/#processes-running-inside-the-user-container","title":"Processes running inside the user container","text":"
All processes are running as the user named balloon, because none of theme need to run as root.
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems. All process running inside the user container, are started by supervisord.
TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), a client/server application that allows users to launch and interact with graphical applications on remote machines. TigerVNC provides the levels of performance necessary to run 3D and video applications, and it attempts to maintain a common look and feel and re-use components, where possible, across the various platforms that it supports. TigerVNC also provides extensions for advanced authentication methods and TLS encryption.
Openbox is the window manager, it supports extensive standards support.
Openbox is patched with few line to send SIG_USR1 and SIG_USR2 messages to internal spawner service. This patch is only required to send message (Create/Close) to the abcdesktop.io web front.
This patch add notification when X11/window change :
The notify patch send signals SIGUSR1 and SIGUSR2 to a process (pid)
spawner-service.js is a daemon written in nodejs, this daemon listen for messages on the tcp port 8001. spawner-service offers methods to interact with the container and the X11 server :
launch: start a new application inside the container [ use for builtin applications ]
filesearch: search file by keywords
activate: activate a window
raise: raise a window
minimize: minimize a window
close: close a window
getwindowslist: get window list
activatewindow: activate a window
closewindow
minimizewindow
raisewindow
info: get container information
clipboardsync: Sync primary clipboard to gtk default clipboard
getbroadcastwindowslist: broadcast the window list to all connected users
getappforfile: get the application key for a filename
getmimeforfile: get the mime type for a filename
echo: return an echo string
spawner-service.js is started by supervisord using the command :
Printer-service.js waits for a file in /home/balloon/.printer-queue directory. Printer-service.js use broadcastevent to notify the web browser to download new files to print. Printer-service.js is started by supervisord using the command :
File-service.js is a upload/download service to tranfert files between the browser and the user home directory. File-service.js supports the HTTP method POST to uploadFile and GET to respond data file. File-service.js is used for printer-service.js to download PDF printed files. File-service.js use the tcp port 8080.
http.createServer(function(req, res) {\n if (req.method === 'POST') {\n uploadFile( req, res );\n } \n else if (req.method === 'GET') {\n respondFile( req, res );\n }\n}).listen(8080, function() {\n console.log('Listening for requests');\n});\n
File-service.js is started by supervisord using the command :
PulseAudio is a sound system for POSIX, and is a proxy for sound applications. It allows you to do advanced operations on your sound data as it passes between applications. Pulseaudio is use as server to forward sound between X11 applications and the user browser. It supports also virtual local sound.
Xsettingsd is a daemon that implements the XSETTINGS specification. Xsettingsd is use to run GTK+ applications, to configure things such as themes, font antialiasing/hinting, and UI sound effects without we using the GNOME desktop environment. Xsettingsd set the default GTK theme and color pallette:
"},{"location":"core/ocuser/#build-the-user-container-image","title":"Build the user container image","text":"
The image oc.user.XX.YY is based from the oc.software.XX.YY witch came from oc.ubuntu.XX.YY. For example : * The image oc.user.18.04 is based from the oc.software.18.04 witch came from oc.ubuntu.18.04. * The image oc.user.20.04 is based from the oc.software.20.04 witch came from oc.ubuntu.20.04. * The image oc.user.21.04 is based from the oc.software.21.04 witch came from oc.ubuntu.21.04.
To build the image oc.user container from scratch, you need to build there 3 images. Build oc.ubuntu.18.04 first, next oc.software.18.04, and finish by oc.user.18.04. This is done by the Makefile command.
oc.pyos is the application server for abcdesktop.io. oc.pyos is the abcdesktop control plane that configures and shuts down user desktops. This repository oc.pyos is the container of pyos. os.py is python script based on cherrypy framework and listen tcp port 8000. os.py daemon waits for json request from the javascript web client scripts, and implements methods :
'login' : Request a login session, create a new user container if it does not exist.
'getkeyinfo' : Return the public key from a provider
'logout' : logout the container
'logs' : return logs from a started container
'getapplist' : return all avalaible applications
'install' : [ deprecated ] install a package
'share' : send a auth token to the email to share the desktop
'support' : send a support request
'restart' : retart the user container
'ocrun' : start a application
'ocstop' : stop the container
'whoami' : return a JSON object whoami
'set' : set a key value
'get' : get value from a key
'setcollection' : add value to a collection
'getcollection' : get all values from a collection
LibreSpeed/SpeedTest is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers. LibreSpeed/SpeedTest works with no Flash, no Java, no Websocket.
"},{"location":"services/file-service/","title":"File service v1.0.0","text":""},{"location":"services/file-service/#file-service","title":"File service v1.0.0","text":"
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
"},{"location":"services/file-service/#get__-responses","title":"Responses","text":"Status Meaning Description Schema 403 Forbidden none Inline 404 Not Found none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#get__-responseschema","title":"Response Schema","text":"
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data any false none none This operation does not require authentication"},{"location":"services/file-service/#post__","title":"post__","text":"
POST /
Upload a file at a given path
Body parameter
Example responses
200 Response
"},{"location":"services/file-service/#post__-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 403 Forbidden none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#post__-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/file-service/#delete__","title":"delete__","text":"
DELETE /
Remove a given file wich is present in home directory
Body parameter
{\n \"myFilename\": \"string\"\n}\n
"},{"location":"services/file-service/#delete__-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb myFilename body string true none
Example responses
200 Response
"},{"location":"services/file-service/#delete__-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 400 Bad Request none Inline 403 Forbidden none Inline 404 Not Found none Inline 500 Internal Server Error none Inline"},{"location":"services/file-service/#delete__-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 400
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 403
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 500
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data strin false none none This operation does not require authentication"},{"location":"services/file-service/#get__directory_list","title":"get__directory_list","text":"
GET /directory/list
List files in a given directory
"},{"location":"services/file-service/#get__directory_list-parameters","title":"Parameters","text":"Name In Type Required Description directoryName query string true none"},{"location":"services/file-service/#get__directory_list-responses","title":"Responses","text":"Status Meaning Description Schema default Default Default response None This operation does not require authentication"},{"location":"services/spawner-service/","title":"Spawner service v1.0.0","text":""},{"location":"services/spawner-service/#spawner-service","title":"Spawner service v1.0.0","text":"
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
"},{"location":"services/spawner-service/#get__version-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__version-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb date Date false none none \u00bb commit string false none none \u00bb version string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__launch","title":"post__launch","text":"
"},{"location":"services/spawner-service/#post__launch-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb command body string true none \u00bb args body [string] false none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__launch-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none launch 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setaudioquality","title":"post__setAudioQuality","text":"
POST /setAudioQuality
Set the audio quality
Body parameter
{\n \"sink\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setaudioquality-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb sink body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__setaudioquality-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none processResult 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__playaudiosample","title":"post__playAudioSample","text":"
POST /playAudioSample
Play a sample audio
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#post__playaudiosample-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none processResult 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#put__configurepulse","title":"put__configurePulse","text":"
"},{"location":"services/spawner-service/#put__configurepulse-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb destinationIp body string true none \u00bb port body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#put__configurepulse-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__broadcastwindowslist","title":"post__broadcastwindowslist","text":"
POST /broadcastwindowslist
Emit a broadcast with window list as data
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__broadcastwindowslist-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__clipboardsync","title":"post__clipboardsync","text":"
POST /clipboardsync
Synchronize X11 and gtk clipboard
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__clipboardsync-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setdesktop","title":"post__setDesktop","text":"
"},{"location":"services/spawner-service/#post__setdesktop-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb key body string true none \u00bb value body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setdesktop-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__getdesktop","title":"get__getDesktop","text":"
GET /getDesktop
Get a data stored as json file
"},{"location":"services/spawner-service/#get__getdesktop-parameters","title":"Parameters","text":"Name In Type Required Description key query string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#get__getdesktop-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getdesktop-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data object false none none This operation does not require authentication"},{"location":"services/spawner-service/#get__getmimeforfile","title":"get__getmimeforfile","text":"
GET /getmimeforfile
Get a mime for a given filename
"},{"location":"services/spawner-service/#get__getmimeforfile-parameters","title":"Parameters","text":"Name In Type Required Description filename query string true none
Example responses
200 Response
{\n \"data\": {}\n}\n
"},{"location":"services/spawner-service/#get__getmimeforfile-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none MIME 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__filesearch","title":"get__filesearch","text":"
GET /filesearch
Used for list files by dock
"},{"location":"services/spawner-service/#get__filesearch-parameters","title":"Parameters","text":"Name In Type Required Description maxfile query integer false none keywords query string true none
"},{"location":"services/spawner-service/#get__filesearch-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__filesearch-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [object] false none none \u00bb\u00bb file string false none none \u00bb\u00bb mime string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__generatedesktopfiles","title":"post__generateDesktopFiles","text":"
POST /generateDesktopFiles
Build desktop files to run containerized applications
"},{"location":"services/spawner-service/#post__generatedesktopfiles-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb list body [object] true none \u00bb\u00bb mimetype body string false none \u00bb\u00bb path body string false none \u00bb\u00bb executablefilename body string false none \u00bb\u00bb icon body string false none \u00bb\u00bb name body string false none \u00bb\u00bb launch body string false none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__generatedesktopfiles-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__getappforfile","title":"get__getappforfile","text":"
"},{"location":"services/spawner-service/#get__getappforfile-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none AppForFile 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#get__about","title":"get__about","text":"
"},{"location":"services/spawner-service/#get__about-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__about-responseschema","title":"Response Schema","text":"
"},{"location":"services/spawner-service/#get__getsettings-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getsettings-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [any] false none none \u00bb\u00bb tab string false none none \u00bb\u00bb enabled boolean false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__setbackgroundcolor","title":"post__setBackgroundColor","text":"
POST /setBackgroundColor
Change the background color
Body parameter
{\n \"color\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundcolor-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb color body string true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundcolor-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__setbackgroundimage","title":"post__setBackgroundImage","text":"
POST /setBackgroundImage
Set the background image
Body parameter
{\n \"imgName\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__setbackgroundimage-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb imgName body string true none
"},{"location":"services/spawner-service/#post__setbackgroundimage-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#post__setbackgroundimage-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data object false none none \u00bb\u00bb color string false none none \u00bb\u00bb subData Success false none All operations completed with success \u00bb\u00bb\u00bb code integer false none none \u00bb\u00bb\u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__setdefaultimage","title":"post__setDefaultImage","text":"
POST /setDefaultImage
Set the default image as background
Example responses
200 Response
"},{"location":"services/spawner-service/#post__setdefaultimage-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 404 Not Found none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#post__setdefaultimage-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none
Status Code 404
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data string false none none This operation does not require authentication"},{"location":"services/spawner-service/#get__getwindowslist","title":"get__getwindowslist","text":"
GET /getwindowslist
Get window list
Example responses
200 Response
"},{"location":"services/spawner-service/#get__getwindowslist-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Inline 500 Internal Server Error none InternalError"},{"location":"services/spawner-service/#get__getwindowslist-responseschema","title":"Response Schema","text":"
Status Code 200
Name Type Required Restrictions Description \u00bb code integer false none none \u00bb data [any] false none none \u00bb\u00bb id integer false none none \u00bb\u00bb pid integer false none none \u00bb\u00bb wm_class string false none none \u00bb\u00bb title string false none none \u00bb\u00bb machine_name string false none none This operation does not require authentication"},{"location":"services/spawner-service/#post__activatewindows","title":"post__activatewindows","text":"
POST /activatewindows
Activate windows
Body parameter
{\n \"windowsid\": [\n 0\n ]\n}\n
"},{"location":"services/spawner-service/#post__activatewindows-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb windowsid body [integer] true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__activatewindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__closewindows","title":"post__closewindows","text":"
POST /closewindows
Close windows
Body parameter
{\n \"windowsid\": [\n 0\n ]\n}\n
"},{"location":"services/spawner-service/#post__closewindows-parameters","title":"Parameters","text":"Name In Type Required Description body body object false none \u00bb windowsid body [integer] true none
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__closewindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#post__placeallwindows","title":"post__placeAllWindows","text":"
POST /placeAllWindows
Place and resize all windows
Example responses
200 Response
{\n \"code\": 0,\n \"data\": \"string\"\n}\n
"},{"location":"services/spawner-service/#post__placeallwindows-responses","title":"Responses","text":"Status Meaning Description Schema 200 OK none Success 500 Internal Server Error none InternalError This operation does not require authentication"},{"location":"services/spawner-service/#schemas","title":"Schemas","text":""},{"location":"services/spawner-service/#tocS_InternalError","title":"InternalError","text":"
{\n \"code\": 0,\n \"data\": \"string\"\n}\n\n
"},{"location":"services/spawner-service/#properties","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data string false none none"},{"location":"services/spawner-service/#tocS_Success","title":"Success","text":"
{\n \"code\": 0,\n \"data\": \"string\"\n}\n\n
All operations completed with success
"},{"location":"services/spawner-service/#properties_1","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data string false none none"},{"location":"services/spawner-service/#tocS_processResult","title":"processResult","text":"
{\n \"code\": 0,\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_2","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data object false none none"},{"location":"services/spawner-service/#tocS_launch","title":"launch","text":"
{\n \"code\": 0,\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_3","title":"Properties","text":"Name Type Required Restrictions Description code integer false none none data object false none none"},{"location":"services/spawner-service/#tocS_MIME","title":"MIME","text":"
{\n \"data\": {}\n}\n\n
"},{"location":"services/spawner-service/#properties_4","title":"Properties","text":"Name Type Required Restrictions Description data object false none none"},{"location":"services/spawner-service/#tocS_AppForFile","title":"AppForFile","text":"
Driver for CIFS (SMB, Samba, Windows Share) network filesystems as Kubernetes volumes.
abcdesktop team is not the authors of the CIFS Flexvolume Plugin for kubernetes. This file is an update from the original source file https://raw.githubusercontent.com/fstab/cifs/. The original source code is https://github.com/fstab/cifs The author is Fabian St\u00e4ber. The update is part for abcdesktop.io
This article is just an update from Fabian St\u00e4ber work.
Docker containers running in Kubernetes have an ephemeral file system: Once a container is terminated, all files are gone. In order to store persistent data in Kubernetes, you need to mount a Persistent Volume into your container. Kubernetes has built-in support for network filesystems found in the most common cloud providers, like Amazon's EBS, Microsoft's Azure disk, etc. However, some cloud hosting services, like the Hetzner cloud, provide network storage using the CIFS (SMB, Samba, Windows Share) protocol, which is not natively supported in Kubernetes.
Fortunately, Kubernetes provides Flexvolume, which is a plugin mechanism enabling users to write their own drivers. There are a few flexvolume drivers for CIFS out there, but for different reasons none of them seemed to work for me. So Fabian St\u00e4ber wrote this driver.
The flexvolume plugin is a single shell script named cifs. This shell script must be available on the Kubernetes master and on each of the Kubernetes nodes. By default, Kubernetes searches for third party volume plugins in /usr/libexec/kubernetes/kubelet-plugins/volume/exec/.
The plugin directory can be configured with the kubelet's --volume-plugin-dir parameter, run ps aux | grep kubelet to learn the location of the plugin directory on your system (see [#1][9]). The cifs script must be located in a subdirectory named abcdesktop~cifs/. The directory name abcdesktop~cifs/ will be mapped to the Flexvolume driver name abcdesktop/cifs.
On the Kubernetes master and on each Kubernetes node run the following commands:
It should output a JSON string containing \"status\": \"Success\". This command is also run by Kubernetes itself when the cifs plugin is detected on the file system.
"},{"location":"setup/kubernetes_flexvolume/#update-your-odconfig-file","title":"Update your od.config file","text":"
In this example, we use a Microsoft Active Directory as a LDAP Server.
CIFS is supported with kubernetes configuration, CIFS is not supported in docker non-cluster mode
Add a new policy to add a label TAG during the user's authentification process.
If the user's label is equal domainuser, then the user attribut homeDir is mounted to the homeDirectory by the CIFS flexvolume plugin.
"},{"location":"setup/kubernetes_flexvolume/#testing","title":"Testing","text":""},{"location":"setup/kubernetes_flexvolume/#apply-new-configuration-file","title":"Apply new configuration file","text":"
kubectl apply -f abcdesktop.yml\n
Open you abcdesktop website and fill the authentation form with your Microsoft Active Direcotry Service or Samba server credentials.
Run authentification on the Microsoft Active Direcotry Service or on your Samba server
Start the File Manager application. In this example, the homeDir is set to U:, the mount entry become the letter U.
Click on the homeDir to read the CIFS ressource data. In this example, the shared ressource //192.168.7.101/alex contains a file ```NAS-file.ods'
# mount | grep 192.168.7.101\n//192.168.7.101/alex on /var/lib/kubelet/pods/b7530cc0-6903-458a-a133-d8a8450e3af4/volumes/abcdesktop~cifs/flexvol-cifs-homedir-alex type cifs (rw,relatime,vers=1.0,cache=strict,username=alex,uid=4096,forceuid,gid=4096,forcegid,addr=192.168.7.101,soft,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1)\n
Check that the kubernetes secrets exist
kubectl get secrets -n abcdesktop\nNAME TYPE DATA AGE\nabcdesktopjwtdesktoppayload Opaque 2 65d\nabcdesktopjwtdesktopsigning Opaque 2 65d\nabcdesktopjwtusersigning Opaque 2 65d\nauth-cifs-alex-flexvol-cifs-homedir abcdesktop/cifs 4 10m\nauth-ldif-alex abcdesktop/ldif 11 10m\n