Commit c7b2f6be authored by wang's avatar wang

9999

parent ffa62e96
......@@ -33,3 +33,33 @@ r = [
117, 126, 1, 73, 255, 50, 12, 194, 158, 142, 195,
80, 110, 218, 250, 167, 27, 39, 220, 96
]
self.devicedata = {"parameters": {"antialias": True, "maxAnisotropy": 16, "dimensions": ["11", "11024", "3276732767"],
"params": {"alphaBits": 8, "blueBits": 8, "greenBits": 8, "redBits": 8,
"depthBits": 24, "maxCombinedTextureImageUnits": 32,
"maxCubeMapTextureSize": 16384, "maxFragmentUniformVectors": 1024,
"maxRenderbufferSize": 16384, "maxTextureImageUnits": 16,
"maxTextureSize": 16384, "maxVaryingVectors": 30, "maxVertexAttribs": 16,
"maxVertexTextureImageUnits": 16, "maxVertexUniformVectors": 4096,
"renderer": "WebKit WebGL",
"shadingLanguageVersion": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)",
"stencilBits": 0, "vendor": "WebKit",
"version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)"},
"debugInfo": {"vendor": "Google Inc.", "renderer": random.choice(GRAPHICSDRIVER)}},
"shaderPrecisions": ["23127127", "23127127", "23127127", "23127127", "23127127", "23127127", "03130",
"03130", "03130", "03130", "03130", "03130"],
"supportedExtensions": ["ANGLE_instanced_arrays", "EXT_blend_minmax", "EXT_color_buffer_half_float",
"EXT_disjoint_timer_query", "EXT_float_blend", "EXT_frag_depth",
"EXT_shader_texture_lod", "EXT_texture_filter_anisotropic",
"WEBKIT_EXT_texture_filter_anisotropic", "EXT_sRGB",
"KHR_parallel_shader_compile", "OES_element_index_uint",
"OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear",
"OES_texture_half_float", "OES_texture_half_float_linear",
"OES_vertex_array_object", "WEBGL_color_buffer_float",
"WEBGL_compressed_texture_s3tc", "WEBKIT_WEBGL_compressed_texture_s3tc",
"WEBGL_compressed_texture_s3tc_srgb", "WEBGL_debug_renderer_info",
"WEBGL_debug_shaders", "WEBGL_depth_texture", "WEBKIT_WEBGL_depth_texture",
"WEBGL_draw_buffers", "WEBGL_lose_context", "WEBKIT_WEBGL_lose_context"],
"contextProperties": -368668372}
[
{"windowParams":{"featurePolicy":{"features":["geolocation","gamepad","ch-ect","midi","display-capture","usb","local-fonts","picture-in-picture","publickey-credentials-get","otp-credentials","encrypted-media","ch-save-data","ch-ua-full-version-list","ch-ua-wow64","ch-downlink","ch-prefers-color-scheme","sync-xhr","ch-ua-model","serial","camera","ch-prefers-reduced-motion","private-state-token-issuance","bluetooth","identity-credentials-get","ch-ua-full-version","fullscreen","ch-dpr","keyboard-map","ch-ua-platform","gyroscope","window-placement","ch-ua-mobile","ch-ua","magnetometer","accelerometer","private-state-token-redemption","ch-ua-arch","xr-spatial-tracking","idle-detection","ch-ua-platform-version","ch-width","clipboard-read","ch-viewport-width","payment","ch-viewport-height","ch-rtt","autoplay","cross-origin-isolated","hid","ch-ua-bitness","screen-wake-lock","clipboard-write","ch-device-memory","microphone"],"allowedFeatures":["geolocation","gamepad","ch-ect","midi","display-capture","usb","local-fonts","picture-in-picture","publickey-credentials-get","otp-credentials","encrypted-media","ch-save-data","ch-ua-full-version-list","ch-ua-wow64","ch-downlink","ch-prefers-color-scheme","sync-xhr","ch-ua-model","serial","camera","ch-prefers-reduced-motion","private-state-token-issuance","bluetooth","identity-credentials-get","ch-ua-full-version","fullscreen","ch-dpr","keyboard-map","ch-ua-platform","gyroscope","window-placement","ch-ua-mobile","ch-ua","magnetometer","accelerometer","private-state-token-redemption","ch-ua-arch","xr-spatial-tracking","idle-detection","ch-ua-platform-version","ch-width","clipboard-read","ch-viewport-width","payment","ch-viewport-height","ch-rtt","autoplay","cross-origin-isolated","hid","ch-ua-bitness","screen-wake-lock","clipboard-write","ch-device-memory","microphone"],"getAllowlistForFeature":"url"},"innerHeight":582,"innerWidth":1229,"outerHeight":650,"outerWidth":1226,"screenX":1172,"screenY":1,"devicePixelRatio":1.5625},"screenParams":{"height":692,"width":1230,"availHeight":653,"availWidth":1230,"pixelDepth":24,"colorDepth":24},"navigatorParams":{"appName":"Netscape","appVersion":"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","hardwareConcurrency":8,"maxTouchPoints":0,"platform":"Win32","product":"Gecko","productSub":"20030107","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","vendor":"Google Inc.","vendorSub":"","doNotTrack":null},"plugins":{"0":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"PDF Viewer"},"1":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Chrome PDF Viewer"},"2":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Chromium PDF Viewer"},"3":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Microsoft Edge PDF Viewer"},"4":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"WebKit built-in PDF"}},"fontsRes":{"50px sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Andale Mono', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Arial Narrow', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Arial Unicode MS', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Batang', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Batang', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Bell MT', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Bell MT', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Brush Script', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Brush Script', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Brush Script MT', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Calibri', sans-serif":{"0-_{w.":{"width":127,"actualBoundingBoxAscent":-3.5,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":123,"fontBoundingBoxAscent":10.5}},"50px 'Calibri', serif":{"0-_{w.":{"width":127,"actualBoundingBoxAscent":-3.5,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":123,"fontBoundingBoxAscent":10.5}},"50px 'Charter', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Courier', sans-serif":{"0-_{w.":{"width":180,"actualBoundingBoxAscent":-7.234375,"actualBoundingBoxLeft":-6,"actualBoundingBoxRight":169,"fontBoundingBoxAscent":0.765625}},"50px 'Courier New', sans-serif":{"0-_{w.":{"width":180,"actualBoundingBoxAscent":-7.234375,"actualBoundingBoxLeft":-6,"actualBoundingBoxRight":169,"fontBoundingBoxAscent":0.765625}},"50px 'Curlz MT', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Curlz MT', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'DejaVu Sans', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'DejaVu Sans', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'DejaVu Sans Mono', sans-serif":{"0-_{w.":{"width":180,"actualBoundingBoxAscent":0.015625,"actualBoundingBoxLeft":-3,"actualBoundingBoxRight":168,"fontBoundingBoxAscent":8.015625}},"50px 'DejaVu Sans Mono', serif":{"0-_{w.":{"width":180,"actualBoundingBoxAscent":0.015625,"actualBoundingBoxLeft":-3,"actualBoundingBoxRight":168,"fontBoundingBoxAscent":8.015625}},"50px 'DejaVu Serif Condensed', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'DejaVu Serif Condensed', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Droid Sans', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Droid Sans', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Droid Sans Fallback', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Droid Sans Fallback', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Droid Serif', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Droid Serif', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Forte', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Forte', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Futura', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Geneva', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Hei', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Leelawadee', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Leelawadee', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Levenim MT', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Levenim MT', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Liberation Sans', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Liberation Sans', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Liberation Sans Narrow', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Liberation Sans Narrow', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Marlett', sans-serif":{"0-_{w.":{"width":176,"actualBoundingBoxAscent":-10,"actualBoundingBoxLeft":-6,"actualBoundingBoxRight":170,"fontBoundingBoxAscent":0}},"50px 'Marlett', serif":{"0-_{w.":{"width":179,"actualBoundingBoxAscent":-10,"actualBoundingBoxLeft":-6,"actualBoundingBoxRight":174,"fontBoundingBoxAscent":0}},"50px 'Meiryo UI', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Meiryo UI', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Microsoft Uighur', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Microsoft Uighur', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Microsoft YaHei UI', sans-serif":{"0-_{w.":{"width":139,"actualBoundingBoxAscent":-0.109375,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":136,"fontBoundingBoxAscent":13.890625}},"50px 'Microsoft YaHei UI', serif":{"0-_{w.":{"width":139,"actualBoundingBoxAscent":-0.109375,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":136,"fontBoundingBoxAscent":13.890625}},"50px 'MS Mincho', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'MS Mincho', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'MS UI Gothic', sans-serif":{"0-_{w.":{"width":119,"actualBoundingBoxAscent":-3.96875,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":116,"fontBoundingBoxAscent":0.03125}},"50px 'MS UI Gothic', serif":{"0-_{w.":{"width":119,"actualBoundingBoxAscent":-3.96875,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":116,"fontBoundingBoxAscent":0.03125}},"50px 'NanumGothic', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Nirmala UI', sans-serif":{"0-_{w.":{"width":128,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":125,"fontBoundingBoxAscent":15.21875}},"50px 'Nirmala UI', serif":{"0-_{w.":{"width":128,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":125,"fontBoundingBoxAscent":15.21875}},"50px 'Palatino', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Papyrus', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'PMingLiU', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'PMingLiU', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'PT Serif', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'SimHei', sans-serif":{"0-_{w.":{"width":150,"actualBoundingBoxAscent":-3.96875,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":133,"fontBoundingBoxAscent":0.03125}},"50px 'SimHei', serif":{"0-_{w.":{"width":150,"actualBoundingBoxAscent":-3.96875,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":133,"fontBoundingBoxAscent":0.03125}},"50px 'STIXVariants', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'STSong', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Traditional Arabic', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Traditional Arabic', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Urdu Typesetting', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Urdu Typesetting', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}},"50px 'Verdana', sans-serif":{"0-_{w.":{"width":176,"actualBoundingBoxAscent":-1.359375,"actualBoundingBoxLeft":-3,"actualBoundingBoxRight":170,"fontBoundingBoxAscent":10.640625}},"50px 'Wingdings', sans-serif":{"0-_{w.":{"width":313,"actualBoundingBoxAscent":-0.171875,"actualBoundingBoxLeft":-4,"actualBoundingBoxRight":309,"fontBoundingBoxAscent":4.828125}},"50px 'Wingdings 3', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Helkevtrica', sans-serif":{"0-_{w.":{"width":136,"actualBoundingBoxAscent":-2.78125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":130,"fontBoundingBoxAscent":7.21875}},"50px 'Helkevtrica', serif":{"0-_{w.":{"width":137,"actualBoundingBoxAscent":-3.125,"actualBoundingBoxLeft":-2,"actualBoundingBoxRight":132,"fontBoundingBoxAscent":6.875}}},"imgsRes":{"94px sans-serif":{"18,90,1,1":"0,0,0,0","38,77,1,1":"0,166,237,255","48,28,1,1":"227,157,137,255","94,23,1,1":"0,0,0,0","26,46,1,1":"0,210,106,255","47,23,1,1":"0,0,0,0","37,17,1,1":"0,0,0,0","62,28,1,1":"141,101,197,255"}},"glRes":{"3379":16384,"3410":8,"3411":8,"3412":8,"3413":8,"3414":24,"3415":0,"7936":"WebKit","7937":"WebKit WebGL","7938":"WebGL 1.0 (OpenGL ES 2.0 Chromium)","34024":16384,"34047":16,"34076":16384,"34921":16,"34930":16,"35660":16,"35661":32,"35724":"WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)","36347":4096,"36348":30,"36349":1024,"37445":"Google Inc. (Intel)","37446":"ANGLE (Intel, Intel(R) Iris(R) Xe Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)"},"jpg":"data:image/png;base64,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","jpg2":{"data":"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0","url":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAAXNSR0IArs4c6QAAAA9JREFUGFdjZMACGGkgCAABpAAGvg7NcwAAAABJRU5ErkJggg=="},"canPlay":{"audio/aac; codecs=\"flac\"":"","audio/flac":"probably","audio/mpeg; codecs=\"mp3\"":"probably","audio/mpeg; codecs=\"vp9\"":"","audio/webm; codecs=\"vp8\"":"","audio/webz":"","audio/x-m4a; codecs=\"mp3\"":"","audio/x-m4a; codecs=\"vp8, mp4a.40\"":"","audio/x-m4a; codecs=\"vp9, mp4a.40.2\"":"","video/mp4":"maybe","video/mp4; codecs=\"ac-3\"":"","video/mp4; codecs=\"avc1.42011E\"":"","video/mp4; codecs=\"avc1.42E009\"":"maybe","video/mp4; codecs=\"avc1.42E034\"":"probably","video/mp4; codecs=\"avc1.42F01E\"":"probably","video/mp4; codecs=\"avc1.4D001E\"":"probably","video/mp4; codecs=\"avc3.42001E\"":"probably","video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"":"probably","video/mp4; codecs=\"flac\"":"probably","video/mp4; codecs=\"hev1\"":"","video/mp4; codecs=\"hvc1x\"":"","video/mp4; codecs=\"lavc1337\"":"","video/mp4; codecs=\"mp4a.40.02\"":"probably","video/mp4; codecs=\"mp4a.40.5\"":"probably","video/mp4; codecs=\"mp4a.67\"":"probably","video/mp4; codecs=\"opus\"":"probably","video/ogg; codecs=\"flac\"":"probably","video/ogg; codecs=\"opus\"":"probably","video/ogg; codecs=\"vp8\"":"probably","video/webm":"maybe","video/webm; codecs=\"av01.0.04M.08\"":"probably","video/webm; codecs=\"vp09.02.10.08\"":"probably","video/x-dv":"","video/x-m4v; codecs=\"avc1.42AC23\"":"maybe"}},
{"windowParams":{"featurePolicy":{"features":["geolocation","gamepad","ch-ect","midi","display-capture","usb","local-fonts","picture-in-picture","publickey-credentials-get","otp-credentials","encrypted-media","ch-save-data","ch-ua-full-version-list","ch-ua-wow64","ch-downlink","ch-prefers-color-scheme","sync-xhr","ch-ua-model","serial","camera","ch-prefers-reduced-motion","private-state-token-issuance","bluetooth","identity-credentials-get","ch-ua-full-version","fullscreen","ch-dpr","keyboard-map","ch-ua-platform","gyroscope","window-placement","ch-ua-mobile","ch-ua","magnetometer","accelerometer","private-state-token-redemption","ch-ua-arch","xr-spatial-tracking","idle-detection","ch-ua-platform-version","ch-width","clipboard-read","ch-viewport-width","payment","ch-viewport-height","ch-rtt","autoplay","cross-origin-isolated","hid","ch-ua-bitness","screen-wake-lock","clipboard-write","ch-device-memory","microphone"],"allowedFeatures":["geolocation","gamepad","ch-ect","midi","display-capture","usb","local-fonts","picture-in-picture","publickey-credentials-get","otp-credentials","encrypted-media","ch-save-data","ch-ua-full-version-list","ch-ua-wow64","ch-downlink","ch-prefers-color-scheme","sync-xhr","ch-ua-model","serial","camera","ch-prefers-reduced-motion","private-state-token-issuance","bluetooth","identity-credentials-get","ch-ua-full-version","fullscreen","ch-dpr","keyboard-map","ch-ua-platform","gyroscope","window-placement","ch-ua-mobile","ch-ua","magnetometer","accelerometer","private-state-token-redemption","ch-ua-arch","xr-spatial-tracking","idle-detection","ch-ua-platform-version","ch-width","clipboard-read","ch-viewport-width","payment","ch-viewport-height","ch-rtt","autoplay","cross-origin-isolated","hid","ch-ua-bitness","screen-wake-lock","clipboard-write","ch-device-memory","microphone"],"getAllowlistForFeature":"url"},"innerHeight":877,"innerWidth":1728,"outerHeight":994,"outerWidth":1728,"screenX":0,"screenY":38,"devicePixelRatio":2},"screenParams":{"height":1117,"width":1728,"availHeight":997,"availWidth":1728,"pixelDepth":30,"colorDepth":30},"navigatorParams":{"appName":"Netscape","appVersion":"5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36","hardwareConcurrency":10,"maxTouchPoints":0,"platform":"MacIntel","product":"Gecko","productSub":"20030107","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36","vendor":"Google Inc.","vendorSub":"","doNotTrack":null},"plugins":{"0":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"PDF Viewer"},"1":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Chrome PDF Viewer"},"2":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Chromium PDF Viewer"},"3":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"Microsoft Edge PDF Viewer"},"4":{"0":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"1":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"application/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"application/pdf","enabledPlugin":[]},"text/pdf":{"description":"Portable Document Format","suffixes":"pdf","type":"text/pdf","enabledPlugin":[]},"description":"Portable Document Format","filename":"internal-pdf-viewer","length":2,"name":"WebKit built-in PDF"}},"fontsRes":{"50px sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Andale Mono', sans-serif":{"0-_{w.":{"width":180.029296875,"actualBoundingBoxAscent":-3.751953125,"actualBoundingBoxLeft":-3.5888671875,"actualBoundingBoxRight":167.919921875,"fontBoundingBoxAscent":6.140625}},"50px 'Andale Mono', serif":{"0-_{w.":{"width":180.029296875,"actualBoundingBoxAscent":-3.751953125,"actualBoundingBoxLeft":-3.5888671875,"actualBoundingBoxRight":167.919921875,"fontBoundingBoxAscent":6.140625}},"50px 'Arial Narrow', sans-serif":{"0-_{w.":{"width":111.6943359375,"actualBoundingBoxAscent":-2.3798828125,"actualBoundingBoxLeft":-1.6357421875,"actualBoundingBoxRight":108.1787109375,"fontBoundingBoxAscent":8.21875}},"50px 'Arial Narrow', serif":{"0-_{w.":{"width":111.6943359375,"actualBoundingBoxAscent":-2.3798828125,"actualBoundingBoxLeft":-1.6357421875,"actualBoundingBoxRight":108.1787109375,"fontBoundingBoxAscent":8.21875}},"50px 'Arial Unicode MS', sans-serif":{"0-_{w.":{"width":136.1572265625,"actualBoundingBoxAscent":-2.4111328125,"actualBoundingBoxLeft":-2.24609375,"actualBoundingBoxRight":131.7138671875,"fontBoundingBoxAscent":14.1875}},"50px 'Arial Unicode MS', serif":{"0-_{w.":{"width":136.1572265625,"actualBoundingBoxAscent":-2.4111328125,"actualBoundingBoxLeft":-2.24609375,"actualBoundingBoxRight":131.7138671875,"fontBoundingBoxAscent":14.1875}},"50px 'Batang', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Batang', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Bell MT', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Bell MT', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Brush Script', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Brush Script', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Brush Script MT', sans-serif":{"0-_{w.":{"width":133.740234375,"actualBoundingBoxAscent":-2.462890625,"actualBoundingBoxLeft":-0.29296875,"actualBoundingBoxRight":124.4873046875,"fontBoundingBoxAscent":8.578125}},"50px 'Brush Script MT', serif":{"0-_{w.":{"width":133.740234375,"actualBoundingBoxAscent":-2.462890625,"actualBoundingBoxLeft":-0.29296875,"actualBoundingBoxRight":124.4873046875,"fontBoundingBoxAscent":8.578125}},"50px 'Calibri', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Charter', sans-serif":{"0-_{w.":{"width":139.55078125,"actualBoundingBoxAscent":-5,"actualBoundingBoxLeft":-2.05078125,"actualBoundingBoxRight":135.7666015625,"fontBoundingBoxAscent":8.84375}},"50px 'Charter', serif":{"0-_{w.":{"width":139.55078125,"actualBoundingBoxAscent":-5,"actualBoundingBoxLeft":-2.05078125,"actualBoundingBoxRight":135.7666015625,"fontBoundingBoxAscent":8.84375}},"50px 'Courier', sans-serif":{"0-_{w.":{"width":180.029296875,"actualBoundingBoxAscent":-8.015625,"actualBoundingBoxLeft":-5.0048828125,"actualBoundingBoxRight":169.82421875,"fontBoundingBoxAscent":6.34375}},"50px 'Courier New', sans-serif":{"0-_{w.":{"width":180.029296875,"actualBoundingBoxAscent":-6.8623046875,"actualBoundingBoxLeft":-5.5908203125,"actualBoundingBoxRight":168.798828125,"fontBoundingBoxAscent":3.765625}},"50px 'Curlz MT', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Curlz MT', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'DejaVu Sans', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'DejaVu Sans', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'DejaVu Sans Mono', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'DejaVu Serif Condensed', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'DejaVu Serif Condensed', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Droid Sans', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Droid Sans', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Droid Sans Fallback', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Droid Sans Fallback', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Droid Serif', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Droid Serif', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Forte', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Forte', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Futura', sans-serif":{"0-_{w.":{"width":139.35546875,"actualBoundingBoxAscent":3.634765625,"actualBoundingBoxLeft":-2.1240234375,"actualBoundingBoxRight":135.0341796875,"fontBoundingBoxAscent":13.984375}},"50px 'Futura', serif":{"0-_{w.":{"width":139.35546875,"actualBoundingBoxAscent":3.634765625,"actualBoundingBoxLeft":-2.1240234375,"actualBoundingBoxRight":135.0341796875,"fontBoundingBoxAscent":13.984375}},"50px 'Geneva', sans-serif":{"0-_{w.":{"width":162.3046875,"actualBoundingBoxAscent":0.7548828125,"actualBoundingBoxLeft":-2.83203125,"actualBoundingBoxRight":157.9345703125,"fontBoundingBoxAscent":10.59375}},"50px 'Geneva', serif":{"0-_{w.":{"width":162.3046875,"actualBoundingBoxAscent":0.7548828125,"actualBoundingBoxLeft":-2.83203125,"actualBoundingBoxRight":157.9345703125,"fontBoundingBoxAscent":10.59375}},"50px 'Hei', sans-serif":{"0-_{w.":{"width":153.41796875,"actualBoundingBoxAscent":-1.6455078125,"actualBoundingBoxLeft":-2.294921875,"actualBoundingBoxRight":150.3662109375,"fontBoundingBoxAscent":0}},"50px 'Hei', serif":{"0-_{w.":{"width":153.41796875,"actualBoundingBoxAscent":-1.6455078125,"actualBoundingBoxLeft":-2.294921875,"actualBoundingBoxRight":150.3662109375,"fontBoundingBoxAscent":0}},"50px 'Leelawadee', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Leelawadee', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Levenim MT', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Levenim MT', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Liberation Sans', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Liberation Sans', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Liberation Sans Narrow', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Liberation Sans Narrow', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Marlett', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Meiryo UI', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Meiryo UI', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Microsoft Uighur', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Microsoft Uighur', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Microsoft YaHei UI', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'MS Mincho', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'MS Mincho', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'MS UI Gothic', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'NanumGothic', sans-serif":{"0-_{w.":{"width":148.39996337890625,"actualBoundingBoxAscent":-1.0499992370605469,"actualBoundingBoxLeft":-3.049999952316284,"actualBoundingBoxRight":143.64996337890625,"fontBoundingBoxAscent":6}},"50px 'NanumGothic', serif":{"0-_{w.":{"width":148.39996337890625,"actualBoundingBoxAscent":-1.0499992370605469,"actualBoundingBoxLeft":-3.049999952316284,"actualBoundingBoxRight":143.64996337890625,"fontBoundingBoxAscent":6}},"50px 'Nirmala UI', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Palatino', sans-serif":{"0-_{w.":{"width":132.91015625,"actualBoundingBoxAscent":-1.0869140625,"actualBoundingBoxLeft":-1.513671875,"actualBoundingBoxRight":129.5654296875,"fontBoundingBoxAscent":3.609375}},"50px 'Palatino', serif":{"0-_{w.":{"width":132.91015625,"actualBoundingBoxAscent":-1.0869140625,"actualBoundingBoxLeft":-1.513671875,"actualBoundingBoxRight":129.5654296875,"fontBoundingBoxAscent":3.609375}},"50px 'Papyrus', sans-serif":{"0-_{w.":{"width":139.84375,"actualBoundingBoxAscent":-1.43359375,"actualBoundingBoxLeft":-1.66015625,"actualBoundingBoxRight":136.1572265625,"fontBoundingBoxAscent":11.484375}},"50px 'Papyrus', serif":{"0-_{w.":{"width":139.84375,"actualBoundingBoxAscent":-1.43359375,"actualBoundingBoxLeft":-1.66015625,"actualBoundingBoxRight":136.1572265625,"fontBoundingBoxAscent":11.484375}},"50px 'PMingLiU', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'PMingLiU', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'PT Serif', sans-serif":{"0-_{w.":{"width":134.0999755859375,"actualBoundingBoxAscent":-2.8999977111816406,"actualBoundingBoxLeft":-1.75,"actualBoundingBoxRight":130.54998779296875,"fontBoundingBoxAscent":12.5}},"50px 'PT Serif', serif":{"0-_{w.":{"width":134.0999755859375,"actualBoundingBoxAscent":-2.8999977111816406,"actualBoundingBoxLeft":-1.75,"actualBoundingBoxRight":130.54998779296875,"fontBoundingBoxAscent":12.5}},"50px 'SimHei', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'STIXVariants', sans-serif":{"0-_{w.":{"width":140.84999084472656,"actualBoundingBoxAscent":3.8500022888183594,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":137.3000030517578,"fontBoundingBoxAscent":15.5}},"50px 'STIXVariants', serif":{"0-_{w.":{"width":124.79997253417969,"actualBoundingBoxAscent":1.2000007629394531,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":121.9999771118164,"fontBoundingBoxAscent":15.5}},"50px 'STSong', sans-serif":{"0-_{w.":{"width":132.94996643066406,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.649999976158142,"actualBoundingBoxRight":130.0999755859375,"fontBoundingBoxAscent":0}},"50px 'STSong', serif":{"0-_{w.":{"width":132.94996643066406,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.649999976158142,"actualBoundingBoxRight":130.0999755859375,"fontBoundingBoxAscent":0}},"50px 'Traditional Arabic', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Traditional Arabic', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Urdu Typesetting', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Urdu Typesetting', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Verdana', sans-serif":{"0-_{w.":{"width":175.4150390625,"actualBoundingBoxAscent":-1.37109375,"actualBoundingBoxLeft":-3.3447265625,"actualBoundingBoxRight":169.23828125,"fontBoundingBoxAscent":10.640625}},"50px 'Wingdings', sans-serif":{"0-_{w.":{"width":311.5966796875,"actualBoundingBoxAscent":-0.5966796875,"actualBoundingBoxLeft":-4.2236328125,"actualBoundingBoxRight":307.3974609375,"fontBoundingBoxAscent":4.828125}},"50px 'Wingdings 3', sans-serif":{"0-_{w.":{"width":244.5068359375,"actualBoundingBoxAscent":-1.4033203125,"actualBoundingBoxLeft":-4.8095703125,"actualBoundingBoxRight":240.3076171875,"fontBoundingBoxAscent":5.65625}},"50px 'Wingdings 3', serif":{"0-_{w.":{"width":244.5068359375,"actualBoundingBoxAscent":-1.4033203125,"actualBoundingBoxLeft":-4.8095703125,"actualBoundingBoxRight":240.3076171875,"fontBoundingBoxAscent":5.65625}},"50px 'Helkevtrica', sans-serif":{"0-_{w.":{"width":152.84999084472656,"actualBoundingBoxAscent":-1.6499977111816406,"actualBoundingBoxLeft":-2.5,"actualBoundingBoxRight":149.3000030517578,"fontBoundingBoxAscent":10}},"50px 'Helkevtrica', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Calibri', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'DejaVu Sans Mono', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Marlett', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Microsoft YaHei UI', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'MS UI Gothic', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'Nirmala UI', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}},"50px 'SimHei', serif":{"0-_{w.":{"width":132.39996337890625,"actualBoundingBoxAscent":-4.299999237060547,"actualBoundingBoxLeft":-1.600000023841858,"actualBoundingBoxRight":129.59996032714844,"fontBoundingBoxAscent":10}}},"imgsRes":{"94px sans-serif":{"18,90,1,1":"214,122,6,255","38,77,1,1":"255,255,255,255","48,28,1,1":"0,0,0,0","94,23,1,1":"0,0,0,0","26,46,1,1":"253,243,245,255","47,23,1,1":"0,0,0,0","37,17,1,1":"0,0,0,255","62,28,1,1":"204,131,217,255"}},"glRes":{"3379":16384,"3410":8,"3411":8,"3412":8,"3413":8,"3414":24,"3415":0,"7936":"WebKit","7937":"WebKit WebGL","7938":"WebGL 1.0 (OpenGL ES 2.0 Chromium)","34024":16384,"34047":16,"34076":16384,"34921":16,"34930":16,"35660":16,"35661":32,"35724":"WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)","36347":1024,"36348":31,"36349":1024,"37445":"Google Inc. (Apple)","37446":"ANGLE (Apple, Apple M1 Max, OpenGL 4.1)"},"jpg":"data:image/png;base64,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","jpg2":{"data":"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0","url":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAAXNSR0IArs4c6QAAAA9JREFUGFdjZMACGGkgCAABpAAGvg7NcwAAAABJRU5ErkJggg=="},"canPlay":{"audio/aac; codecs=\"flac\"":"","audio/flac":"probably","audio/mpeg; codecs=\"mp3\"":"probably","audio/mpeg; codecs=\"vp9\"":"","audio/webm; codecs=\"vp8\"":"","audio/webz":"","audio/x-m4a; codecs=\"mp3\"":"","audio/x-m4a; codecs=\"vp8, mp4a.40\"":"","audio/x-m4a; codecs=\"vp9, mp4a.40.2\"":"","video/mp4":"maybe","video/mp4; codecs=\"ac-3\"":"","video/mp4; codecs=\"avc1.42011E\"":"","video/mp4; codecs=\"avc1.42E009\"":"maybe","video/mp4; codecs=\"avc1.42E034\"":"probably","video/mp4; codecs=\"avc1.42F01E\"":"probably","video/mp4; codecs=\"avc1.4D001E\"":"probably","video/mp4; codecs=\"avc3.42001E\"":"probably","video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"":"probably","video/mp4; codecs=\"flac\"":"probably","video/mp4; codecs=\"hev1\"":"","video/mp4; codecs=\"hvc1x\"":"","video/mp4; codecs=\"lavc1337\"":"","video/mp4; codecs=\"mp4a.40.02\"":"probably","video/mp4; codecs=\"mp4a.40.5\"":"probably","video/mp4; codecs=\"mp4a.67\"":"probably","video/mp4; codecs=\"opus\"":"probably","video/ogg; codecs=\"flac\"":"probably","video/ogg; codecs=\"opus\"":"probably","video/ogg; codecs=\"vp8\"":"probably","video/webm":"maybe","video/webm; codecs=\"av01.0.04M.08\"":"probably","video/webm; codecs=\"vp09.02.10.08\"":"probably","video/x-dv":"","video/x-m4v; codecs=\"avc1.42AC23\"":"maybe"}}
]
let fonts = [{"font":"50px sans-serif","text":"0-_{w."},{"font":"50px serif","text":"0-_{w."},{"font":"50px 'Andale Mono', sans-serif","text":"0-_{w."},{"font":"50px 'Arial Narrow', sans-serif","text":"0-_{w."},{"font":"50px 'Arial Unicode MS', sans-serif","text":"0-_{w."},{"font":"50px 'Batang', sans-serif","text":"0-_{w."},{"font":"50px 'Batang', serif","text":"0-_{w."},{"font":"50px 'Bell MT', sans-serif","text":"0-_{w."},{"font":"50px 'Bell MT', serif","text":"0-_{w."},{"font":"50px 'Brush Script', sans-serif","text":"0-_{w."},{"font":"50px 'Brush Script', serif","text":"0-_{w."},{"font":"50px 'Brush Script MT', sans-serif","text":"0-_{w."},{"font":"50px 'Calibri', sans-serif","text":"0-_{w."},{"font":"50px 'Calibri', serif","text":"0-_{w."},{"font":"50px 'Charter', sans-serif","text":"0-_{w."},{"font":"50px 'Courier', sans-serif","text":"0-_{w."},{"font":"50px 'Courier New', sans-serif","text":"0-_{w."},{"font":"50px 'Curlz MT', sans-serif","text":"0-_{w."},{"font":"50px 'Curlz MT', serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans', serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans Mono', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans Mono', serif","text":"0-_{w."},{"font":"50px 'DejaVu Serif Condensed', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Serif Condensed', serif","text":"0-_{w."},{"font":"50px 'Droid Sans', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Sans', serif","text":"0-_{w."},{"font":"50px 'Droid Sans Fallback', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Sans Fallback', serif","text":"0-_{w."},{"font":"50px 'Droid Serif', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Serif', serif","text":"0-_{w."},{"font":"50px 'Forte', sans-serif","text":"0-_{w."},{"font":"50px 'Forte', serif","text":"0-_{w."},{"font":"50px 'Futura', sans-serif","text":"0-_{w."},{"font":"50px 'Geneva', sans-serif","text":"0-_{w."},{"font":"50px 'Hei', sans-serif","text":"0-_{w."},{"font":"50px 'Leelawadee', sans-serif","text":"0-_{w."},{"font":"50px 'Leelawadee', serif","text":"0-_{w."},{"font":"50px 'Levenim MT', sans-serif","text":"0-_{w."},{"font":"50px 'Levenim MT', serif","text":"0-_{w."},{"font":"50px 'Liberation Sans', sans-serif","text":"0-_{w."},{"font":"50px 'Liberation Sans', serif","text":"0-_{w."},{"font":"50px 'Liberation Sans Narrow', sans-serif","text":"0-_{w."},{"font":"50px 'Liberation Sans Narrow', serif","text":"0-_{w."},{"font":"50px 'Marlett', sans-serif","text":"0-_{w."},{"font":"50px 'Marlett', serif","text":"0-_{w."},{"font":"50px 'Meiryo UI', sans-serif","text":"0-_{w."},{"font":"50px 'Meiryo UI', serif","text":"0-_{w."},{"font":"50px 'Microsoft Uighur', sans-serif","text":"0-_{w."},{"font":"50px 'Microsoft Uighur', serif","text":"0-_{w."},{"font":"50px 'Microsoft YaHei UI', sans-serif","text":"0-_{w."},{"font":"50px 'Microsoft YaHei UI', serif","text":"0-_{w."},{"font":"50px 'MS Mincho', sans-serif","text":"0-_{w."},{"font":"50px 'MS Mincho', serif","text":"0-_{w."},{"font":"50px 'MS UI Gothic', sans-serif","text":"0-_{w."},{"font":"50px 'MS UI Gothic', serif","text":"0-_{w."},{"font":"50px 'NanumGothic', sans-serif","text":"0-_{w."},{"font":"50px 'Nirmala UI', sans-serif","text":"0-_{w."},{"font":"50px 'Nirmala UI', serif","text":"0-_{w."},{"font":"50px 'Palatino', sans-serif","text":"0-_{w."},{"font":"50px 'Papyrus', sans-serif","text":"0-_{w."},{"font":"50px 'PMingLiU', sans-serif","text":"0-_{w."},{"font":"50px 'PMingLiU', serif","text":"0-_{w."},{"font":"50px 'PT Serif', sans-serif","text":"0-_{w."},{"font":"50px 'SimHei', sans-serif","text":"0-_{w."},{"font":"50px 'SimHei', serif","text":"0-_{w."},{"font":"50px 'STIXVariants', sans-serif","text":"0-_{w."},{"font":"50px 'STSong', sans-serif","text":"0-_{w."},{"font":"50px 'Traditional Arabic', sans-serif","text":"0-_{w."},{"font":"50px 'Traditional Arabic', serif","text":"0-_{w."},{"font":"50px 'Urdu Typesetting', sans-serif","text":"0-_{w."},{"font":"50px 'Urdu Typesetting', serif","text":"0-_{w."},{"font":"50px 'Verdana', sans-serif","text":"0-_{w."},{"font":"50px 'Wingdings', sans-serif","text":"0-_{w."},{"font":"50px 'Wingdings 3', sans-serif","text":"0-_{w."},{"font":"50px 'Helkevtrica', sans-serif","text":"0-_{w."},{"font":"50px 'Helkevtrica', serif","text":"0-_{w."}]
let fontsRes = {}
console.log(fonts.length)
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d')
ctx.textBaseline = 'top';
for (let i = 0; i < fonts.length; i++) {
ctx.font = fonts[i].font;
let met = ctx.measureText(fonts[i].text)
if (fontsRes[fonts[i]]) {
fontsRes[fonts[i].font][fonts[i].text] = {
width: met.width,
actualBoundingBoxAscent: met.actualBoundingBoxAscent,
actualBoundingBoxLeft: met.actualBoundingBoxLeft,
actualBoundingBoxRight: met.actualBoundingBoxRight,
fontBoundingBoxAscent: met.fontBoundingBoxAscent,
}
}
}
console.log(JSON.stringify(fontsRes))
let imgsRes = {};
let sss = [{
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["😎", -1, 96],
"imageData": [18, 90, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["6️⃣", -1, 96],
"imageData": [38, 77, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🍼", -1, 96],
"imageData": [48, 28, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [94, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["📊", -1, 96],
"imageData": [26, 46, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [47, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["㊗️", -1, 96],
"imageData": [37, 17, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["⛎", -1, 96],
"imageData": [62, 28, 1, 1]
}
]
let imgRes = {};
for (let i = 0; i < sss.length; i++) {
var a = document.createElement('canvas')
a.width = 96
a.height = 96
let ctx = a.getContext('2d');
let s = sss[i];
ctx.font = s.font;
ctx.fillStyle = s.fillStyle;
ctx.fillText(...s.fillText)
let data = ctx.getImageData(...s.imageData);
if (!imgRes[s.font]){
imgRes[s.font] = {}
}
imgRes[s.font][s.imageData+''] = data.data+''
}
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/collect.js')
def js():
return render_template('collect.js')
@app.route('/collect', methods=["POST"])
def collect():
print(request.data.decode())
return 'ok'
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True, port=11222)
\ No newline at end of file
......@@ -40,3 +40,15 @@ VM192:39 (f) [FeaturePolicy allowedFeatures func] [] ===> (52) ['geolocation'
VM192:39 (f) [FeaturePolicy getAllowlistForFeature func] ['display-capture'] ===> ['http://localhost:63342']
```
```angular2html
innerHeight ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 innerWidth ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 outerHeight ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 outerWidth ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 screenX ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 screenY ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 devicePixelRatio ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
src_out.js:2632 isSecureContext ininin Window {window: Window, self: Window, document: document, name: '', location: Location, …} true
```
\ No newline at end of file
if (typeof OffscreenCanvas !== 'function') {
postMessage(false);
window.onssage = function (a){
console.log(a)
console.log(JSON.stringify(a))
}
if (typeof window.OffscreenCanvas !== 'function') {
window.onssage(false);
}
getWebGL = function (c) {
let graphicsLib = null;
try {
graphicsLib = c.getContext('webgl') || c.getContext('experimental-webgl');
} catch (ignored) {
}
return graphicsLib;
}
var canvas = new OffscreenCanvas(0, 0);
var gl = getWebGL(canvas);
let canvas = new window.OffscreenCanvas(0, 0);
let gl = getWebGL(canvas);
if (!gl) {
postMessage(false);
window.onssage(false);
}
onmessage = function (e) {
var segment = e.data.segment;
let segment = e.data.segment;
try {
if (segment === 'a' || segment === 'b') {
var _e$data = e.data, parameters = _e$data.parameters, methods = _e$data.methods;
var result = [];
for (var i = 0; i < parameters.length; i++) {
let _e$data = e.data, parameters = _e$data.parameters, methods = _e$data.methods;
let result = [];
for (let i = 0; i < parameters.length; i++) {
result.push(gl[methods[0]](parameters[i]));
}
postMessage({segment: segment, result: result});
return {segment: segment, result: result};
} else if (segment === 'c' || segment === 'd') {
var _e$data2 = e.data, _parameters = _e$data2.parameters, extensions = _e$data2.extensions,
let _e$data2 = e.data, _parameters = _e$data2.parameters, extensions = _e$data2.extensions,
_methods = _e$data2.methods;
var _result = [];
var ext = false;
for (var _i = 0; _i < extensions.length; _i++) {
let _result = [];
let ext = false;
for (let _i = 0; _i < extensions.length; _i++) {
ext = ext || gl[_methods[0]](extensions[_i]);
}
if (ext) {
for (var _i2 = 0; _i2 < _parameters.length; _i2++) {
for (let _i2 = 0; _i2 < _parameters.length; _i2++) {
_result.push(gl[_methods[1]](ext[_parameters[_i2]]));
}
} else {
_result = -1;
}
postMessage({segment: segment, result: _result});
return {segment: segment, result: _result};
} else if (segment === 'e') {
var _e$data3 = e.data, _methods2 = _e$data3.methods, properties = _e$data3.properties;
var _result2 = function (x) {
let _e$data3 = e.data, _methods2 = _e$data3.methods, properties = _e$data3.properties;
let _result2 = function (x) {
return x ? x[properties[0]] : false;
}(gl[_methods2[0]]());
postMessage({segment: segment, result: _result2});
return {segment: segment, result: _result2};
} else if (segment === 'f') {
var _e$data4 = e.data, _methods3 = _e$data4.methods, shaderParams = _e$data4.shaderParams,
let _e$data4 = e.data, _methods3 = _e$data4.methods, shaderParams = _e$data4.shaderParams,
shaderFloatPrecision = _e$data4.shaderFloatPrecision, shaderIntPrecision = _e$data4.shaderIntPrecision,
shaderProperties = _e$data4.shaderProperties;
var _result3 = [];
let _result3 = [];
if (typeof gl[_methods3[0]] === 'function') {
for (var _i3 = 0; _i3 < shaderParams.length; _i3++) {
for (var j = 0; j < shaderFloatPrecision.length; j++) {
var x = gl[_methods3[0]](shaderParams[_i3], shaderFloatPrecision[j]);
for (let _i3 = 0; _i3 < shaderParams.length; _i3++) {
for (let j = 0; j < shaderFloatPrecision.length; j++) {
let x = gl[_methods3[0]](shaderParams[_i3], shaderFloatPrecision[j]);
x = x == null ? '' : [x[shaderProperties[0]], x[shaderProperties[1]], x[shaderProperties[2]]].join('');
_result3.push(x);
}
}
for (var _i4 = 0; _i4 < shaderParams.length; _i4++) {
for (var _j = 0; _j < shaderIntPrecision.length; _j++) {
var _x = gl[_methods3[0]](shaderParams[_i4], shaderIntPrecision[_j]);
for (let _i4 = 0; _i4 < shaderParams.length; _i4++) {
for (let _j = 0; _j < shaderIntPrecision.length; _j++) {
let _x = gl[_methods3[0]](shaderParams[_i4], shaderIntPrecision[_j]);
_x = _x == null ? '' : [_x[shaderProperties[0]], _x[shaderProperties[1]], _x[shaderProperties[2]]].join('');
_result3.push(_x);
}
......@@ -61,28 +73,139 @@ onmessage = function (e) {
} else {
_result3 = void 0;
}
postMessage({segment: segment, result: _result3});
return {segment: segment, result: _result3};
} else if (segment === 'g') {
var _methods4 = e.data.methods;
var _result4 = gl[_methods4[0]]() || [];
postMessage({segment: segment, result: _result4});
let _methods4 = e.data.methods;
let _result4 = gl[_methods4[0]]() || [];
return {segment: segment, result: _result4};
} else if (segment === 'h') {
var _result5 = [];
for (var prop in gl) {
let _result5 = [];
for (let prop in gl) {
_result5.push(prop);
}
postMessage({segment: segment, result: _result5});
return {segment: segment, result: _result5};
}
} catch (error) {
postMessage(false);
return false;
}
};
function getWebGL(c) {
var graphicsLib = null;
try {
graphicsLib = c.getContext('webgl') || c.getContext('experimental-webgl');
} catch (ignored) {
}
return graphicsLib;
let gl1 = onmessage({
data:{
"segment": "a",
"parameters": [
33902,
33901,
3386
],
"methods": [
"getParameter"
]
}
})
let gl2 = onmessage({data:{
"segment": "b",
"parameters": [
3413,
3412,
3411,
3410,
3414,
35661,
34076,
36349,
34024,
34930,
3379,
36348,
34921,
35660,
36347,
7937,
35724,
3415,
7936,
7938
],
"methods": [
"getParameter"
]
}})
let gl3 = onmessage({data:{
"segment": "c",
"parameters": [
"UNMASKED_VENDOR_WEBGL",
"UNMASKED_RENDERER_WEBGL"
],
"extensions": [
"WEBGL_debug_renderer_info"
],
"methods": [
"getExtension",
"getParameter"
]
}})
let gl4 = onmessage({data:{
"segment": "d",
"parameters": [
"MAX_TEXTURE_MAX_ANISOTROPY_EXT"
],
"extensions": [
"EXT_texture_filter_anisotropic",
"WEBKIT_EXT_texture_filter_anisotropic",
"MOZ_EXT_texture_filter_anisotropic"
],
"methods": [
"getExtension",
"getParameter"
]
}})
let gl5 = onmessage({data:{
"segment": "e",
"methods": [
"getContextAttributes"
],
"properties": [
"antialias"
]
}})
let gl6 = onmessage({data:{
"segment": "f",
"methods": [
"getShaderPrecisionFormat"
],
"shaderParams": [
35633,
35632
],
"shaderFloatPrecision": [
36338,
36337,
36336
],
"shaderIntPrecision": [
36341,
36340,
36339
],
"shaderProperties": [
"precision",
"rangeMin",
"rangeMax"
]
}})
let gl7 = onmessage({data:{
"segment": "g",
"methods": [
"getSupportedExtensions"
]
}})
let gl8 = onmessage({data:{
"segment": "h"
}})
let glRes = [gl1,gl2,gl3,gl4,gl5,gl6,gl7,gl8]
\ No newline at end of file
let fonts = [
{"font":"50px sans-serif","text":"0-_{w."},{"font":"50px serif","text":"0-_{w."},{"font":"50px 'Andale Mono', sans-serif","text":"0-_{w."},{"font":"50px 'Andale Mono', serif","text":"0-_{w."},{"font":"50px 'Arial Narrow', sans-serif","text":"0-_{w."},{"font":"50px 'Arial Narrow', serif","text":"0-_{w."},{"font":"50px 'Arial Unicode MS', sans-serif","text":"0-_{w."},{"font":"50px 'Arial Unicode MS', serif","text":"0-_{w."},{"font":"50px 'Batang', sans-serif","text":"0-_{w."},{"font":"50px 'Batang', serif","text":"0-_{w."},{"font":"50px 'Bell MT', sans-serif","text":"0-_{w."},{"font":"50px 'Bell MT', serif","text":"0-_{w."},{"font":"50px 'Brush Script', sans-serif","text":"0-_{w."},{"font":"50px 'Brush Script', serif","text":"0-_{w."},{"font":"50px 'Brush Script MT', sans-serif","text":"0-_{w."},{"font":"50px 'Brush Script MT', serif","text":"0-_{w."},{"font":"50px 'Calibri', sans-serif","text":"0-_{w."},{"font":"50px 'Charter', sans-serif","text":"0-_{w."},{"font":"50px 'Charter', serif","text":"0-_{w."},{"font":"50px 'Courier', sans-serif","text":"0-_{w."},{"font":"50px 'Courier New', sans-serif","text":"0-_{w."},{"font":"50px 'Curlz MT', sans-serif","text":"0-_{w."},{"font":"50px 'Curlz MT', serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans', serif","text":"0-_{w."},{"font":"50px 'DejaVu Sans Mono', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Serif Condensed', sans-serif","text":"0-_{w."},{"font":"50px 'DejaVu Serif Condensed', serif","text":"0-_{w."},{"font":"50px 'Droid Sans', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Sans', serif","text":"0-_{w."},{"font":"50px 'Droid Sans Fallback', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Sans Fallback', serif","text":"0-_{w."},{"font":"50px 'Droid Serif', sans-serif","text":"0-_{w."},{"font":"50px 'Droid Serif', serif","text":"0-_{w."},{"font":"50px 'Forte', sans-serif","text":"0-_{w."},{"font":"50px 'Forte', serif","text":"0-_{w."},{"font":"50px 'Futura', sans-serif","text":"0-_{w."},{"font":"50px 'Futura', serif","text":"0-_{w."},{"font":"50px 'Geneva', sans-serif","text":"0-_{w."},{"font":"50px 'Geneva', serif","text":"0-_{w."},{"font":"50px 'Hei', sans-serif","text":"0-_{w."},{"font":"50px 'Hei', serif","text":"0-_{w."},{"font":"50px 'Leelawadee', sans-serif","text":"0-_{w."},{"font":"50px 'Leelawadee', serif","text":"0-_{w."},{"font":"50px 'Levenim MT', sans-serif","text":"0-_{w."},{"font":"50px 'Levenim MT', serif","text":"0-_{w."},{"font":"50px 'Liberation Sans', sans-serif","text":"0-_{w."},{"font":"50px 'Liberation Sans', serif","text":"0-_{w."},{"font":"50px 'Liberation Sans Narrow', sans-serif","text":"0-_{w."},{"font":"50px 'Liberation Sans Narrow', serif","text":"0-_{w."},{"font":"50px 'Marlett', sans-serif","text":"0-_{w."},{"font":"50px 'Meiryo UI', sans-serif","text":"0-_{w."},{"font":"50px 'Meiryo UI', serif","text":"0-_{w."},{"font":"50px 'Microsoft Uighur', sans-serif","text":"0-_{w."},{"font":"50px 'Microsoft Uighur', serif","text":"0-_{w."},{"font":"50px 'Microsoft YaHei UI', sans-serif","text":"0-_{w."},{"font":"50px 'MS Mincho', sans-serif","text":"0-_{w."},{"font":"50px 'MS Mincho', serif","text":"0-_{w."},{"font":"50px 'MS UI Gothic', sans-serif","text":"0-_{w."},{"font":"50px 'NanumGothic', sans-serif","text":"0-_{w."},{"font":"50px 'NanumGothic', serif","text":"0-_{w."},{"font":"50px 'Nirmala UI', sans-serif","text":"0-_{w."},{"font":"50px 'Palatino', sans-serif","text":"0-_{w."},{"font":"50px 'Palatino', serif","text":"0-_{w."},{"font":"50px 'Papyrus', sans-serif","text":"0-_{w."},{"font":"50px 'Papyrus', serif","text":"0-_{w."},{"font":"50px 'PMingLiU', sans-serif","text":"0-_{w."},{"font":"50px 'PMingLiU', serif","text":"0-_{w."},{"font":"50px 'PT Serif', sans-serif","text":"0-_{w."},{"font":"50px 'PT Serif', serif","text":"0-_{w."},{"font":"50px 'SimHei', sans-serif","text":"0-_{w."},{"font":"50px 'STIXVariants', sans-serif","text":"0-_{w."},{"font":"50px 'STIXVariants', serif","text":"0-_{w."},{"font":"50px 'STSong', sans-serif","text":"0-_{w."},{"font":"50px 'STSong', serif","text":"0-_{w."},{"font":"50px 'Traditional Arabic', sans-serif","text":"0-_{w."},{"font":"50px 'Traditional Arabic', serif","text":"0-_{w."},{"font":"50px 'Urdu Typesetting', sans-serif","text":"0-_{w."},{"font":"50px 'Urdu Typesetting', serif","text":"0-_{w."},{"font":"50px 'Verdana', sans-serif","text":"0-_{w."},{"font":"50px 'Wingdings', sans-serif","text":"0-_{w."},{"font":"50px 'Wingdings 3', sans-serif","text":"0-_{w."},{"font":"50px 'Wingdings 3', serif","text":"0-_{w."},{"font":"50px 'Helkevtrica', sans-serif","text":"0-_{w."},{"font":"50px 'Helkevtrica', serif","text":"0-_{w."},
{"font": "50px sans-serif", "text": "0-_{w."}, {
"font": "50px serif",
"text": "0-_{w."
}, {"font": "50px 'Andale Mono', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Arial Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Arial Unicode MS', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Batang', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Batang', serif", "text": "0-_{w."}, {
"font": "50px 'Bell MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Bell MT', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Brush Script', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Calibri', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Calibri', serif",
"text": "0-_{w."
}, {"font": "50px 'Charter', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Courier', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Courier New', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Curlz MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Curlz MT', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans Mono', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans Mono', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Serif Condensed', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Serif Condensed', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans Fallback', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans Fallback', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Serif', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Serif', serif", "text": "0-_{w."}, {
"font": "50px 'Forte', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Forte', serif", "text": "0-_{w."}, {
"font": "50px 'Futura', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Geneva', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Hei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Leelawadee', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Leelawadee', serif",
"text": "0-_{w."
}, {"font": "50px 'Levenim MT', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Levenim MT', serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Liberation Sans', serif",
"text": "0-_{w."
}, {
"font": "50px 'Liberation Sans Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans Narrow', serif", "text": "0-_{w."}, {
"font": "50px 'Marlett', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Marlett', serif", "text": "0-_{w."}, {
"font": "50px 'Meiryo UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Meiryo UI', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft Uighur', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft Uighur', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft YaHei UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft YaHei UI', serif", "text": "0-_{w."}, {
"font": "50px 'MS Mincho', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS Mincho', serif", "text": "0-_{w."}, {
"font": "50px 'MS UI Gothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS UI Gothic', serif", "text": "0-_{w."}, {
"font": "50px 'NanumGothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Nirmala UI', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Nirmala UI', serif",
"text": "0-_{w."
}, {"font": "50px 'Palatino', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Papyrus', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'PMingLiU', sans-serif", "text": "0-_{w."}, {
"font": "50px 'PMingLiU', serif",
"text": "0-_{w."
}, {"font": "50px 'PT Serif', sans-serif", "text": "0-_{w."}, {
"font": "50px 'SimHei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'SimHei', serif", "text": "0-_{w."}, {
"font": "50px 'STIXVariants', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'STSong', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Traditional Arabic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Traditional Arabic', serif", "text": "0-_{w."}, {
"font": "50px 'Urdu Typesetting', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Urdu Typesetting', serif", "text": "0-_{w."}, {
"font": "50px 'Verdana', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Wingdings', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Wingdings 3', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Helkevtrica', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Helkevtrica', serif",
"text": "0-_{w."
}]
let fontsRes = {}
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d')
ctx.textBaseline = 'top';
for (let i = 0; i < fonts.length; i++) {
ctx.font = fonts[i].font;
let met = ctx.measureText(fonts[i].text)
if (!fontsRes[fonts[i]]) {
fontsRes[fonts[i].font] = {}
}
fontsRes[fonts[i].font][fonts[i].text] = {
width: met.width,
actualBoundingBoxAscent: met.actualBoundingBoxAscent,
actualBoundingBoxLeft: met.actualBoundingBoxLeft,
actualBoundingBoxRight: met.actualBoundingBoxRight,
fontBoundingBoxAscent: met.fontBoundingBoxAscent,
}
}
let imgsRes = {};
let sss = [
{
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["😎", -1, 96],
"imageData": [18, 90, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["6️⃣", -1, 96],
"imageData": [38, 77, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🍼", -1, 96],
"imageData": [48, 28, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [94, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["📊", -1, 96],
"imageData": [26, 46, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [47, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["㊗️", -1, 96],
"imageData": [37, 17, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["⛎", -1, 96],
"imageData": [62, 28, 1, 1]
}
]
let imgRes = {};
for (let i = 0; i < sss.length; i++) {
var a = document.createElement('canvas')
a.width = 96
a.height = 96
let ctx = a.getContext('2d');
let s = sss[i];
ctx.font = s.font;
ctx.fillStyle = s.fillStyle;
ctx.fillText(...s.fillText)
let data = ctx.getImageData(...s.imageData);
if (!imgRes[s.font]) {
imgRes[s.font] = {}
}
imgRes[s.font][s.imageData + ''] = data.data + ''
}
let glArgs = {
3413: 8,
3412: 8,
3411: 8,
3410: 8,
3414: 24,
35661: 32,
34076: 16384,
36349: 1024,
34024: 16384,
34930: 16,
3379: 16384,
36348: 31,
34921: 16,
35660: 16,
36347: 1024,
7937: 'WebKit WebGL',
35724: 'WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)',
3415: 0,
7936: 'WebKit',
7938: 'WebGL 1.0 (OpenGL ES 2.0 Chromium)',
37445: 'Google Inc.',
37446: 'ANGLE (Apple, Apple M1 Max, OpenGL 4.1)',
34047: 16
};
var glARgs = Object.keys(glArgs);
var canvas = document.createElement('canvas')
var gl = canvas.getContext('webgl')
gl.getExtension('WEBGL_debug_renderer_info')
gl.getExtension('EXT_texture_filter_anisotropic')
for (let i = 0; i < glARgs.length; i++) {
console.log(glARgs[i])
glArgs[glARgs[i]] = gl.getParameter(parseInt(glARgs[i]))
}
console.log(glArgs)
let navigatorParams = {
appName: navigator.appName,
appVersion: navigator.appVersion,
hardwareConcurrency: navigator.hardwareConcurrency,
maxTouchPoints: navigator.maxTouchPoints,
platform: navigator.platform,
product: navigator.product,
productSub: navigator.productSub,
userAgent: navigator.userAgent,
vendor: navigator.vendor,
vendorSub: navigator.vendorSub,
doNotTrack: navigator.doNotTrack,
}
let screenParams = {
height: screen.height,
width: screen.width,
availHeight: screen.availHeight,
availWidth: screen.availWidth,
pixelDepth: screen.pixelDepth,
colorDepth: screen.colorDepth,
}
let windowParams = {
featurePolicy: {
features: document.featurePolicy.features(),
allowedFeatures: document.featurePolicy.allowedFeatures(),
getAllowlistForFeature: 'url',
},
innerHeight: window.innerHeight,
innerWidth: window.innerWidth,
outerHeight: window.outerHeight,
outerWidth: window.outerWidth,
screenX: window.screenX,
screenY: window.screenY,
devicePixelRatio: window.devicePixelRatio,
}
let plugins = navigator.plugins;
let plgs = {}
function getObj(r) {
return {
description: r.description,
suffixes: r.suffixes,
type: r.type,
}
}
for (let i = 0; i < plugins.length; i++) {
let p = plugins.item(i);
let pi = {}
let keys = ['0','1', 'application/pdf', 'text/pdf', 'description', 'filename', 'length', 'name'];
for (const key of keys) {
let r = p[key];
if (typeof r === 'object'){
r = getObj(r)
r.enabledPlugin = [];
}
pi[key] = r
}
plgs[i] = pi
}
function getDataUrl() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
ctx.font = '18pt Sans';
ctx.textBaseline = 'top'
ctx.fillText('Hel$&?6%){mZ+#@', 2, 2)
return canvas.toDataURL("image/png");
}
function getDataUrl2() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
canvas.width = 5;
canvas.height = 5;
ctx.font = '20px Arial';
ctx.shadowOffsetX = 2;
ctx.shadowOffsetY = 2;
ctx.shadowBlur = 2;
ctx.textBaseline = 'top'
ctx.fillStyle = 'rgba(22, 22, 22, 0.08636862211354912)'
ctx.fillText('Hel$&?6%){mZ+#@👺', 105, 105)
return {
data: ctx.getImageData(0, 0, 5, 5).data+'',
url:canvas.toDataURL()
}
}
function canplay() {
let videos = {"audio/aac; codecs=\"flac\"": "", "audio/flac": "probably", "audio/mpeg; codecs=\"mp3\"": "probably", "audio/mpeg; codecs=\"vp9\"": "", "audio/webm; codecs=\"vp8\"": "", "audio/webz": "", "audio/x-m4a; codecs=\"mp3\"": "", "audio/x-m4a; codecs=\"vp8, mp4a.40\"": "", "audio/x-m4a; codecs=\"vp9, mp4a.40.2\"": "", "video/mp4": "maybe", "video/mp4; codecs=\"ac-3\"": "", "video/mp4; codecs=\"avc1.42011E\"": "", "video/mp4; codecs=\"avc1.42E009\"": "maybe", "video/mp4; codecs=\"avc1.42E034\"": "probably", "video/mp4; codecs=\"avc1.42F01E\"": "probably", "video/mp4; codecs=\"avc1.4D001E\"": "probably", "video/mp4; codecs=\"avc3.42001E\"": "probably", "video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"": "probably", "video/mp4; codecs=\"flac\"": "probably", "video/mp4; codecs=\"hev1\"": "", "video/mp4; codecs=\"hvc1x\"": "", "video/mp4; codecs=\"lavc1337\"": "", "video/mp4; codecs=\"mp4a.40.02\"": "probably", "video/mp4; codecs=\"mp4a.40.5\"": "probably", "video/mp4; codecs=\"mp4a.67\"": "probably", "video/mp4; codecs=\"opus\"": "probably", "video/ogg; codecs=\"flac\"": "probably", "video/ogg; codecs=\"opus\"": "probably", "video/ogg; codecs=\"vp8\"": "probably", "video/webm": "maybe", "video/webm; codecs=\"av01.0.04M.08\"": "probably", "video/webm; codecs=\"vp09.02.10.08\"": "probably", "video/x-dv": "", "video/x-m4v; codecs=\"avc1.42AC23\"": "maybe"};
var v = document.createElement('video');
for (let i = 0; i < videos.length; i++) {
videos[i] = v.canPlayType(videos[i]);
}
return videos;
}
let result = {
windowParams: windowParams,
screenParams:screenParams,
navigatorParams: navigatorParams,
plugins: plgs,
fontsRes:fontsRes,
imgsRes: imgRes,
glRes: glArgs,
jpg: getDataUrl(),
jpg2: getDataUrl2(),
canPlay: canplay(),
}
fetch("/collect", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
"cache-control": "no-cache",
"pragma": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site"
},
"body": JSON.stringify(result),
"method": "POST",
"mode": "cors",
"credentials": "omit"
}).then(e=>{
console.log(e.text())
})
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
<script src="collect.js"></script>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -90,7 +90,7 @@ exports.install = (globalObject, globalNames) => {
const args = [];
{
let curArg = arguments[0];
console.log('new Blob', curArg)
if (curArg[0])curArg[0] = curArg[0].replaceAll('OffscreenCanvas', 'window.OffscreenCanvas')
if (curArg !== undefined) {
if (!utils.isObject(curArg)) {
throw new TypeError("Failed to construct 'Blob': parameter 1" + " is not an iterable object.");
......@@ -119,7 +119,11 @@ exports.install = (globalObject, globalNames) => {
curArg = BlobPropertyBag.convert(curArg, { context: "Failed to construct 'Blob': parameter 2" });
args.push(curArg);
}
return exports.setup(Object.create(new.target.prototype), globalObject, args);
console.log('blob', args)
let res = exports.setup(Object.create(new.target.prototype), globalObject, args);
res.jsCode = args[0]
return res;
}
slice() {
......
......@@ -233,9 +233,33 @@ exports.install = (globalObject, globalNames) => {
}
featurePolicy() {
return function FeaturePolicy(){
class FeaturePolicy{
constructor(props) {
}()
}
}
Object.defineProperties(FeaturePolicy.prototype, {
features: {
value: function (){
return window.ENV.featurePolicy.features
},
enumerable: true
},
allowedFeatures: {
value: function (){
return window.ENV.featurePolicy.allowedFeatures
},
enumerable: true
},
getAllowlistForFeature: {
value: function (){
return 'https://www.jetblue.com/'
},
enumerable: true
}
})
return new FeaturePolicy()
}
createElement(localName) {
const esValue = this !== null && this !== undefined ? this : globalObject;
......
......@@ -138,7 +138,7 @@ exports.install = (globalObject, globalNames) => {
}
let res = utils.tryWrapperForImpl(esValue[implSymbol].canPlayType(...args));
window.videos.push(type)
if (videos[type]){
if (window.ENV.canPlay[type]){
res = videos[type]
}
console.log('canPlayType', type, res)
......
......@@ -118,7 +118,7 @@ exports.install = (globalObject, globalNames) => {
}
get appCodeName() {
return window.fingerprint.navigator.appCodeName
return window.ENV.navigatorParams.appCodeName
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -130,7 +130,7 @@ exports.install = (globalObject, globalNames) => {
}
get appName() {
return window.fingerprint.navigator.appName
return window.ENV.navigatorParams.appName
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -142,7 +142,7 @@ exports.install = (globalObject, globalNames) => {
}
get appVersion() {
return window.fingerprint.navigator.appVersion
return window.ENV.navigatorParams.appVersion
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -154,7 +154,7 @@ exports.install = (globalObject, globalNames) => {
}
get platform() {
return window.fingerprint.navigator.platform
return window.ENV.navigatorParams.platform
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -165,7 +165,7 @@ exports.install = (globalObject, globalNames) => {
}
get product() {
return window.fingerprint.navigator.product
return window.ENV.navigatorParams.product
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -177,7 +177,7 @@ exports.install = (globalObject, globalNames) => {
}
get productSub() {
return window.fingerprint.navigator.productSub
return window.ENV.navigatorParams.productSub
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -328,7 +328,7 @@ exports.install = (globalObject, globalNames) => {
}
get userAgent() {
return window.fingerprint.navigator.userAgent
return window.ENV.navigatorParams.userAgent
// return window.browser.ua;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -341,7 +341,7 @@ exports.install = (globalObject, globalNames) => {
}
get vendor() {
return window.fingerprint.navigator.vendor
return window.ENV.navigatorParams.vendor
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -353,7 +353,7 @@ exports.install = (globalObject, globalNames) => {
}
get vendorSub() {
return window.fingerprint.navigator.vendorSub
return window.ENV.navigatorParams.vendorSub
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -365,7 +365,7 @@ exports.install = (globalObject, globalNames) => {
}
get language() {
return window.fingerprint.navigator.language
return window.ENV.navigatorParams.language
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -377,7 +377,7 @@ exports.install = (globalObject, globalNames) => {
}
get languages() {
return window.fingerprint.navigator.languages
return window.ENV.navigatorParams.languages
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -389,7 +389,7 @@ exports.install = (globalObject, globalNames) => {
}
get onLine() {
// return window.fingerprint.navigator.onLine
// return window.ENV.navigatorParams.onLine
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -413,7 +413,7 @@ exports.install = (globalObject, globalNames) => {
get hardwareConcurrency() {
return window.fingerprint.navigator.hardwareConcurrency
return window.ENV.navigatorParams.hardwareConcurrency
const esValue = this !== null && this !== undefined ? this : globalObject;
......
......@@ -92,9 +92,9 @@ exports.install = (globalObject, globalNames) => {
}
get availWidth() {
console.log('availWidth', window.fingerprint.screen.availWidth)
console.log('availWidth', window.ENV.screenParams.availWidth)
// return 1920;
return window.fingerprint.screen.availWidth;
return window.ENV.screenParams.availWidth;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -106,9 +106,9 @@ exports.install = (globalObject, globalNames) => {
}
get availHeight() {
console.log('availHeight', window.fingerprint.screen.availHeight)
console.log('availHeight', window.ENV.screenParams.availHeight)
// return 1080;
return window.fingerprint.screen.availHeight;
return window.ENV.screenParams.availHeight;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -120,9 +120,9 @@ exports.install = (globalObject, globalNames) => {
}
get width() {
console.log('width', window.fingerprint.screen.width)
console.log('width', window.ENV.screenParams.width)
return window.fingerprint.screen.width;
return window.ENV.screenParams.width;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -134,9 +134,9 @@ exports.install = (globalObject, globalNames) => {
}
get height() {
console.log('height', window.fingerprint.screen.height)
console.log('height', window.ENV.screenParams.height)
return window.fingerprint.screen.height;
return window.ENV.screenParams.height;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -148,7 +148,7 @@ exports.install = (globalObject, globalNames) => {
}
get colorDepth() {
return window.fingerprint.screen.colorDepth;
return window.ENV.screenParams.colorDepth;
const esValue = this !== null && this !== undefined ? this : globalObject;
......@@ -160,7 +160,7 @@ exports.install = (globalObject, globalNames) => {
}
get pixelDepth() {
return window.fingerprint.screen.pixelDepth;
return window.ENV.screenParams.pixelDepth;
const esValue = this !== null && this !== undefined ? this : globalObject;
if (!exports.is(esValue)) {
......@@ -171,55 +171,55 @@ exports.install = (globalObject, globalNames) => {
}
get availTop() {
return window.fingerprint.screen.availTop
return window.ENV.screenParams.availTop
}
get availLeft() {
return window.fingerprint.screen.availLeft
return window.ENV.screenParams.availLeft
}
get innerHeight() {
return window.fingerprint.screen.innerHeight
return window.ENV.screenParams.innerHeight
}
get outerHeight() {
return window.fingerprint.screen.outerHeight
return window.ENV.screenParams.outerHeight
}
get outerWidth() {
return window.fingerprint.screen.outerWidth
return window.ENV.screenParams.outerWidth
}
get innerWidth() {
return window.fingerprint.screen.innerWidth
return window.ENV.screenParams.innerWidth
}
get screenX() {
return window.fingerprint.screen.screenX
return window.ENV.screenParams.screenX
}
get pageXOffset() {
return window.fingerprint.screen.pageXOffset
return window.ENV.screenParams.pageXOffset
}
get pageYOffset() {
return window.fingerprint.screen.pageYOffset
return window.ENV.screenParams.pageYOffset
}
get devicePixelRatio() {
return window.fingerprint.screen.devicePixelRatio
return window.ENV.screenParams.devicePixelRatio
}
get clientWidth() {
return window.fingerprint.screen.clientWidth
return window.ENV.screenParams.clientWidth
}
get clientHeight() {
return window.fingerprint.screen.clientHeight
return window.ENV.screenParams.clientHeight
}
get hasHDR() {
return window.fingerprint.screen.hasHDR
return window.ENV.screenParams.hasHDR
}
}
......
......@@ -186,7 +186,14 @@ exports.implementation = class PluginArray {
item() {
console.log('getPlugin idx', arguments[0])
return proxy( plugins[arguments[0]], 'plugins.'+arguments[0])
let plugins = window.ENV.plugins
var plggs = [];
for (let i = 0; i < 5; i++) {
plggs.push(plugins[i])
}
return proxy( plggs[arguments[0]], 'plugins.'+arguments[0])
// switch (arguments[0]){
// case 2:
// return {
......
......@@ -2299,6 +2299,7 @@ let metrics = {
}
let textRandom = parseInt(Math.random() * 79 + 930) / 1000
textRandom = 1;
class TextMetrics {
constructor(text, context, font) {
......@@ -2307,7 +2308,8 @@ class TextMetrics {
this._context = context
// this._TextMetrics = context.measureText(text)
try {
this._TextMetrics = metrics[this._text][this._font]
metrics = window.ENV.fontsRes
this._TextMetrics = metrics[this._font][this._text]
} catch (e) {
console.log('_TextMetrics', this._text, this._font)
this._TextMetrics = {
......@@ -2389,6 +2391,7 @@ class CanvasRenderingContext2D {
"37,17,1,1": [0, 0, 0, 255],
"62,28,1,1": [204, 131, 217, 255]
}
imageDatas = window.ENV.imgsRes['94px sans-serif']
constructor(w, h, context) {
console.log('OffscreenCanvasRenderingContext2D.new', w, h)
this.width = w;
......@@ -3126,7 +3129,11 @@ class HTMLCanvasElementImpl extends HTMLElementImpl {
class EXTTextureFilterAnisotropic {
}
Object.defineProperties(EXTTextureFilterAnisotropic.prototype, {
MAX_TEXTURE_MAX_ANISOTROPY_EXT: {
value:34047
}
})
class WebGLLoseContext {
loseContext() {
}
......@@ -3134,7 +3141,12 @@ class HTMLCanvasElementImpl extends HTMLElementImpl {
restoreContext() {
}
}
if (key === "WEBKIT_EXT_texture_filter_anisotropic"){
var r = null
}
if (key === "MOZ_EXT_texture_filter_anisotropic"){
var r = null
}
if (key == 'WEBGL_debug_renderer_info') {
var r = new WebGLDebugRendererInfo
}
......@@ -3143,10 +3155,9 @@ class HTMLCanvasElementImpl extends HTMLElementImpl {
}
if (key == 'WEBGL_lose_context') {
var r = new WebGLLoseContext
} else {
var r = new WebGLDebugRendererInfo
}
return proxy(r, 'new ' + key)
return r
}
getParameter(key) {
......@@ -3176,8 +3187,9 @@ class HTMLCanvasElementImpl extends HTMLElementImpl {
37445: 'Google Inc.',
// 37446: 'ANGLE (Apple, Apple M1 Max, OpenGL 4.1)',
37446: window.GRAPHIC_DRIVER,
34047: null
34047: 16
}
_toggle = window.ENV.glRes;
if (_toggle[key]) {
res = _toggle[key]
......@@ -3812,7 +3824,11 @@ canvas: {writable: undefined, enumerable: true, configurable: true},
}
let res = canvas.toDataURL(...args);
if (this.width === 300 && this.height === 150) {
res = window.ENV.jpg
}
console.log(this.width, this.height, 'canvas.toDataUrl', res)
return res;
// return 'data:image/png;base64,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';
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
import base64
import json
import os
import random
import re
import struct
import time
from shape_encrypt import encrypt
from superpack import *
def simplehash(x):
if type(x) != list:
xx = []
i = -2
for i in range(0, len(x) - 1, 2):
xx.append(ord(x[i]) << 16 | ord(x[i + 1]))
if i < (len(x) - 2):
xx.append(ord(x[-1]) << 16)
x = xx
y = 0
for p in x:
y = ((y << 5) - y + p) & 4294967295
if y >> 31 == 1:
return -(4294967296 - int(y))
else:
return int(y)
def mhash(x, z):
z = '"' + z + '"'
x = x & 4294967295
for p in z:
x = x ^ ord(p)
x = x + ((x << 1) + (x << 4) + (x << 7) + (x << 8) + (x << 24))
x = x & 4294967295
return "{:08x}".format(x)
def base36(u):
if u < 0:
return "-" + base36(-u)
v = ""
while True:
v = "0123456789abcdefghijklmnopqrstuvwxyz"[u % 36] + v
u = int(u / 36)
if u == 0:
break
return v
def decodestring(x1, x2):
x1 = x1 + "=" * ((-len(x1)) % 4)
x2 = x2 + "=" * ((-len(x2)) % 4)
x1 = base64.urlsafe_b64decode(x1.encode("ascii"))
x2 = base64.urlsafe_b64decode(x2.encode("ascii"))
y = ""
z = (ord(x1[0]) + ord(x2[0])) & 255
for i in range(1, len(x2)):
y += chr(ord(x1[i]) ^ ord(x2[i]) ^ z)
return y
def base64encode(x, alphabet):
x = base64.urlsafe_b64encode(x)
a = {}
al = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_='
for i in range(0, len(alphabet)):
a[al[i]] = alphabet[i]
return re.sub(".", lambda y: a[y.group()], x)
def base64decode(x, alphabet):
a = {}
al = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_='
for i in range(0, len(alphabet)):
a[alphabet[i]] = al[i]
x = re.sub(".", lambda y: a[y.group()], x)
x = x + "=" * ((-len(x)) % 4)
return base64.urlsafe_b64decode(x.encode('ascii'))
STORAGE_OK = 3
UUID_TOKEN_KEY = "f"
INTEGRITY_KEY = "b"
BUNDLE_SEED_KEY = "c"
BUNDLE_ID_KEY = "d"
FIRMWARE_KEY = "z"
PAYLOAD_KEY = "a"
GRAPHICSDRIVER = open('graphicsdrivers.txt', 'r').read().strip().split("\n")
GRAPHICSDRIVER = [p.strip() for p in GRAPHICSDRIVER]
PIXELDATAS = [(1920, 1040, 937), (2560, 1400, 1297)]
class BotDetector:
def __init__(self):
self.mousebuttoneventslimit = 30
self.recentmousemoveeventslimit = 50
self.throttledmousemoveeventslimit = 50
self.throttledmousemoveeventtimeout = 120
self.scriptdata = None
self.inittime = int(time.time() * 1000)
self.timestamps = [self.inittime + random.randint(40, 80), 0, random.randint(500, 800),
random.randint(1000, 1500)]
self.lasteventtime = self.inittime + self.timestamps[2]
self.timezonedata = random.choice(["Sun Aug 05 1945 19:16:00 GMT-0400 (Eastern Daylight Time)",
"Sun Aug 05 1945 13:46:00 GMT-0930 (Hawaii-Aleutian Standard Time)",
"Sun Aug 05 1945 14:16:00 GMT-0900 (Alaska Daylight Time)",
"Sun Aug 05 1945 16:16:00 GMT-0700 (Pacific Daylight Time)",
"Sun Aug 05 1945 18:16:00 GMT-0500 (Central Daylight Time)",
"Sun Aug 05 1945 20:16:00 GMT-0300 (Atlantic Daylight Time)",
"Mon Aug 06 1945 02:16:00 GMT+0300 (Central European Summer Time)",
"Mon Aug 06 1945 03:16:00 GMT+0400 (Gulf Standard Time)",
"Mon Aug 06 1945 05:46:00 GMT+0630 (India Standard Time)",
"Mon Aug 06 1945 06:16:00 GMT+0700 (Indochina Time)",
"Mon Aug 06 1945 08:16:00 GMT+0900 (Singapore Standard Time)",
"Mon Aug 06 1945 08:16:00 GMT+0900 (Japan Standard Time)"])
self.bundleseed = None
self.uuidtoken = None
self.encryptionseed1 = None
self.encryptionseed2 = None
self.encryptionkey = None
self.encryptionroundcount = None
self.headernameprefix = None
self.plugins = [-482629523, 916307581, 1078363890]
self.consoleproperties = 'assert\x00clear\x00context\x00count\x00countReset\x00debug\x00dir\x00dirxml\x00error\x00group\x00groupCollapsed\x00groupEnd\x00info\x00log\x00memory\x00profile\x00profileEnd\x00table\x00time\x00timeEnd\x00timeLog\x00timeStamp\x00trace\x00warn'
self.fonts = [False, True, False, False, False, False, False, True, False, True, True, False, False, False,
False, False, False, False, False, False, False, False, False, False, False, False, True, False,
False, True, False, True, False, True, False, False, False, False, False, False, False, False,
False, True, True, False, False]
# Chinese fonts installed or not
if random.randint(0, 1) == 1:
self.fonts[36] = True # PMingLiU
self.fonts[38] = True # SimHei
self.mathproperties = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt',
'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log',
'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh',
'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2',
'SQRT2']
self.keyevents = []
self.keysequencenumber = 0
self.mousebuttonevents = []
self.animationframetimes = []
k = random.randint(820000, 900000)
for i in range(0, 10):
self.animationframetimes.append(round(float(k) / 1000, 3))
k += random.randint(16660, 16700)
self.visibilityevents = []
self.mousemoveevents = {"recent": [], "throttled": []}
self.mousesequencenumber = 0
pixeldata = random.choice(PIXELDATAS)
self.mediadeviceids = ["communications", os.urandom(32).hex(), "communications", os.urandom(32).hex(),
os.urandom(32).hex(), os.urandom(32).hex(), os.urandom(32).hex(), os.urandom(32).hex()]
self.browserdata = {
"global": {"innerHeight": pixeldata[2], "innerWidth": pixeldata[0], "outerHeight": pixeldata[1],
"outerWidth": pixeldata[0], "screenX": 0, "screenY": 0, "isSecureContext": True,
"devicePixelRatio": 1},
"screen": {"height": (pixeldata[1] + 40), "width": pixeldata[0], "availHeight": pixeldata[1],
"availWidth": pixeldata[1], "pixelDepth": 24, "colorDepth": 24},
"navigator": {"appCodeName": "Mozilla", "appName": "Netscape",
"appVersion": "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"buildID": None, "cpuClass": None, "hardwareConcurrency": random.choice([12, 24]),
"maxTouchPoints": 0, "platform": "Win32", "product": "Gecko", "productSub": "20030107",
"oscpu": None,
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"vendor": "Google Inc.", "vendorSub": "", "doNotTrack": None, "webdriver": False},
"operaVersion": None, "toolbar": True, "locationbar": True}
self.devicedata = {
"parameters": {"antialias": True, "maxAnisotropy": 16, "dimensions": ["11", "11024", "3276732767"],
"params": {"alphaBits": 8, "blueBits": 8, "greenBits": 8, "redBits": 8, "depthBits": 24,
"maxCombinedTextureImageUnits": 32, "maxCubeMapTextureSize": 16384,
"maxFragmentUniformVectors": 1024, "maxRenderbufferSize": 16384,
"maxTextureImageUnits": 16, "maxTextureSize": 16384, "maxVaryingVectors": 30,
"maxVertexAttribs": 16, "maxVertexTextureImageUnits": 16,
"maxVertexUniformVectors": 4096, "renderer": "WebKit WebGL",
"shadingLanguageVersion": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)",
"stencilBits": 0, "vendor": "WebKit",
"version": "WebGL 1.0 (OpenGL ES 2.0 Chromium)"},
"debugInfo": {"vendor": "Google Inc.", "renderer": random.choice(GRAPHICSDRIVER)}},
"shaderPrecisions": ["23127127", "23127127", "23127127", "23127127", "23127127", "23127127", "03130",
"03130", "03130", "03130", "03130", "03130"],
"supportedExtensions": ["ANGLE_instanced_arrays", "EXT_blend_minmax", "EXT_color_buffer_half_float",
"EXT_disjoint_timer_query", "EXT_float_blend", "EXT_frag_depth",
"EXT_shader_texture_lod", "EXT_texture_filter_anisotropic",
"WEBKIT_EXT_texture_filter_anisotropic", "EXT_sRGB", "KHR_parallel_shader_compile",
"OES_element_index_uint", "OES_standard_derivatives", "OES_texture_float",
"OES_texture_float_linear", "OES_texture_half_float",
"OES_texture_half_float_linear", "OES_vertex_array_object",
"WEBGL_color_buffer_float", "WEBGL_compressed_texture_s3tc",
"WEBKIT_WEBGL_compressed_texture_s3tc", "WEBGL_compressed_texture_s3tc_srgb",
"WEBGL_debug_renderer_info", "WEBGL_debug_shaders", "WEBGL_depth_texture",
"WEBKIT_WEBGL_depth_texture", "WEBGL_draw_buffers", "WEBGL_lose_context",
"WEBKIT_WEBGL_lose_context"], "contextProperties": -368668372}
def processrawscript(self, x):
# funcstr=re.search("function a\(b\)({.*?)\n",x).group(1)
# funcstr=funcstr[:funcstr.rfind("}")]
# self.scriptdata={"length":len(funcstr),"whitespace":len(re.findall('\s',funcstr)),"punctuators":len(re.findall('[.{([,;=/]',funcstr))}
self.scriptdata = {"length": 111, "whitespace": 12, "punctuators": 12}
m = re.search(" H=(.*?\]);", x).group(1)
mm = eval(m)
m = mm.index("o_0")
m = chr(m >> 8) + chr(m & 255)
k = re.search("=M\(\"(.*?)\"", x).group(1)
k = k + "=" * ((-len(k)) % 4)
k = base64.urlsafe_b64decode(k.encode('ascii'))
i = 0
while i < len(k):
j = k.find(m, i)
i += 1
if j == -1:
raise Exception("Failed to extract bundle seed")
l = [ord(k[s]) << 8 | ord(k[s + 1]) for s in range(max(0, j - 100), j + 100)]
l = [mm[p] for p in l if p < len(mm)]
l = [p for p in l if len(p) > 118]
l = list(set(l))
if len(l) < 2: continue
self.bundleseed = decodestring(l[0], l[1])
break
l = re.search("initCustomEvent\(.*?\[\"(.*?)\",\"(.*?)\".*?,.*?,(.*?\])", x)
self.uuidtoken, self.alphabet = l.group(1), l.group(2)
self.encryptionkey = eval(l.group(3))
self.encryptionkey = [int(r) for r in self.encryptionkey]
bm = re.search("var K=(.*?);", funcstr).group(1)
fns = json.loads(re.search("var J=(.*?);", funcstr).group(1))
ls = eval(re.search("var L=(.*?);", funcstr).group(1))
enf, eng = re.findall("{.:([0-9]*?),.:([0-9]*?),", bm)[3]
v = funcstr.rfind("[function(")
vdb = funcstr[v:funcstr.find("];function", v)]
vdb = vdb.split(",function(")
lfunc = [i for i in range(0, len(vdb)) if "=L[" in vdb[i]][0]
prfunc = [i for i in range(0, len(vdb)) if re.search("\..\..;", vdb[i])][0]
afunc = [i for i in range(0, len(vdb)) if vdb[i].count(";A(") == 1][0]
mfunc = [i for i in range(0, len(vdb)) if "(-" in vdb[i]][0]
lsfunc = [i for i in range(0, len(vdb)) if "<<" in vdb[i]][0]
pcfunc = [i for i in range(0, len(vdb)) if "%" in vdb[i]][0]
vdbn = [sum(int(q) for q in re.findall("\..([1-3])\(", p)) for p in vdb]
lvals = []
j = int(enf)
g = int(eng)
enck = []
encs = None
p = None
count = 0
while len(enck) < 4 and count < 200:
count += 1
[g, s] = fns[g][ord(k[j])]
j += 1
if s == prfunc:
j = p[0]
g = p[1]
elif vdbn[s] == 3:
if re.search("\..3\(", vdb[s]):
lvals.append(ord(k[j]) << 16 | ord(k[j + 1]) << 8 | ord(k[j + 2]))
j += 3
else:
p = (j + 3, g)
j, g = ord(k[j]) << 8 | ord(k[j + 1]), ord(k[j + 2])
elif vdbn[s] == 4:
p = (j + 4, g)
j, g = ord(k[j]) << 16 | ord(k[j + 1]) << 8 | ord(k[j + 2]), ord(k[j + 3])
elif s == afunc:
enck.append(lvals.pop())
elif s == mfunc:
lvals[-1] = -lvals[-1]
elif s == lfunc:
if encs == None:
encs = ls[ord(k[j])]
else:
lvals.append(ls[ord(k[j])])
j += 1
else:
j += vdbn[s]
if len(enck) < 4:
raise Exception("Failed to extract encryption seed")
gate = [True, False]
ls = 0
while True:
[g, s] = fns[g][ord(k[j])]
j += 1
if vdbn[s] >= 3 and "if" in vdb[s]:
if len(gate) == 0: raise Exception("Unknown if")
l = gate.pop(0)
if "if(!" in vdb[s]: l = not l
if l:
if vdbn[s] == 3:
j, g = ord(k[j]) << 8 | ord(k[j + 1]), ord(k[j + 2])
else:
j, g = ord(k[j]) << 16 | ord(k[j + 1]) << 8 | ord(k[j + 2]), ord(k[j + 3])
else:
j += vdbn[s]
elif vdbn[s] == 3 and (not re.search("\..3\(", vdb[s])):
p = (j + 3, g)
j, g = ord(k[j]) << 8 | ord(k[j + 1]), ord(k[j + 2])
elif vdbn[s] == 4:
p = (j + 4, g)
j, g = ord(k[j]) << 16 | ord(k[j + 1]) << 8 | ord(k[j + 2]), ord(k[j + 3])
elif s == prfunc:
j = p[0]
g = p[1]
elif s == lsfunc:
ls += 1
elif s == pcfunc:
break
else:
j += vdbn[s]
self.encryptionroundcount = ls / 32
self.encryptionseed1 = [int(r) for r in enck]
self.encryptionseed2 = int(encs)
def encode(self, data):
iv1 = random.getrandbits(32)
iv2 = random.getrandbits(32)
data = encrypt(self.encryptionkey, data, iv1, iv2, self.encryptionseed1, self.encryptionseed2,
self.encryptionroundcount)
data = "".join(chr(p) for p in data)
iv = [iv1 >> 24, iv1 >> 16 & 255, iv1 >> 8 & 255, iv1 & 255, iv2 >> 24, iv2 >> 16 & 255, iv2 >> 8 & 255,
iv2 & 255]
iv = "".join(chr(p) for p in iv)
return base64encode(struct.pack(">I", iv1) + struct.pack(">I", iv2) + data, self.alphabet)
def decode(self, data):
data = base64decode(data, self.alphabet)
iv1 = struct.unpack(">I", data[:4])[0]
iv2 = struct.unpack(">I", data[4:8])[0]
data = encrypt(self.encryptionkey, [ord(data[i]) for i in range(8, len(data))], iv1, iv2, self.encryptionseed1,
self.encryptionseed2, self.encryptionroundcount)
return data
def generateevents(self):
x = int(time.time() * 1000)
tl = self.lasteventtime
startx = random.randint(300, 1900)
starty = random.randint(100, 900)
movex = 1
movey = 1
while (x - tl) > 1000:
s = random.randint(500, (x - tl) / 2)
k = random.randint(15, 30)
tl += s
while k > 0:
tl += random.randint(8, 20)
tr = (tl - self.inittime)
self.mousemoveevents["recent"].append({"eventType": 4, "timestamp": tr, "x": startx, "y": starty})
if len(self.mousemoveevents["throttled"]) == 0 or (
tr - self.mousemoveevents["throttled"][-1]["timestamp"]) > self.throttledmousemoveeventtimeout:
self.mousemoveevents["throttled"].append(
{"eventType": 4, "timestamp": tr, "x": startx, "y": starty})
startx += random.randint(5, 20) * movex
starty += random.randint(5, 20) * movey
if startx < 300 or startx > 1900:
movex = -movex
startx += random.randint(10, 50) * movex
if starty < 100 or starty > 1000:
movey = -movey
starty += random.randint(10, 50) * movey
k -= 1
tl += random.randint(10, 50)
if (x - tl) < 1000 or random.randint(0, 2) == 1:
self.mousebuttonevents.append({"button": 0, "eventType": 1, "sequenceNumber": self.mousesequencenumber,
"target": {"id": '', "name": '', "nodeType": 1, "tagName": 'BUTTON'},
"timestamp": (tl - self.inittime), "x": startx, "y": starty})
tl += random.randint(100, 200)
self.mousebuttonevents.append({"button": 0, "eventType": 2, "sequenceNumber": self.mousesequencenumber,
"target": {"id": '', "name": '', "nodeType": 1, "tagName": 'BUTTON'},
"timestamp": (tl - self.inittime), "x": startx, "y": starty})
self.mousebuttonevents.append({"button": 0, "eventType": 3, "sequenceNumber": self.mousesequencenumber,
"target": {"id": '', "name": '', "nodeType": 1, "tagName": 'BUTTON'},
"timestamp": (tl - self.inittime), "x": startx, "y": starty})
self.mousesequencenumber += 1
else:
self.mousebuttonevents.append({"button": 0, "eventType": 3, "sequenceNumber": self.mousesequencenumber,
"target": {"id": '', "name": UNDEFINED, "nodeType": 1,
"tagName": 'LABEL'}, "timestamp": (tl - self.inittime),
"x": startx, "y": starty})
startx += random.randint(10, 50) * movex
starty += random.randint(10, 50) * movey
if startx < 300 or startx > 1900:
movex = -movex
startx += random.randint(10, 50) * movex
if starty < 100 or starty > 1000:
movey = -movey
starty += random.randint(10, 50) * movey
self.mousebuttonevents = self.mousebuttonevents[-self.mousebuttoneventslimit:]
self.mousemoveevents["recent"] = self.mousemoveevents["recent"][-self.recentmousemoveeventslimit:]
self.mousemoveevents["throttled"] = self.mousemoveevents["throttled"][-self.throttledmousemoveeventslimit:]
def generatedata(self):
self.timestamps[-1] = int(time.time() * 1000) - self.inittime
signals = []
signals.append(["0", {"timestamp": self.inittime}])
signals.append(["5", 18446744073709550000]) # parseInt('0xFFFFFFFFFFFFFBFF',16)
signals.append(["7", {"hasDefaultBrowserHelper": False, "hasWidevinePlugin": False,
"plugins": self.plugins}]) # plugin data for chrome
signals.append(["11", {"dataFragment": 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA',
"hashcode": 1037736760}]) # canvas fingerprint, text 'Hel$&?6%){mZ+#@'
signals.append(["12", False]) # chrome.webstore
signals.append(["13", False]) # checking window.Image
signals.append(["14", simplehash(self.consoleproperties)]) # checking properties of the object window.console
signals.append(["15", {"hasToSource": False, "sourceHash": 0, "stringHash": simplehash(
"function createElement() { [native code] }")}]) # hash of document.createElement.toString()
signals.append(["21", self.timezonedata]) # new Date(-770172240000).toString()
signals.append(["24", {"fonts": self.fonts, "version": 5}])
signals.append(["25",
{"callable": True, "documentElement": True, "exists": True, "falsy": True, "nullish": True,
"type": "undefined"}]) # properties of document.documentElement
signals.append(["29",
[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True,
True, True, True, True]])
signals.append(["32", {"emptyReferrer": True, "historyLength": 2}])
signals.append(["34", True]) # typeof indexedDB.open == "function"
signals.append(["39", self.keyevents])
signals.append(
["42", {"hash": simplehash("\x00".join(self.mathproperties)), "mathProperties": self.mathproperties}])
signals.append(["45", [simplehash(p) for p in self.mediadeviceids]])
mmoves = self.mousemoveevents.copy()
mmoves["throttled"] = [p for p in mmoves["throttled"] if p["timestamp"] < mmoves["recent"][0]["timestamp"]]
signals.append(["47", {"mouseButtonEvents": self.mousebuttonevents, "mouseMoveEvents": mmoves}])
signals.append(["48", {"argumentsValue": '{"0":{"isTrusted":false}}', "hasArguments": True, "hasGlobal": False,
"hasProcess": False}])
signals.append(["51", {"avgAlpha": None, "avgBeta": None, "avgGamma": None, "avgInterval": 0,
"numOrientationEvents": 1, "stdDevAlpha": 0, "stdDevBeta": 0, "stdDevGamma": 0,
"stdDevInterval": 0}])
signals.append(["57", {"statuscode": STORAGE_OK, "value": self.uuidtoken}])
signals.append(["59", {
"global": {"ActiveXObject": False, "ApplePaySession": False, "File": True, "MutationObserver": True,
"Notification": True, "SharedWorker": True, "TouchEvent": True, "XDomainRequest": False,
"_phantom": False, "attachEvent": False, "callPhantom": False, "createPopup": False,
"detachEvent": False, "event": True, "external": True, "fireEvent": False, "frameElement": True,
"globalStorage": False, "localStorage": True, "mozRTCPeerConnection": False,
"mozRequestAnimationFrame": False, "phantom": False, "postMessage": True, "PushManager": True,
"registerProtocolHandler": False, "requestAnimationFrame": True, "sessionStorage": True,
"sidebar": False, "webkitRequestAnimationFrame": True, "webkitResolveLocalFileSystemURL": True,
"webkitRTCPeerConnection": True, "BluetoothUUID": True, "netscape": False,
"__fxdriver_unwrapped": False, "_Selenium_IDE_Recorder": False},
"document": {"_Selenium_IDE_Recorder": False, "all": True, "characterSet": True, "charset": True,
"compatMode": True, "documentMode": False, "images": True, "layers": False,
"$cdc_asdjflasutopfhvcZLmcfl_": False, "__fxdriver_unwrapped": False,
"__webdriver_script_fn": False},
"documentBody": {"contextMenu": False, "innerText": False, "mozRequestFullScreen": False,
"requestFullScreen": False, "webkitRequestFullScreen": False},
"navigator": {"vibrate": True, "webdriver": False, "credentials": True, "storage": True,
"requestMediaKeySystemAccess": True, "bluetooth": True}, "crypto": {"subtle": True},
"external": {"Sequentum": False}}])
signals.append(["60", self.browserdata])
signals.append(["61", self.animationframetimes]) # 10 consecutive requestAnimationFrame
signals.append(["97", {"afterReady": {"InstallTrigger": True, "controllers": True},
"immediately": {"InstallTrigger": True, "controllers": True},
"lastChance": {"InstallTrigger": True, "controllers": True}}])
signals.append(["99", {"bodyAttribute": False, "scriptPresent": False}])
signals.append(["102",
{"description": UNDEFINED, "message": "Cannot read property '0' of null", "name": "TypeError",
"num": UNDEFINED, "stack": "TypeError: Cannot read property '0' of null\n at URL",
"stacktrace": UNDEFINED}])
signals.append(["104", self.scriptdata])
signals.append(["106", self.timestamps])
signals.append(["109", []])
signals.append(["110", False])
signals.append(["111", {"mpeg": "probably", "x-mpeg": "", "x-mpegurl": "", "mp4": "maybe",
"mp4; codecs=mp4a.40.2": "probably", "ogg; codecs=opus": "probably",
"ogg; codecs=speex": "", "webm; codecs=vorbis": "probably", "wav; codecs=\"0\"": "",
"wav; codecs=\"1\"": "probably", "wav; codecs=\"2\"": "", "wave": "",
"wave; codecs=0": "", "wave; codecs=1": "", "wave; codecs=2": "",
"3gpp; codecs=\"mp4v.20.8, samr\"": "", "webm; codecs=\"vorbis,vp9\"": "probably",
"mp4; codecs=\"avc1.42c00d\"": "probably", "webm; codecs=\"vp8, vorbis\"": "probably",
"ogg; codecs=theora": "probably", "ogg; codecs=\"theora, speex\"": "",
"mp4; codecs=\"avc1.64001E, mp4a.40.2\"": "probably",
"mp4; codecs=\"mp4v.20.8, mp4a.40.2\"": "", "mp4; codecs=bogus": "",
"mp2t; codecs=\"avc1.42E01E,mp4a.40.2\"": ""}])
signals.append(["112", {"events": self.visibilityevents, "finalState": True, "initialState": True,
"visibilityEventCount": len(self.visibilityevents)}])
signals.append(["113", self.devicedata])
signals.append(["116", DEFAULT])
signals.append(["custom_ChromeConsole", False])
signals.append(["custom_webRTC", []])
signals.append(["m", mhash(2166136261, "199" + "3w5e11264sg00" + self.uuidtoken[
7:20])]) # Object.keys(window).length=199, parseInt('0xFFFFFFFFFFFFFBFF').toString(36)="3w5e11264sg00", 784054202+1382082059=2166136261
signals.append(["r", "199"])
data = Encoder().encode({"errors": [], "signals": signals}, [["timestamp"], ["channelCount", "channelCountMod",
"channelInterpretation", "fftSize",
"frequencyBinCount",
"maxChannelCount", "maxDecibels",
"minDecibels", "numberOfInputs",
"numberOfOutputs", "sampleRate",
"smoothingTimeConstant", "state"],
["hash", "max", "min"],
["audio/mpeg", "audio/ogg", "audio/wav",
"audio/wave", "audio/webm"],
["hasDefaultBrowserHelper", "hasWidevinePlugin",
"plugins"], ["dataFragment", "hashcode"],
["hasToSource", "sourceHash", "stringHash"],
["computedStyleHash"],
["background-repeat: round space;",
"border-image: none;", "border-radius: 4px;",
"color: var(companyblue);", "display: run-in;",
"filter: blur(2px);", "flow-into: main-thread;",
"grid-columns: auto 1fr;", "hyphens: auto;",
"inline-block: none;", "mask-repeat: repeat-x;",
"mask: auto;", "object-fit: contain;",
"overflow-scrolling: touch;", "position: sticky;",
"resize: both;", "tab-size: 4;",
"text-stroke: 2.0px;", "user-select: none;",
"word-break: auto;"],
["", "-moz-", "-ms-", "-webkit-"],
["-moz-osx-font-smoothing", "-webkit-app-region",
"-webkit-text-size-adjust", "animation",
"column-count", "hyphens", "justify-items",
"text-align-last", "text-emphasis",
"text-orientation"],
["caughtException", "userAgentStyleHash"], [],
["global"], ["pageXOffset", "pageYOffset"],
["fonts", "version"],
["callable", "documentElement", "exists", "falsy",
"nullish", "type"], ["foreignElements", "links"],
["innerText", "tagName", "xpath"], [
"d83d-dc69-d83c-dffb-200d-2764-fe0f-200d-d83d-dc69-d83c-dffe",
"d83d-dd2b", "d83d-ddfe", "d83d-decd",
"d83e-dd16", "d83e-dd8b"], ["alpha", "colors"],
["avg", "count", "volume"], ["b", "g", "r"],
["emptyReferrer", "historyLength"],
["completeness", "id", "seen"],
["keyDown", "keyPress", "keyUp"],
["altKey", "ctrlKey", "eventType",
"instanceOfUIEvent", "keyCode", "markedAsTrusted",
"metaKey", "sequenceNumber", "shiftKey", "target",
"timestamp"],
["eventType", "keyCode", "modifierKeys",
"sequenceNumber", "target", "timestamp"],
["language", "languages"],
["hash", "mathProperties"],
["mouseClick", "mouseDown", "mouseMove",
"mouseUp"],
["button", "eventType", "instanceOfUIEvent",
"markedAsTrusted", "oX", "oY", "sequenceNumber",
"target", "timestamp", "x", "y"],
["button", "eventType", "instanceOfUIEvent",
"markedAsTrusted", "target", "timestamp", "x",
"y"], ["mouseButtonEvents", "mouseMoveEvents"],
["button", "eventType", "sequenceNumber", "target",
"timestamp", "x", "y"], ["recent", "throttled"],
["eventType", "timestamp", "x", "y"],
["argumentsValue", "hasArguments", "hasGlobal",
"hasProcess"], ["nonce"],
["avgAlpha", "avgBeta", "avgGamma", "avgInterval",
"numOrientationEvents", "stdDevAlpha",
"stdDevBeta", "stdDevGamma", "stdDevInterval"],
["connectStart", "domComplete",
"domContentLoadedEventEnd",
"domContentLoadedEventStart", "domInteractive",
"domLoading", "loadEventEnd", "loadEventStart",
"requestStart", "responseEnd", "responseStart"],
["statuscode", "value"],
["document", "documentBody", "external", "global",
"navigator"],
["ActiveXObject", "ApplePaySession", "File",
"Int8Array", "MutationObserver", "Notification",
"PushManager", "SharedWorker", "TouchEvent",
"XDomainRequest", "_Selenium_IDE_Recorder",
"__fxdriver_unwrapped", "_phantom",
"addEventListener", "attachEvent", "awesomium",
"callPhantom", "createPopup", "detachEvent",
"dispatchEvent", "domAutomationController",
"event", "external", "fireEvent", "frames",
"getComputedStyle", "globalStorage",
"localStorage", "mozRTCPeerConnection",
"mozRequestAnimationFrame", "phantom",
"postMessage", "registerProtocolHandler",
"removeEventListener", "requestAnimationFrame",
"sessionStorage", "sidebar",
"webkitRTCPeerConnection",
"webkitRequestAnimationFrame",
"webkitResolveLocalFileSystemURL"],
["$cdc_asdjflasutopfhvcZLmcfl_",
"_Selenium_IDE_Recorder", "__fxdriver_unwrapped",
"__webdriver_script_fn", "all", "characterSet",
"charset", "compatMode", "documentMode",
"getElementById", "getElementsByClassName",
"hasAttributes", "images", "layers",
"querySelector"],
["contextMenu", "innerHTML", "innerText",
"mozRequestFullScreen", "requestFullScreen",
"webdriver", "webkitRequestFullScreen"],
["vibrate"], ["Sequentum"],
["crypto", "document", "documentBody", "external",
"global", "navigator"],
["ActiveXObject", "ApplePaySession",
"BluetoothUUID", "File", "MutationObserver",
"Notification", "PushManager", "SharedWorker",
"TouchEvent", "XDomainRequest",
"_Selenium_IDE_Recorder", "__fxdriver_unwrapped",
"_phantom", "attachEvent", "callPhantom",
"createPopup", "detachEvent", "event", "external",
"fireEvent", "frameElement", "globalStorage",
"localStorage", "mozRTCPeerConnection",
"mozRequestAnimationFrame", "netscape", "phantom",
"postMessage", "registerProtocolHandler",
"requestAnimationFrame", "sessionStorage",
"sidebar", "webkitRTCPeerConnection",
"webkitRequestAnimationFrame",
"webkitResolveLocalFileSystemURL"],
["$cdc_asdjflasutopfhvcZLmcfl_",
"_Selenium_IDE_Recorder", "__fxdriver_unwrapped",
"__webdriver_script_fn", "all", "characterSet",
"charset", "compatMode", "documentMode", "images",
"layers"], ["contextMenu", "innerText",
"mozRequestFullScreen",
"requestFullScreen",
"webkitRequestFullScreen"],
["bluetooth", "credentials",
"requestMediaKeySystemAccess", "storage",
"vibrate", "webdriver"], ["subtle"],
["global", "locationbar", "navigator",
"operaVersion", "screen", "toolbar"],
["devicePixelRatio", "innerHeight", "innerWidth",
"isSecureContext", "outerHeight", "outerWidth",
"screenX", "screenY"],
["availHeight", "availWidth", "colorDepth",
"height", "pixelDepth", "width"],
["appCodeName", "appName", "appVersion", "buildID",
"cpuClass", "doNotTrack", "hardwareConcurrency",
"maxTouchPoints", "oscpu", "platform", "product",
"productSub", "userAgent", "vendor", "vendorSub",
"webdriver"], ["ip", "model"],
["constructor", "lastChance"], ["events"],
["accuracy", "timestamp", "x", "y", "z"],
["level", "powerSource", "status", "technology",
"temp", "voltage"],
["androidId", "board", "deviceBrand",
"deviceModel", "deviceModelNumber", "hardware",
"hardwareName", "manufacturer",
"osBuildFingerprint", "osBuildNumber", "osName",
"osVersion", "product", "serial"],
["availableRam", "availableStorage", "totalRam",
"totalStorage"],
["bignox", "bluestacks", "genymotion",
"superuser"], ["kernelPatch"],
["country", "currency", "language", "timezone"],
["accuracy", "distance", "timestamp"],
["density", "height", "width"],
["configId", "errorArray", "kernelId", "kernelURI",
"kernelUpdateHeaderName", "lastErrorCount",
"lastErrorId", "lastErrorTimestamp",
"timeSinceLastRequest"],
["jvmVersion", "osArch", "osName", "osVersion"],
["timestamp", "x", "y", "z"], ["level", "status"],
["appBundleName", "appInstallId", "appVersion",
"cfBundleInfo", "deviceBrand", "deviceModel",
"deviceModelNumber", "intAppVersion", "osType",
"osVersion", "sdkVersion"],
["availableStorage", "numCores", "timestamp",
"totalRam", "uptimeSinceBoot"],
["brightness", "density", "height", "width"],
["hw.cputype", "hw.model", "hw.physicalcpu",
"kern.boottime", "kern.hostname", "kern.proc",
"kern.version"], ["appdir"], ["jailbreak"],
["data", "mnt", "storage"],
["eth0", "p2p0", "wlan0"], ["root"],
["cpuinfo", "date", "uname", "whoami"],
["net.hostname", "ro.boot.boottime",
"ro.build.date.utc", "ro.build.fingerprint",
"ro.runtime.firstboot", "serialno"],
["afterReady", "immediately", "lastChance"],
["InstallTrigger", "controllers"],
["status", "value"],
["bodyAttribute", "scriptPresent"], ["hash"],
["description", "message", "name", "num", "stack",
"stacktrace"],
["length", "punctuators", "whitespace"],
["touchEnd", "touchMove", "touchStart"],
["eventType", "timestamp", "touches"],
["oX", "oY", "x", "y"], ["x", "y"],
["3gpp; codecs=\"mp4v.20.8, samr\"",
"mp2t; codecs=\"avc1.42E01E,mp4a.40.2\"", "mp4",
"mp4; codecs=\"avc1.42c00d\"",
"mp4; codecs=\"avc1.64001E, mp4a.40.2\"",
"mp4; codecs=\"mp4v.20.8, mp4a.40.2\"",
"mp4; codecs=bogus", "mp4; codecs=mp4a.40.2",
"mpeg", "ogg; codecs=\"theora, speex\"",
"ogg; codecs=opus", "ogg; codecs=speex",
"ogg; codecs=theora", "wav; codecs=\"0\"",
"wav; codecs=\"1\"", "wav; codecs=\"2\"", "wave",
"wave; codecs=0", "wave; codecs=1",
"wave; codecs=2", "webm; codecs=\"vorbis,vp9\"",
"webm; codecs=\"vp8, vorbis\"",
"webm; codecs=vorbis", "x-mpeg", "x-mpegurl"],
["events", "finalState", "initialState",
"visibilityEventCount"], ["timestamp", "visible"],
["contextProperties", "parameters",
"shaderPrecisions", "supportedExtensions"],
["antialias", "debugInfo", "dimensions",
"maxAnisotropy", "params"],
["alphaBits", "blueBits", "depthBits", "greenBits",
"maxCombinedTextureImageUnits",
"maxCubeMapTextureSize",
"maxFragmentUniformVectors",
"maxRenderbufferSize", "maxTextureImageUnits",
"maxTextureSize", "maxVaryingVectors",
"maxVertexAttribs", "maxVertexTextureImageUnits",
"maxVertexUniformVectors", "redBits", "renderer",
"shadingLanguageVersion", "stencilBits", "vendor",
"version"], ["renderer", "vendor"],
["candidate", "ip"],
["hasSpeechSynthesis", "voiceData"],
["hash", "match", "noOfDefaultVoices",
"noOfVoices", "relLang", "relVoiceUri"],
["bursts", "events"], ["errors", "signals"]])
return self.encode(data)
def getheaders(self):
x = {}
x[self.headernameprefix + UUID_TOKEN_KEY] = self.uuidtoken
x[self.headernameprefix + BUNDLE_ID_KEY] = "o_0"
x[self.headernameprefix + BUNDLE_SEED_KEY] = self.bundleseed
m = self.generatedata()
x[self.headernameprefix + PAYLOAD_KEY] = m
x[self.headernameprefix + INTEGRITY_KEY] = base36(simplehash(self.uuidtoken + m))
x[self.headernameprefix + FIRMWARE_KEY] = "p"
return x
......@@ -656,7 +656,7 @@ Object.defineProperties(HTMLMediaElement.prototype, {
canPlayType: {
value: v_saf(function canPlayType() {
v_console_log(" [*] HTMLMediaElement -> canPlayType[func]", [].slice.call(arguments));
let values = {'audio/aac; codecs="flac"':'',
let mediaResult = {'audio/aac; codecs="flac"':'',
'audio/flac':'probably',
'audio/mpeg; codecs="mp3"':"probably",
'audio/mpeg; codecs="vp9"':"",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment