ehristoforu commited on
Commit
58e418d
·
0 Parent(s):

Duplicate from TNR-5/chatorO

Browse files
Files changed (13) hide show
  1. .gitattributes +35 -0
  2. Dockerfile +133 -0
  3. README.md +11 -0
  4. app.py +434 -0
  5. config.py +9 -0
  6. geckodriver +3 -0
  7. ml.ipynb +456 -0
  8. package-lock.json +975 -0
  9. package.json +14 -0
  10. pyngrok.yml +1 -0
  11. requirements.txt +118 -0
  12. temp.py +4 -0
  13. web.html +60 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ geckodriver filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use the official Python 3.9 image as the base image
2
+ FROM python:3.9
3
+
4
+ # Expose the port
5
+ EXPOSE 7860
6
+
7
+ # Keeps Python from generating .pyc files in the container
8
+ ENV PYTHONDONTWRITEBYTECODE=1
9
+
10
+ # Turns off buffering for easier container logging
11
+ ENV PYTHONUNBUFFERED=1
12
+
13
+ # Set the PYNGROK_CONFIG environment variable
14
+ ENV PYNGROK_CONFIG /tmp/pyngrok.yml
15
+
16
+ # Set the NGROK_PATH environment variable to a writable location
17
+ ENV NGROK_PATH /tmp/ngrok
18
+
19
+ # Copy requirements.txt into the container
20
+ COPY requirements.txt .
21
+
22
+ # RUN apt-get update
23
+ # RUN apt-get install -y wget
24
+ # RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
25
+ # RUN apt-get install ./google-chrome-stable_current_amd64.deb -y
26
+
27
+
28
+ # RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
29
+ # RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
30
+ # RUN apt-get -y update
31
+ # RUN apt-get install -y google-chrome-stable
32
+
33
+ # # install chromedriver
34
+ # RUN apt-get install -yqq unzip
35
+ # RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
36
+ # RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/
37
+
38
+
39
+
40
+
41
+
42
+ # RUN apt install wget -y
43
+ # RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz
44
+ # RUN tar -xzvf geckodriver-v0.32.0-linux64.tar.gz -C /usr/local/bin
45
+ # RUN chmod +x /usr/local/bin/geckodriver
46
+ # RUN geckodriver -V
47
+
48
+
49
+ # RUN apt install firefox-esr -y
50
+ # RUN apt-get install firefox-geckodriver
51
+
52
+ # Upgrade pip and install the required packages
53
+ RUN pip install --upgrade pip && \
54
+ pip install -r requirements.txt
55
+
56
+ # Install sudo and create the necessary directories before copying the files
57
+ RUN apt-get update && \
58
+ apt-get install -y sudo && \
59
+ mkdir -p /code/image
60
+
61
+ # Creates a non-root user with an explicit UID and adds permission to access the /code folder
62
+ RUN adduser -u 5678 --disabled-password --gecos "" appuser && \
63
+ usermod -aG sudo appuser && \
64
+ usermod -aG root appuser && \
65
+ chown -R appuser:appuser /code
66
+
67
+ # Create the pyngrok bin directory and set the ownership and permissions for appuser
68
+ RUN mkdir -p /usr/local/lib/python3.9/site-packages/pyngrok/bin && \
69
+ chown -R appuser:appuser /usr/local/lib/python3.9/site-packages/pyngrok/bin && \
70
+ chmod -R 777 /usr/local/lib/python3.9/site-packages/pyngrok/bin
71
+
72
+ RUN mkdir -p /.ngrok2 && \
73
+ chown -R appuser:appuser /.ngrok2 && \
74
+ chmod -R 777 /.ngrok2
75
+
76
+ RUN apt-get update && \
77
+ apt-get install -y curl
78
+
79
+ RUN echo "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> /etc/apt/sources.list.d/debian.list
80
+
81
+
82
+ # RUN apt install firefox-esr && \
83
+ # apt install geckodriver
84
+
85
+ # Set the working directory and copy the files
86
+ WORKDIR /code
87
+
88
+ # Set the ownership and permissions for the /code directory and its contents
89
+ RUN chown -R appuser:appuser /code && \
90
+ chmod -R 777 /code
91
+
92
+ COPY . /code
93
+
94
+ # RUN chown -R appuser:appuser /code/data.csv && \
95
+ # chmod -R 777 /code/data.csv
96
+
97
+ # Copy the pyngrok.yml configuration file
98
+ COPY pyngrok.yml /tmp/pyngrok.yml
99
+
100
+ # Set the TRANSFORMERS_CACHE environment variable to a cache directory inside /tmp
101
+ ENV TRANSFORMERS_CACHE /tmp/transformers_cache
102
+ ENV TORCH_HOME /tmp/torch_cache
103
+
104
+ USER appuser
105
+
106
+
107
+ RUN git clone https://github.com/rphrp1985/gpt4f
108
+ # WORKDIR /gpt4f
109
+ # COPY . /gpt4f
110
+ # RUN cd gpt4f
111
+ # RUN ls
112
+
113
+ # cp -R / /root/dest-folder
114
+ RUN cp -R gpt4f/* /code
115
+ RUN ls
116
+ CMD python run.py
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ # Start the application using pyngrok
125
+ # CMD python main.py
126
+ # Get the public IP address and display it
127
+ # RUN curl -s https://api.ipify.org | xargs echo "Public IP:"
128
+ RUN pip install gunicorn
129
+
130
+ # Start the Uvicorn server
131
+ # ENTRYPOINT ["python", "main.py"]
132
+ # CMD ["sh", "-c", "python main.py & sleep infinity"]
133
+ CMD ["gunicorn", "--bind", "0.0.0.0:7860","run:app"]
README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: gpt4f
3
+ emoji: ♾️💬
4
+ colorFrom: indigo
5
+ colorTo: yellow
6
+ sdk: docker
7
+ pinned: false
8
+ duplicated_from: TNR-5/chatorO
9
+ ---
10
+
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,434 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import io
2
+ from fastapi import FastAPI, File, UploadFile
3
+
4
+ import subprocess
5
+ import os
6
+ import requests
7
+ import random
8
+
9
+ import shutil
10
+ import json
11
+ # from transformers import AutoModelForQuestionAnswering, AutoTokenizer, pipeline
12
+ from pydantic import BaseModel
13
+ from typing import Annotated
14
+
15
+ from fastapi import Form
16
+
17
+
18
+ import selenium
19
+
20
+ from selenium import webdriver
21
+ from selenium.webdriver import ChromeOptions
22
+ from selenium.webdriver.chrome.service import Service
23
+ import threading
24
+ import random
25
+ import string
26
+ import time
27
+
28
+
29
+ # from selenium.webdriver.firefox.options import Options
30
+
31
+ # options = FirefoxOptions()
32
+ # options.headless = True
33
+
34
+ # service = Service()
35
+
36
+
37
+ # driver = webdriver.Firefox(options= options,service=service)
38
+ # driver.get("https://yuntian-deng-chatgpt.hf.space/")
39
+
40
+
41
+
42
+
43
+ # driver.get("https://yuntian-deng-chatgpt.hf.space/")
44
+
45
+
46
+ class Query(BaseModel):
47
+ text: str
48
+ host:str
49
+
50
+
51
+
52
+
53
+ from fastapi import FastAPI, Request, Depends, UploadFile, File
54
+ from fastapi.exceptions import HTTPException
55
+ from fastapi.middleware.cors import CORSMiddleware
56
+ from fastapi.responses import JSONResponse
57
+
58
+
59
+ app = FastAPI()
60
+
61
+ app.add_middleware(
62
+ CORSMiddleware,
63
+ allow_origins=['*'],
64
+ allow_credentials=True,
65
+ allow_methods=['*'],
66
+ allow_headers=['*'],
67
+ )
68
+
69
+
70
+ # cred = credentials.Certificate('key.json')
71
+ # app1 = firebase_admin.initialize_app(cred)
72
+ # db = firestore.client()
73
+ # data_frame = pd.read_csv('data.csv')
74
+
75
+ from selenium.webdriver.common.by import By
76
+ from pymongo.mongo_client import MongoClient
77
+
78
+ @app.on_event("startup")
79
+ async def startup_event():
80
+ print("on startup")
81
+
82
+
83
+ # t = threading.Thread(target=makeqimg)
84
+ # t.start()
85
+
86
+
87
+
88
+
89
+
90
+ mycol = None
91
+
92
+
93
+ @app.post("/url")
94
+ async def get_url(request: Request ):
95
+ return "k"
96
+
97
+ # data = await request.json()
98
+ # text = data['url']
99
+ # mongo_url=text
100
+ # print("mongo url ",text)
101
+ # global mycol
102
+ # if mycol==None:
103
+ # myclient = MongoClient(mongo_url)
104
+
105
+ # try:
106
+ # myclient.admin.command('ping')
107
+ # print("Pinged your deployment. You successfully connected to MongoDB!")
108
+ # except Exception as e:
109
+ # print(e)
110
+
111
+ # mydb = myclient['open-ai-api-keys']
112
+
113
+ # mycol= mydb['key']
114
+ # extract()
115
+
116
+
117
+
118
+
119
+ def extract():
120
+ options = ChromeOptions()
121
+ options.add_argument('--no-sandbox')
122
+ options.add_argument('-headless')
123
+ service = Service()
124
+ driver = webdriver.Chrome(options= options,service=service)
125
+
126
+
127
+ global mycol
128
+ # global driver
129
+
130
+ if True:
131
+ # time.sleep(60)
132
+ try:
133
+ driver.get("https://talkai.info/chat/")
134
+ element = driver.find_element(By.CSS_SELECTOR,".chat")
135
+ api_key = element.get_attribute("data-api-key")
136
+ dict={"key":"open-ai"}
137
+ mycol.delete_one(dict)
138
+ dict={"key":"open-ai","value":api_key}
139
+ mycol.insert_one(dict)
140
+ print(api_key)
141
+ driver.delete_all_cookies()
142
+ driver.quit()
143
+
144
+ except Exception as e:
145
+ print('error in extract ',e)
146
+ pass
147
+ # time.sleep(60)
148
+
149
+
150
+
151
+ from queue import Queue
152
+ chatq = Queue()
153
+ imgq= Queue()
154
+
155
+
156
+ def makeqchat():
157
+
158
+ while chatq.qsize()<2:
159
+ print("appending in chat queue")
160
+ options = ChromeOptions()
161
+ options.add_argument('--no-sandbox')
162
+ options.add_argument('-headless')
163
+ service = Service()
164
+ driver = webdriver.Chrome(options= options,service=service)
165
+ driver.get("https://talkai.info/chat/")
166
+ chatq.put(driver)
167
+
168
+
169
+
170
+ def makeqimg():
171
+
172
+ while imgq.qsize()<2:
173
+ print("appending in img queue")
174
+ options = ChromeOptions()
175
+ options.add_argument('--no-sandbox')
176
+ options.add_argument('-headless')
177
+ service = Service()
178
+ driver = webdriver.Chrome(options= options,service=service)
179
+ driver.get("https://talkai.info/image/")
180
+ imgq.put(driver)
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+ @app.post("/")
189
+ async def get_answer(request: Request ):
190
+ data = await request.json()
191
+
192
+ text = data['text']
193
+ host= ''
194
+
195
+ temperature=-1
196
+
197
+ try:
198
+ temperature= data['temperature']
199
+ temperature= float(temperature)
200
+ temperature= round(temperature,1)
201
+
202
+ except:
203
+ print("No temperature")
204
+
205
+
206
+ # N = 20
207
+ # res = ''.join(random.choices(string.ascii_uppercase +
208
+ # string.digits, k=N))
209
+ # res= res+ str(time.time())
210
+
211
+ id= ''
212
+
213
+
214
+ # t = threading.Thread(target=do_ML, args=(id,text,host,0))
215
+ # t.start()
216
+
217
+ res= do_ML(id,text,host,0,temperature)
218
+
219
+
220
+ dict={"ChatGPT":res}
221
+ # dict= {"id":id}
222
+
223
+
224
+ return JSONResponse(dict)
225
+
226
+
227
+
228
+
229
+
230
+
231
+ def do_ML(id:str,text:str,host:str, trycount:int,temperature:float):
232
+
233
+ try:
234
+ starttime=time.time()
235
+ options = ChromeOptions()
236
+ options.add_argument('--no-sandbox')
237
+ options.add_argument('-headless')
238
+ service = Service()
239
+ driver = webdriver.Chrome(options= options,service=service)
240
+ driver.get("https://talkai.info/chat/")
241
+ if temperature>=0 and temperature<=2:
242
+ try:
243
+ print("setting temperature ",temperature)
244
+ while True:
245
+ currtime= time.time()
246
+ if(currtime>starttime+10):
247
+ return "Requested Could not be proceed"
248
+
249
+ try:
250
+ setting_button = driver.find_element(By.ID, "openSettings")
251
+ setting_button.click()
252
+ break
253
+ except:
254
+ time.sleep(0.2)
255
+
256
+ while True:
257
+ currtime= time.time()
258
+ if(currtime>starttime+10):
259
+ return "Requested Could not be proceed"
260
+ try:
261
+ input_element = driver.find_element(By.CLASS_NAME,"styled-slider")
262
+ new_value = temperature
263
+ driver.execute_script("arguments[0].value = arguments[1]", input_element, new_value)
264
+ break
265
+ except:
266
+ time.sleep(0.2)
267
+ while True:
268
+ currtime= time.time()
269
+ if(currtime>starttime+10):
270
+ return "Requested Could not be proceed"
271
+ try:
272
+ confirm_button = driver.find_element(By.CLASS_NAME, "settingsButtonConfirm")
273
+ confirm_button.click()
274
+ break
275
+ except:
276
+ time.sleep(0.2)
277
+ except:
278
+ print("could not set temperature")
279
+
280
+
281
+ while True:
282
+ currtime= time.time()
283
+ if(currtime>starttime+10):
284
+ return "Requested Could not be proceed"
285
+ try:
286
+ textarea = driver.find_element(By.CSS_SELECTOR, "textarea")
287
+ textarea.send_keys(text)
288
+
289
+ button = driver.find_element(By.CLASS_NAME, "sectionChatFormButton")
290
+ button.click()
291
+ break
292
+ except:
293
+ time.sleep(0.2)
294
+
295
+
296
+ prev =""
297
+
298
+ # time.sleep(2)
299
+ while True:
300
+ time.sleep(0.2)
301
+ currtime= time.time()
302
+ if(currtime>starttime+18.5):
303
+
304
+ return "Requested Could not be proceed"
305
+
306
+ value=""
307
+ try:
308
+ messages = driver.find_elements(By.CLASS_NAME, 'messageContain')
309
+ last_message_contain = messages[len(messages)-2]
310
+ value = last_message_contain.text
311
+ value = value[8:len(value)]
312
+ print(value)
313
+ if value=="Please, wait...":
314
+ continue
315
+ except:
316
+ continue
317
+
318
+
319
+
320
+ driver.delete_all_cookies()
321
+ driver.quit()
322
+ return value
323
+
324
+
325
+
326
+ except:
327
+ print("Error")
328
+ driver.delete_all_cookies()
329
+ if trycount>3:
330
+
331
+ return
332
+ driver.quit()
333
+ return do_ML(id,text,host,trycount+1)
334
+
335
+
336
+
337
+
338
+
339
+
340
+ @app.post("/image")
341
+ async def get_answer(q: Query ):
342
+
343
+ text = q.text
344
+ host= q.host
345
+
346
+ # N = 20
347
+ # res = ''.join(random.choices(string.ascii_uppercase +
348
+ # string.digits, k=N))
349
+ # res= res+ str(time.time())
350
+
351
+ id= ''
352
+
353
+ # t = threading.Thread(target=do_ML2, args=(id,text,host,0))
354
+ # t.start()
355
+
356
+ url = do_ML2(id,text,host,0)
357
+
358
+ dict= {"url":url}
359
+
360
+
361
+ # dict= {"id":id}
362
+
363
+
364
+ return JSONResponse(dict)
365
+
366
+
367
+
368
+
369
+
370
+ def do_ML2(id:str,text:str,host:str, trycount:int):
371
+
372
+ try:
373
+ starttime=time.time()
374
+
375
+ options = ChromeOptions()
376
+ options.add_argument('--no-sandbox')
377
+ options.add_argument('-headless')
378
+ service = Service()
379
+ driver = webdriver.Chrome(options= options,service=service)
380
+ driver.get("https://talkai.info/image/")
381
+ while True:
382
+ currtime= time.time()
383
+ if(currtime>starttime+10):
384
+ return "Requested Could not be proceed"
385
+ try:
386
+ textarea = driver.find_element(By.CSS_SELECTOR, "textarea")
387
+ textarea.send_keys(text)
388
+ time.sleep(0.1)
389
+ button = driver.find_element(By.CLASS_NAME, "sectionChatFormButton")
390
+ button.click()
391
+ break
392
+ except:
393
+ time.sleep(0.2)
394
+
395
+ # time.sleep(2)
396
+ while True:
397
+ currtime= time.time()
398
+ if(currtime>starttime+10):
399
+ return "Requested Could not be proceed"
400
+
401
+ time.sleep(0.2)
402
+ currtime= time.time()
403
+ if(currtime>starttime+18.5):
404
+
405
+ return "Request Could not be proceed"
406
+ try:
407
+ messages = driver.find_elements(By.XPATH, "//div[@class='messageContain']/p/img")
408
+ last_message_contain = messages[len(messages)-2]
409
+ src = last_message_contain.get_attribute("src")
410
+ print(src)
411
+
412
+ driver.delete_all_cookies()
413
+ driver.quit()
414
+
415
+ return src
416
+ break
417
+ except:
418
+ continue
419
+
420
+ except:
421
+ print("Error")
422
+ driver.delete_all_cookies()
423
+ if trycount>1:
424
+
425
+ return "Request Could not be proceed"
426
+ driver.quit()
427
+ return do_ML2(id,text,host,trycount+1)
428
+
429
+
430
+
431
+
432
+
433
+
434
+
config.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ import os
3
+
4
+ load_dotenv(dotenv_path=".env") # Load environment variables from .env file
5
+
6
+ # DATABASE_URL = os.getenv("DATABASE_URL")
7
+ # OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
8
+ # OCR_API_KEY = os.getenv("OCR_API_KEY")
9
+ NGROK_AUTH_TOKEN = os.getenv("NGROK_AUTH_TOKEN")
geckodriver ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12994672529413925506cade8dee78d91683015146dac8dab017496f02d7bbb0
3
+ size 9710704
ml.ipynb ADDED
@@ -0,0 +1,456 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 2,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import pandas as pd \n",
10
+ "import numpy as np\n"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": 30,
16
+ "metadata": {},
17
+ "outputs": [
18
+ {
19
+ "name": "stderr",
20
+ "output_type": "stream",
21
+ "text": [
22
+ "C:\\Users\\user\\AppData\\Local\\Temp\\ipykernel_20744\\3250454216.py:2: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n",
23
+ " df['hour'] = pd.to_datetime(df['time']).dt.hour\n"
24
+ ]
25
+ }
26
+ ],
27
+ "source": [
28
+ "df= pd.read_csv('data.csv')\n",
29
+ "df['hour'] = pd.to_datetime(df['time']).dt.hour\n",
30
+ "df['weekday'] = pd.to_datetime(df['date']).dt.weekday\n",
31
+ "\n"
32
+ ]
33
+ },
34
+ {
35
+ "cell_type": "code",
36
+ "execution_count": 31,
37
+ "metadata": {},
38
+ "outputs": [
39
+ {
40
+ "data": {
41
+ "text/html": [
42
+ "<div>\n",
43
+ "<style scoped>\n",
44
+ " .dataframe tbody tr th:only-of-type {\n",
45
+ " vertical-align: middle;\n",
46
+ " }\n",
47
+ "\n",
48
+ " .dataframe tbody tr th {\n",
49
+ " vertical-align: top;\n",
50
+ " }\n",
51
+ "\n",
52
+ " .dataframe thead th {\n",
53
+ " text-align: right;\n",
54
+ " }\n",
55
+ "</style>\n",
56
+ "<table border=\"1\" class=\"dataframe\">\n",
57
+ " <thead>\n",
58
+ " <tr style=\"text-align: right;\">\n",
59
+ " <th></th>\n",
60
+ " <th>address</th>\n",
61
+ " <th>car_num</th>\n",
62
+ " <th>lat</th>\n",
63
+ " <th>long</th>\n",
64
+ " <th>time</th>\n",
65
+ " <th>date</th>\n",
66
+ " <th>hour</th>\n",
67
+ " <th>weekday</th>\n",
68
+ " </tr>\n",
69
+ " </thead>\n",
70
+ " <tbody>\n",
71
+ " <tr>\n",
72
+ " <th>0</th>\n",
73
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
74
+ " <td>jj</td>\n",
75
+ " <td>88.372527</td>\n",
76
+ " <td>22.580441</td>\n",
77
+ " <td>18:48:39</td>\n",
78
+ " <td>2023-05-02</td>\n",
79
+ " <td>18</td>\n",
80
+ " <td>1</td>\n",
81
+ " </tr>\n",
82
+ " <tr>\n",
83
+ " <th>1</th>\n",
84
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
85
+ " <td>jj</td>\n",
86
+ " <td>88.372527</td>\n",
87
+ " <td>22.580441</td>\n",
88
+ " <td>18:48:39</td>\n",
89
+ " <td>2023-05-02</td>\n",
90
+ " <td>18</td>\n",
91
+ " <td>1</td>\n",
92
+ " </tr>\n",
93
+ " <tr>\n",
94
+ " <th>2</th>\n",
95
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
96
+ " <td>jj</td>\n",
97
+ " <td>88.372527</td>\n",
98
+ " <td>22.580441</td>\n",
99
+ " <td>18:50:15</td>\n",
100
+ " <td>2023-05-02</td>\n",
101
+ " <td>18</td>\n",
102
+ " <td>1</td>\n",
103
+ " </tr>\n",
104
+ " <tr>\n",
105
+ " <th>3</th>\n",
106
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
107
+ " <td>jj</td>\n",
108
+ " <td>88.372526</td>\n",
109
+ " <td>22.580458</td>\n",
110
+ " <td>19:16:08</td>\n",
111
+ " <td>2023-05-02</td>\n",
112
+ " <td>19</td>\n",
113
+ " <td>1</td>\n",
114
+ " </tr>\n",
115
+ " <tr>\n",
116
+ " <th>4</th>\n",
117
+ " <td>15, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
118
+ " <td>jj</td>\n",
119
+ " <td>88.372552</td>\n",
120
+ " <td>22.580432</td>\n",
121
+ " <td>19:17:15</td>\n",
122
+ " <td>2023-05-02</td>\n",
123
+ " <td>19</td>\n",
124
+ " <td>1</td>\n",
125
+ " </tr>\n",
126
+ " </tbody>\n",
127
+ "</table>\n",
128
+ "</div>"
129
+ ],
130
+ "text/plain": [
131
+ " address car_num lat \n",
132
+ "0 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \\\n",
133
+ "1 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \n",
134
+ "2 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \n",
135
+ "3 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372526 \n",
136
+ "4 15, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372552 \n",
137
+ "\n",
138
+ " long time date hour weekday \n",
139
+ "0 22.580441 18:48:39 2023-05-02 18 1 \n",
140
+ "1 22.580441 18:48:39 2023-05-02 18 1 \n",
141
+ "2 22.580441 18:50:15 2023-05-02 18 1 \n",
142
+ "3 22.580458 19:16:08 2023-05-02 19 1 \n",
143
+ "4 22.580432 19:17:15 2023-05-02 19 1 "
144
+ ]
145
+ },
146
+ "execution_count": 31,
147
+ "metadata": {},
148
+ "output_type": "execute_result"
149
+ }
150
+ ],
151
+ "source": [
152
+ "df.head()"
153
+ ]
154
+ },
155
+ {
156
+ "cell_type": "code",
157
+ "execution_count": 29,
158
+ "metadata": {},
159
+ "outputs": [],
160
+ "source": [
161
+ "# df.drop(['time','date','address','car_num'],axis=1,inplace=True)"
162
+ ]
163
+ },
164
+ {
165
+ "cell_type": "code",
166
+ "execution_count": 32,
167
+ "metadata": {},
168
+ "outputs": [
169
+ {
170
+ "data": {
171
+ "text/html": [
172
+ "<div>\n",
173
+ "<style scoped>\n",
174
+ " .dataframe tbody tr th:only-of-type {\n",
175
+ " vertical-align: middle;\n",
176
+ " }\n",
177
+ "\n",
178
+ " .dataframe tbody tr th {\n",
179
+ " vertical-align: top;\n",
180
+ " }\n",
181
+ "\n",
182
+ " .dataframe thead th {\n",
183
+ " text-align: right;\n",
184
+ " }\n",
185
+ "</style>\n",
186
+ "<table border=\"1\" class=\"dataframe\">\n",
187
+ " <thead>\n",
188
+ " <tr style=\"text-align: right;\">\n",
189
+ " <th></th>\n",
190
+ " <th>address</th>\n",
191
+ " <th>car_num</th>\n",
192
+ " <th>lat</th>\n",
193
+ " <th>long</th>\n",
194
+ " <th>time</th>\n",
195
+ " <th>date</th>\n",
196
+ " <th>hour</th>\n",
197
+ " <th>weekday</th>\n",
198
+ " </tr>\n",
199
+ " </thead>\n",
200
+ " <tbody>\n",
201
+ " <tr>\n",
202
+ " <th>0</th>\n",
203
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
204
+ " <td>jj</td>\n",
205
+ " <td>88.372527</td>\n",
206
+ " <td>22.580441</td>\n",
207
+ " <td>18:48:39</td>\n",
208
+ " <td>2023-05-02</td>\n",
209
+ " <td>18</td>\n",
210
+ " <td>1</td>\n",
211
+ " </tr>\n",
212
+ " <tr>\n",
213
+ " <th>1</th>\n",
214
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
215
+ " <td>jj</td>\n",
216
+ " <td>88.372527</td>\n",
217
+ " <td>22.580441</td>\n",
218
+ " <td>18:48:39</td>\n",
219
+ " <td>2023-05-02</td>\n",
220
+ " <td>18</td>\n",
221
+ " <td>1</td>\n",
222
+ " </tr>\n",
223
+ " <tr>\n",
224
+ " <th>2</th>\n",
225
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
226
+ " <td>jj</td>\n",
227
+ " <td>88.372527</td>\n",
228
+ " <td>22.580441</td>\n",
229
+ " <td>18:50:15</td>\n",
230
+ " <td>2023-05-02</td>\n",
231
+ " <td>18</td>\n",
232
+ " <td>1</td>\n",
233
+ " </tr>\n",
234
+ " <tr>\n",
235
+ " <th>3</th>\n",
236
+ " <td>40, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
237
+ " <td>jj</td>\n",
238
+ " <td>88.372526</td>\n",
239
+ " <td>22.580458</td>\n",
240
+ " <td>19:16:08</td>\n",
241
+ " <td>2023-05-02</td>\n",
242
+ " <td>19</td>\n",
243
+ " <td>1</td>\n",
244
+ " </tr>\n",
245
+ " <tr>\n",
246
+ " <th>4</th>\n",
247
+ " <td>15, Vidyasagar St, Machuabazar, Kolkata, West ...</td>\n",
248
+ " <td>jj</td>\n",
249
+ " <td>88.372552</td>\n",
250
+ " <td>22.580432</td>\n",
251
+ " <td>19:17:15</td>\n",
252
+ " <td>2023-05-02</td>\n",
253
+ " <td>19</td>\n",
254
+ " <td>1</td>\n",
255
+ " </tr>\n",
256
+ " </tbody>\n",
257
+ "</table>\n",
258
+ "</div>"
259
+ ],
260
+ "text/plain": [
261
+ " address car_num lat \n",
262
+ "0 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \\\n",
263
+ "1 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \n",
264
+ "2 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372527 \n",
265
+ "3 40, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372526 \n",
266
+ "4 15, Vidyasagar St, Machuabazar, Kolkata, West ... jj 88.372552 \n",
267
+ "\n",
268
+ " long time date hour weekday \n",
269
+ "0 22.580441 18:48:39 2023-05-02 18 1 \n",
270
+ "1 22.580441 18:48:39 2023-05-02 18 1 \n",
271
+ "2 22.580441 18:50:15 2023-05-02 18 1 \n",
272
+ "3 22.580458 19:16:08 2023-05-02 19 1 \n",
273
+ "4 22.580432 19:17:15 2023-05-02 19 1 "
274
+ ]
275
+ },
276
+ "execution_count": 32,
277
+ "metadata": {},
278
+ "output_type": "execute_result"
279
+ }
280
+ ],
281
+ "source": [
282
+ "df.head()"
283
+ ]
284
+ },
285
+ {
286
+ "cell_type": "code",
287
+ "execution_count": 34,
288
+ "metadata": {},
289
+ "outputs": [],
290
+ "source": [
291
+ "x=df[['lat','long','weekday']]\n",
292
+ "y= df['hour']"
293
+ ]
294
+ },
295
+ {
296
+ "cell_type": "code",
297
+ "execution_count": 35,
298
+ "metadata": {},
299
+ "outputs": [],
300
+ "source": [
301
+ "# adress_map={}\n",
302
+ "# temp=[]\n",
303
+ "# count=0;\n",
304
+ "# for i in x['address']:\n",
305
+ "\n"
306
+ ]
307
+ },
308
+ {
309
+ "cell_type": "code",
310
+ "execution_count": 36,
311
+ "metadata": {},
312
+ "outputs": [
313
+ {
314
+ "data": {
315
+ "text/html": [
316
+ "<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestRegressor(random_state=0)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestRegressor</label><div class=\"sk-toggleable__content\"><pre>RandomForestRegressor(random_state=0)</pre></div></div></div></div></div>"
317
+ ],
318
+ "text/plain": [
319
+ "RandomForestRegressor(random_state=0)"
320
+ ]
321
+ },
322
+ "execution_count": 36,
323
+ "metadata": {},
324
+ "output_type": "execute_result"
325
+ }
326
+ ],
327
+ "source": [
328
+ "from sklearn.ensemble import RandomForestRegressor\n",
329
+ " \n",
330
+ "# create regressor object\n",
331
+ "regressor = RandomForestRegressor(n_estimators=100, random_state=0)\n",
332
+ "\n",
333
+ "\n",
334
+ " \n",
335
+ "# fit the regressor with x and y data\n",
336
+ "regressor.fit(x, y)"
337
+ ]
338
+ },
339
+ {
340
+ "cell_type": "code",
341
+ "execution_count": 37,
342
+ "metadata": {},
343
+ "outputs": [
344
+ {
345
+ "name": "stdout",
346
+ "output_type": "stream",
347
+ "text": [
348
+ "[18.08 18.08 18.08 18.64 18.97 18.97 18.97 19. 19. 19. 19. 19.\n",
349
+ " 19. 19. 19. 19. 19. 19. 19. 19.89 19.89 16.99]\n",
350
+ "0 18\n",
351
+ "1 18\n",
352
+ "2 18\n",
353
+ "3 19\n",
354
+ "4 19\n",
355
+ "5 19\n",
356
+ "6 19\n",
357
+ "7 19\n",
358
+ "8 19\n",
359
+ "9 19\n",
360
+ "10 19\n",
361
+ "11 19\n",
362
+ "12 19\n",
363
+ "13 19\n",
364
+ "14 19\n",
365
+ "15 19\n",
366
+ "16 19\n",
367
+ "17 19\n",
368
+ "18 19\n",
369
+ "19 20\n",
370
+ "20 20\n",
371
+ "21 16\n",
372
+ "Name: hour, dtype: int32\n"
373
+ ]
374
+ }
375
+ ],
376
+ "source": [
377
+ "print(regressor.predict(x))\n",
378
+ "print(y)\n"
379
+ ]
380
+ },
381
+ {
382
+ "cell_type": "code",
383
+ "execution_count": 43,
384
+ "metadata": {},
385
+ "outputs": [],
386
+ "source": [
387
+ "adress= df['address']\n",
388
+ "lat= df['lat']\n",
389
+ "long= df['long']\n",
390
+ "weekday= df['weekday']\n",
391
+ "\n",
392
+ "a1=[]\n",
393
+ "lat1=[]\n",
394
+ "long1=[]\n",
395
+ "weekday1=[]\n",
396
+ "\n",
397
+ "\n",
398
+ "\n",
399
+ "i =0\n",
400
+ "\n",
401
+ "while i<len(adress):\n",
402
+ " if adress[i] == '40, Vidyasagar St, Machuabazar, Kolkata, West Bengal 700009, India':\n",
403
+ " a1.append(adress[i])\n",
404
+ " lat1.append(lat[i])\n",
405
+ " long1.append(long[i])\n",
406
+ " weekday1.append(weekday[i])\n",
407
+ " break\n",
408
+ " i=i+1\n",
409
+ "\n",
410
+ "df2= pd.DataFrame({'lat':lat1,'long':long1,'weekday':weekday1})\n",
411
+ "\n",
412
+ "\n",
413
+ " "
414
+ ]
415
+ },
416
+ {
417
+ "cell_type": "code",
418
+ "execution_count": 44,
419
+ "metadata": {},
420
+ "outputs": [
421
+ {
422
+ "name": "stdout",
423
+ "output_type": "stream",
424
+ "text": [
425
+ "[18.08]\n"
426
+ ]
427
+ }
428
+ ],
429
+ "source": [
430
+ "print(regressor.predict(df2))"
431
+ ]
432
+ }
433
+ ],
434
+ "metadata": {
435
+ "kernelspec": {
436
+ "display_name": "Python 3",
437
+ "language": "python",
438
+ "name": "python3"
439
+ },
440
+ "language_info": {
441
+ "codemirror_mode": {
442
+ "name": "ipython",
443
+ "version": 3
444
+ },
445
+ "file_extension": ".py",
446
+ "mimetype": "text/x-python",
447
+ "name": "python",
448
+ "nbconvert_exporter": "python",
449
+ "pygments_lexer": "ipython3",
450
+ "version": "3.8.0"
451
+ },
452
+ "orig_nbformat": 4
453
+ },
454
+ "nbformat": 4,
455
+ "nbformat_minor": 2
456
+ }
package-lock.json ADDED
@@ -0,0 +1,975 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "alcohol",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "alcohol",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "firebase": "^9.21.0"
13
+ },
14
+ "devDependencies": {}
15
+ },
16
+ "node_modules/@firebase/analytics": {
17
+ "version": "0.10.0",
18
+ "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz",
19
+ "integrity": "sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg==",
20
+ "dependencies": {
21
+ "@firebase/component": "0.6.4",
22
+ "@firebase/installations": "0.6.4",
23
+ "@firebase/logger": "0.4.0",
24
+ "@firebase/util": "1.9.3",
25
+ "tslib": "^2.1.0"
26
+ },
27
+ "peerDependencies": {
28
+ "@firebase/app": "0.x"
29
+ }
30
+ },
31
+ "node_modules/@firebase/analytics-compat": {
32
+ "version": "0.2.6",
33
+ "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz",
34
+ "integrity": "sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q==",
35
+ "dependencies": {
36
+ "@firebase/analytics": "0.10.0",
37
+ "@firebase/analytics-types": "0.8.0",
38
+ "@firebase/component": "0.6.4",
39
+ "@firebase/util": "1.9.3",
40
+ "tslib": "^2.1.0"
41
+ },
42
+ "peerDependencies": {
43
+ "@firebase/app-compat": "0.x"
44
+ }
45
+ },
46
+ "node_modules/@firebase/analytics-types": {
47
+ "version": "0.8.0",
48
+ "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz",
49
+ "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw=="
50
+ },
51
+ "node_modules/@firebase/app": {
52
+ "version": "0.9.9",
53
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.9.tgz",
54
+ "integrity": "sha512-8jzuHtQ/t9XqK+0IAQ/lpylVYzXGKIUKm6U3v7LWor+MGIm+9Ucn+hbrd2iBjH8qfmNrjnQnmf7sWBbdSa54oA==",
55
+ "dependencies": {
56
+ "@firebase/component": "0.6.4",
57
+ "@firebase/logger": "0.4.0",
58
+ "@firebase/util": "1.9.3",
59
+ "idb": "7.1.1",
60
+ "tslib": "^2.1.0"
61
+ }
62
+ },
63
+ "node_modules/@firebase/app-check": {
64
+ "version": "0.7.0",
65
+ "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.7.0.tgz",
66
+ "integrity": "sha512-y0raLJpEtiL+wonfInFMaSfBV/EDvr356ZHMWbpr5F7fR0/I3cC0h7U6SKpKhrbSHJ0fOYIe0xbih20KTlpcnA==",
67
+ "dependencies": {
68
+ "@firebase/component": "0.6.4",
69
+ "@firebase/logger": "0.4.0",
70
+ "@firebase/util": "1.9.3",
71
+ "tslib": "^2.1.0"
72
+ },
73
+ "peerDependencies": {
74
+ "@firebase/app": "0.x"
75
+ }
76
+ },
77
+ "node_modules/@firebase/app-check-compat": {
78
+ "version": "0.3.6",
79
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.6.tgz",
80
+ "integrity": "sha512-azHAeHi9igoaIo04E6Yfuc7aIbWoWuBXuqjyYyWbeCc8Zz/NfJvIAgmXugN4LdxsHJ7XGlZTvwJ6YaYROdSa7A==",
81
+ "dependencies": {
82
+ "@firebase/app-check": "0.7.0",
83
+ "@firebase/app-check-types": "0.5.0",
84
+ "@firebase/component": "0.6.4",
85
+ "@firebase/logger": "0.4.0",
86
+ "@firebase/util": "1.9.3",
87
+ "tslib": "^2.1.0"
88
+ },
89
+ "peerDependencies": {
90
+ "@firebase/app-compat": "0.x"
91
+ }
92
+ },
93
+ "node_modules/@firebase/app-check-interop-types": {
94
+ "version": "0.2.0",
95
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz",
96
+ "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ=="
97
+ },
98
+ "node_modules/@firebase/app-check-types": {
99
+ "version": "0.5.0",
100
+ "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz",
101
+ "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ=="
102
+ },
103
+ "node_modules/@firebase/app-compat": {
104
+ "version": "0.2.9",
105
+ "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.9.tgz",
106
+ "integrity": "sha512-XdnkHNK3XdPrwChmuSJHDA6eYmo2KLAtaAG1SJLGMQ+n+S5/UcufmDkw9GvPh93H1xhPRAwd/vKdjHmE7xp3Zw==",
107
+ "dependencies": {
108
+ "@firebase/app": "0.9.9",
109
+ "@firebase/component": "0.6.4",
110
+ "@firebase/logger": "0.4.0",
111
+ "@firebase/util": "1.9.3",
112
+ "tslib": "^2.1.0"
113
+ }
114
+ },
115
+ "node_modules/@firebase/app-types": {
116
+ "version": "0.9.0",
117
+ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz",
118
+ "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q=="
119
+ },
120
+ "node_modules/@firebase/auth": {
121
+ "version": "0.23.1",
122
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.23.1.tgz",
123
+ "integrity": "sha512-QubckPA5Ad92HiY20szjdH7EnFxL8gsZzRLyNCmO2oqebVAVuh9pJp6Zb8EA+P/AuMQYMBo6rQ3oIHi9gUCstg==",
124
+ "dependencies": {
125
+ "@firebase/component": "0.6.4",
126
+ "@firebase/logger": "0.4.0",
127
+ "@firebase/util": "1.9.3",
128
+ "node-fetch": "2.6.7",
129
+ "tslib": "^2.1.0"
130
+ },
131
+ "peerDependencies": {
132
+ "@firebase/app": "0.x"
133
+ }
134
+ },
135
+ "node_modules/@firebase/auth-compat": {
136
+ "version": "0.4.1",
137
+ "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.1.tgz",
138
+ "integrity": "sha512-wCw+6Jz7zCWzMA2bN8vphqEUmxuIFxHfBJiF3rKFTCEFPPXG4ulIcmMT98uuZVVq4xDPk/hxm105xwHBFAwBng==",
139
+ "dependencies": {
140
+ "@firebase/auth": "0.23.1",
141
+ "@firebase/auth-types": "0.12.0",
142
+ "@firebase/component": "0.6.4",
143
+ "@firebase/util": "1.9.3",
144
+ "node-fetch": "2.6.7",
145
+ "tslib": "^2.1.0"
146
+ },
147
+ "peerDependencies": {
148
+ "@firebase/app-compat": "0.x"
149
+ }
150
+ },
151
+ "node_modules/@firebase/auth-interop-types": {
152
+ "version": "0.2.1",
153
+ "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz",
154
+ "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg=="
155
+ },
156
+ "node_modules/@firebase/auth-types": {
157
+ "version": "0.12.0",
158
+ "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz",
159
+ "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==",
160
+ "peerDependencies": {
161
+ "@firebase/app-types": "0.x",
162
+ "@firebase/util": "1.x"
163
+ }
164
+ },
165
+ "node_modules/@firebase/component": {
166
+ "version": "0.6.4",
167
+ "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz",
168
+ "integrity": "sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==",
169
+ "dependencies": {
170
+ "@firebase/util": "1.9.3",
171
+ "tslib": "^2.1.0"
172
+ }
173
+ },
174
+ "node_modules/@firebase/database": {
175
+ "version": "0.14.4",
176
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.4.tgz",
177
+ "integrity": "sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ==",
178
+ "dependencies": {
179
+ "@firebase/auth-interop-types": "0.2.1",
180
+ "@firebase/component": "0.6.4",
181
+ "@firebase/logger": "0.4.0",
182
+ "@firebase/util": "1.9.3",
183
+ "faye-websocket": "0.11.4",
184
+ "tslib": "^2.1.0"
185
+ }
186
+ },
187
+ "node_modules/@firebase/database-compat": {
188
+ "version": "0.3.4",
189
+ "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.4.tgz",
190
+ "integrity": "sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg==",
191
+ "dependencies": {
192
+ "@firebase/component": "0.6.4",
193
+ "@firebase/database": "0.14.4",
194
+ "@firebase/database-types": "0.10.4",
195
+ "@firebase/logger": "0.4.0",
196
+ "@firebase/util": "1.9.3",
197
+ "tslib": "^2.1.0"
198
+ }
199
+ },
200
+ "node_modules/@firebase/database-types": {
201
+ "version": "0.10.4",
202
+ "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.4.tgz",
203
+ "integrity": "sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ==",
204
+ "dependencies": {
205
+ "@firebase/app-types": "0.9.0",
206
+ "@firebase/util": "1.9.3"
207
+ }
208
+ },
209
+ "node_modules/@firebase/firestore": {
210
+ "version": "3.11.0",
211
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.11.0.tgz",
212
+ "integrity": "sha512-r9qUbjuIKOXAVYwqZaamgXuUJBuV8I2X0Kao5PUxQAPueV2mRapdIlby6awYgjknE8kq1Tlys5Nf5/TV6WtnAg==",
213
+ "dependencies": {
214
+ "@firebase/component": "0.6.4",
215
+ "@firebase/logger": "0.4.0",
216
+ "@firebase/util": "1.9.3",
217
+ "@firebase/webchannel-wrapper": "0.10.0",
218
+ "@grpc/grpc-js": "~1.7.0",
219
+ "@grpc/proto-loader": "^0.6.13",
220
+ "node-fetch": "2.6.7",
221
+ "tslib": "^2.1.0"
222
+ },
223
+ "engines": {
224
+ "node": ">=10.10.0"
225
+ },
226
+ "peerDependencies": {
227
+ "@firebase/app": "0.x"
228
+ }
229
+ },
230
+ "node_modules/@firebase/firestore-compat": {
231
+ "version": "0.3.8",
232
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.8.tgz",
233
+ "integrity": "sha512-VrTckDEVBqFWFsHGVdQgCb0Tht/Rrg/nKFp2aat0FaIjr8A9t4Pfcuu32Py25SbiCnr98pyh3RmVYs0kbF/lCA==",
234
+ "dependencies": {
235
+ "@firebase/component": "0.6.4",
236
+ "@firebase/firestore": "3.11.0",
237
+ "@firebase/firestore-types": "2.5.1",
238
+ "@firebase/util": "1.9.3",
239
+ "tslib": "^2.1.0"
240
+ },
241
+ "peerDependencies": {
242
+ "@firebase/app-compat": "0.x"
243
+ }
244
+ },
245
+ "node_modules/@firebase/firestore-types": {
246
+ "version": "2.5.1",
247
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz",
248
+ "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==",
249
+ "peerDependencies": {
250
+ "@firebase/app-types": "0.x",
251
+ "@firebase/util": "1.x"
252
+ }
253
+ },
254
+ "node_modules/@firebase/functions": {
255
+ "version": "0.9.4",
256
+ "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.4.tgz",
257
+ "integrity": "sha512-3H2qh6U+q+nepO5Hds+Ddl6J0pS+zisuBLqqQMRBHv9XpWfu0PnDHklNmE8rZ+ccTEXvBj6zjkPfdxt6NisvlQ==",
258
+ "dependencies": {
259
+ "@firebase/app-check-interop-types": "0.2.0",
260
+ "@firebase/auth-interop-types": "0.2.1",
261
+ "@firebase/component": "0.6.4",
262
+ "@firebase/messaging-interop-types": "0.2.0",
263
+ "@firebase/util": "1.9.3",
264
+ "node-fetch": "2.6.7",
265
+ "tslib": "^2.1.0"
266
+ },
267
+ "peerDependencies": {
268
+ "@firebase/app": "0.x"
269
+ }
270
+ },
271
+ "node_modules/@firebase/functions-compat": {
272
+ "version": "0.3.4",
273
+ "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.4.tgz",
274
+ "integrity": "sha512-kxVxTGyLV1MBR3sp3mI+eQ6JBqz0G5bk310F8eX4HzDFk4xjk5xY0KdHktMH+edM2xs1BOg0vwvvsAHczIjB+w==",
275
+ "dependencies": {
276
+ "@firebase/component": "0.6.4",
277
+ "@firebase/functions": "0.9.4",
278
+ "@firebase/functions-types": "0.6.0",
279
+ "@firebase/util": "1.9.3",
280
+ "tslib": "^2.1.0"
281
+ },
282
+ "peerDependencies": {
283
+ "@firebase/app-compat": "0.x"
284
+ }
285
+ },
286
+ "node_modules/@firebase/functions-types": {
287
+ "version": "0.6.0",
288
+ "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz",
289
+ "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw=="
290
+ },
291
+ "node_modules/@firebase/installations": {
292
+ "version": "0.6.4",
293
+ "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz",
294
+ "integrity": "sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA==",
295
+ "dependencies": {
296
+ "@firebase/component": "0.6.4",
297
+ "@firebase/util": "1.9.3",
298
+ "idb": "7.0.1",
299
+ "tslib": "^2.1.0"
300
+ },
301
+ "peerDependencies": {
302
+ "@firebase/app": "0.x"
303
+ }
304
+ },
305
+ "node_modules/@firebase/installations-compat": {
306
+ "version": "0.2.4",
307
+ "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.4.tgz",
308
+ "integrity": "sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q==",
309
+ "dependencies": {
310
+ "@firebase/component": "0.6.4",
311
+ "@firebase/installations": "0.6.4",
312
+ "@firebase/installations-types": "0.5.0",
313
+ "@firebase/util": "1.9.3",
314
+ "tslib": "^2.1.0"
315
+ },
316
+ "peerDependencies": {
317
+ "@firebase/app-compat": "0.x"
318
+ }
319
+ },
320
+ "node_modules/@firebase/installations-types": {
321
+ "version": "0.5.0",
322
+ "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz",
323
+ "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==",
324
+ "peerDependencies": {
325
+ "@firebase/app-types": "0.x"
326
+ }
327
+ },
328
+ "node_modules/@firebase/installations/node_modules/idb": {
329
+ "version": "7.0.1",
330
+ "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz",
331
+ "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg=="
332
+ },
333
+ "node_modules/@firebase/logger": {
334
+ "version": "0.4.0",
335
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz",
336
+ "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==",
337
+ "dependencies": {
338
+ "tslib": "^2.1.0"
339
+ }
340
+ },
341
+ "node_modules/@firebase/messaging": {
342
+ "version": "0.12.4",
343
+ "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.4.tgz",
344
+ "integrity": "sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw==",
345
+ "dependencies": {
346
+ "@firebase/component": "0.6.4",
347
+ "@firebase/installations": "0.6.4",
348
+ "@firebase/messaging-interop-types": "0.2.0",
349
+ "@firebase/util": "1.9.3",
350
+ "idb": "7.0.1",
351
+ "tslib": "^2.1.0"
352
+ },
353
+ "peerDependencies": {
354
+ "@firebase/app": "0.x"
355
+ }
356
+ },
357
+ "node_modules/@firebase/messaging-compat": {
358
+ "version": "0.2.4",
359
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz",
360
+ "integrity": "sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg==",
361
+ "dependencies": {
362
+ "@firebase/component": "0.6.4",
363
+ "@firebase/messaging": "0.12.4",
364
+ "@firebase/util": "1.9.3",
365
+ "tslib": "^2.1.0"
366
+ },
367
+ "peerDependencies": {
368
+ "@firebase/app-compat": "0.x"
369
+ }
370
+ },
371
+ "node_modules/@firebase/messaging-interop-types": {
372
+ "version": "0.2.0",
373
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz",
374
+ "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ=="
375
+ },
376
+ "node_modules/@firebase/messaging/node_modules/idb": {
377
+ "version": "7.0.1",
378
+ "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz",
379
+ "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg=="
380
+ },
381
+ "node_modules/@firebase/performance": {
382
+ "version": "0.6.4",
383
+ "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.4.tgz",
384
+ "integrity": "sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g==",
385
+ "dependencies": {
386
+ "@firebase/component": "0.6.4",
387
+ "@firebase/installations": "0.6.4",
388
+ "@firebase/logger": "0.4.0",
389
+ "@firebase/util": "1.9.3",
390
+ "tslib": "^2.1.0"
391
+ },
392
+ "peerDependencies": {
393
+ "@firebase/app": "0.x"
394
+ }
395
+ },
396
+ "node_modules/@firebase/performance-compat": {
397
+ "version": "0.2.4",
398
+ "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.4.tgz",
399
+ "integrity": "sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg==",
400
+ "dependencies": {
401
+ "@firebase/component": "0.6.4",
402
+ "@firebase/logger": "0.4.0",
403
+ "@firebase/performance": "0.6.4",
404
+ "@firebase/performance-types": "0.2.0",
405
+ "@firebase/util": "1.9.3",
406
+ "tslib": "^2.1.0"
407
+ },
408
+ "peerDependencies": {
409
+ "@firebase/app-compat": "0.x"
410
+ }
411
+ },
412
+ "node_modules/@firebase/performance-types": {
413
+ "version": "0.2.0",
414
+ "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz",
415
+ "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA=="
416
+ },
417
+ "node_modules/@firebase/remote-config": {
418
+ "version": "0.4.4",
419
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.4.tgz",
420
+ "integrity": "sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ==",
421
+ "dependencies": {
422
+ "@firebase/component": "0.6.4",
423
+ "@firebase/installations": "0.6.4",
424
+ "@firebase/logger": "0.4.0",
425
+ "@firebase/util": "1.9.3",
426
+ "tslib": "^2.1.0"
427
+ },
428
+ "peerDependencies": {
429
+ "@firebase/app": "0.x"
430
+ }
431
+ },
432
+ "node_modules/@firebase/remote-config-compat": {
433
+ "version": "0.2.4",
434
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz",
435
+ "integrity": "sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA==",
436
+ "dependencies": {
437
+ "@firebase/component": "0.6.4",
438
+ "@firebase/logger": "0.4.0",
439
+ "@firebase/remote-config": "0.4.4",
440
+ "@firebase/remote-config-types": "0.3.0",
441
+ "@firebase/util": "1.9.3",
442
+ "tslib": "^2.1.0"
443
+ },
444
+ "peerDependencies": {
445
+ "@firebase/app-compat": "0.x"
446
+ }
447
+ },
448
+ "node_modules/@firebase/remote-config-types": {
449
+ "version": "0.3.0",
450
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz",
451
+ "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA=="
452
+ },
453
+ "node_modules/@firebase/storage": {
454
+ "version": "0.11.2",
455
+ "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.2.tgz",
456
+ "integrity": "sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA==",
457
+ "dependencies": {
458
+ "@firebase/component": "0.6.4",
459
+ "@firebase/util": "1.9.3",
460
+ "node-fetch": "2.6.7",
461
+ "tslib": "^2.1.0"
462
+ },
463
+ "peerDependencies": {
464
+ "@firebase/app": "0.x"
465
+ }
466
+ },
467
+ "node_modules/@firebase/storage-compat": {
468
+ "version": "0.3.2",
469
+ "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.2.tgz",
470
+ "integrity": "sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw==",
471
+ "dependencies": {
472
+ "@firebase/component": "0.6.4",
473
+ "@firebase/storage": "0.11.2",
474
+ "@firebase/storage-types": "0.8.0",
475
+ "@firebase/util": "1.9.3",
476
+ "tslib": "^2.1.0"
477
+ },
478
+ "peerDependencies": {
479
+ "@firebase/app-compat": "0.x"
480
+ }
481
+ },
482
+ "node_modules/@firebase/storage-types": {
483
+ "version": "0.8.0",
484
+ "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz",
485
+ "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==",
486
+ "peerDependencies": {
487
+ "@firebase/app-types": "0.x",
488
+ "@firebase/util": "1.x"
489
+ }
490
+ },
491
+ "node_modules/@firebase/util": {
492
+ "version": "1.9.3",
493
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz",
494
+ "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==",
495
+ "dependencies": {
496
+ "tslib": "^2.1.0"
497
+ }
498
+ },
499
+ "node_modules/@firebase/webchannel-wrapper": {
500
+ "version": "0.10.0",
501
+ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.0.tgz",
502
+ "integrity": "sha512-2I8y+vJVrPfPFJrnRGpao1Qc2Gu7wmYoo5ed2s5zK/DUGgcyY1Yr/xC0YdnKM4pi7rG3HqwW9ehAKUXoTMLdoA=="
503
+ },
504
+ "node_modules/@grpc/grpc-js": {
505
+ "version": "1.7.3",
506
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz",
507
+ "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==",
508
+ "dependencies": {
509
+ "@grpc/proto-loader": "^0.7.0",
510
+ "@types/node": ">=12.12.47"
511
+ },
512
+ "engines": {
513
+ "node": "^8.13.0 || >=10.10.0"
514
+ }
515
+ },
516
+ "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": {
517
+ "version": "0.7.6",
518
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.6.tgz",
519
+ "integrity": "sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==",
520
+ "dependencies": {
521
+ "@types/long": "^4.0.1",
522
+ "lodash.camelcase": "^4.3.0",
523
+ "long": "^4.0.0",
524
+ "protobufjs": "^7.0.0",
525
+ "yargs": "^16.2.0"
526
+ },
527
+ "bin": {
528
+ "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
529
+ },
530
+ "engines": {
531
+ "node": ">=6"
532
+ }
533
+ },
534
+ "node_modules/@grpc/grpc-js/node_modules/protobufjs": {
535
+ "version": "7.2.3",
536
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz",
537
+ "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==",
538
+ "hasInstallScript": true,
539
+ "dependencies": {
540
+ "@protobufjs/aspromise": "^1.1.2",
541
+ "@protobufjs/base64": "^1.1.2",
542
+ "@protobufjs/codegen": "^2.0.4",
543
+ "@protobufjs/eventemitter": "^1.1.0",
544
+ "@protobufjs/fetch": "^1.1.0",
545
+ "@protobufjs/float": "^1.0.2",
546
+ "@protobufjs/inquire": "^1.1.0",
547
+ "@protobufjs/path": "^1.1.2",
548
+ "@protobufjs/pool": "^1.1.0",
549
+ "@protobufjs/utf8": "^1.1.0",
550
+ "@types/node": ">=13.7.0",
551
+ "long": "^5.0.0"
552
+ },
553
+ "engines": {
554
+ "node": ">=12.0.0"
555
+ }
556
+ },
557
+ "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": {
558
+ "version": "5.2.3",
559
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
560
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
561
+ },
562
+ "node_modules/@grpc/proto-loader": {
563
+ "version": "0.6.13",
564
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz",
565
+ "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==",
566
+ "dependencies": {
567
+ "@types/long": "^4.0.1",
568
+ "lodash.camelcase": "^4.3.0",
569
+ "long": "^4.0.0",
570
+ "protobufjs": "^6.11.3",
571
+ "yargs": "^16.2.0"
572
+ },
573
+ "bin": {
574
+ "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
575
+ },
576
+ "engines": {
577
+ "node": ">=6"
578
+ }
579
+ },
580
+ "node_modules/@protobufjs/aspromise": {
581
+ "version": "1.1.2",
582
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
583
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
584
+ },
585
+ "node_modules/@protobufjs/base64": {
586
+ "version": "1.1.2",
587
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
588
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
589
+ },
590
+ "node_modules/@protobufjs/codegen": {
591
+ "version": "2.0.4",
592
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
593
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
594
+ },
595
+ "node_modules/@protobufjs/eventemitter": {
596
+ "version": "1.1.0",
597
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
598
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
599
+ },
600
+ "node_modules/@protobufjs/fetch": {
601
+ "version": "1.1.0",
602
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
603
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
604
+ "dependencies": {
605
+ "@protobufjs/aspromise": "^1.1.1",
606
+ "@protobufjs/inquire": "^1.1.0"
607
+ }
608
+ },
609
+ "node_modules/@protobufjs/float": {
610
+ "version": "1.0.2",
611
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
612
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
613
+ },
614
+ "node_modules/@protobufjs/inquire": {
615
+ "version": "1.1.0",
616
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
617
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
618
+ },
619
+ "node_modules/@protobufjs/path": {
620
+ "version": "1.1.2",
621
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
622
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
623
+ },
624
+ "node_modules/@protobufjs/pool": {
625
+ "version": "1.1.0",
626
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
627
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
628
+ },
629
+ "node_modules/@protobufjs/utf8": {
630
+ "version": "1.1.0",
631
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
632
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
633
+ },
634
+ "node_modules/@types/long": {
635
+ "version": "4.0.2",
636
+ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
637
+ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
638
+ },
639
+ "node_modules/@types/node": {
640
+ "version": "18.16.3",
641
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz",
642
+ "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q=="
643
+ },
644
+ "node_modules/ansi-regex": {
645
+ "version": "5.0.1",
646
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
647
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
648
+ "engines": {
649
+ "node": ">=8"
650
+ }
651
+ },
652
+ "node_modules/ansi-styles": {
653
+ "version": "4.3.0",
654
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
655
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
656
+ "dependencies": {
657
+ "color-convert": "^2.0.1"
658
+ },
659
+ "engines": {
660
+ "node": ">=8"
661
+ },
662
+ "funding": {
663
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
664
+ }
665
+ },
666
+ "node_modules/cliui": {
667
+ "version": "7.0.4",
668
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
669
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
670
+ "dependencies": {
671
+ "string-width": "^4.2.0",
672
+ "strip-ansi": "^6.0.0",
673
+ "wrap-ansi": "^7.0.0"
674
+ }
675
+ },
676
+ "node_modules/color-convert": {
677
+ "version": "2.0.1",
678
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
679
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
680
+ "dependencies": {
681
+ "color-name": "~1.1.4"
682
+ },
683
+ "engines": {
684
+ "node": ">=7.0.0"
685
+ }
686
+ },
687
+ "node_modules/color-name": {
688
+ "version": "1.1.4",
689
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
690
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
691
+ },
692
+ "node_modules/emoji-regex": {
693
+ "version": "8.0.0",
694
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
695
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
696
+ },
697
+ "node_modules/escalade": {
698
+ "version": "3.1.1",
699
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
700
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
701
+ "engines": {
702
+ "node": ">=6"
703
+ }
704
+ },
705
+ "node_modules/faye-websocket": {
706
+ "version": "0.11.4",
707
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
708
+ "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
709
+ "dependencies": {
710
+ "websocket-driver": ">=0.5.1"
711
+ },
712
+ "engines": {
713
+ "node": ">=0.8.0"
714
+ }
715
+ },
716
+ "node_modules/firebase": {
717
+ "version": "9.21.0",
718
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.21.0.tgz",
719
+ "integrity": "sha512-kQpT+YjusVhqj8feSmb+9Fpmyfy7ayGSd6GVk2k0qJjt+AwYgHZ9tuHuIgFdEHGsvqxYRZJpu067ck9ZQwbqQw==",
720
+ "dependencies": {
721
+ "@firebase/analytics": "0.10.0",
722
+ "@firebase/analytics-compat": "0.2.6",
723
+ "@firebase/app": "0.9.9",
724
+ "@firebase/app-check": "0.7.0",
725
+ "@firebase/app-check-compat": "0.3.6",
726
+ "@firebase/app-compat": "0.2.9",
727
+ "@firebase/app-types": "0.9.0",
728
+ "@firebase/auth": "0.23.1",
729
+ "@firebase/auth-compat": "0.4.1",
730
+ "@firebase/database": "0.14.4",
731
+ "@firebase/database-compat": "0.3.4",
732
+ "@firebase/firestore": "3.11.0",
733
+ "@firebase/firestore-compat": "0.3.8",
734
+ "@firebase/functions": "0.9.4",
735
+ "@firebase/functions-compat": "0.3.4",
736
+ "@firebase/installations": "0.6.4",
737
+ "@firebase/installations-compat": "0.2.4",
738
+ "@firebase/messaging": "0.12.4",
739
+ "@firebase/messaging-compat": "0.2.4",
740
+ "@firebase/performance": "0.6.4",
741
+ "@firebase/performance-compat": "0.2.4",
742
+ "@firebase/remote-config": "0.4.4",
743
+ "@firebase/remote-config-compat": "0.2.4",
744
+ "@firebase/storage": "0.11.2",
745
+ "@firebase/storage-compat": "0.3.2",
746
+ "@firebase/util": "1.9.3"
747
+ }
748
+ },
749
+ "node_modules/get-caller-file": {
750
+ "version": "2.0.5",
751
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
752
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
753
+ "engines": {
754
+ "node": "6.* || 8.* || >= 10.*"
755
+ }
756
+ },
757
+ "node_modules/http-parser-js": {
758
+ "version": "0.5.8",
759
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
760
+ "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q=="
761
+ },
762
+ "node_modules/idb": {
763
+ "version": "7.1.1",
764
+ "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz",
765
+ "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ=="
766
+ },
767
+ "node_modules/is-fullwidth-code-point": {
768
+ "version": "3.0.0",
769
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
770
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
771
+ "engines": {
772
+ "node": ">=8"
773
+ }
774
+ },
775
+ "node_modules/lodash.camelcase": {
776
+ "version": "4.3.0",
777
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
778
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
779
+ },
780
+ "node_modules/long": {
781
+ "version": "4.0.0",
782
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
783
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
784
+ },
785
+ "node_modules/node-fetch": {
786
+ "version": "2.6.7",
787
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
788
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
789
+ "dependencies": {
790
+ "whatwg-url": "^5.0.0"
791
+ },
792
+ "engines": {
793
+ "node": "4.x || >=6.0.0"
794
+ },
795
+ "peerDependencies": {
796
+ "encoding": "^0.1.0"
797
+ },
798
+ "peerDependenciesMeta": {
799
+ "encoding": {
800
+ "optional": true
801
+ }
802
+ }
803
+ },
804
+ "node_modules/protobufjs": {
805
+ "version": "6.11.3",
806
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
807
+ "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
808
+ "hasInstallScript": true,
809
+ "dependencies": {
810
+ "@protobufjs/aspromise": "^1.1.2",
811
+ "@protobufjs/base64": "^1.1.2",
812
+ "@protobufjs/codegen": "^2.0.4",
813
+ "@protobufjs/eventemitter": "^1.1.0",
814
+ "@protobufjs/fetch": "^1.1.0",
815
+ "@protobufjs/float": "^1.0.2",
816
+ "@protobufjs/inquire": "^1.1.0",
817
+ "@protobufjs/path": "^1.1.2",
818
+ "@protobufjs/pool": "^1.1.0",
819
+ "@protobufjs/utf8": "^1.1.0",
820
+ "@types/long": "^4.0.1",
821
+ "@types/node": ">=13.7.0",
822
+ "long": "^4.0.0"
823
+ },
824
+ "bin": {
825
+ "pbjs": "bin/pbjs",
826
+ "pbts": "bin/pbts"
827
+ }
828
+ },
829
+ "node_modules/require-directory": {
830
+ "version": "2.1.1",
831
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
832
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
833
+ "engines": {
834
+ "node": ">=0.10.0"
835
+ }
836
+ },
837
+ "node_modules/safe-buffer": {
838
+ "version": "5.2.1",
839
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
840
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
841
+ "funding": [
842
+ {
843
+ "type": "github",
844
+ "url": "https://github.com/sponsors/feross"
845
+ },
846
+ {
847
+ "type": "patreon",
848
+ "url": "https://www.patreon.com/feross"
849
+ },
850
+ {
851
+ "type": "consulting",
852
+ "url": "https://feross.org/support"
853
+ }
854
+ ]
855
+ },
856
+ "node_modules/string-width": {
857
+ "version": "4.2.3",
858
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
859
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
860
+ "dependencies": {
861
+ "emoji-regex": "^8.0.0",
862
+ "is-fullwidth-code-point": "^3.0.0",
863
+ "strip-ansi": "^6.0.1"
864
+ },
865
+ "engines": {
866
+ "node": ">=8"
867
+ }
868
+ },
869
+ "node_modules/strip-ansi": {
870
+ "version": "6.0.1",
871
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
872
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
873
+ "dependencies": {
874
+ "ansi-regex": "^5.0.1"
875
+ },
876
+ "engines": {
877
+ "node": ">=8"
878
+ }
879
+ },
880
+ "node_modules/tr46": {
881
+ "version": "0.0.3",
882
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
883
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
884
+ },
885
+ "node_modules/tslib": {
886
+ "version": "2.5.0",
887
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
888
+ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
889
+ },
890
+ "node_modules/webidl-conversions": {
891
+ "version": "3.0.1",
892
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
893
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
894
+ },
895
+ "node_modules/websocket-driver": {
896
+ "version": "0.7.4",
897
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
898
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
899
+ "dependencies": {
900
+ "http-parser-js": ">=0.5.1",
901
+ "safe-buffer": ">=5.1.0",
902
+ "websocket-extensions": ">=0.1.1"
903
+ },
904
+ "engines": {
905
+ "node": ">=0.8.0"
906
+ }
907
+ },
908
+ "node_modules/websocket-extensions": {
909
+ "version": "0.1.4",
910
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
911
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
912
+ "engines": {
913
+ "node": ">=0.8.0"
914
+ }
915
+ },
916
+ "node_modules/whatwg-url": {
917
+ "version": "5.0.0",
918
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
919
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
920
+ "dependencies": {
921
+ "tr46": "~0.0.3",
922
+ "webidl-conversions": "^3.0.0"
923
+ }
924
+ },
925
+ "node_modules/wrap-ansi": {
926
+ "version": "7.0.0",
927
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
928
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
929
+ "dependencies": {
930
+ "ansi-styles": "^4.0.0",
931
+ "string-width": "^4.1.0",
932
+ "strip-ansi": "^6.0.0"
933
+ },
934
+ "engines": {
935
+ "node": ">=10"
936
+ },
937
+ "funding": {
938
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
939
+ }
940
+ },
941
+ "node_modules/y18n": {
942
+ "version": "5.0.8",
943
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
944
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
945
+ "engines": {
946
+ "node": ">=10"
947
+ }
948
+ },
949
+ "node_modules/yargs": {
950
+ "version": "16.2.0",
951
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
952
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
953
+ "dependencies": {
954
+ "cliui": "^7.0.2",
955
+ "escalade": "^3.1.1",
956
+ "get-caller-file": "^2.0.5",
957
+ "require-directory": "^2.1.1",
958
+ "string-width": "^4.2.0",
959
+ "y18n": "^5.0.5",
960
+ "yargs-parser": "^20.2.2"
961
+ },
962
+ "engines": {
963
+ "node": ">=10"
964
+ }
965
+ },
966
+ "node_modules/yargs-parser": {
967
+ "version": "20.2.9",
968
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
969
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
970
+ "engines": {
971
+ "node": ">=10"
972
+ }
973
+ }
974
+ }
975
+ }
package.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "alcohol",
3
+ "version": "1.0.0",
4
+ "main": "firebase.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "author": "",
9
+ "license": "ISC",
10
+ "dependencies": {
11
+ "firebase": "^9.21.0"
12
+ },
13
+ "description": ""
14
+ }
pyngrok.yml ADDED
@@ -0,0 +1 @@
 
 
1
+ ngrok_path: /tmp/ngrok
requirements.txt ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ aniso8601
2
+ asttokens
3
+ backcall
4
+ bidict
5
+ blinker
6
+ CacheControl
7
+ cachetools
8
+ certifi
9
+ cffi
10
+ charset-normalizer
11
+ click
12
+ colorama
13
+ comm
14
+ cryptography
15
+ debugpy
16
+ decorator
17
+ dnspython
18
+ docopt
19
+ email-validator
20
+ executing
21
+ grpcio
22
+ grpcio-status
23
+ httplib2
24
+ idna
25
+ importlib-metadata
26
+ ipykernel
27
+ ipython
28
+ itsdangerous
29
+ jedi
30
+ Jinja2
31
+ joblib
32
+ jupyter_client
33
+ jupyter_core
34
+ MarkupSafe
35
+ matplotlib-inline
36
+ mongoengine
37
+ msgpack
38
+ nest-asyncio
39
+ numpy
40
+ packaging
41
+ pandas
42
+ parso
43
+ pickleshare
44
+ pipreqs
45
+ platformdirs
46
+ prompt-toolkit
47
+ proto-plus
48
+ protobuf
49
+ psutil
50
+ pure-eval
51
+ pyasn1
52
+ pyasn1-modules
53
+ pycparser
54
+ pydub
55
+ Pygments
56
+ PyJWT
57
+ pymongo
58
+ pyparsing
59
+ python-dateutil
60
+ python-engineio
61
+ python-socketio
62
+ pytz
63
+ pyzmq
64
+ requests
65
+ rsa
66
+ six
67
+ sockets
68
+ stack-data
69
+ threadpoolctl
70
+ tornado
71
+ traitlets
72
+ typing_extensions
73
+ tzdata
74
+ uritemplate
75
+ urllib3
76
+ wcwidth
77
+ Werkzeug
78
+ WTForms
79
+ yarg
80
+ zipp
81
+ gunicorn
82
+ uvicorn
83
+ fastapi
84
+ pydantic
85
+ python-multipart
86
+
87
+
88
+ websocket-client
89
+ requests
90
+ tls-client
91
+ pypasser
92
+ names
93
+ colorama
94
+ curl_cffi
95
+ aiohttp
96
+ flask
97
+ flask_cors
98
+ streamlit
99
+ selenium
100
+ fake-useragent
101
+ twocaptcha
102
+ pydantic
103
+ pymailtm
104
+ Levenshtein
105
+ retrying
106
+ mailgw_temporary_email
107
+ pycryptodome
108
+ random-password-generator
109
+ numpy>=1.22.2 # pinned to avoid a vulnerability
110
+ tornado>=6.3.2 # pinned to avoid a vulnerability
111
+ PyExecJS
112
+ browser_cookie3
113
+ googletrans==4.0.0rc1
114
+
115
+
116
+
117
+
118
+
temp.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ pd = pd.DataFrame({'address':[], 'car_num': [], 'lat': [], 'long': [], 'time': [], 'date': []})
4
+ pd.to_csv('data.csv', index=False)
web.html ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>API Demo</title>
5
+ </head>
6
+ <body>
7
+ <h1>API Demo</h1>
8
+ <label for="day">Select a day:</label>
9
+ <select id="day">
10
+ <option value="monday">Monday</option>
11
+ <option value="tuesday">Tuesday</option>
12
+ <option value="wednesday">Wednesday</option>
13
+ <option value="thursday">Thursday</option>
14
+ <option value="friday">Friday</option>
15
+ <option value="saturday">Saturday</option>
16
+ <option value="sunday">Sunday</option>
17
+ </select>
18
+ <label for="data">Select data:</label>
19
+ <select id="data" name="data"></select>
20
+ <br><br>
21
+ <input type="button" value="Submit" onclick="fetchData()">
22
+
23
+ <!-- <br><br>
24
+ <button onclick="fetchAPI()">Submit</button>
25
+ <br><br> -->
26
+ <div id="result"></div>
27
+ <script>
28
+ function fetchData() {
29
+ const day = document.getElementById("day").value;
30
+ const dataSelect = document.getElementById("data");
31
+ const resultDiv = document.getElementById("result");
32
+
33
+ // Clear previous results
34
+ resultDiv.innerHTML = "";
35
+
36
+ // Make API request
37
+ fetch(`https://api.example.com/data/${day}`)
38
+ .then(response => response.json())
39
+ .then(data => {
40
+ // Populate data dropdown
41
+ dataSelect.innerHTML = "";
42
+ data.forEach(item => {
43
+ const option = document.createElement("option");
44
+ option.value = item.value;
45
+ option.textContent = item.label;
46
+ dataSelect.appendChild(option);
47
+ });
48
+
49
+ // Show fetched data
50
+ resultDiv.innerHTML = `Data for ${day}: ${JSON.stringify(data)}`;
51
+ })
52
+ .catch(error => {
53
+ console.error(error);
54
+ resultDiv.innerHTML = "Error fetching data.";
55
+ });
56
+ }
57
+
58
+ </script>
59
+ </body>
60
+ </html>